*** empty log message ***
This commit is contained in:
parent
c2229e5c60
commit
b4ad7c46da
164
mach/6500/dl/dl.c
Normal file
164
mach/6500/dl/dl.c
Normal file
|
@ -0,0 +1,164 @@
|
|||
/*
|
||||
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
||||
*
|
||||
* This product is part of the Amsterdam Compiler Kit.
|
||||
*
|
||||
* Permission to use, sell, duplicate or disclose this software must be
|
||||
* obtained in writing. Requests for such permissions may be sent to
|
||||
*
|
||||
* Dr. Andrew S. Tanenbaum
|
||||
* Wiskundig Seminarium
|
||||
* Vrije Universiteit
|
||||
* Postbox 7161
|
||||
* 1007 MC Amsterdam
|
||||
* The Netherlands
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sgtty.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
|
||||
struct sgttyb tty;
|
||||
|
||||
#define DATTYPE 0
|
||||
#define EOFTYPE 1
|
||||
#define SEGTYPE 2
|
||||
#define PCTYPE 3
|
||||
|
||||
#define MAXBYTE 0x18
|
||||
|
||||
int check;
|
||||
int records;
|
||||
int echo;
|
||||
int bytecount;
|
||||
int ttyfd;
|
||||
|
||||
char *progname;
|
||||
|
||||
char hex[] = "0123456789ABCDEF";
|
||||
|
||||
main(argc,argv) char **argv; {
|
||||
register nd,pc,sg,osg,first;
|
||||
register char *s;
|
||||
|
||||
progname = argv[0];
|
||||
if (argc > 3)
|
||||
fatal("usage: %s [object [tty]]\n",argv[0]);
|
||||
s = "a.out";
|
||||
if (argc >= 2)
|
||||
s = argv[1];
|
||||
if (freopen(s,"r",stdin) == NULL)
|
||||
fatal("can't open %s",s);
|
||||
ttyfd = 1;
|
||||
first = 1; osg = 0;
|
||||
for (;;) {
|
||||
pc = get2c(stdin);
|
||||
if (feof(stdin))
|
||||
break;
|
||||
sg = get2c(stdin);
|
||||
nd = get2c(stdin);
|
||||
if (first) {
|
||||
first = 0;
|
||||
}
|
||||
assert(sg == osg);
|
||||
while (nd > MAXBYTE) {
|
||||
data(MAXBYTE,pc);
|
||||
nd -= MAXBYTE;
|
||||
pc += MAXBYTE;
|
||||
}
|
||||
if (nd > 0)
|
||||
data(nd,pc);
|
||||
assert(feof(stdin) == 0);
|
||||
}
|
||||
if (first == 0)
|
||||
eof();
|
||||
if (echo)
|
||||
for (;;)
|
||||
reply();
|
||||
}
|
||||
|
||||
data(nd,pc) {
|
||||
|
||||
newline(nd,pc,DATTYPE);
|
||||
do
|
||||
byte(getc(stdin));
|
||||
while (--nd);
|
||||
endline();
|
||||
}
|
||||
|
||||
eof() {
|
||||
|
||||
newline(0,records,EOFTYPE);
|
||||
endline();
|
||||
}
|
||||
|
||||
newline(n,pc,typ) {
|
||||
|
||||
records++;
|
||||
put(';');
|
||||
byte(n);
|
||||
check = 0;
|
||||
bytecount = n+4;
|
||||
word(pc);
|
||||
}
|
||||
|
||||
endline() {
|
||||
|
||||
word(check);
|
||||
put('\r');
|
||||
put('\n');
|
||||
assert(bytecount == 0);
|
||||
put(0);
|
||||
put(0);
|
||||
put(0);
|
||||
put(0);
|
||||
put(0);
|
||||
put(0);
|
||||
}
|
||||
|
||||
word(w) {
|
||||
|
||||
byte(w>>8);
|
||||
byte(w);
|
||||
}
|
||||
|
||||
byte(b) {
|
||||
|
||||
b &= 0377;
|
||||
check += b;
|
||||
--bytecount;
|
||||
put(hex[(b>>4) & 017]);
|
||||
put(hex[b & 017]);
|
||||
}
|
||||
|
||||
put(c) {
|
||||
|
||||
write(ttyfd,&c,1);
|
||||
}
|
||||
|
||||
reply() {
|
||||
register i;
|
||||
int c;
|
||||
|
||||
if (echo == 0)
|
||||
return;
|
||||
i = read(ttyfd,&c,1);
|
||||
assert(i > 0);
|
||||
write(1,&c,1);
|
||||
}
|
||||
|
||||
get2c(f) FILE *f; {
|
||||
register c;
|
||||
|
||||
c = getc(f);
|
||||
return((getc(f) << 8) | c);
|
||||
}
|
||||
|
||||
fatal(s,a) {
|
||||
|
||||
fprintf(stderr,"%s: ",progname);
|
||||
fprintf(stderr,s,a);
|
||||
fprintf(stderr,"\n");
|
||||
exit(-1);
|
||||
}
|
Loading…
Reference in a new issue