89ea5c8538c8e1846ce3ef9b3558db599e73d88e
[rodin/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  * 
19  * Constants representing all game formats supported by the Chimara system.
20  */
21 typedef enum _ChimaraIFFormat {
22         CHIMARA_IF_FORMAT_NONE = -1,
23         CHIMARA_IF_FORMAT_Z5,
24         CHIMARA_IF_FORMAT_Z6,
25         CHIMARA_IF_FORMAT_Z8,
26         CHIMARA_IF_FORMAT_Z_BLORB,
27         CHIMARA_IF_FORMAT_GLULX,
28         CHIMARA_IF_FORMAT_GLULX_BLORB,
29         CHIMARA_IF_NUM_FORMATS
30 } ChimaraIFFormat;
31
32 /**
33  * ChimaraIFInterpreter:
34  * 
35  * Constants representing the available interpreter plugins.
36  */
37 typedef enum _ChimaraIFInterpreter {
38         CHIMARA_IF_INTERPRETER_NONE = -1,
39         CHIMARA_IF_INTERPRETER_FROTZ,
40         CHIMARA_IF_INTERPRETER_NITFOL,
41         CHIMARA_IF_INTERPRETER_GLULXE,
42         CHIMARA_IF_INTERPRETER_GIT,
43         CHIMARA_IF_NUM_INTERPRETERS
44 } ChimaraIFInterpreter;
45
46 /**
47  * ChimaraIFZmachineVersion:
48  * 
49  * Allowed values for the #ChimaraIF:interpreter-number property.
50  */
51 typedef enum _ChimaraIFZmachineVersion {
52         CHIMARA_IF_ZMACHINE_DEFAULT = 0,
53         CHIMARA_IF_ZMACHINE_DECSYSTEM_20,
54         CHIMARA_IF_ZMACHINE_APPLE_IIE,
55         CHIMARA_IF_ZMACHINE_MACINTOSH,
56         CHIMARA_IF_ZMACHINE_AMIGA,
57         CHIMARA_IF_ZMACHINE_ATARI_ST,
58         CHIMARA_IF_ZMACHINE_IBM_PC,
59         CHIMARA_IF_ZMACHINE_COMMODORE_128,
60         CHIMARA_IF_ZMACHINE_COMMODORE_64,
61         CHIMARA_IF_ZMACHINE_APPLE_IIC,
62         CHIMARA_IF_ZMACHINE_APPLE_IIGS,
63         CHIMARA_IF_ZMACHINE_TANDY_COLOR,
64         CHIMARA_IF_ZMACHINE_MAXVAL = CHIMARA_IF_ZMACHINE_TANDY_COLOR
65 } ChimaraIFZmachineVersion;
66
67 /**
68  * ChimaraIF:
69  * 
70  * This structure contains no public members.
71  */
72 typedef struct _ChimaraIF {
73         ChimaraGlk parent_instance;
74         
75         /*< public >*/
76 } ChimaraIF;
77
78 typedef struct _ChimaraIFClass {
79         ChimaraGlkClass parent_class;
80         /* Signals */
81         void(* command) (ChimaraIF *self, gchar *input, gchar *response);
82 } ChimaraIFClass;
83
84 GType chimara_if_get_type(void) G_GNUC_CONST;
85 GtkWidget *chimara_if_new(void);
86 void chimara_if_set_preferred_interpreter(ChimaraIF *self, ChimaraIFFormat format, ChimaraIFInterpreter interpreter);
87 ChimaraIFInterpreter chimara_if_get_preferred_interpreter(ChimaraIF *self, ChimaraIFFormat format);
88 gboolean chimara_if_run_game(ChimaraIF *self, gchar *gamefile, GError **error);
89 ChimaraIFFormat chimara_if_get_format(ChimaraIF *self);
90 ChimaraIFInterpreter chimara_if_get_interpreter(ChimaraIF *self);
91
92 G_END_DECLS
93
94 #endif /* __CHIMARA_IF_H__ */