[comp.sys.amiga] ARexx support

vkr@osupyr.mps.ohio-state.edu (Vidhyanath K. Rao) (07/11/89)

    In the last few months, there have been articles on ARexx and lists of
Arexx compatible programs [not to mention certain rumors in this very net].
However not many of the reviews that I have seen actually list the level of
ARexx support in the program. I wish they would.

    First, let me list the levels of Rexx support a program may have. Or
at any rate, the levels that I can think of:

    1(a). ARexx is a glorified macro processor cum variable handler.
    1(b). Commands will also be accepted from ARexx.
  However the program does not have both 1(a) and 1(b). Unfortunately, code
ported from *ix or Bellvue-DOS [is that a snide comment?] may not do better
cos they tend to use gets()/puts() to be "interactive".

    2. The program exists in two modes: In the active mode, 1(a) is
    supported. In the idle mode 1(b) is supported.

    3. Full bidirectional support is there. [If that is the case, support
    for asynchrnous arexx invocations may also be given.]

Tom's FreeDraw does all three. But I want a few more features:
    Firstly, there should be a way to control the access. My suggestion
would be to have paswords. External commands must be prefixed with the
password while the restriction is in effect. Restriction placed by
the user at the console must take precedence over others.
    The macro invocations must allow for function invocations, for
result strings to be requested, or command line tokenization etc.


    There are two more things to keep in mind in a bidirectional host:
    The ARGSTRINGs in the RexxMsg structure should not be altered.
    No commands must be carried out after the program reaches the
halt condition: This when the halt command is recieved from the console
but before the program has cleaned up after itself. In particular, the user
should be able to interrupt the processing of external commands and then
quit. All pending RexxMsgs should be sent back with the appropriate error
codes.

    I have written a proof-of-concept example that does all that I want in
a Rexx Host for now. I have tried to make the
code as reusable as possible. But right now the code is Manx-specific.
But one should be able to convert it other compiler/assembler combos
in a dozen or so man-hours. If you plan to implement the full functionality
of this example, I will gladly donate my help [even if you will profit
from it].

The strangeness of this example comes from its convoluted history: 
last year I started adding 
a bi-directional Rexx port to DME. But Kim DeVaughn had already added a
a Rexx port, and in a way that was incompatible with my then version.
So I cancelled my project. Finding nothing else to do during this
summer, I decided to create an example out of it.  In the meantime,
I also had the opportunity to look at the proposals of <..............>
on adding a rexx port to MicroEmacs [there was an article in
comp.languages.rexx, but I forgot to save it] and at Tom Rokicki's version
of FreeDraw. After getting and familiarising myself with the v1.10 of ARexx
and may be get the comments of Bill Hawes on my program, I will send the
whole thing to comp.sources.amiga. If you want to look at it in the meantime,
drop me a note. I will send you a zoo'ed copy of it.
-- 
It is the man, not the method, that               Nath
solves the problem.                     vkr@osupyr.mps.ohio-state.edu
	-Poincare.                             (614)-366-9341