int tape_seek_to_next_file(tape_image_t *tape_image, unsigned int allow_rewind) { switch (tape_image->type) { case TAPE_TYPE_T64: return t64_seek_to_next_file((t64_t *)tape_image->data, allow_rewind); case TAPE_TYPE_TAP: return tap_seek_to_next_file((tap_t *)tape_image->data, allow_rewind); } return -1; }
/* Find the next Tape Header and load it onto the Tape Buffer. */ int tape_find_header_trap(void) { int err; BYTE *cassette_buffer; cassette_buffer = mem_ram + (mem_read(buffer_pointer_addr) | (mem_read((WORD)(buffer_pointer_addr + 1)) << 8)); if (tape_image_dev1->name == NULL || tape_image_dev1->type != TAPE_TYPE_T64) { err = 1; } else { t64_t *t64; t64_file_record_t *rec; t64 = (t64_t *)tape_image_dev1->data; rec = NULL; err = 0; do { if (t64_seek_to_next_file(t64, 1) < 0) { err = 1; break; } rec = t64_get_current_file_record(t64); } while (rec->entry_type != T64_FILE_RECORD_NORMAL); if (!err) { cassette_buffer[CAS_TYPE_OFFSET] = machine_tape_type_default(); cassette_buffer[CAS_STAD_OFFSET] = rec->start_addr & 0xff; cassette_buffer[CAS_STAD_OFFSET + 1] = rec->start_addr >> 8; cassette_buffer[CAS_ENAD_OFFSET] = rec->end_addr & 0xff; cassette_buffer[CAS_ENAD_OFFSET + 1] = rec->end_addr >> 8; memcpy(cassette_buffer + CAS_NAME_OFFSET, rec->cbm_name, T64_REC_CBMNAME_LEN); } }