/** * Searches levels folder for LOF files and adds them to campaign levels list. */ TbBool find_and_load_lof_files(void) { struct TbFileFind fileinfo; unsigned char *buf; char *fname; short result; int rc; long i; SYNCDBG(16,"Starting"); buf = LbMemoryAlloc(MAX_LIF_SIZE); if (buf == NULL) { ERRORLOG("Can't allocate memory for .LOF files parsing."); return false; } result = false; fname = prepare_file_path(FGrp_VarLevels,"*.lof"); rc = LbFileFindFirst(fname, &fileinfo, 0x21u); while (rc != -1) { fname = prepare_file_path(FGrp_VarLevels,fileinfo.Filename); i = LbFileLength(fname); if ((i < 0) || (i >= MAX_LIF_SIZE)) { WARNMSG("File '%s' too long (Max size %d)", fileinfo.Filename, MAX_LIF_SIZE); } else if (LbFileLoadAt(fname, buf) != i) { WARNMSG("Unable to read .LOF file, '%s'", fileinfo.Filename); } else { buf[i] = '\0'; if (level_lof_file_parse(fileinfo.Filename, (char *)buf, i)) result = true; } rc = LbFileFindNext(&fileinfo); } LbFileFindEnd(&fileinfo); LbMemoryFree(buf); return result; }
short read_continue_game_part(unsigned char *buf,long pos,long buf_len) { TbFileHandle fh; short result; char *fname; fname = prepare_file_path(FGrp_Save,continue_game_filename); if (LbFileLength(fname) != sizeof(struct Game)) { SYNCDBG(7,"No correct .SAV file; there's no continue"); return false; } fh = LbFileOpen(fname,Lb_FILE_MODE_READ_ONLY); if (fh == -1) { SYNCDBG(7,"Can't open .SAV file; there's no continue"); return false; } LbFileSeek(fh, pos, Lb_FILE_SEEK_BEGINNING); result = (LbFileRead(fh, buf, buf_len) == buf_len); LbFileClose(fh); return result; }