1 #ifndef R2_LANG_H
2 #define R2_LANG_H
3 
4 #include <r_types.h>
5 #include <r_list.h>
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 R_LIB_VERSION_HEADER(r_lang);
12 
13 typedef char* (*RCoreCmdStrCallback)(void* core, const char *s);
14 typedef int (*RCoreCmdfCallback)(void* core, const char *s, ...);
15 
16 typedef struct r_lang_t {
17 	struct r_lang_plugin_t *cur;
18 	void *user;
19 	RList *defs;
20 	RList *langs;
21 	PrintfCallback cb_printf;
22 	RCoreCmdStrCallback cmd_str;
23 	RCoreCmdfCallback cmdf;
24 } RLang;
25 
26 typedef struct r_lang_plugin_t {
27 	const char *name;
28 	const char *alias;
29 	const char *desc;
30 	const char *license;
31 	const char **help;
32 	const char *ext;
33 	bool (*init)(RLang *user);
34 	bool (*setup)(RLang *user);
35 	bool (*fini)(RLang *user);
36 	bool (*prompt)(RLang *user);
37 	bool (*run)(RLang *user, const char *code, int len);
38 	bool (*run_file)(RLang *user, const char *file);
39 	int (*set_argv)(RLang *user, int argc, char **argv);
40 } RLangPlugin;
41 
42 typedef struct r_lang_def_t {
43 	char *name;
44 	char *type;
45 	void *value;
46 } RLangDef;
47 
48 #ifdef R_API
49 R_API RLang *r_lang_new(void);
50 R_API void r_lang_free(RLang *lang);
51 R_API bool r_lang_setup(RLang *lang);
52 R_API bool r_lang_add(RLang *lang, RLangPlugin *foo);
53 R_API bool r_lang_list(RLang *lang);
54 R_API bool r_lang_use(RLang *lang, const char *name);
55 R_API bool r_lang_run(RLang *lang, const char *code, int len);
56 R_API bool r_lang_run_string(RLang *lang, const char *code);
57 /* TODO: user_ptr must be deprecated */
58 R_API void r_lang_set_user_ptr(RLang *lang, void *user);
59 R_API bool r_lang_set_argv(RLang *lang, int argc, char **argv);
60 R_API bool r_lang_run_file(RLang *lang, const char *file);
61 R_API bool r_lang_prompt(RLang *lang);
62 R_API void r_lang_plugin_free(RLangPlugin *p); // XXX
63 R_API RLangPlugin *r_lang_get_by_name(RLang *lang, const char *name);
64 R_API RLangPlugin *r_lang_get_by_extension(RLang *lang, const char *ext);
65 // TODO: rename r_Lang_add for r_lang_plugin_add
66 
67 R_API bool r_lang_define(RLang *lang, const char *type, const char *name, void *value);
68 R_API void r_lang_undef(RLang *lang, const char *name);
69 R_API void r_lang_def_free(RLangDef *def);
70 
71 #endif
72 
73 #ifdef __cplusplus
74 }
75 #endif
76 
77 #endif
78