Annotation of researchv10no/cmd/movie/fdutil.c, revision 1.1.1.1

1.1       root        1: /* util.c: utility routines */
                      2: 
                      3: #include "fdevelop.h"
                      4: #include <ctype.h>
                      5: 
                      6: error(f, s)
                      7:        int f;
                      8:        char *s;
                      9: {
                     10:        fprintf(stderr, "%s: %s\n", cmdname, s);
                     11:        if (lineno)
                     12:                fprintf(stderr, " source line number %d\n", lineno);
                     13:        if (f)
                     14:                exit(2);
                     15: }
                     16: 
                     17: int strisnum(p)                /* 1 if string p represents a float */
                     18:        register char *p;
                     19: {
                     20:        register int digits = 0;
                     21:        register int n;
                     22:                                                /* REG EXPR:    */
                     23:        if (*p == '-')                          /* -?           */
                     24:                p++;
                     25:        while (isdigit(*p)) {
                     26:                digits++;                       /* [0-9]*       */
                     27:                p++;
                     28:        }
                     29:        if (*p == '.') {                        /* (.[0-9]*)?   */
                     30:                p++;
                     31:                while (isdigit(*p)) {
                     32:                        digits++;
                     33:                        p++;
                     34:                }
                     35:        }
                     36:        if (digits == 0)                        /* >0 digits    */
                     37:                return 0;
                     38:        if (tolower(*p) == 'e') {               /* ([eE]        */
                     39:                *p++;
                     40:                if (*p == '+' || *p == '-')     /*  [+-]?       */
                     41:                        p++;
                     42:                digits = 1;
                     43:                if (!isdigit(*p))               /*  [0-9]       */
                     44:                        return 0;
                     45:                n = *p++ - '0';
                     46:                while (isdigit(*p)) {           /*  [0-9]+      */
                     47:                        digits++;
                     48:                        n = 10*n + *p++ - '0';
                     49:                        if (n > 30)
                     50:                                return 0;
                     51:                }
                     52:                if (digits == 0)
                     53:                        return 0;               /*        )?    */
                     54:        }
                     55:        return (*p == '\0');
                     56: }
                     57: 
                     58: int moreinput(fp)
                     59:        FILE *fp;
                     60: {
                     61:        int c;
                     62: 
                     63:        if (lexsaweof)
                     64:                return 0;
                     65:        c = getc(fp);
                     66:        if (c == EOF)
                     67:                return 0;
                     68:        ungetc(c, fp);
                     69:        return 1;
                     70: }
                     71: 
                     72: #define CHECKEOF               if (c == EOF) {\
                     73:                lexsaweof = 1;\
                     74:                error(WARN, "file does not end with newline");\
                     75:                return;\
                     76:        }
                     77: 
                     78: 
                     79: lex(fp)                /* put next string of non-white into buf */
                     80:        register FILE *fp;
                     81: {
                     82:        register int c;
                     83:        register char *p, *danger;
                     84: 
                     85:        danger = &buf[MAXSTR-1];
                     86:        while ((c = getc(fp)) == ' ' || c == '\t')
                     87:                ;
                     88:        CHECKEOF
                     89:        if (c == '\n') {
                     90:                ungetc(c, fp);
                     91:                buf[0] = '\0';
                     92:                return;
                     93:        }
                     94:        p = buf;
                     95:        *p++ = c;
                     96:        while ((c = getc(fp)) != EOF && c != ' ' && c != '\t' && c != '\n') {
                     97:                if (p < danger) 
                     98:                        *p++ = c;
                     99:                else if (p == danger)
                    100:                        error(WARN, "string too long -- truncated");
                    101:        }
                    102:        *p = '\0';
                    103:        CHECKEOF
                    104:        if (c == '\n')
                    105:                ungetc(c, fp);
                    106: /* fprintf(stderr, "lex returning: %s\n", buf); */
                    107: }
                    108: 
                    109: 
                    110: lexstr(fp)             /* like lex, but go til newline and handle quotes */
                    111:        FILE *fp;
                    112: {
                    113:        int c;
                    114:        int quoted = 0;
                    115:        char *p, *danger;
                    116: 
                    117:        while ((c = getc(fp)) == ' ' || c == '\t')
                    118:                ;
                    119:        CHECKEOF
                    120:        if (c == '\"') {
                    121:                quoted = 1;
                    122:                c = getc(fp);
                    123:                CHECKEOF
                    124:        }
                    125:        if (c == '\n') {
                    126:                buf[0] = '\0';
                    127:                return;
                    128:        }
                    129:        p = buf;
                    130:        *p++ = c;
                    131:        danger = &buf[MAXBUF-1];
                    132:        while ((c = getc(fp)) != EOF && c != '\n') {
                    133:                if (p < danger) 
                    134:                        *p++ = c;
                    135:                else if (p == danger)
                    136:                        error(WARN, "text string too long -- truncated");
                    137:        }
                    138:        CHECKEOF
                    139:        *p = '\0';
                    140:        if (quoted && *(--p) == '\"')
                    141:                *p = '\0';
                    142: }
                    143: 
                    144: lexrest(fp)            /* get rest of line into buf */
                    145:                        /* no error checking; error free from Pass 1 */
                    146:        FILE *fp;
                    147: {
                    148:        int c;
                    149:        char *p;
                    150: 
                    151:        p = buf;
                    152:        while ((c = getc(fp)) != EOF && c != '\n') {
                    153:                *p++ = c;
                    154:        }
                    155:        *p = '\0';
                    156: }
                    157: 
                    158: gobble(fp)             /* chew space til EOF; complain if nonwhite */
                    159:        FILE *fp;
                    160: {
                    161:        int c;
                    162: 
                    163:        while ((c = getc(fp)) == ' ' || c == '\t')
                    164:                ;
                    165:        CHECKEOF
                    166:        if (c != '\n') {
                    167:                error(WARN, "garbage at end of line");
                    168:                while ((c = getc(fp)) != EOF && c != '\n')
                    169:                        ;
                    170:                CHECKEOF
                    171:        }
                    172: }
                    173: 
                    174: gobble2(fp)            /* chew space til EOF, no complaints */
                    175:        FILE *fp;
                    176: {
                    177:        int c;
                    178: 
                    179:        while ((c = getc(fp)) != EOF && c != '\n')
                    180:                ;
                    181:        CHECKEOF
                    182: }
                    183: 
                    184: #define WANTPROF 0
                    185: #if WANTPROF
                    186:        int     hmallocinit;
                    187:        FILE    *hmallocfp;
                    188: #endif
                    189: 
                    190: char *emalloc(n)       /* check return from malloc */
                    191:        int n;
                    192: {
                    193:        char *p;
                    194:        extern char *malloc();
                    195: 
                    196: #if WANTPROF
                    197:        if (hmallocinit == 0) {
                    198:                hmallocinit = 1;
                    199:                if ((hmallocfp = fopen("/tmp/malloc.hist", "w")) == NULL)
                    200:                        error(FATAL, "malloc history bug: can't open file");
                    201:        }
                    202: #endif
                    203:        p = malloc((unsigned) n);
                    204:        if (p == NULL)
                    205:                error(FATAL, "out of memory");
                    206: #if WANTPROF
                    207:        fprintf(hmallocfp, "m\t%d\t%d\n", (int) p, n);
                    208: #endif
                    209:        return p;
                    210: }
                    211: 
                    212: efree(p)               /* personal version of free to match emalloc */
                    213:        char *p;
                    214: {
                    215: #if WANTPROF
                    216:        if (hmallocinit == 0)
                    217:                error(FATAL, "malloc history bug: first free before malloc");
                    218:        fprintf(hmallocfp, "f\t%d\n", (int) p);
                    219: #endif
                    220:        free(p);
                    221: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.