TONY: Misc cleanup
This commit is contained in:
parent
f1819d8658
commit
25f4a3fb08
8 changed files with 85 additions and 109 deletions
|
@ -35,68 +35,6 @@ namespace Tony {
|
|||
|
||||
namespace MPAL {
|
||||
|
||||
/**
|
||||
* @defgroup Mathamatical operations
|
||||
*/
|
||||
//@{
|
||||
|
||||
#define OP_MUL ((1 << 4) | 0)
|
||||
#define OP_DIV ((1 << 4) | 1)
|
||||
#define OP_MODULE ((1 << 4) | 2)
|
||||
#define OP_ADD ((2 << 4) | 0)
|
||||
#define OP_SUB ((2 << 4) | 1)
|
||||
#define OP_SHL ((3 << 4) | 0)
|
||||
#define OP_SHR ((3 << 4) | 1)
|
||||
#define OP_MINOR ((4 << 4) | 0)
|
||||
#define OP_MAJOR ((4 << 4) | 1)
|
||||
#define OP_MINEQ ((4 << 4) | 2)
|
||||
#define OP_MAJEQ ((4 << 4) | 3)
|
||||
#define OP_EQUAL ((5 << 4) | 0)
|
||||
#define OP_NOEQUAL ((5 << 4) | 1)
|
||||
#define OP_BITAND ((6 << 4) | 0)
|
||||
#define OP_BITXOR ((7 << 4) | 0)
|
||||
#define OP_BITOR ((8 << 4) | 0)
|
||||
#define OP_AND ((9 << 4) | 0)
|
||||
#define OP_OR ((10 << 4) | 0)
|
||||
|
||||
|
||||
/**
|
||||
* Object types that can be contained in an EXPRESSION structure
|
||||
*/
|
||||
enum ExprListTypes {
|
||||
ELT_NUMBER = 1,
|
||||
ELT_VAR = 2,
|
||||
ELT_PARENTH = 3,
|
||||
ELT_PARENTH2 = 4
|
||||
};
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* @defgroup Structures
|
||||
*/
|
||||
//@{
|
||||
|
||||
/**
|
||||
* Mathamatical framework to manage operations
|
||||
*/
|
||||
typedef struct {
|
||||
byte _type; // Tipo di oggetto (vedi enum ExprListTypes)
|
||||
byte _unary; // Unary operatore (NON SUPPORTATO)
|
||||
|
||||
union {
|
||||
int _num; // Numero (se type==ELT_NUMBER)
|
||||
char *_name; // Nome variabile (se type==ELT_VAR)
|
||||
MpalHandle _son; // Handle a espressione (type==ELT_PARENTH)
|
||||
byte *_pson; // Handle lockato (type==ELT_PARENTH2)
|
||||
} _val;
|
||||
|
||||
byte _symbol; // Simbolo matematico (vedi #define OP_*)
|
||||
|
||||
} Expression;
|
||||
typedef Expression *LpExpression;
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* Duplicate a mathematical expression.
|
||||
|
@ -106,15 +44,14 @@ typedef Expression *LpExpression;
|
|||
*/
|
||||
static byte *duplicateExpression(MpalHandle h) {
|
||||
byte *orig, *clone;
|
||||
LpExpression one, two;
|
||||
|
||||
orig = (byte *)globalLock(h);
|
||||
|
||||
int num = *(byte *)orig;
|
||||
one = (LpExpression)(orig+1);
|
||||
LpExpression one = (LpExpression)(orig+1);
|
||||
|
||||
clone = (byte *)globalAlloc(GMEM_FIXED, sizeof(Expression) * num + 1);
|
||||
two = (LpExpression)(clone + 1);
|
||||
LpExpression two = (LpExpression)(clone + 1);
|
||||
|
||||
memcpy(clone, orig, sizeof(Expression) * num + 1);
|
||||
|
||||
|
@ -180,7 +117,6 @@ static int Compute(int a, int b, byte symbol) {
|
|||
|
||||
static void solve(LpExpression one, int num) {
|
||||
LpExpression two, three;
|
||||
int j;
|
||||
|
||||
while (num > 1) {
|
||||
two = one + 1;
|
||||
|
@ -189,7 +125,7 @@ static void solve(LpExpression one, int num) {
|
|||
memmove(one, two, (num - 1) * sizeof(Expression));
|
||||
--num;
|
||||
} else {
|
||||
j = 1;
|
||||
int j = 1;
|
||||
three = two + 1;
|
||||
while ((three->_symbol != 0) && (two->_symbol & 0xF0) > (three->_symbol & 0xF0)) {
|
||||
++two;
|
||||
|
@ -213,13 +149,11 @@ static void solve(LpExpression one, int num) {
|
|||
* @returns Value
|
||||
*/
|
||||
static int evaluateAndFreeExpression(byte *expr) {
|
||||
LpExpression one, cur;
|
||||
|
||||
int num = *expr;
|
||||
one = (LpExpression)(expr + 1);
|
||||
LpExpression one = (LpExpression)(expr + 1);
|
||||
|
||||
// 1) Substitutions of variables
|
||||
cur = one;
|
||||
LpExpression cur = one;
|
||||
for (int i = 0; i < num; i++, cur++) {
|
||||
if (cur->_type == ELT_VAR) {
|
||||
cur->_type = ELT_NUMBER;
|
||||
|
@ -254,7 +188,6 @@ static int evaluateAndFreeExpression(byte *expr) {
|
|||
* @returns Pointer to the buffer immediately after the expression, or NULL if error.
|
||||
*/
|
||||
const byte *parseExpression(const byte *lpBuf, MpalHandle *h) {
|
||||
LpExpression cur;
|
||||
byte *start;
|
||||
|
||||
uint32 num = *lpBuf;
|
||||
|
@ -270,12 +203,14 @@ const byte *parseExpression(const byte *lpBuf, MpalHandle *h) {
|
|||
start = (byte *)globalLock(*h);
|
||||
*start = (byte)num;
|
||||
|
||||
cur = (LpExpression)(start + 1);
|
||||
LpExpression cur = (LpExpression)(start + 1);
|
||||
|
||||
for (uint32 i = 0;i < num; i++) {
|
||||
cur->_type = *(lpBuf);
|
||||
cur->_unary = *(lpBuf + 1);
|
||||
|
||||
// *(lpBuf + 1) contains the unary operator, unused => skipped
|
||||
lpBuf += 2;
|
||||
|
||||
switch (cur->_type) {
|
||||
case ELT_NUMBER:
|
||||
cur->_val._num = (int32)READ_LE_UINT32(lpBuf);
|
||||
|
@ -322,10 +257,8 @@ const byte *parseExpression(const byte *lpBuf, MpalHandle *h) {
|
|||
* @returns Numeric value
|
||||
*/
|
||||
int evaluateExpression(MpalHandle h) {
|
||||
int ret;
|
||||
|
||||
lockVar();
|
||||
ret = evaluateAndFreeExpression(duplicateExpression(h));
|
||||
int ret = evaluateAndFreeExpression(duplicateExpression(h));
|
||||
unlockVar();
|
||||
|
||||
return ret;
|
||||
|
@ -339,7 +272,6 @@ int evaluateExpression(MpalHandle h) {
|
|||
*/
|
||||
bool compareExpressions(MpalHandle h1, MpalHandle h2) {
|
||||
byte *e1, *e2;
|
||||
LpExpression one, two;
|
||||
|
||||
e1 = (byte *)globalLock(h1);
|
||||
e2 = (byte *)globalLock(h2);
|
||||
|
@ -353,8 +285,8 @@ bool compareExpressions(MpalHandle h1, MpalHandle h2) {
|
|||
return false;
|
||||
}
|
||||
|
||||
one = (LpExpression)(e1 + 1);
|
||||
two = (LpExpression)(e2 + 1);
|
||||
LpExpression one = (LpExpression)(e1 + 1);
|
||||
LpExpression two = (LpExpression)(e2 + 1);
|
||||
|
||||
for (int i = 0; i < num1; i++) {
|
||||
if (one->_type != two->_type || (i != num1 - 1 && one->_symbol != two->_symbol)) {
|
||||
|
|
|
@ -35,6 +35,67 @@ namespace Tony {
|
|||
|
||||
namespace MPAL {
|
||||
|
||||
/**
|
||||
* @defgroup Mathamatical operations
|
||||
*/
|
||||
//@{
|
||||
|
||||
#define OP_MUL ((1 << 4) | 0)
|
||||
#define OP_DIV ((1 << 4) | 1)
|
||||
#define OP_MODULE ((1 << 4) | 2)
|
||||
#define OP_ADD ((2 << 4) | 0)
|
||||
#define OP_SUB ((2 << 4) | 1)
|
||||
#define OP_SHL ((3 << 4) | 0)
|
||||
#define OP_SHR ((3 << 4) | 1)
|
||||
#define OP_MINOR ((4 << 4) | 0)
|
||||
#define OP_MAJOR ((4 << 4) | 1)
|
||||
#define OP_MINEQ ((4 << 4) | 2)
|
||||
#define OP_MAJEQ ((4 << 4) | 3)
|
||||
#define OP_EQUAL ((5 << 4) | 0)
|
||||
#define OP_NOEQUAL ((5 << 4) | 1)
|
||||
#define OP_BITAND ((6 << 4) | 0)
|
||||
#define OP_BITXOR ((7 << 4) | 0)
|
||||
#define OP_BITOR ((8 << 4) | 0)
|
||||
#define OP_AND ((9 << 4) | 0)
|
||||
#define OP_OR ((10 << 4) | 0)
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* @defgroup Structures
|
||||
*/
|
||||
|
||||
//@{
|
||||
/**
|
||||
* Mathamatical framework to manage operations
|
||||
*/
|
||||
typedef struct {
|
||||
byte _type; // Object Type (see enum ExprListTypes)
|
||||
|
||||
union {
|
||||
int _num; // Identifier (if type == ELT_NUMBER)
|
||||
char *_name; // Variable name (if type == ELT_VAR)
|
||||
MpalHandle _son; // Handle expressions (if type == ELT_PARENTH)
|
||||
byte *_pson; // Handle lockato (if type == ELT_PARENTH2)
|
||||
} _val;
|
||||
|
||||
byte _symbol; // Mathematic symbols (see #define OP_*)
|
||||
|
||||
} Expression;
|
||||
typedef Expression *LpExpression;
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* Object types that can be contained in an EXPRESSION structure
|
||||
*/
|
||||
enum ExprListTypes {
|
||||
ELT_NUMBER = 1,
|
||||
ELT_VAR = 2,
|
||||
ELT_PARENTH = 3,
|
||||
ELT_PARENTH2 = 4
|
||||
};
|
||||
|
||||
/****************************************************************************\
|
||||
* Function Prototypes
|
||||
\****************************************************************************/
|
||||
|
|
|
@ -139,7 +139,6 @@ static void FreeScript(LpMpalScript lpmsScript) {
|
|||
* @returns Pointer to the buffer after the item, or NULL on failure.
|
||||
*/
|
||||
static const byte *parseDialog(const byte *lpBuf, LpMpalDialog lpmdDialog) {
|
||||
uint32 num2, num3;
|
||||
byte *lpLock;
|
||||
|
||||
lpmdDialog->_nObj = READ_LE_UINT32(lpBuf);
|
||||
|
@ -266,7 +265,7 @@ static const byte *parseDialog(const byte *lpBuf, LpMpalDialog lpmdDialog) {
|
|||
lpmdDialog->_choice[i]._nChoice = READ_LE_UINT16(lpBuf);
|
||||
lpBuf += 2;
|
||||
|
||||
num2 = *lpBuf++;
|
||||
uint32 num2 = *lpBuf++;
|
||||
|
||||
if (num2 >= MAX_SELECTS_PER_CHOICE)
|
||||
error("Too much selects in choice #%d in dialog #%d", lpmdDialog->_choice[i]._nChoice, lpmdDialog->_nObj);
|
||||
|
@ -296,7 +295,7 @@ static const byte *parseDialog(const byte *lpBuf, LpMpalDialog lpmdDialog) {
|
|||
lpBuf += 4;
|
||||
|
||||
// PlayGroup
|
||||
num3 = *lpBuf++;
|
||||
uint32 num3 = *lpBuf++;
|
||||
|
||||
if (num3 >= MAX_PLAYGROUPS_PER_SELECT)
|
||||
error("Too much playgroups in select #%d in choice #%d in dialog #%d", j, lpmdDialog->_choice[i]._nChoice, lpmdDialog->_nObj);
|
||||
|
@ -365,7 +364,6 @@ static const byte *parseItem(const byte *lpBuf, LpMpalItem lpmiItem) {
|
|||
lpBuf++;
|
||||
}
|
||||
|
||||
|
||||
if (*lpBuf == 0) {
|
||||
lpBuf++;
|
||||
lpmiItem->_action[i]._when = NULL;
|
||||
|
|
|
@ -33,8 +33,6 @@ namespace MPAL {
|
|||
* MemoryManager methods
|
||||
\****************************************************************************/
|
||||
|
||||
const uint32 BLOCK_ID = 0x12345678;
|
||||
|
||||
/**
|
||||
* Allocates a new memory block
|
||||
* @return Returns a MemoryItem instance for the new block
|
||||
|
|
|
@ -69,6 +69,8 @@ public:
|
|||
#define GMEM_MOVEABLE 2
|
||||
#define GMEM_ZEROINIT 4
|
||||
|
||||
const uint32 BLOCK_ID = 0x12345678;
|
||||
|
||||
} // end of namespace MPAL
|
||||
|
||||
} // end of namespace Tony
|
||||
|
|
|
@ -39,19 +39,6 @@ namespace Tony {
|
|||
|
||||
namespace MPAL {
|
||||
|
||||
#define GETARG(type) va_arg(v, type)
|
||||
|
||||
/****************************************************************************\
|
||||
* Copyright
|
||||
\****************************************************************************/
|
||||
|
||||
const char *mpalCopyright =
|
||||
"\n\nMPAL - MultiPurpose Adventure Language for Windows 95\n"
|
||||
"Copyright 1997-98 Giovanni Bajo and Luca Giusti\n"
|
||||
"ALL RIGHTS RESERVED\n"
|
||||
"\n"
|
||||
"\n";
|
||||
|
||||
/****************************************************************************\
|
||||
* Internal functions
|
||||
\****************************************************************************/
|
||||
|
@ -363,24 +350,22 @@ static char *duplicateDialogPeriod(uint32 nPeriod) {
|
|||
MpalHandle resLoad(uint32 dwId) {
|
||||
MpalHandle h;
|
||||
char head[4];
|
||||
uint32 nBytesRead;
|
||||
uint32 nSizeComp, nSizeDecomp;
|
||||
byte *temp, *buf;
|
||||
|
||||
for (int i = 0; i < GLOBALS._nResources; i++)
|
||||
if (GLOBALS._lpResources[i * 2] == dwId) {
|
||||
GLOBALS._hMpr.seek(GLOBALS._lpResources[i * 2 + 1]);
|
||||
nBytesRead = GLOBALS._hMpr.read(head, 4);
|
||||
uint32 nBytesRead = GLOBALS._hMpr.read(head, 4);
|
||||
if (nBytesRead != 4)
|
||||
return NULL;
|
||||
if (head[0] != 'R' || head[1] != 'E' || head[2] != 'S' || head[3] != 'D')
|
||||
return NULL;
|
||||
|
||||
nSizeDecomp = GLOBALS._hMpr.readUint32LE();
|
||||
uint32 nSizeDecomp = GLOBALS._hMpr.readUint32LE();
|
||||
if (GLOBALS._hMpr.err())
|
||||
return NULL;
|
||||
|
||||
nSizeComp = GLOBALS._hMpr.readUint32LE();
|
||||
uint32 nSizeComp = GLOBALS._hMpr.readUint32LE();
|
||||
if (GLOBALS._hMpr.err())
|
||||
return NULL;
|
||||
|
||||
|
@ -463,18 +448,16 @@ static uint32 *GetItemList(uint32 nLoc) {
|
|||
|
||||
static LpItem getItemData(uint32 nOrdItem) {
|
||||
LpMpalItem curitem = GLOBALS._lpmiItems + nOrdItem;
|
||||
LpItem ret;
|
||||
MpalHandle hDat;
|
||||
char *dat;
|
||||
char *patlength;
|
||||
|
||||
// Zeroing out the allocated memory is required!!!
|
||||
ret = (LpItem)globalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizeof(Item));
|
||||
LpItem ret = (LpItem)globalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizeof(Item));
|
||||
if (ret == NULL)
|
||||
return NULL;
|
||||
ret->_speed = 150;
|
||||
|
||||
hDat = resLoad(curitem->_dwRes);
|
||||
MpalHandle hDat = resLoad(curitem->_dwRes);
|
||||
dat = (char *)globalLock(hDat);
|
||||
|
||||
if (dat[0] == 'D' && dat[1] == 'A' && dat[2] == 'T') {
|
||||
|
|
|
@ -102,6 +102,8 @@ namespace MPAL {
|
|||
#define MAXPATTERN 40 // pattern of animation of an object
|
||||
#define MAXPOLLINGLOCATIONS 64
|
||||
|
||||
#define GETARG(type) va_arg(v, type)
|
||||
|
||||
/**
|
||||
* Macro for use with queries that may refer to X and Y co-ordinates
|
||||
*/
|
||||
|
|
|
@ -383,7 +383,7 @@ void RMResUpdate::init(const Common::String &fileName) {
|
|||
// It doesn't exist, so exit immediately
|
||||
return;
|
||||
|
||||
uint8 version = _hFile.readByte();
|
||||
_hFile.readByte(); // Version, unused
|
||||
|
||||
_numUpd = _hFile.readUint32LE();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue