|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.