6 * File system for old tap tapes.
10 unsigned char name[32];
11 unsigned char mode[1];
13 unsigned char size[2];
14 unsigned char tmod[4];
15 unsigned char taddress[2];
16 unsigned char unused[20];
17 unsigned char checksum[2];
22 long cvtime(unsigned char *);
34 tapefile = open(name, OREAD);
36 error("Can't open argument file");
37 read(tapefile, dir, sizeof dir);
38 for (i=0, tpp=&dir[8]; i<192; i++, tpp++) {
39 unsigned char *sp = (unsigned char *)tpp;
41 for (j=0; j<32; j++, sp+=2)
42 cksum += sp[0] + (sp[1]<<8);
45 print("cksum failure\n");
48 if (tpp->name[0]=='\0')
50 f.addr = tpp->taddress[0] + (tpp->taddress[1]<<8);
53 f.size = tpp->size[0] + (tpp->size[1]<<8);
54 f.mdate = cvtime(tpp->tmod);
55 f.mode = tpp->mode[0]&0777;
56 f.uid = tpp->uid[0]&0377;
57 isabs = tpp->name[0]=='/';
58 f.name = (char *)tpp->name+isabs;
60 print("%s mode %o uid %d, %s", f.name, f.mode, f.uid, ctime(f.mdate));
66 cvtime(unsigned char *tp)
68 unsigned long t = (tp[1]<<24)+(tp[0]<<16)+(tp[3]<<8)+(tp[2]<<0);
95 doread(Ram *r, vlong off, long cnt)
97 if (cnt>sizeof(buffer))
98 print("count too big\n");
99 seek(tapefile, 512*r->addr+off, 0);
100 read(tapefile, buffer, cnt);
105 dowrite(Ram *r, char *buf, long off, long cnt)
107 USED(r); USED(buf); USED(off); USED(cnt);