home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / standalone / boot.c next >
Encoding:
C/C++ Source or Header  |  1998-02-03  |  1.4 KB  |  87 lines

  1. #include <sys/param.h>
  2. #include <sys/ino.h>
  3. #include <sys/inode.h>
  4. #include <sys/filsys.h>
  5. #include <sys/dir.h>
  6. #include <saio.h>
  7.  
  8.  
  9. char line[100];
  10. extern struct devsw devsw[];
  11.  
  12. main()
  13. {
  14. int i;
  15.     segflag = 2;
  16.  
  17.  
  18.     printf("New Boot, known devices are ");
  19.     for (i=0; devsw[i].dv_name; i++) printf("%s ", devsw[i].dv_name);
  20.     printf("\n");
  21.     do {
  22.         printf(": "); gets(line);
  23.         i = open(line,0);
  24.     } while (i < 0);
  25.  
  26.  
  27.     copyunix(i);
  28.  
  29. }
  30.  
  31.  
  32. copyunix(io)
  33. register io;
  34. {
  35. register addr,s;
  36. long phys;
  37. unsigned    txtsiz,datsiz,bsssiz;
  38. int    magic;
  39.  
  40.  
  41.     lseek(io, (off_t)0, 0);
  42.     magic = getw(io);
  43.     txtsiz = getw(io);
  44.     datsiz = getw(io);
  45.     bsssiz = getw(io);
  46.  
  47.  
  48.     switch (magic) {
  49.     case 0411:
  50.         setseg(0);
  51.         lseek(io, (long)(020+txtsiz), 0);
  52.  
  53.         for(addr=0; addr!=datsiz; addr+=2)  {
  54.             mtpi(getw(io),addr);
  55.         }
  56.  
  57.         clrseg(addr,bsssiz);
  58.  
  59.         phys = (long)datsiz + (long)bsssiz + 63L;
  60.         phys =/ 64;
  61.         setseg((int)phys);
  62.  
  63.         lseek(io, 020L, 0);
  64.  
  65.         for(addr=0; addr!=txtsiz; addr+=2) {
  66.             mtpi(getw(io),addr);
  67.         }
  68.         return;
  69.     case 0407:
  70.         setseg(0);
  71.         /*
  72.          * space over the header. We do this instead of seeking
  73.          * because the input might be a tape which doesn't know 
  74.          * how to seek.
  75.          */
  76.         getw(io); getw(io); getw(io); getw(io);
  77.         phys = txtsiz+datsiz;
  78.         for (addr = 0; addr != phys; addr += 2)
  79.             mtpi(getw(io),addr);
  80.         clrseg(addr, bsssiz);
  81.         return;
  82.     default:
  83.         printf("Can't load %o files\n", magic);
  84.         exit(1);
  85.     }
  86. }
  87.