home *** CD-ROM | disk | FTP | other *** search
-
- void query(char *prompt, char *buffer, char *def)
- {
- int bptr, blen, k, i;
- fputs(prompt, stdout);
- ansi("\033[1m");
- strcpy(buffer, def);
- bptr = blen = strlen(buffer);
- fputs(buffer, stdout);
- while (1)
- {
- k = getch();
- if (k == 0)
- k = 0x100 | getch();
- switch (k)
- {
- case 3:
- printf("%s<Ctrl-C>\n", ansinorm);
- exit(1);
- case 10:
- case 13:
- buffer[blen] = 0;
- putchar('\n');
- ansi("\033[0m");
- return;
- case 8:
- if (bptr)
- {
- putchar(8);
- putchar(' ');
- putchar(8);
- bptr--;
- blen--;
- for (i=bptr; i<blen; i++)
- buffer[i] = buffer[i+1];
- }
- else
- putchar(7);
- break;
- case 27: /* Escape */
- case 21: /* ^U */
- while (bptr < blen)
- putchar(buffer[bptr++]);
- while (bptr)
- {
- putchar(8);
- putchar(' ');
- putchar(8);
- bptr--;
- }
- blen = 0;
- break;
- case 'K'|0x100: /* left */
- if (bptr)
- {
- putchar(8);
- bptr--;
- }
- else
- putchar(7);
- break;
- case 'M'|0x100: /* right */
- if (bptr < blen)
- {
- putchar(buffer[bptr]);
- bptr++;
- }
- else
- putchar(7);
- break;
- default:
- for (i=blen; i>bptr; i--)
- buffer[i] = buffer[i-1];
- buffer[bptr++] = k;
- blen++;
- for (i=bptr-1; i<blen; i++)
- putchar(buffer[i]);
- for (; i>bptr; i--)
- putchar(8);
- }
- }
- }
-
-