|
|
1.1 ! root 1: #include <jerq.h> ! 2: ! 3: #define kbdcurs(p) rectf(&display,Rect(p.x,p.y,p.x+1,p.y+fontheight(&defont) ),F_XOR) ! 4: ! 5: static echo(c,p) ! 6: Point p; ! 7: { ! 8: static char buf[2]; ! 9: ! 10: buf[0] = c; ! 11: string(&defont, buf, &display, p, F_XOR); ! 12: } ! 13: ! 14: ! 15: kbdstring(str,nchmax,p) /* read string from keyboard with echo at p */ ! 16: register char *str; int nchmax; Point p; ! 17: { ! 18: register int kbd, nchars = 0; ! 19: ! 20: *str = 0; kbdcurs(p); ! 21: for (;;) { ! 22: wait(KBD); ! 23: kbdcurs(p); ! 24: switch (kbd = kbdchar()) { ! 25: case 0: ! 26: break; ! 27: case '\r': ! 28: case '\n': ! 29: return nchars; ! 30: case '\b': ! 31: if (nchars <= 0) break; ! 32: kbd = *--str; *str = 0; nchars--; ! 33: p.x -= fontwidth(&defont); ! 34: echo(kbd, p); ! 35: break; ! 36: default: ! 37: if (nchars >= nchmax) break; ! 38: *str++ = kbd; *str = 0; nchars++; ! 39: echo(kbd, p); ! 40: p.x += fontwidth(&defont); ! 41: } ! 42: kbdcurs(p); ! 43: } ! 44: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.