136 lines
5.2 KiB
C++
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
|