Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Need sample program

9 views
Skip to first unread message

globaloney

unread,
Jul 19, 2008, 12:35:56 AM7/19/08
to
Hello.
I have had 20 +years working with Rexx on a mainframe but I am new to
working on a pc.
I have oorexx installed on my pc running Windows Vista OS. I need a
sample program to get me started.

Could someone provide a sample list of commands to open a file on my
pc, read each line
and write each line to an output file?

Also how do you debug a rexx.exe?, When I run on that is in error the
MS window closes
before I see what the error was. Thanks in advance.


Nitro

unread,
Jul 19, 2008, 10:40:03 AM7/19/08
to

Here is an old file I had around (cut and pasted below). Modifies lines in a
file based on a simple pos search on each line.
ASCII/text file.
No waranty on how it will work for you.
This was written for OS/2 but should run unchanged in windows.

For debug you can add the trace command. Most of my rexx has been simple
scripts so Say and Trace have been enough.
From the rexx docs:
TRACE ?R
/* Interactive debugging is switched on if it was off, */
/* and tracing results of expressions begins. */

You can switch off interactive debugging in several ways:
* Entering TRACE O turns off all tracing.
* Entering TRACE with no options restores the defaults--it turns off
interactive debugging but continues tracing with TRACE Normal (which traces
any failing command after execution).
* Entering TRACE ? turns off interactive debugging and continues
tracing with the current option.
* Entering a TRACE instruction with a ? prefix before the option
turns off interactive debugging and continues tracing with the new option.


Now that IBM has opensourced Rexx you can get info here
http://www.oorexx.org/
http://www.oorexx.org/docs.html

Take care,
Bart


cut and paste to a filename of your choice ".cmd" ie "myscript.cmd"
run as follows:

c>rexx myscript.cmd mydatafile.dat

------------- Cut ------------
/* REXX EXEC */
'@Echo off'
parse arg filename

fname = filename'.new' /* create new file name for output, If it exists
we will append to it. */

say 'input file = "'filename'"'
say 'output file = "'fname'"'

modifiedLines = 0
totalLines = 0

input=linein(filename)

Do while lines(filename) > 0
totalLines = totalLines + 1

pos1 = lastpos('Fixme', input)

if pos1 \= 0 then
Do
output = left(input, pos1-1)'Fixed'
modifiedLines = modifiedLines + 1
End
else
Do
output = input
End
call LINEOUT fname, output

input=linein(filename) /* get next line */
End /* file read loop */

say 'Total lines read = 'totalLines
say 'Total lines changed = 'modifiedLines
------------ End Cut -------------------

Steve Swift

unread,
Jul 19, 2008, 11:43:54 AM7/19/08
to
Nitro wrote:
> For debug you can add the trace command. Most of my rexx has been simple
> scripts so Say and Trace have been enough.

I recently came across the fact that you could turn rexx tracing on by
setting the RXTRACE environment variable to ON. This can be handy if
you use external subroutines, or ::include libraries. If you find
yourself about to call such an external routine (while tracing your own
code) then you can enter:
Call Value 'RXTRACE','ON','ENVIRONMENT'
... and see what the external routine does.

--
Steve Swift
http://www.swiftys.org.uk/swifty.html
http://www.ringers.org.uk

Message has been deleted

Graham Hobbs

unread,
Jul 19, 2008, 9:26:14 PM7/19/08
to
This is what I use to copy a file. The 'say' is cosmetic.
It assumes f1_rm1 exists as an input file and you'll create fi_out.

someproc:

fi_rm1 = 'c:\ghexe\utem1rm1.txt'
fi_out = 'w:\bkpdir\utem1rm1.001'

do while lines(fi_rm1) > 0
ws_inb = linein(fi_rm1)
say 'ws_inb='ws_inb
call lineout fi_out, ws_inb
end

call lineout (fi_rm1) /* close */
call lineout (fi_out) /* close */
return

