Annotation of 43BSD/usr.bin/struct/1.form.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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