[comp.sys.cbm] C-ASSM Bug

mark@unisec.usi.com (Mark Rinfret) (05/24/87)

Let me start with an apology.  As Frank Prindle stated, I really should
not have posted all of the stuff I did to comp.sys.cbm.  I underestimated 
the total size of everything and I forgot to consider sites
that are probably overwhelmed by large amounts of traffic from unexpected
sources (read: groups).  Also, I 'hang out' in comp.sys.amiga where it is 
customary (though possibly inappropriate) to post sources, executables, etc.
directly to that group.   I'm sorry if I caused anyone (besides Frank) to 
break into a new pack of Rolaids.


Now, with regards to compiling the assembler and ra on Unix, my recommendation
is this: DON'T!  At least, don't expect to succeed without some pain.  After
several bug reports came back, I tried it myself for the first time (the Unix
additions were not mine) and failed miserably.  A couple of nasty bugs also
surfaced which are not revealed by C-Power (this stuff DOES WORK when compiled
and linked under C-Power on the C64!).  There are some diffs at the end of
this message that should be applied to the module assm5.c to correct some
structure reference errors.  

Apparently, C-Power lets you misuse structure member (element?) names 
across structure definitions.  That is, a member name from one structure
can be applied to another.  For instance, the following is possible:

typedef structure xyz {
	structure xyz *next;
    blah.blah.blah
    } xyzrec;

typedef structure abc {
	structure abc *abc_next;
    blah.blah.blah
    } abcrec;

abcrec *ptr;

ptr = ptr->next; /* should be abc_next */


This is all well and good as long as the member offsets are the same.  When
I discovered this problem, I went back through the source and "uniqified"
most of the member names - looks like I forgot a few.

Another problem that arises when compiling on Unix has to do with some
unfortunate implementation dependencies built (not designed) into C-ASSM.
On C-Power, int, unsigned, pointer, are all 16 bits.  There are at least
a couple of cases where this will cause problems on Unix machines having
32 bit pointers.  Also, the C-Power include file <strings.h> may have a
different name on other systems (<string.h> on SYSV here).  The module
openfile.c should not be included in the Unix-based version.  Unless you
really want the ability to do cross-development on Unix, I'd recommend
that you forget it.  I may move the stuff over to my Amiga and work out the
kinks, but I'm not promising any support.

To those of you who sent me mail regarding C-ASSM, RA and MRterm, thanks
for your feedback.  I attempted to respond to your messages but it appears
that our mailer is brain-damaged at the moment.  One last note on C-Power:

About a week ago, I read a message from Steve Punter on ProLine's BBS
(416-276-6811) stating that Spinnaker Software (address unknown) had taken
over sales (and marketing?) of C-Power.  For those of you wanting to play
with C on your C64 or 64C computer, this is a dandy little development
system.


# The following diffs should be applied to C-ASSM source module assm5.c.
# A bug in C-Power (revealed by compiling on Unix) allows use of illegal
# structure member names.
148c148
<   nxtptr = ptr->next;
---
>   nxtptr = ptr->ext_next;
182c182
<     nxtptr = ptr->next;
---
>     nxtptr = ptr->ext_next;
213a214
>   char *malloc();
-- 
| Mark R. Rinfret, SofTech, Inc.		mark@unisec.usi.com |
| Guest of UniSecure Systems, Inc., Newport, RI                     |
| UUCP:  {gatech|mirror|cbosgd|uiucdcs|ihnp4}!rayssd!unisec!mark    |
| work: (401)-849-4174	home: (401)-846-7639                        |