Contributed by: Doug Rickman, Global Hydrology and Climate Center, MSFC, NASA
This is aimed at intermediate REXX users.
APMT is very useful for testing and control of existing PM programs. This example shows how to control PMView. The task is to read in a large image, reduce its size recursively and then save the result to a new file.
/* */
signal on Halt
signal on NotReady
if rxfuncquery('rexxlibregister') then do /* this will start rexxlib */
call rxfuncadd 'rexxlibregister', 'rexxlib', 'rexxlibregister'
call rexxlibregister
end
if rxfuncquery('sysloadfuncs') then do /* this will start rexxutil */
CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
CALL SysLoadFuncs
end
parse arg in
in=strip(in)
parse value parsefn(in) with drive path filename extension
out=Drive':'path||filename'_reduced.'||extension2
backup=in||'backup'
if in='' | in='?' | in='-?' | in='/?' then call Help
if dosisfile(in)<>1 then do
say 'The input file: ' in' is not a valid file.'
exit
end /* do */
rc=dosdel(backup)
rc=doscopy(in,backup)
address cmd 'start G:\GRAPHICS\PMVIEW\PMVIEW.EXE' in
call apmt_init
say 'Loading image...'
rc=Wait("5000")
/* Get the PMView Window */
rc = SELECT_WINDOW(filename'.'extension)
if rc=4 then call ErrorCode Select_Window 4
rc = QUERY_TITLE("title")
say "The selected window's title is " title
/* Get the File:Recall list and recall first item. */
rc = MENU_QUERY_ALL("~File","Recall","Options2")
if rc = 0 then do i = 1 to options2.0
/* say 'Option choice 'i 'is :'options2.i */
end
rc=Menu_Select('File','Recall',Options2.1)
say 'Now displaying the image.'
rc=Wait("3000")
do 5
call ReduceSize
end
rc=Menu_Select('File','Save')
rc=Menu_Select('File','Exit')
rc = END_SESSION()
return 1
APMT_INIT:
signal on error name errorexit
call rxfuncadd 'APMTLoadFuncs', 'apmtext', 'APMTLoadFuncs'
call APMTLoadFuncs;
rc = INIT_SESSION();
if rc \= 0
then do
say apmtmsg
say "I'm dead."
exit
end
signal on halt name APMT_CLOSE
return
/* --------------------------------------------------------------------------*/
/* --- begin subroutine - Help: -------------*/
Help:
rc= charout(,'1b'x||'[31;7m'||'Program Name:'||'1b'x||'[0m'||'0d0a'x)
say 'General purpose'
say ''
rc= charout(,'1b'x||'[33;1m'||'usage:'||'1b'x||'[0m')
say ' Program name, arg1 arg2 ....'
say ''
rc= charout(,'1b'x||'[33;1m'||'where:'||'1b'x||'[0m')
say ' arg1 = explaination'
say ''
rc= charout(,'1b'x||'[33;1m'||'Exam: '||'1b'x||'[0m')
say ' Program name arg1 arg2 '
say ''
rc= charout(,'1b'x||'[33;1m'||'notes:'||'1b'x||'[0m')
say ' Notes about program function'
say ''
say ''
say 'Doug Rickman ,1998'
exit
return
/* --- end subroutine - Help: -------------*/
/* --------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------*/
/* --- begin subroutine - Halt: -------------*/
Halt:
say 'This is a graceful exit from a Cntl-C'
exit
/* --- end subroutine - Halt: -------------*/
/* --------------------------------------------------------------------------*/
/* --- begin subroutine - NotReady: -------------*/
NotReady:
say 'It would seem that you are pointing at non-existant data. Oops. Bye!'
exit
/* --- end subroutine - NotReady: -------------*/
/* --------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------*/
/* --- begin subroutine - ReduceSize: -------------*/
ReduceSize:
/* Reduce file size. */
/* Get the current window's title. */
rc = QUERY_TITLE("Title")
/* Get the Transform:Size dialog. */
rc=Menu_Select('Transform','Size')
rc=Wait("500")
rc = SELECT_DialogWINDOW("*")
do 14
rc = SPINBUTTON_SPINDOWN("1")
end
rc=Wait("2000")
rc=PushButton_Click('OK','1')
say 'rc='rc
rc=Wait("6000")
/*Restore selection to the main window. */
rc = SELECT_WINDOW(Title)
return 1
/* --- end subroutine - ReduceSize: -------------*/
/* --------------------------------------------------------------------------*/
ErrorCode:
procedure
parse arg source codenumber
select
when codenumber=4 then do
say '"Error doing 'source'"'
say 'Unable to find the object specified.'
end
otherwise say "A new error. Will wonders never cease!"
end /* select */
exit
end
/* Code fragements */
/* To find the titles for the first 10 windows and list to screen. */
do i=1 to 10
rc = SELECT_WINDOW("*",,i)
rc = QUERY_TITLE("title")
say "The selected window's title is " title
end /* do */
/* Look at the text of the first SPINBUTTON */
rc = SPINBUTTON_QUERY_TEXT("1", "txt")
say 'rc='rc
say 'txt =' txt
/* How many checkboxes? */
rc = CHECKBOX_QUERY_ALL( "cbox")
say "number of checkboxes: " cbox.0
do i = 1 to cbox.0
say 'checkbox no 'i 'is: 'cbox.i
end
/* How many pushbuttons? */
rc = PUSHBUTTON_QUERY_ALL( "buttons")
say "number of pushbuttons: " buttons.0
do i = 1 to buttons.0
say 'button no 'i 'is: 'buttons.i
end
/* How many radiobuttons? Note this is not documented!!!! */
rc = SPINBUTTON_HOW_MANY("button")
say "number of spinbuttons: " button