1 /* 2 * Copyright (c) 1980 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 7 #ifndef lint 8 static char sccsid[] = "@(#)readline.c 5.1 (Berkeley) 04/26/85"; 9 #endif not lint 10 11 /* 12 * Read a line from the keyboard in the message line. The line 13 * goes into caller provided buffer msg, whos size is maxlen bytes. 14 */ 15 16 #include "2648.h" 17 18 readline(prompt, msg, maxlen) 19 char *prompt; 20 char *msg; 21 int maxlen; 22 { 23 register char c; 24 register char *cp; 25 int oldx, oldy; 26 int oldcuron; 27 int oldquiet; 28 extern int QUIET; 29 30 oldx = _curx; oldy = _cury; 31 oldcuron = _cursoron; 32 areaclear(4, 4, 4+8, 719); 33 setset(); 34 zoomout(); 35 curon(); 36 movecurs(4, 4); 37 texton(); 38 39 oldquiet = QUIET; 40 QUIET = 0; 41 outstr(prompt); 42 if (oldquiet) 43 outstr("\r\n"); 44 QUIET = oldquiet; 45 46 for (cp=msg; ; cp) { 47 fflush(stdout); 48 c = getchar(); 49 switch (c) { 50 case '\n': 51 case '\r': 52 case ESC: 53 *cp++ = 0; 54 textoff(); 55 movecurs(oldx, oldy); 56 if (oldcuron == 0) 57 curoff(); 58 return; 59 case '\b': 60 if (--cp >= msg) 61 outchar(c); 62 else 63 cp = msg; 64 break; 65 default: 66 *cp++ = c; 67 outstr(rdchar(c)); 68 if (cp-msg >= maxlen) 69 error("line too long"); 70 } 71 } 72 } 73