1*41077Swilliam /*- 2*41077Swilliam * Copyright (c) 1990 The Regents of the University of California. 3*41077Swilliam * All rights reserved. 4*41077Swilliam * 5*41077Swilliam * This code is derived from software contributed to Berkeley by 6*41077Swilliam * William Jolitz. 7*41077Swilliam * 8*41077Swilliam * %sccs.include.noredist.c% 9*41077Swilliam * 10*41077Swilliam * @(#)gets.c 7.1 (Berkeley) 04/24/90 11*41077Swilliam */ 12*41077Swilliam 13*41077Swilliam /* special characters */ 14*41077Swilliam #define bs 8 15*41077Swilliam #define lf 10 16*41077Swilliam #define cr 13 17*41077Swilliam #define cntlc 3 18*41077Swilliam #define del 0177 19*41077Swilliam #define cntld 4 20*41077Swilliam gets(buf)21*41077Swilliamgets(buf) 22*41077Swilliam char *buf; 23*41077Swilliam { 24*41077Swilliam register char *lp; 25*41077Swilliam register c; 26*41077Swilliam 27*41077Swilliam lp = buf; 28*41077Swilliam for (;;) { 29*41077Swilliam c = getchar() & 0177; 30*41077Swilliam 31*41077Swilliam switch(c) { 32*41077Swilliam case '\n': case '\r': *lp++ = '\0'; 33*41077Swilliam return; 34*41077Swilliam case '#': 35*41077Swilliam if (lp > buf && lp[-1] == '\\') { 36*41077Swilliam lp--; 37*41077Swilliam goto norm; 38*41077Swilliam } 39*41077Swilliam /* FALL THROUGH */ 40*41077Swilliam case bs: 41*41077Swilliam case del: 42*41077Swilliam lp--; 43*41077Swilliam if (lp < buf) 44*41077Swilliam lp = buf; 45*41077Swilliam break; 46*41077Swilliam case '@': 47*41077Swilliam if (lp > buf && lp[-1] == '\\') { 48*41077Swilliam lp--; 49*41077Swilliam goto norm; 50*41077Swilliam } 51*41077Swilliam /* FALL THROUGH */ 52*41077Swilliam case 'u'&037: 53*41077Swilliam case 'x'&037: 54*41077Swilliam lp = buf; 55*41077Swilliam putchar('\n'); 56*41077Swilliam break; 57*41077Swilliam default: 58*41077Swilliam norm: 59*41077Swilliam *lp++ = c; 60*41077Swilliam } 61*41077Swilliam } 62*41077Swilliam } 63*41077Swilliam getchar()64*41077Swilliamgetchar() 65*41077Swilliam { 66*41077Swilliam register char thechar; 67*41077Swilliam 68*41077Swilliam while (1) { 69*41077Swilliam thechar = kbd(); 70*41077Swilliam switch (thechar) { 71*41077Swilliam default: if (thechar >= ' ') 72*41077Swilliam sput(thechar); 73*41077Swilliam return(thechar); 74*41077Swilliam case cr: 75*41077Swilliam case lf: sput(cr); 76*41077Swilliam sput(lf); 77*41077Swilliam return(lf); 78*41077Swilliam case bs: 79*41077Swilliam case del: 80*41077Swilliam sput(bs); 81*41077Swilliam sput(' '); 82*41077Swilliam sput(bs); 83*41077Swilliam return(thechar); 84*41077Swilliam case cntlc: 85*41077Swilliam sput('^') ; sput('C') ; sput('\r') ; sput('\n') ; 86*41077Swilliam exit(-2) ; 87*41077Swilliam case cntld: 88*41077Swilliam sput('^') ; sput('D') ; sput('\r') ; sput('\n') ; 89*41077Swilliam return(0); 90*41077Swilliam } 91*41077Swilliam } 92*41077Swilliam } 93