オペランドに文字定数が指定された場合の動作を修正
[YACASL2.git] / src / struct.c
index 7f6fd41..b591611 100644 (file)
@@ -6,33 +6,40 @@ WORD *memory;
 /* COMET IIのCPUレジスタ */
 WORD GR[REGSIZE], SP, PR, FR;
 
-/* エラーメッセージ */
-int cerrno = 0;
-char *cerrmsg;
-
-/* レジストリの内容を表示する場合はtrue */
-bool tracemode = false;
-
-/* レジストリの内容を論理値(0〜65535)で表示する場合はtrue */
-bool logicalmode = false;
-
-/* メモリの内容を表示する場合はtrue */
-bool dumpmode = false;
-
-/* ソースを表示する場合はtrue */
-bool srcmode = false;
-
-/* ラベル表を表示する場合はtrue */
-bool labelmode = false;
-
-/* ラベル表を表示して終了する場合はtrue */
-bool onlylabelmode = false;
-
-/* アセンブラ詳細結果を表示する場合はtrue */
-bool asdetailmode = false;
-
-/* アセンブルだけを行う場合はtrue */
-bool onlyassemblemode = false;
+CERRARRAY cerr[] = {
+    { 101, "label already defined" },
+    { 102, "label table is full" },
+    { 103, "label not found" },
+    { 104, "label length is too long" },
+    { 105, "no command in the line" },
+    { 106, "operand count mismatch" },
+    { 107, "no label in START" },
+    { 108, "not command of operand \"r\"" },
+    { 109, "not command of operand \"r1,r2\"" },
+    { 110, "not command of operand \"r,adr[,x]\"" },
+    { 111, "not command of operand \"adr[,x]\"" },
+    { 112, "not command of no operand" },
+    { 113, "command not defined" },
+    { 114, "not integer" },
+    { 115, "not hex" },
+    { 116, "out of hex range" },
+    { 117, "operand is too many" },
+    { 118, "operand length is too long" },
+    { 119, "out of COMET II memory" },
+    { 120, "GR0 in operand x" },
+    { 121, "cannot get operand token" },
+    { 122, "cannot create hash table" },
+    { 123, "illegal string" },
+    { 124, "more than one character in literal" },
+    { 201, "execute - out of COMET II memory" },
+    { 202, "SVC input - out of Input memory" },
+    { 203, "SVC output - out of COMET II memory" },
+    { 204, "Program Register (PR) - out of COMET II memory" },
+    { 205, "Stack Pointer (SP) - cannot allocate stack buffer" },
+    { 206, "Address - out of COMET II memory" },
+    { 207, "Stack Pointer (SP) - out of COMET II memory" },
+    { 0, NULL },
+};
 
 /* メモリーサイズ */
 int memsize = DEFAULT_MEMSIZE;
@@ -45,13 +52,3 @@ WORD startptr = 0x0;
 
 /* 実行終了番地 */
 WORD endptr = 0x0;
-
-/* ハッシュ値を取得する */
-unsigned hash(const char *key, int size){
-    unsigned hashval;
-
-    for(hashval = 0; *key != '\0'; key++){
-        hashval = *key + 31 * hashval;
-    }
-    return hashval % size;
-}