GLK: SCOTT: Implement allocNextDirTs

This commit is contained in:
Avijeet
2022-06-23 20:11:01 +02:00
committed by Eugene Sandulenko
parent 1209ca3072
commit 2cf15d1289
2 changed files with 53 additions and 1 deletions
+50 -1
View File
@@ -130,7 +130,44 @@ RawDirEntry *findFileEntry(DiskImage *di, byte *rawPattern, int type) {
/* allocate next available directory block */
TrackSector allocNextDirTs(DiskImage *di) {
return TrackSector();
byte *p;
int spt;
TrackSector ts, lastTs;
if (diTrackBlocksFree(di, di->_bam._track)) {
lastTs._track = di->_bam._track;
lastTs._sector = 0;
if ((di->_type == D64) || (di->_type == D71)) {
ts._track = 18;
ts._sector = 1;
} else {
ts = nextTsInChain(di, lastTs);
}
while (ts._track) {
lastTs = ts;
ts = nextTsInChain(di, ts);
}
ts._track = lastTs._track;
ts._sector = lastTs._sector + 3;
spt = diSectorsPerTrack(di->_type, ts._track);
for (;; ts._sector = (ts._sector + 1) % spt) {
if (diIsTsFree(di, ts)) {
diAllocTs(di, ts);
p = diGetTsAddr(di, lastTs);
p[0] = ts._track;
p[1] = ts._sector;
p = diGetTsAddr(di, ts);
memset(p, 0, 256);
p[1] = 0xff;
di->_modified = 1;
return ts;
}
}
} else {
ts._track = 0;
ts._sector = 0;
return ts;
}
}
RawDirEntry *allocFileEntry(DiskImage *di, byte *rawName, int type) {
@@ -505,6 +542,18 @@ TrackSector diGetDirTs(DiskImage *di) {
return newTs;
}
int diTrackBlocksFree(DiskImage *di, int track) {
return 0;
}
int diIsTsFree(DiskImage *di, TrackSector ts) {
return 0;
}
void diAllocTs(DiskImage *di, TrackSector ts) {
}
/* convert to rawname */
int diRawnameFromName(byte *rawname, const char *name) {
int i;
+3
View File
@@ -103,6 +103,9 @@ int diTracks(ImageType type);
int diGetBlockNum(ImageType type, TrackSector ts);
TrackSector diGetDirTs(DiskImage *di);
int diTrackBlocksFree(DiskImage *di, int track);
int diIsTsFree(DiskImage *di, TrackSector ts);
void diAllocTs(DiskImage *di, TrackSector ts);
int diRawnameFromName(byte *rawname, const char *name);