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