|
|
1.1 ! root 1: /* ! 2: * rp07rest: quick and dirty to copy 4 reels of tape to RP07 ! 3: * Tape errors are not tolerated. Input errors are ignored. ! 4: */ ! 5: ! 6: #include <stdio.h> ! 7: #include <assert.h> ! 8: ! 9: #define TAPE "/dev/rmt2" /* tape to use */ ! 10: #define SECTSIZE 512 /* bytes per sector */ ! 11: #define NSECT 1008000 /* sectors per RP07 */ ! 12: #define TRKSIZE 50 /* sectors per track */ ! 13: #define NREELS 4 /* reels of tape in the dump */ ! 14: #define BPT (NSECT/(NREELS*TRKSIZE)) /* buffer loads per tape */ ! 15: ! 16: char buf[SECTSIZE*TRKSIZE]; ! 17: ! 18: main (argc, argv) ! 19: int argc; ! 20: char **argv; ! 21: { ! 22: register int disk, tape, n, i; ! 23: int reel; ! 24: ! 25: if (argc != 2) { ! 26: fprintf (stderr, "arg count"); ! 27: exit (1); ! 28: } ! 29: ! 30: disk = open (argv[1], 1); ! 31: if (disk < 0) { ! 32: perror (argv[1]); ! 33: exit (1); ! 34: } ! 35: ! 36: for (reel = 1; reel <= NREELS; reel++) { ! 37: ! 38: do { ! 39: char answer[500]; ! 40: do { ! 41: printf ("Have you mounted volume %d? ", reel); ! 42: gets (answer); ! 43: } while (strcmp (answer, "yes") != 0); ! 44: ! 45: tape = open (TAPE, 0); ! 46: if (tape < 0) ! 47: perror (TAPE); ! 48: } while (tape < 0); ! 49: ! 50: for (i = 0; i < BPT; i++) { ! 51: n = read (tape, buf, sizeof(buf)); ! 52: if (n != sizeof (buf)) { ! 53: perror (TAPE); ! 54: exit (1); ! 55: } ! 56: n = write (disk, buf, sizeof(buf)); ! 57: if (n != sizeof (buf)) { ! 58: perror (argv[1]); ! 59: exit (1); ! 60: } ! 61: } ! 62: ! 63: close (tape); ! 64: } ! 65: ! 66: printf ("End of restore\n"); ! 67: exit (0); ! 68: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.