Files
2026-02-02 04:50:13 +01:00

136 lines
5.2 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/*
* file i/o interface
*/
#ifndef GLK_TADS_TADS2_FILE_IO
#define GLK_TADS_TADS2_FILE_IO
#include "glk/tads/tads2/lib.h"
#include "glk/tads/tads2/memory_cache_loader.h"
#include "glk/tads/tads2/object.h"
namespace Glk {
namespace TADS {
namespace TADS2 {
/* forward declarations */
struct voccxdef;
struct tokpdef;
struct tokthdef;
struct tokcxdef;
/* load-on-demand context (passed in by mcm in load callback) */
struct fiolcxdef {
osfildef *fiolcxfp; /* file pointer of load file */
errcxdef *fiolcxerr; /* error handling context */
ulong fiolcxst; /* starting offset in file */
uint fiolcxflg; /* flags from original load file */
uint fiolcxseed; /* fioxor seed */
uint fiolcxinc; /* fioxor increment */
};
/* write game to binary file */
void fiowrt(struct mcmcxdef *mctx, voccxdef *vctx,
struct tokcxdef *tokctx, struct tokthdef *tab,
uchar *fmts, uint fmtl, char *fname, uint flags, objnum preinit,
int extc, uint prpcnt, char *filever);
/* flag values for use with fiowrt */
#define FIOFSYM 0x01 /* include symbol table in output file */
#define FIOFLIN 0x02 /* include source file tracking information */
#define FIOFPRE 0x04 /* preinit needs to be run after reading game */
#define FIOFCRYPT 0x08 /* "encrypt" objects prior to writing them */
#define FIOFBIN 0x10 /* writing precompiled header */
#define FIOFFAST 0x20 /* fast-load records are in file */
#define FIOFCASE 0x40 /* case folding was turned on in original compile */
#define FIOFLIN2 0x80 /* new-style line records */
/* read game from binary file; sets up loader callback context */
void fiord(mcmcxdef *mctx, voccxdef *vctx, tokcxdef *tctx, const char *fname,
const char *exename, fiolcxdef *setupctx, objnum *preinit, uint *flagp,
tokpdef *path, uchar **fmtsp, uint *fmtlp, uint *pcntptr, int flags,
appctxdef *appctx, char *argv0);
/* shut down load-on-demand subsystem, close load file */
void fiorcls(fiolcxdef *ctx);
/* loader callback - load an object on demand */
void OS_LOADDS fioldobj(void *ctx, mclhd handle, uchar *ptr, ushort siz);
/*
* Save a game - returns TRUE on failure. We'll save the file to
* 'fname'. 'game_fname' is the name of the game file; if this is not
* null, we'll save it to the saved game file so that the player can
* later start the game by specifying only the saved game file to the
* run-time. 'game_fname' can be null, in which case we'll omit the
* game file information.
*/
int fiosav(voccxdef *vctx, char *fname, char *game_fname);
/*
* fiorso() result codes
*/
#define FIORSO_SUCCESS 0 /* success */
#define FIORSO_FILE_NOT_FOUND 1 /* file not found */
#define FIORSO_NOT_SAVE_FILE 2 /* not a saved game file */
#define FIORSO_BAD_FMT_VSN 3 /* incompatible file format version */
#define FIORSO_BAD_GAME_VSN 4 /* file saved by another game or version */
#define FIORSO_READ_ERROR 5 /* error reading from the file */
#define FIORSO_NO_PARAM_FILE 6 /* no parameter file (for restore(nil)) */
/* restore a game - returns TRUE on failure */
int fiorso(voccxdef *vctx, char *fname);
/*
* Look in a saved game file to determine if it has information on which
* GAM file created it. If the GAM file information is available, this
* routine returns true and stores the game file name in the given
* buffer; if the information isn't available, we'll return false.
*/
int fiorso_getgame(char *saved_file, char *buf, size_t buflen);
/* encrypt/decrypt an object */
void fioxor(uchar *p, uint siz, uint seed, uint inc);
/* strings stored in binary game file for identification and validation */
/* file header string */
#define FIOFILHDR "TADS2 bin\012\015\032"
/* resource file header string */
#define FIOFILHDRRSC "TADS2 rsc\012\015\032"
/* CURRENT file format version string */
#define FIOVSNHDR "v2.2.0"
/* other file format versions that can be READ by this version */
#define FIOVSNHDR2 "v2.0.0"
#define FIOVSNHDR3 "v2.0.1"
} // End of namespace TADS2
} // End of namespace TADS
} // End of namespace Glk
#endif