// reads sector data from the disk image into the view static imgtoolerr_t read_sector_data(HWND dialog, UINT32 track, UINT32 head, UINT32 sector) { imgtoolerr_t err; struct sectorview_info *info; UINT32 length; void *data; info = get_sectorview_info(dialog); err = imgtool_image_get_sector_size(info->image, track, head, sector, &length); if (err) goto done; data = alloca(length); err = imgtool_image_read_sector(info->image, track, head, sector, data, length); if (err) goto done; if (!hexview_setdata(GetDlgItem(dialog, IDC_HEXVIEW), data, length)) { err = IMGTOOLERR_OUTOFMEMORY; goto done; } info->track = track; info->head = head; info->sector = sector; done: return err; }
static int cmd_readsector(const struct command *c, int argc, char *argv[]) { imgtoolerr_t err; imgtool_image *img; imgtool_stream *stream = NULL; void *buffer = NULL; UINT32 size, track, head, sector; /* attempt to open image */ err = imgtool_image_open_byname(argv[0], argv[1], OSD_FOPEN_READ, &img); if (err) goto done; track = atoi(argv[2]); head = atoi(argv[3]); sector = atoi(argv[4]); err = imgtool_image_get_sector_size(img, track, head, sector, &size); if (err) goto done; buffer = malloc(size); if (!buffer) { err = IMGTOOLERR_OUTOFMEMORY; goto done; } err = imgtool_image_read_sector(img, track, head, sector, buffer, size); if (err) goto done; stream = stream_open(argv[5], OSD_FOPEN_WRITE); if (!stream) { err = (imgtoolerr_t)(IMGTOOLERR_FILENOTFOUND | IMGTOOLERR_SRC_NATIVEFILE); goto done; } stream_write(stream, buffer, size); done: if (buffer) free(buffer); if (stream) stream_close(stream); if (err) reporterror(err, c, argv[0], argv[1], NULL, NULL, 0); return err ? -1 : 0; }
static int cmd_readsector(const struct command *c, int argc, char *argv[]) { imgtoolerr_t err; imgtool_image *img; imgtool_stream *stream = nullptr; dynamic_buffer buffer; UINT32 size, track, head, sector; /* attempt to open image */ err = imgtool_image_open_byname(argv[0], argv[1], OSD_FOPEN_READ, &img); if (err) goto done; track = atoi(argv[2]); head = atoi(argv[3]); sector = atoi(argv[4]); err = imgtool_image_get_sector_size(img, track, head, sector, &size); if (err) goto done; buffer.resize(size); err = imgtool_image_read_sector(img, track, head, sector, &buffer[0], size); if (err) goto done; stream = stream_open(argv[5], OSD_FOPEN_WRITE); if (!stream) { err = (imgtoolerr_t)(IMGTOOLERR_FILENOTFOUND | IMGTOOLERR_SRC_NATIVEFILE); goto done; } stream_write(stream, &buffer[0], size); done: if (stream) stream_close(stream); if (err) reporterror(err, c, argv[0], argv[1], nullptr, nullptr, nullptr); return err ? -1 : 0; }