#include #include #include #include "joey.h" #include "ansiterm.h" #include "ztypes.h" #ifdef JOEY_IIGS segment "ifengine"; #endif extern int GLOBALVER; void configure(zbyte_t min_version, zbyte_t max_version); void process_arguments(char *game); void configure(zbyte_t min_version, zbyte_t max_version) { zbyte_t header[PAGE_SIZE]; read_page(0, header); datap = header; h_type = get_byte(H_TYPE); GLOBALVER = h_type; if (h_type < min_version || h_type > max_version || (get_byte( H_CONFIG ) & CONFIG_BYTE_SWAPPED)) { fatal( "Wrong game or version" ); } if (h_type < V4) { story_scaler = 2; story_shift = 1; property_mask = P3_MAX_PROPERTIES - 1; property_size_mask = 0xe0; } else if (h_type < V8) { story_scaler = 4; story_shift = 2; property_mask = P4_MAX_PROPERTIES - 1; property_size_mask = 0x3f; } else { story_scaler = 8; story_shift = 3; property_mask = P4_MAX_PROPERTIES - 1; property_size_mask = 0x3f; } h_config = get_byte(H_CONFIG); h_version = get_word(H_VERSION); h_data_size = get_word(H_DATA_SIZE); h_start_pc = get_word(H_START_PC); h_words_offset = get_word(H_WORDS_OFFSET); h_objects_offset = get_word(H_OBJECTS_OFFSET); h_globals_offset = get_word(H_GLOBALS_OFFSET); h_restart_size = get_word(H_RESTART_SIZE); h_flags = get_word(H_FLAGS); h_synonyms_offset = get_word(H_SYNONYMS_OFFSET); h_file_size = get_word(H_FILE_SIZE); if (h_file_size == 0) { h_file_size = (zword_t)get_story_size(); } h_checksum = get_word(H_CHECKSUM); h_alternate_alphabet_offset = get_word(H_ALTERNATE_ALPHABET_OFFSET); if (h_type >= V5) { h_unicode_table = get_word(H_UNICODE_TABLE); } datap = NULL; } void process_arguments(char *game) { int size; monochrome = 0; hist_buf_size = 1024; bigscreen = 0; screen_rows = 25; screen_cols = 40; right_margin = 0; top_margin = 0; size = 1024; hist_buf_size = (hist_buf_size > size) ? hist_buf_size : size; if (hist_buf_size > 16384) { hist_buf_size = 16384; } fTandy = 0; //default_fg = atoi( optarg ); //default_bg = atoi( optarg ); monochrome = 1; open_story(game); } int main(void) { FILE *in; jlImgT *font = NULL; char name[40]; char game[40]; char text[40]; in = fopen("data/gamedata.dat", "rt"); if (in != NULL) { fgets(name, 40, in); fgets(game, 40, in); fgets(text, 40, in); fclose(in); name[strlen(name) - 1] = 0; game[strlen(game) - 1] = 0; text[strlen(text) - 1] = 0; jlUtilStartup(name); if (!jlImgLoad(font, text)) { jlUtilDie("Unable to load [%s] (%d)", text, strlen(text)); } termStart(font, 0, 0, 40, 25); termDestruciveBackspace(false); termMoveCursor(1, 25); termSaveCursor(); process_arguments(game); configure(V1, V8); initialize_screen(); load_cache(); z_restart(); (void)interpret(); unload_cache(); close_story(); close_script(); reset_screen(); termStop(); jlImgFree(font); jlUtilShutdown(); } }