Add Bocfel interpreter
[projects/chimara/chimara.git] / interpreters / bocfel / zterp.h
1 #ifndef ZTERP_H
2 #define ZTERP_H
3
4 #include <stdint.h>
5
6 struct options
7 {
8   long eval_stack_size;
9   long call_stack_size;
10   int disable_color;
11   int disable_config;
12   int disable_timed;
13   int disable_sound;
14   int enable_escape;
15   char *escape_string;
16   int disable_fixed;
17   int assume_fixed;
18   int disable_graphics_font;
19   int enable_alt_graphics;
20   int show_id;
21   int disable_term_keys;
22   int disable_utf8;
23   int force_utf8;
24   int disable_meta_commands;
25   long int_number;
26   int int_version;
27   int replay_on;
28   char *replay_name;
29   int record_on;
30   char *record_name;
31   int transcript_on;
32   char *transcript_name;
33   long max_saves;
34   int disable_undo_compression;
35   int show_version;
36   int disable_abbreviations;
37   int enable_censorship;
38   int overwrite_transcript;
39   long random_seed;
40   char *random_device;
41 };
42
43 extern const char *game_file;
44 extern struct options options;
45
46 /* v3 */
47 #define FLAGS1_STATUSTYPE       (1U << 1)
48 #define FLAGS1_STORYSPLIT       (1U << 2)
49 #define FLAGS1_CENSOR           (1U << 3)
50 #define FLAGS1_NOSTATUS         (1U << 4)
51 #define FLAGS1_SCREENSPLIT      (1U << 5)
52 #define FLAGS1_VARIABLE         (1U << 6)
53
54 /* v4 */
55 #define FLAGS1_COLORS           (1U << 0)
56 #define FLAGS1_PICTURES         (1U << 1)
57 #define FLAGS1_BOLD             (1U << 2)
58 #define FLAGS1_ITALIC           (1U << 3)
59 #define FLAGS1_FIXED            (1U << 4)
60 #define FLAGS1_SOUND            (1U << 5)
61 #define FLAGS1_TIMED            (1U << 7)
62
63 #define FLAGS2_TRANSCRIPT       (1U << 0)
64 #define FLAGS2_FIXED            (1U << 1)
65 #define FLAGS2_STATUS           (1U << 2)
66 #define FLAGS2_PICTURES         (1U << 3)
67 #define FLAGS2_UNDO             (1U << 4)
68 #define FLAGS2_MOUSE            (1U << 5)
69 #define FLAGS2_COLORS           (1U << 6)
70 #define FLAGS2_SOUND            (1U << 7)
71 #define FLAGS2_MENUS            (1U << 8)
72
73 #define STATUS_IS_TIME()        (zversion == 3 && (BYTE(0x01) & FLAGS1_STATUSTYPE))
74 #define TIMER_AVAILABLE()       (zversion >= 4 && (BYTE(0x01) & FLAGS1_TIMED))
75
76 struct header
77 {
78   uint16_t release;
79   uint16_t dictionary;
80   uint16_t objects;
81   uint16_t globals;
82   uint16_t static_start;
83   uint16_t static_end;
84   uint16_t abbr;
85   uint32_t file_length;
86   uint8_t  serial[6];
87   uint16_t checksum;
88   uint32_t R_O;
89   uint32_t S_O;
90 };
91
92 extern uint32_t pc;
93 extern int zversion;
94 extern struct header header;
95 extern uint8_t atable[];
96
97 int is_story(const char *);
98
99 void write_header(void);
100
101 uint32_t unpack(uint16_t, int);
102 void store(uint16_t);
103 void process_story(void);
104
105 #ifndef ZTERP_NO_CHEAT
106 int cheat_find_freezew(uint32_t, uint16_t *);
107 #endif
108
109 void znop(void);
110 void zquit(void);
111 void zverify(void);
112 void zpiracy(void);
113 void zsave5(void);
114 void zrestore5(void);
115 void zsound_effect(void);
116
117 #endif