home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Source Code 1992 March
/
Source_Code_CD-ROM_Walnut_Creek_March_1992.iso
/
unix_c
/
cpm
/
load.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-03-21
|
1KB
|
77 lines
/*
* load - convert a hex file to a com file
*/
#include <stdio.h>
unsigned char checksum;
unsigned char getbyte () {
register int c;
unsigned char x;
c = getchar ();
if ('0' <= c && c <= '9')
x = c - '0';
else
if ('A' <= c && c <= 'F')
x = c - 'A' + 10;
else
goto funny;
x <<= 4;
c = getchar ();
if ('0' <= c && c <= '9')
x |= c - '0';
else
if ('A' <= c && c <= 'F')
x |= c - 'A' + 10;
else {
funny:
fprintf (stderr, "Funny hex letter %c\n", c);
exit (2);
}
checksum += x;
return x;
}
main () {
register unsigned i, n;
char c, buf[64];
unsigned type;
do {
do {
c = getchar ();
if (c == EOF) {
fprintf (stderr, "Premature EOF colon missing\n");
exit (1);
}
} while (c != ':');
checksum = 0;
n = getbyte ();
(void) getbyte ();
(void) getbyte ();
switch (type = getbyte ()) {
case 1:
break;
case 0:
for (i = 0; i < n; i++)
buf[i] = getbyte ();
fwrite (buf, 1, n, stdout);
break;
default:
fprintf (stderr, "Funny record type %d\n");
exit (1);
}
(void) getbyte ();
if (checksum != 0) {
fprintf (stderr, "Checksum error");
exit (2);
}
} while (type != 1);
}