Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Wendy Krieger

Pages: 1 2 [3]
Programming / REXX under OS/2 etc
« on: October 10, 2021, 11:22:22 am »
My first exposure to REXX was Quercus Personal REXX for DOS in 1993.  Anyone who has looked at Richard Goran's guide to REXX, or played around with REXXLIB.DLL, would have encountered it.  In its day, it was the fastest one going, because it tokenised everything after the control-Z.

It came in flavours for DOS, OS/2, Windows 3.x and 95/NT.  Of course, we were managing things like 4DOS and 4OS2 back then, on a freshly minted OS/2 2.10.

The language was somewhat more versitile than other languages like BASICA, in that it was more 'open' to the OS.  You could for example, edit binary files, and make decisions on what part(s) of the binary to edit.  Back in the day, I was collecting operating systems as they hit the deck. 

Quercus REXX is the only rexx that I replaced OS/2 rexx with.  Some programs did not like it (eg GearOS2), but because of limited memory and such, Gear (a cdrom burning proggie), was run in an OS/2 PM session, with filebar as the shell.

Looking at the feature-set, Quercus is closest to Regina, except that it is not ANSI complient (no changestr), but was getting sufficiently close to OS/2 that they were advising people to use the OS/2 functions where appropriate.  Some of IBM's commands were slightly supperior (eg FILESPEC, DIRECTORY).

Some of the early AI stuff (like renaming OS/2 icons and attaching help pages through the MINDEX object), were done in this.  Using Norton Utilities 'InstDOS', thing, one can create whole Windows/WinOS2 desktops through rexx.  I still do it that way.

PC-DOS 7  had a version of REXX for DOS.  It caused a few headaches with 4DOS, because it used REXX ,BAT scripts.

When the 486 finally died in 2002, I moved across to Windows 98, Windows 2000, and finally (last year), Vista 6.1.  None of these had REXX, but you could coax regina or even quercus to run in these environments.

4NT will see and use rexx .cmd programs, but i normally pass these through as .rex scripts.

