[comp.sys.atari.st] TOS Command Line

mforget@nro.cs.athabascau.ca (Michel Forget) (05/08/91)

Does anyone know how to use the Pexec function so that it will take a 
command line longer than 80 charactes.  I am writing a program that will 
require longer command lines, but I'm stumped on this one.  The 
documentation that I have does not mention anything about command lines 
longer than 80 characters, yet they are possible...


<<  ersys!mforget@nro.cs.athabascau.ca  >>
<<  or in the language that PEOPLE use  >>
<<  Michel Forget...:)                  >>

steve@thelake.mn.org (Steve Yelvington) (05/08/91)

[In article <LPmL22w164w@ersys.uucp>,
     ersys!mforget@nro.cs.athabascau.ca (Michel Forget) writes ... ]

 > Does anyone know how to use the Pexec function so that it will take a 
 > command line longer than 80 charactes.  I am writing a program that will 
 > require longer command lines, but I'm stumped on this one.  The 
 > documentation that I have does not mention anything about command lines 
 > longer than 80 characters, yet they are possible...

Command lines can be up to 125 characters long.

If you need to pass more information than that, there are three currently
used methods, of which one, XARG, is currently endorsed by Atari Corp. The
file EXARG.DOC in the Gemini distribution (see comp.binaries.atari.st)
will tell you all you need to know. There's some code in the samples
folder to show how it's done.

The Sozobon C compiler and dlibs support another method called ARGV.
See the dlibs sources.

Mark Williams Co. uses a third method with its C compiler, which, as has
been mentioned, is no longer being updated.

 ----
 Steve Yelvington, Marine on St. Croix, Minnesota, USA / steve@thelake.mn.org

mforget@nro.cs.athabascau.ca (Michel Forget) (05/08/91)

steve@thelake.mn.org (Steve Yelvington) writes:

> 
> Command lines can be up to 125 characters long.
> 
> If you need to pass more information than that, there are three currently
> used methods, of which one, XARG, is currently endorsed by Atari Corp. The
> file EXARG.DOC in the Gemini distribution (see comp.binaries.atari.st)
> will tell you all you need to know. There's some code in the samples
> folder to show how it's done.

Thanks for the information.  I'll get the latest version of Gemini from 
atari.archives.umich.edu and see what happens.  I am programming in 
Pascal, but C is close enough to convert back and forth.  In the 
documentation I have, which doesn't seem to be too correct to begin with 
since the Pexec function they supply doesn't work at all, forces an 80 
character limit on you.  I'll see what the EXARG.DOC file says.  Do I 
have to use Gemini to use the method of parameter passing?  I use NeoDesk 
right now, and I'd like to keep using it.  The last version of Gemini I 
saw was 1.1.  Anyway, I'll take a look.  Thanks.


<<  ersys!mforget@nro.cs.athabascau.ca  >>
<<  or in the language that PEOPLE use  >>
<<  Michel Forget...:)                  >>

steve@thelake.mn.org (Steve Yelvington) (05/08/91)

[In article <mT3L24w164w@ersys.uucp>,
     ersys!mforget@nro.cs.athabascau.ca (Michel Forget) writes ... ]

 > character limit on you.  I'll see what the EXARG.DOC file says.  Do I 
 > have to use Gemini to use the method of parameter passing?  I use NeoDesk 
 > right now, and I'd like to keep using it.  The last version of Gemini I 
 > saw was 1.1.  Anyway, I'll take a look.  Thanks.

All that's necessary is that the parent process and the child process agree
on whatever extended argument-passing convention is in use.

If you're programming in Pascal, I suppose it should be easy enough to
code the parent's side of things, assuming the compiler allows you to have
access to the GEMdos calls. But the child's ability to parse the command
line may be another matter entirely. Can you modify the startup code? Or
is it hardwired into the compiler? This may be a good time to switch to a
less restrictive language. :-)

While we're on the subject:

Has anybody tried writing a replacement for Sozobon's dstart.o module that
supports XARG? And is it possible to support both XARG and ARGV?

 ----
 Steve Yelvington, Marine on St. Croix, Minnesota, USA / steve@thelake.mn.org

mforget@nro.cs.athabascau.ca (Michel Forget) (05/09/91)

> All that's necessary is that the parent process and the child process agree
> on whatever extended argument-passing convention is in use.

