home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / os2sdk / os2sdk10 / apps / ds / option.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  7.9 KB  |  305 lines

  1. /*  option.c - Display option screen */
  2.  
  3. #include "ds.h"
  4. #include "vars.h"
  5.  
  6. extern decorateTree (Directory *);
  7.  
  8.  
  9. char optScreen[][63] = {
  10.    /* 123456789 123456789 123456789 123456789 123456789 123456789 1 */
  11.     "╔═══════════════════════[ Set Colors ]═══════════════════════╗", /*  0 */
  12.     "║                                                            ║", /*  1 */
  13.     "║            Fore-     Back-                                 ║", /*  2 */
  14.     "║            ground    ground   Bright?  Blink?  Sample      ║", /*  3 */
  15.     "║          ┌──────────────────────────────────────────────   ║", /*  4 */
  16.     "║   title  │ xxxxxxx   xxxxxxx    yes     yes    DosShell    ║", /*  5 */
  17.     "║   name   │                                     filename    ║", /*  6 */
  18.     "║   cursor │                                     filename    ║", /*  7 */
  19.     "║   bar    │                                     ╚═══════    ║", /*  8 */
  20.     "║   status │                                     Info        ║", /*  9 */
  21.     "║   popup  │                                     screens     ║", /* 10 */
  22.     "║   error  │                                     Danger      ║", /* 11 */
  23.     "║   blank  │                                     <      >    ║", /* 12 */
  24.     "║                                                            ║", /* 13 */
  25.     "║   Use cursor keys to move between fields.                  ║", /* 14 */
  26.     "║   Use PgUp and PgDn to change a field.                     ║", /* 15 */
  27.     "║                                                            ║", /* 16 */
  28.     "╚══════════════════[ Press Enter to return ]═════════════════╝"  /* 17 */
  29. };
  30.  
  31. #define     O_WIDTH    62
  32. #define     O_HEIGHT    18
  33.  
  34. int O_ROW;  /* ((N_of_Rows - O_HEIGHT)/2) */
  35. int O_COL;  /* ((N_of_Cols - O_WIDTH)/2) */
  36.  
  37. int  O_Start_Row;   /*    (O_ROW + 5)    */
  38. int  O_FORE_COL;    /*    (O_COL + 13)    */
  39. int  O_BACK_COL;    /*    (O_COL + 23)    */
  40. int  O_BRIGHT_COL;  /*    (O_COL + 34)    */
  41. int  O_BLINK_COL;   /*    (O_COL + 42)    */
  42. int  O_SAMPLE_COL;  /*    (O_COL + 49)    */
  43.  
  44. #define     SAMPLE_LEN        8
  45.  
  46. #define     CUR_COLS        4
  47. int curCol[CUR_COLS];            /* Cursor columns for color screen */
  48.  
  49. #define     C_NAME_LEN        7
  50. #define     C_NAMES        8
  51. char cName[C_NAMES][C_NAME_LEN+1] = {
  52.     "black ",    /* 0  000 */
  53.     "blue  ",    /* 1  001 */
  54.     "green ",    /* 2  010 */
  55.     "cyan  ",    /* 3  011 */
  56.     "red   ",    /* 4  100 */
  57.     "purple",    /* 5  101 */
  58.     "yellow",    /* 6  110 */
  59.     "white "    /* 7  111 */
  60. };
  61.  
  62. #define     TOGGLE_LEN        3
  63. #define     T_NAMES        8
  64. char tName[T_NAMES][TOGGLE_LEN+1] = {
  65.     " no",    /* 0 */
  66.     "yes"    /* 1 */
  67. };
  68.  
  69.  
  70. int color[N_COLORS] = {
  71.     attr(green,black),            /* titleC  */
  72.     attr(cyan,black),            /* nameC   */
  73.     attr(bright+yellow,black),        /* cursorC */
  74.     attr(red,black),            /* barC    */
  75.     attr(green,black),            /* statusC */
  76.     attr(blue,white),            /* popupC  */
  77.     attr(red,black+blinking),        /* errorC  */
  78.     attr(white,black)            /* blankC  */
  79. };
  80.  
  81.  
  82. /***    optionInit - Initialize option screen stuff
  83. *
  84. *
  85. */
  86. optionInit ()
  87. {
  88.     O_ROW = (N_of_Rows - O_HEIGHT)/2;
  89.     O_COL = (N_of_Cols - O_WIDTH)/2;
  90.     O_Start_Row  =  (O_ROW + 5);
  91.     O_FORE_COL     =  (O_COL + 13);
  92.     O_BACK_COL     =  (O_COL + 23);
  93.     O_BRIGHT_COL =  (O_COL + 34);
  94.     O_BLINK_COL  =  (O_COL + 42);
  95.     O_SAMPLE_COL =  (O_COL + 49);
  96.  
  97.     curCol[0] = O_FORE_COL;
  98.     curCol[1] = O_BACK_COL;
  99.     curCol[2] = O_BRIGHT_COL;
  100.     curCol[3] = O_BLINK_COL;
  101.  
  102. }   /* optionInit */
  103.  
  104.  
  105. /***    showOption - display option screen and record user modifications
  106. *
  107. *
  108. */
  109. showOption ()
  110. {
  111.     int  row,col,key;
  112.     Attr attrib, fore, back, brite, blink;
  113.     int  cRow,cCol;
  114.     Attr oldColor[N_COLORS];
  115.     int  i;
  116.     Attr oldPopupC;
  117.     Attr a;
  118.     unsigned colorChanged;
  119.  
  120.     oldPopupC = color[popupC];            /* Use old blank color */
  121.     for (i=0; i<N_COLORS; i++)            /* Remember old colors */
  122.     oldColor[i] = color[i];
  123.  
  124.     a = oldPopupC;
  125.     for (row=0; row<O_HEIGHT; row++)
  126.     VIOWRTCHARSTRATT (chfs(optScreen[row]), O_WIDTH, row+O_ROW,O_COL,
  127.               afs(&a), VioHandle);
  128.  
  129.     for (row=0; row<N_COLORS; row++)
  130.     showRow (row, oldPopupC);
  131.  
  132.     key = 0;
  133.     cRow = 0;
  134.     cCol = 0;
  135.     while (key != enterKey) {
  136.     VIOSETCURPOS (O_Start_Row+cRow,curCol[cCol]-1, VioHandle);
  137.     key = getKey();
  138.     switch (key) {
  139.         case upKey:
  140.         if (!cRow--)
  141.             cRow = N_COLORS - 1;
  142.         break;
  143.         case downKey:
  144.         if (cRow++ >= (N_COLORS-1))
  145.             cRow = 0;
  146.         break;
  147.         case leftKey:
  148.         if (!cCol--)
  149.             cCol = CUR_COLS - 1;
  150.         break;
  151.         case rightKey:
  152.         if (cCol++ >= (CUR_COLS-1))
  153.             cCol = 0;
  154.         break;
  155.         case pgUpKey:
  156.         modColor (cRow,cCol, 1, oldPopupC);
  157.         break;
  158.         case pgDownKey:
  159.         modColor (cRow,cCol,-1, oldPopupC);
  160.         break;
  161.         default:
  162.         break;
  163.     }   /* switch */
  164.     }    /* while */
  165.  
  166. /* See if colors changed in the tree */
  167.  
  168.     colorChanged = FALSE;            /* No color change (yet) */
  169.     if (color[nameC] != oldColor[nameC])
  170.     colorChanged = TRUE;
  171.     if (color[barC] != oldColor[barC])
  172.     colorChanged = TRUE;
  173.     if (color[blankC] != oldColor[blankC])
  174.     colorChanged = TRUE;
  175.  
  176.     if (colorChanged)            /* Tree color changed, must re-image */
  177.     decorateTree (root);
  178.  
  179. /* See if any colors changed */
  180.  
  181.     colorChanged = 0;            /* No color change (yet) */
  182.     for (i=0; i<N_COLORS; i++)        /* See if ANY colors changed */
  183.     colorChanged += ((oldColor[i] == color[i]) ? 0 : 1);
  184.  
  185.     if (colorChanged)            /* At least one color changed */
  186.     stateModified = TRUE;
  187.  
  188. }   /* showOption */
  189.  
  190.  
  191. /***    modColor - Modify color on option screen
  192. *
  193. *
  194. */
  195. modColor (row,col,inc,oldPopupC)
  196. int row,col,inc,oldPopupC;
  197. {
  198.     int attrib, fore, back, brite, blink;
  199.  
  200.     attrToParts (color[row], &fore, &back, &brite, &blink);
  201.     if (inc > 0)            /* Increment value */
  202.      switch (col) {
  203.         case 0:
  204.         if (fore++ > (C_NAMES-1))
  205.             fore = 0;
  206.         break;
  207.         case 1:
  208.         if (back++ > (C_NAMES-1))
  209.             back = 0;
  210.         break;
  211.         case 2:
  212.         if (brite++ > (T_NAMES-1))
  213.             brite = 0;
  214.         break;
  215.         case 3:
  216.         if (blink++ > (T_NAMES-1))
  217.             blink = 0;
  218.         break;
  219.     }   /* case */
  220.     else
  221.      switch (col) {
  222.         case 0:
  223.         if (!fore--)
  224.             fore = C_NAMES-1;
  225.         break;
  226.         case 1:
  227.         if (!back--)
  228.             back = C_NAMES-1;
  229.         break;
  230.         case 2:
  231.         if (!brite--)
  232.             brite = T_NAMES-1;
  233.         break;
  234.         case 3:
  235.         if (!blink--)
  236.             blink = T_NAMES-1;
  237.         break;
  238.     };  /* case */
  239.     partsToAttr (&color[row], fore, back, brite, blink);
  240.     showRow (row, oldPopupC);
  241. }   /* modColor */
  242.  
  243.  
  244. /***    showRow - display a row of the option screen
  245. *
  246. *
  247. */
  248. showRow (row,oldPopupC)
  249. int row;
  250. int oldPopupC;
  251. {
  252.     Attr attrib, fore, back, brite, blink;
  253.     Attr a;
  254.  
  255.     a = oldPopupC;
  256.  
  257.     attrToParts (color[row], &fore, &back, &brite, &blink);
  258.  
  259.     VIOWRTCHARSTRATT (chfs(cName[fore]), C_NAME_LEN,
  260.             row+O_Start_Row,O_FORE_COL, afs(&a), VioHandle);
  261.  
  262.     VIOWRTCHARSTRATT (chfs(cName[back]), C_NAME_LEN,
  263.             row+O_Start_Row,O_BACK_COL, afs(&a), VioHandle);
  264.  
  265.     VIOWRTCHARSTRATT (chfs(tName[brite]), TOGGLE_LEN,
  266.             row+O_Start_Row,O_BRIGHT_COL, afs(&a), VioHandle);
  267.  
  268.     VIOWRTCHARSTRATT (chfs(tName[blink]), TOGGLE_LEN,
  269.             row+O_Start_Row,O_BLINK_COL, afs(&a), VioHandle);
  270.  
  271.     a = color[row];
  272.     VIOWRTNATTR (afs(&a), SAMPLE_LEN, row+O_Start_Row,O_SAMPLE_COL, VioHandle);
  273.  
  274. }   /* showRow */
  275.  
  276.  
  277. /***    attrToParts - Break cell attribute into component parts
  278. *
  279. *
  280. */
  281. attrToParts (attrib, fore, back, brite, blink)
  282. AttrStruct attrib;
  283. int *fore, *back, *brite, *blink;
  284. {
  285.     *fore  = attrib.a_fore;
  286.     *brite = attrib.a_bright;
  287.     *back  = attrib.a_back;
  288.     *blink = attrib.a_blink;
  289. }   /* attrToParts */
  290.  
  291.  
  292. /***    partsToAttr - Build cell attribute from component parts
  293. *
  294. *
  295. */
  296. partsToAttr (attrib, fore, back, brite, blink)
  297. AttrStruct *attrib;
  298. int fore, back, brite, blink;
  299. {
  300.     attrib->a_fore   = fore;
  301.     attrib->a_bright = brite;
  302.     attrib->a_back   = back;
  303.     attrib->a_blink  = blink;
  304. }   /* partsToAttr */
  305.