Annotation of 43BSDTahoe/new/bib/src/streams.c, revision 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.