Regina Rexx is about the only ANSI level REXX (non-OO), and being on DOS, OS/2 and NT, is pretty versitile passing batches through.  The recently posted RXLOOP.REX works just as well under OS/2 as under NT (where it was written)
All of the rexx scripts handle bignum.  Have a look at and my fibonacci series calculator (it's the world record, written under rexx).

Applications / Re: Accelerated Installs
« on: October 10, 2021, 09:26:41 am »
The same url will now work,  Files distributed through forums go into files directory, not the root directory.


Applications / Re: Accelerated Installs
« on: October 09, 2021, 12:47:12 pm »
This is the sort of utility i use in AI's,  It's a distribution of keys before or after the progs are installed.

This is the output batch.

Code: [Select]
@echo off
echo key for Zippy
copy zippy.key c:\programs\zippy

The second !loop command says which letters to process.  These can be anything, but because we only wanted to move the zippy.key to its proper place, we used only 'r' here.

Code: [Select]
extproc regina.exe rxloop.rex


$data $nkp
r,Zippy    ,zippy.key,$P\zippy
g,GSview   ,gvpm.ini,$S,
g,Dragtext ,drgtxt39.ini,$P\drgtxt39
g,Amipro   ,amiuser3.ini,$S
g,Lotus SS ,suit.ri,$L

$new distkey.cmd
@echo off
$loop *
echo key for $n
copy $k $p
$loop r

This is RxLoop.  We run it under Regina. rather than SAA, because the former is ANSI complient, and can be run as an application.  You see it's woven from zloop.cmd.  Looking at this shows the specs as implemented for the program, and the bits and pieces of proggie in random order.  At some point, we pull the bits together and make rxloop.rex,

Code: [Select]
/* Woven from zloop.cmd by Wendy Krieger on 20041206 at 22:45:27 */
/*~ Rexx Looping Utility */
numeric digits 30
parse arg infile .
tokens = '$1234567890abcdefghijklmnopqrstuvwxyz'
outfile = ''; print = 0;
call stream infile, 'c', 'open read'
do while lines(infile) ; output = 1; incard = linein(infile)
if left(incard,1) = '$' then call cmdline
if output then call printline; end
call stream infile, 'c', 'close'
cmdline: ; output = 0; parse var incard cmdx tail
  when cmdx = '$rem' then output=0
  when cmdx = '$data' then call datacmd
  when cmdx = '$new' then call newcmd
  when cmdx = '$end' then call endcmd
  when cmdx = '$set' then call setcmd
  when cmdx = '$var' then call setvar
  when cmdx = '$loop' then call loopcmd
  when cmdx = '$.' then call lit
  otherwise; output = 1; end
lit: ; incard = tail; output = 1; return
printline: ; select;
  when print = 0 then nop
  when print = 1 then call dataact
  when print = 2 then call newact
  when print = 3 then call loopact
  when print = 4 then call setact
  otherwise; nop; end
datacmd: ; print = 1; rows = 0;  parse var tail t0 . ;
if left(t0,1)='$' then tokens = t0 ; return
dataact: ; rows = rows + 1; data.rows = incard; return
newcmd: ; print = 2; parse var tail nfile . ; select;
 when nfile = '' then nop;
 when nfile = '*' then nop;
 call stream outfile, 'c', 'close'; outfile = nfile
 say 'writing' outfile
 call stream outfile, 'c', 'open write replace' ; end
newact: ; call lineout outfile, incard; return
setcmd: ; print = 4; kchar = ''; sets. = '$' ; return
setact: ; parse var incard 1 t0 2 t2 3 incard (t2) . ;
if pos(t0, kchar) = 0 then kchar = kchar || t0; t1 = pos(t0, kchar)
sets.t1 = incard; return
setvar: ; thiscard = tail; incard = ''
do forever; parse var thiscard t1 '$' thiscard; incard = incard || t1
parse var thiscard 1 mk 2 thiscard; fld = pos(mk,kchar);
select ; when mk = '' then nop
  when fld > 0 then incard = incard  || sets.fld ;
  otherwise;  incard = incard || '$' || mk ; end
if thiscard = '' then leave ; end
call lineout outfile, incard; return
loopact: ; srcs = srcs + 1; text.srcs = incard ; return
loopcmd: ; select;
  when print = 2 then call loopstart
  when print = 3 then call loopend
  otherwise; nop; end; return
loopstart: ; srcs = 0; print = 3; return
loopend: ; print = 2; parse var tail flags .
do row=1 to rows; rowdata = data.row;
if pos(left(rowdata, 1), flags) = 0 then iterate
parse var rowdata 1 . 2 div 3 rowdata ; incard = ''
fld = 0; field. = '' ; t0 = 0; field.t0 = '$' ;
do forever; fld = fld + 1; parse var rowdata t0 (div) rowdata
field.fld = t0 ; if rowdata = '' then leave; end
do src = 1 to srcs ;   thiscard = text.src ; incard = ''
do forever; parse var thiscard t1 '$' thiscard; incard = incard || t1
parse var thiscard 1 mk 2 thiscard; fld = pos(mk,tokens)-1;
select ; when mk = '' then nop
  when fld > -1 then incard = incard  || field.fld ;
  otherwise;  incard = incard || '$' || mk ; end
if thiscard = '' then leave ; end ; thiscard = incard; incard = ''
do forever; parse var thiscard t1 '$' thiscard; incard = incard || t1
parse var thiscard 1 mk 2 thiscard; fld = pos(mk,kchar);
select ; when mk = '' then nop
  when fld > 0 then incard = incard  || sets.fld ;
  otherwise;  incard = incard || '$' || mk ; end
if thiscard = '' then leave ; end
call lineout outfile, incard; end
end; return
endcmd: ; print = 0; parse var tail ; if tail = 'all' then do
  call stream infile, 'c', 'close'
  call stream outfile, 'c', 'close'
  say 'bye'; exit; end
endact: nop; return

Utilities / Re: MeShell commandline frontend timetable
« on: October 09, 2021, 11:38:59 am »
It looks from the screen layout of MeShell that it's going to be a permanent thing, so it's best to include this sort of stuff in the help file (see eg searchplus for an example).  See picture from searchplus.hlp refering to dragtext39. 

The same bug exists with MeEditor.


If you run console applications (like fc/2 or q edit), they hide in the invisible console.  This has a button up the top, so that maybe it could show the name of the running program.  A reference to this in the install.txt might help too.

Applications / Re: Accelerated Installs
« on: October 09, 2021, 09:57:34 am »
Most of the installs are handled by rexx scripts or batch files after the files are copied.

Service packs are integrated if the install consists of loose files.  Nothing is done to packages, either pack2 or wpi. 

There is some 'copy over' stuff.  For example, \os2\mdos\ is copied over with a functional one.  Qbasic.exe is updated to the final IBM release of this.  The ones in 5.02 and the update are later than the OS/2 one, which is the first of the non-linked versions.

When you modify the DOS path from c:\os2;c:\os2\mdos;... to c:\os2\mdos;c:\os2;  you can install the DOS E Editor in there and use it under OS/2.  As with OS/2 PPC, you can have rexx.exe in there.  The 7.00 version does not like OS/2, but the 7.01 (2000) version is quite fine under OS/2.

For a DOS/OS2 history see is my website.  The two big files there (polygloss and metgloss), are maintained in a markup language that is written in REXX.

Games / Re: Hearts Card Game
« on: October 08, 2021, 02:55:00 pm »
I know how to play hearts as a game. 

There's a program called 'mshearts' that works under winos2.  It uses a few files, but can be freely downloaded from Win16 patch sites.  You can play against three computer players, or three over the network.

You play the game by playing 'tricks', that is, whoever has the 'lead', puts a card (of any suit), and other players follow with cards of the same suit.  If you have no card of that suit, then you can play any other card.  So if I lead something like five-diamonds, you have to put a diamond-card if you have one, but any other card if you don't.

The highest card of the same suit as the lead card wins that trick and becomes the lead.

The object of the game is to have the lowest score when someone gets 100 points.  A point comes from every heart card in tricks that you win (whatever the lead), or 13 points from the Q-spades.  If you get all of the points, then everyone elses' score goes up by 26, while yours stays as it is.

It's in my OS/2 themed "Windoze" .  There is a good fraction of Win-OS/2 in there as well :) 

Applications / Re: Running old OS/2 Software - Issues
« on: October 08, 2021, 01:54:20 pm »
The lotus installer is a bit picky about what file system etc it installs from.

I installed SmartSuite and Amipro from a local directory (c:\setup\ss173 and c:\setup\amipro), and from a cdrom image I made with mkisofs under Vista 6.1, it did not complain about either.  The next test is to poke the suit.ri file into the directory before installing it. (This is the registration information data, made by install if not present).

Applications / Accelerated Installs
« on: October 08, 2021, 01:46:28 pm »
The current project is Accelerated Installs.

The idea is to reduce the time from a clean install of the OS to full working order.  While one can use something like Ghost or pre-installed zip files, I desired to have a fair bit of flexibility in this.  A lot of this is cross-platform, the ideas from one source copied to another.  Some of this stuff dates back to 1992.

The bulk of programs are either copied pre-installed, or pre-registered.  This means, for example, inserting the registry keys in before installing the program.  PMView, Larsen CMD, File Commander/2 work like that.  Strategically placing parts of the INI file work for GSView, Smartsuite 1.73.  4OS2, EFComm and OS2CMD already have their reg keys in the install.

Lotus Smartsuite 1,73

The slipstream was successful, so it installs on one run.  There is a version 1.60 + update on the eCS 1.0 disk.

Graham Utilities. 2.10

This involves a service pack, but the install can be streamlined somewhat.  The idea is to modify the eCS 1.0 install version to handle this without having to reboot.

TinyEdit and QEdit. 

These look for supplemental files in a hard-coded directory or the current directory.  Without the hard-code, T and T2 will try to open Thelp in the current directory.  Reconfigured to use c:\use\thelp.  Likewise Q dos and os2 look for spell-check in a hard-code directory.

Cmd2exe and Bat2com

These are variously OS/2 and DOS programs that produce a loader for programs, so that you don't have to modify config.sys or autoexec,bat and keep the program off-path.  Bat2com from Foley Hitec "Turbobat", which seems to work under HPFS.  (the pc-mag one doesn't). 

