Annotation of os2sdk/demos/apps/ds/option.c, revision 1.1

1.1     ! root        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 */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.