2 engine.h - MaLa core engine
4 Copyright (C) 2004, Christian Thaeter <chth@gmx.net>
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License version 2 as
8 published by the Free Software Foundation.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, contact me.
23 #include "mala_types.h"
24 #include "stringbucket.h"
25 #include "stringlist.h"
29 Build a table of common strings, this strings are
30 a) get never garbage collected
31 b) are fast accessible with their symbolic index
33 #define MALA_COMMON_STRINGS \
35 MALA_EXPAND (EMPTY, ""), \
36 MALA_EXPAND (FALSE, "--FALSE"), \
37 MALA_EXPAND (TRUE, "--TRUE"), \
38 MALA_EXPAND (ZERO, "0"), \
39 MALA_EXPAND (PASS, "--PASS"), \
40 MALA_EXPAND (EXCLAMATIONMARK, "!"), \
41 MALA_EXPAND (ASSIGN, "="), \
42 MALA_EXPAND (BACKQUOTE, "`"), \
43 MALA_EXPAND (NOT, "--NOT"), \
44 MALA_EXPAND (LITERAL, "--LITERAL"), \
45 MALA_EXPAND (ENVSUBST, "--ENVSUBST"), \
46 MALA_EXPAND (SETENV, "--SETENV"), \
47 MALA_EXPAND (SECTION, "--SECTION"), \
48 MALA_EXPAND (HERE, "--HERE"), \
49 MALA_EXPAND (BEGIN, "--BEGIN"), \
50 MALA_EXPAND (END, "--END"), \
51 MALA_EXPAND (DEL, "--DEL"), \
52 MALA_EXPAND (DEFAULT_PARSER, "--DEFAULT-PARSER"), \
53 MALA_EXPAND (FLAG_LITERAL_EXPANSION, "--FLAG-LITERAL-EXPANSION"), \
54 MALA_EXPAND (FLAG_EXCLAM_EXPANSION, "--FLAG-EXCLAM-EXPANSION"), \
55 MALA_EXPAND (FLAG_NO_EXPANSION, "--FLAG-NO-EXPANSION"), \
56 MALA_EXPAND (FLAG_NUMSPLIT_EXPANSION, "--FLAG-NUMSPLIT-EXPANSION"), \
57 MALA_EXPAND (FLAG_CHAR_EXPANSION, "--FLAG-CHAR-EXPANSION"), \
58 MALA_EXPAND (FLAG_ASSIGN_EXPANSION, "--FLAG-ASSIGN-EXPANSION"), \
59 MALA_EXPAND (FLAG_SETENV_EXPANSION, "--FLAG-SETENV-EXPANSION"), \
60 MALA_EXPAND (FLAG_ENVVAR_EXPANSION, "--FLAG-ENVVAR-EXPANSION"), \
61 MALA_EXPAND (FLAG_UNDERSCORE_EXPANSION, "--FLAG-UNDERSCORE-EXPANSION"), \
62 MALA_EXPAND (FLAG_BRACKET_EXPANSION, "--FLAG-BRACKET-EXPANSION"), \
63 MALA_EXPAND (FLAG_ASSIGN_CONTRACTION, "--FLAG-ASSIGN-CONTRACTION"), \
64 MALA_EXPAND (ERROR_MISSING_ARGUMENT, "--ERROR-MISSING-ARGUMENT"), \
65 MALA_EXPAND (ERROR_MISSING_END, "--ERROR-MISSING-END"), \
66 MALA_EXPAND (ERROR_END_WITHOUT_BEGIN, "--ERROR-END-WITHOUT-BEGIN"), \
67 MALA_EXPAND (ERROR_BLOCK_NOT_ALLOWED, "--ERROR-BLOCK-NOT-ALLOWED"), \
68 MALA_EXPAND (ERROR_PARAMETER_SYNTAX, "--ERROR-PARAMETER-SYNTAX"), \
69 MALA_EXPAND (ERROR_WRONG_TYPE, "--ERROR-WRONG-TYPE"), \
70 MALA_EXPAND (MAX, NULL) \
73 #define MALA_EXPAND(E,s) MALA_STRING_##E
74 enum mala_common_strings_enum MALA_COMMON_STRINGS
;
77 const char * mala_engine_states
[MALA_STATE_TABLE_SIZEOF
+1];
80 struct mala_engine_struct
83 * every tokenized word is collected in 'words'
84 * actions can be bound to these words through the strings user variable
86 mala_stringbucket words
;
87 mala_stringlist program
;
88 mala_stringlist arguments
;
90 MalaString common_string
[MALA_STRING_MAX
];
92 /*TODO static ringbuffer char ringbuffer *[10] */
94 //const char * argv_0;
99 /* --BEGIN ... --END blocks are translated to --BLOCK-xxxxxxxx macros,
100 where xxxxxxxx is a monotonic incrementing counter, its value is stored here */
120 mala_engine_new_main (int (*initfunc
) (MalaEngine
),
121 int argc
, char ** argv
,
122 mala_actioninit
* actions_init
);
126 mala_engine_free (MalaEngine self
);
129 mala_engine_actions_register (MalaEngine
, MalaActionInit
);
132 mala_engine_exception (MalaEngine self
,
133 MalaStringListNode_ref pptr
,
134 MalaStringListNode here
,
138 mala_engine_ppexpand_define (MalaEngine self
, const char * name
, int argc
, char **argv
);
141 mala_engine_pushback_word (MalaEngine self
, const char * word
);
144 mala_engine_getprogram (MalaEngine self
);
147 mala_engine_state_get (MalaEngine self
);
150 mala_engine_state_str (MalaEngine self
);
153 mala_engine_clearstate (MalaEngine self
);
156 mala_engine_negated (MalaEngine self
);
159 mala_engine_clear_negated (MalaEngine self
);
162 mala_engine_dumpprogram (MalaEngine self
, FILE* stream
, const char * prefix
, const char * suffix
);
165 mala_engine_dumpargs (MalaEngine self
, FILE* stream
, const char * prefix
, const char * suffix
);
168 mala_engine_run (MalaEngine self
);
171 mala_engine_step (MalaEngine
);
174 mala_engine_eval (MalaEngine self
, MalaStringListNode_ref pptr
);
177 mala_engine_command_done (MalaEngine eng
, MalaStringListNode_ref pptr
, int args
);
182 //mala_engine_expansions (MalaEngine self, MalaStringListNode_ref pptr);
186 mala_engine_string_istrue (MalaEngine self
, MalaString str
);
189 mala_engine_check_expansionflag (MalaEngine self
, int flag
);
193 mala_engine_ppexpand (MalaEngine self
, MalaStringList list
, MalaStringListNode_ref pptr
);
196 mala_engine_literal_expansion (MalaEngine self
,
198 MalaStringListNode_ref pptr
);
201 mala_engine_backquote_expansion (MalaEngine self
,
203 MalaStringListNode_ref pptr
);
206 mala_engine_numsplit_expansion (MalaEngine self
,
208 MalaStringListNode_ref pptr
);
211 mala_engine_exclam_expansion (MalaEngine self
,
213 MalaStringListNode_ref pptr
);
216 mala_engine_no_expansion (MalaEngine self
,
218 MalaStringListNode_ref pptr
);
221 mala_engine_assign_expansion (MalaEngine self
,
223 MalaStringListNode_ref pptr
);
226 mala_engine_envvar_expansion (MalaEngine self
,
228 MalaStringListNode_ref pptr
);
231 mala_engine_char_expansion (MalaEngine self
,
233 MalaStringListNode_ref pptr
);
236 mala_engine_underscore_expansion (MalaEngine self
,
238 MalaStringListNode_ref pptr
);
240 int mala_engine_setenv_expansion (MalaEngine self
,
242 MalaStringListNode_ref pptr
);
244 int mala_engine_bracket_expansion (MalaEngine self
,
246 MalaStringListNode_ref pptr
);
248 int mala_engine_assign_contraction (MalaEngine self
,
250 MalaStringListNode_ref pptr
);
253 mala_engine_add_action_cstr (MalaEngine self
, const char* cname
, void* data
,
254 MalaParserFunc parser
, MalaDataFactory factory
,
258 mala_engine_add_action (MalaEngine self
, MalaString name
, void* data
,
259 MalaParserFunc parser
, MalaDataFactory factory
,
263 mala_engine_arg_eval (MalaEngine self
,
264 MalaStringListNode_ref pptr
,
267 MalaDataFactory type
);
270 mala_engine_arg_eval_fmt (MalaEngine self
,
271 MalaStringListNode_ref pptr
,
279 mala_engine_arg_eval_string (MalaEngine self
,
280 MalaStringListNode_ref pptr
,
289 mala_engine_new_initfunc (int (*initfunc
) (MalaEngine
));
294 mala_engine_pushfront_program (MalaEngine self
, int args
, char ** argv
);
298 mala_engine_erase_action (MalaEngine
, const t_uchar
* key
);
301 mala_engine_eval (MalaEngine self
, LList pptr
);
304 mala_engine_deepeval (MalaEngine self
, LList pptr
);
308 mala_engine_exception (MalaEngine
, LList begin
, LList end
, const char *);
311 mala_engine_action_new (MalaEngine
, t_uchar
** name
, void** data
,
312 MalaParserFunc parser
, MalaDataDestructor destructor
);
316 mala_engine_getaction (MalaEngine
, const t_uchar
* name
);
319 mala_engine_getprevaction (MalaEngine
, const t_uchar
* name
);
327 #endif /*MALA_ENGINE_H*/
331 // c-file-style: "gnu"
333 // arch-tag: 47d718f6-e397-400c-93a6-bc71f475c0c7