diff --git a/src/cmdd.c b/src/cmdd.c index a0e260c..ed2b883 100644 --- a/src/cmdd.c +++ b/src/cmdd.c @@ -77,15 +77,15 @@ void commandDR() { void commandDF() { int *data_var = getCaliVariable(); - int varno = preVarNo; + int page = preVarPage; + int offset = preVarIndex; int cnt = getCaliValue(); int data = getCaliValue(); DEBUG_COMMAND("DF %p,%d,%d:\n", data_var, cnt, data); - const arrayVarStruct* array = &sysVarAttribute[varno]; - if (array->page) { - int maxlen = arrayVarBuffer[array->page - 1].size - array->offset - *array->pointvar; + if (page) { + int maxlen = arrayVarBuffer[page - 1].size - offset; if (cnt > maxlen) { WARNING("%03d:%05x: count exceeds array boundary (%d > %d)\n", sl_getPage(), sl_getIndex(), cnt, maxlen); cnt = maxlen; diff --git a/src/variable.c b/src/variable.c index 1de3f96..04d0265 100644 --- a/src/variable.c +++ b/src/variable.c @@ -30,10 +30,16 @@ #include "xsystem35.h" #include "scenario.h" +typedef struct { + int *pointvar; + int page; + int offset; +} VariableAttributes; + /* システム変数 */ int sysVar[SYSVAR_MAX]; /* 配列変数の情報 */ -arrayVarStruct sysVarAttribute[SYSVAR_MAX]; +static VariableAttributes attributes[SYSVAR_MAX]; /* 配列本体 */ arrayVarBufferStruct arrayVarBuffer[ARRAYVAR_PAGEMAX]; /* 64bit変数 */ @@ -57,7 +63,7 @@ static char *advance(const char *s, int n) { } int *v_ref(int var) { - arrayVarStruct *attr = &sysVarAttribute[var]; + VariableAttributes *attr = &attributes[var]; preVarPage = attr->page; preVarNo = var; @@ -80,7 +86,7 @@ int *v_ref(int var) { } int *v_ref_indexed(int var, int index) { - arrayVarStruct *attr = &sysVarAttribute[var]; + VariableAttributes *attr = &attributes[var]; preVarPage = attr->page; preVarNo = var; @@ -131,15 +137,15 @@ extern boolean v_defineArrayVar(int datavar, int *pointvar, int offset, int page if (page < 0 || page > ARRAYVAR_PAGEMAX - 1) { return false; } if (offset < 0 || offset >= arrayVarBuffer[page - 1].size) { return false; } - sysVarAttribute[datavar].pointvar = pointvar; - sysVarAttribute[datavar].page = page; - sysVarAttribute[datavar].offset = offset; + attributes[datavar].pointvar = pointvar; + attributes[datavar].page = page; + attributes[datavar].offset = offset; return true; } /* 配列変数の割り当て解除 DR */ extern boolean v_releaseArrayVar(int datavar) { - sysVarAttribute[datavar].page = 0; + attributes[datavar].page = 0; return true; } diff --git a/src/variable.h b/src/variable.h index 0de9232..b5edd49 100644 --- a/src/variable.h +++ b/src/variable.h @@ -39,14 +39,7 @@ typedef struct { int *value; } arrayVarBufferStruct; -typedef struct { - int *pointvar; - int page; - int offset; -} arrayVarStruct; - extern int sysVar[]; -extern arrayVarStruct sysVarAttribute[]; extern arrayVarBufferStruct arrayVarBuffer[]; extern double longVar[];