765 These lines are what used to be output by your say statements |
766 If I knew enough about the event model in Mozilla, these lines |
767 would be scrolling upward as you watch. |
768 Unfortunately, I can only get the javascript demo to work on IE and Opera. |
769 Mozilla javascript experts may wish to chip in and help me. |
770 In the meantime, DOWNLOAD and TRY the samples on your mainframe! |
771 These lines are what used to be output by your say statements |
772 These lines are what used to be output by your say statements |
773 These lines are what used to be output by your say statements |
774 These lines are what used to be output by your say statements |
775 These lines are what used to be output by your say statements |
The problem:
- Your Mainframe Rexx execs produce multiple screenfuls of displays via the Rexx 'say' statement.
- Your user sees black screens fill up with chaotic lines of red 'say' output, then stop with three asterisks *** inviting (forcing) them to press <enter> to continue. This can go on for a long time, but even ONE <enter> is a nuisance.
- If the user presses <enter> more than once, and who can blame him, then error messages may be lost as the screen refreshes more than once. All the user knows is that something went wrong.
The user is left to curse the world of mainframe UIs, and to decide whether to rerun your Rexx.
Or do your panels sit there for long periods while the execs run, because the alternative (hundreds of red 'SAY's) is too horrible to dump on a user?
You COULD:
- Rise to the challenge and code your own inline solution "Hey, in a few lines of Rexx-ISPF I'll do a 'control display lock' and it will do everything this guy claims to do with his 'Mysay'".
- Code custom panels to give feedback from that code to your users (one for each of your execs)
- Store a copy of all the displays on a pds for later review, too bad this also doubles your coding work.
- Any good ideas you have halfway through this exercise have to be reapplied in dozens of pieces of code - a maintenance nightmare.
See "Good reasons why Mysay is an external routine".
- Repeat for a hundred execs, or forever, whichever feels longer.
It isn't worth it, is it?
BUT WAIT! I have solved the problem for you!
MYSAY is a drop-in replacement for the Rexx 'say' statements in your Mainframe execs.
ALL your long-running Rexx apps can now look as good as the simulation at the top of this page, for practically NO coding effort.
No longer do your panels need to sit there leaving the user to wonder what is going on.
You can download and experiment with worked examples of 'mysay' from a provided menu. I believe you will like what you see!
All this is achieved with (i) no degradation in the readability of your code (ii) EXTERNAL rexx calls - so if you improve on 'mysay', the improvements show up system wide. Thus there is NO maintenance nightmare.
- download the code - it's FREE to the Rexx-ISPF community. Unzip/extract the Execs.
Use FTP or your terminal file transfer facility to load them up on your Mainframe into FB 80 fixed-length partitioned data sets.
- Copy the Execs into your EXEC library,the panels into your panel library, the one MSG member into your MSGS library, and (to allow the test example menu panel to work) copy the profile and keylist members to your USER.ISPPROF library.
Because there are so many execs, you may prefer to create a tsoprefix.MYSAY.EXEC library to keep them apart from your normal EXECS.
Then code an ALTLIB in the MYSAYMNU exec activating MYSAY.EXEC, and finally MOVE this exec to your regular exec library.
- Type TSO MYSAYMNU for a menu of MYSAY examples. Try them.
- Use the supplied USEMYSAY edit macro (after reading warnings in
Discussion on usemysay - what to do, pitfalls, and a warning) to convert one of your own execs 'yourrexx'.
Check the changed lines of code in yourrexx just to be safe.
- Type TSO yourrexx and see what it looks like now! It should be scrolling your 'say' outputs like the simulated display above.
Well, it will when you fix up your 'mysay0' initialisation call.
What you get:
Utility:
- Your converted Execs no longer wait at the end of each screen of output for the user to press <sym;enter>.
- When all is done, your online user also is invited to review the run output, which is saved in a dsn.
Beauty:
- ALL your Execs produce pleasing scrolling progress displays, and so look like finished products.
If you have laboured for days or months on complex logic, now the interface will not disgrace your product.
- For a few lines extra code per program, you get two 'extras' a histogram of asterisks in a progress bar, and a status line.
Worked Examples:
- Ten test execs allow you to try out mysay from a user-friendly menu.
- Questions? Read the Mysay FAQ or email Jim (see below).
An edit macro to convert your execs, and a panel that will serve for all your execs:
- The supplied panel 'Scroller' is usable by DOZENS of execs as is, with NO code modification, through the use of dynamic variables. Therefore you do NOT need to create a separate panel for every application (unless you WANT to)
- read Discussion on usemysay - what you still have to do, and a warning
The main point is to back up your valuable exec code before running USEMYSAY to convert your execs.
- USEMYSAY will do almost ALL the work for you. If you have 100 one-line 'say' statements in your exec, they will be converted to 100 one-line 'mysay' calls. The readability of your code will NOT in general be reduced.
Dinner with the family:
- For practically NO coding effort, your long-running Execs will share the same great look!
What you don't get:
- Any sort of guarantee.
- XMIT files. No binaries are involved so XMITs just get in the way. In particular, they get in my way.
- I have not written this to work with trace output, I don't believe it can be done in Rexx.
- The characters after 74. i.e. the output is truncated to 74 characters to fit the 74-char width of dynamic area 'dynamic1' on the default panel 'scroller'. If you really want word wrap for long lines, it would be trivial to code.
- The right to represent MYSAY as your idea, or your company's idea. It's 100% my original idea. However, I invite you to improve on it and share your improvements with the REXX/ISPF community.
Please leave some comments in MYSAY identifying it as the original idea of Jim (Jamie) Fenner of Canberra, Australia.
Another way of saying this, is that this work is published under a Creative Commons Licence which imposes practically no restriction on you except that you should acknowledge my work as mine.
Click to see Creative Commons attribution licence
Questions? See the Mysay FAQ
download the code - it's FREE to the Rexx-ISPF community