Initial commit
This commit is contained in:
169
engines/glk/tads/tads2/line_source_file.h
Normal file
169
engines/glk/tads/tads2/line_source_file.h
Normal file
@@ -0,0 +1,169 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GLK_TADS_TADS2_LINE_SOURCE_FILE
|
||||
#define GLK_TADS_TADS2_LINE_SOURCE_FILE
|
||||
|
||||
#include "glk/tads/tads2/lib.h"
|
||||
#include "glk/tads/tads2/debug.h"
|
||||
#include "glk/tads/tads2/line_source.h"
|
||||
#include "glk/tads/tads2/object.h"
|
||||
|
||||
namespace Glk {
|
||||
namespace TADS {
|
||||
namespace TADS2 {
|
||||
|
||||
struct tokpdef;
|
||||
|
||||
/* maximum number of pages of debugging records we can keep */
|
||||
#define LINFPGMAX 128
|
||||
|
||||
/*
|
||||
* executable line information structure: this record relates one
|
||||
* executable line to the object containing the p-code, and the offset
|
||||
* in the object of the p-code for the start of the line
|
||||
*/
|
||||
struct linfinfo {
|
||||
/*
|
||||
* OPCLINE data (file seek position or line number, depending on how
|
||||
* the game was compiled: -ds -> file seek offset, -ds2 -> line
|
||||
* number)
|
||||
*/
|
||||
ulong fpos;
|
||||
|
||||
/* object number */
|
||||
objnum objn;
|
||||
|
||||
/* offset from start of code */
|
||||
uint ofs;
|
||||
};
|
||||
|
||||
/*
|
||||
* file line source
|
||||
*/
|
||||
struct linfdef {
|
||||
lindef linflin; /* superclass data */
|
||||
osfildef *linffp; /* file pointer for this line source */
|
||||
char linfbuf[100]; /* buffer for the line contents */
|
||||
int linfbufnxt; /* offset in buffer of start of next line */
|
||||
int linfnxtlen; /* length of data after linfbufnxt */
|
||||
ulong linfnum; /* current line number */
|
||||
ulong linfseek; /* seek position of current line */
|
||||
mcmcxdef *linfmem; /* memory manager context */
|
||||
mcmon linfpg[LINFPGMAX]; /* pages for debugging records */
|
||||
ulong linfcrec; /* number of debugger records written so far */
|
||||
char linfnam[1]; /* name of file being read */
|
||||
};
|
||||
|
||||
/* initialize a file line source, opening the file for the line source */
|
||||
linfdef *linfini(mcmcxdef *mctx, errcxdef *errctx, const char *filename,
|
||||
int flen, tokpdef *path, int must_find_file,
|
||||
int new_line_records);
|
||||
|
||||
/* initialize a pre-allocated linfdef, skipping debugger page setup */
|
||||
void linfini2(mcmcxdef *mctx, linfdef *linf,
|
||||
const char *filename, int flen, osfildef *fp, int new_line_records);
|
||||
|
||||
/* get next line from line source */
|
||||
int linfget(lindef *lin);
|
||||
|
||||
/* generate printable rep of current position in source (for errors) */
|
||||
void linfppos(lindef *lin, char *buf, uint bufl);
|
||||
|
||||
/* close line source */
|
||||
void linfcls(lindef *lin);
|
||||
|
||||
/* generate source-line debug instruction operand */
|
||||
void linfglop(lindef *lin, uchar *buf);
|
||||
|
||||
/* generate new-style source-line debug instructino operand */
|
||||
void linfglop2(lindef *lin, uchar *buf);
|
||||
|
||||
/* save line source to binary (.gam) file */
|
||||
int linfwrt(lindef *lin, osfildef *fp);
|
||||
|
||||
/* load a file-line-source from binary (.gam) file */
|
||||
int linfload(osfildef *fp, dbgcxdef *dbgctx, errcxdef *ec,
|
||||
tokpdef *path);
|
||||
|
||||
/* add a debugger line record for the current line */
|
||||
void linfcmp(lindef *lin, uchar *buf);
|
||||
|
||||
/* find nearest line record to a file seek location */
|
||||
void linffind(lindef *lin, char *buf, objnum *objp, uint *ofsp);
|
||||
|
||||
/* activate line source for debugging */
|
||||
void linfact(lindef *lin);
|
||||
|
||||
/* disactivate line source */
|
||||
void linfdis(lindef *lin);
|
||||
|
||||
/* get current seek position */
|
||||
void linftell(lindef *lin, uchar *pos);
|
||||
|
||||
/* seek */
|
||||
void linfseek(lindef *lin, uchar *pos);
|
||||
|
||||
/* read */
|
||||
int linfread(lindef *lin, uchar *buf, uint siz);
|
||||
|
||||
/* add a signed delta to a seek position */
|
||||
void linfpadd(lindef *lin, uchar *pos, long delta);
|
||||
|
||||
/* query whether at top of file */
|
||||
int linfqtop(lindef *lin, uchar *pos);
|
||||
|
||||
/* read one line at current seek position */
|
||||
int linfgets(lindef *lin, uchar *buf, uint bufsiz);
|
||||
|
||||
/* get name of line source */
|
||||
void linfnam(lindef *lin, char *buf);
|
||||
|
||||
/* get the current line number */
|
||||
ulong linflnum(lindef *lin);
|
||||
|
||||
/* go to top or bottom */
|
||||
void linfgoto(lindef *lin, int where);
|
||||
|
||||
/* return the current offset in the line source */
|
||||
long linfofs(lindef *lin);
|
||||
|
||||
/* renumber an object */
|
||||
void linfren(lindef *lin, objnum oldnum, objnum newnum);
|
||||
|
||||
/* delete an object */
|
||||
void linfdelnum(lindef *lin, objnum objn);
|
||||
|
||||
/* copy line records to an array of linfinfo structures */
|
||||
void linf_copy_linerecs(linfdef *linf, linfinfo *info);
|
||||
|
||||
/* debugging echo */
|
||||
#ifdef DEBUG
|
||||
# define LINFDEBUG(x) x
|
||||
#else /* DEBUG */
|
||||
# define LINFDEBUG(x)
|
||||
#endif /* DEBUG */
|
||||
|
||||
} // End of namespace TADS2
|
||||
} // End of namespace TADS
|
||||
} // End of namespace Glk
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user