|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)1.form.c 4.1 (Berkeley) 2/11/83"; ! 3: #endif not lint ! 4: ! 5: #include <stdio.h> ! 6: #include "1.defs.h" ! 7: #include "def.h" ! 8: extern int linechar, errflag, debug; ! 9: extern int (*input)(), (*unput)(); ! 10: ! 11: ! 12: ! 13: uptolow(c) /*translates upper to lower case */ ! 14: int c; ! 15: { ! 16: if ('A' <= c && c <= 'Z') ! 17: return(c+'a'-'A'); ! 18: else ! 19: return(c); ! 20: } ! 21: ! 22: rdfree(func) ! 23: int (*func)(); ! 24: { ! 25: int c; ! 26: while ( (c = (*input)()) != '\n') ! 27: { ! 28: (*func)(c); ! 29: } ! 30: } ! 31: ! 32: rdstand(func) ! 33: int (*func)(); ! 34: { ! 35: int c; ! 36: while ( (c=(*input)()) != '\n') ! 37: { ! 38: (*func)(c); ! 39: } ! 40: } ! 41: ! 42: labfree(func) /* labels in freeform input */ ! 43: int (*func)(); ! 44: { ! 45: int c; ! 46: int temp[6]; ! 47: int j; ! 48: for (j = 0; j < 5; ++j) ! 49: { ! 50: while ( (c = (*input)()) == ' ' || c == '\t' ); ! 51: if (c == '\n') ! 52: { ! 53: if (j != 0) ! 54: { ! 55: temp[j] = '\0'; ! 56: error("label without code - ignored:","",""); ! 57: } ! 58: } ! 59: if (c < '0' || c > '9') ! 60: { ! 61: (*unput)(c); ! 62: break; ! 63: } ! 64: else ! 65: { ! 66: temp[j] = c; ! 67: (*func)(c); ! 68: } ! 69: } ! 70: for ( ; j < 5; ++j) ! 71: (*func)(' '); ! 72: } ! 73: ! 74: labstand(func) /* labels in standard form input */ ! 75: int (*func)(); ! 76: { ! 77: int c; ! 78: int j; ! 79: ! 80: for (j = 0; j < 5; ++j) ! 81: { ! 82: c = (*input)(); ! 83: if (c == '\n') ! 84: { ! 85: error("line shorter than 5 characters","",""); ! 86: errflag = 1; ! 87: (*unput)('\n'); ! 88: } ! 89: if (c == '\t' || c == '\n') ! 90: { ! 91: for ( ;j<5; ++j) ! 92: (*func)(' '); ! 93: return; ! 94: } ! 95: (*func)(c); ! 96: } ! 97: (*input)(); /* throw away continuation char */ ! 98: } ! 99: ! 100: ! 101: ! 102: contfree() /* identify continuation lines in free-form input */ ! 103: { ! 104: return(nonblchar(_diglet,0)); /* any non-alpha non-digit */ ! 105: } ! 106: ! 107: ! 108: nonblchar(class,yesno) ! 109: int class,yesno; ! 110: { ! 111: #define CARDSIZE 121 ! 112: int temp[CARDSIZE]; ! 113: int j; ! 114: for (j=0; (temp[j]=(*input)()) == ' ' || temp[j] == '\t'; ++j) ! 115: if (j>=CARDSIZE-1) ! 116: { ! 117: temp[CARDSIZE-1] = '\0'; ! 118: error ("line unexpectedly long","",""); ! 119: break; ! 120: } ! 121: if (temp[j]!=EOF && classmatch(temp[j],class)==yesno) ! 122: return(1); ! 123: else ! 124: { ! 125: for ( ; j >= 0; --j) ! 126: (*unput)(temp[j]); ! 127: return(0); ! 128: } ! 129: } ! 130: ! 131: ! 132: contstand() /* continuation lines in standard form input */ ! 133: { ! 134: int temp[6]; ! 135: int i; ! 136: ! 137: for (i = 0; i < 6; ++i) ! 138: { ! 139: temp[i] = (*input)(); ! 140: if (temp[i] == '\t' || temp[i] == '\n' || temp[i] == '\0' || temp[i] == EOF) ! 141: { ! 142: for ( ;i >= 0; --i) ! 143: (*unput)(temp[i]); ! 144: return(0); ! 145: } ! 146: } ! 147: if (temp[5] != '0' && temp[5] != ' ') ! 148: return(1); ! 149: else ! 150: { ! 151: for ( i = 5 ; i >= 0; --i) ! 152: (*unput)(temp[i]); ! 153: return(0); ! 154: } ! 155: } ! 156: ! 157: ! 158: ! 159: comstand(posafter) /* standard form comments */ ! 160: int posafter; ! 161: { ! 162: int c; ! 163: c = (*input)(); ! 164: if (!posafter) ! 165: (*unput)(c); ! 166: if (c == 'c' || c == '*' || c== '#') ! 167: return(1); ! 168: else ! 169: return(0); ! 170: } ! 171: ! 172: ! 173: comfree(posafter) ! 174: int posafter; ! 175: { ! 176: return(comstand(posafter)); ! 177: } ! 178: int (*rline[])() = {rdfree,rdstand}; ! 179: int (*comment[])() = {comfree,comstand}; ! 180: int (*getlabel[])() = {labfree, labstand}; ! 181: int (*chkcont[])() = {contfree,contstand}; ! 182: ! 183: blankline() ! 184: { ! 185: if ( nonblchar(_nl,1) ) /* first non-blank is nl */ ! 186: { ! 187: (*unput) ('\n'); ! 188: return(1); ! 189: } ! 190: else return(0); ! 191: } ! 192: ! 193: #define maxunbp 80 ! 194: char unbuf[maxunbp+1]; ! 195: int unbp; ! 196: ! 197: empseek(linebeg) ! 198: int linebeg; ! 199: { ! 200: unbp = 0; ! 201: if (fseek(infd,(long)(linebeg+rtnbeg),0) == -1) ! 202: faterr("in disk seek","",""); ! 203: } ! 204: ! 205: inchar() ! 206: { ! 207: if (unbp > 0) ! 208: return( unbuf[--unbp] ); ! 209: else ! 210: { ! 211: return( uptolow(getc(infd)) ); ! 212: } ! 213: } ! 214: ! 215: ! 216: unchar(c) ! 217: int c; ! 218: { ! 219: if (unbp >= maxunbp) ! 220: faterr("dec.rat: unbuf size exceeded","",""); ! 221: if(c!=EOF)unbuf[unbp++] = c; ! 222: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.