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