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