Annotation of mstools/win32s/setup/bldcui/dlgprocs.c, revision 1.1.1.1

1.1       root        1: /***************************************************************************/
                      2: /*********************  Sample Dialog Procedures  **************************/
                      3: /***************************************************************************/
                      4: 
                      5: #include "cui.h"
                      6: #include "dialogs.h"
                      7: #include <stdlib.h>
                      8: #include <ctype.h>
                      9: 
                     10: 
                     11: #define iszBMax    11
                     12: #define INT_MAX    32767     /* maximum (signed) int value */
                     13: #define cbSymBuf   1024
                     14: #define cbNameMax  52
                     15: 
                     16: 
                     17: LPSTR  _sz = NULL;
                     18: 
                     19: #define  FSingleByteCharSz(sz)  ((BOOL)(((_sz = (sz)) != NULL) \
                     20:                                                                        && AnsiNext((LPSTR)(_sz)) == _sz + 1))
                     21: 
                     22: int   FAR PASCAL LibMain(HANDLE, WORD, WORD, LPSTR);
                     23: int   FAR PASCAL WEP (int);
                     24: LPSTR FAR PASCAL SzLastChar(LPSTR);
                     25: LPSTR FAR PASCAL SzDlgEvent(WORD);
                     26: int   FAR PASCAL AsciiToInt(LPSTR);
                     27: LPSTR FAR PASCAL IntToAscii(int, LPSTR);
                     28: 
                     29: 
                     30: 
                     31: /*
                     32: **     Purpose:
                     33: **             CheckBox Dialog procedure for templates with one to ten checkbox
                     34: **             controls.
                     35: **
                     36: **     Controls Recognized:
                     37: **             Checkbox   - IDC_B1 to IDC_B10 (sequential)
                     38: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                     39: **
                     40: **     Initialization Symbols:
                     41: **             "CheckItemsIn" - list of "ON" and "OFF" string items for setting
                     42: **                     the intial state of the checkbox controls, evaluated in
                     43: **                     sequence ("ON" for checked, "OFF" for unchecked).  If there
                     44: **                     are more controls than items, extra controls are left unchecked.
                     45: **                     If there are fewer items than controls, extra items are ignored.
                     46: **             "OptionsGreyed" - list of (one-based) indexes of checkboxes to be
                     47: **                     initialized as disabled.  Indexes not in the list will be
                     48: **                     left enabled.
                     49: **
                     50: **     Termination Symbols:
                     51: **             "CheckItemsOut" - list of same format as "CheckItemsIn" representing
                     52: **                     state of checkbox controls upon return.
                     53: **             "DLGEVENT" - one of the following, according to control event:
                     54: **                             event     value
                     55: **                             -------   -------
                     56: **                             IDC_B     "BACK"
                     57: **                             IDC_C     "CONTINUE"
                     58: **                             IDC_X     "EXIT"
                     59: **                             IDCANCEL  "CANCEL"
                     60: **
                     61: **     Note:
                     62: **             Pushbutton IDC_H will open the related Help dialog, if any.
                     63: **
                     64: *****************************************************************************/
                     65: BOOL FAR PASCAL FCheckDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                     66: {
                     67:        WORD idc, cb, i, cItems;
                     68:        char szSymBuf[cbSymBuf];
                     69: 
                     70:        switch (wMsg)
                     71:                {
                     72:        case WM_INITDIALOG:
                     73:                cItems = UsGetListLength("CheckItemsIn");
                     74:                idc = IDC_B1;
                     75:                for (i = 1; i <= cItems; ++i)
                     76:                        {
                     77:                        WORD wCheck = 0;
                     78: 
                     79:                        cb = CbGetListItem("CheckItemsIn", i, szSymBuf, cbSymBuf);
                     80:                        Assert(cb < cbSymBuf);
                     81:                        if (lstrcmp(szSymBuf, "ON") == 0)
                     82:                                wCheck = 1;
                     83:                        CheckDlgButton(hdlg, idc++, wCheck);
                     84:                        }
                     85: 
                     86:                cItems = UsGetListLength("OptionsGreyed");
                     87:                idc = IDC_B1;
                     88:                for (i = 1; i <= cItems; ++i)
                     89:                        {
                     90:                        int iOpt;
                     91: 
                     92:                        cb = CbGetListItem("OptionsGreyed", i, szSymBuf, cbSymBuf);
                     93:                        Assert(cb < cbSymBuf);
                     94:                        iOpt  = AsciiToInt((LPSTR)szSymBuf);
                     95:                        if (iOpt > 0
                     96:                                        && iOpt <= 10)
                     97:                                EnableWindow(GetDlgItem(hdlg, IDC_B0 + iOpt), 0);
                     98:                        else if (*szSymBuf != '\0')
                     99:                                Assert(fFalse);
                    100:                        }
                    101:                return(fTrue);
                    102: 
                    103:        case STF_REINITDIALOG:
                    104:        case STF_ACTIVATEAPP:
                    105:                return(fTrue);
                    106: 
                    107:        case WM_COMMAND:
                    108:                switch (wParam)
                    109:                        {
                    110:                case IDC_B1:
                    111:                case IDC_B2:
                    112:                case IDC_B3:
                    113:                case IDC_B4:
                    114:                case IDC_B5:
                    115:                case IDC_B6:
                    116:                case IDC_B7:
                    117:                case IDC_B8:
                    118:                case IDC_B9:
                    119:                case IDC_B10:
                    120:                        CheckDlgButton(hdlg, wParam,
                    121:                                        (WORD)!IsDlgButtonChecked(hdlg, wParam));
                    122:                        break;
                    123: 
                    124:                case IDC_H:
                    125:                        HdlgShowHelp();
                    126:                        return(fTrue);
                    127: 
                    128:                case IDC_B:
                    129:                case IDC_C:
                    130:                case IDC_X:
                    131:                case IDCANCEL:
                    132:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    133:                                {
                    134:                                DestroyWindow(GetParent(hdlg));
                    135:                                return(fTrue);
                    136:                                }
                    137: 
                    138:                        FRemoveSymbol("CheckItemsOut");
                    139:                        for (idc = IDC_B1; GetDlgItem(hdlg, idc); idc++)
                    140:                                if (!FAddListItem("CheckItemsOut",
                    141:                                                IsDlgButtonChecked(hdlg, idc) ? "ON" : "OFF"))
                    142:                                        {
                    143:                                        DestroyWindow(GetParent(hdlg));
                    144:                                        return(fFalse);
                    145:                                        }
                    146:                        Assert((unsigned)(idc-IDC_B1+1) <= iszBMax);
                    147: 
                    148:                        ReactivateSetupScript();
                    149:                        break;
                    150:                        }
                    151:                break;
                    152:                }
                    153: 
                    154:        return(fFalse);
                    155: }
                    156: 
                    157: 
                    158: 
                    159: /*
                    160: **     Purpose:
                    161: **             Custom Install Dialog procedure for templates with one to ten custom
                    162: **             options each consisting of at least one checkbox with an optional
                    163: **             sub-option pushbutton or status string.  The dialog also supports
                    164: **             an install path set button, display of the current install path, and
                    165: **             display of the current disk space status.
                    166: **
                    167: **     Controls Recognized:
                    168: **             Checkbox   - IDC_B1 to IDC_B10
                    169: **                     with optionaly assocated buttons or text:
                    170: **                     Pushbutton - IDC_SP1 to IDC_SP10
                    171: **                     Text       - IDC_STATUS1 to IDC_STATUS10
                    172: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_P, IDC_X
                    173: **             Text       - IDC_TEXT1 through IDC_TEXT7
                    174: **
                    175: **     Initialization Symbols:
                    176: **             "CheckItemsState" - list of "ON" and "OFF" string items for setting
                    177: **                     the intial state of the checkbox controls, evaluated in
                    178: **                     sequence ("ON" for checked, "OFF" for unchecked).  If there
                    179: **                     are more controls than items, extra controls are left unchecked.
                    180: **                     If there are fewer items than controls, extra items are ignored.
                    181: **             "StatusItemsText" - list of strings to initialize status text items
                    182: **                     associated with checkboxes.
                    183: **             "DriveStatusText" - list of seven strings to initialize drive status
                    184: **                     text items (IDC_TEXT1-7) in the following sequence:
                    185: **                             dst_drive, dst_space_need, dst_space_free,
                    186: **                             win_drive, win_space_need, win_space_free,
                    187: **                             dst_path
                    188: **                     If any of the "win_" items is an empty string, its label
                    189: **                     text will be made non-visible.
                    190: **
                    191: **     Termination Symbols:
                    192: **             "CheckItemsState" - state of checkbox items (same format as above).
                    193: **             "DLGEVENT" - one of the following, depending on event:
                    194: **                             event                value
                    195: **                             ----------           ----------
                    196: **                             IDC_B                "BACK"
                    197: **                             IDC_C                "CONTINUE"
                    198: **                             IDC_P                "PATH"
                    199: **                             IDC_X                "EXIT"
                    200: **                             IDC_B1  to IDC_B10   "CHK1" to "CHK10"
                    201: **                             IDC_SP1 to IDC_SP10  "BTN1" to "BTN10"
                    202: **                             IDCANCEL             "CANCEL"
                    203: **                             STF_ACTIVATEAPP      "REACTIVATE"
                    204: **
                    205: **     Note:
                    206: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    207: **
                    208: *****************************************************************************/
                    209: BOOL FAR PASCAL FCustInstDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    210: {
                    211:        char  rgchChk[10];
                    212:        char  rgchBtn[10];
                    213:        WORD  idc;
                    214:        WORD  cItems;
                    215:        WORD  i, cb;
                    216:        char  szSymBuf[cbSymBuf];
                    217:        LPSTR szEvent;
                    218: 
                    219:        switch (wMsg)
                    220:                {
                    221:        case STF_ACTIVATEAPP:
                    222:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                    223:                        {
                    224:                        DestroyWindow(GetParent(hdlg));
                    225:                        return(fTrue);
                    226:                        }
                    227:                ReactivateSetupScript();
                    228:                return(fTrue);
                    229: 
                    230:        case STF_REINITDIALOG:
                    231:        case WM_INITDIALOG:
                    232:                cItems = UsGetListLength("CheckItemsState");
                    233:                idc = IDC_B1;
                    234:                for (i = 1; i <= cItems; ++i)
                    235:                        {
                    236:                        WORD wCheck = 0;
                    237: 
                    238:                        cb = CbGetListItem("CheckItemsState", i, szSymBuf, cbSymBuf);
                    239:                        Assert(cb < cbSymBuf);
                    240:                        if (lstrcmp(szSymBuf, "ON") == 0)
                    241:                                wCheck = 1;
                    242:                        CheckDlgButton(hdlg, idc++, wCheck);
                    243:                        }
                    244: 
                    245:                cItems = UsGetListLength("StatusItemsText");
                    246:                idc = IDC_STATUS1;
                    247:                for (i = 1; i <= cItems; ++i)
                    248:                        {
                    249:                        WORD wCheck = 0;
                    250: 
                    251:                        cb = CbGetListItem("StatusItemsText", i, szSymBuf, cbSymBuf);
                    252:                        Assert(cb < cbSymBuf);
                    253:                        SetDlgItemText(hdlg, idc++, szSymBuf);
                    254:                        }
                    255: 
                    256:                cItems = UsGetListLength("DriveStatusText");
                    257:                idc = IDC_TEXT1;
                    258:                for (i = 1; i <= cItems; ++i)
                    259:                        {
                    260:                        WORD wCheck = 0;
                    261: 
                    262:                        cb = CbGetListItem("DriveStatusText", i, szSymBuf, cbSymBuf);
                    263:                        Assert(cb < cbSymBuf);
                    264:                        SetDlgItemText(hdlg, idc++, szSymBuf);
                    265:                        if (i >= 4
                    266:                                        && i <= 6)
                    267:                                {
                    268:                                if (*szSymBuf == '\0')
                    269:                                        ShowWindow(GetDlgItem(hdlg, IDC_TEXT4+i), SW_HIDE);
                    270:                                else
                    271:                                        ShowWindow(GetDlgItem(hdlg, IDC_TEXT4+i), SW_SHOWNOACTIVATE);
                    272:                                }
                    273:                        }
                    274: 
                    275:                return(fTrue);
                    276: 
                    277:        case WM_COMMAND:
                    278:                switch(wParam)
                    279:                        {
                    280:                default:
                    281:                        szEvent = (LPSTR)NULL;
                    282:                        break;
                    283: 
                    284:                case IDC_B1:
                    285:                case IDC_B2:
                    286:                case IDC_B3:
                    287:                case IDC_B4:
                    288:                case IDC_B5:
                    289:                case IDC_B6:
                    290:                case IDC_B7:
                    291:                case IDC_B8:
                    292:                case IDC_B9:
                    293:                case IDC_B10:
                    294:                        lstrcpy((LPSTR)rgchChk, "CHK");
                    295:                        IntToAscii((int)(wParam-IDC_B1+1), (LPSTR)(&rgchChk[3]));
                    296:                        szEvent = (LPSTR)rgchChk;
                    297:                        break;
                    298: 
                    299:                case IDC_SP1:
                    300:                case IDC_SP2:
                    301:                case IDC_SP3:
                    302:                case IDC_SP4:
                    303:                case IDC_SP5:
                    304:                case IDC_SP6:
                    305:                case IDC_SP7:
                    306:                case IDC_SP8:
                    307:                case IDC_SP9:
                    308:                case IDC_SP10:
                    309:                        lstrcpy((LPSTR)rgchBtn, "BTN");
                    310:                        IntToAscii((int)(wParam-IDC_SP1+1), (LPSTR)(&rgchBtn[3]));
                    311:                        szEvent = (LPSTR)rgchBtn;
                    312:                        break;
                    313: 
                    314:                case IDOK:
                    315:                        wParam = IDC_C;
                    316:                case IDC_B:
                    317:                case IDC_C:
                    318:                case IDC_X:
                    319:                case IDCANCEL:
                    320:                        szEvent = SzDlgEvent(wParam);
                    321:                        Assert(szEvent != NULL);
                    322:                        break;
                    323: 
                    324:                case IDC_P:
                    325:                        szEvent = "PATH";
                    326:                        break;
                    327: 
                    328:                case IDC_H:
                    329:                        HdlgShowHelp();
                    330:                        return(fTrue);
                    331: 
                    332:                        }
                    333: 
                    334:                if (szEvent == (LPSTR)NULL)
                    335:                        break;
                    336: 
                    337:                FRemoveSymbol("CheckItemsState");
                    338:                for (idc = IDC_B1; GetDlgItem(hdlg, idc); idc++)
                    339:                        if (!FAddListItem("CheckItemsState",
                    340:                                        IsDlgButtonChecked(hdlg, idc) ? "ON" : "OFF"))
                    341:                                {
                    342:                                DestroyWindow(GetParent(hdlg));
                    343:                                return(fFalse);
                    344:                                }
                    345:                Assert((unsigned)(idc-IDC_B1+1) <= iszBMax);
                    346: 
                    347:                if (szEvent != (LPSTR)NULL)
                    348:                        if (!FSetSymbolValue("DLGEVENT", szEvent))
                    349:                                {
                    350:                                DestroyWindow(GetParent(hdlg));
                    351:                                return(fTrue);
                    352:                                }
                    353: 
                    354:                ReactivateSetupScript();
                    355:                break;
                    356:                }
                    357: 
                    358:        return(fFalse);
                    359: }
                    360: 
                    361: 
                    362: 
                    363: /*
                    364: **     Purpose:
                    365: **             Display Dialog procedure for templates to display symbol
                    366: **             message with editting.
                    367: **             (Limits the input string length to cbFullPathMax characters.)
                    368: **
                    369: **     Controls Recognized:
                    370: **             Edit       - IDC_EDIT
                    371: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                    372: **
                    373: **     Initialization Symbols:
                    374: **             "EditTextIn" - initial text for IDC_EDIT edit control.
                    375: **             "EditFocus"  - position of intial focus for text string:
                    376: **                             "END" (default), "ALL", or "START"
                    377: **
                    378: **     Termination Symbols:
                    379: **             "EditTextOut" - text in the IDC_EDIT edit control upon termination.
                    380: **             "DLGEVENT"    - one of the following, depending on event:
                    381: **                             event                value
                    382: **                             ----------           ----------
                    383: **                             IDC_B                "BACK"
                    384: **                             IDC_C                "CONTINUE"
                    385: **                             IDC_X                "EXIT"
                    386: **                             IDCANCEL             "CANCEL"
                    387: **                             STF_ACTIVATEAPP      "REACTIVATE"
                    388: **
                    389: **     Note:
                    390: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    391: **
                    392: *****************************************************************************/
                    393: BOOL FAR PASCAL FDispDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    394: {
                    395:        static WORD wSelStart = 0;
                    396:        static WORD wSelEnd   = 0;
                    397:        char  rgchText[cbFullPathMax + 1];
                    398:        WORD  cbLen;
                    399:        WORD  cb;
                    400:        char  szSymBuf[cbFullPathMax + 1];
                    401: 
                    402:        switch (wMsg)
                    403:                {
                    404:        case STF_ACTIVATEAPP:
                    405:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                    406:                        {
                    407:                        DestroyWindow(GetParent(hdlg));
                    408:                        return(fTrue);
                    409:                        }
                    410:                ReactivateSetupScript();
                    411:                return(fTrue);
                    412: 
                    413:        case WM_INITDIALOG:
                    414:                cb = CbGetSymbolValue("EditTextIn", szSymBuf, cbFullPathMax + 1);
                    415:                Assert(cb < cbFullPathMax + 1);
                    416:                SendDlgItemMessage(hdlg, IDC_TEXT1, EM_LIMITTEXT, cbFullPathMax, 0L);
                    417:                SetDlgItemText(hdlg, IDC_TEXT1, (LPSTR)szSymBuf);
                    418: 
                    419:                cbLen = lstrlen(szSymBuf);
                    420:                cb = CbGetSymbolValue("EditFocus", szSymBuf, cbFullPathMax + 1);
                    421:                Assert(cb < cbFullPathMax + 1);
                    422: 
                    423:                if (lstrcmp(szSymBuf, "ALL") == 0)
                    424:                        {
                    425:                        wSelStart = 0;
                    426:                        wSelEnd   = INT_MAX;
                    427:                        }
                    428:                else if (lstrcmp(szSymBuf, "START") == 0)
                    429:                        {
                    430:                        wSelStart = 0;
                    431:                        wSelEnd   = 0;
                    432:                        }
                    433:                else       /* default == END */
                    434:                        {
                    435:                        wSelStart = (WORD)cbLen;
                    436:                        wSelEnd   = (WORD)cbLen;
                    437:                        }
                    438:                return(fTrue);
                    439: 
                    440:        case STF_REINITDIALOG:
                    441:                SendDlgItemMessage(hdlg, IDC_TEXT1, EM_SETSEL, 0, MAKELONG(256, 256));
                    442:                SetFocus(GetDlgItem(hdlg, IDC_TEXT1));
                    443:                return(fTrue);
                    444: 
                    445:        case WM_COMMAND:
                    446:                switch(wParam)
                    447:                        {
                    448:                case IDC_H:
                    449:                        HdlgShowHelp();
                    450:                        return(fTrue);
                    451: 
                    452:                case IDC_B:
                    453:                case IDC_C:
                    454:                case IDC_X:
                    455:                case IDCANCEL:
                    456:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    457:                                {
                    458:                                DestroyWindow(GetParent(hdlg));
                    459:                                return(fTrue);
                    460:                                }
                    461:                        SendDlgItemMessage(hdlg, IDC_TEXT1, (WORD)WM_GETTEXT,
                    462:                                        cbFullPathMax + 1, (LONG)((LPSTR)rgchText));
                    463:                        if (!FSetSymbolValue("EditTextOut", rgchText))
                    464:                                {
                    465:                                DestroyWindow(GetParent(hdlg));
                    466:                                return(fTrue);
                    467:                                }
                    468:                        ReactivateSetupScript();
                    469:                        break;
                    470:                        }
                    471:                break;
                    472:                }
                    473: 
                    474:        return(fFalse);
                    475: }
                    476: 
                    477: /*
                    478: **     Purpose:
                    479: **             Edit Dialog procedure for templates with one Edit control.
                    480: **             (Limits the input string length to cbFullPathMax characters.)
                    481: **
                    482: **     Controls Recognized:
                    483: **             Edit       - IDC_EDIT
                    484: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                    485: **
                    486: **     Initialization Symbols:
                    487: **             "EditTextIn" - initial text for IDC_EDIT edit control.
                    488: **             "EditFocus"  - position of intial focus for text string:
                    489: **                             "END" (default), "ALL", or "START"
                    490: **
                    491: **     Termination Symbols:
                    492: **             "EditTextOut" - text in the IDC_EDIT edit control upon termination.
                    493: **             "DLGEVENT"    - one of the following, depending on event:
                    494: **                             event                value
                    495: **                             ----------           ----------
                    496: **                             IDC_B                "BACK"
                    497: **                             IDC_C                "CONTINUE"
                    498: **                             IDC_X                "EXIT"
                    499: **                             IDCANCEL             "CANCEL"
                    500: **                             STF_ACTIVATEAPP      "REACTIVATE"
                    501: **
                    502: **     Note:
                    503: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    504: **
                    505: *****************************************************************************/
                    506: BOOL FAR PASCAL FEditDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    507: {
                    508:        static WORD wSelStart = 0;
                    509:        static WORD wSelEnd   = 0;
                    510:        char  rgchText[cbFullPathMax + 1];
                    511:        WORD  cbLen;
                    512:        WORD  cb;
                    513:        char  szSymBuf[cbFullPathMax + 1];
                    514: 
                    515:        switch (wMsg)
                    516:                {
                    517:        case STF_ACTIVATEAPP:
                    518:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                    519:                        {
                    520:                        DestroyWindow(GetParent(hdlg));
                    521:                        return(fTrue);
                    522:                        }
                    523:                ReactivateSetupScript();
                    524:                return(fTrue);
                    525: 
                    526:        case WM_INITDIALOG:
                    527:                cb = CbGetSymbolValue("EditTextIn", szSymBuf, cbFullPathMax + 1);
                    528:                Assert(cb < cbFullPathMax + 1);
                    529:                SendDlgItemMessage(hdlg, IDC_EDIT, EM_LIMITTEXT, cbFullPathMax, 0L);
                    530:                SetDlgItemText(hdlg, IDC_EDIT, (LPSTR)szSymBuf);
                    531: 
                    532:                cbLen = lstrlen(szSymBuf);
                    533:                cb = CbGetSymbolValue("EditFocus", szSymBuf, cbFullPathMax + 1);
                    534:                Assert(cb < cbFullPathMax + 1);
                    535: 
                    536:                if (lstrcmp(szSymBuf, "ALL") == 0)
                    537:                        {
                    538:                        wSelStart = 0;
                    539:                        wSelEnd   = INT_MAX;
                    540:                        }
                    541:                else if (lstrcmp(szSymBuf, "START") == 0)
                    542:                        {
                    543:                        wSelStart = 0;
                    544:                        wSelEnd   = 0;
                    545:                        }
                    546:                else       /* default == END */
                    547:                        {
                    548:                        wSelStart = (WORD)cbLen;
                    549:                        wSelEnd   = (WORD)cbLen;
                    550:                        }
                    551:                return(fTrue);
                    552: 
                    553:        case STF_REINITDIALOG:
                    554:                SendDlgItemMessage(hdlg, IDC_EDIT, EM_SETSEL, 0, MAKELONG(256, 256));
                    555:                SetFocus(GetDlgItem(hdlg, IDC_EDIT));
                    556:                return(fTrue);
                    557: 
                    558:        case WM_COMMAND:
                    559:                switch(wParam)
                    560:                        {
                    561:                case IDC_EDIT:
                    562:                        if (HIWORD(lParam) == EN_SETFOCUS)
                    563:                                SendDlgItemMessage(hdlg, IDC_EDIT, EM_SETSEL, 0,
                    564:                                                MAKELONG(wSelStart, wSelEnd));
                    565:                        else if (HIWORD(lParam) == EN_KILLFOCUS)
                    566:                                {
                    567:                                LONG  l = SendDlgItemMessage(hdlg, IDC_EDIT, EM_GETSEL, 0, 0L);
                    568: 
                    569:                                wSelStart = LOWORD(l);
                    570:                                wSelEnd   = HIWORD(l);
                    571:                                }
                    572:                        break;
                    573:                case IDC_H:
                    574:                        HdlgShowHelp();
                    575:                        return(fTrue);
                    576: 
                    577:                case IDC_B:
                    578:                case IDC_C:
                    579:                case IDC_X:
                    580:                case IDCANCEL:
                    581:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    582:                                {
                    583:                                DestroyWindow(GetParent(hdlg));
                    584:                                return(fTrue);
                    585:                                }
                    586:                        SendDlgItemMessage(hdlg, IDC_EDIT, (WORD)WM_GETTEXT,
                    587:                                        cbFullPathMax + 1, (LONG)((LPSTR)rgchText));
                    588:                        if (!FSetSymbolValue("EditTextOut", rgchText))
                    589:                                {
                    590:                                DestroyWindow(GetParent(hdlg));
                    591:                                return(fTrue);
                    592:                                }
                    593:                        ReactivateSetupScript();
                    594:                        break;
                    595:                        }
                    596:                break;
                    597:                }
                    598: 
                    599:        return(fFalse);
                    600: }
                    601: 
                    602: 
                    603: 
                    604: /*
                    605: **     Purpose:
                    606: **             Help Dialog procedure.
                    607: **
                    608: **     Controls Recognized:
                    609: **             Pushbutton - IDC_X.
                    610: **
                    611: **     Initialization Symbols:
                    612: **             none.
                    613: **
                    614: **     Termination Symbols:
                    615: **             none. (Handles IDC_X and IDCANCEL events by calling FCloseHelp.)
                    616: **
                    617: **     Note:
                    618: **             This dialog proc is for Help dialogs ONLY (szHelpProc$ parameter
                    619: **             of UIStartDlg) and CANNOT be used as the szDlgProc$ parameter
                    620: **             of the UIStartDlg MSSetup script function.
                    621: **
                    622: *****************************************************************************/
                    623: BOOL FAR PASCAL FHelpDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    624: {
                    625:        switch (wMsg)
                    626:                {
                    627:        case WM_INITDIALOG:
                    628:                return(fTrue);
                    629: 
                    630:        case STF_REINITDIALOG:
                    631:                return(fTrue);
                    632: 
                    633:        case STF_ACTIVATEAPP:
                    634:                /* Help dlg should not be on the dlg stack
                    635:                ** and should never get this message.
                    636:                */
                    637:                Assert(fFalse);
                    638:                return(fTrue);
                    639: 
                    640:        case WM_COMMAND:
                    641:                if (wParam != IDC_X
                    642:                        && wParam != IDCANCEL)
                    643:                        break;
                    644:                FCloseHelp();
                    645:                return(fTrue);
                    646: 
                    647:                }
                    648:        return(fFalse);
                    649: }
                    650: 
                    651: 
                    652: 
                    653: /*
                    654: **     Purpose:
                    655: **             Information Dialog procedure.
                    656: **
                    657: **     Controls Recognized:
                    658: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                    659: **
                    660: **     Initialization Symbols:
                    661: **             none.
                    662: **
                    663: **     Termination Symbols:
                    664: **             "DLGEVENT" - one of the following, according to control event:
                    665: **                             event     value
                    666: **                             -------   -------
                    667: **                             IDC_B     "BACK"
                    668: **                             IDC_C     "CONTINUE"
                    669: **                             IDC_X     "EXIT"
                    670: **                             IDCANCEL  "CANCEL"
                    671: **
                    672: **     Note:
                    673: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    674: **
                    675: *****************************************************************************/
                    676: BOOL FAR PASCAL FInfoDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    677: {
                    678:        switch (wMsg)
                    679:                {
                    680:        case WM_INITDIALOG:
                    681:                return(fTrue);
                    682: 
                    683:        case STF_REINITDIALOG:
                    684:        case STF_ACTIVATEAPP:
                    685:                return(fTrue);
                    686: 
                    687:        case WM_COMMAND:
                    688:                switch (wParam)
                    689:                        {
                    690:                case IDC_H:
                    691:                        HdlgShowHelp();
                    692:                        return(fTrue);
                    693: 
                    694:                case IDC_B:
                    695:                case IDC_C:
                    696:                case IDC_X:
                    697:                case IDCANCEL:
                    698:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    699:                                {
                    700:                                DestroyWindow(GetParent(hdlg));
                    701:                                return(fTrue);
                    702:                                }
                    703:                        ReactivateSetupScript();
                    704:                        break;
                    705:                        }
                    706:                break;
                    707:                }
                    708: 
                    709:        return(fFalse);
                    710: }
                    711: 
                    712: 
                    713: 
                    714: /*
                    715: **     Purpose:
                    716: **             Information Dialog procedure, without "Exit" button.
                    717: **
                    718: **     Controls Recognized:
                    719: **             Pushbutton - IDC_B, IDC_C, IDC_H
                    720: **
                    721: **     Initialization Symbols:
                    722: **             none.
                    723: **
                    724: **     Termination Symbols:
                    725: **             "DLGEVENT" - one of the following, depending on event:
                    726: **                             event                value
                    727: **                             ----------           ----------
                    728: **                             IDC_B                "BACK"
                    729: **                             IDC_C                "CONTINUE"
                    730: **                             IDCANCEL             "CANCEL"
                    731: **                             STF_ACTIVATEAPP      "REACTIVATE"
                    732: **
                    733: **     Note:
                    734: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    735: **
                    736: *****************************************************************************/
                    737: BOOL FAR PASCAL FInfo0DlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    738: {
                    739:        switch (wMsg)
                    740:                {
                    741:        case WM_INITDIALOG:
                    742:                return(fTrue);
                    743: 
                    744:        case STF_REINITDIALOG:
                    745:                return(fTrue);
                    746: 
                    747:        case STF_ACTIVATEAPP:
                    748:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                    749:                        {
                    750:                        DestroyWindow(GetParent(hdlg));
                    751:                        return(fTrue);
                    752:                        }
                    753:                ReactivateSetupScript();
                    754:                return(fTrue);
                    755: 
                    756:        case WM_COMMAND:
                    757:                switch (wParam)
                    758:                        {
                    759:                case IDC_H:
                    760:                        HdlgShowHelp();
                    761:                        return(fTrue);
                    762: 
                    763:                case IDC_B:
                    764:                case IDC_C:
                    765:                case IDCANCEL:
                    766:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    767:                                {
                    768:                                DestroyWindow(GetParent(hdlg));
                    769:                                return(fTrue);
                    770:                                }
                    771:                        ReactivateSetupScript();
                    772:                        break;
                    773:                        }
                    774:                break;
                    775:                }
                    776: 
                    777:        return(fFalse);
                    778: }
                    779: 
                    780: 
                    781: 
                    782: /*
                    783: **     Purpose:
                    784: **             Single Choice Listbox Dialog procedure for templates with exactly one
                    785: **             listbox control.
                    786: **
                    787: **     Controls Recognized:
                    788: **             Listbox    - IDC_LIST1
                    789: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                    790: **
                    791: **     Initialization Symbols:
                    792: **             "ListItemsIn"  - list of strings to put in the listbox.
                    793: **             "ListItemsOut" - simple string (not a list) representing an
                    794: **                     initial selection in "ListItemsIn".
                    795: **
                    796: **     Termination Symbols:
                    797: **             "ListItemsOut" - selected list item string.
                    798: **             "DLGEVENT"     - one of the following, according to control event:
                    799: **                             event     value
                    800: **                             -------   -------
                    801: **                             IDC_B     "BACK"
                    802: **                             IDC_C     "CONTINUE"
                    803: **                             IDC_X     "EXIT"
                    804: **                             IDCANCEL  "CANCEL"
                    805: **
                    806: **     Note:
                    807: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    808: **
                    809: *****************************************************************************/
                    810: BOOL FAR PASCAL FListDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    811: {
                    812:        char szListIn[cbSymBuf];
                    813:        char szListOut[cbSymBuf];
                    814:        WORD iItem;
                    815:        WORD cb, i;
                    816:        WORD cItems;
                    817: 
                    818:        switch (wMsg)
                    819:                {
                    820:        case WM_INITDIALOG:
                    821:                cItems = UsGetListLength("ListItemsIn");
                    822:                for (i = 1; i <= cItems; ++i)
                    823:                        {
                    824:                        cb = CbGetListItem("ListItemsIn", i, szListIn, cbSymBuf);
                    825:                        Assert(cb < cbSymBuf);
                    826:                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_ADDSTRING, 0,
                    827:                                        (LONG)(LPSTR)szListIn);
                    828:                        }
                    829: 
                    830:                cb = CbGetSymbolValue("ListItemsOut", szListOut, cbSymBuf);
                    831:                Assert(cb < cbSymBuf);
                    832:                if (cb == 0)
                    833:                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETCURSEL, (WORD)-1, 0L);
                    834:                else
                    835:                        {
                    836:                        for (i = 1, iItem = 0; i <= cItems; ++i, ++iItem)
                    837:                                {
                    838:                                cb = CbGetListItem("ListItemsIn", i, szListIn, cbSymBuf);
                    839:                                Assert(cb < cbSymBuf);
                    840:                                if (lstrcmp(szListOut, szListIn) == 0)
                    841:                                        {
                    842:                                        SendDlgItemMessage(hdlg,IDC_LIST1,LB_SETCURSEL,iItem,0L);
                    843:                                        break;
                    844:                                        }
                    845:                                }
                    846:                        }
                    847: 
                    848:                /* Note: Depends on number of lines in list box.
                    849:                */
                    850:                if (iItem < 4)
                    851:                        iItem = 0;
                    852:                SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETTOPINDEX, iItem, 0L);
                    853: 
                    854:                return(fTrue);
                    855: 
                    856:        case STF_REINITDIALOG:
                    857:        case STF_ACTIVATEAPP:
                    858:                return(fTrue);
                    859: 
                    860:        case WM_COMMAND:
                    861:                switch(wParam)
                    862:                        {
                    863:                case IDC_H:
                    864:                        HdlgShowHelp();
                    865:                        return(fTrue);
                    866: 
                    867:                case IDC_LIST1:
                    868:                        if (HIWORD(lParam) != LBN_DBLCLK)
                    869:                                break;
                    870:                        wParam = IDC_C;
                    871:                case IDC_B:
                    872:                case IDC_C:
                    873:                case IDC_X:
                    874:                case IDCANCEL:
                    875:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    876:                                {
                    877:                                DestroyWindow(GetParent(hdlg));
                    878:                                return(fTrue);
                    879:                                }
                    880: 
                    881:                        if ((iItem = (WORD)SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETCURSEL,
                    882:                                                0, 0L)) == LB_ERR
                    883:                                        || (cb = (WORD)SendDlgItemMessage(hdlg, IDC_LIST1,
                    884:                                                        LB_GETTEXTLEN, iItem, 0L)) == LB_ERR)
                    885:                                *szListOut = '\0';
                    886:                        else
                    887:                                {
                    888:                                Assert(cb <= cbSymBuf);
                    889:                                SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETTEXT, iItem,
                    890:                                                (LONG)(LPSTR)szListOut);
                    891:                                }
                    892:                        if (!FSetSymbolValue("ListItemsOut", szListOut))
                    893:                                {
                    894:                                DestroyWindow(GetParent(hdlg));
                    895:                                return(fTrue);
                    896:                                }
                    897: 
                    898:                        ReactivateSetupScript();
                    899:                        break;
                    900:                        }
                    901:                break;
                    902: 
                    903:                }
                    904: 
                    905:        return(fFalse);
                    906: }
                    907: 
                    908: 
                    909: 
                    910: /*
                    911: **     Purpose:
                    912: **             Modeless Dialog procedure.
                    913: **
                    914: **     Controls Recognized:
                    915: **             none.
                    916: **
                    917: **     Initialization Symbols:
                    918: **             none.
                    919: **
                    920: **     Termination Symbols:
                    921: **             none.
                    922: **
                    923: **     Note:
                    924: **             This dialog procedure is REQUIRED with use of any Billboard
                    925: **             MSSetup script functions.
                    926: **
                    927: *****************************************************************************/
                    928: BOOL FAR PASCAL FModelessDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    929: {
                    930:        switch (wMsg)
                    931:                {
                    932:        case WM_INITDIALOG:
                    933:                ReactivateSetupScript();
                    934:                return(fTrue);
                    935: 
                    936:        case STF_REINITDIALOG:
                    937:        case STF_ACTIVATEAPP:
                    938:                return(fTrue);
                    939: 
                    940:        case WM_CLOSE:
                    941:        case WM_COMMAND:
                    942:                Assert(fFalse);
                    943:                break;
                    944:                }
                    945: 
                    946:        return(fFalse);
                    947: }
                    948: 
                    949: 
                    950: 
                    951: /*
                    952: **     Purpose:
                    953: **             Multiple Choice Listbox Dialog procedure for templates with
                    954: **             exactly one listbox control.
                    955: **
                    956: **     Controls Recognized:
                    957: **             Listbox    - IDC_LIST1
                    958: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_L, IDC_S, IDC_X
                    959: **
                    960: **     Initialization Symbols:
                    961: **             "ListItemsIn"  - list of strings to put in the listbox.
                    962: **             "ListItemsOut" - list of strings representing initial
                    963: **                     selections in "ListItemsIn".
                    964: **
                    965: **     Termination Symbols:
                    966: **             "ListItemsOut" - list of items selected (if any).
                    967: **             "DLGEVENT"     - one of the following, according to control event:
                    968: **                             event     value
                    969: **                             -------   -------
                    970: **                             IDC_B     "BACK"
                    971: **                             IDC_C     "CONTINUE"
                    972: **                             IDC_X     "EXIT"
                    973: **                             IDCANCEL  "CANCEL"
                    974: **
                    975: **     Note:
                    976: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    977: **             Pushbuttons IDC_L and IDC_S are for "clear all" and "select all"
                    978: **             respectively.
                    979: **
                    980: *****************************************************************************/
                    981: BOOL FAR PASCAL FMultiDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    982: {
                    983:        WORD i, j, nCount;
                    984:        char szListIn[cbSymBuf];
                    985:        char szListOut[cbSymBuf];
                    986:        WORD iItem, iItemTop;
                    987:        WORD cb;
                    988:        WORD cItemsIn, cItemsOut;
                    989: 
                    990:        switch (wMsg)
                    991:                {
                    992:        case WM_INITDIALOG:
                    993:                cItemsIn = UsGetListLength("ListItemsIn");
                    994:                nCount = 0;
                    995:                for (i = 1; i <= cItemsIn; ++i)
                    996:                        {
                    997:                        cb = CbGetListItem("ListItemsIn", i, szListIn, cbSymBuf);
                    998:                        Assert(cb < cbSymBuf);
                    999:                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_ADDSTRING, 0,
                   1000:                                        (LONG)(LPSTR)szListIn);
                   1001:                        nCount++;
                   1002:                        }
                   1003:                Assert(nCount == (WORD)SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETCOUNT,
                   1004:                                0, 0L));
                   1005: 
                   1006:                cItemsOut = UsGetListLength("ListItemsOut");
                   1007:                for (i = 1, iItemTop = 0; i <= cItemsOut; ++i, ++iItemTop)
                   1008:                        {
                   1009:                        cb = CbGetListItem("ListItemsOut", i, szListOut, cbSymBuf);
                   1010:                        Assert(cb < cbSymBuf);
                   1011:                        for (j = 1, iItem = 0; j <= cItemsIn; ++j, ++iItem)
                   1012:                                {
                   1013:                                cb = CbGetListItem("ListItemsIn", j, szListIn, cbSymBuf);
                   1014:                                Assert(cb < cbSymBuf);
                   1015:                                if (lstrcmp(szListOut, szListIn) == 0)
                   1016:                                        {
                   1017:                                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETSEL, 1,
                   1018:                                                        MAKELONG(iItem, 0));
                   1019:                                        if (iItemTop == 0
                   1020:                                                        || (WORD)iItem < iItemTop)
                   1021:                                                iItemTop = (WORD)iItem;
                   1022:                                        break;
                   1023:                                        }
                   1024:                                }
                   1025:                        }
                   1026: 
                   1027:                /* Note: Depends on number of lines in list box.
                   1028:                */
                   1029:                if (iItemTop < 4)
                   1030:                        iItemTop = 0;
                   1031:                SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETTOPINDEX, iItemTop, 0L);
                   1032: 
                   1033:                return(fTrue);
                   1034: 
                   1035:        case STF_REINITDIALOG:
                   1036:        case STF_ACTIVATEAPP:
                   1037:                return(fTrue);
                   1038: 
                   1039:        case WM_COMMAND:
                   1040:                switch(wParam)
                   1041:                        {
                   1042:                case IDC_S:
                   1043:                case IDC_L:
                   1044:                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETSEL, (wParam == IDC_S),
                   1045:                                        -1L);
                   1046:                        break;
                   1047: 
                   1048:                case IDC_H:
                   1049:                        HdlgShowHelp();
                   1050:                        return(fTrue);
                   1051: 
                   1052:                case IDC_B:
                   1053:                case IDC_C:
                   1054:                case IDC_X:
                   1055:                case IDCANCEL:
                   1056:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                   1057:                                {
                   1058:                                DestroyWindow(GetParent(hdlg));
                   1059:                                return(fTrue);
                   1060:                                }
                   1061: 
                   1062:                        /* Note: Could be faster to use LB_GETSELITEMS here.
                   1063:                        */
                   1064:                        nCount = (WORD)SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETCOUNT, 0,
                   1065:                                        0L);
                   1066: 
                   1067:                        FRemoveSymbol("ListItemsOut");
                   1068:                        for (i = 0; i < nCount; i++)
                   1069:                                {
                   1070:                                if (SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETSEL, (WORD)i, 0L))
                   1071:                                        {
                   1072:                                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETTEXT, (WORD)i,
                   1073:                                                        (LONG)(LPSTR)szListOut);
                   1074:                                        if (!FAddListItem("ListItemsOut", szListOut))
                   1075:                                                {
                   1076:                                                DestroyWindow(GetParent(hdlg));
                   1077:                                                return(fTrue);
                   1078:                                                }
                   1079:                                        }
                   1080:                                }
                   1081: 
                   1082:                        ReactivateSetupScript();
                   1083:                        break;
                   1084:                        }
                   1085:                break;
                   1086:                }
                   1087: 
                   1088:        return(fFalse);
                   1089: }
                   1090: 
                   1091: 
                   1092: 
                   1093: /*
                   1094: **     Purpose:
                   1095: **             Quit Dialog procedure.
                   1096: **
                   1097: **     Controls Recognized:
                   1098: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                   1099: **
                   1100: **     Initialization Symbols:
                   1101: **             none.
                   1102: **
                   1103: **     Termination Symbols:
                   1104: **             "DLGEVENT" - one of the following, depending on event:
                   1105: **                             event                value
                   1106: **                             ----------           ----------
                   1107: **                             IDC_B                "BACK"
                   1108: **                             IDC_C                "CONTINUE"
                   1109: **                             IDC_X                "EXIT"
                   1110: **                             IDCANCEL             "CANCEL"
                   1111: **                             STF_ACTIVATEAPP      "REACTIVATE"
                   1112: **
                   1113: **     Note:
                   1114: **             Pushbutton IDC_H will open the related Help dialog, if any.
                   1115: **
                   1116: *****************************************************************************/
                   1117: BOOL FAR PASCAL FQuitDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                   1118: {
                   1119:        switch (wMsg)
                   1120:                {
                   1121:        case WM_INITDIALOG:
                   1122:                return(fTrue);
                   1123: 
                   1124:        case STF_REINITDIALOG:
                   1125:                return(fTrue);
                   1126: 
                   1127:        case STF_ACTIVATEAPP:
                   1128:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                   1129:                        {
                   1130:                        DestroyWindow(GetParent(hdlg));
                   1131:                        return(fTrue);
                   1132:                        }
                   1133:                ReactivateSetupScript();
                   1134:                return(fTrue);
                   1135: 
                   1136:        case WM_COMMAND:
                   1137:                switch(wParam)
                   1138:                        {
                   1139:                case IDC_H:
                   1140:                        HdlgShowHelp();
                   1141:                        return(fTrue);
                   1142: 
                   1143:                case IDC_B:
                   1144:                case IDC_C:
                   1145:                case IDC_X:
                   1146:                case IDCANCEL:
                   1147:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                   1148:                                {
                   1149:                                DestroyWindow(GetParent(hdlg));
                   1150:                                return(fTrue);
                   1151:                                }
                   1152: 
                   1153:                        ReactivateSetupScript();
                   1154:                        break;
                   1155:                        }
                   1156:                break;
                   1157:                }
                   1158:        return(fFalse);
                   1159: }
                   1160: 
                   1161: 
                   1162: 
                   1163: /*
                   1164: **     Purpose:
                   1165: **             Radio Button Group Dialog procedure for templates with one group
                   1166: **             of one to ten radio button controls.
                   1167: **
                   1168: **     Controls Recognized:
                   1169: **             Radio      - IDC_B1 to IDC_B10 (sequential)
                   1170: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                   1171: **
                   1172: **     Initialization Symbols:
                   1173: **             "RadioDefault" - index (one-based) of radio button to be
                   1174: **                     initialized as selected (default is "1").
                   1175: **             "OptionsGreyed" - list of (one-based) indexes of radio buttons
                   1176: **                     to be initialized as disabled.  Indexes not in the list will
                   1177: **                     be left enabled.
                   1178: **
                   1179: **     Termination Symbols:
                   1180: **             "ButtonChecked" - index of currently selected radio button.
                   1181: **             "DLGEVENT"      - one of the following, depending on event:
                   1182: **                             event                value
                   1183: **                             ----------           ----------
                   1184: **                             IDC_B                "BACK"
                   1185: **                             IDC_C                "CONTINUE"
                   1186: **                             IDC_X                "EXIT"
                   1187: **                             IDCANCEL             "CANCEL"
                   1188: **                             STF_ACTIVATEAPP      "REACTIVATE"
                   1189: **
                   1190: **     Note:
                   1191: **             Pushbutton IDC_H will open the related Help dialog, if any.
                   1192: **
                   1193: *****************************************************************************/
                   1194: BOOL FAR PASCAL FRadioDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                   1195: {
                   1196:        char rgchNum[10];
                   1197:        int  iButtonChecked;
                   1198:        char szSymBuf[cbSymBuf];
                   1199:        WORD i, cb, cItems, idc;
                   1200: 
                   1201:        switch (wMsg)
                   1202:                {
                   1203:        case STF_ACTIVATEAPP:
                   1204:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                   1205:                        {
                   1206:                        DestroyWindow(GetParent(hdlg));
                   1207:                        return(fTrue);
                   1208:                        }
                   1209:                ReactivateSetupScript();
                   1210:                return(fTrue);
                   1211: 
                   1212:        case WM_INITDIALOG:
                   1213:                cb = CbGetSymbolValue("RadioDefault", szSymBuf, cbSymBuf);
                   1214:                Assert(cb < cbSymBuf);
                   1215:                if (*szSymBuf != '\0')
                   1216:                        {
                   1217:                        iButtonChecked = AsciiToInt((LPSTR)szSymBuf);
                   1218:                        if (iButtonChecked < 1)
                   1219:                                iButtonChecked = 0;
                   1220:                        if (iButtonChecked > 10)
                   1221:                                iButtonChecked = 10;
                   1222:                        }
                   1223:                else
                   1224:                        iButtonChecked = 1;
                   1225: 
                   1226:                if (iButtonChecked != 0)
                   1227:                        SendDlgItemMessage(hdlg, IDC_B0 + iButtonChecked, BM_SETCHECK,1,0L);
                   1228: 
                   1229:                cItems = UsGetListLength("OptionsGreyed");
                   1230:                idc = IDC_B1;
                   1231:                for (i = 1; i <= cItems; ++i)
                   1232:                        {
                   1233:                        int iOpt;
                   1234: 
                   1235:                        cb = CbGetListItem("OptionsGreyed", i, szSymBuf, cbSymBuf);
                   1236:                        Assert(cb < cbSymBuf);
                   1237:                        iOpt  = AsciiToInt((LPSTR)szSymBuf);
                   1238:                        if (iOpt > 0
                   1239:                                        && iOpt <= 10
                   1240:                                        && iOpt != iButtonChecked)
                   1241:                                EnableWindow(GetDlgItem(hdlg, IDC_B0 + iOpt), 0);
                   1242:                        else if (*szSymBuf != '\0')
                   1243:                                Assert(fFalse);
                   1244:                        }
                   1245:                return(fTrue);
                   1246: 
                   1247:        case STF_REINITDIALOG:
                   1248:                return(fTrue);
                   1249: 
                   1250:        case WM_COMMAND:
                   1251:                switch (wParam)
                   1252:                        {
                   1253:                case IDC_H:
                   1254:                        HdlgShowHelp();
                   1255:                        return(fTrue);
                   1256: 
                   1257:                case IDC_B1:
                   1258:                case IDC_B2:
                   1259:                case IDC_B3:
                   1260:                case IDC_B4:
                   1261:                case IDC_B5:
                   1262:                case IDC_B6:
                   1263:                case IDC_B7:
                   1264:                case IDC_B8:
                   1265:                case IDC_B9:
                   1266:                case IDC_B10:
                   1267:                        CheckRadioButton(hdlg, IDC_B1, IDC_B10, wParam);
                   1268:                        if (HIWORD(lParam) != BN_DOUBLECLICKED)
                   1269:                                break;
                   1270:                        wParam = IDC_C;
                   1271:                case IDC_B:
                   1272:                case IDC_C:
                   1273:                case IDC_X:
                   1274:                case IDCANCEL:
                   1275:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                   1276:                                {
                   1277:                                DestroyWindow(GetParent(hdlg));
                   1278:                                return(fTrue);
                   1279:                                }
                   1280: 
                   1281:                        iButtonChecked = 0;
                   1282:                        for (i = 1; i <= 10; i++)
                   1283:                                if (SendDlgItemMessage(hdlg, IDC_B0 + i, BM_GETCHECK, 0, 0L))
                   1284:                                        {
                   1285:                                        iButtonChecked = i;
                   1286:                                        break;
                   1287:                                        }
                   1288: 
                   1289:                        IntToAscii((int)iButtonChecked, (LPSTR)rgchNum);
                   1290:                        if (!FSetSymbolValue("ButtonChecked", rgchNum))
                   1291:                                {
                   1292:                                DestroyWindow(GetParent(hdlg));
                   1293:                                return(fTrue);
                   1294:                                }
                   1295: 
                   1296:                        ReactivateSetupScript();
                   1297:                        break;
                   1298:                        }
                   1299:                break;
                   1300:                }
                   1301: 
                   1302:        return(fFalse);
                   1303: }
                   1304: 
                   1305: 
                   1306: 
                   1307: /*
                   1308: **     Purpose:
                   1309: **             Get Name and Organization Dialog procedure for templates
                   1310: **             with two Edit controls.
                   1311: **             (Limits the input string length to cbNameMax characters.)
                   1312: **
                   1313: **     Controls Recognized:
                   1314: **             Edit       - IDC_EDIT, IDC_EDIT2
                   1315: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                   1316: **
                   1317: **     Initialization Symbols:
                   1318: **             none.
                   1319: **
                   1320: **     Termination Symbols:
                   1321: **             "NameOut" - text in the IDC_EDIT edit control upon termination.
                   1322: **             "OrgOut"  - text in the IDC_EDIT2 edit control upon termination.
                   1323: **             "DLGEVENT"    - one of the following, depending on event:
                   1324: **                             event                value
                   1325: **                             ----------           ----------
                   1326: **                             IDC_B                "BACK"
                   1327: **                             IDC_C                "CONTINUE"
                   1328: **                             IDC_X                "EXIT"
                   1329: **                             IDCANCEL             "CANCEL"
                   1330: **
                   1331: **     Note:
                   1332: **             Pushbutton IDC_H will open the related Help dialog, if any.
                   1333: **
                   1334: *****************************************************************************/
                   1335: BOOL FAR PASCAL FNameOrgDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                   1336: {
                   1337:        static WORD wSelStart1 = 0;
                   1338:        static WORD wSelEnd1   = 0;
                   1339:        static WORD wSelStart2 = 0;
                   1340:        static WORD wSelEnd2   = 0;
                   1341:        char  rgchText[cbNameMax + 1];
                   1342: 
                   1343:        switch (wMsg)
                   1344:                {
                   1345:        case WM_INITDIALOG:
                   1346:                SendDlgItemMessage(hdlg, IDC_EDIT, EM_LIMITTEXT, cbNameMax, 0L);
                   1347:                SetDlgItemText(hdlg, IDC_EDIT, (LPSTR)"");
                   1348: 
                   1349:                SendDlgItemMessage(hdlg, IDC_EDIT2, EM_LIMITTEXT, cbNameMax, 0L);
                   1350:                SetDlgItemText(hdlg, IDC_EDIT2, (LPSTR)"");
                   1351: 
                   1352:                wSelStart1 = wSelEnd1 = 0;
                   1353:                wSelStart2 = wSelEnd2 = 0;
                   1354:                return(fTrue);
                   1355: 
                   1356:        case STF_REINITDIALOG:
                   1357:                SendDlgItemMessage(hdlg, IDC_EDIT, EM_SETSEL, 0, MAKELONG(256, 256));
                   1358:                SetFocus(GetDlgItem(hdlg, IDC_EDIT));
                   1359:                return(fTrue);
                   1360: 
                   1361:        case STF_ACTIVATEAPP:
                   1362:                return(fTrue);
                   1363: 
                   1364:        case WM_COMMAND:
                   1365:                switch(wParam)
                   1366:                        {
                   1367:                case IDC_EDIT:
                   1368:                        if (HIWORD(lParam) == EN_SETFOCUS)
                   1369:                                SendDlgItemMessage(hdlg, IDC_EDIT, EM_SETSEL, 0,
                   1370:                                                MAKELONG(wSelStart1, wSelEnd1));
                   1371:                        else if (HIWORD(lParam) == EN_KILLFOCUS)
                   1372:                                {
                   1373:                                LONG l = SendDlgItemMessage(hdlg, IDC_EDIT, EM_GETSEL, 0, 0L);
                   1374: 
                   1375:                                wSelStart1 = LOWORD(l);
                   1376:                                wSelEnd1   = HIWORD(l);
                   1377:                                }
                   1378:                        break;
                   1379: 
                   1380:                case IDC_EDIT2:
                   1381:                        if (HIWORD(lParam) == EN_SETFOCUS)
                   1382:                                SendDlgItemMessage(hdlg, IDC_EDIT2, EM_SETSEL, 0,
                   1383:                                                MAKELONG(wSelStart2, wSelEnd2));
                   1384:                        else if (HIWORD(lParam) == EN_KILLFOCUS)
                   1385:                                {
                   1386:                                LONG l = SendDlgItemMessage(hdlg, IDC_EDIT2, EM_GETSEL, 0, 0L);
                   1387: 
                   1388:                                wSelStart2 = LOWORD(l);
                   1389:                                wSelEnd2   = HIWORD(l);
                   1390:                                }
                   1391:                        break;
                   1392: 
                   1393:                case IDC_H:
                   1394:                        HdlgShowHelp();
                   1395:                        return(fTrue);
                   1396: 
                   1397:                case IDC_B:
                   1398:                case IDC_C:
                   1399:                case IDC_X:
                   1400:                case IDCANCEL:
                   1401:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                   1402:                                {
                   1403:                                DestroyWindow(GetParent(hdlg));
                   1404:                                return(fTrue);
                   1405:                                }
                   1406: 
                   1407:                        SendDlgItemMessage(hdlg, IDC_EDIT, (WORD)WM_GETTEXT,
                   1408:                                        cbNameMax + 1, (LONG)((LPSTR)rgchText));
                   1409:                        if (!FSetSymbolValue("NameOut", rgchText))
                   1410:                                {
                   1411:                                DestroyWindow(GetParent(hdlg));
                   1412:                                return(fTrue);
                   1413:                                }
                   1414: 
                   1415:                        SendDlgItemMessage(hdlg, IDC_EDIT2, (WORD)WM_GETTEXT,
                   1416:                                        cbNameMax + 1, (LONG)((LPSTR)rgchText));
                   1417:                        if (!FSetSymbolValue("OrgOut", rgchText))
                   1418:                                {
                   1419:                                DestroyWindow(GetParent(hdlg));
                   1420:                                return(fTrue);
                   1421:                                }
                   1422: 
                   1423:                        ReactivateSetupScript();
                   1424:                        break;
                   1425:                        }
                   1426:                break;
                   1427:                }
                   1428: 
                   1429:        return(fFalse);
                   1430: }
                   1431: 
                   1432: 
                   1433: 
                   1434: /*
                   1435: **     Purpose:
                   1436: **             Confirm Info Dialog procedure for templates with one to
                   1437: **             static text controls.
                   1438: **
                   1439: **     Controls Recognized:
                   1440: **             Text       - IDC_TEXT1 to IDC_TEXT10 (sequential)
                   1441: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                   1442: **
                   1443: **     Initialization Symbols:
                   1444: **             "ConfirmTextIn" - list of up to ten string items to initialize
                   1445: **                     static text items (IDC_TEXT1-10).
                   1446: **
                   1447: **     Termination Symbols:
                   1448: **             "DLGEVENT" - one of the following, depending on event:
                   1449: **                             event                value
                   1450: **                             ----------           ----------
                   1451: **                             IDC_B                "BACK"
                   1452: **                             IDC_C                "CONTINUE"
                   1453: **                             IDC_X                "EXIT"
                   1454: **                             IDCANCEL             "CANCEL"
                   1455: **
                   1456: **     Note:
                   1457: **             Pushbutton IDC_H will open the related Help dialog, if any.
                   1458: **
                   1459: *****************************************************************************/
                   1460: BOOL FAR PASCAL FConfirmDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                   1461: {
                   1462:        WORD  idc;
                   1463:        WORD  cItems;
                   1464:        WORD  i, cb;
                   1465:        char  szSymBuf[cbSymBuf];
                   1466: 
                   1467:        switch (wMsg)
                   1468:                {
                   1469:        case WM_INITDIALOG:
                   1470:                cItems = UsGetListLength("ConfirmTextIn");
                   1471:                idc = IDC_TEXT1;
                   1472:                for (i = 1; i <= cItems; ++i)
                   1473:                        {
                   1474:                        WORD wCheck = 0;
                   1475: 
                   1476:                        cb = CbGetListItem("ConfirmTextIn", i, szSymBuf, cbSymBuf);
                   1477:                        Assert(cb < cbSymBuf);
                   1478:                        SetDlgItemText(hdlg, idc++, szSymBuf);
                   1479:                        if (i >= 4
                   1480:                                        && i <= 6)
                   1481:                                {
                   1482:                                if (*szSymBuf == '\0')
                   1483:                                        ShowWindow(GetDlgItem(hdlg, IDC_TEXT4+i), SW_HIDE);
                   1484:                                else
                   1485:                                        ShowWindow(GetDlgItem(hdlg, IDC_TEXT4+i), SW_SHOWNOACTIVATE);
                   1486:                                }
                   1487:                        }
                   1488:                return(fTrue);
                   1489: 
                   1490:        case STF_REINITDIALOG:
                   1491:        case STF_ACTIVATEAPP:
                   1492:                return(fTrue);
                   1493: 
                   1494:        case WM_COMMAND:
                   1495:                switch (wParam)
                   1496:                        {
                   1497:                case IDC_H:
                   1498:                        HdlgShowHelp();
                   1499:                        return(fTrue);
                   1500: 
                   1501:                case IDC_B:
                   1502:                case IDC_C:
                   1503:                case IDC_X:
                   1504:                case IDCANCEL:
                   1505:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                   1506:                                {
                   1507:                                DestroyWindow(GetParent(hdlg));
                   1508:                                return(fTrue);
                   1509:                                }
                   1510:                        ReactivateSetupScript();
                   1511:                        break;
                   1512:                        }
                   1513:                break;
                   1514:                }
                   1515: 
                   1516:        return(fFalse);
                   1517: }
                   1518: 
                   1519: 
                   1520: 
                   1521: /*
                   1522: **     Purpose:
                   1523: **             Initialization routine for DLL.
                   1524: **     Arguments:
                   1525: **             hInst:       handle to instance of App that required this DLL.
                   1526: **             wDataSeg:    number of words in DLL's data segment.
                   1527: **             wHeapSize:   number of bytes in DLL's heap.
                   1528: **             lpszCmdLine: command line for App that required this DLL.
                   1529: **     Returns:
                   1530: **             1 always
                   1531: *****************************************************************************/
                   1532: int FAR PASCAL LibMain(HANDLE hInst, WORD wDataSeg, WORD wHeapSize,
                   1533:                LPSTR lpszCmdLine)
                   1534: {
                   1535:        if (wHeapSize > 0)
                   1536:                UnlockData(0);
                   1537: 
                   1538:        return(1);
                   1539: }
                   1540: 
                   1541: 
                   1542: 
                   1543: /*
                   1544: **     Purpose:
                   1545: **             Windows Exit Procedure.
                   1546: **     Arguments:
                   1547: **             nParam: standard WEP param (ignored).
                   1548: **     Returns:
                   1549: **             1 always.
                   1550: *****************************************************************************/
                   1551: int FAR PASCAL WEP (int nParam)
                   1552: {
                   1553:        return(1);
                   1554: }
                   1555: 
                   1556: 
                   1557: 
                   1558: /*
                   1559: **     Purpose:
                   1560: **             Finds the last character in a string.
                   1561: **     Arguments:
                   1562: **             sz: non-NULL zero terminated string to search.
                   1563: **     Returns:
                   1564: **             NULL for an empty string.
                   1565: **             non-Null string pointer to the last valid character in sz.
                   1566: *****************************************************************************/
                   1567: LPSTR FAR PASCAL SzLastChar(LPSTR sz)
                   1568: {
                   1569:        LPSTR szCur  = (LPSTR)NULL;
                   1570:        LPSTR szNext = sz;
                   1571: 
                   1572:        while (*szNext != '\0')
                   1573:                szNext = AnsiNext((szCur = szNext));
                   1574: 
                   1575:        return(szCur);
                   1576: }
                   1577: 
                   1578: 
                   1579: 
                   1580: /*
                   1581: **     Purpose:
                   1582: **             Gets the string values for the following WM_COMMAND events:
                   1583: **                     IDC_B, IDC_C, IDC_X, and IDCANCEL.
                   1584: **     Arguments:
                   1585: **             wParam: event parameter value
                   1586: **     Returns:
                   1587: **             Pointer to string value constant, NULL if unknown event.
                   1588: *****************************************************************************/
                   1589: LPSTR FAR PASCAL SzDlgEvent(WORD wParam)
                   1590: {
                   1591:        LPSTR szEvent;
                   1592: 
                   1593:        switch(wParam)
                   1594:                {
                   1595:        case IDC_B:
                   1596:                szEvent = "BACK";
                   1597:                break;
                   1598:        case IDC_C:
                   1599:                szEvent = "CONTINUE";
                   1600:                break;
                   1601:        case IDC_X:
                   1602:                szEvent = "EXIT";
                   1603:                break;
                   1604:        case IDCANCEL:
                   1605:                szEvent = "CANCEL";
                   1606:                break;
                   1607:        default:
                   1608:                szEvent = NULL;
                   1609:                break;
                   1610:                }
                   1611: 
                   1612:        return(szEvent);
                   1613: }
                   1614: 
                   1615: 
                   1616: 
                   1617: /*
                   1618: **     Purpose:
                   1619: **             Converts an ASCII string representing a positive value
                   1620: **             into an integer.
                   1621: **     Arguments:
                   1622: **             sz: non-NULL zero terminated string to convert.
                   1623: **     Returns:
                   1624: **             Integer represented by the string.
                   1625: *****************************************************************************/
                   1626: int FAR PASCAL AsciiToInt(LPSTR sz)
                   1627: {
                   1628:        int i = 0;
                   1629: 
                   1630:        while (*sz == ' ' || *sz == '\t')
                   1631:                sz++;
                   1632: 
                   1633:        while (isdigit(*sz))
                   1634:                i = (i * 10) + *sz++ - '0';
                   1635: 
                   1636:        return(i);
                   1637: }
                   1638: 
                   1639: 
                   1640: 
                   1641: /*
                   1642: **     Purpose:
                   1643: **             Converts an positive integer (< 100) into a string
                   1644: **             representing its value.
                   1645: **     Arguments:
                   1646: **             i:  integer to convert (positive and < 100).
                   1647: **             sz: buffer to hold converted string (at least 3 bytes).
                   1648: **     Returns:
                   1649: **             sz.
                   1650: *****************************************************************************/
                   1651: LPSTR FAR PASCAL IntToAscii(int i, LPSTR sz)
                   1652: {
                   1653:        LPSTR szSav = sz;
                   1654: 
                   1655:        if (i >= 100
                   1656:                        || i < 0)
                   1657:                Assert(fFalse);
                   1658: 
                   1659:        if (i >= 10)
                   1660:                {
                   1661:                *sz++ = (char)('0' + (i / 10));
                   1662:                i %= 10;
                   1663:                }
                   1664:        *sz++ = (char)('0' + i);
                   1665:        *sz = '\0';
                   1666: 
                   1667:        return(szSav);
                   1668: }

unix.superglobalmegacorp.com

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