#include "defs.h"
-/* Unfortunately, frotz's bool definition conflicts with that of curses.
- But since no os_* function uses it, it's safe to let the frotz core see
- this definition, but have the unix port see the curses version. */
-
#ifdef MSDOS_16BIT
#ifdef USE_UTF8
#error UTF-8 is not supported in DOS Frotz
#endif
enum story {
- ZORK1,
- ZORK2,
- ZORK3,
- ZORK1G,
- MINIZORK,
- SAMPLER1,
- SAMPLER2,
- ENCHANTER,
- SORCERER,
- SPELLBREAKER,
- PLANETFALL,
- STATIONFALL,
- BALLYHOO,
- BORDER_ZONE,
- AMFV,
- HHGG,
- LGOP,
- SUSPECT,
- BEYOND_ZORK,
- SHERLOCK,
- ZORK_ZERO,
- SHOGUN,
- ARTHUR,
- JOURNEY,
- LURKING_HORROR,
- BUREAUCRACY,
- TRINITY,
- UNKNOWN
+ ZORK1,
+ ZORK2,
+ ZORK3,
+ ZORK1G,
+ MINIZORK,
+ SAMPLER1,
+ SAMPLER2,
+ ENCHANTER,
+ SORCERER,
+ SPELLBREAKER,
+ PLANETFALL,
+ STATIONFALL,
+ BALLYHOO,
+ BORDER_ZONE,
+ AMFV,
+ HHGG,
+ LGOP,
+ SUSPECT,
+ BEYOND_ZORK,
+ SHERLOCK,
+ ZORK_ZERO,
+ SHOGUN,
+ ARTHUR,
+ JOURNEY,
+ LURKING_HORROR,
+ BUREAUCRACY,
+ TRINITY,
+ UNKNOWN
};
/*** screen window ***/
-
typedef struct {
- zword y_pos;
- zword x_pos;
- zword y_size;
- zword x_size;
- zword y_cursor;
- zword x_cursor;
- zword left;
- zword right;
- zword nl_routine;
- zword nl_countdown;
- zword style;
- zword colour;
- zword font;
- zword font_size;
- zword attribute;
- zword line_count;
- zword true_fore;
- zword true_back;
+ zword y_pos;
+ zword x_pos;
+ zword y_size;
+ zword x_size;
+ zword y_cursor;
+ zword x_cursor;
+ zword left;
+ zword right;
+ zword nl_routine;
+ zword nl_countdown;
+ zword style;
+ zword colour;
+ zword font;
+ zword font_size;
+ zword attribute;
+ zword line_count;
+ zword true_fore;
+ zword true_back;
} Zwindow;
#include "unused.h"
/*** Constants that may be set at compile time ***/
-
#ifndef MAX_UNDO_SLOTS
#define MAX_UNDO_SLOTS 500
#endif
extern const char build_timestamp[];
/* Assorted filename extensions */
-
#define EXT_SAVE ".qzl"
#define EXT_SCRIPT ".scr"
#define EXT_BLORB ".blb"
#endif
/*** Story file header format ***/
-
#define H_VERSION 0
#define H_CONFIG 1
#define H_RELEASE 2
#define HX_UNICODE_TABLE 3
/*** Various Z-machine constants ***/
-
#define V1 1
#define V2 2
#define V3 3
#define BEEP_LOW 2
/*** Constants for os_restart_game */
-
#define RESTART_BEGIN 0
#define RESTART_WPROP_SET 1
#define RESTART_END 2
/*** Character codes ***/
-
#define ZC_TIME_OUT 0x00
#define ZC_NEW_STYLE 0x01
#define ZC_NEW_FONT 0x02
#define hi(v) ((zbyte *)&v)[1]
#define SET_WORD(addr,v) asm {\
- les bx,zmp;\
- add bx,addr;\
- mov ax,v;\
- xchg al,ah;\
- mov es:[bx],ax }
+ les bx,zmp;\
+ add bx,addr;\
+ mov ax,v;\
+ xchg al,ah;\
+ mov es:[bx],ax }
#define LOW_WORD(addr,v) asm {\
- les bx,zmp;\
- add bx,addr;\
- mov ax,es:[bx];\
- xchg al,ah;\
- mov v,ax }
+ les bx,zmp;\
+ add bx,addr;\
+ mov ax,es:[bx];\
+ xchg al,ah;\
+ mov v,ax }
#define HIGH_WORD(addr,v) asm {\
- mov bx,word ptr zmp;\
- add bx,word ptr addr;\
- mov al,bh;\
- mov bh,0;\
- mov ah,0;\
- adc ah,byte ptr addr+2;\
- mov cl,4;\
- shl ax,cl;\
- add ax,word ptr zmp+2;\
- mov es,ax;\
- mov ax,es:[bx];\
- xchg al,ah;\
- mov v,ax }
+ mov bx,word ptr zmp;\
+ add bx,word ptr addr;\
+ mov al,bh;\
+ mov bh,0;\
+ mov ah,0;\
+ adc ah,byte ptr addr+2;\
+ mov cl,4;\
+ shl ax,cl;\
+ add ax,word ptr zmp+2;\
+ mov es,ax;\
+ mov ax,es:[bx];\
+ xchg al,ah;\
+ mov v,ax }
#define CODE_WORD(v) asm {\
- les bx,pcp;\
- mov ax,es:[bx];\
- xchg al,ah;\
- mov v,ax;\
- add word ptr pcp,2 }
+ les bx,pcp;\
+ mov ax,es:[bx];\
+ xchg al,ah;\
+ mov v,ax;\
+ add word ptr pcp,2 }
#define GET_PC(v) asm {\
- mov bx,word ptr pcp+2;\
- sub bx,word ptr zmp+2;\
- mov ax,bx;\
- mov cl,4;\
- shl bx,cl;\
- mov cl,12;\
- shr ax,cl;\
- add bx,word ptr pcp;\
- adc al,0;\
- sub bx,word ptr zmp;\
- sbb al,0;\
- mov word ptr v,bx;\
- mov word ptr v+2,ax }
+ mov bx,word ptr pcp+2;\
+ sub bx,word ptr zmp+2;\
+ mov ax,bx;\
+ mov cl,4;\
+ shl bx,cl;\
+ mov cl,12;\
+ shr ax,cl;\
+ add bx,word ptr pcp;\
+ adc al,0;\
+ sub bx,word ptr zmp;\
+ sbb al,0;\
+ mov word ptr v,bx;\
+ mov word ptr v+2,ax }
#define SET_PC(v) asm {\
- mov bx,word ptr zmp;\
- add bx,word ptr v;\
- mov al,bh;\
- mov bh,0;\
- mov ah,0;\
- adc ah,byte ptr v+2;\
- mov cl,4;\
- shl ax,cl;\
- add ax,word ptr zmp+2;\
- mov word ptr pcp,bx;\
- mov word ptr pcp+2,ax }
+ mov bx,word ptr zmp;\
+ add bx,word ptr v;\
+ mov al,bh;\
+ mov bh,0;\
+ mov ah,0;\
+ adc ah,byte ptr v+2;\
+ mov cl,4;\
+ shl ax,cl;\
+ add ax,word ptr zmp+2;\
+ mov word ptr pcp,bx;\
+ mov word ptr pcp+2,ax }
#endif /* MSDOS_16BIT */
/*** Z-machine opcodes ***/
+void z_add(void);
+void z_and(void);
+void z_art_shift(void);
+void z_buffer_mode(void);
+void z_call_n(void);
+void z_call_s(void);
+void z_catch(void);
+void z_check_arg_count(void);
+void z_check_unicode(void);
+void z_clear_attr(void);
+void z_copy_table(void);
+void z_dec(void);
+void z_dec_chk(void);
+void z_div(void);
+void z_draw_picture(void);
+void z_encode_text(void);
+void z_erase_line(void);
+void z_erase_picture(void);
+void z_erase_window(void);
+void z_get_child(void);
+void z_get_cursor(void);
+void z_get_next_prop(void);
+void z_get_parent(void);
+void z_get_prop(void);
+void z_get_prop_addr(void);
+void z_get_prop_len(void);
+void z_get_sibling(void);
+void z_get_wind_prop(void);
+void z_inc(void);
+void z_inc_chk(void);
+void z_input_stream(void);
+void z_insert_obj(void);
+void z_je(void);
+void z_jg(void);
+void z_jin(void);
+void z_jl(void);
+void z_jump(void);
+void z_jz(void);
+void z_load(void);
+void z_loadb(void);
+void z_loadw(void);
+void z_log_shift(void);
+void z_make_menu(void);
+void z_mod(void);
+void z_mouse_window(void);
+void z_move_window(void);
+void z_mul(void);
+void z_new_line(void);
+void z_nop(void);
+void z_not(void);
+void z_or(void);
+void z_output_stream(void);
+void z_picture_data(void);
+void z_picture_table(void);
+void z_piracy(void);
+void z_pop(void);
+void z_pop_stack(void);
+void z_print(void);
+void z_print_addr(void);
+void z_print_char(void);
+void z_print_form(void);
+void z_print_num(void);
+void z_print_obj(void);
+void z_print_paddr(void);
+void z_print_ret(void);
+void z_print_table(void);
+void z_print_unicode(void);
+void z_pull(void);
+void z_push(void);
+void z_push_stack(void);
+void z_put_prop(void);
+void z_put_wind_prop(void);
+void z_quit(void);
+void z_random(void);
+void z_read(void);
+void z_read_char(void);
+void z_read_mouse(void);
+void z_remove_obj(void);
+void z_restart(void);
+void z_restore(void);
+void z_restore_undo(void);
+void z_ret(void);
+void z_ret_popped(void);
+void z_rfalse(void);
+void z_rtrue(void);
+void z_save(void);
+void z_save_undo(void);
+void z_scan_table(void);
+void z_scroll_window(void);
+void z_set_attr(void);
+void z_set_font(void);
+void z_set_colour(void);
+void z_set_cursor(void);
+void z_set_margins(void);
+void z_set_window(void);
+void z_set_text_style(void);
+void z_show_status(void);
+void z_sound_effect(void);
+void z_split_window(void);
+void z_store(void);
+void z_storeb(void);
+void z_storew(void);
+void z_sub(void);
+void z_test(void);
+void z_test_attr(void);
+void z_throw(void);
+void z_tokenise(void);
+void z_verify(void);
+void z_window_size(void);
+void z_window_style(void);
-void z_add (void);
-void z_and (void);
-void z_art_shift (void);
-void z_buffer_mode (void);
-void z_call_n (void);
-void z_call_s (void);
-void z_catch (void);
-void z_check_arg_count (void);
-void z_check_unicode (void);
-void z_clear_attr (void);
-void z_copy_table (void);
-void z_dec (void);
-void z_dec_chk (void);
-void z_div (void);
-void z_draw_picture (void);
-void z_encode_text (void);
-void z_erase_line (void);
-void z_erase_picture (void);
-void z_erase_window (void);
-void z_get_child (void);
-void z_get_cursor (void);
-void z_get_next_prop (void);
-void z_get_parent (void);
-void z_get_prop (void);
-void z_get_prop_addr (void);
-void z_get_prop_len (void);
-void z_get_sibling (void);
-void z_get_wind_prop (void);
-void z_inc (void);
-void z_inc_chk (void);
-void z_input_stream (void);
-void z_insert_obj (void);
-void z_je (void);
-void z_jg (void);
-void z_jin (void);
-void z_jl (void);
-void z_jump (void);
-void z_jz (void);
-void z_load (void);
-void z_loadb (void);
-void z_loadw (void);
-void z_log_shift (void);
-void z_make_menu (void);
-void z_mod (void);
-void z_mouse_window (void);
-void z_move_window (void);
-void z_mul (void);
-void z_new_line (void);
-void z_nop (void);
-void z_not (void);
-void z_or (void);
-void z_output_stream (void);
-void z_picture_data (void);
-void z_picture_table (void);
-void z_piracy (void);
-void z_pop (void);
-void z_pop_stack (void);
-void z_print (void);
-void z_print_addr (void);
-void z_print_char (void);
-void z_print_form (void);
-void z_print_num (void);
-void z_print_obj (void);
-void z_print_paddr (void);
-void z_print_ret (void);
-void z_print_table (void);
-void z_print_unicode (void);
-void z_pull (void);
-void z_push (void);
-void z_push_stack (void);
-void z_put_prop (void);
-void z_put_wind_prop (void);
-void z_quit (void);
-void z_random (void);
-void z_read (void);
-void z_read_char (void);
-void z_read_mouse (void);
-void z_remove_obj (void);
-void z_restart (void);
-void z_restore (void);
-void z_restore_undo (void);
-void z_ret (void);
-void z_ret_popped (void);
-void z_rfalse (void);
-void z_rtrue (void);
-void z_save (void);
-void z_save_undo (void);
-void z_scan_table (void);
-void z_scroll_window (void);
-void z_set_attr (void);
-void z_set_font (void);
-void z_set_colour (void);
-void z_set_cursor (void);
-void z_set_margins (void);
-void z_set_window (void);
-void z_set_text_style (void);
-void z_show_status (void);
-void z_sound_effect (void);
-void z_split_window (void);
-void z_store (void);
-void z_storeb (void);
-void z_storew (void);
-void z_sub (void);
-void z_test (void);
-void z_test_attr (void);
-void z_throw (void);
-void z_tokenise (void);
-void z_verify (void);
-void z_window_size (void);
-void z_window_style (void);
/* Definitions for error handling functions and error codes. */
-
/* extern int err_report_mode; */
+void init_err(void);
+void runtime_error(int);
-void init_err (void);
-void runtime_error (int);
-
/* Error codes */
#define ERR_TEXT_BUF_OVF 1 /* Text buffer overflow */
#define ERR_STORE_RANGE 2 /* Store out of dynamic memory */
#define ERR_PLAY_SOUND 33 /* @play_sound called without SOUND_FLAG or OLD_SOUND_FLAG set */
#define ERR_NUM_ERRORS (33)
-/* There are four error reporting modes: never report errors;
- report only the first time a given error type occurs; report
- every time an error occurs; or treat all errors as fatal
- errors, killing the interpreter. I strongly recommend
- "report once" as the default. But you can compile in a
- different default by changing the definition of
- ERR_DEFAULT_REPORT_MODE. In any case, the player can
- specify a report mode on the command line by typing "-Z 0"
- through "-Z 3". */
-
+/*
+ * There are four error reporting modes: never report errors;
+ * report only the first time a given error type occurs; report
+ * every time an error occurs; or treat all errors as fatal
+ * errors, killing the interpreter. I strongly recommend
+ * "report once" as the default. But you can compile in a
+ * different default by changing the definition of
+ * ERR_DEFAULT_REPORT_MODE. In any case, the player can
+ * specify a report mode on the command line by typing "-Z 0"
+ * through "-Z 3".
+ *
+ */
#define ERR_REPORT_NEVER (0)
#define ERR_REPORT_ONCE (1)
#define ERR_REPORT_ALWAYS (2)
#define ERR_REPORT_FATAL (3)
-
#define ERR_DEFAULT_REPORT_MODE ERR_REPORT_ONCE
/*** Assorted initialization functions ***/
-void init_buffer (void);
-void init_process (void);
-void init_sound (void);
+void init_buffer(void);
+void init_process(void);
+void init_sound(void);
/*** Various global functions ***/
+zchar translate_from_zscii(zbyte);
+zbyte translate_to_zscii(zchar);
-zchar translate_from_zscii (zbyte);
-zbyte translate_to_zscii (zchar);
+void flush_buffer(void);
+void new_line(void);
+void print_char(zchar);
+void print_num(zword);
+void print_object(zword);
+void print_string(const char *);
-void flush_buffer (void);
-void new_line (void);
-void print_char (zchar);
-void print_num (zword);
-void print_object (zword);
-void print_string (const char *);
+void stream_mssg_on(void);
+void stream_mssg_off(void);
-void stream_mssg_on (void);
-void stream_mssg_off (void);
+void ret(zword);
+void store(zword);
+void branch(bool);
-void ret (zword);
-void store (zword);
-void branch (bool);
+void storeb(zword, zbyte);
+void storew(zword, zword);
-void storeb (zword, zbyte);
-void storew (zword, zword);
+void end_of_sound(void);
-void end_of_sound (void);
+int completion(const zchar *buffer, zchar *result);
-int completion (const zchar *buffer, zchar *result);
+bool is_terminator(zchar);
+void read_string(int max, zchar *buffer);
+bool read_yes_or_no(const char *);
-bool is_terminator (zchar);
-void read_string (int max, zchar *buffer);
-bool read_yes_or_no (const char *);
+void screen_new_line(void);
-void screen_new_line (void);
-
- /*** returns the current window ***/
-Zwindow * curwinrec( void);
+/*** returns the current window ***/
+Zwindow * curwinrec(void);
/*** Interface functions ***/
-
-void os_beep (int);
-int os_char_width (zchar);
-int os_check_unicode (int, zchar);
-void os_display_char (zchar);
-void os_display_string (const zchar *);
-void os_draw_picture (int, int, int);
-void os_erase_area (int, int, int, int, int);
-void os_fatal (const char *, ...);
-void os_finish_with_sample ();
-int os_font_data (int, int *, int *);
-void os_init_screen (void);
-void os_init_sound (void);
-FILE *os_load_story (void);
-void os_more_prompt (void);
-int os_peek_colour (void);
-int os_picture_data (int, int *, int *);
-void os_prepare_sample (int);
-void os_process_arguments (int, char *[]);
-int os_random_seed (void);
-char *os_read_file_name (const char *, int);
-zchar os_read_key (int, int);
-zchar os_read_line (int, zchar *, int, int, int);
-void os_reset_screen (void);
-void os_restart_game (int);
-void os_scroll_area (int, int, int, int, int);
-void os_set_colour (int, int);
-void os_set_cursor (int, int);
-void os_set_font (int);
-void os_set_text_style (int);
-void os_start_sample (int, int, int, zword);
-void os_stop_sample ();
-int os_storyfile_seek (FILE *, long, int);
-int os_storyfile_tell (FILE *);
-int os_string_width (const zchar *);
-void os_init_setup (void);
-void os_warn (const char *, ...);
-void os_quit (void);
+void os_beep(int);
+int os_char_width(zchar);
+int os_check_unicode(int, zchar);
+void os_display_char(zchar);
+void os_display_string(const zchar *);
+void os_draw_picture(int, int, int);
+void os_erase_area(int, int, int, int, int);
+void os_fatal(const char *, ...);
+void os_finish_with_sample(int);
+int os_font_data(int, int *, int *);
+void os_init_screen(void);
+void os_init_sound(void);
+FILE *os_load_story(void);
+void os_more_prompt(void);
+int os_peek_colour(void);
+int os_picture_data(int, int *, int *);
+void os_prepare_sample(int);
+void os_process_arguments(int, char *[]);
+int os_random_seed(void);
+char *os_read_file_name(const char *, int);
+zchar os_read_key(int, int);
+zchar os_read_line(int, zchar *, int, int, int);
+void os_reset_screen(void);
+void os_restart_game(int);
+void os_scroll_area(int, int, int, int, int);
+void os_set_colour(int, int);
+void os_set_cursor(int, int);
+void os_set_font(int);
+void os_set_text_style(int);
+void os_start_sample(int, int, int, zword);
+void os_stop_sample(int);
+int os_storyfile_seek(FILE *, long, int);
+int os_storyfile_tell(FILE *);
+int os_string_width(const zchar *);
+void os_init_setup(void);
+void os_warn(const char *, ...);
+void os_quit(void);
/**
* Called regularly by the interpreter, at least every few instructions
* (only when interpreting: e.g., not when waiting for input).
*/
-void os_tick (void);
+void os_tick(void);
/* Front ends call this if the terminal size changes. */
void resize_screen(void);
/* This is callable only from resize_screen. */
-bool os_repaint_window (int win, int ypos_old, int ypos_new, int xpos,
- int ysize, int xsize);
+bool os_repaint_window(int win, int ypos_old, int ypos_new, int xpos,
+ int ysize, int xsize);
#endif