static int iec_open_read_directory(vdrive_t *vdrive, unsigned int secondary, cbmdos_cmd_parse_t *cmd_parse) { int retlen; bufferinfo_t *p = &(vdrive->buffers[secondary]); if (secondary > 0) { return iec_open_read_sequential(vdrive, secondary, vdrive->Header_Track, vdrive->Header_Sector); } vdrive_alloc_buffer(p, BUFFER_DIRECTORY_READ); retlen = vdrive_dir_first_directory(vdrive, cmd_parse->parsecmd, cmd_parse->parselength, CBMDOS_FT_DEL, p); p->length = (unsigned int)retlen; p->bufptr = 0; return SERIAL_OK; }
static int iec_open_read(vdrive_t *vdrive, unsigned int secondary) { int type; unsigned int track, sector; bufferinfo_t *p = &(vdrive->buffers[secondary]); BYTE *slot = p->slot; if (!slot) { vdrive_iec_close(vdrive, secondary); vdrive_command_set_error(vdrive, CBMDOS_IPE_NOT_FOUND, 0, 0); return SERIAL_ERROR; } type = slot[SLOT_TYPE_OFFSET] & 0x07; track = (unsigned int)slot[SLOT_FIRST_TRACK]; sector = (unsigned int)slot[SLOT_FIRST_SECTOR]; /* Del, Seq, Prg, Usr (Rel not supported here). */ if (type != CBMDOS_FT_REL) return iec_open_read_sequential(vdrive, secondary, track, sector); return SERIAL_ERROR; }