- int code_start_offset = 64;
- Program_header.startPC = code_start_offset >> 2;
-
- m_code_size = 0;
- ZMemblock *zmem_code = zmem_init (65536);
-
- /// write zero number of local variables
- zmem_putbyte (zmem_code, 0); // number of local variables
- ++m_code_size;
-
- // write instructions' codes
- for (int i = 0; i < g_number_of_instructions; ++i)
- {
- for (int j = 0; j < g_codes[i]->used_size; ++j)
- {
- zmem_putbyte (zmem_code, g_codes[i]->contents[j]);
- ++m_code_size;
- }
- }
-
- if (m_code_size & 7)
- m_code_size += 8 - (m_code_size & 7);
-
- Program_header.dynamic_size = 8;
-
- //Program_header.h_file_size = 33; //sizeof(Program_header) + zmb->used_size;
-
- //m_code_size = 8;
-
- Word stringTableOffset = m_code_size;
- Program_header.H_STRINGS_OFFSET = (64 + stringTableOffset) >> 3;
-
- int stringTableSize = 64;
- Program_header.h_file_size =
- (code_start_offset + m_code_size + stringTableSize) >> 3;
- ZMemblock *zmb = zmem_init (Program_header.h_file_size * 8);
-
- for (int i = 0; i < m_code_size; ++i)
- zmem_putbyte (zmb, zmem_code->contents[i]);
-
- zmem_destroy (zmem_code);
-
- //zmem_putbyte(zmb, 0); // number of local variables
- //zmem_putbyte(zmb, 141); // print addr command
-
- //Word offset = 0;
- //zmem_putbyte(zmb, (offset >> 8) & 255);
- //zmem_putbyte(zmb, offset & 255);
-
- //zmem_putbyte(zmb, 186); // quit command
-
- // output zeros until string table begins
- while (zmb->used_size < stringTableOffset)
- zmem_putbyte (zmb, 0);
- //
- //// fill string table with one string
- //add_string_to_string_table("Hello, World!", zmb);
-
- outputToFile (&Program_header, file);
- fwrite (zmb->contents, zmb->allocated_size, 1, file);
- fclose (file);
- }
-
- return OK;
-}
-
-
-char *
-CMain::get_output_file_name ()