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

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)1.line.c   4.1     (Berkeley)      2/11/83";
                      3: #endif not lint
                      4: 
                      5: #include <stdio.h>
                      6: #
                      7: #include "def.h"
                      8: #define bufsize 1601
                      9: char buffer[bufsize];
                     10: int bufcount;
                     11: extern int errflag;
                     12: long stchars;                  /* counts number of chars at most recent \n read */
                     13: #ifndef unix
                     14: long ostchars;
                     15: extern long ftell();
                     16: #endif
                     17: int newline;                   /* counts number of lines read so far in file */
                     18: extern int rdfree(), comfree(),labfree(), contfree();
                     19: extern int rdstand(), comstand(), labstand(), contstand();
                     20: extern int (*rline[])();
                     21: extern int (*comment[])();
                     22: extern int (*getlabel[])();
                     23: extern int (*chkcont[])();
                     24: 
                     25: 
                     26: 
                     27: flush()
                     28:        {bufcount = 0; }
                     29: 
                     30: addchar(c)
                     31:        {
                     32:        buffer[bufcount++] = c;
                     33:        }
                     34: 
                     35: getline(lastline,lastchar,linecom,charcom)
                     36: int *lastline, *linecom;
                     37: long *lastchar, *charcom;
                     38:                                /* set *lastline to number of last line of statement,
                     39:                                set *lastchar to number of last char of statement,
                     40:                                set *linecom to number of last line of comment preceding statement */
                     41:        {
                     42: 
                     43:        int i;
                     44:        flush();
                     45:        while ( unput1(input1()) != EOF)
                     46:                {
                     47:                while ( (*comment[inputform])(0)  || blankline() )
                     48:                        {
                     49:                        (*rline[inputform])(addchar);
                     50:                        flush();
                     51:                        }
                     52:                *linecom = newline;
                     53:                        /* set charcom to number of last char of comment, starting at 0
                     54:                                        if at start of file and no comment, will be -1  */
                     55:                *charcom = stchars - 1;
                     56:                if (unput1(input1()) == EOF)  break;
                     57:                (*getlabel[inputform])(addchar);
                     58:                (*rline[inputform])(addchar);
                     59:        
                     60:                while ( blankline() || ( !(*comment[inputform])(0) &&  (*chkcont[inputform])() ))
                     61:                        (*rline[inputform])(addchar);
                     62:        
                     63:                addchar('\0');
                     64:                *lastline = newline;
                     65:                *lastchar = stchars - 1;
                     66: if (debug == 40)
                     67: fprintf(stderr,"line %d; bufcount: %d\n",newline,bufcount);
                     68:        
                     69:                for (i = 5; i < bufcount; ++i)
                     70:                        if (buffer[i] == ' ' || buffer[i] == '\t' || buffer[i] == '\n')
                     71:                                buffer[i] = '~';
                     72:                return(bufcount);
                     73:                }
                     74:        return(-1);
                     75:        }
                     76: 
                     77: 
                     78: int linechars;                 /* counts number of chars read so far in current line */
                     79: long newchar;                  /* counts number of chars read so far in file */
                     80: 
                     81: 
                     82: input1()
                     83:        {
                     84:        static int c;
                     85:        if (c == '\n') linechars = 0;
                     86:        c = inchar();
                     87:        ++linechars;
                     88:        ++newchar;
                     89:        if (c == '\n')
                     90:                {
                     91:                ++newline;
                     92: #ifdef unix
                     93:                stchars = newchar; 
                     94: #else
                     95:                ostchars=stchars; stchars=ftell(infd);
                     96: #endif
                     97:                }
                     98:        return(c);
                     99:        }
                    100: 
                    101: unput1(c)
                    102:        {
                    103:        --linechars;
                    104:        --newchar;
                    105:        unchar(c);
                    106:        if (c == '\n')
                    107:                {
                    108: #ifdef unix
                    109:                stchars = newchar; 
                    110: #else
                    111:                stchars=ostchars;
                    112: #endif
                    113:                --newline;
                    114:                }
                    115:        return(c);
                    116:        }
                    117: 
                    118: 
                    119: 
                    120: 

unix.superglobalmegacorp.com

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