4OS2, Tcmdos2, Pmview, filejet, jetcmd, volkov commander, boxer, and lucide all work under this.  jetcmd and filejet can have their environment variables set in the loader.  boxer is DOS, OS/2, TKO and EZ versions.  FC/2 can be off-path, as long as you load it from an on-path file (eg fcw),

There is a Windows proggie of this name (Jim Lawless, 'com2exe'), but it allows includes of other files on top of just a batch compiler.

Utilities / Re: MeShell commandline frontend timetable
« on: October 08, 2021, 01:17:59 pm »
It's the sort of thing I've been looking for.  It gives this. 

Code: [Select]
Access violation exception (EGPFault occured
at CS:EIP=$0000005B:$1E1D05D6 at $1E1D05D6!
Terminate Program?

At the moment, I start 4OS2 through a CMD2EXE program.  This allows me to move it off the path.  It would be interesting to see what this things of that, except so far, I've only implemented that setup on eCS 2.2, nand not the Acra506  machine.

Both machines are on VPC under Vista 6.1 (Windows 7).  There's been a bit of Accelerated Installs done on both of these, since this is the current project.

Programming / Descriptions for OS/2 Book files (*.INF)
« on: October 08, 2021, 12:45:25 pm »
I wrote this little rexx script, to describe .INF files under 4OS2, 4DOS and 4NT.

It basically extracts the title from the INF file, strips the '00'x bits and tells the 4os2 session this is the file.  At the moment it handles only one file at a time, which means that you run "select infdesc (*.inf)" at the command prompt.

It can tickle some bugs in regina.rex (os2), in that if the description has no spaces, the program will read it as two files, and under 4NT, the files have quotes around them, which 4DESC does not like.  But generally it works quite well.

Code: [Select]
/* rexx */
parse arg infile
call stream infile, 'c', 'open read'
desc = charin(infile, 108, 48)
call stream infile, 'c', 'close'
desc = strip(desc,'B','00'x)
if desc = '' then do
  say infile' has no title'
else do
  'describe' infile '"'desc'"'

Utilities / Re: Create an ISO from a CD
« on: October 08, 2021, 12:36:08 pm »
cdread.exe is the magic for making iso files from live media.

Code: [Select]
To read the complete media from a CD-ROM writing the data to the file cdimage.raw:

readcd dev=2,0 f=cdimage.raw

Use readcd -scanbus   to find out the value for 'dev='.

With DVDTools, you have to register them to add the iso-file as an option.  The unregistered version does not do this.

Programming / Re: Rexx function changestr
« on: October 08, 2021, 12:06:59 pm »
Regina has Changestr(). 

Programming / Re: REXX - Top header comments Suggestion
« on: October 08, 2021, 12:04:30 pm »
Most of my REXX scripts come out of weave.  This means I write a commentry on the program, and run that through weave to produce the rexx script (etc).

Code: [Select]
/* REXX Woven from zrxc.cmd by Wendy Krieger on 20210630 at 20:52:58 */
/*~ Rexx Maths calculator v0.203 */; numeric digits 60; numeric fuzz 1;
setpi = 2; econst=0; ln2p=0 ; nd = digits()

The first line tells me when and where the source is, the second is picked up by the description program.

Code: [Select]
extproc weave.rex
regina woven.rex zrxc.cmd
::~ source for rxc v 0.202

goto :eof
!topic About

This is a rebuild of the rexx calculator


Album of algorithms at
  (also available in Czech [cesky]

The calculator is not strictly related to one field, but just acquires
functions as i need them.  Most of them are however, either hyperbolic
geometry or higher dimensional stuff.

!topic Settings

!set [rxc version                  ] yvers 0.203
!exe mainrexx #..\rxc.rex##Rexx Maths calculator v##
!lbl settings - *******************************************
!set [  $#disp#high#low#           ] yexp120 $#20#16#-4#
!set [    decimal in base 1000     ] yexp010 $#126E36#9#-3#
!set [disp 1+1/ydspadd             ] ydspadd 1e50
!lbl rexxsets - *******************************************
numeric digits 60; numeric fuzz 1;
setpi = 2; econst=0; ln2p=0 ; nd = digits()
!inc units  We handle some conversion factors now.

  In non-twelfty bases, we look to see the size of 126E38 is in
  the base in question, and use that many places.  The reason for
  this is to keep the same level of precision throughout.

Most of the stuff in the second bit is simply intro, it isn't the first part of the code, just some random insert to it. 

It's actually an extproc command I run under 4nt.  The program that accepts this is weave.rex, which is also written in a similar style on a simple print on/off tangle.rex.  So tangle.rex is used to compile weave.rex, which is used to write all sorts of other things.

The bits of code that are 'commented out' or not included in the compile can still be in the source, but simply bypassed in the compile.

The program is handy enough that you can write a number of matching code pieces to different files, like write a matching 4DOS.INI and 4OS2.INI at once.

rxc.cmd is the command-line calculator, it's 22.170 bytes, the source code is 37.249 bytes.  The !topic is the 4dos help topic header, is what I use for bait for a folding editor.    This is what turns up on the fold. 

Code: [Select]
File: D:\save\cdata\BATCH\zsource\zrxc.cmd 47 occurrences found on 47 lines
     6: !topic About
    21: !topic Settings
    41: !topic Conversion factors
   130: !topic functions
   161: !topic - vf (vulgar fractions)
   175: !topic - sp, sm
   190: !topic - star()
   209: !topic - klein (convert Eq to Kq)
   253: !topic h2k and k2h  [Guage rule]
   294: !topic - tube
   334: !topic - a1_a2
   348: !topic - c1_c2
   366: !topic - ij
   410: !topic - fact()
   422: !topic - borr()
   443: !topic Complex
   461: !topic Base
   478: !topic fract
   494: !topic Zspans
   534: !topic Diameters & Edges - d2 and e2
   560: !topic some sequences
   591: !topic distances   dx
   604: !topic isoquad
   644: !topic addquad
   668: !topic modulo functions
   718: !topic - rss
   732: !topic - ddif
   743: !topic - mp
   755: !topic - DOS
   761: !topic - rxxmath
   774: !topic Twelfty
   810: !topic - Powerset(base, pos number)
   834: !topic - other bases
   863: !topic Program
   881: !topic - RexCalc
   905: !topic version stuff
   912: !topic Standard functions
   933: !topic - cbrt
   954: !topic - sqrt
   975: !topic - sin
  1001: !topic - - sinp
  1014: !topic - - cosp
  1023: !topic - pi
  1056: !topic - - piconst
  1065: !topic - pow
  1080: !topic - Ln()
  1128: !eof !topic Remmed out stuff

Pages: 1 2 [3]