rwb@druxu.UUCP (BlackR) (10/25/86)
Upon reading the code for the shar/unshar program recently posted to the
net, I noticed the warnings about the Lattice C libraries. Since Lattice
has released version 3.03.04 (the comments apply to version 3.03.02), I
felt I had better post a copy of a letter I sent to Lattice regarding
problems in the newer library. The 20 file problem has been fixed, but
some other problems have been introduced that will affect compiling shar.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Sept. 13, 1986
METACOMCO
5353E Scotts Valley Drive
Scotts Valley, CA 95066
Dear Sirs:
I have your Lattice C compiler, version 3.03.04, serial number
xxxx for the Atari 520ST and have some comments on the product.
First, the bugs.
Try running the following program (enclosed is the output).
/*This program tests a bug in the Lattice compiler, version 3.03.04*/
#define SIZE 12
main()
{
char db[SIZE], *tmp;
int r1, r2, r3, r4, zero=0;
tmp=db+SIZE-1;
r1=db-tmp;
r2=tmp-db;
r3=db-tmp+zero;
r4=tmp-db+zero;
printf(" db-tmp=%x tmp-db=%x\n db-tmp+0=%x tmp-db+0=%x\n",
r1,r2,r3,r4);
r1=0+db-tmp;
r2=0+tmp-db;
printf(" 0+db-tmp=%x 0+tmp-db=%x\n", r1, r2);
}
Here is the output:
db-tmp=0 tmp-db=FFF09042
db-tmp+0=F6FBE tmp-db+0=B
0+db-tmp=F6FBE 0+tmp-db=FFF09042
I find the results to be somewhat inconsistent and confusing,
even for C! It looks like there is a serious problem with
pointer arithmetic.
Try to write anything to stderr (printf(stderr,...). or
puts(stderr,..), or even write(2,...)). The cursor drops down a
couple lines and everything stops. I found touching control C
at least got me out of the program. Version 3.03.02 did not
have this problem.
I opened an ASCII text file for level 1 input (open() and
read()) and read it in. I got EOF before the file had been
completely read. Setting ORAW in the open mode cleared things
up.
In the area of clarification, I think there are a few things
that must be made explicit in your manual:
I/O redirection on a program's command line must be done
before any commands to the program (close examination of
your manual shows this, but many people familiar with
systems like UNIX(tm), don't have that restriction).
> redirects stdout and < redirects stdin (see page 14)
There can be no spaces between the redirection symbol and
the file name.
When compiling a program that uses AES and VDI calls
through the Lattice library, do not use the -n option (31
character symbol names), because the library only has 8
chararacter symbols; thus, the entries won't be found.
Finally, a couple of questions. How do you pass definitions to
a compile? The -D option can set flags for #ifdef and #ifndef,
but the compiler chokes on parsing -dsymbol=value. Last, but
not least, when is the next improved version due?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The important point is that shar writes to stderr. I found that changing
the fprintf(stderr,...) calls to cprintf(...) and fputs(...,stderr) to
cputs(...) solved things.
One last question for anyone on the net. I heard at a users group meeting
that a patch exists for the Lattice library that permits I/O redirection
under the Beckemeyer Micro C-Shell. Does anyone have that patch and if so,
could I get a copy?
Rodney Black
AT&T Information Systems
11900 North Pecos
Denver, CO 80234
..ihnp4!druxu!rwb