As for debugging - ask smarter guys than me. That said . .
I do use 'trace' with a parm occasionally but usually when I've done a
nono if prints up on the CMD window and describes the error very
clearly. (Am ooRexx on XP though - shouldn't make a difference).

Many Rexx's have bitten me because i forgot to close the file. Read
the manual about linein and how its coded (I say this because in the
code above there is no explicit 'open' - ain't like cobol:-))
Hope this helps,
Graham

On Fri, 18 Jul 2008 21:35:56 -0700 (PDT), globaloney

<jgo...@excite.com> wrote:

** Posted from http://www.teranews.com **

Michael Lueck

unread,
Jul 19, 2008, 11:00:59 PM7/19/08
to
Graham Hobbs wrote:
> Many Rexx's have bitten me because i forgot to close the file. Read
> the manual about linein and how its coded (I say this because in the
> code above there is no explicit 'open' - ain't like cobol:-))

True true...

But for max I/O performance, methods were added which are FAR superior to LineIn / LineOut.

For example:

file=.stream~new('data.dat')
file~open('READ')
if result\='READY:' then do
return 0
end

/* Check for how many lines the file has */
FILEsize=file~command('QUERY SIZE')

/* Read in the file */
/* This code requires at least ORexx 2.1.1 on Win32 - only tested with >=2.1.2 */
INstr=file~charin(1, FILEsize)
FINDarray=INstr~makearray()

file~close()

Open/Close the file with the scream object. If it is not possible to have the complete data set in memory, the use LineIn/LineOut instead of charin/makearray.


--
Michael Lueck
Lueck Data Systems
http://www.lueckdatasystems.com/

Michael Lueck

unread,
Jul 19, 2008, 11:02:01 PM7/19/08
to
Steve Swift wrote:
> I recently came across the fact that you could turn rexx tracing on by
> setting the RXTRACE environment variable to ON.

Thanks Steve! I had not known of that trick.

Indeed it does work with ooRexx on Linux.

Jeremy Nicoll - news posts

unread,
Jul 20, 2008, 8:52:42 AM7/20/08
to
globaloney <jgo...@excite.com> wrote:

> Also how do you debug a rexx.exe?, When I run on that is in error the
> MS window closes
> before I see what the error was. Thanks in advance.

The simplest way is to have your code end with something like:

say "***" ; parse pull waste

so the exec waits for a final bit of input before ending.

You could put that in your error handler if normal execution is meant to
produce no output, so only when something goes wrong does the window hand
around.

--
Jeremy C B Nicoll - my opinions are my own.

Gil Barmwater

unread,
Jul 20, 2008, 9:31:22 AM7/20/08
to
Lots of good suggestions already so I will only add the following.
OoRexx provides two additional ways to run a script besides REXX.EXE -
REXXHIDE.EXE and REXXPAWS.EXE. You would use the first in cases where
all of the user interaction is via dialogs so there would be no need for
a "command window". It also would be useful for something meant to run
in the "background". The second was added by Mark Hessling to mimic the
default Regina behavior of leaving the command window open after the
script terminates. The default "association" for the .rex extension is
to invoke REXX.EXE but you COULD change it to run REXXPAWS for example
if you wanted the command window to always remain open. In my opinion,
however, the best way to debug a new script is to invoke it from an
already open command window and make liberal use of TRACE to step
through the parts of the program that aren't working as expected.

regli

unread,
Jul 20, 2008, 11:27:14 AM7/20/08
to
On Jul 20, 6:31 am, Gil Barmwater <gi...@bellsouth.net> wrote:
 In my opinion,
> however, the best way to debug a new script is to invoke it from an
> already open command window and make liberal use of TRACE to step
> through the parts of the program that aren't working as expected.- Hide quoted text -

IMO, for the serious REXX developer, by far the best way to debug an
Object Rexx program is via the IBM Object Rexx Workbench Developer
Edition (2.1+ upgradable).

With a little effort, detailed in my post to rony (29 May 2008
09:11:48) in the following link, it can be adapted to use the latest
ooRexx version. It allows for just about full visual interactive
debugging with watch variables, etc. It's a serious development
environment in absence of ooRexx support for Eclipse.

http://groups.google.com/group/comp.lang.rexx/browse_thread/thread/6b8b782959293bc8/69681a183fbc90e1?lnk=gst&q=debug+workbench#69681a183fbc90e1

Phil

unread,
Jul 21, 2008, 1:24:00 AM7/21/08
to

"globaloney" <jgo...@excite.com> wrote in message
news:13dc4c1c-d5a1-4c0d...@r66g2000hsg.googlegroups.com...

use arg infile

infile = .stream~new(infile)
outfile = .stream~new('outfile.txt')

do infile~lines
outfile~lineout(infile~linein)
end

infile~close
outfile~close

Phil
----


Michael Lueck

unread,
Jul 19, 2008, 1:25:50 PM7/19/08
to
Steve Swift wrote:
> I recently came across the fact that you could turn rexx tracing on by
> setting the RXTRACE environment variable to ON.

Thanks Steve! I had not known of that trick.

globaloney

unread,
Jul 21, 2008, 11:09:17 PM7/21/08
to
On Jul 21, 12:24 am, "Phil" <obrie...@optusnet.com.au> wrote:
> "globaloney" <jgol...@excite.com> wrote in message

Thanks All. I am up and running

Graham Hobbs

unread,
Jul 22, 2008, 10:26:14 PM7/22/08
to

Did you try mine and Phil's. Which one's better - if Phil's then I'll
use in future (seems cleaner).
Graham

globaloney

unread,
Jul 26, 2008, 1:55:20 AM7/26/08
to
> ** Posted fromhttp://www.teranews.com**- Hide quoted text -
>
> - Show quoted text -

Sorry for taking so long to get back to you

I was originally using Nitro's(Bart's) code since I am not familiar
with the oorexx language yet.
His is similar to yours. It was working pretty well. I am using
software called SPFLITE which simulates SPF edit functions like a
mainframe.
In my last line of code. I access my file thru SPFLite,review the
output and exit.

Now I am trying a little more complicated process where I read in 3
infiles and write to 1 output file . I have run into a snag opening
the output file at the end of the program. I get a file opened error
in SPFLITE, however if I exit and then access the file,it is exactly
as it should be. I tried adapting Phil's code but same deal, I don't
think I am closing my file properly.
Here are my last few lines of code to the output file. Am I closing
the file properly?
/*******************************************/
outfile = .stream~new(FILEOT1)
do j=1 to tw
innie=l.j
outfile~lineout(innie)
END
trace i
outfile~close
/**************Edit file thru
SPFLITE**************************************************/
address cmd "C:\Program Files\SPFLite\SPFLite.exe" FILEOT1

/*****************************************************************/

although the code worked I couldn't get my file opened at the end of
the code.

Gary Scott

unread,
Jul 26, 2008, 10:02:26 AM7/26/08
to
globaloney wrote:

Oh my gosh, I can't believe someone is still using SPF let alone a clone
of it ... :)

--

Gary Scott
mailto:garylscott@sbcglobal dot net

Fortran Library: http://www.fortranlib.com

Support the Original G95 Project: http://www.g95.org
-OR-
Support the GNU GFortran Project: http://gcc.gnu.org/fortran/index.html

If you want to do the impossible, don't hire an expert because he knows
it can't be done.

-- Henry Ford

globaloney

unread,
Jul 26, 2008, 11:48:08 AM7/26/08
to
Oops, The problem appears to be with the Program File not the code,
apparently it can't handle a blank in a directory name.
0 new messages