int fs_d81_bamfindfreeblock (uchar blocks[3][256], int *track, int *sector) { /* find a free block on a D81 */ int i; /* first 1/2 of the disk */ for (*track = 39; *track > 0; (*track)--) if (blocks[1][10 + (*track) * 6]) { /* free block here */ for (i = 1; i < 6; i++) if (blocks[1][10 + (*track) * 6 + i]) { /* free sector here */ *sector = (i - 1) * 8 + firsthighbit (blocks[1][10 + (*track) * 6 + i]); return (0); } /* directory error */ set_error (71, 0, 0); return (-1); } /* second 1/2 of the disk */ for (*track = 41; *track < 81; (*track)++) if (blocks[2][10 + (*track - 40) * 6]) { /* free block here */ for (i = 1; i < 6; i++) if (blocks[2][10 + (*track - 40) * 6 + i]) { /* free sector here */ *sector = (i - 1) * 8 + firsthighbit (blocks[2][10 + (*track - 40) * 6 + i]); return (0); } /* directory error */ set_error (71, 0, 0); return (-1); } *track = -1; *sector = -1; return (-1); }
int fs_dhd_bamfindfreeblock (uchar blocks[34][256], int *track, int *sector) { /* find a free block on a DHD */ int i, bn, ofs; for (*track = 1; *track <= blocks[2][8]; (*track)++) { bn = 2 + (*track / 8); ofs = 32 * (*track & 7); for (i = 0; i < 32; i++) if (blocks[bn][ofs + i]) { /* free block here */ *sector = i * 8 + 7 - firsthighbit (blocks[bn][ofs + i]); return (0); } } *track = -1; *sector = -1; return (-1); }