- mode = 0;
- if((floppydes = open(defdev,mode)) < 0)
- dbprintf("Floppy open failed\n");
- if(flag('c')==0)
- lread(6*RT_BLOCK,2*RT_BLOCK,(char *)&rt_dir);
-
- rt_entsiz = 2*rt_dir.rt_axhead.rt_entpad + 14;
- rt_entsiz = 14;
- rt_last = ((char *) &rt_dir) + 10 + 1014/rt_entsiz*rt_entsiz;
- for(de=((char *)&rt_dir)+10; de <= rt_last; de += rt_entsiz) {
- if(rt(de)->rt_stat==RT_ESEG) break;
+ mode = "r";
+ if ((temp_floppydes = fopen(defdev, mode)) == NULL) {
+ perror(defdev);
+ exit(1);
+ } else
+ floppydes = fileno(temp_floppydes);
+ if (!flag(c)) {
+ lread(6*RT_BLOCK, 2*RT_BLOCK, (char *)&rt_dir[0]);
+ dirnum = rt_dir[0].rt_axhead.rt_numseg;
+ if (dirnum > RT_DIRSIZE) {
+ fprintf(stderr,"arff: too many directory segments\n");
+ exit(1);
+ }
+ for (i = 1; i < dirnum; i++)
+ lread((6+2*i)*RT_BLOCK, 2*RT_BLOCK, (char *)&rt_dir[i]);
+ } else
+ dirnum = 1;
+
+ rt_entsiz = 2*rt_dir[0].rt_axhead.rt_entpad + 14;
+ rt_entsiz = 14; /* assume rt_entpad = 0 ??? */
+ rt_last = ((char *) &rt_dir[0]) + 10 + 1014/rt_entsiz*rt_entsiz;
+ rt_nleft = 0;
+
+ for (i = 0; i < dirnum; i++) {
+ last = rt_last + i*2*RT_BLOCK;
+ for (de = ((char *)&rt_dir[i])+10; de <= last; de += rt_entsiz)
+ if (rt(de)->rt_stat == RT_ESEG)
+ break;
+ rt_curend[i] = rt(de);
+ rt_nleft += (last-de)/rt_entsiz;