|
|
1.1 root 1: int floppydes;
2: char *flopname = "/dev/floppy";
3:
4: main(argc,argv)
5: char *argv[];
6: {
7: static char buff[512];
8: register count = 77 * 26 * 128, startad = -26 * 128;
9: register int n, file;
10:
11: if(argc==2) {
12: printf("Halftime!\n");
13: if(strcmp(argv[1],"-h")!=0)
14: printf("Bad halftime option.\n"),
15: exit(1);
16: if((file = open("floppy",0))<0)
17: printf("failed to open floppy image"),
18: exit(1);
19: goto halftime;
20: }
21: file = creat("floppy",0666);
22: close(file);
23: file = open("floppy",2);
24: if(file < 0) exit(1);
25: for( ; count > 0 ; count -= 512) {
26: n = count > 512 ? 512 : count ;
27: lread(startad,n,buff);
28: write(file,buff,n);
29: startad += 512;
30: }
31: halftime:
32: printf("Change Floppy, Hit return when done.\n");
33: gets(buff);
34: lseek(file,0,0);
35: count = 77 * 26 * 128; startad = -26 * 128;
36: for( ; count > 0 ; count -= 512) {
37: n = count > 512 ? 512 : count ;
38: read(file,buff,n);
39: lwrite(startad,n,buff);
40: startad += 512;
41: }
42: }
43: rt_init()
44: {
45: static initized = 0;
46: int mode = 2;
47:
48: if(initized) return;
49: initized = 1;
50: if((floppydes = open(flopname,mode)) < 0) {
51: printf("Floppy open failed\n");
52: exit(1);
53: }
54: }
55:
56: long trans(logical)
57: register int logical;
58: {
59: /* Logical to physical adress translation */
60: register int sector, bytes, track;
61:
62: logical += 26 * 128;
63: bytes = (logical & 127);
64: logical >>= 7;
65: sector = logical % 26;
66: if(sector >= 13)
67: sector = sector *2 +1;
68: else
69: sector *= 2;
70: sector += 26 + ((track = (logical / 26)) - 1) * 6;
71: sector %= 26;
72: return( (((track *26) + sector) << 7) + bytes);
73: }
74: lread(startad,count,obuff)
75: register startad, count;
76: register char * obuff;
77: {
78: long trans();
79: extern floppydes;
80: rt_init();
81: while( (count -= 128) >= 0) {
82: lseek(floppydes, trans(startad), 0);
83: read(floppydes,obuff,128);
84: obuff += 128;
85: startad += 128;
86: }
87: }
88: lwrite(startad,count,obuff)
89: register startad, count;
90: register char * obuff;
91: {
92: long trans();
93: extern floppydes;
94: rt_init();
95: while( (count -= 128) >= 0) {
96: lseek(floppydes, trans(startad), 0);
97: write(floppydes,obuff,128);
98: obuff += 128;
99: startad += 128;
100: }
101: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.