[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