Annotation of mstools/mssetup/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: **             Edit Dialog procedure for templates with one Edit control.
                    366: **             (Limits the input string length to cbFullPathMax characters.)
                    367: **
                    368: **     Controls Recognized:
                    369: **             Edit       - IDC_EDIT
                    370: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                    371: **
                    372: **     Initialization Symbols:
                    373: **             "EditTextIn" - initial text for IDC_EDIT edit control.
                    374: **             "EditFocus"  - position of intial focus for text string:
                    375: **                             "END" (default), "ALL", or "START"
                    376: **
                    377: **     Termination Symbols:
                    378: **             "EditTextOut" - text in the IDC_EDIT edit control upon termination.
                    379: **             "DLGEVENT"    - one of the following, depending on event:
                    380: **                             event                value
                    381: **                             ----------           ----------
                    382: **                             IDC_B                "BACK"
                    383: **                             IDC_C                "CONTINUE"
                    384: **                             IDC_X                "EXIT"
                    385: **                             IDCANCEL             "CANCEL"
                    386: **                             STF_ACTIVATEAPP      "REACTIVATE"
                    387: **
                    388: **     Note:
                    389: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    390: **
                    391: *****************************************************************************/
                    392: BOOL FAR PASCAL FEditDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    393: {
                    394:        static WORD wSelStart = 0;
                    395:        static WORD wSelEnd   = 0;
                    396:        char  rgchText[cbFullPathMax + 1];
                    397:        WORD  cbLen;
                    398:        WORD  cb;
                    399:        char  szSymBuf[cbFullPathMax + 1];
                    400: 
                    401:        switch (wMsg)
                    402:                {
                    403:        case STF_ACTIVATEAPP:
                    404:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                    405:                        {
                    406:                        DestroyWindow(GetParent(hdlg));
                    407:                        return(fTrue);
                    408:                        }
                    409:                ReactivateSetupScript();
                    410:                return(fTrue);
                    411: 
                    412:        case WM_INITDIALOG:
                    413:                cb = CbGetSymbolValue("EditTextIn", szSymBuf, cbFullPathMax + 1);
                    414:                Assert(cb < cbFullPathMax + 1);
                    415:                SendDlgItemMessage(hdlg, IDC_EDIT, EM_LIMITTEXT, cbFullPathMax, 0L);
                    416:                SetDlgItemText(hdlg, IDC_EDIT, (LPSTR)szSymBuf);
                    417: 
                    418:                cbLen = lstrlen(szSymBuf);
                    419:                cb = CbGetSymbolValue("EditFocus", szSymBuf, cbFullPathMax + 1);
                    420:                Assert(cb < cbFullPathMax + 1);
                    421: 
                    422:                if (lstrcmp(szSymBuf, "ALL") == 0)
                    423:                        {
                    424:                        wSelStart = 0;
                    425:                        wSelEnd   = INT_MAX;
                    426:                        }
                    427:                else if (lstrcmp(szSymBuf, "START") == 0)
                    428:                        {
                    429:                        wSelStart = 0;
                    430:                        wSelEnd   = 0;
                    431:                        }
                    432:                else       /* default == END */
                    433:                        {
                    434:                        wSelStart = (WORD)cbLen;
                    435:                        wSelEnd   = (WORD)cbLen;
                    436:                        }
                    437:                return(fTrue);
                    438: 
                    439:        case STF_REINITDIALOG:
                    440:                SendDlgItemMessage(hdlg, IDC_EDIT, EM_SETSEL, 0, MAKELONG(256, 256));
                    441:                SetFocus(GetDlgItem(hdlg, IDC_EDIT));
                    442:                return(fTrue);
                    443: 
                    444:        case WM_COMMAND:
                    445:                switch(wParam)
                    446:                        {
                    447:                case IDC_EDIT:
                    448:                        if (HIWORD(lParam) == EN_SETFOCUS)
                    449:                                SendDlgItemMessage(hdlg, IDC_EDIT, EM_SETSEL, 0,
                    450:                                                MAKELONG(wSelStart, wSelEnd));
                    451:                        else if (HIWORD(lParam) == EN_KILLFOCUS)
                    452:                                {
                    453:                                LONG  l = SendDlgItemMessage(hdlg, IDC_EDIT, EM_GETSEL, 0, 0L);
                    454: 
                    455:                                wSelStart = LOWORD(l);
                    456:                                wSelEnd   = HIWORD(l);
                    457:                                }
                    458:                        break;
                    459: 
                    460:                case IDC_H:
                    461:                        HdlgShowHelp();
                    462:                        return(fTrue);
                    463: 
                    464:                case IDC_B:
                    465:                case IDC_C:
                    466:                case IDC_X:
                    467:                case IDCANCEL:
                    468:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    469:                                {
                    470:                                DestroyWindow(GetParent(hdlg));
                    471:                                return(fTrue);
                    472:                                }
                    473:                        SendDlgItemMessage(hdlg, IDC_EDIT, (WORD)WM_GETTEXT,
                    474:                                        cbFullPathMax + 1, (LONG)((LPSTR)rgchText));
                    475:                        if (!FSetSymbolValue("EditTextOut", rgchText))
                    476:                                {
                    477:                                DestroyWindow(GetParent(hdlg));
                    478:                                return(fTrue);
                    479:                                }
                    480:                        ReactivateSetupScript();
                    481:                        break;
                    482:                        }
                    483:                break;
                    484:                }
                    485: 
                    486:        return(fFalse);
                    487: }
                    488: 
                    489: 
                    490: 
                    491: /*
                    492: **     Purpose:
                    493: **             Help Dialog procedure.
                    494: **
                    495: **     Controls Recognized:
                    496: **             Pushbutton - IDC_X.
                    497: **
                    498: **     Initialization Symbols:
                    499: **             none.
                    500: **
                    501: **     Termination Symbols:
                    502: **             none. (Handles IDC_X and IDCANCEL events by calling FCloseHelp.)
                    503: **
                    504: **     Note:
                    505: **             This dialog proc is for Help dialogs ONLY (szHelpProc$ parameter
                    506: **             of UIStartDlg) and CANNOT be used as the szDlgProc$ parameter
                    507: **             of the UIStartDlg MSSetup script function.
                    508: **
                    509: *****************************************************************************/
                    510: BOOL FAR PASCAL FHelpDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    511: {
                    512:        switch (wMsg)
                    513:                {
                    514:        case WM_INITDIALOG:
                    515:                return(fTrue);
                    516: 
                    517:        case STF_REINITDIALOG:
                    518:                return(fTrue);
                    519: 
                    520:        case STF_ACTIVATEAPP:
                    521:                /* Help dlg should not be on the dlg stack
                    522:                ** and should never get this message.
                    523:                */
                    524:                Assert(fFalse);
                    525:                return(fTrue);
                    526: 
                    527:        case WM_COMMAND:
                    528:                if (wParam != IDC_X
                    529:                        && wParam != IDCANCEL)
                    530:                        break;
                    531:                FCloseHelp();
                    532:                return(fTrue);
                    533: 
                    534:                }
                    535:        return(fFalse);
                    536: }
                    537: 
                    538: 
                    539: 
                    540: /*
                    541: **     Purpose:
                    542: **             Information Dialog procedure.
                    543: **
                    544: **     Controls Recognized:
                    545: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                    546: **
                    547: **     Initialization Symbols:
                    548: **             none.
                    549: **
                    550: **     Termination Symbols:
                    551: **             "DLGEVENT" - one of the following, according to control event:
                    552: **                             event     value
                    553: **                             -------   -------
                    554: **                             IDC_B     "BACK"
                    555: **                             IDC_C     "CONTINUE"
                    556: **                             IDC_X     "EXIT"
                    557: **                             IDCANCEL  "CANCEL"
                    558: **
                    559: **     Note:
                    560: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    561: **
                    562: *****************************************************************************/
                    563: BOOL FAR PASCAL FInfoDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    564: {
                    565:        switch (wMsg)
                    566:                {
                    567:        case WM_INITDIALOG:
                    568:                return(fTrue);
                    569: 
                    570:        case STF_REINITDIALOG:
                    571:        case STF_ACTIVATEAPP:
                    572:                return(fTrue);
                    573: 
                    574:        case WM_COMMAND:
                    575:                switch (wParam)
                    576:                        {
                    577:                case IDC_H:
                    578:                        HdlgShowHelp();
                    579:                        return(fTrue);
                    580: 
                    581:                case IDC_B:
                    582:                case IDC_C:
                    583:                case IDC_X:
                    584:                case IDCANCEL:
                    585:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    586:                                {
                    587:                                DestroyWindow(GetParent(hdlg));
                    588:                                return(fTrue);
                    589:                                }
                    590:                        ReactivateSetupScript();
                    591:                        break;
                    592:                        }
                    593:                break;
                    594:                }
                    595: 
                    596:        return(fFalse);
                    597: }
                    598: 
                    599: 
                    600: 
                    601: /*
                    602: **     Purpose:
                    603: **             Information Dialog procedure, without "Exit" button.
                    604: **
                    605: **     Controls Recognized:
                    606: **             Pushbutton - IDC_B, IDC_C, IDC_H
                    607: **
                    608: **     Initialization Symbols:
                    609: **             none.
                    610: **
                    611: **     Termination Symbols:
                    612: **             "DLGEVENT" - one of the following, depending on event:
                    613: **                             event                value
                    614: **                             ----------           ----------
                    615: **                             IDC_B                "BACK"
                    616: **                             IDC_C                "CONTINUE"
                    617: **                             IDCANCEL             "CANCEL"
                    618: **                             STF_ACTIVATEAPP      "REACTIVATE"
                    619: **
                    620: **     Note:
                    621: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    622: **
                    623: *****************************************************************************/
                    624: BOOL FAR PASCAL FInfo0DlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    625: {
                    626:        switch (wMsg)
                    627:                {
                    628:        case WM_INITDIALOG:
                    629:                return(fTrue);
                    630: 
                    631:        case STF_REINITDIALOG:
                    632:                return(fTrue);
                    633: 
                    634:        case STF_ACTIVATEAPP:
                    635:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                    636:                        {
                    637:                        DestroyWindow(GetParent(hdlg));
                    638:                        return(fTrue);
                    639:                        }
                    640:                ReactivateSetupScript();
                    641:                return(fTrue);
                    642: 
                    643:        case WM_COMMAND:
                    644:                switch (wParam)
                    645:                        {
                    646:                case IDC_H:
                    647:                        HdlgShowHelp();
                    648:                        return(fTrue);
                    649: 
                    650:                case IDC_B:
                    651:                case IDC_C:
                    652:                case IDCANCEL:
                    653:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    654:                                {
                    655:                                DestroyWindow(GetParent(hdlg));
                    656:                                return(fTrue);
                    657:                                }
                    658:                        ReactivateSetupScript();
                    659:                        break;
                    660:                        }
                    661:                break;
                    662:                }
                    663: 
                    664:        return(fFalse);
                    665: }
                    666: 
                    667: 
                    668: 
                    669: /*
                    670: **     Purpose:
                    671: **             Single Choice Listbox Dialog procedure for templates with exactly one
                    672: **             listbox control.
                    673: **
                    674: **     Controls Recognized:
                    675: **             Listbox    - IDC_LIST1
                    676: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                    677: **
                    678: **     Initialization Symbols:
                    679: **             "ListItemsIn"  - list of strings to put in the listbox.
                    680: **             "ListItemsOut" - simple string (not a list) representing an
                    681: **                     initial selection in "ListItemsIn".
                    682: **
                    683: **     Termination Symbols:
                    684: **             "ListItemsOut" - selected list item string.
                    685: **             "DLGEVENT"     - one of the following, according to control event:
                    686: **                             event     value
                    687: **                             -------   -------
                    688: **                             IDC_B     "BACK"
                    689: **                             IDC_C     "CONTINUE"
                    690: **                             IDC_X     "EXIT"
                    691: **                             IDCANCEL  "CANCEL"
                    692: **
                    693: **     Note:
                    694: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    695: **
                    696: *****************************************************************************/
                    697: BOOL FAR PASCAL FListDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    698: {
                    699:        char szListIn[cbSymBuf];
                    700:        char szListOut[cbSymBuf];
                    701:        WORD iItem;
                    702:        WORD cb, i;
                    703:        WORD cItems;
                    704: 
                    705:        switch (wMsg)
                    706:                {
                    707:        case WM_INITDIALOG:
                    708:                cItems = UsGetListLength("ListItemsIn");
                    709:                for (i = 1; i <= cItems; ++i)
                    710:                        {
                    711:                        cb = CbGetListItem("ListItemsIn", i, szListIn, cbSymBuf);
                    712:                        Assert(cb < cbSymBuf);
                    713:                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_ADDSTRING, 0,
                    714:                                        (LONG)(LPSTR)szListIn);
                    715:                        }
                    716: 
                    717:                cb = CbGetSymbolValue("ListItemsOut", szListOut, cbSymBuf);
                    718:                Assert(cb < cbSymBuf);
                    719:                if (cb == 0)
                    720:                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETCURSEL, (WORD)-1, 0L);
                    721:                else
                    722:                        {
                    723:                        for (i = 1, iItem = 0; i <= cItems; ++i, ++iItem)
                    724:                                {
                    725:                                cb = CbGetListItem("ListItemsIn", i, szListIn, cbSymBuf);
                    726:                                Assert(cb < cbSymBuf);
                    727:                                if (lstrcmp(szListOut, szListIn) == 0)
                    728:                                        {
                    729:                                        SendDlgItemMessage(hdlg,IDC_LIST1,LB_SETCURSEL,iItem,0L);
                    730:                                        break;
                    731:                                        }
                    732:                                }
                    733:                        }
                    734: 
                    735:                /* Note: Depends on number of lines in list box.
                    736:                */
                    737:                if (iItem < 4)
                    738:                        iItem = 0;
                    739:                SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETTOPINDEX, iItem, 0L);
                    740: 
                    741:                return(fTrue);
                    742: 
                    743:        case STF_REINITDIALOG:
                    744:        case STF_ACTIVATEAPP:
                    745:                return(fTrue);
                    746: 
                    747:        case WM_COMMAND:
                    748:                switch(wParam)
                    749:                        {
                    750:                case IDC_H:
                    751:                        HdlgShowHelp();
                    752:                        return(fTrue);
                    753: 
                    754:                case IDC_LIST1:
                    755:                        if (HIWORD(lParam) != LBN_DBLCLK)
                    756:                                break;
                    757:                        wParam = IDC_C;
                    758:                case IDC_B:
                    759:                case IDC_C:
                    760:                case IDC_X:
                    761:                case IDCANCEL:
                    762:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    763:                                {
                    764:                                DestroyWindow(GetParent(hdlg));
                    765:                                return(fTrue);
                    766:                                }
                    767: 
                    768:                        if ((iItem = (WORD)SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETCURSEL,
                    769:                                                0, 0L)) == LB_ERR
                    770:                                        || (cb = (WORD)SendDlgItemMessage(hdlg, IDC_LIST1,
                    771:                                                        LB_GETTEXTLEN, iItem, 0L)) == LB_ERR)
                    772:                                *szListOut = '\0';
                    773:                        else
                    774:                                {
                    775:                                Assert(cb <= cbSymBuf);
                    776:                                SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETTEXT, iItem,
                    777:                                                (LONG)(LPSTR)szListOut);
                    778:                                }
                    779:                        if (!FSetSymbolValue("ListItemsOut", szListOut))
                    780:                                {
                    781:                                DestroyWindow(GetParent(hdlg));
                    782:                                return(fTrue);
                    783:                                }
                    784: 
                    785:                        ReactivateSetupScript();
                    786:                        break;
                    787:                        }
                    788:                break;
                    789: 
                    790:                }
                    791: 
                    792:        return(fFalse);
                    793: }
                    794: 
                    795: 
                    796: 
                    797: /*
                    798: **     Purpose:
                    799: **             Modeless Dialog procedure.
                    800: **
                    801: **     Controls Recognized:
                    802: **             none.
                    803: **
                    804: **     Initialization Symbols:
                    805: **             none.
                    806: **
                    807: **     Termination Symbols:
                    808: **             none.
                    809: **
                    810: **     Note:
                    811: **             This dialog procedure is REQUIRED with use of any Billboard
                    812: **             MSSetup script functions.
                    813: **
                    814: *****************************************************************************/
                    815: BOOL FAR PASCAL FModelessDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    816: {
                    817:        switch (wMsg)
                    818:                {
                    819:        case WM_INITDIALOG:
                    820:                ReactivateSetupScript();
                    821:                return(fTrue);
                    822: 
                    823:        case STF_REINITDIALOG:
                    824:        case STF_ACTIVATEAPP:
                    825:                return(fTrue);
                    826: 
                    827:        case WM_CLOSE:
                    828:        case WM_COMMAND:
                    829:                Assert(fFalse);
                    830:                break;
                    831:                }
                    832: 
                    833:        return(fFalse);
                    834: }
                    835: 
                    836: 
                    837: 
                    838: /*
                    839: **     Purpose:
                    840: **             Multiple Choice Listbox Dialog procedure for templates with
                    841: **             exactly one listbox control.
                    842: **
                    843: **     Controls Recognized:
                    844: **             Listbox    - IDC_LIST1
                    845: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_L, IDC_S, IDC_X
                    846: **
                    847: **     Initialization Symbols:
                    848: **             "ListItemsIn"  - list of strings to put in the listbox.
                    849: **             "ListItemsOut" - list of strings representing initial
                    850: **                     selections in "ListItemsIn".
                    851: **
                    852: **     Termination Symbols:
                    853: **             "ListItemsOut" - list of items selected (if any).
                    854: **             "DLGEVENT"     - one of the following, according to control event:
                    855: **                             event     value
                    856: **                             -------   -------
                    857: **                             IDC_B     "BACK"
                    858: **                             IDC_C     "CONTINUE"
                    859: **                             IDC_X     "EXIT"
                    860: **                             IDCANCEL  "CANCEL"
                    861: **
                    862: **     Note:
                    863: **             Pushbutton IDC_H will open the related Help dialog, if any.
                    864: **             Pushbuttons IDC_L and IDC_S are for "clear all" and "select all"
                    865: **             respectively.
                    866: **
                    867: *****************************************************************************/
                    868: BOOL FAR PASCAL FMultiDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                    869: {
                    870:        WORD i, j, nCount;
                    871:        char szListIn[cbSymBuf];
                    872:        char szListOut[cbSymBuf];
                    873:        WORD iItem, iItemTop;
                    874:        WORD cb;
                    875:        WORD cItemsIn, cItemsOut;
                    876: 
                    877:        switch (wMsg)
                    878:                {
                    879:        case WM_INITDIALOG:
                    880:                cItemsIn = UsGetListLength("ListItemsIn");
                    881:                nCount = 0;
                    882:                for (i = 1; i <= cItemsIn; ++i)
                    883:                        {
                    884:                        cb = CbGetListItem("ListItemsIn", i, szListIn, cbSymBuf);
                    885:                        Assert(cb < cbSymBuf);
                    886:                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_ADDSTRING, 0,
                    887:                                        (LONG)(LPSTR)szListIn);
                    888:                        nCount++;
                    889:                        }
                    890:                Assert(nCount == (WORD)SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETCOUNT,
                    891:                                0, 0L));
                    892: 
                    893:                cItemsOut = UsGetListLength("ListItemsOut");
                    894:                for (i = 1, iItemTop = 0; i <= cItemsOut; ++i, ++iItemTop)
                    895:                        {
                    896:                        cb = CbGetListItem("ListItemsOut", i, szListOut, cbSymBuf);
                    897:                        Assert(cb < cbSymBuf);
                    898:                        for (j = 1, iItem = 0; j <= cItemsIn; ++j, ++iItem)
                    899:                                {
                    900:                                cb = CbGetListItem("ListItemsIn", j, szListIn, cbSymBuf);
                    901:                                Assert(cb < cbSymBuf);
                    902:                                if (lstrcmp(szListOut, szListIn) == 0)
                    903:                                        {
                    904:                                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETSEL, 1,
                    905:                                                        MAKELONG(iItem, 0));
                    906:                                        if (iItemTop == 0
                    907:                                                        || (WORD)iItem < iItemTop)
                    908:                                                iItemTop = (WORD)iItem;
                    909:                                        break;
                    910:                                        }
                    911:                                }
                    912:                        }
                    913: 
                    914:                /* Note: Depends on number of lines in list box.
                    915:                */
                    916:                if (iItemTop < 4)
                    917:                        iItemTop = 0;
                    918:                SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETTOPINDEX, iItemTop, 0L);
                    919: 
                    920:                return(fTrue);
                    921: 
                    922:        case STF_REINITDIALOG:
                    923:        case STF_ACTIVATEAPP:
                    924:                return(fTrue);
                    925: 
                    926:        case WM_COMMAND:
                    927:                switch(wParam)
                    928:                        {
                    929:                case IDC_S:
                    930:                case IDC_L:
                    931:                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_SETSEL, (wParam == IDC_S),
                    932:                                        -1L);
                    933:                        break;
                    934: 
                    935:                case IDC_H:
                    936:                        HdlgShowHelp();
                    937:                        return(fTrue);
                    938: 
                    939:                case IDC_B:
                    940:                case IDC_C:
                    941:                case IDC_X:
                    942:                case IDCANCEL:
                    943:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                    944:                                {
                    945:                                DestroyWindow(GetParent(hdlg));
                    946:                                return(fTrue);
                    947:                                }
                    948: 
                    949:                        /* Note: Could be faster to use LB_GETSELITEMS here.
                    950:                        */
                    951:                        nCount = (WORD)SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETCOUNT, 0,
                    952:                                        0L);
                    953: 
                    954:                        FRemoveSymbol("ListItemsOut");
                    955:                        for (i = 0; i < nCount; i++)
                    956:                                {
                    957:                                if (SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETSEL, (WORD)i, 0L))
                    958:                                        {
                    959:                                        SendDlgItemMessage(hdlg, IDC_LIST1, LB_GETTEXT, (WORD)i,
                    960:                                                        (LONG)(LPSTR)szListOut);
                    961:                                        if (!FAddListItem("ListItemsOut", szListOut))
                    962:                                                {
                    963:                                                DestroyWindow(GetParent(hdlg));
                    964:                                                return(fTrue);
                    965:                                                }
                    966:                                        }
                    967:                                }
                    968: 
                    969:                        ReactivateSetupScript();
                    970:                        break;
                    971:                        }
                    972:                break;
                    973:                }
                    974: 
                    975:        return(fFalse);
                    976: }
                    977: 
                    978: 
                    979: 
                    980: /*
                    981: **     Purpose:
                    982: **             Quit Dialog procedure.
                    983: **
                    984: **     Controls Recognized:
                    985: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                    986: **
                    987: **     Initialization Symbols:
                    988: **             none.
                    989: **
                    990: **     Termination Symbols:
                    991: **             "DLGEVENT" - one of the following, depending on event:
                    992: **                             event                value
                    993: **                             ----------           ----------
                    994: **                             IDC_B                "BACK"
                    995: **                             IDC_C                "CONTINUE"
                    996: **                             IDC_X                "EXIT"
                    997: **                             IDCANCEL             "CANCEL"
                    998: **                             STF_ACTIVATEAPP      "REACTIVATE"
                    999: **
                   1000: **     Note:
                   1001: **             Pushbutton IDC_H will open the related Help dialog, if any.
                   1002: **
                   1003: *****************************************************************************/
                   1004: BOOL FAR PASCAL FQuitDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                   1005: {
                   1006:        switch (wMsg)
                   1007:                {
                   1008:        case WM_INITDIALOG:
                   1009:                return(fTrue);
                   1010: 
                   1011:        case STF_REINITDIALOG:
                   1012:                return(fTrue);
                   1013: 
                   1014:        case STF_ACTIVATEAPP:
                   1015:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                   1016:                        {
                   1017:                        DestroyWindow(GetParent(hdlg));
                   1018:                        return(fTrue);
                   1019:                        }
                   1020:                ReactivateSetupScript();
                   1021:                return(fTrue);
                   1022: 
                   1023:        case WM_COMMAND:
                   1024:                switch(wParam)
                   1025:                        {
                   1026:                case IDC_H:
                   1027:                        HdlgShowHelp();
                   1028:                        return(fTrue);
                   1029: 
                   1030:                case IDC_B:
                   1031:                case IDC_C:
                   1032:                case IDC_X:
                   1033:                case IDCANCEL:
                   1034:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                   1035:                                {
                   1036:                                DestroyWindow(GetParent(hdlg));
                   1037:                                return(fTrue);
                   1038:                                }
                   1039: 
                   1040:                        ReactivateSetupScript();
                   1041:                        break;
                   1042:                        }
                   1043:                break;
                   1044:                }
                   1045:        return(fFalse);
                   1046: }
                   1047: 
                   1048: 
                   1049: 
                   1050: /*
                   1051: **     Purpose:
                   1052: **             Radio Button Group Dialog procedure for templates with one group
                   1053: **             of one to ten radio button controls.
                   1054: **
                   1055: **     Controls Recognized:
                   1056: **             Radio      - IDC_B1 to IDC_B10 (sequential)
                   1057: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                   1058: **
                   1059: **     Initialization Symbols:
                   1060: **             "RadioDefault" - index (one-based) of radio button to be
                   1061: **                     initialized as selected (default is "1").
                   1062: **             "OptionsGreyed" - list of (one-based) indexes of radio buttons
                   1063: **                     to be initialized as disabled.  Indexes not in the list will
                   1064: **                     be left enabled.
                   1065: **
                   1066: **     Termination Symbols:
                   1067: **             "ButtonChecked" - index of currently selected radio button.
                   1068: **             "DLGEVENT"      - one of the following, depending on event:
                   1069: **                             event                value
                   1070: **                             ----------           ----------
                   1071: **                             IDC_B                "BACK"
                   1072: **                             IDC_C                "CONTINUE"
                   1073: **                             IDC_X                "EXIT"
                   1074: **                             IDCANCEL             "CANCEL"
                   1075: **                             STF_ACTIVATEAPP      "REACTIVATE"
                   1076: **
                   1077: **     Note:
                   1078: **             Pushbutton IDC_H will open the related Help dialog, if any.
                   1079: **
                   1080: *****************************************************************************/
                   1081: BOOL FAR PASCAL FRadioDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                   1082: {
                   1083:        char rgchNum[10];
                   1084:        int  iButtonChecked;
                   1085:        char szSymBuf[cbSymBuf];
                   1086:        WORD i, cb, cItems, idc;
                   1087: 
                   1088:        switch (wMsg)
                   1089:                {
                   1090:        case STF_ACTIVATEAPP:
                   1091:                if (!FSetSymbolValue("DLGEVENT", "REACTIVATE"))
                   1092:                        {
                   1093:                        DestroyWindow(GetParent(hdlg));
                   1094:                        return(fTrue);
                   1095:                        }
                   1096:                ReactivateSetupScript();
                   1097:                return(fTrue);
                   1098: 
                   1099:        case WM_INITDIALOG:
                   1100:                cb = CbGetSymbolValue("RadioDefault", szSymBuf, cbSymBuf);
                   1101:                Assert(cb < cbSymBuf);
                   1102:                if (*szSymBuf != '\0')
                   1103:                        {
                   1104:                        iButtonChecked = AsciiToInt((LPSTR)szSymBuf);
                   1105:                        if (iButtonChecked < 1)
                   1106:                                iButtonChecked = 0;
                   1107:                        if (iButtonChecked > 10)
                   1108:                                iButtonChecked = 10;
                   1109:                        }
                   1110:                else
                   1111:                        iButtonChecked = 1;
                   1112: 
                   1113:                if (iButtonChecked != 0)
                   1114:                        SendDlgItemMessage(hdlg, IDC_B0 + iButtonChecked, BM_SETCHECK,1,0L);
                   1115: 
                   1116:                cItems = UsGetListLength("OptionsGreyed");
                   1117:                idc = IDC_B1;
                   1118:                for (i = 1; i <= cItems; ++i)
                   1119:                        {
                   1120:                        int iOpt;
                   1121: 
                   1122:                        cb = CbGetListItem("OptionsGreyed", i, szSymBuf, cbSymBuf);
                   1123:                        Assert(cb < cbSymBuf);
                   1124:                        iOpt  = AsciiToInt((LPSTR)szSymBuf);
                   1125:                        if (iOpt > 0
                   1126:                                        && iOpt <= 10
                   1127:                                        && iOpt != iButtonChecked)
                   1128:                                EnableWindow(GetDlgItem(hdlg, IDC_B0 + iOpt), 0);
                   1129:                        else if (*szSymBuf != '\0')
                   1130:                                Assert(fFalse);
                   1131:                        }
                   1132:                return(fTrue);
                   1133: 
                   1134:        case STF_REINITDIALOG:
                   1135:                return(fTrue);
                   1136: 
                   1137:        case WM_COMMAND:
                   1138:                switch (wParam)
                   1139:                        {
                   1140:                case IDC_H:
                   1141:                        HdlgShowHelp();
                   1142:                        return(fTrue);
                   1143: 
                   1144:                case IDC_B1:
                   1145:                case IDC_B2:
                   1146:                case IDC_B3:
                   1147:                case IDC_B4:
                   1148:                case IDC_B5:
                   1149:                case IDC_B6:
                   1150:                case IDC_B7:
                   1151:                case IDC_B8:
                   1152:                case IDC_B9:
                   1153:                case IDC_B10:
                   1154:                        CheckRadioButton(hdlg, IDC_B1, IDC_B10, wParam);
                   1155:                        if (HIWORD(lParam) != BN_DOUBLECLICKED)
                   1156:                                break;
                   1157:                        wParam = IDC_C;
                   1158:                case IDC_B:
                   1159:                case IDC_C:
                   1160:                case IDC_X:
                   1161:                case IDCANCEL:
                   1162:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                   1163:                                {
                   1164:                                DestroyWindow(GetParent(hdlg));
                   1165:                                return(fTrue);
                   1166:                                }
                   1167: 
                   1168:                        iButtonChecked = 0;
                   1169:                        for (i = 1; i <= 10; i++)
                   1170:                                if (SendDlgItemMessage(hdlg, IDC_B0 + i, BM_GETCHECK, 0, 0L))
                   1171:                                        {
                   1172:                                        iButtonChecked = i;
                   1173:                                        break;
                   1174:                                        }
                   1175: 
                   1176:                        IntToAscii((int)iButtonChecked, (LPSTR)rgchNum);
                   1177:                        if (!FSetSymbolValue("ButtonChecked", rgchNum))
                   1178:                                {
                   1179:                                DestroyWindow(GetParent(hdlg));
                   1180:                                return(fTrue);
                   1181:                                }
                   1182: 
                   1183:                        ReactivateSetupScript();
                   1184:                        break;
                   1185:                        }
                   1186:                break;
                   1187:                }
                   1188: 
                   1189:        return(fFalse);
                   1190: }
                   1191: 
                   1192: 
                   1193: 
                   1194: /*
                   1195: **     Purpose:
                   1196: **             Get Name and Organization Dialog procedure for templates
                   1197: **             with two Edit controls.
                   1198: **             (Limits the input string length to cbNameMax characters.)
                   1199: **
                   1200: **     Controls Recognized:
                   1201: **             Edit       - IDC_EDIT, IDC_EDIT2
                   1202: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                   1203: **
                   1204: **     Initialization Symbols:
                   1205: **             none.
                   1206: **
                   1207: **     Termination Symbols:
                   1208: **             "NameOut" - text in the IDC_EDIT edit control upon termination.
                   1209: **             "OrgOut"  - text in the IDC_EDIT2 edit control upon termination.
                   1210: **             "DLGEVENT"    - one of the following, depending on event:
                   1211: **                             event                value
                   1212: **                             ----------           ----------
                   1213: **                             IDC_B                "BACK"
                   1214: **                             IDC_C                "CONTINUE"
                   1215: **                             IDC_X                "EXIT"
                   1216: **                             IDCANCEL             "CANCEL"
                   1217: **
                   1218: **     Note:
                   1219: **             Pushbutton IDC_H will open the related Help dialog, if any.
                   1220: **
                   1221: *****************************************************************************/
                   1222: BOOL FAR PASCAL FNameOrgDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                   1223: {
                   1224:        static WORD wSelStart1 = 0;
                   1225:        static WORD wSelEnd1   = 0;
                   1226:        static WORD wSelStart2 = 0;
                   1227:        static WORD wSelEnd2   = 0;
                   1228:        char  rgchText[cbNameMax + 1];
                   1229: 
                   1230:        switch (wMsg)
                   1231:                {
                   1232:        case WM_INITDIALOG:
                   1233:                SendDlgItemMessage(hdlg, IDC_EDIT, EM_LIMITTEXT, cbNameMax, 0L);
                   1234:                SetDlgItemText(hdlg, IDC_EDIT, (LPSTR)"");
                   1235: 
                   1236:                SendDlgItemMessage(hdlg, IDC_EDIT2, EM_LIMITTEXT, cbNameMax, 0L);
                   1237:                SetDlgItemText(hdlg, IDC_EDIT2, (LPSTR)"");
                   1238: 
                   1239:                wSelStart1 = wSelEnd1 = 0;
                   1240:                wSelStart2 = wSelEnd2 = 0;
                   1241:                return(fTrue);
                   1242: 
                   1243:        case STF_REINITDIALOG:
                   1244:                SendDlgItemMessage(hdlg, IDC_EDIT, EM_SETSEL, 0, MAKELONG(256, 256));
                   1245:                SetFocus(GetDlgItem(hdlg, IDC_EDIT));
                   1246:                return(fTrue);
                   1247: 
                   1248:        case STF_ACTIVATEAPP:
                   1249:                return(fTrue);
                   1250: 
                   1251:        case WM_COMMAND:
                   1252:                switch(wParam)
                   1253:                        {
                   1254:                case IDC_EDIT:
                   1255:                        if (HIWORD(lParam) == EN_SETFOCUS)
                   1256:                                SendDlgItemMessage(hdlg, IDC_EDIT, EM_SETSEL, 0,
                   1257:                                                MAKELONG(wSelStart1, wSelEnd1));
                   1258:                        else if (HIWORD(lParam) == EN_KILLFOCUS)
                   1259:                                {
                   1260:                                LONG l = SendDlgItemMessage(hdlg, IDC_EDIT, EM_GETSEL, 0, 0L);
                   1261: 
                   1262:                                wSelStart1 = LOWORD(l);
                   1263:                                wSelEnd1   = HIWORD(l);
                   1264:                                }
                   1265:                        break;
                   1266: 
                   1267:                case IDC_EDIT2:
                   1268:                        if (HIWORD(lParam) == EN_SETFOCUS)
                   1269:                                SendDlgItemMessage(hdlg, IDC_EDIT2, EM_SETSEL, 0,
                   1270:                                                MAKELONG(wSelStart2, wSelEnd2));
                   1271:                        else if (HIWORD(lParam) == EN_KILLFOCUS)
                   1272:                                {
                   1273:                                LONG l = SendDlgItemMessage(hdlg, IDC_EDIT2, EM_GETSEL, 0, 0L);
                   1274: 
                   1275:                                wSelStart2 = LOWORD(l);
                   1276:                                wSelEnd2   = HIWORD(l);
                   1277:                                }
                   1278:                        break;
                   1279: 
                   1280:                case IDC_H:
                   1281:                        HdlgShowHelp();
                   1282:                        return(fTrue);
                   1283: 
                   1284:                case IDC_B:
                   1285:                case IDC_C:
                   1286:                case IDC_X:
                   1287:                case IDCANCEL:
                   1288:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                   1289:                                {
                   1290:                                DestroyWindow(GetParent(hdlg));
                   1291:                                return(fTrue);
                   1292:                                }
                   1293: 
                   1294:                        SendDlgItemMessage(hdlg, IDC_EDIT, (WORD)WM_GETTEXT,
                   1295:                                        cbNameMax + 1, (LONG)((LPSTR)rgchText));
                   1296:                        if (!FSetSymbolValue("NameOut", rgchText))
                   1297:                                {
                   1298:                                DestroyWindow(GetParent(hdlg));
                   1299:                                return(fTrue);
                   1300:                                }
                   1301: 
                   1302:                        SendDlgItemMessage(hdlg, IDC_EDIT2, (WORD)WM_GETTEXT,
                   1303:                                        cbNameMax + 1, (LONG)((LPSTR)rgchText));
                   1304:                        if (!FSetSymbolValue("OrgOut", rgchText))
                   1305:                                {
                   1306:                                DestroyWindow(GetParent(hdlg));
                   1307:                                return(fTrue);
                   1308:                                }
                   1309: 
                   1310:                        ReactivateSetupScript();
                   1311:                        break;
                   1312:                        }
                   1313:                break;
                   1314:                }
                   1315: 
                   1316:        return(fFalse);
                   1317: }
                   1318: 
                   1319: 
                   1320: 
                   1321: /*
                   1322: **     Purpose:
                   1323: **             Confirm Info Dialog procedure for templates with one to
                   1324: **             static text controls.
                   1325: **
                   1326: **     Controls Recognized:
                   1327: **             Text       - IDC_TEXT1 to IDC_TEXT10 (sequential)
                   1328: **             Pushbutton - IDC_B, IDC_C, IDC_H, IDC_X
                   1329: **
                   1330: **     Initialization Symbols:
                   1331: **             "ConfirmTextIn" - list of up to ten string items to initialize
                   1332: **                     static text items (IDC_TEXT1-10).
                   1333: **
                   1334: **     Termination Symbols:
                   1335: **             "DLGEVENT" - one of the following, depending on event:
                   1336: **                             event                value
                   1337: **                             ----------           ----------
                   1338: **                             IDC_B                "BACK"
                   1339: **                             IDC_C                "CONTINUE"
                   1340: **                             IDC_X                "EXIT"
                   1341: **                             IDCANCEL             "CANCEL"
                   1342: **
                   1343: **     Note:
                   1344: **             Pushbutton IDC_H will open the related Help dialog, if any.
                   1345: **
                   1346: *****************************************************************************/
                   1347: BOOL FAR PASCAL FConfirmDlgProc(HWND hdlg, WORD wMsg, WORD wParam, LONG lParam)
                   1348: {
                   1349:        WORD  idc;
                   1350:        WORD  cItems;
                   1351:        WORD  i, cb;
                   1352:        char  szSymBuf[cbSymBuf];
                   1353: 
                   1354:        switch (wMsg)
                   1355:                {
                   1356:        case WM_INITDIALOG:
                   1357:                cItems = UsGetListLength("ConfirmTextIn");
                   1358:                idc = IDC_TEXT1;
                   1359:                for (i = 1; i <= cItems; ++i)
                   1360:                        {
                   1361:                        WORD wCheck = 0;
                   1362: 
                   1363:                        cb = CbGetListItem("ConfirmTextIn", i, szSymBuf, cbSymBuf);
                   1364:                        Assert(cb < cbSymBuf);
                   1365:                        SetDlgItemText(hdlg, idc++, szSymBuf);
                   1366:                        if (i >= 4
                   1367:                                        && i <= 6)
                   1368:                                {
                   1369:                                if (*szSymBuf == '\0')
                   1370:                                        ShowWindow(GetDlgItem(hdlg, IDC_TEXT4+i), SW_HIDE);
                   1371:                                else
                   1372:                                        ShowWindow(GetDlgItem(hdlg, IDC_TEXT4+i), SW_SHOWNOACTIVATE);
                   1373:                                }
                   1374:                        }
                   1375:                return(fTrue);
                   1376: 
                   1377:        case STF_REINITDIALOG:
                   1378:        case STF_ACTIVATEAPP:
                   1379:                return(fTrue);
                   1380: 
                   1381:        case WM_COMMAND:
                   1382:                switch (wParam)
                   1383:                        {
                   1384:                case IDC_H:
                   1385:                        HdlgShowHelp();
                   1386:                        return(fTrue);
                   1387: 
                   1388:                case IDC_B:
                   1389:                case IDC_C:
                   1390:                case IDC_X:
                   1391:                case IDCANCEL:
                   1392:                        if (!FSetSymbolValue("DLGEVENT", SzDlgEvent(wParam)))
                   1393:                                {
                   1394:                                DestroyWindow(GetParent(hdlg));
                   1395:                                return(fTrue);
                   1396:                                }
                   1397:                        ReactivateSetupScript();
                   1398:                        break;
                   1399:                        }
                   1400:                break;
                   1401:                }
                   1402: 
                   1403:        return(fFalse);
                   1404: }
                   1405: 
                   1406: 
                   1407: 
                   1408: /*
                   1409: **     Purpose:
                   1410: **             Initialization routine for DLL.
                   1411: **     Arguments:
                   1412: **             hInst:       handle to instance of App that required this DLL.
                   1413: **             wDataSeg:    number of words in DLL's data segment.
                   1414: **             wHeapSize:   number of bytes in DLL's heap.
                   1415: **             lpszCmdLine: command line for App that required this DLL.
                   1416: **     Returns:
                   1417: **             1 always
                   1418: *****************************************************************************/
                   1419: int FAR PASCAL LibMain(HANDLE hInst, WORD wDataSeg, WORD wHeapSize,
                   1420:                LPSTR lpszCmdLine)
                   1421: {
                   1422:        if (wHeapSize > 0)
                   1423:                UnlockData(0);
                   1424: 
                   1425:        return(1);
                   1426: }
                   1427: 
                   1428: 
                   1429: 
                   1430: /*
                   1431: **     Purpose:
                   1432: **             Windows Exit Procedure.
                   1433: **     Arguments:
                   1434: **             nParam: standard WEP param (ignored).
                   1435: **     Returns:
                   1436: **             1 always.
                   1437: *****************************************************************************/
                   1438: int FAR PASCAL WEP (int nParam)
                   1439: {
                   1440:        return(1);
                   1441: }
                   1442: 
                   1443: 
                   1444: 
                   1445: /*
                   1446: **     Purpose:
                   1447: **             Finds the last character in a string.
                   1448: **     Arguments:
                   1449: **             sz: non-NULL zero terminated string to search.
                   1450: **     Returns:
                   1451: **             NULL for an empty string.
                   1452: **             non-Null string pointer to the last valid character in sz.
                   1453: *****************************************************************************/
                   1454: LPSTR FAR PASCAL SzLastChar(LPSTR sz)
                   1455: {
                   1456:        LPSTR szCur  = (LPSTR)NULL;
                   1457:        LPSTR szNext = sz;
                   1458: 
                   1459:        while (*szNext != '\0')
                   1460:                szNext = AnsiNext((szCur = szNext));
                   1461: 
                   1462:        return(szCur);
                   1463: }
                   1464: 
                   1465: 
                   1466: 
                   1467: /*
                   1468: **     Purpose:
                   1469: **             Gets the string values for the following WM_COMMAND events:
                   1470: **                     IDC_B, IDC_C, IDC_X, and IDCANCEL.
                   1471: **     Arguments:
                   1472: **             wParam: event parameter value
                   1473: **     Returns:
                   1474: **             Pointer to string value constant, NULL if unknown event.
                   1475: *****************************************************************************/
                   1476: LPSTR FAR PASCAL SzDlgEvent(WORD wParam)
                   1477: {
                   1478:        LPSTR szEvent;
                   1479: 
                   1480:        switch(wParam)
                   1481:                {
                   1482:        case IDC_B:
                   1483:                szEvent = "BACK";
                   1484:                break;
                   1485:        case IDC_C:
                   1486:                szEvent = "CONTINUE";
                   1487:                break;
                   1488:        case IDC_X:
                   1489:                szEvent = "EXIT";
                   1490:                break;
                   1491:        case IDCANCEL:
                   1492:                szEvent = "CANCEL";
                   1493:                break;
                   1494:        default:
                   1495:                szEvent = NULL;
                   1496:                break;
                   1497:                }
                   1498: 
                   1499:        return(szEvent);
                   1500: }
                   1501: 
                   1502: 
                   1503: 
                   1504: /*
                   1505: **     Purpose:
                   1506: **             Converts an ASCII string representing a positive value
                   1507: **             into an integer.
                   1508: **     Arguments:
                   1509: **             sz: non-NULL zero terminated string to convert.
                   1510: **     Returns:
                   1511: **             Integer represented by the string.
                   1512: *****************************************************************************/
                   1513: int FAR PASCAL AsciiToInt(LPSTR sz)
                   1514: {
                   1515:        int i = 0;
                   1516: 
                   1517:        while (*sz == ' ' || *sz == '\t')
                   1518:                sz++;
                   1519: 
                   1520:        while (isdigit(*sz))
                   1521:                i = (i * 10) + *sz++ - '0';
                   1522: 
                   1523:        return(i);
                   1524: }
                   1525: 
                   1526: 
                   1527: 
                   1528: /*
                   1529: **     Purpose:
                   1530: **             Converts an positive integer (< 100) into a string
                   1531: **             representing its value.
                   1532: **     Arguments:
                   1533: **             i:  integer to convert (positive and < 100).
                   1534: **             sz: buffer to hold converted string (at least 3 bytes).
                   1535: **     Returns:
                   1536: **             sz.
                   1537: *****************************************************************************/
                   1538: LPSTR FAR PASCAL IntToAscii(int i, LPSTR sz)
                   1539: {
                   1540:        LPSTR szSav = sz;
                   1541: 
                   1542:        if (i >= 100
                   1543:                        || i < 0)
                   1544:                Assert(fFalse);
                   1545: 
                   1546:        if (i >= 10)
                   1547:                {
                   1548:                *sz++ = (char)('0' + (i / 10));
                   1549:                i %= 10;
                   1550:                }
                   1551:        *sz++ = (char)('0' + i);
                   1552:        *sz = '\0';
                   1553: 
                   1554:        return(szSav);
                   1555: }
                   1556: 
                   1557: 
                   1558: 

unix.superglobalmegacorp.com

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