Annotation of 40BSD/cmd/struct/1.form.c, revision 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.