scummvm/engines/wintermute/dcscript.h
2012-06-02 12:12:20 +02:00

149 lines
3.4 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 2
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
/*
* This file is based on WME Lite.
* http://dead-code.org/redir.php?target=wmelite
* Copyright (c) 2011 Jan Nedoma
*/
#ifndef WINTERMUTE_DCSCRIPT_H
#define WINTERMUTE_DCSCRIPT_H
namespace WinterMute {
#define SCRIPT_MAGIC 0xDEC0ADDE
#define SCRIPT_VERSION 0x0102
// value types
typedef enum {
VAL_NULL,
VAL_STRING,
VAL_INT,
VAL_BOOL,
VAL_FLOAT,
VAL_OBJECT,
VAL_NATIVE,
VAL_VARIABLE_REF
} TValType;
// script states
typedef enum {
SCRIPT_RUNNING, SCRIPT_WAITING, SCRIPT_SLEEPING, SCRIPT_FINISHED, SCRIPT_PERSISTENT, SCRIPT_ERROR, SCRIPT_PAUSED, SCRIPT_WAITING_SCRIPT, SCRIPT_THREAD_FINISHED
} TScriptState;
// opcodes
typedef enum {
II_DEF_VAR = 0,
II_DEF_GLOB_VAR,
II_RET,
II_RET_EVENT,
II_CALL,
II_CALL_BY_EXP,
II_EXTERNAL_CALL,
II_SCOPE,
II_CORRECT_STACK,
II_CREATE_OBJECT,
II_POP_EMPTY,
II_PUSH_VAR,
II_PUSH_VAR_REF,
II_POP_VAR,
II_PUSH_VAR_THIS, // push current this on stack
II_PUSH_INT,
II_PUSH_BOOL,
II_PUSH_FLOAT,
II_PUSH_STRING,
II_PUSH_NULL,
II_PUSH_THIS_FROM_STACK,
II_PUSH_THIS,
II_POP_THIS,
II_PUSH_BY_EXP,
II_POP_BY_EXP,
II_JMP,
II_JMP_FALSE,
II_ADD,
II_SUB,
II_MUL,
II_DIV,
II_MODULO,
II_NOT,
II_AND,
II_OR,
II_CMP_EQ,
II_CMP_NE,
II_CMP_L,
II_CMP_G,
II_CMP_LE,
II_CMP_GE,
II_CMP_STRICT_EQ,
II_CMP_STRICT_NE,
II_DBG_LINE,
II_POP_REG1,
II_PUSH_REG1,
II_DEF_CONST_VAR
} TInstruction;
// external data types
typedef enum {
TYPE_VOID = 0,
TYPE_BOOL,
TYPE_LONG,
TYPE_BYTE,
TYPE_STRING,
TYPE_FLOAT,
TYPE_DOUBLE,
TYPE_MEMBUFFER
} TExternalType;
// call types
typedef enum {
CALL_STDCALL = 0,
CALL_CDECL,
CALL_THISCALL
} TCallType;
// element types
typedef enum {
ELEMENT_STRING = 0
} TElementType;
// compiler interface
typedef byte *(WINAPI DLL_LOAD_FILE)(void *Data, char *Filename, uint32 *Size);
typedef void (WINAPI DLL_CLOSE_FILE)(void *Data, byte *Buffer);
typedef void (WINAPI DLL_ADD_ERROR)(void *Data, int Line, char *Text);
typedef void (WINAPI DLL_PARSE_ELEMENT)(void *Data, int Line, int Type, void *ElementData);
typedef struct {
DLL_LOAD_FILE *Dll_LoadFile;
DLL_CLOSE_FILE *Dll_CloseFile;
DLL_ADD_ERROR *Dll_AddError;
DLL_PARSE_ELEMENT *Dll_ParseElement;
} CALLBACKS;
} // end of namespace WinterMute
#endif