VREXX VISUAL REXX FOR PRESENTATION MANAGER VERSION 1.0 September 9, 1992 Richard B. Lam IBM T.J. Watson Research Center Route 134 POB 218 Yorktown Heights, NY 10598 (C) Copyright IBM Corp. 1992 (C) COPYRIGHT IBM CORP. 1992 ii VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 CONTENTS ________ INTRODUCTION . . . . . . . . . . . . . . . . . . . . 1 System Requirements . . . . . . . . . . . . . . . . . 2 Installation . . . . . . . . . . . . . . . . . . . . 2 USING VREXX . . . . . . . . . . . . . . . . . . . . . 3 COMMAND LIST . . . . . . . . . . . . . . . . . . . . 7 COMMAND REFERENCE . . . . . . . . . . . . . . . . . 11 VArc . . . . . . . . . . . . . . . . . . . . . . . 12 VBackColor . . . . . . . . . . . . . . . . . . . . 13 VCheckBox . . . . . . . . . . . . . . . . . . . . . 13 VClearWindow . . . . . . . . . . . . . . . . . . . 14 VCloseWindow . . . . . . . . . . . . . . . . . . . 15 VColorBox . . . . . . . . . . . . . . . . . . . . . 15 VDialogPos . . . . . . . . . . . . . . . . . . . . 16 VDraw . . . . . . . . . . . . . . . . . . . . . . . 16 VDrawParms . . . . . . . . . . . . . . . . . . . . 18 VExit . . . . . . . . . . . . . . . . . . . . . . . 19 VFileBox . . . . . . . . . . . . . . . . . . . . . 20 VFontBox . . . . . . . . . . . . . . . . . . . . . 21 VForeColor . . . . . . . . . . . . . . . . . . . . 22 VGetVersion . . . . . . . . . . . . . . . . . . . . 22 VInit . . . . . . . . . . . . . . . . . . . . . . . 23 VInputBox . . . . . . . . . . . . . . . . . . . . . 24 VListBox . . . . . . . . . . . . . . . . . . . . . 25 VMsgBox . . . . . . . . . . . . . . . . . . . . . . 26 VMultBox . . . . . . . . . . . . . . . . . . . . . 26 VOpenWindow . . . . . . . . . . . . . . . . . . . . 28 VRadioBox . . . . . . . . . . . . . . . . . . . . . 29 VResize . . . . . . . . . . . . . . . . . . . . . . 30 VSay . . . . . . . . . . . . . . . . . . . . . . . 31 VSetFont . . . . . . . . . . . . . . . . . . . . . 32 VSetTitle . . . . . . . . . . . . . . . . . . . . . 33 VTableBox . . . . . . . . . . . . . . . . . . . . . 33 EXAMPLE VREXX PROCEDURES . . . . . . . . . . . . . 37 TESTWIN.CMD . . . . . . . . . . . . . . . . . . . . 37 TESTDLGS.CMD . . . . . . . . . . . . . . . . . . . 40 TESTDRAW.CMD . . . . . . . . . . . . . . . . . . . 44 TECHNICAL DATA . . . . . . . . . . . . . . . . . . 49 RELEASE NOTES AND COMMENTS . . . . . . . . . . . . 51 Contents iii (C) COPYRIGHT IBM CORP. 1992 iv VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 INTRODUCTION ____________ VREXX is Visual REXX - a new way for OS/2 users to create their own Presentation Manager (PM) programs using REXX! VREXX provides users with a set of functions that can be called from REXX procedures. These functions open and close standard PM windows, providing programmable control over the appearance and positioning of the windows. Dialog box functions allow file selection, display of messages, entering numbers or text strings, and making single or multiple selections through radiobutton, checkbox or listbox controls. Table, Color and font selection dialogs are also available. And, graphics functions for setting pixels, drawing markers, lines, polygons, splines, arcs, circles and text (in multiple fonts) are included. With VREXX, OS/2 REXX procedures can use all of the standard features of REXX under OS/2, except that the old text window input and output procedures are replaced with PM windows and dialogs. No prior experience with PM pro- gramming is necessary. The OS/2 Programming toolkit is NOT required. All you need to do is write a REXX program that makes function calls to the VREXX functions. VREXX features: o Creation and manipulation of standard PM windows o Powerful dialog functions, including: - Positioning control over the dialogs - Dialog button selections - Standard filename selection dialog - Data Table, Color selection and Font selection dialogs - 10 line message box - Input boxes for entering text or numbers - Radiobutton, checkbox and listbox controls for selecting item(s) from a list o Graphics support, with functions for: - Setting window foreground and background colors INTRODUCTION 1 (C) COPYRIGHT IBM CORP. 1992 - Setting individual pixels - Drawing markers, with 10 different marker types - Polylines, with 7 different line types - Filled polygons, with 6 different fill types - Splines - Arcs and circles o On-line help facility SYSTEM REQUIREMENTS ___________________ VREXX runs under OS/2 PM version 2.0 on IBM PS/2 or PC- compatible systems. INSTALLATION ____________ Copy VREXX.INF to a BOOKSHELF help file directory speci- fied in your CONFIG.SYS file. Copy VREXX.EXE and the sample command files to a utility directory included in your PATH statement. Copy VREXX.DLL and DEVBASE.DLL to a directory specified in your LIBPATH in CONFIG.SYS. 2 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 USING VREXX ___________ REXX procedures that call VREXX functions are started normally, by either typing the CMD filename on an OS/2 command line, or by using the OS/2 START command. To run a REXX procedure named EXAMPLE.CMD which calls VREXX functions, simply type: example or start example.cmd from an OS/2 command line prompt. The EXAMPLE.CMD proce- dure will then execute normally, in addition to providing access to the VREXX functions. To access on-line help for VREXX, use the OS/2 VIEW command by typing: view vrexx.inf or vrexx from an OS/2 command line prompt. Before calling VREXX functions in your REXX procedures, you must load and initialize the external functions by calling VInit. Also, the VExit function must be called at the end of your REXX procedure to clean up the system resources allocated in the initialization. The recom- mended approach for this is to structure your REXX proce- dure as follows: USING VREXX 3 (C) COPYRIGHT IBM CORP. 1992 /* EXAMPLE.CMD - structure for initializing and */ /* terminating VREXX procedures */ /* initialize VREXX */ '@echo off' call RxFuncAdd 'VInit', 'VREXX', 'VINIT' initcode = VInit() if initcode = 'ERROR' then signal CLEANUP signal on failure name CLEANUP signal on halt name CLEANUP signal on syntax name CLEANUP /* REXX statements and VREXX function calls go here */ /* ... */ /* end of REXX statements */ /* terminate VREXX - add any other clean-up */ /* for your REXX procedure here also */ CLEANUP: call VExit exit The SIGNAL statements ensure that VExit is called if your REXX procedure contains an error. You may optionally add a SIGNAL ON ERROR NAME CLEANUP statement also, depending on whether you provide another error handler for non- fatal ERROR return codes. After initialization, VREXX lets you create multiple windows, with each window returning a specific id that you use to refer to the window for later operations. Note for PM programmers: the REXX command files are pro- cedural, not event-driven. Therefore, your REXX proce- dure executes from top to bottom as a normal REXX program. But, at any time, especially when dialogs are displayed, the windows created with VREXX calls can be manipulated just like other PM windows - they may be iconized, resized, moved, etc. Also, the contents of the window are maintained internally - you don't need to redraw the window every time it is moved or sized. The windows are destroyed by calling a window close function, passing it the id of the window to close. Although multiple windows may be created, only 1 dialog box at a time may be processed by the running REXX proce- dure. Graphics coordinates for the windows are always set from 0 to 1000 in both the x and y directions, with the origin 4 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 at the lower left corner of the window. The current color and line type apply to all graphics operations. The window and dialog positioning functions always operate with numbers representing a percentage of the screen. Thus, to center a window on the screen with the window filling half of the screen area, the left and bottom corners of the window are set to 25, while the right and top corners of the window are set to 75. See the command reference section for more examples on graphics and window positioning. There are three sample REXX programs that come with the package, called TESTWIN.CMD, TESTDLGS.CMD, and TESTDRAW.CMD, which demonstrate the syntax of the VREXX functions. The next two sections are a summary of these functions and a function reference, including notes on the syntax and arguments for VREXX functions. USING VREXX 5 (C) COPYRIGHT IBM CORP. 1992 6 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 COMMAND LIST ____________ This section provides a summary of the functions which can be called from a REXX procedure running under VREXX. See the EXAMPLES section for some REXX procedures which implement the VREXX commands. The following functions are provided: o Startup, Termination and Version Functions VEXIT Cleans up the current VREXX system resources VGETVERSION Returns the current VREXX program version number VINIT Initializes the VREXX functions and system resources o Window Functions VBACKCOLOR Sets the background color of a window VCLEARWINDOW Clears the contents of a window VCLOSEWINDOW Closes a window VFORECOLOR Sets the foreground color of a window VOPENWINDOW Opens a new window VRESIZE Resizes and repositions a window on the screen VSETTITLE Sets the titlebar of a window to a specified string o Dialog Functions VCHECKBOX Creates a checkbox dialog for selecting multiple items from a list VCOLORBOX Allows selection of foreground and background colors from a dialog COMMAND LIST 7 (C) COPYRIGHT IBM CORP. 1992 VDIALOGPOS Controls the positioning of dialog windows on the screen VFILEBOX Allows selection of a full pathname of a file from a dialog VFONTBOX Allows selection of the typeface and point size to use for text output VINPUTBOX Creates an entryfield dialog with prompt strings for entering numbers or strings VLISTBOX Creates a listbox dialog for selecting 1 item from a large list VMSGBOX Creates a message box for dis- playing from 1 to 10 message strings VMULTBOX Creates a multiple entryfield dialog, with 1 to 10 entryfields and a prompt string for each field, with optional echoing of input characters (e.g. for entering passwords). VRADIOBOX Creates a radiobox dialog for selecting 1 item from a list VTABLEBOX Constructs a table dialog as a listbox, with programmable column widths o Graphics Functions VARC Draws an arc or complete circle, optionally filled with the current fill style VDRAW Draws pixels, markers, lines, polygons or splines using the current marker type, line attri- bute and fill style VDRAWPARMS Sets the current marker type, line attribute and fill style to use for subsequent graphics oper- ations 8 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 VSAY Draws a text string in the current font on a window VSETFONT Sets the current font to use for drawing text COMMAND LIST 9 (C) COPYRIGHT IBM CORP. 1992 10 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 COMMAND REFERENCE _________________ This is an alphabetical list of the VREXX functions. The calling arguments are described, and implementation limits and notes on each function are given. For the dialog functions, several of them take a [stem] variable name as an argument. For example, the VMsgBox function is called as follows: msg.0 = 2 msg.1 = 'This is the first line' msg.2 = 'This is the second line' buttons = 1 call VMsgBox 'Dialog title', msg, buttons where msg is the variable name of a stem variable. This variable uses the same format for all dialog functions, where the stem.0 variable holds the number of items, and stem.1 through stem.n hold the actual items. In the example above, there are 2 message lines to be displayed, so msg.0 is set to 2, and msg.1 and msg.2 hold the actual lines that will be displayed by the function. The dialogs also take a standard [buttons] argument, which is defined as a number between 1 and 6, denoting that the following buttons be created on the dialog: [buttons] value Buttons created Return value _______________ _______________ ____________ 1 OK 'OK' 2 Cancel 'CANCEL' 3 OK and Cancel 'OK' or 'CANCEL' 4 Yes 'YES' 5 No 'NO' 6 Yes and No 'YES' or 'NO' In the example above, the [buttons] argument to the VMsgBox function was 1, so the message box dialog would be created with a single pushbutton labelled "OK". The VMsgBox function could also be called with the syntax: return_button = VMsgBox('Dialog title', msg, buttons) where the return_button variable would be set to the return value corresponding to the pushbutton selected by the user (return_value = 'OK' in this example). COMMAND REFERENCE 11 (C) COPYRIGHT IBM CORP. 1992 Those dialogs which need to return a selected string will place the selected string in a [stem].vstring variable. For example, to access the string typed into an entryfield with the VInputBox function, use the following code: str.0 = 1 str.1 = 'Type a string' call VInputBox 'Example', str, 1 answer = str.vstring /* answer now contains the user input */ VARC ____ PURPOSE Draws an arc or complete circle, optionally filled with the current fill style DEFINITION VARC [ID] [X] [Y] [RADIUS] [ANGLE1] [ANGLE2] PARAMETERS [id] is the window id. [x] and [y] are the center point of the arc, and [radius] is the radius of the arc, in units of 0 to 1000. [angle1] and [angle2] are the angles to draw the arc between, starting with angle 0 at 3 o'clock, increasing in a counter- clockwise direction. COMMENTS [angle1] should be less than [angle2] and both angles should be between 0 and 360 degrees. The angles may be specified in floating point format. FUNCTION RESULT none Example: /* draw an arc in the center of a window, going from 12 o'clock to 6 o'clock, with a radius of 100 */ a1 = 90 a1 = 270.0 call VArc id, 500, 500, 100, a1, a2 12 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 VBACKCOLOR __________ PURPOSE Sets the background color of a window DEFINITION VBACKCOLOR [ID] [COLOR] PARAMETERS [id] is the window id and [color] is the new background color to use for the window. COMMENTS [color] must be specified as a string, in either upper, lower or mixed case, and must equal one of 'BLACK', 'WHITE', 'RED', 'GREEN', 'BLUE', 'CYAN', 'YELLOW' or 'PINK'. FUNCTION RESULT none Example: /* change a window background color to 'RED' */ call VBackColor id, 'RED' VCHECKBOX _________ PURPOSE Creates a checkbox dialog for selecting multiple items from a list DEFINITION VCHECKBOX [TITLE] [STEM] [OUTPUT] [BUTTONS] PARAMETERS [title] is the string to use for the dialog titlebar, and [stem] is the variable name of the stem variable containing the items that will be used in constructing the dialog. [output] is the variable name of the stem variable where the selected items will be placed, and [buttons] denotes the desired button types to be placed on the dialog. COMMENTS A maximum of 10 items may be passed to this function. The [output] stem variable need not exist when this function is called. The number of items selected is given by the [output].0 variable name (e.g. if [output] = user_selection, then the COMMAND REFERENCE 13 (C) COPYRIGHT IBM CORP. 1992 REXX variable user_selection.0 holds the number of items checked in the dialog, and user_selection.1 through user_selection.n hold the actual selections). The [output] variable can be initialized before calling this function with the default strings to be checked when the dialog is created. FUNCTION RESULT 'OK', 'CANCEL', 'YES' or 'NO', depending on the [buttons] argument Example: /* let user select movies */ movie.0 = 5 movie.1 = 'Silence of the Lambs' movie.2 = 'Dr. Strangelove' movie.3 = 'Terminator 2' movie.4 = 'Goldfinger' movie.5 = 'Basic Instinct' button = VCheckBox('Select movies', movie, selection, 3) if button = 'OK' then do call VMsgBox('Your selections', selection, 1) end VCLEARWINDOW ____________ PURPOSE Clears the contents of a window DEFINITION VCLEARWINDOW [ID] PARAMETERS [id] is the id of the window to clear. COMMENTS This function erases all graphics from a window, enabling you to start over with a new set of graphics com- mands. FUNCTION RESULT none Example: /* clear a window of all graphics */ call VClearWindow id 14 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 VCLOSEWINDOW ____________ PURPOSE Closes a window DEFINITION VCLOSEWINDOW [ID] PARAMETERS [id] is the id of the window you wish to close. COMMENTS The window must have been opened with a call to VOpenWindow. FUNCTION RESULT none Example: /* close a window */ call VCloseWindow id VCOLORBOX _________ PURPOSE Allows selection of foreground and background colors from a dialog DEFINITION VCOLORBOX [STEM] PARAMETERS [stem] is the name of a stem variable which holds the .fore and .back color values for the foreground and back- ground colors. COMMENTS The colors should be specified as one of 'BLACK', 'WHITE', 'RED', 'GREEN', 'BLUE', 'CYAN', 'YELLOW' or 'PINK'. FUNCTION RESULT 'OK' or 'CANCEL' Example: COMMAND REFERENCE 15 (C) COPYRIGHT IBM CORP. 1992 /* get new foreground and background colors for a window and set them */ color.fore = 'BLACK' color.back = 'WHITE' button = VColorBox color if button = 'OK' then do call VForeColor color.fore call VBackColor color.back end VDIALOGPOS __________ PURPOSE Controls the positioning of dialog windows on the screen DEFINITION VDIALOGPOS [X] [Y] PARAMETERS [x] and [y] are the center position to use for positioning subsequent dialog boxes on the screen. COMMENTS [x] and [y] should be integers between 0 and 100, specified in per- centage of the screen. FUNCTION RESULT none Example: /* position a message box in the center of the screen */ call VDialogPos 50, 50 msg.0 = 1 msg.1 = 'This box is in the center of the screen' call VMsgBox 'TEST', msg, 1 VDRAW _____ PURPOSE Draws pixels, markers, lines, polygons or splines using the current marker type, line attribute and fill style DEFINITION VDRAW [ID] [DRAWTYPE] [XSTEM] [YSTEM] [NUM] 16 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 PARAMETERS [id] is the id of the window to use for drawing the graphics. [drawtype] is a string, which must be one of 'PIXEL', 'MARKER', 'LINE', 'POLYGON' or 'SPLINE', depending on the graphic to be drawn. [xstem] and [ystem] are variable names for stem variables, which contain the coordinates to be used for drawing the graphics (ranging from .1 to .n). [num] is the number of data points specified in the [xstem] and [ystem] variables. COMMENTS The coordinates should range between 0 and 1000. The drawtypes and their effects are: o 'PIXEL' sets a pixel in the fore- ground color for each point o 'MARKER' draws a marker at each point using the current marker type o 'LINE' draws a polyline con- necting all of the points using the current line attribute o 'POLYGON' draws a closed figure using the coordinates as vertices, filling the figure with the current fill type o 'SPLINE' requires 4 data points, and draws a Bezier cubic spline that passes through points 1 and 4, using points 2 and 3 as control points. FUNCTION RESULT none Example: /* see the TESTDRAW.CMD procedure for examples of using this function */ COMMAND REFERENCE 17 (C) COPYRIGHT IBM CORP. 1992 VDRAWPARMS __________ PURPOSE Sets the current marker type, line attribute and fill style to use for subsequent graphics operations DEFINITION VDRAWPARMS [ID] [MARKERTYPE] [LINETYPE] [FILLTYPE] PARAMETERS [id] is the window id. [markertype] is the marker type to draw, [linetype] is the line attribute to use, and [filltype] is the fill style to use in subsequent VDraw oper- ations. COMMENTS 0 is the default for all 3 attri- butes, equal to a cross marker, a solid line, or an empty fill style. The other values and their corre- sponding meanings are shown in the example. FUNCTION RESULT none Example: 18 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 /* VDrawParms marker, line and fill values */ default = 0 /* marker types */ cross = 1 /* X */ plus = 2 /* + */ diamond = 3 /* &diamond. */ square = 4 /* [_] */ star6 = 5 /* 6 point star */ star8 = 6 /* 8 point star */ soliddiamond = 7 /* &DIAMOND. */ solidsquare = 8 /* &sqbul. */ soliddot = 9 /* . */ circle = 10 /* O */ /* line types */ solid = 0 /* ____ */ dot = 1 /* .... */ dash = 2 /* ---- */ dashdot = 3 /* -.-. */ dotdot = 4 /* .. .. */ longdash = 5 /* __ __ */ dashdotdot = 6 /* -..- */ /* set up fill types */ nofill = 0 /* */ solidfill = 1 /* &BOX. */ horz = 2 /* ===== */ vert = 3 /* ||||| */ leftdiag = 4 /* \\\\\ */ rightdiag = 5 /* ///// */ /* sample function call */ call VDrawParms diamond, dotdot, leftdiag VEXIT _____ PURPOSE Cleans up the current VREXX system resources DEFINITION VEXIT PARAMETERS none COMMAND REFERENCE 19 (C) COPYRIGHT IBM CORP. 1992 COMMENTS This function should be called after all VREXX function calls in the current REXX procedure are made. FUNCTION RESULT none Example: /* terminate VREXX */ call VExit VFILEBOX ________ PURPOSE Allows selection of a full pathname of a file from a dialog DEFINITION VFILEBOX [TITLE] [TEMPLATE] [STEM] PARAMETERS [title] is the string to use for the dialog titlebar. [template] is the pathname template that specifies the file types to display. [stem] is the name of a stem variable that contains the full pathname of the selected file. COMMENTS If the name of the [stem] variable is fname, the full pathname is returned in the REXX variable fname.vstring. FUNCTION RESULT 'OK' or 'CANCEL' Example: /* get a filename */ button = VFileBox('Pick a file', '*.dat', name) if button = 'OK' then do filename = name.vstring /* get size of file */ bytes = stream(filename, C, 'query size') end 20 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 VFONTBOX ________ PURPOSE Allows selection of the typeface and point size to use for text output DEFINITION VFONTBOX [STEM] PARAMETERS [stem] is the name of a stem vari- able, with [stem].type and [stem].size containing the selected font type and font point size returned from the dialog box. COMMENTS The point size must be a positive integer greater than zero. The font type must be one of the following strings: o 'SYSTEM' - standard system font o 'SYMBOL' - greek/math symbols o 'COUR' - Courier, Courier Bold, Courier Italic, Courier Bold Italic o 'COURB' o 'COURI' o 'COURBI' o 'HELV' - Helvetica, Helvetica Bold, Helvetica Italic, Helvetica Bold Italic o 'HELVB' o 'HELVI' o 'HELVBI' o 'TIME' - Times Roman, TR Bold, TR Italic, TR Bold Italic o 'TIMEB' o 'TIMEI' o 'TIMEBI' FUNCTION RESULT 'OK' or 'CANCEL' COMMAND REFERENCE 21 (C) COPYRIGHT IBM CORP. 1992 Example: /* let user pick a new font */ cur_font.type = 'SYSTEM' cur_font.size = 10 button = VFontBox(cur_font) if button = 'OK' then do call VSetFont id, cur_font.type, cur_font.size end VFORECOLOR __________ PURPOSE DEFINITION Sets the foreground color of a window VFORECOLOR [ID] [COLOR] PARAMETERS [id] is the window id and [color] is the new foreground color to use for the window. COMMENTS [color] must be specified as a string, in either upper, lower or mixed case, and must equal one of 'BLACK', 'WHITE', 'RED', 'GREEN', 'BLUE', 'CYAN', 'YELLOW' or 'PINK'. FUNCTION RESULT none Example: /* change a window foreground color to 'PINK' */ call VForeColor id, 'PINK' VGETVERSION ___________ PURPOSE Returns the current VREXX program version number DEFINITION VGETVERSION PARAMETERS none COMMENTS none 22 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 FUNCTION RESULT Returns the version number as major.minor Example: /* test version of VREXX */ ver = VGetVersion() if ver <> '2.1' then do msg.0 = 1 msg.1 = 'Wrong version of VREXX' call VMsgBox('Initialization Error', msg, 2) exit end VINIT _____ PURPOSE Initializes the VREXX functions and system resources DEFINITION VINIT PARAMETERS none COMMENTS This function must be called before calling any other VREXX functions. The VExit routine should be called at the end of the REXX procedure if VInit was called. FUNCTION RESULT Returns 'ERROR' if initialization was unsuccessful. Example: /* load and initialize VREXX (use the */ /* RxUtils function RxFuncAdd) */ call RxFuncAdd 'VInit', 'VREXX', 'VINIT' call VInit /* or */ call RxFuncAdd 'VInit', 'VREXX', 'VINIT' initcode = VInit() COMMAND REFERENCE 23 (C) COPYRIGHT IBM CORP. 1992 VINPUTBOX _________ PURPOSE Creates an entryfield dialog with prompt strings for entering numbers or strings DEFINITION VINPUTBOX [TITLE] [STEM] [WIDTH] [BUTTONS] PARAMETERS [title] is the string to use for the dialog titlebar. [stem] is the name of the stem variable containing the prompt strings to display in the dialog, and [width] if the width (in character units) of the entryfield. [buttons] is a number between 1 and 6 denoting the pushbuttons to display on the dialog. COMMENTS Up to 10 strings can be specified for a prompt, and all strings should be 80 characters or less in length. The [stem].vstring field may contain a default value for the entryfield on input, and holds the contents of the entryfield when the dialog is fin- ished. FUNCTION RESULT 'OK', 'CANCEL', 'YES' or 'NO', depending on the value of [buttons] Example: /* get the user's name */ prompt.0 = 4 prompt.1 = 'Please enter your name' prompt.2 = 'Enter it first name last, last name first' prompt.3 = '' prompt.4 = 'Leave out your middle initial' prompt.vstring = 'Doe John' button = VInputBox('Verify info', prompt, 25, 2) if button = 'OK' then do name = prompt.vstring end 24 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 VLISTBOX ________ PURPOSE Creates a listbox dialog for selecting 1 item from a large list DEFINITION VLISTBOX [TITLE] [STEM] [WIDTH] [HEIGHT] [BUTTONS] PARAMETERS [title] is the string to use for the dialog titlebar. [stem] is the name of the stem variable which contains the number of items and text of each item to be placed in the listbox. [width] and [height] are the dimen- sions of the listbox in character units, and [buttons] is a number between 1 and 6 denoting the type of pushbuttons to display on the dialog. COMMENTS Any number of strings may be passed to this function. On input, [stem].vstring may contain the default list item to be selected when the dialog is created. If a default is not specified, the first item becomes the default selection. On output, [stem].vstring contains the listbox item selected by the user. FUNCTION RESULT 'OK', 'CANCEL', 'YES' or 'NO', depending on the value of [buttons] Example: /* select 1 item from a listbox */ clone.0 = 8 clone.1 = 'Northgate' clone.2 = 'Everex' clone.3 = 'Gateway' clone.4 = 'PC Brand' clone.5 = 'AST Research' clone.6 = 'Tandy' clone.7 = 'Swan' clone.8 = 'Commodore' call VListBox 'Pick an IBM PC clone', clone, 10, 5, 1 selection = clone.vstring COMMAND REFERENCE 25 (C) COPYRIGHT IBM CORP. 1992 VMSGBOX _______ PURPOSE Creates a message box for displaying from 1 to 10 message strings DEFINITION VMSGBOX [TITLE] [STEM] [BUTTONS] PARAMETERS [title] is the string to use for the dialog titlebar. [stem] is the name of the stem variable which contains the number of message lines text of each line to be displayed. [buttons] is a number between 1 and 6 denoting the type of pushbuttons to display on the dialog. COMMENTS Up to 10 lines of 80 characters each may be displayed. FUNCTION RESULT 'OK', 'CANCEL', 'YES' or 'NO', depending on the value of [buttons] Example: /* display a message box */ mbox.0 = 4 mbox.1 = 'VREXX Version 1.0' mbox.2 = '' mbox.3 = 'Written by R.B. Lam' mbox.4 = '(C) Copyright IBM Corp. 1992' call VMsgBox 'VREXX Info', mbox, 1 VMULTBOX ________ PURPOSE Creates a multiple entryfield dialog, with 1 to 10 entryfields and a prompt string for each field, with optional echoing of input characters (e.g. for entering passwords). DEFINITION VMULTBOX [TITLE] [PROMPT] [WIDTH] [HIDE] [RETURN] [BUTTONS] PARAMETERS [title] is the string to use for the dialog titlebar. [prompt] is the name of the stem variable containing the prompt strings to display (1 for each entryfield) in the dialog, where 26 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 [prompt].0 is the number of entryfields. [width] is an array of widths (in character units) to use, one for each entryfield. [hide] is an array where the elements are 0 or 1, depending on whether or not you wish to echo (0) or not echo (1) the characters as they are typed into the entryfield. This is useful for entering passwords (see the example below). [return] is the array of return strings, which represent what was typed into each entryfield. [return] may be initialized with default strings for each entryfield before this function is called. [buttons] is a number between 1 and 6 denoting the pushbuttons to display on the dialog. COMMENTS Up to 10 strings can be specified for a prompt, and all strings should be 80 characters or less in length. FUNCTION RESULT 'OK', 'CANCEL', 'YES' or 'NO', depending on the value of [buttons] Example: COMMAND REFERENCE 27 (C) COPYRIGHT IBM CORP. 1992 /* get system, userid, and password */ /* here are the prompts */ p.0 = 3 p.1 = 'System name' p.2 = 'User ID' p.3 = 'Password' /* here are the widths for each entryfield */ w.0 = p.0 w.1 = 20 w.2 = 10 w.3 = 8 /* don't echo the password field */ h.0 = p.0 h.1 = 0 h.2 = 0 h.3 = 1 /* default strings */ r.0 = p.0 r.1 = 'IBMVM' r.2 = 'johndoe' r.3 = '' button = VMultBox('Logon Panel', p, w, h, r, 2) if button = 'OK' then do call VMsgBox 'Logon Info', r, 1 end VOPENWINDOW ___________ PURPOSE Opens a new window DEFINITION VOPENWINDOW [TITLE] [COLOR] [STEM] PARAMETERS [title] is the string to use for the window titlebar. [color] is the background color to use for the window. [stem] is the name of a stem variable which contains the position and size of the window when it it created. There are 4 fields, [stem].left, [stem].right, 28 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 [stem].bottom and [stem].top, which must be specified. COMMENTS The left, right, top and bottom fields should be integer numbers representing a percentage of the screen, ranging between 0 and 100. FUNCTION RESULT Returns an integer id number used to refer to the new window in subsequent function calls Example: /* put up a new window in the upper left quadrant of the screen, with a background of white */ pos.left = 0 pos.bottom = 0 pos.right = 50 pos.top = 100 color = 'WHITE' new_id = VOpenWindow('An example window', color, pos) VRADIOBOX _________ PURPOSE Creates a radiobox dialog for selecting 1 item from a list DEFINITION VRADIOBOX [TITLE] [STEM] [BUTTONS] PARAMETERS [title] is the string to use for the dialog titlebar. [stem] is the name of the stem variable which contains the number of items and text of each item to be placed in the dialog. [buttons] is a number between 1 and 6 denoting the type of pushbuttons to display on the dialog. COMMENTS A maximum of 10 items may be passed to this function. On input, [stem].vstring can specify the default radio button to be pressed when the dialog is created. If none is specified, the first item becomes the default. On output, [stem].vstring contains the item selected by the user. COMMAND REFERENCE 29 (C) COPYRIGHT IBM CORP. 1992 FUNCTION RESULT 'OK', 'CANCEL', 'YES' or 'NO', depending on the value of [buttons] Example: /* have user select a font by pushing a radiobutton */ font.0 = 7 font.1 = 'Garamond' font.2 = 'Helvetica' font.3 = 'Times Italic' font.4 = 'Weather' font.5 = 'Math' font.6 = 'Orator' font.7 = 'Default' call VRadioBox 'Select a font', font, 1 msg.0 = 1 msg.1 = 'You selected' font.vstring call VMsgBox 'Selection', msg, 1 VRESIZE _______ PURPOSE Resizes and repositions a window on the screen DEFINITION VRESIZE [ID] [STEM] PARAMETERS [id] is the id of the window to move and size. [stem] is the name of a stem variable containing the new coordinates of the window in per- centage of screen units. The size and position are given in [stem].left, [stem].right, [stem].bottom and [stem].top. COMMENTS The left, bottom, right and top coor- dinates should be integers between 0 and 100. FUNCTION RESULT none Example: 30 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 /* create a small window in the center of the screen, then move it to the lower right quadrant and increase its size */ pos.left = 40 pos.bottom = 40 pos.right = 60 pos.top = 60 id = VOpenWindow('Small window', 'WHITE', pos) pos.left = 50 pos.bottom = 0 pos.right = 100 pos.top = 50 call VResize id, pos VSAY ____ PURPOSE Draws a text string in the current font on a window DEFINITION VSAY [ID] [X] [Y] [TEXT] PARAMETERS [id] is the id of the window where the text will be drawn. [x] and [y] are the starting coordinates for the text, expressed as integers between 0 and 1000. [text] is the text string to draw. COMMENTS The text will be drawn in the current font and the current color. FUNCTION RESULT none Example: /* draw a set of text strings */ str.1 = 'You will need: str.2 = '* C Compiler' str.3 = '* OS/2 Programmer's Reference' x = 50 y = 900 do i = 1 to 3 call VSay id, x, y, str.i y = y - 100 end COMMAND REFERENCE 31 (C) COPYRIGHT IBM CORP. 1992 VSETFONT ________ PURPOSE Sets the current font to use for drawing text DEFINITION VSETFONT [ID] [TYPE] [SIZE] PARAMETERS [id] is the id of the window. [type] is a string representing the typeface requested, and [size] is the point size for the requested font. COMMENTS The point size must be a positive integer greater than zero. The typeface must be one of the following strings: o 'SYSTEM' - standard system font o 'SYMBOL' - greek/math symbols o 'COUR' - Courier, Courier Bold, Courier Italic, Courier Bold Italic o 'COURB' o 'COURI' o 'COURBI' o 'HELV' - Helvetica, Helvetica Bold, Helvetica Italic, Helvetica Bold Italic o 'HELVB' o 'HELVI' o 'HELVBI' o 'TIME' - Times Roman, TR Bold, TR Italic, TR Bold Italic o 'TIMEB' o 'TIMEI' o 'TIMEBI' FUNCTION RESULT none 32 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 Example: /* set the font to 20 point Helvetica Bold */ call VSetFont id, 'HELVB', 20 VSETTITLE _________ PURPOSE Sets the titlebar of a window to a specified string DEFINITION VSETTITLE [ID] [TITLE] PARAMETERS [id] is the id of the window, and [title] is the new string to use for the window's titlebar. COMMENTS FUNCTION RESULT none Example: /* open a window with one title, then change it */ pos.left = 25 pos.bottom = 25 pos.right = 75 pos.top = 75 id = VOpenWindow('Old Window Title', 'WHITE', pos) call VSetTitle id, 'New Window Title' VTABLEBOX _________ PURPOSE Constructs a table dialog as a listbox, with programmable column widths DEFINITION VTABLEBOX [TITLE] [STEM] [SELECTION] [WIDTH] [HEIGHT] [BUTTONS] PARAMETERS [title] is the string to use for the dialog titlebar. [stem] is the name of the stem variable which contains the number of rows and columns, column widths, column labels and text of each item to be placed in a table- COMMAND REFERENCE 33 (C) COPYRIGHT IBM CORP. 1992 style listbox. [selection] contains the number of the table row to be selected when the dialog is created. [width] and [height] are the dimen- sions of the table in character units, and [buttons] is a number between 1 and 6 denoting the type of pushbuttons to display on the dialog. COMMENTS Any number of strings may be passed to this function, all with a maximum length of 80. The number of columns in the table is limited to 10. The number of rows and columns in the table are specified with the [stem].rows and [stem].cols vari- ables. The column widths are speci- fied in [stem].width.1, [stem].width.2, etc. The column labels are specified in [stem].label.1, [stem].label.2, etc. Finally, the entries for the table are stored in row-column order, with [stem].1.1 being the entry for row 1, column 1, [stem].1.2 being the entry for row 1, column 2, etc. On output, [stem].vstring contains the table row number selected by the user. FUNCTION RESULT 'OK', 'CANCEL', 'YES' or 'NO', depending on the value of [buttons] Example: 34 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 /* display a table of data */ table.rows = 50 table.cols = 3 table.label.1 = 'Name' table.label.2 = 'Division' table.label.3 = 'Serial Number' table.width.1 = 20 table.width.2 = 10 table.width.3 = 15 table.1.1 = 'John Doe' table.1.2 = 10 table.1.3 = 'CR1034' table.2.1 = 'Mary Jane' table.2.2 = 44 table.2.3 = 'TX1143' /* etc. */ table.50.1 = 'Joe Programmer' table.50.2 = 11 table.50.3 = '001101' call VTableBox 'Pick a row from the table', table, 1, 50, 15, 1 selection_number = table.vstring COMMAND REFERENCE 35 (C) COPYRIGHT IBM CORP. 1992 36 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 EXAMPLE VREXX PROCEDURES ________________________ This section provides several example REXX procedures which give you some ideas about how to incorporate the VREXX functions in your own REXX programs. The following examples are presented: TESTWIN.CMD Shows creation and manipulation of PM windows, text display, etc. TESTDLGS.CMD Demonstrates the use of the standard dialog functions, including filename and list item selections. TESTDRAW.CMD Draws some arbitrary graphics to PM windows. TESTWIN.CMD ___________ EXAMPLE VREXX PROCEDURES 37 (C) COPYRIGHT IBM CORP. 1992 /* TESTWIN.CMD */ '@echo off' call RxFuncAdd 'VInit', 'VREXX', 'VINIT' initcode = VInit() if initcode = 'ERROR' then signal CLEANUP signal on failure name CLEANUP signal on halt name CLEANUP signal on syntax name CLEANUP /* display the version number of VREXX */ ver = VGetVersion() msg.0 = 1 msg.1 = 'VREXX version # ' ver call VMsgBox 'TESTWIN.CMD', msg, 1 /* open a window and draw some text */ win.left = 20 win.right = 70 win.top = 80 win.bottom = 40 id = VOpenWindow('My VREXX Window', 'RED', win) text.1 = 'This is a VREXX window, created with a call to VOpenWindow.' text.2 = 'The window currently has a title = My VREXX Window, and it' text.3 = 'has a red background, which can be changed by a call to the' text.4 = 'VBackColor function. The font is 12 point Times Roman.' call VForeColor id, 'WHITE' call VSetFont id, 'TIME', 12 x = 10 y = 900 do i = 1 to 4 call VSay id, x, y, text.i y = y - 50 end /* now display a message box */ msg.0 = 2 msg.1 = 'Press OK to change the window title, the' msg.2 = 'window background color, and the font...' call VMsgBox 'TESTWIN.CMD', msg, 1 /* change the title and background color */ call VSetTitle id, 'A New Title!' text.2 = 'The new window title = A New Title!, and it' call VClearWindow id 38 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 call VBackColor id, 'BLUE' text.3 = 'has a blue background, which can be changed by a call to the' call VForeColor id, 'WHITE' /* change the font */ call VSetFont id, 'HELVB', 15 text.4 = 'VBackColor function. The font is now 15 point Helvetica Bold.' /* redraw the text in the window */ x = 10 y = 900 do i = 1 to 4 call VSay id, x, y, text.i y = y - 60 end /* now move and resize the window */ msg.0 = 3 msg.1 = 'Now the window will be cleared and moved around' msg.2 = 'and resized using the VResize function. Press' msg.3 = 'OK to continue...' call VMsgBox 'TESTWIN.CMD', msg, 1 call VClearWindow id win.left = 5 win.right = 15 win.bottom = 80 win.top = 95 call VResize id, win do 8 win.left = win.left + 5 win.right = win.right + 10 win.top = win.top - 5 win.bottom = win.bottom - 10 call VResize id, win end /* put up a message box */ msg.0 = 1 msg.1 = 'Press Cancel to end...' call VMsgBox 'TESTWIN.CMD', msg, 2 call VCloseWindow id /* end of CMD file */ CLEANUP: call VExit EXAMPLE VREXX PROCEDURES 39 (C) COPYRIGHT IBM CORP. 1992 exit TESTDLGS.CMD ____________ 40 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 /* TESTDLGS.CMD */ '@echo off' call RxFuncAdd 'VInit', 'VREXX', 'VINIT' initcode = VInit() if initcode = 'ERROR' then signal CLEANUP signal on failure name CLEANUP signal on halt name CLEANUP signal on syntax name CLEANUP /* example VMsgBox call */ msg.0 = 4 msg.1 = 'This is a 4 line message box dialog.' msg.2 = 'This is the line 2. Line 3 is blank.' msg.3 = '' msg.4 = 'Press YES or NO to continue...' call VDialogPos 50, 50 rb = VMsgBox('TESTDLGS.CMD', msg, 6) if rb = 'YES' then do msg.0 = 1 msg.1 = 'You pressed YES' end else do msg.0 = 1 msg.1 = 'You pressed NO' end call VMsgBox 'VMsgBox Result', msg, 1 /* VInputBox example */ prompt.0 = 2 prompt.1 = 'Enter your name' prompt.2 = '(Last name first, First name last)' prompt.vstring = 'Doe John' button = VInputBox('VInputBox example', prompt, 20, 3) if button = 'OK' then do msg.0 = 3 msg.1 = 'You entered the name' msg.2 = prompt.vstring msg.3 = 'and you pressed OK' end else do msg.0 = 1 msg.1 = 'You pressed CANCEL' end call VMsgBox 'VInputBox Result', msg, 1 /* VMultBox example */ prompt.0 = 2 /* 2 prompt lines */ EXAMPLE VREXX PROCEDURES 41 (C) COPYRIGHT IBM CORP. 1992 prompt.1 = 'User ID' prompt.2 = 'Password' width.0 = 2 width.1 = 10 /* widths in character units */ width.2 = 8 /* for both entryfields */ hide.0 = 2 hide.1 = 0 /* echo the User ID input */ hide.2 = 1 /* don't echo the Password */ answer.0 = 2 answer.1 = '' /* these are the default strings */ answer.2 = '' /* which will contain the input */ button = VMultBox('VMultBox example', prompt, width, hide, answer, 3) if button = 'OK' then do call VMsgBox 'VMultBox Result', answer, 1 end else do msg.0 = 1 msg.1 = 'You pressed CANCEL' call VMsgBox 'VMultBox Result', msg, 1 end /* VListBox example */ list.0 = 17 list.1 = 'OS/2 2.0 Standard Edition' list.2 = 'OS/2 2.0 Extended Edition' list.3 = 'MMPM/2 Multimedia Extensions' list.4 = 'Windows 3.0 Multimedia Extensions' list.5 = 'Adobe Type Manager' list.6 = 'C-Set/2 Compiler' list.7 = 'OS/2 2.0 Programmer Toolkit' list.8 = 'WorkFrame/2' list.9 = 'Lan Server' list.10 = 'Lan Requester' list.11 = 'TCP/IP' list.12 = 'PMGlobe Demo Program' list.13 = 'ASYNC Terminal Emulator' list.14 = 'IPFC Preprocessor' list.15 = 'VREXX' list.16 = 'OS/2 2.0 Corrective Service' list.17 = 'IBM SAA CUA Controls Library' list.vstring = list.15 /* default selection */ call VDialogPos 25, 25 call VListBox 'Select a Product and Press YES', list, 35, 8, 4 msg.0 = 1 msg.1 = list.vstring call VMsgBox 'VListBox Selection', msg, 1 42 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 /* test of VTableBox */ table.rows = 5 table.cols = 3 table.label.1 = 'Name' table.label.2 = 'Division' table.label.3 = 'Serial Number' table.width.1 = 25 table.width.2 = 10 table.width.3 = 15 table.1.1 = 'Mary Jacobs' table.1.2 = 20 table.1.3 = '243611' table.2.1 = 'Joe Johnson' table.2.2 = 19 table.2.3 = '837462' table.3.1 = 'Henry Hill' table.3.2 = 79 table.3.3 = '832628' table.4.1 = 'Ruby Potts' table.4.2 = 11 table.4.3 = '937567' table.5.1 = 'Gary Williams' table.5.2 = 22 table.5.3 = '086203' button = VTableBox('Employee List', table, 1, 40, 10, 1) msg.0 = 2 msg.1 = 'Button pressed was' button msg.2 = 'Selection number =' table.vstring call VMsgBox 'VTableBox Result', msg, 1 /* VRadioBox example */ list.0 = 10 call VRadioBox 'Select 1 item', list, 1 msg.0 = 1 msg.1 = list.vstring call VMsgBox 'Selected item', msg, 1 /* test of VCheckBox */ list.0 = 10 sel.0 = 2 sel.1 = list.2 sel.2 = list.3 EXAMPLE VREXX PROCEDURES 43 (C) COPYRIGHT IBM CORP. 1992 call VCheckBox 'Select items', list, sel, 1 if sel.0 > 0 then do call VMsgBox 'Selected items', sel, 1 end /* VColorBox example */ call VDialogPos 75, 75 color.fore = 'YELLOW' color.back = 'BLUE' call VColorBox color msg.0 = 2 msg.1 = 'Foreground color is' color.fore msg.2 = 'Background color is' color.back call VMsgBox 'Color selections', msg, 1 /* VFontBox example */ font.type = 'HELVB' font.size = 25 call VFontBox font msg.0 = 2 msg.1 = 'Font type is' font.type msg.2 = 'Font size is' font.size call VMsgBox 'Font selection', msg, 1 /* test of VFileBox */ call VDialogPos 10, 50 button = VFileBox('Pick a file...', 'c:\os2\*.exe', 'file') msg.0 = 3 msg.1 = 'File name picked was' msg.2 = file.vstring msg.3 = 'Button pressed was' button call VMsgBox 'VFileBox Result', msg, 1 /* end of CMD file */ CLEANUP: call VExit exit TESTDRAW.CMD ____________ 44 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 /* TESTDRAW.CMD */ '@echo off' call RxFuncAdd 'VInit', 'VREXX', 'VINIT' initcode = VInit() if initcode = 'ERROR' then signal CLEANUP signal on failure name CLEANUP signal on halt name CLEANUP signal on syntax name CLEANUP /* set up marker types */ default = 0 cross = 1 plus = 2 diamond = 3 square = 4 star6 = 5 star8 = 6 soliddiamond = 7 solidsquare = 8 soliddot = 9 circle = 10 /* set up line types */ solid = 0 dot = 1 dash = 2 dashdot = 3 dotdot = 4 longdash = 5 dashdotdot = 6 /* set up fill types */ nofill = 0 solidfill = 1 horz = 2 vert = 3 leftdiag = 4 rightdiag = 5 /* create 2 windows for drawing some graphics */ win1.left = 15 win1.bottom = 30 win1.right = 55 win1.top = 70 id1 = VOpenWindow('TESTDRAW.CMD Graphics Window 1', 'WHITE', win1) win2.left = 60 win2.bottom = 10 EXAMPLE VREXX PROCEDURES 45 (C) COPYRIGHT IBM CORP. 1992 win2.right = 95 win2.top = 40 id2 = VOpenWindow('TESTDRAW.CMD Graphics Window 2', 'BLACK', win2) /* draw a line graph in window 1 */ call VForeColor id1, 'BLACK' x.1 = 100 y.1 = 600 x.2 = 400 y.2 = 600 call VDraw id1, 'LINE', x, y, 2 /* x axis */ x.1 = 100 y.1 = 600 x.2 = 100 y.2 = 900 call VDraw id1, 'LINE', x, y, 2 /* y axis */ a = -0.000222 /* construct a quadratic polynomial */ b = 0.861 /* Y = a*X*X + b*X + c */ c = 566 x.1 = 100 y.1 = a*100*100 + b*100 + c do i = 2 to 5 j = i - 1 x.i = x.j + 75 y.i = a * x.i * x.i + b * x.i + c end call VDrawParms id1, soliddiamond, dashdot, default call VDraw id1, 'MARKER', x, y, 5 call VDraw id1, 'LINE', x, y, 5 /* draw a set of arcs in window 2 */ call VForeColor id2, 'YELLOW' cx = 100 cy = 200 radius = 20 angle1 = 0 angle2 = 60 do i = 1 to 6 call VArc id2, cx, cy, radius, angle1, angle2 radius = radius + 20 cx = cx + 150 angle2 = angle2 + 60 end /* draw a bar graph in window 1 */ 46 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 call VDrawParms id1, default, default, default x.1 = 550 y.1 = 600 x.2 = 950 y.2 = 600 call VDraw id1, 'LINE', x, y, 2 /* x axis */ x.1 = 550 y.1 = 600 x.2 = 550 y.2 = 900 call VDraw id1, 'LINE', x, y, 2 /* y axis */ px.1 = 600 py.1 = 600 px.2 = 600 py.2 = 650 px.3 = 650 py.3 = 650 px.4 = 650 py.4 = 600 call VForeColor id1, 'RED' do i = 1 to 6 /* draw bar with a new fill type */ call VDrawParms id1, default, solid, i-1 call VDraw id1, 'POLYGON', px, py, 4 call VDraw id1, 'LINE', px, py, 4 px.1 = px.1 + 50 px.2 = px.1 px.3 = px.3 + 50 px.4 = px.3 py.2 = py.2 + 45 py.3 = py.2 end /* draw some lines of different types in window 2 */ color.1 = 'WHITE' /* set up color array */ color.2 = 'RED' color.3 = 'GREEN' color.4 = 'BLUE' color.5 = 'CYAN' color.6 = 'YELLOW' color.7 = 'PINK' x.1 = 200 y.1 = 950 x.2 = 800 y.2 = 950 do i = 1 to 7 EXAMPLE VREXX PROCEDURES 47 (C) COPYRIGHT IBM CORP. 1992 call VForeColor id2, color.i call VDrawParms id2, default, i-1, default call VDraw id2, 'LINE', x, y, 2 y.1 = y.1 - 100 y.2 = y.1 end /* set up a spline in window 1, drawing the control points */ /* of the spline as markers, and labelling them with text */ sx.1 = 350 sy.1 = 450 sx.2 = 700 sy.2 = 200 sx.3 = 200 sy.3 = 125 sx.4 = 650 sy.4 = 425 call VForeColor id1, 'BLUE' call VDrawParms id1, soliddot, default, default call VDraw id1, 'MARKER', sx, sy, 4 call VDraw id1, 'SPLINE', sx, sy, 4 call VForeColor id1, 'GREEN' call VSetFont id1, 'HELVB', 12 call VSay id1, 300, 75, 'Spline Control Points' /* put up a message box */ msg.0 = 1 msg.1 = 'Press OK to close the windows' call VMsgBox 'TESTDRAW.CMD', msg, 1 call VCloseWindow id1 call VCloseWindow id2 /* end of CMD file */ CLEANUP: call VExit exit 48 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 TECHNICAL DATA ______________ VREXX packages its external functions in the dynamic link library VREXX.DLL. Thus, REXX procedures can load and call the VInit function, which sets up system resources and initializes the other VREXX external functions for access by REXX. The VExit function then frees up these system resources before the REXX procedure exits. When VInit is called, it starts a copy of the new VREXX.EXE program and sets up a shared memory block to pass variables between the DLL and the program. The program creates an invisible control window, and waits for the VREXX external functions to post messages to the window. The control window then creates the windows, draws graphics, processes dialogs, etc. Variables are shared between the DLL and the REXX envi- ronment through the shared variable pool. Stem variables are used to facilitate the use of REXX arrays by the user. Shared memory blocks and semaphores are used to pass data and synchronize between the DLL and the control window. TECHNICAL DATA 49 (C) COPYRIGHT IBM CORP. 1992 50 VREXX: Visual REXX for Presentation Manager (C) COPYRIGHT IBM CORP. 1992 RELEASE NOTES AND COMMENTS __________________________ Version 1.0 (9/9/92) is the initial release. RELEASE NOTES AND COMMENTS 51