- case Opcode_CRLF:
- case Opcode_PRINT:
- case Opcode_QUIT:
- break;
-
- case Opcode_PRINTI:
- case Opcode_PRINTR:
- {
- char *p = (char *) a + len;
- p = (char *) pass_spaces (p);
- if (*p == '\"')
- {
- p++;
- string str;
- while (*p != '\"')
- {
- str += *p;
- ++p;
- }
- len = p - a;
- mem_additional =
- String_table::encrypt_string (str.c_str (), NULL);
- }
- break;
- }
- default:
- fatal_error ("error! instruction not supported");
- return 0;
+ len = b ? b - a : strlen(a);
+ ZOpcode *op = (ZOpcode *)symtable_lookup2(Opcodes, a, len);
+ if (op)
+ {
+ ZOpcode_flags flags = op->flags;
+ ZMemblock *mem_additional = NULL;
+
+ switch (op->opcode)
+ {
+ case Opcode_CRLF:
+ case Opcode_PRINT:
+ case Opcode_QUIT:
+ break;
+
+ case Opcode_PRINTI:
+ case Opcode_PRINTR:
+ {
+ char *p = (char *)a + len;
+ p = (char *)pass_spaces(p);
+ if (*p == '\"')
+ {
+ p++;
+ string str;
+ while (*p != '\"')
+ {
+ str += *p;
+ ++p;
+ }
+ len = p - a;
+ mem_additional =
+ String_table::encrypt_string(str.c_str(), NULL);
+ }
+ break;
+ }
+ default:
+ {
+ display_error = true;
+ }
+ }
+
+
+ if (display_error == false)
+ {
+
+ int instruction_size = 1;
+ if (mem_additional)
+ instruction_size += mem_additional->used_size;
+
+ g_codes[g_number_of_instructions] = zmem_init(instruction_size);
+ zmem_putbyte(g_codes[g_number_of_instructions], op->opcode);
+
+ if (mem_additional)
+ {
+ for (int i = 0; i < mem_additional->used_size; ++i)
+ zmem_putbyte(g_codes[g_number_of_instructions],
+ mem_additional->contents[i]);
+ zmem_destroy(mem_additional);
+ }
+
+ ++g_number_of_instructions;
+ return len;
+ }
+ }
+ else
+ {
+ //display_error = true;
+ string message = "wrong line \"" + string(a) + string("\"");
+ fatal_error(build_error_message(message.c_str()).c_str());
+ }