SCI: Renamed kernel_dereference_* to kernelDeref*, and added kernelDerefString
svn-id: r43907
This commit is contained in:
parent
0c7093e05c
commit
b391f08b46
10 changed files with 98 additions and 97 deletions
|
@ -741,11 +741,11 @@ static void *_kernel_dereference_pointer(SegManager *segManager, reg_t pointer,
|
|||
|
||||
}
|
||||
|
||||
byte *kernel_dereference_bulk_pointer(SegManager *segManager, reg_t pointer, int entries) {
|
||||
byte *kernelDerefBulkPtr(SegManager *segManager, reg_t pointer, int entries) {
|
||||
return (byte*)_kernel_dereference_pointer(segManager, pointer, entries, 1);
|
||||
}
|
||||
|
||||
reg_t *kernel_dereference_reg_pointer(SegManager *segManager, reg_t pointer, int entries) {
|
||||
reg_t *kernelDerefRegPtr(SegManager *segManager, reg_t pointer, int entries) {
|
||||
return (reg_t*)_kernel_dereference_pointer(segManager, pointer, entries, sizeof(reg_t));
|
||||
}
|
||||
|
||||
|
|
|
@ -246,9 +246,10 @@ bool is_object(SegManager *segManager, reg_t obj);
|
|||
* if not enugh entries were available.
|
||||
* reg_t dereferenciation also assures alignedness of data.
|
||||
*/
|
||||
reg_t *kernel_dereference_reg_pointer(SegManager *segManager, reg_t pointer, int entries);
|
||||
byte *kernel_dereference_bulk_pointer(SegManager *segManager, reg_t pointer, int entries);
|
||||
#define kernel_dereference_char_pointer(state, pointer, entries) (char*)kernel_dereference_bulk_pointer(state, pointer, entries)
|
||||
reg_t *kernelDerefRegPtr(SegManager *segManager, reg_t pointer, int entries);
|
||||
byte *kernelDerefBulkPtr(SegManager *segManager, reg_t pointer, int entries);
|
||||
#define kernelDerefCharPtr(state, pointer, entries) ((char*)kernelDerefBulkPtr(state, pointer, entries))
|
||||
#define kernelDerefString(state, pointer) ((char*)kernelDerefBulkPtr(state, pointer, 0))
|
||||
|
||||
/******************** Priority macros/functions ********************/
|
||||
/**
|
||||
|
|
|
@ -197,7 +197,7 @@ void file_open(EngineState *s, const char *filename, int mode) {
|
|||
}
|
||||
|
||||
reg_t kFOpen(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *name = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *name = kernelDerefString(s->segmentManager, argv[0]);
|
||||
int mode = argv[1].toUint16();
|
||||
|
||||
debug(3, "kFOpen(%s,0x%x)", name, mode);
|
||||
|
@ -250,7 +250,7 @@ void fwrite_wrapper(EngineState *s, int handle, char *data, int length) {
|
|||
|
||||
reg_t kFPuts(EngineState *s, int, int argc, reg_t *argv) {
|
||||
int handle = argv[0].toUint16();
|
||||
char *data = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *data = kernelDerefString(s->segmentManager, argv[1]);
|
||||
|
||||
fwrite_wrapper(s, handle, data, strlen(data));
|
||||
return s->r_acc;
|
||||
|
@ -307,7 +307,7 @@ static void fseek_wrapper(EngineState *s, int handle, int offset, int whence) {
|
|||
}
|
||||
|
||||
reg_t kFGets(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *dest = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *dest = kernelDerefString(s->segmentManager, argv[0]);
|
||||
int maxsize = argv[1].toUint16();
|
||||
int handle = argv[2].toUint16();
|
||||
|
||||
|
@ -320,7 +320,7 @@ reg_t kFGets(EngineState *s, int, int argc, reg_t *argv) {
|
|||
* Writes the cwd to the supplied address and returns the address in acc.
|
||||
*/
|
||||
reg_t kGetCWD(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *targetaddr = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *targetaddr = kernelDerefString(s->segmentManager, argv[0]);
|
||||
|
||||
// We do not let the scripts see the file system, instead pretending
|
||||
// we are always in the same directory.
|
||||
|
@ -356,8 +356,8 @@ reg_t kDeviceInfo(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
switch (mode) {
|
||||
case K_DEVICE_INFO_GET_DEVICE:
|
||||
input_s = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
output_s = kernel_dereference_char_pointer(s->segmentManager, argv[2], 0);
|
||||
input_s = kernelDerefString(s->segmentManager, argv[1]);
|
||||
output_s = kernelDerefString(s->segmentManager, argv[2]);
|
||||
assert(input_s != output_s);
|
||||
|
||||
strcpy(output_s, "/");
|
||||
|
@ -365,15 +365,15 @@ reg_t kDeviceInfo(EngineState *s, int, int argc, reg_t *argv) {
|
|||
break;
|
||||
|
||||
case K_DEVICE_INFO_GET_CURRENT_DEVICE:
|
||||
output_s = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
output_s = kernelDerefString(s->segmentManager, argv[1]);
|
||||
|
||||
strcpy(output_s, "/");
|
||||
debug(3, "K_DEVICE_INFO_GET_CURRENT_DEVICE() -> %s", output_s);
|
||||
break;
|
||||
|
||||
case K_DEVICE_INFO_PATHS_EQUAL: {
|
||||
char *path1_s = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *path2_s = kernel_dereference_char_pointer(s->segmentManager, argv[2], 0);
|
||||
char *path1_s = kernelDerefString(s->segmentManager, argv[1]);
|
||||
char *path2_s = kernelDerefString(s->segmentManager, argv[2]);
|
||||
debug(3, "K_DEVICE_INFO_PATHS_EQUAL(%s,%s)", path1_s, path2_s);
|
||||
|
||||
return make_reg(0, Common::matchString(path2_s, path1_s, true));
|
||||
|
@ -381,7 +381,7 @@ reg_t kDeviceInfo(EngineState *s, int, int argc, reg_t *argv) {
|
|||
break;
|
||||
|
||||
case K_DEVICE_INFO_IS_FLOPPY:
|
||||
input_s = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
input_s = kernelDerefString(s->segmentManager, argv[1]);
|
||||
debug(3, "K_DEVICE_INFO_IS_FLOPPY(%s)", input_s);
|
||||
return NULL_REG; /* Never */
|
||||
|
||||
|
@ -390,8 +390,8 @@ reg_t kDeviceInfo(EngineState *s, int, int argc, reg_t *argv) {
|
|||
** for more information on our workaround for this.
|
||||
*/
|
||||
case K_DEVICE_INFO_GET_SAVECAT_NAME: {
|
||||
output_s = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
game_prefix = kernel_dereference_char_pointer(s->segmentManager, argv[2], 0);
|
||||
output_s = kernelDerefString(s->segmentManager, argv[1]);
|
||||
game_prefix = kernelDerefString(s->segmentManager, argv[2]);
|
||||
|
||||
sprintf(output_s, "__throwaway");
|
||||
debug(3, "K_DEVICE_INFO_GET_SAVECAT_NAME(%s) -> %s", game_prefix, output_s);
|
||||
|
@ -399,8 +399,8 @@ reg_t kDeviceInfo(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
break;
|
||||
case K_DEVICE_INFO_GET_SAVEFILE_NAME: {
|
||||
output_s = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
game_prefix = kernel_dereference_char_pointer(s->segmentManager, argv[2], 0);
|
||||
output_s = kernelDerefString(s->segmentManager, argv[1]);
|
||||
game_prefix = kernelDerefString(s->segmentManager, argv[2]);
|
||||
int savegame_id = argv[3].toUint16();
|
||||
sprintf(output_s, "__throwaway");
|
||||
debug(3, "K_DEVICE_INFO_GET_SAVEFILE_NAME(%s,%d) -> %s", game_prefix, savegame_id, output_s);
|
||||
|
@ -428,7 +428,7 @@ reg_t kGetSaveDir(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
|
||||
reg_t kCheckFreeSpace(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *path = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *path = kernelDerefString(s->segmentManager, argv[0]);
|
||||
|
||||
debug(3, "kCheckFreeSpace(%s)", path);
|
||||
// We simply always pretend that there is enough space.
|
||||
|
@ -486,7 +486,7 @@ void listSavegames(Common::Array<SavegameDesc> &saves) {
|
|||
}
|
||||
|
||||
reg_t kCheckSaveGame(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *game_id = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *game_id = kernelDerefString(s->segmentManager, argv[0]);
|
||||
int savedir_nr = argv[1].toUint16();
|
||||
|
||||
debug(3, "kCheckSaveGame(%s, %d)", game_id, savedir_nr);
|
||||
|
@ -522,10 +522,10 @@ reg_t kCheckSaveGame(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
|
||||
reg_t kGetSaveFiles(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *game_id = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *nametarget = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *game_id = kernelDerefString(s->segmentManager, argv[0]);
|
||||
char *nametarget = kernelDerefString(s->segmentManager, argv[1]);
|
||||
reg_t nametarget_base = argv[1];
|
||||
reg_t *nameoffsets = kernel_dereference_reg_pointer(s->segmentManager, argv[2], 0);
|
||||
reg_t *nameoffsets = kernelDerefRegPtr(s->segmentManager, argv[2], 0);
|
||||
|
||||
debug(3, "kGetSaveFiles(%s,%s)", game_id, nametarget);
|
||||
|
||||
|
@ -572,11 +572,11 @@ reg_t kGetSaveFiles(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
|
||||
reg_t kSaveGame(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *game_id = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *game_id = kernelDerefString(s->segmentManager, argv[0]);
|
||||
int savedir_nr = argv[1].toUint16();
|
||||
int savedir_id; // Savegame ID, derived from savedir_nr and the savegame ID list
|
||||
char *game_description = kernel_dereference_char_pointer(s->segmentManager, argv[2], 0);
|
||||
char *version = argc > 3 ? strdup(kernel_dereference_char_pointer(s->segmentManager, argv[3], 0)) : NULL;
|
||||
char *game_description = kernelDerefString(s->segmentManager, argv[2]);
|
||||
char *version = argc > 3 ? strdup(kernelDerefString(s->segmentManager, argv[3])) : NULL;
|
||||
|
||||
debug(3, "kSaveGame(%s,%d,%s,%s)", game_id, savedir_nr, game_description, version);
|
||||
s->game_version = version;
|
||||
|
@ -645,7 +645,7 @@ reg_t kSaveGame(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
|
||||
reg_t kRestoreGame(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *game_id = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *game_id = kernelDerefString(s->segmentManager, argv[0]);
|
||||
int savedir_nr = argv[1].toUint16();
|
||||
|
||||
debug(3, "kRestoreGame(%s,%d)", game_id, savedir_nr);
|
||||
|
@ -684,7 +684,7 @@ reg_t kRestoreGame(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
|
||||
reg_t kValidPath(EngineState *s, int, int argc, reg_t *argv) {
|
||||
const char *path = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
const char *path = kernelDerefString(s->segmentManager, argv[0]);
|
||||
|
||||
// FIXME: For now, we only accept the (fake) root dir "/" as a valid path.
|
||||
s->r_acc = make_reg(0, 0 == strcmp(path, "/"));
|
||||
|
@ -735,7 +735,7 @@ void DirSeeker::nextFile() {
|
|||
return;
|
||||
}
|
||||
|
||||
char *mem = kernel_dereference_char_pointer(_vm->segmentManager, _outbuffer, 0);
|
||||
char *mem = kernelDerefString(_vm->segmentManager, _outbuffer);
|
||||
memset(mem, 0, 13);
|
||||
|
||||
// TODO: Transform the string back into a format usable by the SCI scripts.
|
||||
|
@ -756,7 +756,7 @@ reg_t kFileIO(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
switch (func_nr) {
|
||||
case K_FILEIO_OPEN : {
|
||||
char *name = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *name = kernelDerefString(s->segmentManager, argv[1]);
|
||||
int mode = argv[2].toUint16();
|
||||
|
||||
file_open(s, name, mode);
|
||||
|
@ -772,7 +772,7 @@ reg_t kFileIO(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
case K_FILEIO_READ_RAW : {
|
||||
int handle = argv[1].toUint16();
|
||||
char *dest = kernel_dereference_char_pointer(s->segmentManager, argv[2], 0);
|
||||
char *dest = kernelDerefString(s->segmentManager, argv[2]);
|
||||
int size = argv[3].toUint16();
|
||||
debug(3, "K_FILEIO_READ_RAW(%d,%d)", handle, size);
|
||||
|
||||
|
@ -781,7 +781,7 @@ reg_t kFileIO(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
case K_FILEIO_WRITE_RAW : {
|
||||
int handle = argv[1].toUint16();
|
||||
char *buf = kernel_dereference_char_pointer(s->segmentManager, argv[2], 0);
|
||||
char *buf = kernelDerefString(s->segmentManager, argv[2]);
|
||||
int size = argv[3].toUint16();
|
||||
debug(3, "K_FILEIO_WRITE_RAW(%d,%d)", handle, size);
|
||||
|
||||
|
@ -789,7 +789,7 @@ reg_t kFileIO(EngineState *s, int, int argc, reg_t *argv) {
|
|||
break;
|
||||
}
|
||||
case K_FILEIO_UNLINK : {
|
||||
char *name = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *name = kernelDerefString(s->segmentManager, argv[1]);
|
||||
debug(3, "K_FILEIO_UNLINK(%s)", name);
|
||||
|
||||
Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager();
|
||||
|
@ -800,7 +800,7 @@ reg_t kFileIO(EngineState *s, int, int argc, reg_t *argv) {
|
|||
break;
|
||||
}
|
||||
case K_FILEIO_READ_STRING : {
|
||||
char *dest = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *dest = kernelDerefString(s->segmentManager, argv[1]);
|
||||
int size = argv[2].toUint16();
|
||||
int handle = argv[3].toUint16();
|
||||
debug(3, "K_FILEIO_READ_STRING(%d,%d)", handle, size);
|
||||
|
@ -811,7 +811,7 @@ reg_t kFileIO(EngineState *s, int, int argc, reg_t *argv) {
|
|||
case K_FILEIO_WRITE_STRING : {
|
||||
int handle = argv[1].toUint16();
|
||||
int size = argv[3].toUint16();
|
||||
char *buf = kernel_dereference_char_pointer(s->segmentManager, argv[2], size);
|
||||
char *buf = kernelDerefCharPtr(s->segmentManager, argv[2], size);
|
||||
debug(3, "K_FILEIO_WRITE_STRING(%d,%d)", handle, size);
|
||||
|
||||
// FIXME: What is the difference between K_FILEIO_WRITE_STRING and
|
||||
|
@ -832,7 +832,7 @@ reg_t kFileIO(EngineState *s, int, int argc, reg_t *argv) {
|
|||
break;
|
||||
}
|
||||
case K_FILEIO_FIND_FIRST : {
|
||||
char *mask = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *mask = kernelDerefString(s->segmentManager, argv[1]);
|
||||
reg_t buf = argv[2];
|
||||
int attr = argv[3].toUint16(); // We won't use this, Win32 might, though...
|
||||
debug(3, "K_FILEIO_FIND_FIRST(%s,0x%x)", mask, attr);
|
||||
|
@ -851,7 +851,7 @@ reg_t kFileIO(EngineState *s, int, int argc, reg_t *argv) {
|
|||
break;
|
||||
}
|
||||
case K_FILEIO_FILE_EXISTS : {
|
||||
char *name = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *name = kernelDerefString(s->segmentManager, argv[1]);
|
||||
|
||||
// Check for regular file
|
||||
bool exists = Common::File::exists(name);
|
||||
|
|
|
@ -611,14 +611,14 @@ reg_t kGraph(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
reg_t kTextSize(EngineState *s, int, int argc, reg_t *argv) {
|
||||
int width, height;
|
||||
char *text = argv[1].segment ? (char *) kernel_dereference_bulk_pointer(s->segmentManager, argv[1], 0) : NULL;
|
||||
char *text = argv[1].segment ? (char *) kernelDerefBulkPtr(s->segmentManager, argv[1], 0) : NULL;
|
||||
const char *sep = NULL;
|
||||
reg_t *dest = kernel_dereference_reg_pointer(s->segmentManager, argv[0], 4);
|
||||
reg_t *dest = kernelDerefRegPtr(s->segmentManager, argv[0], 4);
|
||||
int maxwidth = (argc > 3) ? argv[3].toUint16() : 0;
|
||||
int font_nr = argv[2].toUint16();
|
||||
|
||||
if ((argc > 4) && (argv[4].segment))
|
||||
sep = (const char *)kernel_dereference_bulk_pointer(s->segmentManager, argv[4], 0);
|
||||
sep = (const char *)kernelDerefBulkPtr(s->segmentManager, argv[4], 0);
|
||||
|
||||
if (maxwidth < 0)
|
||||
maxwidth = 0;
|
||||
|
@ -2542,7 +2542,7 @@ reg_t kNewWindow(EngineState *s, int, int argc, reg_t *argv) {
|
|||
lWhite.alpha = 0;
|
||||
lWhite.priority = -1;
|
||||
lWhite.control = -1;
|
||||
const char *title = argv[4 + argextra].segment ? kernel_dereference_char_pointer(s->segmentManager, argv[4 + argextra], 0) : NULL;
|
||||
const char *title = argv[4 + argextra].segment ? kernelDerefString(s->segmentManager, argv[4 + argextra]) : NULL;
|
||||
|
||||
window = sciw_new_window(s, gfx_rect(x, y, xl, yl), s->titlebar_port->_font, fgcolor, bgcolor,
|
||||
s->titlebar_port->_font, lWhite, black, title ? s->strSplit(title, NULL).c_str() : NULL, flags);
|
||||
|
@ -3169,7 +3169,7 @@ reg_t kDisplay(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
if (textp.segment) {
|
||||
argpt = 1;
|
||||
text = (char *)kernel_dereference_bulk_pointer(s->segmentManager, textp, 0);
|
||||
text = (char *)kernelDerefBulkPtr(s->segmentManager, textp, 0);
|
||||
} else {
|
||||
argpt = 2;
|
||||
text = kernel_lookup_text(s, textp, index);
|
||||
|
@ -3337,7 +3337,7 @@ reg_t kDisplay(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
|
||||
static reg_t kShowMovie_Windows(EngineState *s, int argc, reg_t *argv) {
|
||||
const char *filename = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
const char *filename = kernelDerefString(s->segmentManager, argv[1]);
|
||||
|
||||
Graphics::AVIPlayer *player = new Graphics::AVIPlayer(g_system);
|
||||
|
||||
|
@ -3415,7 +3415,7 @@ static reg_t kShowMovie_Windows(EngineState *s, int argc, reg_t *argv) {
|
|||
}
|
||||
|
||||
static reg_t kShowMovie_DOS(EngineState *s, int argc, reg_t *argv) {
|
||||
const char *filename = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
const char *filename = kernelDerefString(s->segmentManager, argv[0]);
|
||||
int delay = argv[1].toUint16(); // Time between frames in ticks
|
||||
int frameNr = 0;
|
||||
SeqDecoder seq;
|
||||
|
|
|
@ -34,8 +34,8 @@
|
|||
namespace Sci {
|
||||
|
||||
reg_t kAddMenu(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *name = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *contents = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *name = kernelDerefString(s->segmentManager, argv[0]);
|
||||
char *contents = kernelDerefString(s->segmentManager, argv[1]);
|
||||
|
||||
s->_menubar->addMenu(s->gfx_state, name,
|
||||
contents, s->titlebar_port->_font, argv[1]);
|
||||
|
@ -78,7 +78,7 @@ reg_t kDrawStatus(EngineState *s, int, int argc, reg_t *argv) {
|
|||
s->status_bar_background = bgcolor;
|
||||
|
||||
if (text.segment) {
|
||||
const char *tmp = strdup(kernel_dereference_char_pointer(s->segmentManager, text, 0));
|
||||
const char *tmp = strdup(kernelDerefString(s->segmentManager, text));
|
||||
s->_statusBarText = tmp ? tmp : "";
|
||||
}
|
||||
|
||||
|
|
|
@ -187,8 +187,8 @@ reg_t kMemory(EngineState *s, int, int argc, reg_t *argv) {
|
|||
break;
|
||||
case K_MEMORY_MEMCPY : {
|
||||
int size = argv[3].toUint16();
|
||||
byte *dest = kernel_dereference_bulk_pointer(s->segmentManager, argv[1], size);
|
||||
byte *src = kernel_dereference_bulk_pointer(s->segmentManager, argv[2], size);
|
||||
byte *dest = kernelDerefBulkPtr(s->segmentManager, argv[1], size);
|
||||
byte *src = kernelDerefBulkPtr(s->segmentManager, argv[2], size);
|
||||
|
||||
if (dest && src)
|
||||
memcpy(dest, src, size);
|
||||
|
@ -204,7 +204,7 @@ reg_t kMemory(EngineState *s, int, int argc, reg_t *argv) {
|
|||
break;
|
||||
}
|
||||
case K_MEMORY_PEEK : {
|
||||
byte *ref = kernel_dereference_bulk_pointer(s->segmentManager, argv[1], 2);
|
||||
byte *ref = kernelDerefBulkPtr(s->segmentManager, argv[1], 2);
|
||||
|
||||
if (!ref) {
|
||||
// This occurs in KQ5CD when interacting with certain objects
|
||||
|
@ -218,7 +218,7 @@ reg_t kMemory(EngineState *s, int, int argc, reg_t *argv) {
|
|||
break;
|
||||
}
|
||||
case K_MEMORY_POKE : {
|
||||
byte *ref = kernel_dereference_bulk_pointer(s->segmentManager, argv[1], 2);
|
||||
byte *ref = kernelDerefBulkPtr(s->segmentManager, argv[1], 2);
|
||||
|
||||
if (!ref) {
|
||||
warning("Attempt to poke invalid memory at %04x:%04x", PRINT_REG(argv[1]));
|
||||
|
|
|
@ -295,8 +295,8 @@ static bool polygons_equal(SegManager *segManager, reg_t p1, reg_t p2) {
|
|||
if (size != GET_SEL32(p2, size).toUint16())
|
||||
return false;
|
||||
|
||||
const byte *p1_points = kernel_dereference_bulk_pointer(segManager, GET_SEL32(p1, points), size * POLY_POINT_SIZE);
|
||||
const byte *p2_points = kernel_dereference_bulk_pointer(segManager, GET_SEL32(p2, points), size * POLY_POINT_SIZE);
|
||||
const byte *p1_points = kernelDerefBulkPtr(segManager, GET_SEL32(p1, points), size * POLY_POINT_SIZE);
|
||||
const byte *p2_points = kernelDerefBulkPtr(segManager, GET_SEL32(p2, points), size * POLY_POINT_SIZE);
|
||||
bool p1_is_reg_t = polygon_is_reg_t(p1_points, size);
|
||||
bool p2_is_reg_t = polygon_is_reg_t(p2_points, size);
|
||||
|
||||
|
@ -359,7 +359,7 @@ static void draw_polygon(EngineState *s, reg_t polygon) {
|
|||
int size = GET_SEL32(polygon, size).toUint16();
|
||||
int type = GET_SEL32(polygon, type).toUint16();
|
||||
Common::Point first, prev;
|
||||
const byte *list = kernel_dereference_bulk_pointer(s->segmentManager, points, size * POLY_POINT_SIZE);
|
||||
const byte *list = kernelDerefBulkPtr(s->segmentManager, points, size * POLY_POINT_SIZE);
|
||||
int is_reg_t = polygon_is_reg_t(list, size);
|
||||
int i;
|
||||
|
||||
|
@ -406,7 +406,7 @@ static void print_polygon(SegManager *segManager, reg_t polygon) {
|
|||
int size = GET_SEL32(polygon, size).toUint16();
|
||||
int type = GET_SEL32(polygon, type).toUint16();
|
||||
int i;
|
||||
const byte *point_array = kernel_dereference_bulk_pointer(segManager, points, size * POLY_POINT_SIZE);
|
||||
const byte *point_array = kernelDerefBulkPtr(segManager, points, size * POLY_POINT_SIZE);
|
||||
int is_reg_t = polygon_is_reg_t(point_array, size);
|
||||
Common::Point point;
|
||||
|
||||
|
@ -1230,7 +1230,7 @@ static Polygon *convert_polygon(EngineState *s, reg_t polygon) {
|
|||
int i;
|
||||
reg_t points = GET_SEL32(polygon, points);
|
||||
int size = GET_SEL32(polygon, size).toUint16();
|
||||
const byte *list = kernel_dereference_bulk_pointer(s->segmentManager, points, size * POLY_POINT_SIZE);
|
||||
const byte *list = kernelDerefBulkPtr(s->segmentManager, points, size * POLY_POINT_SIZE);
|
||||
Polygon *poly = new Polygon(GET_SEL32(polygon, type).toUint16());
|
||||
int is_reg_t = polygon_is_reg_t(list, size);
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ char *kernel_lookup_text(EngineState *s, reg_t address, int index) {
|
|||
Resource *textres;
|
||||
|
||||
if (address.segment)
|
||||
return (char *)kernel_dereference_bulk_pointer(s->segmentManager, address, 0);
|
||||
return (char *)kernelDerefBulkPtr(s->segmentManager, address, 0);
|
||||
else {
|
||||
int textlen;
|
||||
int _index = index;
|
||||
|
@ -87,7 +87,7 @@ reg_t kSaid(EngineState *s, int, int argc, reg_t *argv) {
|
|||
if (!heap_said_block.segment)
|
||||
return NULL_REG;
|
||||
|
||||
said_block = (byte *) kernel_dereference_bulk_pointer(s->segmentManager, heap_said_block, 0);
|
||||
said_block = (byte *) kernelDerefBulkPtr(s->segmentManager, heap_said_block, 0);
|
||||
|
||||
if (!said_block) {
|
||||
warning("Said on non-string, pointer %04x:%04x", PRINT_REG(heap_said_block));
|
||||
|
@ -189,7 +189,7 @@ reg_t kSetSynonyms(EngineState *s, int, int argc, reg_t *argv) {
|
|||
reg_t kParse(EngineState *s, int, int argc, reg_t *argv) {
|
||||
SegManager *segManager = s->segmentManager;
|
||||
reg_t stringpos = argv[0];
|
||||
char *string = kernel_dereference_char_pointer(s->segmentManager, stringpos, 0);
|
||||
char *string = kernelDerefString(s->segmentManager, stringpos);
|
||||
char *error;
|
||||
ResultWordList words;
|
||||
reg_t event = argv[1];
|
||||
|
@ -242,7 +242,7 @@ reg_t kParse(EngineState *s, int, int argc, reg_t *argv) {
|
|||
s->r_acc = make_reg(0, 0);
|
||||
PUT_SEL32V(event, claimed, 1);
|
||||
if (error) {
|
||||
char *pbase_str = kernel_dereference_char_pointer(s->segmentManager, s->parser_base, 0);
|
||||
char *pbase_str = kernelDerefString(s->segmentManager, s->parser_base);
|
||||
strcpy(pbase_str, error);
|
||||
debugC(2, kDebugLevelParser, "Word unknown: %s\n", error);
|
||||
/* Issue warning: */
|
||||
|
@ -259,7 +259,7 @@ reg_t kParse(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
reg_t kStrEnd(EngineState *s, int, int argc, reg_t *argv) {
|
||||
reg_t address = argv[0];
|
||||
char *seeker = kernel_dereference_char_pointer(s->segmentManager, address, 0);
|
||||
char *seeker = kernelDerefString(s->segmentManager, address);
|
||||
|
||||
while (*seeker++)
|
||||
++address.offset;
|
||||
|
@ -268,16 +268,16 @@ reg_t kStrEnd(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
|
||||
reg_t kStrCat(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *s1 = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *s2 = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *s1 = kernelDerefString(s->segmentManager, argv[0]);
|
||||
char *s2 = kernelDerefString(s->segmentManager, argv[1]);
|
||||
|
||||
strcat(s1, s2);
|
||||
return argv[0];
|
||||
}
|
||||
|
||||
reg_t kStrCmp(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *s1 = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *s2 = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
char *s1 = kernelDerefString(s->segmentManager, argv[0]);
|
||||
char *s2 = kernelDerefString(s->segmentManager, argv[1]);
|
||||
|
||||
if (argc > 2)
|
||||
return make_reg(0, strncmp(s1, s2, argv[2].toUint16()));
|
||||
|
@ -287,8 +287,8 @@ reg_t kStrCmp(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
|
||||
reg_t kStrCpy(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *dest = (char *) kernel_dereference_bulk_pointer(s->segmentManager, argv[0], 0);
|
||||
char *src = (char *) kernel_dereference_bulk_pointer(s->segmentManager, argv[1], 0);
|
||||
char *dest = (char *) kernelDerefBulkPtr(s->segmentManager, argv[0], 0);
|
||||
char *src = (char *) kernelDerefBulkPtr(s->segmentManager, argv[1], 0);
|
||||
|
||||
if (!dest) {
|
||||
warning("Attempt to strcpy TO invalid pointer %04x:%04x",
|
||||
|
@ -352,7 +352,7 @@ static int is_print_str(const char *str) {
|
|||
|
||||
|
||||
reg_t kStrAt(EngineState *s, int, int argc, reg_t *argv) {
|
||||
byte *dest = (byte *)kernel_dereference_bulk_pointer(s->segmentManager, argv[0], 0);
|
||||
byte *dest = (byte *)kernelDerefBulkPtr(s->segmentManager, argv[0], 0);
|
||||
reg_t *dest2;
|
||||
|
||||
if (!dest) {
|
||||
|
@ -394,7 +394,7 @@ reg_t kStrAt(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
|
||||
reg_t kReadNumber(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *source = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *source = kernelDerefString(s->segmentManager, argv[0]);
|
||||
|
||||
while (isspace(*source))
|
||||
source++; /* Skip whitespace */
|
||||
|
@ -420,7 +420,7 @@ reg_t kReadNumber(EngineState *s, int, int argc, reg_t *argv) {
|
|||
reg_t kFormat(EngineState *s, int, int argc, reg_t *argv) {
|
||||
int *arguments;
|
||||
reg_t dest = argv[0];
|
||||
char *target = (char *) kernel_dereference_bulk_pointer(s->segmentManager, dest, 0);
|
||||
char *target = (char *) kernelDerefBulkPtr(s->segmentManager, dest, 0);
|
||||
reg_t position = argv[1]; /* source */
|
||||
int index = argv[2].toUint16();
|
||||
char *source;
|
||||
|
@ -633,7 +633,7 @@ reg_t kFormat(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
|
||||
reg_t kStrLen(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *str = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *str = kernelDerefString(s->segmentManager, argv[0]);
|
||||
|
||||
if (!str) {
|
||||
warning("StrLen: invalid pointer %04x:%04x", PRINT_REG(argv[0]));
|
||||
|
@ -665,7 +665,7 @@ reg_t kGetFarText(EngineState *s, int, int argc, reg_t *argv) {
|
|||
** resource.
|
||||
*/
|
||||
|
||||
strcpy(kernel_dereference_char_pointer(s->segmentManager, argv[2], 0), seeker); /* Copy the string and get return value */
|
||||
strcpy(kernelDerefString(s->segmentManager, argv[2]), seeker); /* Copy the string and get return value */
|
||||
return argv[2];
|
||||
}
|
||||
|
||||
|
@ -740,7 +740,7 @@ reg_t kMessage(EngineState *s, int, int argc, reg_t *argv) {
|
|||
|
||||
if (!bufferReg.isNull()) {
|
||||
int len = str.size() + 1;
|
||||
buffer = kernel_dereference_char_pointer(s->segmentManager, bufferReg, len);
|
||||
buffer = kernelDerefCharPtr(s->segmentManager, bufferReg, len);
|
||||
|
||||
if (buffer) {
|
||||
strcpy(buffer, str.c_str());
|
||||
|
@ -748,7 +748,7 @@ reg_t kMessage(EngineState *s, int, int argc, reg_t *argv) {
|
|||
warning("Message: buffer %04x:%04x invalid or too small to hold the following text of %i bytes: '%s'", PRINT_REG(bufferReg), len, str.c_str());
|
||||
|
||||
// Set buffer to empty string if possible
|
||||
buffer = kernel_dereference_char_pointer(s->segmentManager, bufferReg, 1);
|
||||
buffer = kernelDerefCharPtr(s->segmentManager, bufferReg, 1);
|
||||
if (buffer)
|
||||
*buffer = 0;
|
||||
}
|
||||
|
@ -788,7 +788,7 @@ reg_t kMessage(EngineState *s, int, int argc, reg_t *argv) {
|
|||
case K_MESSAGE_LASTMESSAGE: {
|
||||
MessageTuple msg = s->_msgState.getLastTuple();
|
||||
int module = s->_msgState.getLastModule();
|
||||
byte *buffer = kernel_dereference_bulk_pointer(s->segmentManager, argv[1], 10);
|
||||
byte *buffer = kernelDerefBulkPtr(s->segmentManager, argv[1], 10);
|
||||
|
||||
if (buffer) {
|
||||
WRITE_LE_UINT16(buffer, module);
|
||||
|
@ -810,18 +810,18 @@ reg_t kMessage(EngineState *s, int, int argc, reg_t *argv) {
|
|||
}
|
||||
|
||||
reg_t kSetQuitStr(EngineState *s, int, int argc, reg_t *argv) {
|
||||
char *quitStr = kernel_dereference_char_pointer(s->segmentManager, argv[0], 0);
|
||||
char *quitStr = kernelDerefString(s->segmentManager, argv[0]);
|
||||
debug("Setting quit string to '%s'", quitStr);
|
||||
return s->r_acc;
|
||||
}
|
||||
|
||||
reg_t kStrSplit(EngineState *s, int, int argc, reg_t *argv) {
|
||||
const char *format = kernel_dereference_char_pointer(s->segmentManager, argv[1], 0);
|
||||
const char *sep = !argv[2].isNull() ? kernel_dereference_char_pointer(s->segmentManager, argv[2], 0) : NULL;
|
||||
const char *format = kernelDerefString(s->segmentManager, argv[1]);
|
||||
const char *sep = !argv[2].isNull() ? kernelDerefString(s->segmentManager, argv[2]) : NULL;
|
||||
Common::String str = s->strSplit(format, sep);
|
||||
|
||||
// Make sure target buffer is large enough
|
||||
char *buf = kernel_dereference_char_pointer(s->segmentManager, argv[0], str.size() + 1);
|
||||
char *buf = kernelDerefCharPtr(s->segmentManager, argv[0], str.size() + 1);
|
||||
|
||||
if (buf) {
|
||||
strcpy(buf, str.c_str());
|
||||
|
|
|
@ -103,7 +103,7 @@ static int internal_is_valid_stringfrag(EngineState *s, reg_t *buffer) {
|
|||
}
|
||||
|
||||
int is_valid_stringfrag(EngineState *s, reg_t pos) {
|
||||
reg_t *buffer = kernel_dereference_reg_pointer(s->segmentManager, pos, 1);
|
||||
reg_t *buffer = kernelDerefRegPtr(s->segmentManager, pos, 1);
|
||||
|
||||
return internal_is_valid_stringfrag(s, buffer);
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ static int internal_stringfrag_length(EngineState *s, reg_t *buffer) {
|
|||
}
|
||||
|
||||
int stringfrag_length(EngineState *s, reg_t pos) {
|
||||
reg_t *buffer = kernel_dereference_reg_pointer(s->segmentManager, pos, 1);
|
||||
reg_t *buffer = kernelDerefRegPtr(s->segmentManager, pos, 1);
|
||||
|
||||
return internal_stringfrag_length(s, buffer);
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ static void internal_stringfrag_to_ascii(EngineState *s, reg_t *buffer) {
|
|||
}
|
||||
|
||||
void stringfrag_to_ascii(EngineState *s, reg_t pos) {
|
||||
reg_t *buffer = kernel_dereference_reg_pointer(s->segmentManager, pos, 1);
|
||||
reg_t *buffer = kernelDerefRegPtr(s->segmentManager, pos, 1);
|
||||
|
||||
internal_stringfrag_to_ascii(s, buffer);
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ static void internal_ascii_to_stringfrag(EngineState *s, reg_t *buffer) {
|
|||
}
|
||||
|
||||
void ascii_to_stringfrag(EngineState *s, reg_t pos) {
|
||||
reg_t *buffer = kernel_dereference_reg_pointer(s->segmentManager, pos, 1);
|
||||
reg_t *buffer = kernelDerefRegPtr(s->segmentManager, pos, 1);
|
||||
|
||||
internal_ascii_to_stringfrag(s, buffer);
|
||||
}
|
||||
|
@ -214,7 +214,7 @@ static void internal_stringfrag_append_char(EngineState *s, reg_t *buffer, unsig
|
|||
}
|
||||
|
||||
void stringfrag_append_char(EngineState *s, reg_t pos, unsigned char c) {
|
||||
reg_t *buffer = kernel_dereference_reg_pointer(s->segmentManager, pos, 1);
|
||||
reg_t *buffer = kernelDerefRegPtr(s->segmentManager, pos, 1);
|
||||
|
||||
internal_stringfrag_append_char(s, buffer, c);
|
||||
}
|
||||
|
@ -311,7 +311,7 @@ static void internal_stringfrag_insert_char(EngineState *s, reg_t *buffer, int p
|
|||
}
|
||||
|
||||
void stringfrag_insert_char(EngineState *s, reg_t pos, int p, unsigned char c) {
|
||||
reg_t *buffer = kernel_dereference_reg_pointer(s->segmentManager, pos, 1);
|
||||
reg_t *buffer = kernelDerefRegPtr(s->segmentManager, pos, 1);
|
||||
|
||||
internal_stringfrag_insert_char(s, buffer, p, c);
|
||||
}
|
||||
|
@ -343,7 +343,7 @@ static void internal_stringfrag_delete_char(EngineState *s, reg_t *buffer, int p
|
|||
}
|
||||
|
||||
void stringfrag_delete_char(EngineState *s, reg_t pos, int p) {
|
||||
reg_t *buffer = kernel_dereference_reg_pointer(s->segmentManager, pos, 1);
|
||||
reg_t *buffer = kernelDerefRegPtr(s->segmentManager, pos, 1);
|
||||
|
||||
internal_stringfrag_delete_char(s, buffer, p);
|
||||
}
|
||||
|
@ -360,8 +360,8 @@ void internal_stringfrag_strcpy(EngineState *s, reg_t *dest, reg_t *src) {
|
|||
}
|
||||
|
||||
void stringfrag_strcpy(EngineState *s, reg_t dest, reg_t src) {
|
||||
reg_t *destbuf = kernel_dereference_reg_pointer(s->segmentManager, dest, 1);
|
||||
reg_t *srcbuf = kernel_dereference_reg_pointer(s->segmentManager, src, 1);
|
||||
reg_t *destbuf = kernelDerefRegPtr(s->segmentManager, dest, 1);
|
||||
reg_t *srcbuf = kernelDerefRegPtr(s->segmentManager, src, 1);
|
||||
|
||||
internal_stringfrag_strcpy(s, destbuf, srcbuf);
|
||||
}
|
||||
|
@ -388,8 +388,8 @@ void internal_stringfrag_strncpy(EngineState *s, reg_t *dest, reg_t *src, int le
|
|||
}
|
||||
|
||||
void stringfrag_strncpy(EngineState *s, reg_t dest, reg_t src, int len) {
|
||||
reg_t *destbuf = kernel_dereference_reg_pointer(s->segmentManager, dest, 1);
|
||||
reg_t *srcbuf = kernel_dereference_reg_pointer(s->segmentManager, src, 1);
|
||||
reg_t *destbuf = kernelDerefRegPtr(s->segmentManager, dest, 1);
|
||||
reg_t *srcbuf = kernelDerefRegPtr(s->segmentManager, src, 1);
|
||||
|
||||
internal_stringfrag_strncpy(s, destbuf, srcbuf, len);
|
||||
}
|
||||
|
@ -416,8 +416,8 @@ int internal_stringfrag_strcmp(EngineState *s, reg_t *s1, reg_t *s2) {
|
|||
}
|
||||
|
||||
void stringfrag_strcmp(EngineState *s, reg_t s1, reg_t s2) {
|
||||
reg_t *s1buf = kernel_dereference_reg_pointer(s->segmentManager, s1, 1);
|
||||
reg_t *s2buf = kernel_dereference_reg_pointer(s->segmentManager, s2, 1);
|
||||
reg_t *s1buf = kernelDerefRegPtr(s->segmentManager, s1, 1);
|
||||
reg_t *s2buf = kernelDerefRegPtr(s->segmentManager, s2, 1);
|
||||
|
||||
internal_stringfrag_strcmp(s, s1buf, s2buf);
|
||||
}
|
||||
|
@ -449,8 +449,8 @@ int internal_stringfrag_strncmp(EngineState *s, reg_t *s1, reg_t *s2, int len) {
|
|||
}
|
||||
|
||||
void stringfrag_strncmp(EngineState *s, reg_t s1, reg_t s2, int len) {
|
||||
reg_t *s1buf = kernel_dereference_reg_pointer(s->segmentManager, s1, 1);
|
||||
reg_t *s2buf = kernel_dereference_reg_pointer(s->segmentManager, s2, 1);
|
||||
reg_t *s1buf = kernelDerefRegPtr(s->segmentManager, s1, 1);
|
||||
reg_t *s2buf = kernelDerefRegPtr(s->segmentManager, s2, 1);
|
||||
|
||||
internal_stringfrag_strncmp(s, s1buf, s2buf, len);
|
||||
}
|
||||
|
|
|
@ -294,7 +294,7 @@ int Menubar::setAttribute(EngineState *s, int menu_nr, int item_nr, int attribut
|
|||
case MENU_ATTRIBUTE_SAID:
|
||||
if (value.segment) {
|
||||
item->_saidPos = value;
|
||||
memcpy(item->_said, kernel_dereference_bulk_pointer(s->segmentManager, value, 0), MENU_SAID_SPEC_SIZE); // Copy Said spec
|
||||
memcpy(item->_said, kernelDerefBulkPtr(s->segmentManager, value, 0), MENU_SAID_SPEC_SIZE); // Copy Said spec
|
||||
item->_flags |= MENU_ATTRIBUTE_FLAGS_SAID;
|
||||
|
||||
} else
|
||||
|
@ -304,7 +304,7 @@ int Menubar::setAttribute(EngineState *s, int menu_nr, int item_nr, int attribut
|
|||
|
||||
case MENU_ATTRIBUTE_TEXT:
|
||||
assert(value.segment);
|
||||
item->_text = kernel_dereference_char_pointer(s->segmentManager, value, 0);
|
||||
item->_text = kernelDerefString(s->segmentManager, value);
|
||||
item->_textPos = value;
|
||||
break;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue