Add Bocfel interpreter
[projects/chimara/chimara.git] / libchimara / chimara-if.h
1 #ifndef __CHIMARA_IF_H__
2 #define __CHIMARA_IF_H__
3
4 #include <glib.h>
5 #include "chimara-glk.h"
6
7 G_BEGIN_DECLS
8
9 #define CHIMARA_TYPE_IF            (chimara_if_get_type())
10 #define CHIMARA_IF(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), CHIMARA_TYPE_IF, ChimaraIF))
11 #define CHIMARA_IF_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), CHIMARA_TYPE_IF, ChimaraIFClass))
12 #define CHIMARA_IS_IF(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), CHIMARA_TYPE_IF))
13 #define CHIMARA_IS_IF_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), CHIMARA_TYPE_IF))
14 #define CHIMARA_IF_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), CHIMARA_TYPE_IF, ChimaraIFClass))
15
16 /**
17  * ChimaraIFFormat:
18  * @CHIMARA_IF_FORMAT_Z5: Z-code version 5
19  * @CHIMARA_IF_FORMAT_Z6: Z-code version 6
20  * @CHIMARA_IF_FORMAT_Z8: Z-code version 8
21  * @CHIMARA_IF_FORMAT_Z_BLORB: Blorbed Z-code
22  * @CHIMARA_IF_FORMAT_GLULX: Glulx
23  * @CHIMARA_IF_FORMAT_GLULX_BLORB: Blorbed Glulx
24  *
25  * Constants representing all game formats supported by the Chimara system.
26  */
27 typedef enum {
28         /*< private >*/
29         CHIMARA_IF_FORMAT_NONE = -1,
30         /*< public >*/
31         CHIMARA_IF_FORMAT_Z5,
32         CHIMARA_IF_FORMAT_Z6,
33         CHIMARA_IF_FORMAT_Z8,
34         CHIMARA_IF_FORMAT_Z_BLORB,
35         CHIMARA_IF_FORMAT_GLULX,
36         CHIMARA_IF_FORMAT_GLULX_BLORB,
37         /*< private >*/
38         CHIMARA_IF_NUM_FORMATS
39 } ChimaraIFFormat;
40
41 /**
42  * ChimaraIFInterpreter:
43  * @CHIMARA_IF_INTERPRETER_FROTZ: Frotz
44  * @CHIMARA_IF_INTERPRETER_NITFOL: Nitfol
45  * @CHIMARA_IF_INTERPRETER_GLULXE: Glulxe
46  * @CHIMARA_IF_INTERPRETER_GIT: Git
47  * @CHIMARA_IF_INTERPRETER_BOCFEL: Bocfel
48  * 
49  * Constants representing the available interpreter plugins.
50  */
51 typedef enum {
52     /*< private >*/
53         CHIMARA_IF_INTERPRETER_NONE = -1,
54         /*< public >*/
55         CHIMARA_IF_INTERPRETER_FROTZ,
56         CHIMARA_IF_INTERPRETER_NITFOL,
57         CHIMARA_IF_INTERPRETER_GLULXE,
58         CHIMARA_IF_INTERPRETER_GIT,
59         CHIMARA_IF_INTERPRETER_BOCFEL,
60         /*< private >*/
61         CHIMARA_IF_NUM_INTERPRETERS
62 } ChimaraIFInterpreter;
63
64 /**
65  * ChimaraIFZmachineVersion:
66  * @CHIMARA_IF_ZMACHINE_DEFAULT: Use the interpreter's default interpreter
67  * number.
68  * @CHIMARA_IF_ZMACHINE_DECSYSTEM_20: DEC System 20
69  * @CHIMARA_IF_ZMACHINE_APPLE_IIE: Apple IIe
70  * @CHIMARA_IF_ZMACHINE_MACINTOSH: Apple Macintosh
71  * @CHIMARA_IF_ZMACHINE_AMIGA: Commodore Amiga
72  * @CHIMARA_IF_ZMACHINE_ATARI_ST: Atari ST
73  * @CHIMARA_IF_ZMACHINE_IBM_PC: IBM PC
74  * @CHIMARA_IF_ZMACHINE_COMMODORE_128: Commodore 128
75  * @CHIMARA_IF_ZMACHINE_COMMODORE_64: Commodore 64
76  * @CHIMARA_IF_ZMACHINE_APPLE_IIC: Apple IIc
77  * @CHIMARA_IF_ZMACHINE_APPLE_IIGS: Apple IIgs
78  * @CHIMARA_IF_ZMACHINE_TANDY_COLOR: Tandy Color Computer
79  * 
80  * Allowed values for the #ChimaraIF:interpreter-number property. All trademarks
81  * are the property of their respective owners.
82  */
83 typedef enum {
84         CHIMARA_IF_ZMACHINE_DEFAULT = 0,
85         CHIMARA_IF_ZMACHINE_DECSYSTEM_20,
86         CHIMARA_IF_ZMACHINE_APPLE_IIE,
87         CHIMARA_IF_ZMACHINE_MACINTOSH,
88         CHIMARA_IF_ZMACHINE_AMIGA,
89         CHIMARA_IF_ZMACHINE_ATARI_ST,
90         CHIMARA_IF_ZMACHINE_IBM_PC,
91         CHIMARA_IF_ZMACHINE_COMMODORE_128,
92         CHIMARA_IF_ZMACHINE_COMMODORE_64,
93         CHIMARA_IF_ZMACHINE_APPLE_IIC,
94         CHIMARA_IF_ZMACHINE_APPLE_IIGS,
95         CHIMARA_IF_ZMACHINE_TANDY_COLOR,
96         /*< private >*/
97         CHIMARA_IF_ZMACHINE_MAXVAL = CHIMARA_IF_ZMACHINE_TANDY_COLOR
98 } ChimaraIFZmachineVersion;
99
100 /**
101  * ChimaraIF:
102  * 
103  * This structure contains no public members.
104  */
105 typedef struct {
106         ChimaraGlk parent_instance;
107         
108         /*< public >*/
109 } ChimaraIF;
110
111 typedef struct {
112         ChimaraGlkClass parent_class;
113         /* Signals */
114         void(* command) (ChimaraIF *self, gchar *input, gchar *response);
115 } ChimaraIFClass;
116
117 GType chimara_if_get_type(void) G_GNUC_CONST;
118 GtkWidget *chimara_if_new(void);
119 void chimara_if_set_preferred_interpreter(ChimaraIF *self, ChimaraIFFormat format, ChimaraIFInterpreter interpreter);
120 ChimaraIFInterpreter chimara_if_get_preferred_interpreter(ChimaraIF *self, ChimaraIFFormat format);
121 gboolean chimara_if_run_game(ChimaraIF *self, const char *game_path, GError **error);
122 gboolean chimara_if_run_game_file(ChimaraIF *self, GFile *game_file, GError **error);
123 ChimaraIFFormat chimara_if_get_format(ChimaraIF *self);
124 ChimaraIFInterpreter chimara_if_get_interpreter(ChimaraIF *self);
125
126 G_END_DECLS
127
128 #endif /* __CHIMARA_IF_H__ */