Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!apple!tahoe!wheeler!mikew
From: mikew@wheeler.wrcr.unr.edu (Mike Whitbeck)
Newsgroups: comp.sys.atari.st
Subject: putchar() getchar() problem?
Summary: problem with extra 0x0D chars written under MWC
Keywords: extra CR's, MWC
Message-ID: <2829@tahoe.unr.edu>
Date: 26 Jul 89 21:43:58 GMT
Sender: news@tahoe.unr.edu
Reply-To: mikew@wheeler.UUCP (Mike Whitbeck)
Distribution: usa
Organization: DRI-WRC Reno
Lines: 74
HELP !
I seem to get extra \r's from putchar()!!!! (or getchar()?)
I am using MWC 3.0 to port BR's splay compression program to the
ST. The program works fine under UNIX(SUN) and IDRIS (PE7300)
but on the ST I get extra 0x0D's (\r) in the output!
I put a counter in bit_output() immediately after the putchar()
(see below) and the loop is executed the correct no. of
times (e.g. N times but the file written contains more than
N bytes the extra bytes are 0x0D's).
[ To get the unsplay program to work I had to replace getchar()
with Cnecin(). Typically
splay < rawbinary > splaycompressed
unsplay < splaycompressed > rawbinary
This makes for smaller files than unix compress when working
with raw binary (poorer performance with ASCII files). ]
{I am using Mark William's C 3.0 and their msh.prg (a shell)}.
WHAT'S WRONG?
-------------------partial listing------------------------
/*
Splay Tree Compression
from: "Application Of Splay Trees To Data Compression"
by Douglas W. Jones, Communications of the ACM, August 1988
implemented in C by Bodo Rueskamp,
*/
/* splay tree compress */
#include
int left[257], right[257], up[514];
static int bitnum = 0;
void bit_output(bit)
int bit;
{
static int byte = 0;
byte = (byte << 1) | bit;
++bitnum;
if (bitnum == 8) {
putchar(byte); <--------- main output from here
/* a counter placed here indicates the correct no. of passes
through this loop, the bytes written are also correct except for
a few extra 0x0D's interspersed */
byte = 0;
bitnum = 0;
}
}
...
stuff deleted for brevity
...
main()
{
int c;
putchar(0x1f); <------ magic number ok
putchar('S'); <------ magic number ok
initialize();
while ((c = getchar()) != EOF)
compress(c); <----- calls bit_output() to write
compressed data to stdout
..... stuff deleted....
return(0);
}