Sync HE100.

Minor cleanup.

svn-id: r18215
This commit is contained in:
Travis Howell 2005-05-22 10:04:10 +00:00
parent 8314fc2d22
commit 76f8021a28
2 changed files with 24 additions and 29 deletions

View file

@ -578,26 +578,27 @@ void ScummEngine_v100he::o100_actorOps() {
} }
void ScummEngine_v100he::o100_arrayOps() { void ScummEngine_v100he::o100_arrayOps() {
ArrayHeader *ah;
byte string[1024];
int dim1end, dim1start, dim2end, dim2start;
int id, len, b, c, list[128];
int offs, tmp, tmp2;
uint tmp3;
byte subOp = fetchScriptByte(); byte subOp = fetchScriptByte();
int array = fetchScriptWord(); int array = fetchScriptWord();
int offs, tmp, tmp2, tmp3; debug(1,"o100_arrayOps: array %d case %d", array, subOp);
int dim1end, dim1start, dim2end, dim2start;
int id, len, b, c;
ArrayHeader *ah;
int list[128];
byte string[1024];
debug(1,"o100_arrayOps: case %d", subOp);
switch (subOp) { switch (subOp) {
case 35: case 35:
decodeScriptString(string); decodeScriptString(string);
len = resStrLen(string) + 1; len = resStrLen(string);
ah = defineArray(array, kStringArray, 0, 0, 0, len); ah = defineArray(array, kStringArray, 0, 0, 0, len);
memcpy(ah->data, string, len); memcpy(ah->data, string, len);
break; break;
case 77: // SO_ASSIGN_STRING case 77: // SO_ASSIGN_STRING
copyScriptString(string, sizeof(string)); copyScriptString(string, sizeof(string));
len = resStrLen(string) + 1; len = resStrLen(string);
ah = defineArray(array, kStringArray, 0, 0, 0, len); ah = defineArray(array, kStringArray, 0, 0, 0, len);
memcpy(ah->data, string, len); memcpy(ah->data, string, len);
break; break;
@ -606,7 +607,7 @@ void ScummEngine_v100he::o100_arrayOps() {
len = getStackList(list, ARRAYSIZE(list)); len = getStackList(list, ARRAYSIZE(list));
id = readVar(array); id = readVar(array);
if (id == 0) if (id == 0)
error("o100_arrayOps: Must DIM a two dimensional array before assigning"); error("Must DIM a two dimensional array before assigning");
c = pop(); c = pop();
while (--len >= 0) { while (--len >= 0) {
writeArray(array, c, len, list[len]); writeArray(array, c, len, list[len]);
@ -617,7 +618,7 @@ void ScummEngine_v100he::o100_arrayOps() {
c = pop(); c = pop();
id = readVar(array); id = readVar(array);
if (id == 0) { if (id == 0) {
defineArray(array, kDwordArray, 0, 0, 0, b + c); defineArray(array, kDwordArray, 0, 0, 0, b + c - 1);
} }
while (c--) { while (c--) {
writeArray(array, 0, b + c, pop()); writeArray(array, 0, b + c, pop());
@ -657,7 +658,7 @@ void ScummEngine_v100he::o100_arrayOps() {
int a1_dim2end = pop(); int a1_dim2end = pop();
int a1_dim2start = pop(); int a1_dim2start = pop();
if (a1_dim1end - a1_dim1start != a2_dim1end - a2_dim1start || a2_dim2end - a2_dim2start != a1_dim2end - a1_dim2start) { if (a1_dim1end - a1_dim1start != a2_dim1end - a2_dim1start || a2_dim2end - a2_dim2start != a1_dim2end - a1_dim2start) {
warning("Source and dest ranges size are mismatched"); error("Source and dest ranges size are mismatched");
} }
copyArray(array, a1_dim2start, a1_dim2end, a1_dim1start, a1_dim1end, array2, a2_dim2start, a2_dim2end, a2_dim1start, a2_dim1end); copyArray(array, a1_dim2start, a1_dim2end, a1_dim1start, a1_dim1end, array2, a2_dim2start, a2_dim2end, a2_dim1start, a2_dim1end);
} }
@ -674,12 +675,9 @@ void ScummEngine_v100he::o100_arrayOps() {
defineArray(array, kDwordArray, dim2start, dim2end, dim1start, dim1end); defineArray(array, kDwordArray, dim2start, dim2end, dim1start, dim1end);
} }
len = c - b;
len |= dim2end;
len = len - dim2end + 1;
offs = (b >= c) ? 1 : -1; offs = (b >= c) ? 1 : -1;
tmp2 = c; tmp2 = c;
tmp3 = len; tmp3 = c - b + 1;;
while (dim2start <= dim2end) { while (dim2start <= dim2end) {
tmp = dim1start; tmp = dim1start;
while (tmp <= dim1end) { while (tmp <= dim1end) {

View file

@ -1443,17 +1443,17 @@ void ScummEngine_v72he::o72_findObject() {
} }
void ScummEngine_v72he::o72_arrayOps() { void ScummEngine_v72he::o72_arrayOps() {
ArrayHeader *ah;
byte string[1024];
int dim1end, dim1start, dim2end, dim2start;
int id, len, b, c, list[128];
int offs, tmp, tmp2;
uint tmp3;
byte subOp = fetchScriptByte(); byte subOp = fetchScriptByte();
int array = fetchScriptWord(); int array = fetchScriptWord();
int offs, tmp, tmp2, tmp3; debug(1,"o72_arrayOps: array %d case %d", array, subOp);
int dim1end, dim1start, dim2end, dim2start;
int id, len, b, c;
ArrayHeader *ah;
int list[128];
byte string[1024];
debug(1,"o72_arrayOps: case %d", subOp);
switch (subOp) { switch (subOp) {
case 7: // SO_ASSIGN_STRING case 7: // SO_ASSIGN_STRING
copyScriptString(string, sizeof(string)); copyScriptString(string, sizeof(string));
@ -1496,7 +1496,7 @@ void ScummEngine_v72he::o72_arrayOps() {
int a1_dim2end = pop(); int a1_dim2end = pop();
int a1_dim2start = pop(); int a1_dim2start = pop();
if (a1_dim1end - a1_dim1start != a2_dim1end - a2_dim1start || a2_dim2end - a2_dim2start != a1_dim2end - a1_dim2start) { if (a1_dim1end - a1_dim1start != a2_dim1end - a2_dim1start || a2_dim2end - a2_dim2start != a1_dim2end - a1_dim2start) {
warning("Source and dest ranges size are mismatched"); error("Source and dest ranges size are mismatched");
} }
copyArray(array, a1_dim2start, a1_dim2end, a1_dim1start, a1_dim1end, array2, a2_dim2start, a2_dim2end, a2_dim1start, a2_dim1end); copyArray(array, a1_dim2start, a1_dim2end, a1_dim1start, a1_dim1end, array2, a2_dim2start, a2_dim2end, a2_dim1start, a2_dim1end);
} }
@ -1513,12 +1513,9 @@ void ScummEngine_v72he::o72_arrayOps() {
defineArray(array, kDwordArray, dim2start, dim2end, dim1start, dim1end); defineArray(array, kDwordArray, dim2start, dim2end, dim1start, dim1end);
} }
len = c - b;
len |= dim2end;
len = len - dim2end + 1;
offs = (b >= c) ? 1 : -1; offs = (b >= c) ? 1 : -1;
tmp2 = c; tmp2 = c;
tmp3 = len; tmp3 = c - b + 1;;
while (dim2start <= dim2end) { while (dim2start <= dim2end) {
tmp = dim1start; tmp = dim1start;
while (tmp <= dim1end) { while (tmp <= dim1end) {