Uh-oh.  I am trying to pass long command lines to RZ.TTP (The Zmodem File 
Transfer Program) for batch Uploading and Downloading.  The problem with 
the limit becomes obvious when you realize how few pathnames can be put 
on an 80 (or even 125) character command line.  I wrote a program that 
will capture the command line when it is run and display it, and will try 
it on other programs that use SZ.  I don't think that it supports the 
XARG convention you mentioned.  Any other ideas?


<<  ersys!mforget@nro.cs.athabascau.ca  >>
<<  or in the language that PEOPLE use  >>
<<  Michel Forget...:)                  >>

warwick@cs.uq.oz.au (Warwick Allison) (05/09/91)

>If you're programming in Pascal...
>This may be a good time to switch to a less restrictive language. :-)

On this subject, I have an xARG/ARGV/TOS Arguments module for Modula-2, maybe
we should put these implementations together at the archive to help promote
the use of these less restrictive argument passing techniques.

Oh, and what would be the best order to try accessing arguments?  I try
xARG, then ARGV, the finally revert to TOS if all else fails.  Ideas?

>And is it possible to support both XARG and ARGV?

Yes, depending on how restrictive your language is :-).
Warwick.

Frankly, I can't think of a language that COULDN'T do all this - but then, this
isn't alt.religion.computers, so I doubt I'll be told!

--
  _-_|\       warwick@cs.uq.oz.au
 /     *  <-- Computer Science Department,
 \_.-._/      University of Queensland,
      v       Brisbane, AUSTRALIA.

Roger.Sheppard@bbs.actrix.gen.nz (05/09/91)

> Uh-oh.  I am trying to pass long command lines to RZ.TTP (The Zmodem File 
> Transfer Program) for batch Uploading and Downloading.  The problem with 
> the limit becomes obvious when you realize how few pathnames can be put 
> on an 80 (or even 125) character command line.  I wrote a program that 
> will capture the command line when it is run and display it, and will try 
> it on other programs that use SZ.  I don't think that it supports the 
> XARG convention you mentioned.  Any other ideas?
> <<  ersys!mforget@nro.cs.athabascau.ca  >>
> <<  or in the language that PEOPLE use  >>
> <<  Michel Forget...:)                  >>

I thought that the German GSZRZ18 supported XARG or ARCV.

I am having the same problem with the Shells that support Zmodem, in
the number of files that can be uploaded.

The other problem that I have is SZ.TTP from ZMDM16, for some reason it
drops down to Ymodem, is this caused by the delay in starting SZ.TTP ?.
Is there a way around this ?
-- 
Roger W. Sheppard   85 Donovan Rd, Kapiti New Zealand...

steve@thelake.mn.org (Steve Yelvington) (05/09/91)

[In article <eB2m23w164w@ersys.uucp>,
     ersys!mforget@nro.cs.athabascau.ca (Michel Forget) writes ... ]

 >> All that's necessary is that the parent process and the child process agree
 >> on whatever extended argument-passing convention is in use.
 > 
 > Uh-oh.  I am trying to pass long command lines to RZ.TTP (The Zmodem File 
 > Transfer Program) for batch Uploading and Downloading.  The problem with 
 > the limit becomes obvious when you realize how few pathnames can be put 
 > on an 80 (or even 125) character command line.  I wrote a program that 
 > will capture the command line when it is run and display it, and will try 
 > it on other programs that use SZ.  I don't think that it supports the 
 > XARG convention you mentioned.  Any other ideas?

In that case you need to find out what compiler was used to make the RZ/SZ
programs. My guess would be Mark Williams, whose argument-passing scheme
is explained somewhat in the EXARG.DOC file. But that's just a guess.

If it's a correct guess:

Mark Williams passes arguments in the environment, so you need to know how
the environment is handled under GEMdos.

Remember that Pexec takes three arguments: An integer mode flag, a pointer
to a Pascal-style command string (first char of the string encodes its
length), and a pointer to the environment. 

The environment is -- and somebody correct me please if I get this wrong
-- a sequence of C-style strings (simple arrays, terminated by a null
byte) with an extra null byte to terminate the environment itself. Each
entry in the environment is of the form

    TAG=value

So, if 0 stands for a null byte, the environment might look like this:

    PATH=A:\0USER=steve0ICECREAM=Chocolate00

If I read the MWC documentation correctly, it would pass arguments
by adding ARGV= to the environment followed by null-terminated
arguments. Example:

    PATH=A:\0USER=steve0ICECREAM=Chocolate0ARGV=sz0file10file20file300

If there's no need for sz to know that the user is steve, the PATH is A:\
and the ice cream is Chocolate, I suppose you can leave that out. :-)

There are other things that can be encoded in the Mark Williams ARGV
string, but this is the basic idea.

 ----
 Steve Yelvington, Marine on St. Croix, Minnesota, USA / steve@thelake.mn.org

rmacgreg@cs.strath.ac.uk (Sorcerer) (05/09/91)

In article <LPmL22w164w@ersys.uucp> ersys!mforget@nro.cs.athabascau.ca (Michel Forget) writes:
>Does anyone know how to use the Pexec function so that it will take a 
>command line longer than 80 charactes.  I am writing a program that will 
>require longer command lines, but I'm stumped on this one.  The 
>documentation that I have does not mention anything about command lines 
>longer than 80 characters, yet they are possible...
>
>
><<  ersys!mforget@nro.cs.athabascau.ca  >>
><<  or in the language that PEOPLE use  >>
><<  Michel Forget...:)                  >>

There are 2 methods, Xarg and Exarg, which you use depends on how you feel, cos
from what I can see they do the same job.  I'll leave descriptions to the 
experts as I cannot remember how to do either of them.

       The Sorcerer is 'Only visiting this planet' but can be found at:

             JANET: cadx862 @uk.ac.strathclyde.computer-centre-sun 
                    rmacgreg@uk.ac.strathclyde.computer-science
  INTERNET: via nsfnet-relay.ac.uk    BITNET: via ukacrl    UUCP: via ukc.uucp

          or second star to the right and straight on 'till morning.

rcb@netcom.COM (Roy Bixler) (05/09/91)

In article <A3023378088@thelake.mn.org> steve@thelake.mn.org (Steve Yelvington) writes:
>[In article <eB2m23w164w@ersys.uucp>,
>     ersys!mforget@nro.cs.athabascau.ca (Michel Forget) writes ... ]
>
> >> All that's necessary is that the parent process and the child process agree
> >> on whatever extended argument-passing convention is in use.
> > 
> > Uh-oh.  I am trying to pass long command lines to RZ.TTP (The Zmodem File 
> > Transfer Program) for batch Uploading and Downloading.  The problem with 
> > the limit becomes obvious when you realize how few pathnames can be put 
> > on an 80 (or even 125) character command line.  I wrote a program that 
> > will capture the command line when it is run and display it, and will try 
> > it on other programs that use SZ.  I don't think that it supports the 
> > XARG convention you mentioned.  Any other ideas?
>
>In that case you need to find out what compiler was used to make the RZ/SZ
>programs. My guess would be Mark Williams, whose argument-passing scheme
>is explained somewhat in the EXARG.DOC file. But that's just a guess.

Not correct.  I compiled it with GNU C ver. 1.37.  From what I've
heard, it supports the extended argument passing scheme of Atari.

> ----
> Steve Yelvington, Marine on St. Croix, Minnesota, USA / steve@thelake.mn.org


-- 
Roy Bixler
rcb@netcom.com -or- (UUCP) uunet!apple!netcom!rcb
"Just when you think you know it all, it changes!"

mforget@nro.cs.athabascau.ca (Michel Forget) (05/10/91)

> I thought that the German GSZRZ18 supported XARG or ARCV.
> 
> I am having the same problem with the Shells that support Zmodem, in
> the number of files that can be uploaded.
> 
> The other problem that I have is SZ.TTP from ZMDM16, for some reason it
> drops down to Ymodem, is this caused by the delay in starting SZ.TTP ?.
> Is there a way around this ?

The shells that suppot Zmodem, namely Zflash, have problems with the 
command line as well.  They try to send as many as thirty-two files along 
the command line, but the command line simply isn't big enough.  Not very 
useful.  I received a message from someone that contained a Shar archive, 
but I haven't been able to extract it since I don't know what a SHAR 
archive is...:)  I'll keep looking and probably find the utility 
somewhere to extract it.  At any rate, it explained the XARG parameter 
format.


<<  ersys!mforget@nro.cs.athabascau.ca  >>
<<  or in the language that PEOPLE use  >>
<<  Michel Forget...:)                  >>

apratt@atari.UUCP (Allan Pratt) (05/10/91)

