home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / gcc / ixemulsrc.lha / ixemul / utils / scheck.c < prev    next >
C/C++ Source or Header  |  1996-12-11  |  1KB  |  63 lines

  1. #ifndef lint
  2. #ifndef NOID
  3. static char    elsieid[] = "@(#)scheck.c    8.13";
  4. #endif /* !defined lint */
  5. #endif /* !defined NOID */
  6.  
  7. /*LINTLIBRARY*/
  8.  
  9. #include "private.h"
  10.  
  11. extern char *    imalloc P((int n));
  12. extern void    ifree P((char * p));
  13.  
  14. char *
  15. scheck(string, format)
  16. const char * const    string;
  17. char * const        format;
  18. {
  19.     register char *        fbuf;
  20.     register const char *    fp;
  21.     register char *        tp;
  22.     register int        c;
  23.     register char *        result;
  24.     char            dummy;
  25.     static char        nada;
  26.  
  27.     result = &nada;
  28.     if (string == NULL || format == NULL)
  29.         return result;
  30.     fbuf = imalloc((int) (2 * strlen(format) + 4));
  31.     if (fbuf == NULL)
  32.         return result;
  33.     fp = format;
  34.     tp = fbuf;
  35.     while ((*tp++ = c = *fp++) != '\0') {
  36.         if (c != '%')
  37.             continue;
  38.         if (*fp == '%') {
  39.             *tp++ = *fp++;
  40.             continue;
  41.         }
  42.         *tp++ = '*';
  43.         if (*fp == '*')
  44.             ++fp;
  45.         while (is_digit(*fp))
  46.             *tp++ = *fp++;
  47.         if (*fp == 'l' || *fp == 'h')
  48.             *tp++ = *fp++;
  49.         else if (*fp == '[')
  50.             do *tp++ = *fp++;
  51.                 while (*fp != '\0' && *fp != ']');
  52.         if ((*tp++ = *fp++) == '\0')
  53.             break;
  54.     }
  55.     *(tp - 1) = '%';
  56.     *tp++ = 'c';
  57.     *tp = '\0';
  58.     if (sscanf(string, fbuf, &dummy) != 1)
  59.         result = (char *) format;
  60.     ifree(fbuf);
  61.     return result;
  62. }
  63.