1: # include <ingres.h> 2: # include "scanner.h" 3: # include <sccs.h> 4: 5: SCCSID(@(#)get_scan.c 8.2 1/17/85) 6: 7: /* 8: ** GET_SCAN -- gets characters from monitor 9: ** 10: ** Parameters: 11: ** mode -- 12: ** modes are: 13: ** NORMAL = read normally 14: ** PRIME = prime the pipe 15: ** SYNC = sync (or flush) the pipe 16: ** 17: ** Returns: 18: ** character or '\0' on eof 19: ** 20: ** Trace Flags: 21: ** Getscan ~~ 54.0 22: */ 23: 24: get_scan(mode) 25: int mode; 26: { 27: extern int yyline; 28: register int ctr; 29: char c; 30: 31: extern int Pctr; /* vble for backup stack in scanner */ 32: extern char Pchar[2]; 33: # ifdef xPTR3 34: tTfp(54, 0, "get_scan: mode %d ", mode); 35: # endif 36: 37: switch (mode) 38: { 39: case NORMAL: 40: if (Pctr) 41: { 42: c = Pchar[--Pctr]; 43: ctr = 1; 44: } 45: else 46: ctr = readmon(&c, 1); 47: if (c == '\n') 48: yyline++; 49: c = ((Lcase && c >= 'A' && c <= 'Z') ? (c + ('a' - 'A')) : c); 50: break; 51: 52: case PRIME: 53: Pctr = 0; 54: ctr = 0; 55: break; 56: 57: case SYNC: /* flush pipe */ 58: while (readmon(&c, 1) > 0); 59: ctr = 0; 60: break; 61: 62: default: 63: syserr("bad arg '%d' in get_scan", mode); 64: } 65: 66: # ifdef xPTR3 67: tTfp(54, 1, " ctr %d: '%c' (0%o).\n", ctr & I1MASK, c, c); 68: # endif 69: 70: return (ctr ? c : 0); 71: }