>[In article <LPmL22w164w@ersys.uucp>,
>     ersys!mforget@nro.cs.athabascau.ca (Michel Forget) writes ... ]
>> Does anyone know how to use the Pexec function so that it will take a 
>> command line longer than 80 charactes.  I am writing a program that will 
>> require longer command lines, but I'm stumped on this one.  The 
>> documentation that I have does not mention anything about command lines 
>> longer than 80 characters, yet they are possible...

steve@thelake.mn.org (Steve Yelvington) writes:

>Command lines can be up to 125 characters long.

>If you need to pass more information than that, there are three currently
>used methods, of which one, XARG, is currently endorsed by Atari Corp. The
>file EXARG.DOC in the Gemini distribution (see comp.binaries.atari.st)
>will tell you all you need to know. There's some code in the samples
>folder to show how it's done.

>The Sozobon C compiler and dlibs support another method called ARGV.
>See the dlibs sources.

>Mark Williams Co. uses a third method with its C compiler [...]

This is a badly confused accounting of the extended-argument stuff going
around for TOS.  ARGV and MWC's trick are nearly identical; ARGV is a
superset which adds validation that the args in your environment are really
intended for you.  This is the method that's approved by Atari Corp. (at
least by THIS part of Atari) and it's the method used by Bammi's GCC tools,
Gulam (if you set env_style mw), and MiNT's shell, among others.

XARG may or may not be endorsed by Atari Germany, but nobody here at Atari
in Sunnyvale (to my knowledge) has endorsed it.  The reason I hate it is
that you have to poke through your parent's data space to find your
arguments, and that is a no-no.  It will be a much bigger no-no when memory
protection and/or virtual memory come along.  ARGV has no such problems.

I don't know where the ARGV spec is -- I'll try to dig up a copy of it
and post it again.

============================================
Opinions expressed above do not necessarily	-- Allan Pratt, Atari Corp.
reflect those of Atari Corp. or anyone else.	  ...ames!atari!apratt

ONM07@DMSWWU1A.BITNET (Julian F. Reschke) (05/10/91)

In article <LPmL22w164w@ersys.uucp>, ersys!mforget@nro.cs.athabascau.ca (Michel
Forget) says:
>
>Does anyone know how to use the Pexec function so that it will take a
>command line longer than 80 charactes.  I am writing a program that will
>require longer command lines, but I'm stumped on this one.  The
>documentation that I have does not mention anything about command lines
>longer than 80 characters, yet they are possible...
>
>
><<  ersys!mforget@nro.cs.athabascau.ca  >>
><<  or in the language that PEOPLE use  >>
><<  Michel Forget...:)                  >>

The true limit for Pexec() is 124 characters. If you need more, should
use the ARGV method, as documented by Atari and used in many *nix-like
shells.

___________________________ cut here _____________________________________
Julian F. Reschke, Hensenstr. 142, D-4400 Muenster, Phone: ++49 251 861241
fast eMail: ONM07@DMSWWU1A.BITNET,    slow: jr@ms.maus.de (++49 251 77216)
____________________ correct me if I'm wrong _____________________________

ONM07@DMSWWU1A.BITNET (Julian F. Reschke) (05/10/91)

In article <A1146492584@thelake.mn.org>, steve@thelake.mn.org (Steve Yelvington)
says:
>While we're on the subject:
...stuff deleted...
>
>Has anybody tried writing a replacement for Sozobon's dstart.o module that
>supports XARG? And is it possible to support both XARG and ARGV?
>
> ----
> Steve Yelvington, Marine on St. Croix, Minnesota, USA / steve@thelake.mn.org

This is no problem at all. Gemini and Mupfel are using both ARGV and xARGs
when launching programs.


___________________________ cut here _____________________________________
Julian F. Reschke, Hensenstr. 142, D-4400 Muenster, Phone: ++49 251 861241
fast eMail: ONM07@DMSWWU1A.BITNET,    slow: jr@ms.maus.de (++49 251 77216)
____________________ correct me if I'm wrong _____________________________

orc@vpnet.chi.il.us (david parsons) (05/11/91)

In article <A2876905127@thelake.mn.org> steve@thelake.mn.org (Steve Yelvington) writes:
[about the Atari approved extended argument passing regime]
|If you need to pass more information than that, there are three currently
|used methods, of which one, XARG, is currently endorsed by Atari Corp.

Umm, xArgs is the scheme that Dale Schumacher, John Stanley, and yours
truely came up with a while back.  The MWC/Official Atari scheme is
called ARGV or somesuch, I think, unless it suffered from name drift.


