149 lines
2.9 KiB
C
149 lines
2.9 KiB
C
#include <stdarg.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
|
|
#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();
|
|
}
|
|
|
|
}
|