|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1986 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: * ! 6: * @(#)kdb_input.c 7.5 (Berkeley) 5/3/90 ! 7: */ ! 8: ! 9: #include "../kdb/defs.h" ! 10: ! 11: char line[LINSIZ]; ! 12: char *kdblp; ! 13: char kdbpeekc,kdblastc = EOR; ! 14: ! 15: /* input routines */ ! 16: ! 17: kdbeol(c) ! 18: char c; ! 19: { ! 20: return (c==EOR || c==';'); ! 21: } ! 22: ! 23: kdbrdc() ! 24: { ! 25: do ! 26: (void) kdbreadchar(); ! 27: while (kdblastc==SP || kdblastc==TB); ! 28: return (kdblastc); ! 29: } ! 30: ! 31: kdbreadchar() ! 32: { ! 33: static char *erase = "\b \b"; ! 34: ! 35: if (kdblp==0) { ! 36: kdblp=line; ! 37: do { ! 38: (void) kdbreadc(kdblp); ! 39: if (kdbmkfault) ! 40: kdberror((char *)0); ! 41: switch (*kdblp) { ! 42: case CTRL('h'): case 0177: ! 43: if (kdblp > line) ! 44: kdbwrite(erase, 3), kdblp--; ! 45: break; ! 46: case CTRL('u'): ! 47: while (kdblp > line) ! 48: kdbwrite(erase, 3), kdblp--; ! 49: break; ! 50: case CTRL('r'): ! 51: kdbwrite("^R\n", 3); ! 52: if (kdblp > line) ! 53: kdbwrite(line, kdblp-line); ! 54: break; ! 55: case CTRL('w'): ! 56: if (kdblp <= line) ! 57: break; ! 58: do { ! 59: if (!isspace(*kdblp)) ! 60: goto erasenb; ! 61: kdbwrite(erase, 3); ! 62: } while (--kdblp > line); ! 63: break; ! 64: erasenb: ! 65: do ! 66: kdbwrite(erase, 3); ! 67: while (--kdblp > line && !isspace(*kdblp)); ! 68: break; ! 69: default: ! 70: kdbecho(*kdblp++); ! 71: break; ! 72: } ! 73: } while (kdblp == line || kdblp[-1] != EOR); ! 74: *kdblp=0; kdblp=line; ! 75: } ! 76: if (kdblastc = kdbpeekc) ! 77: kdbpeekc=0; ! 78: else if (kdblastc = *kdblp) ! 79: kdblp++; ! 80: return (kdblastc); ! 81: } ! 82: ! 83: static ! 84: kdbecho(c) ! 85: char c; ! 86: { ! 87: char buf[2]; ! 88: ! 89: if (c==0177 || (c<SP && c != TB && c != EOR)) { ! 90: buf[0] = '^'; ! 91: buf[1] = c ^ 0100; ! 92: kdbwrite(buf, 2); ! 93: } else ! 94: kdbwrite(&c, 1); ! 95: } ! 96: ! 97: kdbnextchar() ! 98: { ! 99: ! 100: if (kdbeol(kdbrdc())) { ! 101: kdblp--; ! 102: return (0); ! 103: } ! 104: return (kdblastc); ! 105: } ! 106: ! 107: kdbquotchar() ! 108: { ! 109: ! 110: if (kdbreadchar()=='\\') ! 111: return (kdbreadchar()); ! 112: if (kdblastc=='\'') ! 113: return (0); ! 114: return (kdblastc); ! 115: } ! 116: ! 117: kdbgetformat(deformat) ! 118: char *deformat; ! 119: { ! 120: register char *fptr; ! 121: register int quote; ! 122: ! 123: fptr=deformat; quote=0; ! 124: while ((quote ? kdbreadchar()!=EOR : !kdbeol(kdbreadchar()))) ! 125: if ((*fptr++ = kdblastc)=='"') ! 126: quote = ~quote; ! 127: kdblp--; ! 128: if (fptr!=deformat) ! 129: *fptr++ = '\0'; ! 130: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.