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