*** empty log message ***
authorkeie <none@none>
Mon, 7 Jan 1985 13:08:48 +0000 (13:08 +0000)
committerkeie <none@none>
Mon, 7 Jan 1985 13:08:48 +0000 (13:08 +0000)
mach/6500/dl/dl.c [new file with mode: 0644]

diff --git a/mach/6500/dl/dl.c b/mach/6500/dl/dl.c
new file mode 100644 (file)
index 0000000..0ee9eb2
--- /dev/null
@@ -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);
+}