Structure of a Rexx/Tk program

DESCRIPTION

This manual entry describes the typical structure of a Rexx/Tk program and also provides information on using the Rexx/Tk functions.

A typical Rexx/Tk program will look like the following simple program:

/**/
Call RxFuncAdd 'TkLoadFuncs', 'rexxtk', 'TkLoadFuncs'
Call TkLoadFuncs

Call CreateWindow

/* 
 * This is a typical dispatch loop if you set the "rexx"
 * options in the widgets to be a name of a subroutine that
 * you write (like below). 
 */
Do Forever
   /* 
    * TkWait returns whatever you typed as the value of the
    * "rexx" option for whatever control is pushed, moved,
    * chosen, etc 
    */
   Interpret 'Call' TkWait()
End
/*
 * Normally you never get here, as the QuitProgram procedure is
 * called when the top level window is closed.
 */
/*
 * Always call TKDropFuncs at the end of the program, particularly
 * under OS/2, otherwise you will be left with the created windows
 * and no way to close them!
 */
Call TkDropFuncs
Return 0

CreateWindow:
/* 
 * make a menu that will be our main window menubar
 */
menubar = TkMenu('.m1')
If rc \= 0 Then Call Abort
/* 
 * Add a File menu to the menubar.  The file menu will 'cascade' off of the menu bar 
 */
menu = TkMenu(menubar'.m1','-tearoff', 0)
If tkrc \= 0 Then Call Abort
label = 'File'
Call TkAdd menubar, 'cascade', 'label', 'menu',
If tkrc \= 0 Then Call Abort
/* 
 * now add items to the File menu; just a Quit for now
 */
Call TkAdd menu, 'command', '-label', 'Quit', '-rexx', 'QuitProgram'
If tkrc \= 0 Then Call Abort
/* 
 * attach the menubar to the main window 
 */
Call TkConfig '.', '-menu', menubar
If tkrc \= 0 Then Call Abort

Return 0

Abort:
Say 'Error in program:' TkError()
/*
 * Always call TKDropFuncs at the end of the program, particularly
 * under OS/2, otherwise you will be left with the created windows
 * and no way to close them!
 */
Call TkDropFuncs
Exit

QuitProgram: Procedure
Say 'Exiting from sample...'
/*
 * Always call TKDropFuncs at the end of the program, particularly
 * under OS/2, otherwise you will be left with the created windows
 * and no way to close them!
 */
Call TkDropFuncs
Exit

Some usage notes

Some general design notes

In general, the names of the Rexx/Tk functions match the names of the Tk commands with the same functionality.
eg Tk: menu Rexx/Tk: TkMenu
Where a Tk command has sub-commands; and most do, the equivalent Rexx/Tk function will be named as the Tk command and the Tk sub-command. eg. Tk: menu post Rexx/Tk: TkMenuPost

Where a Tk sub-command is common between multiple Tk commands; like configure, Rexx/Tk defines a common function; TkConfig (yes its an abbreviation!)

Where a Tk widget allows the creation of another object type within that widget, the Rexx/Tk function will not use the full Tk sub-command strings
eg. canvas create oval Rexx/Tk: TkCanvasOval