[Coco] Microware C Compiler port

Gene Heskett gene.heskett at verizon.net
Wed Jan 21 20:49:41 EST 2009


On Wednesday 21 January 2009, Bob Devries wrote:
>According to the documentation, if you want to use printf() to print longs
>or floats, the following needs to be added somewhere at the beginning of the
>code, to let the linker know to use the correct library routine:
>
>    pffinit(); /* for floats */
>    pflinit(); /* for longs */
>
Thank you Bob, I had forgotten that detail.

>--
>Regards, Bob Devries, Dalby, Queensland, Australia
>
>Isaiah 50:4 The sovereign Lord has given me
>the capacity to be his spokesman,
>so that I know how to help the weary.
>
>website: http://www.home.gil.com.au/~bdevasl
>my blog: http://bdevries.invigorated.org/
>
>----- Original Message -----
>From: "John W. Linville" <linville at tuxdriver.com>
>To: "CoCoList for Color Computer Enthusiasts" <coco at maltedmedia.com>
>Sent: Thursday, January 22, 2009 9:53 AM
>Subject: Re: [Coco] Microware C Compiler port
>
>> On Wed, Jan 21, 2009 at 07:05:23AM -0500, Steven Hirsch wrote:
>>> On Tue, 20 Jan 2009, John W. Linville wrote:
>>>> Some of the changes are simple, such as changing "%6D" to "%6d",
>>>> implementing a utility function ("sig_err"), and fixing an actual
>>>> syntax error.  That was enough to get the program basically running,
>>>> but it was producing 0 counts for lines, words, and characters.
>>>>
>>>> The original sources had those count vars defined as long.  Changing
>>>> them to int yielded correct results, except that it doesn't take much
>>>> to overflow the character count... :-(
>>>>
>>>> Did this compiler have problems with long in the original OS-9/6809
>>>> version?  It is bad enough to not handle long, but to compile it
>>>> without complaint and simply not work seems rather  wrong.  FWIW,
>>>> changing to 'long int' didn't change anything.
>>
>> So it turns-out that leaving the vars declared as long and simply
>> casting them to int in the printf arguments yields the same results
>> as simply declaring them as int in the first place.  To me this
>> suggests that the basic code generation for the long type is working.
>> Perhaps there is some different conversion format needed for the
>> Microware printf to handle long?
>>
>>>> Still, it _is_ cool to compile for OS-9 on my Linux box... :-)
>>>
>>> Thanks, John.  The feedback is appreciated.  I'm going to gather input
>>> and hopefully work on a more refined release for the near future.
>>
>> Sounds great.  I'd love to hear about your future plans.
>>
>> John
>>
>> P.S.  New diff from the original Minix sources inlined below...
>>
>> --- minix/commands/wc.c 1987-01-02 04:16:15.000000000 -0500
>> +++ wc.c 2009-01-21 18:47:27.000000000 -0500
>> @@ -1,9 +1,15 @@
>> /* wc - count lines, words and characters Author: David Messer */
>>
>> -#include "stdio.h"
>> -#define isdigit(c) (c >= '0' && c <= '9)
>> +#include <stdio.h>
>> +#define isdigit(c) (c >= '0' && c <= '9')
>> #define isspace(c) (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c
>> == '\r')
>>
>> +std_err(str)
>> +char *str;
>> +{
>> + fprintf(stderr, "%s", str);
>> +}
>> +
>> /*
>>  *
>>  * Usage:  wc [-lwc] [names]
>> @@ -79,9 +85,9 @@ char *argv[];
>>   /* Check to see if input comes from std input. */
>>   if (k >= argc) {
>>  count();
>> - if(lflag) printf(" %6D", lcount);
>> - if(wflag) printf(" %6D", wcount);
>> - if(cflag) printf(" %6D", ccount);
>> + if(lflag) printf(" %6d", (int)lcount);
>> + if(wflag) printf(" %6d", (int)wcount);
>> + if(cflag) printf(" %6d", (int)ccount);
>>  printf(" \n");
>>  fflush(stdout);
>>  exit(0);
>> @@ -99,18 +105,18 @@ char *argv[];
>>  } else {
>>  /* Next file has been opened as std input. */
>>  count();
>> - if(lflag) printf(" %6D", lcount);
>> - if(wflag) printf(" %6D", wcount);
>> - if(cflag) printf(" %6D", ccount);
>> + if(lflag) printf(" %6d", (int)lcount);
>> + if(wflag) printf(" %6d", (int)wcount);
>> + if(cflag) printf(" %6d", (int)ccount);
>>  printf(" %s\n", argv[k]);
>>  }
>>  k++;
>>   }
>>
>>   if(tflag) {
>> - if(lflag) printf(" %6D", ltotal);
>> - if(wflag) printf(" %6D", wtotal);
>> - if(cflag) printf(" %6D", ctotal);
>> + if(lflag) printf(" %6d", (int)ltotal);
>> + if(wflag) printf(" %6d", (int)wtotal);
>> + if(cflag) printf(" %6d", (int)ctotal);
>>  printf(" total\n");
>>   }
>>
>> --
>> John W. Linville Linux should be at the core
>> linville at tuxdriver.com of your literate lifestyle.
>>
>> --
>> Coco mailing list
>> Coco at maltedmedia.com
>> http://five.pairlist.net/mailman/listinfo/coco
>
>--
>Coco mailing list
>Coco at maltedmedia.com
>http://five.pairlist.net/mailman/listinfo/coco



-- 
Cheers, Gene
"There are four boxes to be used in defense of liberty:
 soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
Department chairmen never die, they just lose their faculties.



More information about the Coco mailing list