diff --git a/include/dicformat/context.h b/include/dicformat/context.h index 713547d..4571095 100644 --- a/include/dicformat/context.h +++ b/include/dicformat/context.h @@ -57,7 +57,7 @@ typedef struct dicformatContext size_t mappedMemoryDdtSize; uint32_t *sectorPrefixDdt; uint32_t *sectorSuffixDdt; - + GeometryBlockHeader geometryBlock; } dicformatContext; typedef struct dataLinkedList diff --git a/src/open.c b/src/open.c index 07d509e..58af65a 100644 --- a/src/open.c +++ b/src/open.c @@ -458,8 +458,32 @@ void *open(const char *filepath) } } break; - case GeometryBlock: - // TODO + // Logical geometry block. It doesn't have a CRC coz, well, it's not so important + case GeometryBlock:readBytes = fread(&ctx->geometryBlock, sizeof(GeometryBlockHeader), 1, ctx->imageStream); + + if(readBytes != sizeof(GeometryBlockHeader)) + { + fprintf(stderr, "Could not read geometry block, continuing..."); + break; + } + + if(ctx->geometryBlock.identifier == GeometryBlock) + { + fprintf(stderr, + "libdicformat: Geometry set to %d cylinders %d heads %d sectors per track", + ctx->geometryBlock.cylinders, + ctx->geometryBlock.heads, + ctx->geometryBlock.sectorsPerTrack); + // TODO: ImageInfo + /* + imageInfo.Cylinders = geometryBlock.cylinders; + imageInfo.Heads = geometryBlock.heads; + imageInfo.SectorsPerTrack = geometryBlock.sectorsPerTrack; + */ + } + else + memset(&ctx->geometryBlock, 0, sizeof(GeometryBlockHeader)); + break; case MetadataBlock: // TODO