
/*
 * extern.c
 *
 * Global data.
 *
 */

#include "ztypes.h"

/* Game header data */
char input_hack[500];

z_globals * init_globals()
{
  z_globals gl_real;
  z_globals * tmp;

  
  gl_real.h_type = 0;
  gl_real.h_config = 0;
  gl_real.h_version = 0;
  gl_real.h_data_size = 0;
  gl_real.h_start_pc = 0;
  gl_real.h_words_offset = 0;
  gl_real.h_objects_offset = 0;
  gl_real.h_globals_offset = 0;
  gl_real.h_restart_size = 0;
  gl_real.h_flags = 0;
  gl_real.h_synonyms_offset = 0;
  gl_real.h_file_size = 0;
  gl_real.h_checksum = 0;
  gl_real.h_interpreter = INTERP_MSDOS;
  gl_real.h_interpreter_version = 'B'; /* Interpreter version 2 */
  gl_real.h_alternate_alphabet_offset = 0;
  
  /* Game version specific data */
  
  gl_real.story_scaler = 0;
  gl_real.story_shift = 0;
  gl_real.property_mask = 0;
  gl_real.property_size_mask = 0;
  
  /* Stack and PC data */
  
  gl_real.stack[STACK_SIZE];
  gl_real.sp = STACK_SIZE;
  gl_real.fp = STACK_SIZE - 1;
  gl_real.pc = 0;
  gl_real.restart_pc = 0;
  gl_real.interpreter_state = RUN;
  gl_real.interpreter_status = 0;
  
  /* Data region data */
  
  gl_real.data_size = 0;
  gl_real.datap = NULL;
  gl_real.undo_datap = NULL;
  
  /* Screen size data */
  
  gl_real.screen_rows = 0;
  gl_real.screen_cols = 0;
  gl_real.right_margin = DEFAULT_RIGHT_MARGIN;
  gl_real.top_margin = DEFAULT_TOP_MARGIN;
  
  /* Current window data */
  
  gl_real.screen_window = TEXT_WINDOW;
  
  /* Formatting and output control data */
  
  gl_real.formatting = ON;
  gl_real.outputting = ON;
  gl_real.redirecting = OFF;
  gl_real.scripting_disable = OFF;
  gl_real.scripting = OFF;
  gl_real.recording = OFF;
  gl_real.replaying = OFF;
  gl_real.font = 1;
  
  /* Status region data */
  
  gl_real.status_active = OFF;
  gl_real.status_size = 0;
  
/* Text output buffer data */
  
  gl_real.lines_written = 0;
  gl_real.status_pos = 0;
  
  /* Dynamic buffer data */
  
  gl_real.line = NULL;
  gl_real.status_line = NULL;
  
  /* Character translation tables */
  
  /* gl_real.lookup_table[3][26]; */
  
  /* from input.c */
  gl_real.dictionary_offset = 0;
  gl_real.dictionary_size = 0;
  gl_real.entry_size = 0;
  
  /* from interpre.c */
  gl_real.halt = FALSE;
  
  /* from text.c */
  gl_real.saved_formatting = ON;
  gl_real.line_pos = 0;
  gl_real.char_count = 0;
  gl_real.story_buffer = 0;
  gl_real.story_pos = 0;
  gl_real.story_count = 0;
  
  tmp = (z_globals *) malloc(sizeof(gl_real));
  memcpy(tmp, &gl_real, sizeof(z_globals));
  return(tmp);
}

void free_globals(z_globals *gl)
{
  free(gl);
}
