int loadTD0(Computer* comp, const char* name, int drv) { Floppy* flp = comp->dif->fdc->flop[drv & 3]; FILE* file = fopen(name, "rb"); if (!file) return ERR_CANT_OPEN; int err = ERR_OK; td0Head hd; fread(&hd, sizeof(td0Head), 1, file); if (strncmp(hd.sign, "td", 2) && strncmp(hd.sign, "TD", 2)) { err = ERR_TD0_SIGN; } else if ((hd.dens != 0) || (hd.sides > 2)) { err = ERR_TD0_TYPE; } else if (hd.ver < 0x14) { err = ERR_TD0_VERSION; } else { if (strncmp(hd.sign,"TD",2)) { // 1 on td (packed) LHADecoderType* decType; LHADecoder* dec = NULL; decType = lha_decoder_for_name("-lh1-"); dec = lha_decoder_new(decType, fGetData, file, -1); doTD0(flp, lhaDepack, dec, hd.flag & 0x80); lha_decoder_free(dec); } else { doTD0(flp, fGetData, file, hd.flag & 0x80); } flp->path = (char*)realloc(flp->path,sizeof(char) * (strlen(name) + 1)); strcpy(flp->path,name); flp->insert = 1; flp->changed = 0; } fclose(file); return err; }
LHADecoder *lha_basic_reader_decode(LHABasicReader *reader) { LHADecoderType *dtype; if (reader->curr_file == NULL) { return NULL; } // Look up the decoder to use for this compression method. dtype = lha_decoder_for_name(reader->curr_file->compress_method); if (dtype == NULL) { return NULL; } // Create decoder. return lha_decoder_new(dtype, decoder_callback, reader, reader->curr_file->length); }