home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / gnu / djgpp / utils / install / select.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-21  |  1.4 KB  |  73 lines

  1. int select(int def, char *prompt, ...)
  2. {
  3.   int i, rv, c;
  4.   char line[100];
  5.   char **selptr = &prompt + 1;
  6.   while (1)
  7.   {
  8.     c = strlen(prompt);
  9.     fputs(prompt, stdout);
  10.     for (i=0; selptr[i]; i++)
  11.     {
  12.       int l = strlen(selptr[i]) + 5;
  13.       if (i+1 == def)
  14.         c += 10;
  15.       if (c+l > 70)
  16.       {
  17.         c = 0;
  18.         putchar('\n');
  19.       }
  20.       c += l;
  21.       printf(" %s%d)%s %s ", ansibold, i+1, ansinorm, selptr[i]);
  22.       if (i+1 == def)
  23.         fputs("(default) ", stdout);
  24.     }
  25.     printf("? ");
  26.     if (i < 10)
  27.     {
  28.       int c;
  29.       while (1)
  30.       {
  31.         c = getch();
  32.         if (c <= i+'0' && c >= '1')
  33.         {
  34.           ansi("\033[1m");
  35.           putchar(c);
  36.           ansi("\033[0m");
  37.           putchar('\n');
  38.           rv = c-'0';
  39.           break;
  40.         }
  41.         else if (c == 13 || c == 10)
  42.         {
  43.           ansi("\033[1m");
  44.           putchar(def+'0');
  45.           ansi("\033[0m");
  46.           putchar('\n');
  47.           rv = def;
  48.           break;
  49.         }
  50.         else if (c == 3)
  51.         {
  52.           printf("<Ctrl-C>\n");
  53.           exit(1);
  54.         }
  55.         else
  56.           putchar(7);
  57.       }
  58.     }
  59.     else
  60.     {
  61.       ansi("\033[1m");
  62.       gets(line);
  63.       ansi("\033[0m");
  64.       rv = def;
  65.       sscanf(line, "%d", &rv);
  66.     }
  67.     if (rv < 1 || rv > i)
  68.       printf("Invalid response.  Please type a number from 1 to %d.\n", i);
  69.     else
  70.       return rv;
  71.   }
  72. }
  73.