Related articles |
---|
Why some PC C compilers are useless sjg@zen.void.oz.au (1992-05-07) |
Re: Why some PC C compilers are useless cliffc@rice.edu (1992-05-08) |
Re: Why some PC C compilers are useless sjg@melb.bull.oz.au (1992-05-11) |
Re: Why some PC C compilers are useless Zoid@mindlink.bc.ca (1992-05-11) |
Re: Why some PC C compilers are useless bobmon@sandshark.cs.indiana.edu (Bob Montante) (1992-05-12) |
Re: Why some PC C compilers are useless sjg@melb.bull.oz.au (1992-05-13) |
Re: Why some PC C compilers are useless sdm7g@aemsun.med.Virginia.EDU (1992-05-14) |
Newsgroups: | comp.compilers |
From: | sjg@melb.bull.oz.au (Simon J Gerraty) |
Followup-To: | comp.lang.c |
Keywords: | C, MSDOS |
Organization: | Bull HN Information Systems Australia |
References: | 92-05-067 |
Date: | Wed, 13 May 1992 04:48:27 GMT |
In 92-05-067 Zoid@mindlink.bc.ca (Dave Kirsch) writes:
>>[I run DOS under Unix here and can second the complaints about programs that
>>freak out when they encounter newlines without carriage returns. I can have
>>some sympathy for dusty old programs, but not much for current supported ones
>>when they do this. -John]
>One problem of this is the standard i/o routines provided in the C
>libraries by most (if not all) DOS compilers don't handle lines without
>carriage returns. Sure, you could use read() and write() and write your
>own 'read a line from the file' function that understands cr/lf and just
>lf, but you shouldn't have to. The stdio functions take care of that for
>you.
No. All you need to do is: (... means insert your own code here :-)
if ((fh = fopen(name, "rb")) != NULL)
{
...
int c;
while ((c = getc(fh)) != EOF)
{
...
switch (c)
{
case '\r':
if ((c = getc(fh)) == '\n')
return EOL;
ungetc(c, fh);
return CR;
break;
case '\n':
return EOL;
break;
...
Of course that code won't do anything useful. But the point is that the
compiler should simply read the file in DOS's binary mode, and ignore a CR
(esp. if followed by a LF). The details are left up to the implementor.
You could use lex, but my experience is that hand written lexical
analyzers are smaller and faster which are both important for a DOS C
compiler.
--
Simon J. Gerraty <sjg@melb.bull.oz.au> (Work)
<sjg@zen.void.oz.au> (Home)
[I've sent followups to comp.lang.c, since this is no longer a general
compilers topic. -John]
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.