Annotation of 3BSD/cmd/struct/1.form.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include "1.defs.h"
                      3: #include "def.h"
                      4: extern int linechar, errflag, debug;
                      5: extern int (*input)(), (*unput)();
                      6: 
                      7: 
                      8: 
                      9: uptolow(c)             /*translates upper to lower case */
                     10: int c;
                     11:        {
                     12:        if ('A' <= c && c <= 'Z')
                     13:                return(c+'a'-'A');
                     14:        else
                     15:                return(c);
                     16:        }
                     17: 
                     18: rdfree(func)
                     19: int (*func)();
                     20:        {
                     21:        int c;
                     22:        while ( (c = (*input)()) != '\n')
                     23:                {
                     24:                (*func)(c);
                     25:                }
                     26:        }
                     27: 
                     28: rdstand(func)
                     29: int (*func)();
                     30:        {
                     31:        int c;
                     32:        while ( (c=(*input)()) != '\n')
                     33:                {
                     34:                (*func)(c);
                     35:                }
                     36:        }
                     37: 
                     38: labfree(func)                  /* labels in freeform input */
                     39: int (*func)();
                     40:        {
                     41:        int c;
                     42:        int temp[6];
                     43:        int j;
                     44:        for (j = 0; j < 5; ++j)
                     45:                {
                     46:                while ( (c = (*input)()) == ' ' || c == '\t' );
                     47:                if (c == '\n')
                     48:                        {
                     49:                        if (j != 0)
                     50:                                {
                     51:                                temp[j] = '\0';
                     52:                                error("label without code - ignored:","","");
                     53:                                }
                     54:                        }
                     55:                if (c < '0' || c > '9')
                     56:                        {
                     57:                        (*unput)(c);
                     58:                        break;
                     59:                        }
                     60:                else
                     61:                        {
                     62:                        temp[j] = c;
                     63:                        (*func)(c);
                     64:                        }
                     65:                }
                     66:        for ( ; j < 5; ++j)
                     67:                (*func)(' ');
                     68:        }
                     69: 
                     70: labstand(func)                 /* labels in standard form input */
                     71: int (*func)();
                     72:        {
                     73:        int c;
                     74:        int j;
                     75: 
                     76:        for (j = 0; j < 5; ++j)
                     77:                {
                     78:                c = (*input)();
                     79:                if (c == '\n')
                     80:                        {
                     81:                        error("line shorter than 5 characters","","");
                     82:                        errflag = 1;
                     83:                        (*unput)('\n');
                     84:                        }
                     85:                if (c == '\t' || c == '\n')
                     86:                        {
                     87:                        for ( ;j<5; ++j)
                     88:                                (*func)(' ');
                     89:                        return;
                     90:                        }
                     91:                (*func)(c);
                     92:                }
                     93:        (*input)();                     /* throw away continuation char */
                     94:        }
                     95: 
                     96: 
                     97: 
                     98: contfree()                     /* identify continuation lines in free-form input */
                     99:        {
                    100:        return(nonblchar(_diglet,0));   /* any non-alpha non-digit */
                    101:        }
                    102: 
                    103: 
                    104: nonblchar(class,yesno)
                    105: int class,yesno;
                    106:        {
                    107: #define CARDSIZE       121
                    108:        int temp[CARDSIZE];
                    109:        int j;
                    110:        for (j=0; (temp[j]=(*input)()) == ' ' || temp[j] == '\t'; ++j)
                    111:                if (j>=CARDSIZE-1)
                    112:                        {
                    113:                        temp[CARDSIZE-1] = '\0';
                    114:                         error ("line unexpectedly long","","");
                    115:                        break;
                    116:                        }
                    117:        if (temp[j]!=EOF && classmatch(temp[j],class)==yesno)
                    118:                return(1);
                    119:        else
                    120:                {
                    121:                for ( ; j >= 0; --j)
                    122:                        (*unput)(temp[j]);
                    123:                return(0);
                    124:                }
                    125:        }
                    126: 
                    127: 
                    128: contstand()                    /* continuation lines in standard form input */
                    129:        {
                    130:        int temp[6];
                    131:        int i;
                    132: 
                    133:        for (i = 0; i < 6; ++i)
                    134:                {
                    135:                temp[i] = (*input)();
                    136:                if (temp[i] == '\t' || temp[i] == '\n' || temp[i] == '\0' || temp[i] == EOF)
                    137:                        {
                    138:                        for ( ;i >= 0; --i)
                    139:                                (*unput)(temp[i]);
                    140:                        return(0);
                    141:                        }
                    142:                }
                    143:        if (temp[5] != '0' && temp[5] != ' ')
                    144:                return(1);
                    145:        else
                    146:                {
                    147:                for ( i = 5 ; i >= 0; --i)
                    148:                        (*unput)(temp[i]);
                    149:                return(0);
                    150:                }
                    151:        }
                    152: 
                    153: 
                    154: 
                    155: comstand(posafter)                     /* standard form comments */
                    156: int posafter;
                    157:        {
                    158:        int c;
                    159:        c = (*input)();
                    160:        if (!posafter)
                    161:                (*unput)(c);
                    162:        if (c == 'c' || c == '*' || c== '#')
                    163:                return(1);
                    164:        else
                    165:                return(0);
                    166:        }
                    167: 
                    168: 
                    169: comfree(posafter)
                    170: int posafter;
                    171:        {
                    172:        return(comstand(posafter));
                    173:        }
                    174: int (*rline[])()               = {rdfree,rdstand};
                    175: int (*comment[])()             = {comfree,comstand};
                    176: int (*getlabel[])()            = {labfree, labstand};
                    177: int (*chkcont[])()             = {contfree,contstand};
                    178: 
                    179: blankline()
                    180:        {
                    181:        if ( nonblchar(_nl,1) )         /* first non-blank is nl */
                    182:                {
                    183:                (*unput) ('\n');
                    184:                return(1);
                    185:                }
                    186:        else return(0);
                    187:        }
                    188: 
                    189: #define maxunbp        80
                    190: char unbuf[maxunbp+1];
                    191: int unbp;
                    192: 
                    193: empseek(linebeg)
                    194: int linebeg;
                    195:        {
                    196:        unbp = 0;
                    197:        if (fseek(infd,(long)(linebeg+rtnbeg),0) == -1)
                    198:                faterr("in disk seek","","");
                    199:        }
                    200: 
                    201: inchar()
                    202:        {
                    203:        if (unbp > 0)
                    204:                return( unbuf[--unbp] );
                    205:        else
                    206:                {
                    207:                return( uptolow(getc(infd)) );
                    208:                }
                    209:        }
                    210: 
                    211: 
                    212: unchar(c)
                    213: int c;
                    214:        {
                    215:        if (unbp >= maxunbp)
                    216:                faterr("dec.rat: unbuf size exceeded","","");
                    217:        if(c!=EOF)unbuf[unbp++] = c;
                    218:        }

unix.superglobalmegacorp.com

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