|
|
1.1 ! root 1: #include "../h/param.h" ! 2: #include "../h/ino.h" ! 3: #include "../h/inode.h" ! 4: #include "../h/filsys.h" ! 5: #include "../h/dir.h" ! 6: #include "../h/vm.h" ! 7: #include <a.out.h> ! 8: #include "saio.h" ! 9: ! 10: char line[100]; ! 11: ! 12: main() ! 13: { ! 14: int i; ! 15: ! 16: printf("\nBoot\n"); ! 17: do { ! 18: printf(": "); gets(line); ! 19: i = open(line,0); ! 20: } while (i < 0); ! 21: ! 22: copyunix(i); ! 23: } ! 24: ! 25: copyunix(io) ! 26: register io; ! 27: { ! 28: struct exec x; ! 29: register int i; ! 30: char *addr; ! 31: ! 32: i = read(io, (char *)&x, sizeof x); ! 33: if (i != sizeof x || x.a_magic != 0410) ! 34: _stop("Bad format\n"); ! 35: printf("%d", x.a_text); ! 36: if (read(io, (char *)0, x.a_text) != x.a_text) ! 37: goto shread; ! 38: addr = (char *)x.a_text; ! 39: while ((int)addr & CLOFSET) ! 40: *addr++ = 0; ! 41: printf("+%d", x.a_data); ! 42: if (read(io, addr, x.a_data) != x.a_data) ! 43: goto shread; ! 44: addr += x.a_data; ! 45: printf("+%d", x.a_bss); ! 46: x.a_bss += 128*512; /* slop */ ! 47: for (i = 0; i < x.a_bss; i++) ! 48: *addr++ = 0; ! 49: x.a_entry &= 0x7fffffff; ! 50: printf(" start 0x%x\n", x.a_entry); ! 51: (*((int (*)()) x.a_entry))(); ! 52: _exit(); ! 53: shread: ! 54: _stop("Short read\n"); ! 55: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.