Appendix A

See Graphic

Corel® PerfectScript™ Examples





8039

APPLICATION(A1; "WordPerfect"; Default; "US")
// Extract "Perfect" from WordPerfect and test if "program" was typed
// Demonstrate STRPOS and SUBSTR commands
vNumbers := ""
LABEL(Start)
 AND STRPOS EXAMPLES")
 IF(vStr = "")
  BEEP
   MESSAGEBOX(x; "ERROR"; "You pressed return 
    without entering any text"; IconStop!)
  GO(Start)
 ENDIF
 vSub := SUBSTR(vStr; 5; 7)
 IF(vSub = "Perfect")
   MESSAGEBOX(x; "SUBSTR EXAMPLE"; "WordPerfect 
    is simply """ + vSub + """"; IconInformation!)
 IF(STRPOS(vStr; "program") = 0)
  BEEP
   MESSAGEBOX(x; "STRPOS EXAMPLE"; "You entered 
 ENDIF
 ELSE
  BEEP
   MESSAGEBOX(x; "ERROR"; """WordPerfect"" wasn't 
    the first word"; IconExclamation!)
  GO(Start)
 ENDIF

8040

APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate TOLOWER and VARERRCHK command
HdReturn := NTOC(0F90Ah)
VARERRCHK(Off!)
FOR(x; 65; x 91; x + 1)
// convert uppercase character to lowercase
// vLongStr not declared - no value assigned
 vLongStr := vLongStr + TOLOWER(NTOC(x)) + NTOC(32)
ENDFOR
MESSAGEBOX(x; "VARERRCHK and TOLOWER"; "With VARERRCHK(On!), you would 
receive a run-time error message." + HdReturn + HdReturn + "vLongStr: " 
+ vLongStr + HdReturn; IconInformation!)

8041

APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate UNITSTR and DIALOG commands
vNmbr := 1
vStatus := 4
DIALOGDEFINE(1000; 50; 50; 100; 120; Percent! | NoTitle!| NoFrame!; "")
DIALOGADDTEXT(1000; -1; 10; 15; 75; 15; Left!; "Convert " + vNmbr + " inch 
to:")
DIALOGADDCHECKBOX(1000; 101; 15; 30; 100; 13; "Centimeters"; vCB1)
DIALOGADDCHECKBOX(1000; 102; 15; 45; 100; 13; "Millimeters"; vCB2)
DIALOGADDCHECKBOX(1000; 103; 15; 60; 100; 13; "Points"; vCB3)
DIALOGADDCHECKBOX(1000; 104; 15; 75; 100; 13; "WP Units"; vCB4)
DIALOGADDTEXT(1000; -2; 10; 100; 100; 15; Left!; "(Press Alt+F4 to cancel)")
DIALOGSHOW(1000; -1; Msg)
WHILE(vStatus = 4)
ENDWHILE
DIALOGDESTROY(1000)
LABEL(Msg)
 IF(Msg[5] = 274)
  BEEP
  vStatus := 2
 ENDIF
 DEFAULTUNITS(Inches!)
 SWITCH(Msg[3])
   CASEOF 101: vResult := UNITSTR(vNmbr; Centimeters!)
  Message
 CASEOF 102: vResult := UNITSTR(vNmbr; Millimeters!)
  Message
 CASEOF 103: vResult := UNITSTR(vNmbr; Points!)
  Message
 CASEOF 104: vResult := UNITSTR(vNmbr; WPUnits!)
  Message
 ENDSWITCH
 RETURN
LABEL(Message)
 DIALOGUNDISPLAY(1000; "CancelBttn")
 MESSAGEBOX(vStatus; "UNITSTR COMMAND"; vNmbr + " inch is converted to " 
+ vResult; IconInformation! | RetryCancel!)
 IF(vStatus = 4)
  DIALOGSHOW(1000; -1; Msg)
 ELSE
  BEEP
 ENDIF
 RETURN

8042

// There are two macros in this example
// Compile separately: name the first MACROLIB.WCM
// A Warning Error displayed when macros compiled for the first time
//For each warning, choose Continue Compilation.
// Demonstrate USE command
APPLICATION(A1; "WordPerfect"; Default; "US")
FUNCTION GetMsgBoxResult(x)
VARERRCHK(Off!)
BEEP
SWITCH(x)
 CASEOF 1:MESSAGEBOX(vChoice; "Macro File Library";
	"Choose a button to dismiss the message box"; IconStop! | AbortRetryIgnore!)
 CASEOF 2:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to 
dismiss the message box"; IconStop! | Ok!)
 CASEOF 3:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to 
dismiss the message box"; IconStop! | OkCancel!)
 CASEOF 4:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to 
dismiss the message box"; IconStop! | RetryCancel!)
 CASEOF 5:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to 
dismiss the message box"; IconStop! | YesNo!)
 CASEOF 6:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to 
dismiss the message box"; IconStop! | YesNoCancel!)
ENDSWITCH
RETURN(vChoice)
ENDFUNC
PROCEDURE DisplayMsgBoxResult(x)
 MESSAGEBOX(x; "Macro File Library"; "You chose the """ + x + """ button"; 
IconInformation!)
ENDPROC
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate USE command
VARERRCHK(Off!)
// replace default macros directory if necessary
USE("c:\prwin\macros\macrolib.wcm")
REPEAT
 MENU(vResult; Digit; ; ; {"AbortRetryIgnore!"; "OK!"; "OKCancel!"; "RetryCancel!"; 
"YesNo!"; "YesNoCancel"; "Quit"})
 SWITCH(GetMsgBoxResult(vResult))
  CASEOF 1: vStatus = "OK"
  CASEOF 2: vStatus = "Cancel"
  CASEOF 3: vStatus = "Abort"
  CASEOF 4: vStatus = "Retry"
  CASEOF 5: vStatus = "Ignore"
  CASEOF 6: vStatus = "Yes"
  CASEOF 7: vStatus = "No"
 ENDSWITCH
 IF(NOT(vResult = 7))
  DisplayMsgBoxResult(vStatus)
 ENDIF
UNTIL(vResult = 7)

8043

APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDCHECKBOX, DIALOGADDCOLORWHEEL, DIALOGADDCOMBOBOX
// and DIALOGADDCOUNTER
CALL(DlgCreate)
REPEAT
 MENU(vResult; Digit; ; ; {"Check box"; "Color wheel"; "Combination box"; 
"Counter"; "Quit"})
 DisplayControls
UNTIL(vResult = 5)
CALL(QuitMacro)
LABEL(DisplayControls)
 x := 0
 SWITCH(vResult)
  CASEOF 1: DIALOGSHOW(1000; 100; Msg)
   WHILE(x = 0)
   ENDWHILE
  CASEOF 2: DIALOGSHOW(1001; 1)
   vRed := vCW % 256
   vGreen := vCW / 256 % 256
   vBlue := vCW / 256 / 256
   DisplayColorValues(vRed; vGreen; vBlue)
  CASEOF 3: DIALOGSHOW(1002; 100)
  CASEOF 4: DIALOGSHOW(1003; 100)
 ENDSWITCH
 RETURN
LABEL(Msg)
 IF(Msg[5] = 274)
  DIALOGUNDISPLAY(1000; "CancelBttn")
  x := 1
 ENDIF
 SWITCH(Msg[3])
  CASEOF 100:
  DIALOGUNDISPLAY(1000; "CancelBttn")
   MESSAGEBOX(x; "SEE WHAT YOU CAN DO"; "This 
 ENDSWITCH
 RETURN
PROCEDURE DisplayColorValues(r; g; b)
 MESSAGEBOX(x; "COLOR VALUES"; "The red component equals " + r 
	+ ". The green component equals " + g + ". The blue component equals " 
+ b + "."; IconInformation!)
ENDPROC
LABEL(DlgCreate)
 DIALOGDEFINE (1000; 50; 50; 120; 50; Percent! | NoFrame!; "DIALOGADDCHECKBOX")
 DIALOGADDCHECKBOX(1000; 100; 10; 10; 100; 15; "Click check box"; vCB)
 DIALOGDEFINE (1001; 50; 50; 125; 130; Percent! | NoFrame! | OK!; "DIALOGADDCOLORWHEEL")
 DIALOGADDCOLORWHEEL(1001; 101; 10; 10; 105; 80; vCW)
 DIALOGDEFINE (1002; 50; 50; 125; 115; Percent! | NoFrame!; "DIALOGADDCOMBOBOX")
 DIALOGADDCOMBOBOX(1002; 100; 10; 10; 100; 50; DropDown!; var)
 DIALOGADDLISTITEM(1002; 100; "DropDown! combo box")
 DIALOGADDCOMBOBOX(1002; 101; 10; 40; 100; 50; Simple!; var)
 DIALOGADDLISTITEM(1002; 101; "Simple! combo box")
 DIALOGDEFINE (1003; 50; 50; 120; 50; Percent! | NoFrame!; "DIALOGADDCOUNTER")
 var := 5
 DIALOGADDCOUNTER(1003; 100; 10; 10; 50; 15; 0; var; 1; 10; 1)
 RETURN
LABEL(QuitMacro)
 FORNEXT(x; 1000; 4; 1)
  DIALOGDESTROY(x)
 ENDFOR
 QUIT

8044

APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDCONTROL and SENDKEYS commands
InhibitInput(Off!)
WM_SYSCOMMAND := 274
z := 0
DIALOGDEFINE (1000; 50; 50; 122; 150; Percent! | NoFrame! | OK!; "DIALOGADDCONTROL")
DIALOGADDCHECKBOX(1000; 100; 10; 10; 75; 15; "Check for demo"; vCB)
DIALOGADDCONTROL(1000; 101; 10; 40; 100; 75; "wpnslb20"; 2; ""; vListItem; 
0)
A := "Apple"
B := "Apple pie"
C := "Applesauce"
D := "Banana"
E := "Banana oil"Example Level = F := "Banana seat"
G := "Banana split"
FORNEXT(x; 65; 71; 1)
 DIALOGADDLISTITEM(1000; 101; INDIRECT(NTOC(x)))
ENDFOR
DIALOGSHOW(1000; 101; Msg)
WHILE(z = 0)
ENDWHILE
DIALOGDESTROY(1000)
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
 z := 1
ENDIF
SWITCH(Msg[3])
 CASEOF 100: Demo
 CASEOF "OKBttn": DIALOGUNDISPLAY(1000; 101)
 IF(STRLEN(vListItem)  0)
   ASSIGN(vSelect; "You selected """ + vListItem 
    + """ from the list box")
 ELSE
   ASSIGN(vSelect; "You didn't select an item 
    from the list box")
 ENDIF
 MESSAGEBOX(x; "LIST ITEM"; vSelect; IconInformation!)
 z := 1
ENDSWITCH
RETURN
LABEL(Demo)
 SENDKEYS WAIT("{Tab} {Up}")
 FOREACH(vLetter; {"A"; "p"; "p"; "l"; "e"; "s"; "a"; "u"; "c"; "e"})
  SENDKEYS WAIT(vLetter)
  WAIT(3)
 ENDFOR
 WAIT(12)
 FORNEXT(w; 1; 10; 1)
  SENDKEYS WAIT("{BackSpace}")
  WAIT(1)
 ENDFOR
 WAIT(10)
 FOREACH(vLetter; {"B"; "a"; "n"; "a"; "n"; "a"; " "; "s"; "p"; "l"; "i"; 
"t"})
  SENDKEYS WAIT(vLetter)
  WAIT(3)
 ENDFOR
 WAIT(12)
 SENDKEYS WAIT("{Tab}")
 MESSAGEBOX(x; "NAME SEARCH LIST BOX";
	"Enter a word from the list to experiment with WordPerfect's custom list 
box")
 SENDKEYS WAIT("{Up}")
 RETURN

8045

APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDHOTSPOT and DIALOGADDICON
VARERRCHK(Off!)
Yes := 6
WM_SYSCOMMAND := 274
DialogControl := 3
DIALOGDEFINE (1000; 50; 50; 115; 85; Percent! | NoFrame!; "DIALOGADDICON" 
)
DIALOGADDTEXT(1000; -1; 10; 10; 50; 13; Left!; "Click an icon:")
FORNEXT(z; 1; 3; 1)
 DIALOGADDICON (1000; 0; 25; z + 10 + (z * 13); 10; 8; "#" + (z+159); 0)
 DIALOGADDHOTSPOT(1000; z; 25; z + 10 + (z * 13); 10; 8; Click!)
ENDFOR
DIALOGSHOW(1000; 0; Msg)
WHILE(NOT(vStatus = Yes))
ENDWHILE
DIALOGDESTROY (1000)
QUIT
LABEL(Msg)
 IF(Msg[5] = WM_SYSCOMMAND)
  vStatus = Yes
 ENDIF
 SWITCH(Msg[DialogControl])
   CASEOF 1: MESSAGEBOX(vStatus; "DIALOGADDHOTSPOT";
   CASEOF 2:MESSAGEBOX(vStatus; "DIALOGADDHOTSPOT";
   CASEOF 3:MESSAGEBOX(vStatus; "DIALOGADDHOTSPOT";
 ENDSWITCH
 RETURN

8046

APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDFILENAMEBOX, DIALOGADDEDITBOX, and DIALOGADDVIEWER
VARERRCHK(Off!)
ASSIGN(vText; "Note that DIALOGDEFINE uses Enter2HRtn! style with this 
edit box control.")
DIALOGDEFINE (1000; 50; 50; 195; 225; OK! | Percent! | Enter2HRtn!; "DIALOGADDCONTROL")
DIALOGADDTEXT(1000; -1; 10; 10; 100; 15; Left!; "DIALOGADDFILENAMEBOX")
DIALOGADDFILENAMEBOX(1000; 100; 10; 20; 170; 15; FilesAndDirs!; vDir; "c:\")
DIALOGADDTEXT(1000; -2; 10; 40; 100; 15; Left!; "DIALOGADDEDITBOX")
DIALOGADDEDITBOX(1000; 101; 10; 50; 170; 50; Left! | Multiline! | WordWrap! 
| VScroll!; vText; 1000)
DIALOGADDTEXT(1000; -3; 10; 105; 100; 15; Left!; "DIALOGADDVIEWER")
DIALOGADDVIEWER(1000; 102; 10; 115; 170; 60; "C:\AUTOEXEC.BAT")
DIALOGSHOW(1000; 100)
DIALOGDESTROY(1000)
IF(STRLEN(vDir) = 0)
 Msg("You did not enter a path or filename")
ELSE
 MESSAGEBOX(x; "DIALOGADDFILENAMEBOX";
	"You entered the following path or path and filename: " + vDir)
ENDIF
IF(STRLEN(vText) = 0)
 Msg("You did not enter text in the edit control")
ELSE
 MESSAGEBOX(x; "DIALOGADDEDITBOX"; "You entered the following text in the 
edit control: " + NTOC(0F90Ah) + NTOC(0F90Ah) + vText)
ENDIF
PROCEDURE Msg(x)
 BEEP
 MESSAGEBOX(x; "Oops!"; x; IconExclamation!)
ENDPROC

8047

APPLICATION(A1; "WordPerfect"; Default; "US")
// Use array SortStr to sort up to eight character strings by length
// Calculate width of dialog box from longest string and height from the 
number of strings
// Demonstrate DIALOGADDFRAME command
CALL(GetNumberAndStrings)
CALL(GetDimensions)
CALL(DisplaySortedStrings)
LABEL(GetNumberAndStrings)
 GETNUMBER(vNmbr; "Number of strings to sort (up to eight):"; "FRAME EXAMPLE")
 IF(vNmbr  8)
  vNmbr := 8
 ENDIF
 DECLARE StrSort[vNmbr]
 FORNEXT(x; 1; vNmbr; 1)
   GETSTRING(StrSort[x]; "String " + x + ":";
    "SORT " + vNmbr + " STRINGS"; 50)
 ENDFOR
 RETURN
LABEL(GetDimensions)
 vSorted := 1
 WHILE(vSorted = 1)
  vSorted := 0
  FOR(x; 1; x vNmbr; x + 1)
  IF(STRLEN(StrSort[x]) STRLEN(StrSort[x + 1]))
   vTemp := StrSort[x]
   StrSort[x] := StrSort[x + 1]
   StrSort[x + 1] := vTemp
   vSorted := 1
  ENDIF
  ENDFOR
 ENDWHILE
 x := 20
 y := 20
 w := STRLEN(StrSort[1]) + (STRLEN(StrSort[1]) * 4)
 h := 13
 RETURN
LABEL(DisplaySortedStrings)
 DIALOGDEFINE(1000; 50; 50; w + 45; 40 + 30 * vNmbr; Percent!; "FRAME CONTROL")
 FORNEXT(r; 1; vNmbr; 1)
   DIALOGADDFRAME(1000; r; x - 5; y - 5 + (r 
    * 30) - 30; w + 10; h + 7; Frame! | Gray!)
   DIALOGADDTEXT(1000; 0; x; y + (r * 30) - 
    30; w; h; Center!; TOUPPER(StrSort[r]))
 ENDFOR
 DIALOGSHOW(1000; 1)
 DIALOGDESTROY(1000)
 QUIT

8048

APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate group controls and buttons
VARERRCHK(Off!)
DIALOGDEFINE(1000; 50; 50; 200; 140; Percent!; "GROUP CONTROLS AND BUTTONS")
DIALOGADDGROUPBOX(1000; -1; 10; 10; 75; 55; "Radio Buttons")
DIALOGADDRADIOBUTTON(1000; 100; 25; 25; 50; 15; "Example 1"; vRadio1)
DIALOGADDRADIOBUTTON(1000; 101; 25; 45; 50; 15; "Example 2"; vRadio2)
DIALOGADDVLINE(1000; -2; 125; 15; 55)
DIALOGADDPOPUPBUTTON(1000; 102; 135; 35; 50; 13; vPopup)
DIALOGADDLISTITEM(1000; 102; "Popup 1")
DIALOGADDLISTITEM(1000; 102; "Popup 2")
DIALOGADDLISTITEM(1000; 102; "Popup 3")
DIALOGADDHLINE(1000; -3; 10; 85; 175)
DIALOGADDPUSHBUTTON(1000; 103; 15; 95; 165; 13; DefaultBttn!; "Cancel")
DIALOGSHOW(1000; 103)
IF(vRadio1  0)
 vMessage := "You selected radio button 1. "
ELSE
IF(vRadio2  0)
 vMessage := "You selected radio button 2. "
ELSE
 vMessage := "You didn't select a radio button. "
ENDIF
ENDIF
vMessage := vMessage + "You selected " + vPopup + ". "
IF(MacroDialogResult = 103)
 vMessage := vMessage + "You chose Cancel to close the dialog box."
 MESSAGEBOX(x; "MESSAGE BOX"; vMessage; IconInformation!)
ELSE
 BEEP
 MESSAGEBOX(x; "MESSAGE BOX"; "You chose a system command to close the dialog 
box"; IconExclamation!)
ENDIF
DIALOGDESTROY(1000)

8049

APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDLISTBOX and DIALOGADDLISTITEM
DECLARE Fruit[5]
y := 10
DIALOGDEFINE(1000; 50; 50; 122; 155; OK! | Percent! | NoFrame!; "SORTED 
LIST BOX")
FOREACH(vList; {"Apples"; "Oranges"; "Bananas"; "Grapes"; "Pears"})
 DIALOGADDTEXT(1000; 0; 10; y; 30; 15; Left!; vList)
 DIALOGADDHOTSPOT(1000; y; 10; y; 30; 9; Click!)
 FRUIT[y/10] := vList
 y := y + 10
ENDFOR
DIALOGADDLISTBOX(1000; 103; 50; 10; 60; 50; Sorted!; vChoice)
DIALOGADDTEXT(1000; 0; 10; 75; 102; 35; Left! | RecessBox!;
"Click a ""fruit"" to display in the list box. Click a list box item and 
choose OK when finished.")
DIALOGSHOW(1000; 102; Msg)
Stop := 0
WHILE(Stop = 0)
ENDWHILE
DIALOGDESTROY(1000)
IF(vChoice = "")
 vMessage := "You didn't select a list box item " + vChoice
ELSE
 vMessage := "You selected " + vChoice
ENDIF
MESSAGEBOX(x; "LIST BOX CHOICE"; vMessage; IconInformation!)
QUIT
LABEL(Msg)
 IF(Msg[5] = 274)
  Stop := 1
 ENDIF
 SWITCH(Msg[3])
  CASEOF 10: DIALOGADDLISTITEM(1000; 103; Fruit[1])
  CASEOF 20: DIALOGADDLISTITEM(1000; 103; Fruit[2])
  CASEOF 30: DIALOGADDLISTITEM(1000; 103; Fruit[3])
  CASEOF 40: DIALOGADDLISTITEM(1000; 103; Fruit[4])
  CASEOF 50: DIALOGADDLISTITEM(1000; 103; Fruit[5])
  CASEOF "OKBttn": 
  DIALOGUNDISPLAY(1000; "OKBttn")
  Stop := 1
  ENDSWITCH
  RETURN

8050

APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDSCROLLBAR command with callback function
SB_LINEUP := 0
SB_LINEDOWN := 1
WM_SYSCOMMAND := 274
WM_HSCROLL := 276
DIALOGDEFINE(1000; 50; 50; 125; 70; Percent!; "SCROLL BAR")
DIALOGADDTEXT(1000; -1; 10; 10; 100; 15; Center! | RecessBox!; "Click the 
left or right arrow")
DIALOGADDSCROLLBAR(1000; "Scroll"; 10; 30; 100; 0; Left! | HScroll!; BarPos; 
1; 3)
DIALOGSHOW(1000; "Scroll"; Msg)
Stop := 1
WHILE(Stop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
 SWITCH(Msg[5])
  CASEOF WM_SYSCOMMAND: Stop := 0
  CASEOF WM_HSCROLL: CALL(Scroll)
 ENDSWITCH
 RETURN
LABEL(Scroll)
 SWITCH(Msg[6])
  CASEOF SB_LINEUP:
   MESSAGEBOX(x; "CALLBACK FUNCTION"; "You clicked
     the left arrow"; IconInformation!)
  CASEOF SB_LINEDOWN:
   MESSAGEBOX(x; "CALLBACK FUNCTION"; "You clicked
     the right arrow"; IconInformation!)
 ENDSWITCH
 RETURN

8051

APPLICATION(A1; "WordPerfect"; Default; "US")
// Returns the handle of five push button controls
// Demonstrate DIALOGHANDLE command
VARERRCHK(Off!)
DIALOGDEFINE(1000; 50; 50; 100; 190; Percent!; "DIALOGHANDLE")
FORNEXT(x; 1; 5; 1)
 DIALOGADDPUSHBUTTON(1000; x; 10; x + (x * 20) - 10; 75; 15; NonDefaultBttn!; 
"Button " + x)
ENDFOR
DIALOGADDTEXT(1000; -1; 10; 120; 75; 40; RecessBox! | Left!; "Press Enter, 
or choose Close from the system menu box.")
DIALOGSHOW(1000; 1)
vResult := ""
FOREACH(vControl; {"1"; "2"; "3"; "4"; "5"})
 vResult := vResult + "Button " + vControl + ": "
 DIALOGHANDLE(vHandles; 1000; vControl)
 vResult := vResult + vHandles + ". "
ENDFOR
MESSAGEBOX(x; "CONTROL HANDLES"; vResult)
DIALOGDESTROY(1000)

8057

// Create a DOS or Windows* dialog box
// Demonstrate IFPLATFORM command
// compile on DOS platform
IFPLATFORM(DOS)
 DLGCREATE(x; "TITLE"; DLGNoCancel!;;;30;14)
 DLGCONTROL(CtrlRadioButton!;a;"Letter";StyInitial!;4;4;;2)
 DLGCONTROL(CtrlRadioButton!;b;"Itinerary";;4;6;;2)
 DLGCONTROL(CtrlRadioButton!;c;"Memo";;4;8;;2)
 DLGCONTROL(CtrlRadioButton!;d;"Fax";;4;10;;2)
DLGEND
SWITCH(1)
 CASEOF a: BEEP
 CASEOF b: BEEP
 CASEOF c: BEEP
 CASEOF d: BEEP
ENDSWITCH
ENDIFPLATFORM
// compile on Windows* platform
IFPLATFORM(WIN95)
 APPLICATION(A1; "WordPerfect"; Default; "US")
 DIALOGDEFINE(1000; 50; 50; 100; 125; Style:OK!; Caption:"TITLE")
 DIALOGADDRADIOBUTTON(1000; 1; 10; 10; 75; 15; ButtonText:"Letter"; a)
 DIALOGADDRADIOBUTTON(1000; 2; 10; 25; 75; 15; ButtonText:"Itinerary"; b)
 DIALOGADDRADIOBUTTON(1000; 3; 10; 40; 75; 15; ButtonText:"Memo"; c)
 DIALOGADDRADIOBUTTON(1000; 4; 10; 55; 75; 15; ButtonText:"Fax"; d)
 DIALOGSHOW(1000; 1)
 SWITCH(1)
  CASEOF a: vMsg := "Letter"
  CASEOF b: vMsg := "Itinerary"
  CASEOF c: vMsg := "Memo"
  CASEOF d: vMsg := "Fax"
 ENDSWITCH
 MESSAGEBOX(x; "Selection"; vMsg; IconInformation!)
 DIALOGDESTROY(1000)
ENDIFPLATFORM

8058

APPLICATION(A1; "WordPerfect"; Default; "US")
// Compiling this macro produces a compile-time syntax error
// To compile, make the second AboutDlg a comment (//)
// Demonstrate ENDAPP command
AboutDlg
ENDAPP(A1)
AboutDlg

8059

This command is included for DOS compatibility. The windows equivalent 
is Menu.

8060

This command is included for DOS compatibility. The windows equivalent 
is Run.

8061

APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate DIALOGDISPLAY command
HRt = NTOC(0F90Ah)
HSp = " "
vCombo = "Combo item 1"
vList = "List item 1"
WM_COMMAND = 273
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 50; 50; 160; 125; Percent! | NoFrame! | Cancel!; "WM_COMMAND")
DIALOGADDLISTBOX(1000; 100; 10; 10; 60; 30; Sorted!; vList)
DIALOGADDLISTITEM(1000; 100; "List item 1")
DIALOGADDLISTITEM(1000; 100; "List item 2")
DIALOGADDLISTITEM(1000; 100; "List item 3")
DIALOGADDCOMBOBOX(1000; 101; 10; 50; 60; 40; Droplist!; vCombo; 100)
DIALOGADDLISTITEM(1000; 101; "Combo item 1")
DIALOGADDLISTITEM(1000; 101; "Combo item 2")
DIALOGADDLISTITEM(1000; 101; "Combo item 3")
DIALOGADDPOPUPBUTTON(1000; 102; 10; 80; 60; 15; vPopup)
DIALOGADDLISTITEM(1000; 102; "Popup item 1")
DIALOGADDLISTITEM(1000; 102; "Popup item 2")
DIALOGADDLISTITEM(1000; 102; "Popup item 3")
DIALOGADDPUSHBUTTON(1000; 103; 100; 10; 50; 15; NonDefaultBttn!; "Push 
Button")
DIALOGADDRADIOBUTTON(1000; 104; 100; 35; 50; 15; "Radio"; vRadio)
DIALOGADDCHECKBOX(1000; 105; 100; 60; 50; 15; "Check box"; vCheck)
DIALOGHANDLE(hButton; 1000; 103)
DIALOGHANDLE(hRadio; 1000; 104)
DIALOGHANDLE(hCheck; 1000; 105)
DIALOGDISPLAY(1000; 1; Msg)
x := 0
While(x = 0)
Endwhile
DIALOGDESTROY(1000)
LABEL(MSG)
 IF((Msg[5] = WM_SYSCOMMAND) OR (Msg[3] = "CancelBttn"))
  BEEP
  x = 1
 RETURN
 ENDIF
 IF(Msg[5] = WM_COMMAND)
  lParam = Msg[7]
  DIALOGUNDISPLAY(1000; 1)
  MsgBox
  DIALOGDISPLAY(1000; 1; Msg)
 ENDIF
 RETURN
LABEL(MsgBox)
 SWITCH(LOWRD(lParam))
  CASEOF hButton: vHandle = hButton
  CASEOF hRadio: vHandle = hRadio
  CASEOF hCheck: vHandle = hCheck
  DEFAULT: vHandle = "N/A"
 ENDSWITCH
 Lo = "Low-word: " + LOWRD(lParam) + HRt + HRt
 Hi = "High-word: " + HIWRD(lParam) + HRt + HRt
 Handle = "Control handle: " + vHandle + HRt + HRt
 ListItems = "Selected list items:" + HRt + HRt + HSp + vPopup + HRt + HSp 
+ vList + HRt + HSp + vCombo + HRt
 MESSAGEBOX(vResult; "WM_COMMAND"; Hi + Lo + Handle + ListItems)
 RETURN
FUNCTION LOWRD(lo)
 lo = lo & 65535
 Return(lo)
ENDFUNC
FUNCTION HIWRD(hi)
 hi = hi > 16
 RETURN(hi)
ENDFUNC

8064

APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate DIMENSIONS command
HRt = NTOC(0F90Ah)
DECLARE array[4; 2; 5]
v1 = DIMENSIONS(array[])
v2 = DIMENSIONS(array[]; 0)
v3 = DIMENSIONS(array[]; 1)
v4 = DIMENSIONS(array[]; 2)
v5 = DIMENSIONS(array[]; 3)
v6 = DIMENSIONS(array[]; 4)
v7 = DIMENSIONS(c)
v8 = DIMENSIONS(b[])
vMsg = v1 + HRt + v2 + HRt + v3 + HRt + v4 + HRt + v5 + HRt + v6 + HRt 
+ v7 + HRt + v8
MESSAGEBOX(x; "DIMENSIONS"; "Variables v1 - v8 values:" + Hrt + Hrt + vMsg)

8065

APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONADDLISTITEM command
Loop = 1
ListItem = 1
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 50; 50; 107; 125; Percent! | NoFrame!; "RegionAddListItem")
DIALOGADDFRAME(1000; 100; 10; 10; 10; 10; Frame! | Filled! | Gray!)
DIALOGADDHOTSPOT(1000; 101; 10; 10; 10; 10; Click!)
DIALOGADDTEXT(1000; 0; 28; 10; 75; 15; Left!; "Click to add list item")
DIALOGADDLISTBOX(1000; 102; 10; 35; 85; 75; Sorted!; var)
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
 IF(Msg[5] = WM_SYSCOMMAND)
  Loop = 0
 ENDIF
 IF(Msg[3] = 101)
  AddListBoxItem
 ENDIF
 RETURN
LABEL(AddListBoxItem)
 vItem = "Item " + ListItem
 REGIONADDLISTITEM("1000.102"; vItem)
 ListItem = ListItem + 1
 RETURN

8066

APPLICATION(WP; "WordPerfect"; Default; "US")
// Command: REGIONENABLEWINDOW
Loop = 1
WM_SYSCOMMAND = 274
vDisable = 1
DIALOGDEFINE(1000; 50; 50; 155; 75; Percent! | NoFrame!; "RegionEnableWindow")
DIALOGADDFRAME(1000; 100; 10; 10; 10; 10; Frame! | Filled! | Gray!)
DIALOGADDHOTSPOT(1000; 101; 10; 10; 10; 10; Click!)
DIALOGADDTEXT(1000; 0; 28; 10; 125; 15; Left!; "Click to disable/enable 
check box")
DIALOGADDCHECKBOX(1000; 102; 55; 30; 50; 15; "Check box"; var)
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
 IF(Msg[5] = WM_SYSCOMMAND)
  Loop = 0
 ENDIF
 IF(Msg[3] = 101)
 IF(vDisable = 1)
  REGIONENABLEWINDOW("1000.102"; Disable!)
  vDisable = 0
 ELSE
  REGIONENABLEWINDOW("1000.102"; Enable!)
  vDisable = 1
 ENDIF
 ENDIF
 RETURN

8067

APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONGETCHECK command
Loop = 1
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 20; 30; 135; 75; NoFrame!; "RegionGetCheck")
DIALOGADDFRAME(1000; 100; 10; 10; 10; 10; Frame! | Filled! | Gray!)
DIALOGADDHOTSPOT(1000; 101; 10; 10; 10; 10; Click!)
DIALOGADDTEXT(1000; 0; 28; 10; 125; 15; Left!; "Click to get check box 
state")
DIALOGADDCHECKBOX(1000; 102; 30; 35; 20; 15; "1"; var)
DIALOGADDCHECKBOX(1000; 103; 60; 35; 20; 15; "2"; var)
DIALOGADDCHECKBOX(1000; 104; 90; 35; 20; 15; "3"; var)
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
 IF(Msg[5] = WM_SYSCOMMAND)
  Loop = 0
 ENDIF
 IF(Msg[3] = 101)
  REGIONGETCHECK(vChk1; "1000.102")
  REGIONGETCHECK(vChk2; "1000.103")
  REGIONGETCHECK(vChk3; "1000.104")
 FORNEXT(x; 1; 3; 1)
  IF(INDIRECT("vChk" + x) = 1)
   ASSIGN(INDIRECT("vChk" + x); "selected")
  ELSE
   ASSIGN(INDIRECT("vChk" + x); "not selected")
  ENDIF
 ENDFOR
 MESSAGEBOX(vYesNo; "Check Box State"; "1: " + vChk1 + NTOC(0F90Ah) + "2: 
" + vChk2 + NTOC(0F90Ah) + "3: " + vChk3)
 ENDIF
 RETURN

8068

APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONGETSELECTEDTEXT command
Loop = 1
lParam = 7
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 20; 30; 107; 125; NoFrame!; "RegionGetSelectedText")
DIALOGADDTEXT(1000; 0; 0; 15; 107; 15; Center!; "Select a fruit")
DIALOGADDLISTBOX(1000; 102; 10; 35; 85; 75; Sorted!; var)
FOREACH(vList; {"Apples"; "Bananas"; "Oranges"; "Grapes"; "Pears"; "Corn"})
 DIALOGADDLISTITEM(1000; 102; vList)
ENDFOR
DIALOGHANDLE(hItem; 1000; 102)
DIALOGSHOW(1000; 102; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
 IF(Msg[5] = WM_SYSCOMMAND)
  Loop = 0
 ENDIF
IF(LWORD(Msg[lParam]) = hItem)
 REGIONGETSELECTEDTEXT(vSelectItem; "1000.102")
 IF(vSelectItem = "Corn")
  BEEP
   MESSAGEBOX(z; "Error"; "You didn't select 
    a fruit!"; IconExclamation!)
 ELSE
   MESSAGEBOX(z; "List Box Item"; "You selected 
    " + vSelectItem)
 ENDIF
ENDIF
RETURN
FUNCTION LWORD(vNum)
 vNum = vNum & 65535
 RETURN(vNum)
ENDFUNC

8069

APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONAGETWINDOWTEXT command
Loop = 1
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 50; 50; 158; 50; Percent! | NoFrame!; "RegionGetWindowText")
DIALOGADDFRAME(1000; 100; 10; 10; 10; 10; Frame! | Filled! | Gray!)
DIALOGADDHOTSPOT(1000; 101; 10; 10; 10; 10; Click!)
DIALOGADDTEXT(1000; 0; 28; 10; 125; 15; Left!; "Click to retrieve the caption 
bar title")
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
 IF(Msg[5] = WM_SYSCOMMAND)
  Loop = 0
 ENDIF
 IF(Msg[3] = 101)
  GetTitle
 ENDIF
 RETURN
LABEL(GetTitle)
 REGIONGETWINDOWTEXT(vTitle; "1000")
 MESSAGEBOX(x; "Region Commands"; "The caption bar title is " + vTitle; 
IconInformation!)
 Loop = 0
 RETURN

8070

APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONMOVEWINDOW command
Loop = 1
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 20; 40; 135; 75; NoFrame!; "RegionMoveWindow")
DIALOGADDCHECKBOX(1000; 101; 10; 10; 75; 15; "Click to start demo"; var)
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
 IF(Msg[5] = WM_SYSCOMMAND)
  Loop = 0
 ENDIF
 IF(Msg[3] = 101)
  REGIONSHOWWINDOW("1000.101"; Hide!)
  FORNEXT(x; 50; 190; 10)
   REGIONMOVEWINDOW("1000"; 20; x; 135; 75)
   WAIT(.5)
  ENDFOR
  FORNEXT(x; 50; 190; 10)
   REGIONMOVEWINDOW("1000"; x; 190; 135; 75)
   WAIT(.5)
  ENDFOR
  FORNEXT(x; 190; 40; -10)
   REGIONMOVEWINDOW("1000"; 200; x; 135; 75)
   WAIT(.5)
  ENDFOR
  FORNEXT(x; 190; 40; -10)
   REGIONMOVEWINDOW("1000"; x; 40; 135; 75)
   WAIT(.5)
  ENDFOR
 WAIT(.5)
 REGIONMOVEWINDOW("1000"; 20; 40; 300; 225)
 DIALOGADDTEXT(1000; 102; 0; 15; 300; 15; Center!; "Finished")
 FORNEXT(x; 20; 100; 5)
  REGIONMOVEWINDOW("1000.102"; 0; x; 300; 15)
  WAIT(.9)
 ENDFOR
 ENDIF
 RETURN

8071

APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONREMOVELISTITEM command
Loop = 1
lParam = 7
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 50; 50; 107; 125; Percent! | NoFrame!; "RegionRemoveListItem")
DIALOGADDTEXT(1000; 0; 0; 15; 107; 15; Center!; "Select a fruit to delete")
DIALOGADDLISTBOX(1000; 102; 10; 35; 85; 75; Sorted!; var)
FOREACH(vList; {"Apples"; "Bananas"; "Oranges"; "Grapes"; "Pears"; "Watermelon"; 
"Grapefruit"; "Peaches"})
 DIALOGADDLISTITEM(1000; 102; vList)
ENDFOR
DIALOGHANDLE(hItem; 1000; 102)
DIALOGSHOW(1000; 102; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
 IF(Msg[5] = WM_SYSCOMMAND)
  Loop = 0
 ENDIF
 IF(LWORD(Msg[lParam]) = hItem)
  REGIONGETSELECTEDTEXT(vSelectItem; "1000.102")
  REGIONREMOVELISTITEM("1000.102"; vSelectItem)
 ENDIF
 RETURN
FUNCTION LWORD(vNum)
 vNum = vNum & 65535
 RETURN(vNum)
ENDFUNC