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