Annotation of 43BSDTahoe/new/bib/src/streams.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)streams.c  2.4     3/5/87";
                      3: #endif not lint
                      4: #
                      5: 
                      6: # include "stdio.h"
                      7: # include "streams.h"
                      8: # include "ctype.h"
                      9: 
                     10: /*  getword(stream,p,ignore):
                     11:         read next sequence of nonspaces on current line into *p.
                     12:     null if no more words on current line.
                     13:     %x (x in ignore) terminates line and any following non-blank lines that
                     14:        don't begin with '%'
                     15:     all words of the form %a are returned as null.
                     16:     *p is a null terminated string (char p[maxstr]).
                     17: */
                     18: getword(stream,p,ignore)
                     19: FILE *stream;
                     20: char *p, *ignore;
                     21: {   char c;
                     22:     char *oldp, *stop;
                     23:     long save;
                     24: 
                     25:     oldp= p;
                     26:     stop= p+maxstr-1;
                     27:     do{ c= getc(stream);
                     28:     }   while (isspace(c) && c!='\n');
                     29: 
                     30:     while (!isspace(c))
                     31:     {   *p= c;
                     32:         if (p < stop)  p++;
                     33:         c= getc(stream);
                     34:     }
                     35:     *p= NULL;
                     36: 
                     37:     if (oldp[0]=='%')
                     38:     {   oldp[0]= NULL;
                     39:         if (index(ignore, oldp[1]) != NULL)
                     40:        {   do{ while (c!='\n') c=getc(stream);
                     41:                 save= ftell(stream);
                     42:                 c= getc(stream);
                     43:            }   while (c!= EOF && !isspace(c) && c!='%');
                     44:             pos(save);
                     45:        }
                     46:     }
                     47: }
                     48: 
                     49: 
                     50: 
                     51: /*  recsize(stream,start):
                     52:     returns length of record beginning at start
                     53:     (record ends at blank line or eof)
                     54:     assumes and retains stream positioned at start
                     55: */
                     56: long int recsize(stream,start)
                     57: FILE *stream;
                     58: long int start;
                     59: {   char c;                 /*  length = # of chars from start to beginning */
                     60:     long int length;        /*  of current line.  c in current line.        */
                     61:     int nonspaces;          /*  nonspaces = # of nonspaces in current line. */
                     62: 
                     63:     nonspaces= 0;
                     64:     c= getc(stream);
                     65:     length= 0L;
                     66: 
                     67:     while ( (c!='\n' || nonspaces!=0) && c!=EOF)
                     68:     {   if      (c=='\n')
                     69:         {   length= ftell(stream)-start;
                     70:             nonspaces= 0;
                     71:         }
                     72:         else if (!isspace(c))    nonspaces++;
                     73: 
                     74:         c= getc(stream);
                     75:     }
                     76: 
                     77:     pos(start);
                     78:     return(length);
                     79: }
                     80: 
                     81: 
                     82: /*  nextrecord(stream,x): seeks in stream for first non-blank line
                     83:         at or after char x in stream. seeks to eof if x is past last record.
                     84:         x is the index of a character in the file (not eof).
                     85:     returns position in stream.  (returns EOF, if seeks to EOF)
                     86: */
                     87: long int nextrecord(stream,x)
                     88: FILE *stream;
                     89: long int x;
                     90: {   long int start;         /*  position of the beginning of the line  */
                     91:     char c;                 /*      containing c                       */
                     92: 
                     93:     pos(x);
                     94:     start= x;
                     95:     /*  find start of first non-blank record        */
                     96:         c= getc(stream);
                     97:         for(;;)
                     98:         {   if      (c=='\n')          {start= ftell(stream); c= getc(stream);}
                     99:             else if (c=='#')           while (c!='\n') c=getc(stream);
                    100:             else if (!isspace(c))      break;
                    101:             else                       c= getc(stream);
                    102:         }
                    103: 
                    104:     if (feof(stream))   { pos(start);  start= EOF;  }
                    105:     else                pos(start);
                    106:     return(start);
                    107: }
                    108: 
                    109: /*  nextline(stream,x): seeks in stream after first newline at or after
                    110:         char x in stream. seeks to eof if x is in last line.
                    111:         x is the index of a character in the file (not eof).
                    112:     returns position in stream
                    113: */
                    114: long int nextline(stream,x)
                    115: FILE *stream;
                    116: long int x;
                    117: {   pos(x);
                    118:     while (getc(stream)!='\n') ;
                    119:     return(ftell(stream));
                    120: }
                    121: 
                    122: 
                    123: /*  printline(stream): copies stream up to a newline
                    124: */
                    125: printline(stream)
                    126: FILE *stream;
                    127: {   char c;
                    128:     while ((c=getc(stream)) != '\n' && c!=EOF)  putchar(c);
                    129:     putchar('\n');
                    130: }
                    131: 
                    132: /*  getline(stream,p):  store in *p next chars in stream up to \n
                    133:         advance stream past \n.
                    134:     limit of  maxstr-1 chars may be stored at p.
                    135: */
                    136: getline(stream,p)
                    137: FILE *stream;
                    138: char *p;
                    139: {   char *stop;
                    140:     stop= p+maxstr-1;
                    141:     while ( (*p= getc(stream)) != '\n' && *p!=EOF)
                    142:         if (p<stop)    p++;
                    143:     *p= NULL;
                    144: }
                    145: 
                    146: /* replace string old at the head of subj by new */
                    147: strreplace(subj, old, new)
                    148:        char *subj, *old, *new;
                    149: {
                    150:        char buf[128];
                    151:        int lg;
                    152:        strcpy(buf, &subj[strlen(old)]);
                    153:        strcpy(subj, new);
                    154:        strcat(subj, buf);
                    155: }

unix.superglobalmegacorp.com

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