Anticipating a future article, here's a example of code from my C library
runtime startup that will, if properly #defined, deal with either or
both of the standards (I was forced to implement the MWC Xarg scheme because
I've started using MiNT on my machine, and MiNT gleefully stomps all over
the user-accessable genealogy of each process.


        o /
>--------X--snip snip snip-------
        O \
/*
 * initargs(), for use with libc (xArgs and/or mwcArgs)
 */
#include <atari\osbind.h>

#define MWCARGS 1
#define XARGS 0

extern int _argc;		/* argc/argv as globals, for easy access */
extern char **_argv;

extern char *strtok();

#if MWCARGS
extern char *_getenv();
#endif

#if XARGS
#include <atari\xarg.h>

extern BASEPAGE *_base;
extern char *getenv();

char	xArgname[] = "xArg";	/* xArg environment (ick!) flag */
#endif

_initargs(tail, size)
char *tail;
{
    register char *p;
    register i;

#if XARGS
    if (p=getenv(xArgname)) {
	register struct xArg *xarg;
	register totalsize;
	register long addr;
	register char **args;

	for (addr=i=0; p[i]; i++)
	    if (p[i] >= '0' && p[i] <= '9')
		addr = (addr<<4L) + (p[i]-'0');
	    else if (p[i] >= 'A' && p[i] <= 'F')
		addr = (addr<<4L) + (p[i]-'A'+10);
	    else
		goto hackline;

#if 0
	if (addr&01L)		/* a little bit of address checking... */
	    goto hackline;
#endif
	xarg = (struct xArg *)addr;

	if (xarg->_xmagic == XMAGIC && xarg->_xparent == _base->p_parent) {
#ifdef CORRUPT		/* Use our parents dataspace - real nasty, eh? */
	    _argc = xarg->_xargc;
	    _argv = xarg->_xargv;
#else
	    /*
	     * Malloc() a bit of memory for the arguments
	     * to hide in...
	     */
	    totalsize = (1+xarg->_xargc) * sizeof(char *);
	    for (i=0; i<xarg->_xargc; i++)
		totalsize += 1+strlen(xarg->_xargv[i]);
	    
	    if ((_argv = (char **)Malloc((long)totalsize)) == 0L)
		_exit(-39);	/* Out of memory - bye... */
	    _argc = xarg->_xargc;

	    p = &_argv[1+xarg->_xargc];

	    for (args=xarg->_xargv, i=0; i<xarg->_xargc; i++) {
		strcpy(_argv[i] = p, *args);
		p += 1+strlen(*args++);
	    }
	    _argv[i] = 0L;
	    return;
#endif
	}
    }
#endif

#if MWCARGS
    /* reference Atari Corp's standard document for argument passing
     */
    if ((size = 127) && (p = _getenv("ARGV"))) {	/* mwc args here */
	register char *mwargv;

	/* truncate the environment here by making the A in ARGV into
	 * a null
	 */
	*p++ = 0;
	/* advance to the next argument
	 */
	while (*p++)
	    ;
	/* everything from this point on is arglist
	 */
	mwargv = p;
	_argc = 0;	/* always room for one null argument */
	/*
	 * scan the arglist in a particularly perverse way: using *p++
	 * to scan for nulls will always leave us on the character after
	 * the null: if that character is also null, we've hit the
	 * double-null that shows the end of the arglist.
	 */
	while (*p) {
	    while (*p++)
		;
	    _argc++;
	}
	if (_argv = (char **)Malloc((long)((1+_argc)*sizeof(char*)))) {
	    for (i=0, p=mwargv; *p; i++) {
		_argv[i] = p;
		while (*p++)
		    ;
	    }
	    _argv[i] = (char*)0;
	    return;
	}
	_exit(-39);	/* out of memory - bye! */
    }
#endif

hackline:
    {
	char *tmpargs[63];	/* 125 chars max in cmdline; 63 args... */

	/*tail[size] = 0;*/		/* paranoia... */
	for (i=1, p=strtok(tail, "\t "); p; p=strtok(0L, "\t "))
	    tmpargs[i++] = p;

	_argc = i;
	if ((_argv = (char **)Malloc((long)(1+i)*sizeof(char *))) == 0L)
	    _exit(-39);	/* Out of memory - bye... */
	_argv[i] = (char*)0;
	while (--i > 0)
	    _argv[i] = tmpargs[i];
	_argv[0] = "(none)";
    }
} /* initargs */

        o /
>--------X--snip snip snip-------
        O \

Note that the routine _getenv() works just like getenv(), except it
returns the start of the environment string (ie: given the environment
string "EDITOR=vi", getenv("EDITOR") returns a pointer to "vi" and
_getenv("EDITOR") returns a pointer to "EDITOR=vi".  _getenv() is
a internal routine to my libc, so you'll haveta poke around the
guts of your libc to find the corresponding routine, if it exists.

                          __
.david parsons            \/

orc@vpnet.chi.il.us (david parsons) (05/11/91)

In article <1991May11.134908.29488@vpnet.chi.il.us> orc@vpnet.chi.il.us (me!) babbles about extended argument passing:
	.
	.
	.
|#if MWCARGS
|    /* reference Atari Corp's standard document for argument passing
|     */
|    if ((size = 127) && (p = _getenv("ARGV"))) {	/* mwc args here */
               ^
               |
	This isn't what it should be.  put a == in there and you'll
defeat the evil initargs mangler.

mumble....

                          __
.david parsons            \/

ONM07@DMSWWU1A.BITNET (Julian F. Reschke) (05/13/91)

In article <2932@atari.UUCP>, apratt@atari.UUCP (Allan Pratt) says:
>[stuff deleted]
>XARG may or may not be endorsed by Atari Germany, but nobody here at Atari
>in Sunnyvale (to my knowledge) has endorsed it.  The reason I hate it is
>that you have to poke through your parent's data space to find your
>arguments, and that is a no-no.  It will be a much bigger no-no when memory
>protection and/or virtual memory come along.  ARGV has no such problems.
>
>I don't know where the ARGV spec is -- I'll try to dig up a copy of it
>and post it again.
>
>============================================
>Opinions expressed above do not necessarily     -- Allan Pratt, Atari Corp.
>reflect those of Atari Corp. or anyone else.      ...ames!atari!apratt

To clear up the confusion:

(1) The only extended argument passing scheme ever supported by Atari Germany
    is the ARGV specification from Ken Badertscher.
(2) Gemini 1.0 used Dale Schumachers xArgs methode, because at that time there
    was no other method.
(3) Newer Gemini versions use ARGV (as documented by Atari Corp.). xArgs is
    maintained for backward compatibility with older tools.
(4) The Gemini distribution contains the official ARGV documentation in
    sample\exarg.doc. This, I agree, should be 'ARGV.DOC'. Sigh!

___________________________ cut here _____________________________________
Julian F. Reschke, Hensenstr. 142, D-4400 Muenster, Phone: ++49 251 861241
fast eMail: ONM07@DMSWWU1A.BITNET,    slow: jr@ms.maus.de (++49 251 77216)
____________________ correct me if I'm wrong _____________________________

steve@thelake.mn.org (Steve Yelvington) (05/14/91)

[In article <2932@atari.UUCP>,
     apratt@atari.UUCP (Allan Pratt) writes ... ]

 > steve@thelake.mn.org (Steve Yelvington) writes:

(omitted)

 > This is a badly confused accounting of the extended-argument stuff going
 > around for TOS.  ARGV and MWC's trick are nearly identical; ARGV is a

Yup. I had XARG and ARGV reversed. Serves me right for playing with my
computer instead of getting enough sleep. :-)

Thanks for reposting the official description; it is the document
I was urging the original poster to obtain.

 ----
 Steve Yelvington, Marine on St. Croix, Minnesota, USA / steve@thelake.mn.org

bammi@acae127.cadence.com (Jwahar R. Bammi) (05/16/91)

In article <TyVo23w164w@ersys.uucp> ersys!mforget@nro.cs.athabascau.ca (Michel Forget) writes:

> The shells that suppot Zmodem, namely Zflash, have problems with the 
> command line as well.  They try to send as many as thirty-two files along 
> the command line, but the command line simply isn't big enough.  Not very 

this is a problem with the shell, not rz or sz in the zmdm
distribution. they dont pass args using established conventions.

recommended Xargs is not such a hot idea either in my opinion -- now
that we have a (liviable) standard, lets use it and make things just
that -- standard.
--
--
bang:   uunet!cadence!bammi			jwahar r. bammi
domain: bammi@cadence.com
GEnie:	J.Bammi
CIS:    71515,155