1*11491Sralph /* readline.c 4.1 83/03/09 */ 2*11491Sralph /* 3*11491Sralph * Read a line from the keyboard in the message line. The line 4*11491Sralph * goes into caller provided buffer msg, whos size is maxlen bytes. 5*11491Sralph */ 6*11491Sralph 7*11491Sralph #include "2648.h" 8*11491Sralph 9*11491Sralph readline(prompt, msg, maxlen) 10*11491Sralph char *prompt; 11*11491Sralph char *msg; 12*11491Sralph int maxlen; 13*11491Sralph { 14*11491Sralph register char c; 15*11491Sralph register char *cp; 16*11491Sralph int oldx, oldy; 17*11491Sralph int oldcuron; 18*11491Sralph int oldquiet; 19*11491Sralph extern int QUIET; 20*11491Sralph 21*11491Sralph oldx = _curx; oldy = _cury; 22*11491Sralph oldcuron = _cursoron; 23*11491Sralph areaclear(4, 4, 4+8, 719); 24*11491Sralph setset(); 25*11491Sralph zoomout(); 26*11491Sralph curon(); 27*11491Sralph movecurs(4, 4); 28*11491Sralph texton(); 29*11491Sralph 30*11491Sralph oldquiet = QUIET; 31*11491Sralph QUIET = 0; 32*11491Sralph outstr(prompt); 33*11491Sralph if (oldquiet) 34*11491Sralph outstr("\r\n"); 35*11491Sralph QUIET = oldquiet; 36*11491Sralph 37*11491Sralph for (cp=msg; ; cp) { 38*11491Sralph fflush(stdout); 39*11491Sralph c = getchar(); 40*11491Sralph switch (c) { 41*11491Sralph case '\n': 42*11491Sralph case '\r': 43*11491Sralph case ESC: 44*11491Sralph *cp++ = 0; 45*11491Sralph textoff(); 46*11491Sralph movecurs(oldx, oldy); 47*11491Sralph if (oldcuron == 0) 48*11491Sralph curoff(); 49*11491Sralph return; 50*11491Sralph case '\b': 51*11491Sralph if (--cp >= msg) 52*11491Sralph outchar(c); 53*11491Sralph else 54*11491Sralph cp = msg; 55*11491Sralph break; 56*11491Sralph default: 57*11491Sralph *cp++ = c; 58*11491Sralph outstr(rdchar(c)); 59*11491Sralph if (cp-msg >= maxlen) 60*11491Sralph error("line too long"); 61*11491Sralph } 62*11491Sralph } 63*11491Sralph } 64