home *** CD-ROM | disk | FTP | other *** search
- int select(int def, char *prompt, ...)
- {
- int i, rv, c;
- char line[100];
- char **selptr = &prompt + 1;
- while (1)
- {
- c = strlen(prompt);
- fputs(prompt, stdout);
- for (i=0; selptr[i]; i++)
- {
- int l = strlen(selptr[i]) + 5;
- if (i+1 == def)
- c += 10;
- if (c+l > 70)
- {
- c = 0;
- putchar('\n');
- }
- c += l;
- printf(" %s%d)%s %s ", ansibold, i+1, ansinorm, selptr[i]);
- if (i+1 == def)
- fputs("(default) ", stdout);
- }
- printf("? ");
- if (i < 10)
- {
- int c;
- while (1)
- {
- c = getch();
- if (c <= i+'0' && c >= '1')
- {
- ansi("\033[1m");
- putchar(c);
- ansi("\033[0m");
- putchar('\n');
- rv = c-'0';
- break;
- }
- else if (c == 13 || c == 10)
- {
- ansi("\033[1m");
- putchar(def+'0');
- ansi("\033[0m");
- putchar('\n');
- rv = def;
- break;
- }
- else if (c == 3)
- {
- printf("<Ctrl-C>\n");
- exit(1);
- }
- else
- putchar(7);
- }
- }
- else
- {
- ansi("\033[1m");
- gets(line);
- ansi("\033[0m");
- rv = def;
- sscanf(line, "%d", &rv);
- }
- if (rv < 1 || rv > i)
- printf("Invalid response. Please type a number from 1 to %d.\n", i);
- else
- return rv;
- }
- }
-