home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prof_c / 13ansi / menumode.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  1.6 KB  |  76 lines

  1. /*
  2.  *  menumode -- process user commands interactively
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <local\ansi.h>
  7. #include <local\ibmcolor.h>
  8. #include <local\keydefs.h>
  9.  
  10. /* maximum color number */
  11. #define MAX_CNUM    15
  12.  
  13. void
  14. menumode()
  15. {
  16.     register int ch;
  17.     int foreground, background, border;
  18.     extern void setattr(POSITION, int);
  19.     extern void sc_cmds(int, int, int);
  20.  
  21.     /* default attributes */
  22.     foreground = IBM_WHITE;
  23.     background = IBM_BLACK;
  24.     border = IBM_BLACK;
  25.  
  26.     ANSI_SGR(ANSI_NORMAL);
  27.     setattr(FGND, foreground);
  28.     setattr(BKGND, background);
  29.     ANSI_ED;
  30.     palette(0, border);
  31.     sc_cmds(foreground, background, border);
  32.     while ((ch = getkey()) != K_RETURN) {
  33.         switch (ch) {
  34.         case K_F1:
  35.             /* decrement foreground color */
  36.             if (--foreground < 0)
  37.                 foreground = MAX_CNUM;
  38.             break;
  39.         case K_F2:
  40.             /* increment foreground color */
  41.             if (++foreground > MAX_CNUM)
  42.                 foreground = 0;
  43.             break;
  44.         case K_F3:
  45.             /* decrement background color */
  46.             if (--background < 0)
  47.                 background = MAX_CNUM;
  48.             break;
  49.         case K_F4:
  50.             /* increment background color */
  51.             if (++background > MAX_CNUM)
  52.                 background = 0;
  53.             break;
  54.         case K_F5:
  55.             /* decrement border color */
  56.             if (--border < 0)
  57.                 border = MAX_CNUM;
  58.             break;
  59.         case K_F6:
  60.             /* increment border color number */
  61.             if (++border > MAX_CNUM)
  62.                 border = 0;
  63.             break;
  64.         default:
  65.             continue;
  66.         }
  67.         ANSI_SGR(ANSI_NORMAL);
  68.         setattr(FGND, foreground);
  69.         setattr(BKGND, background);
  70.         palette(0, border);
  71.         ANSI_ED;
  72.         sc_cmds(foreground, background, border);
  73.     }
  74.     return;
  75. }
  76.