[Coco] c_prep 1.9 oddity

William Carlin whcarlinjr at gmail.com
Fri May 27 22:12:11 EDT 2016


I have noticed some strange things when using c_prep 1.9 to compile code
that I run across.

Here are the specifics:

C_PREP by Jim McDowell with version 1.9 updates by Gene Heskett

I am using cc version 2.5.2 to compile which uses the module named c_prep
as the preprocessor.  Below is the ident information so we know exactly
what version I am working with here.

(Plug for DriveWire here. Copied and pasted here from Windows telnet.)

DriveWire Telnet Server 4.3.3o

NitrOS-9/6309 Level 2 V3.3.0 on the Tandy Color Computer 3  2016/05/27
21:05:58


User name?: su

Process #03 logged on   2016/05/27 21:06:00
Welcome!

Welcome to NitrOS-9 Level 2 V3.3.0 HD6309 Enhanced
On the Tandy Color Computer 3

Shell+ v2.2a 16/05/27 21:06:00

{N2|03}/DD:ident -x c_prep

Header for:  c_prep
Module size: $520D    #21005
Module CRC:  $B07C0E (Good)
Hdr parity:  $77
Exec. off:   $0021    #33
Data Size:   $781E    #30750
Edition:     $09      #9
Ty/La At/Rv: $11 $81
Prog mod, 6809 obj, re-en, R/O


So I am running through some OS-9 software from a hard disk image named
'RTSI Archives 01 OS9 RSDOS.vhd' and come across the source code for a
utility called CUTS, version 1.6.  When cuts.c is run through c_prep 1.9 I
get an error.  The error is in shown here:

(Note: I use a different makefile than the one included in the RTSI archive
of CUTS 1.6)

[Error Output from c.pass1]
{N2|03}/DD/USR/SRC/CUTS/SRC:make
cc -dOS9 -T=/r0 -r=../RELS cuts.c

 cc version 2.5.2
'cuts.c'
   c_prep :   -DOS9 cuts.c
   c.pass1:   /r0/ctmp.12.m -o=/r0/ctmp.12.a
cuts.c : line 108  ****  undeclared variable  ****
names [ nfiles ] .file _type = 3 ;
                  ^
cuts.c : line 108  ****  struct member required  ****
names [ nfiles ] .file _type = 3 ;
                  ^
cuts.c : line 108  ****  ; expected  ****
names [ nfiles ] .file _type = 3 ;
                       ^
cuts.c : line 108  ****  undeclared variable  ****
names [ nfiles ] .file _type = 3 ;
[END]

c_prep 1.9 seems to be mangling the data type name "file_type" to "file
_type".

Here is the relevant source code:

[cuts.c]
...
typedef struct
{
   int  file_type;
   char *name;
} namestype;

main (argc,argv)
...
   int c, i, decoder=0, encoder=0, outputfile=0, nfiles=0;
...
   namestype names[MAXNAMES];
...
         case 'm':
            names[nfiles].file_type = MACHINEFILE;  /* Line 108 */
            names[nfiles++].name    = optarg;
            break;
...
[END]

[output from c_prep 1.9]
...
cuts.c
cuts_c
...
typedef struct
{
int file_type ;
char * name ;
} namestype ;
...
main ( argc , argv )
...
int c , i , decoder = 0 , encoder = 0 , outputfile = 0 , nfiles = 0 ;
...
namestype names [ 25 ] ;
...
case 'm' :
names [ nfiles ] .file _type = 3 ;
names [ nfiles ++ ] .name = optarg ;
break ;
...
[END]

[output from Microware C c.prep]
...
typedef struct
{
 int file_typ;
 char *name;
} namestyp;

main(argc,argv)
...
 int c, i, decoder=0, encoder=0, outputfi=0, nfiles=0;
...
 namestyp names[25];
...
case 'm':
names[nfiles].file_typ = 3;
names[nfiles++].name = optarg;
break;
...
[END]

The output from c_prep 1.9 adds a space to the variable name of the data
type "file_type" making it "file _type".  Microware C c.prep shortens the
variable name of the data type "file_type" to "file_typ" (shortened to 8
characters) but not adding in the space before the underscore.

Do any OS-9 C programmers have some insight into why c_prep 1.9 does this?
I had always assumed that it was a drop in replacement for the Microware
c.prep.

William Carlin


More information about the Coco mailing list