reader_util.c.svn-base
上传用户:holyzs
上传日期:2022-06-29
资源大小:2335k
文件大小:4k
源码类别:

编辑器/阅读器

开发平台:

C/C++

  1. #include <ctype.h>
  2. #include <reader_core.h>
  3. int reader_itoa(int val, unsigned short *buf)
  4. {
  5.   unsigned short *p;
  6.   unsigned short *firstdig;
  7.   unsigned short temp;
  8.   unsigned digval;
  9.   int digits = 0;
  10.   
  11.   p = buf;
  12.   
  13.   firstdig = p;
  14.   
  15.   do {
  16.     digval = (unsigned) (val % 10);
  17.     val /= 10;
  18.     *p++ = (unsigned short) (digval + '0');
  19.     digits++;
  20.   } while (val > 0);
  21.   
  22.   //reverse string
  23.   p--;
  24.   do {
  25.     temp = *p;
  26.     *p = *firstdig;
  27.     *firstdig = temp;
  28.     --p;
  29.     ++firstdig;
  30.   } while (firstdig < p);
  31.   return digits;
  32. }
  33. int reader_atoi(const unsigned short *nptr)
  34. {
  35.   int c;              /* current char */
  36.   int total;         /* current total */
  37.   int sign;           /* if '-', then negative, otherwise positive */
  38.   
  39.   c = (int)*nptr++;
  40.   sign = c;           /* save sign indication */
  41.   if (c == '-' || c == '+')
  42.     c = (int)(unsigned char)*nptr++;    /* skip sign */
  43.   
  44.   total = 0;
  45.   
  46.   while (isdigit(c)) {
  47.     total = 10 * total + (c - '0');     /* accumulate digit */
  48.     c = (int)*nptr++;    /* get next char */
  49.   }
  50.   
  51.   if (sign == '-')
  52.     return -total;
  53.   else
  54.     return total;   /* return result, negated if necessary */
  55. }
  56. //wcs1[:n1] < wcs2[:n2], return -1
  57. //wcs1[:n1] > wcs2[:n2], return 1
  58. //wcs1[:n1] == wcs2[:n2], return 0
  59. int reader_wcscmp_n(unsigned short *wcs1, int n1, unsigned short *wcs2, int n2) {
  60.   int ret = 0;
  61.   int lim = (n1 < n2) ? n1 : n2;
  62.   int i = 0;
  63.   
  64.   while ((i < lim) && (! (ret = (int)(*wcs1 - *wcs2))) && *wcs2) {
  65.     ++wcs1; ++ wcs2; ++ i;
  66.   }
  67.   
  68.   if ( ret < 0 )
  69.     ret = -1 ;
  70.   else if ( ret > 0 )
  71.     ret = 1 ;
  72.   else {
  73.     return n1 - n2;
  74.   }
  75.   
  76.   return ret;
  77. }
  78. void reader_dbg_print_number(int x, int y, int i)
  79. {
  80. #ifdef NDS
  81.   unsigned short dbgbuf[16] = {0};
  82.   int n = reader_itoa(i, dbgbuf);
  83.   reader_textout(0, x, y, dbgbuf, n, 16);
  84.   trigger_screen_update(0);
  85. #else
  86.   printf("(%d, %d) shows %dn", x, y, i);
  87. #endif
  88. }
  89. #if ENABLE_CONSOLE
  90. void console_log(char *buf) {
  91.   unsigned short log_fn[] = {'/', 'c', 'o', 'n', 's', 'o', 'l', 'e', '.', 't', 'x', 't', 0};
  92.   fsal_file_handle_t fd;
  93.   fd = fsal_open(log_fn, "a+");
  94.   fsal_write(buf, strlen(buf), 1, fd);
  95.   fsal_write("n", 1, 1, fd);
  96.   fsal_close(fd);
  97. }
  98. #endif
  99. void reader_full_pic_name(unsigned short *out_name, unsigned short *in_name) {
  100.   reader_wcscpy(out_name, reader_path_bg);
  101.   reader_wcscat(out_name, reader_path_separator);
  102.   reader_wcscat(out_name, in_name);
  103. }
  104. //only nds device require those util functions, we can use libc on Win32 sim
  105. #ifdef NDS
  106. int reader_wcslen(unsigned short *wcs) {
  107.   int len = 0;
  108.   while (*wcs ++) len ++;
  109.   return len;
  110. }
  111. int reader_wcscmp(unsigned short *src, unsigned short *dst) {
  112.   int ret = 0 ;
  113.   
  114.   while( ! (ret = (int)(*src - *dst)) && *dst)
  115.     ++src, ++dst;
  116.   
  117.   if ( ret < 0 )
  118.     ret = -1 ;
  119.   else if ( ret > 0 )
  120.     ret = 1 ;
  121.   
  122.   return( ret );
  123. }
  124. unsigned short *reader_wcsncpy(unsigned short *dest, unsigned short *source, int count)
  125. {
  126.   unsigned short *start = dest;
  127.   
  128.   while (count && (*dest++ = *source++))    /* copy string */
  129.     count--;
  130.   
  131.   if (count)                              /* pad out with zeroes */
  132.     while (--count)
  133.       *dest++ = L'';
  134.     
  135.   return(start);
  136. }
  137. unsigned short *reader_wcscpy(unsigned short *dest, unsigned short *source)
  138. {
  139.   unsigned short *start = dest;
  140.   
  141.   while ((*dest++ = *source++));    /* copy string */
  142.   return(start);
  143. }
  144. unsigned short *reader_wcsrchr(unsigned short *string, unsigned short ch)
  145. {
  146.   unsigned short *start = (unsigned short *)string;
  147.   while (*string++)                       /* find end of string */
  148.     ;
  149.   /* search towards front */
  150.   while (--string != start && *string != ch)
  151.     ;
  152.   
  153.   if (*string == ch)
  154.     return string;
  155.   
  156.   return(NULL);
  157. }
  158. unsigned short *reader_wcscat(unsigned short *dst, unsigned short *src)
  159. {
  160.   unsigned short *cp = dst;
  161.   
  162.   while( *cp )
  163.     cp++;                   /* find end of dst */
  164.   
  165.   while( (*cp++ = *src++) != 0) ;       /* Copy src to end of dst */
  166.   
  167.   return( dst );                  /* return dst */  
  168. }
  169. #endif