2014-03-27 16:34:17 +01:00
|
|
|
#ifndef R2_CMD_H
|
|
|
|
#define R2_CMD_H
|
2009-04-11 18:49:09 +02:00
|
|
|
|
2009-02-05 22:08:46 +01:00
|
|
|
#include <r_types.h>
|
2010-02-26 00:37:49 +01:00
|
|
|
#include <r_util.h>
|
2009-02-05 22:08:46 +01:00
|
|
|
#include "list.h"
|
|
|
|
|
2013-06-18 12:09:23 +02:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2014-04-01 17:09:07 +02:00
|
|
|
//R_LIB_VERSION_HEADER (r_cmd);
|
2013-06-14 02:51:33 +02:00
|
|
|
|
2011-01-27 00:05:49 +01:00
|
|
|
#define MACRO_LIMIT 1024
|
2010-03-18 22:22:21 +01:00
|
|
|
#define MACRO_LABELS 20
|
2011-07-06 03:01:21 +02:00
|
|
|
#define R_CMD_MAXLEN 4096
|
2010-03-18 22:22:21 +01:00
|
|
|
|
2009-02-05 22:08:46 +01:00
|
|
|
#define r_cmd_callback(x) int (*x)(void *data, const char *input)
|
2015-10-06 00:25:02 +03:00
|
|
|
#define r_cmd_nullcallback(x) int (*x)(void *data)
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2010-03-18 22:22:21 +01:00
|
|
|
typedef struct r_cmd_macro_label_t {
|
|
|
|
char name[80];
|
|
|
|
char *ptr;
|
|
|
|
} RCmdMacroLabel;
|
|
|
|
|
|
|
|
typedef struct r_cmd_macro_item_t {
|
|
|
|
char *name;
|
|
|
|
char *args;
|
|
|
|
char *code;
|
2011-07-06 03:01:21 +02:00
|
|
|
int codelen;
|
2010-03-18 22:22:21 +01:00
|
|
|
int nargs;
|
|
|
|
} RCmdMacroItem;
|
|
|
|
|
|
|
|
typedef struct r_cmd_macro_t {
|
|
|
|
int counter;
|
|
|
|
ut64 *brk_value;
|
|
|
|
ut64 _brk_value;
|
|
|
|
int brk;
|
|
|
|
int (*cmd)(void *user, const char *cmd);
|
2015-08-08 14:15:13 -04:00
|
|
|
PrintfCallback cb_printf;
|
2010-03-18 22:22:21 +01:00
|
|
|
void *user;
|
2010-05-21 01:46:26 +02:00
|
|
|
RNum *num;
|
2010-03-18 22:22:21 +01:00
|
|
|
int labels_n;
|
2010-05-21 01:46:26 +02:00
|
|
|
RCmdMacroLabel labels[MACRO_LABELS];
|
2012-10-30 02:49:05 +01:00
|
|
|
RList *macros;
|
2010-03-18 22:22:21 +01:00
|
|
|
} RCmdMacro;
|
|
|
|
|
2010-05-18 00:20:24 +02:00
|
|
|
typedef int (*RCmdCallback)(void *user, const char *cmd);
|
2010-03-18 22:22:21 +01:00
|
|
|
|
2009-12-24 03:17:53 +01:00
|
|
|
typedef struct r_cmd_item_t {
|
2009-02-05 22:08:46 +01:00
|
|
|
char cmd[64];
|
|
|
|
char desc[128];
|
2010-05-21 01:46:26 +02:00
|
|
|
r_cmd_callback (callback);
|
2010-03-18 22:22:21 +01:00
|
|
|
} RCmdItem;
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2009-12-24 03:17:53 +01:00
|
|
|
typedef struct r_cmd_long_item_t {
|
2009-02-05 22:08:46 +01:00
|
|
|
char cmd[64]; /* long command */
|
|
|
|
int cmd_len;
|
|
|
|
char cmd_short[32]; /* short command */
|
|
|
|
char desc[128];
|
2010-03-18 22:22:21 +01:00
|
|
|
} RCmdLongItem;
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2012-10-30 02:49:05 +01:00
|
|
|
typedef struct r_cmd_alias_t {
|
|
|
|
int count;
|
|
|
|
char **keys;
|
|
|
|
char **values;
|
2015-08-20 02:24:46 +02:00
|
|
|
int *remote;
|
2012-10-30 02:49:05 +01:00
|
|
|
} RCmdAlias;
|
|
|
|
|
2009-12-24 03:17:53 +01:00
|
|
|
typedef struct r_cmd_t {
|
2009-02-05 22:08:46 +01:00
|
|
|
void *data;
|
2010-05-21 01:46:26 +02:00
|
|
|
r_cmd_nullcallback (nullcallback);
|
|
|
|
RCmdItem *cmds[UT8_MAX];
|
2010-03-18 22:22:21 +01:00
|
|
|
RCmdMacro macro;
|
2012-10-30 02:49:05 +01:00
|
|
|
RList *lcmds;
|
2010-02-26 00:37:49 +01:00
|
|
|
RList *plist;
|
2012-10-30 02:49:05 +01:00
|
|
|
RCmdAlias aliases;
|
2010-03-18 22:22:21 +01:00
|
|
|
} RCmd;
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2014-04-01 17:09:07 +02:00
|
|
|
typedef struct r_core_plugin_t {
|
|
|
|
const char *name;
|
|
|
|
const char *desc;
|
|
|
|
const char *license;
|
2010-05-18 00:20:24 +02:00
|
|
|
RCmdCallback call;
|
2014-04-27 00:58:31 +02:00
|
|
|
RCmdCallback init;
|
2014-04-28 10:40:09 -05:00
|
|
|
RCmdCallback deinit;
|
2014-04-01 17:09:07 +02:00
|
|
|
} RCorePlugin;
|
2010-02-26 00:37:49 +01:00
|
|
|
|
2009-12-24 03:17:53 +01:00
|
|
|
#ifdef R_API
|
2014-04-01 17:09:07 +02:00
|
|
|
R_API int r_core_plugin_init(RCmd *cmd);
|
|
|
|
R_API int r_core_plugin_add(RCmd *cmd, RCorePlugin *plugin);
|
|
|
|
R_API int r_core_plugin_check(RCmd *cmd, const char *a0);
|
2014-04-28 10:40:09 -05:00
|
|
|
R_API int r_core_plugin_deinit(RCmd *cmd);
|
2014-04-01 17:09:07 +02:00
|
|
|
|
|
|
|
/* review api */
|
2015-01-13 03:40:01 +01:00
|
|
|
R_API RCmd *r_cmd_new(void);
|
2010-05-21 12:42:17 +02:00
|
|
|
R_API RCmd *r_cmd_free(RCmd *cmd);
|
2012-07-21 14:11:21 +04:00
|
|
|
R_API int r_cmd_set_data(RCmd *cmd, void *data);
|
|
|
|
R_API int r_cmd_add(RCmd *cmd, const char *command, const char *desc, r_cmd_callback(callback));
|
|
|
|
R_API int r_cmd_add_long(RCmd *cmd, const char *longcmd, const char *shortcmd, const char *desc);
|
2014-04-01 17:09:07 +02:00
|
|
|
R_API int r_core_del(RCmd *cmd, const char *command);
|
2012-07-21 14:11:21 +04:00
|
|
|
R_API int r_cmd_call(RCmd *cmd, const char *command);
|
|
|
|
R_API int r_cmd_call_long(RCmd *cmd, const char *input);
|
|
|
|
R_API char **r_cmd_args(RCmd *cmd, int *argc);
|
2010-02-26 00:37:49 +01:00
|
|
|
|
2010-03-18 22:22:21 +01:00
|
|
|
/* r_cmd_macro */
|
2012-07-21 14:11:21 +04:00
|
|
|
R_API void r_cmd_macro_init(RCmdMacro *mac);
|
|
|
|
R_API int r_cmd_macro_add(RCmdMacro *mac, const char *name);
|
|
|
|
R_API int r_cmd_macro_rm(RCmdMacro *mac, const char *_name);
|
|
|
|
R_API void r_cmd_macro_list(RCmdMacro *mac);
|
2016-02-07 00:49:26 +01:00
|
|
|
R_API void r_cmd_macro_meta(RCmdMacro *mac);
|
2012-07-21 14:11:21 +04:00
|
|
|
R_API int r_cmd_macro_call(RCmdMacro *mac, const char *name);
|
|
|
|
R_API int r_cmd_macro_break(RCmdMacro *mac, const char *value);
|
2012-10-30 02:49:05 +01:00
|
|
|
|
2012-10-30 03:22:30 +01:00
|
|
|
R_API int r_cmd_alias_del (RCmd *cmd, const char *k);
|
2012-10-30 02:49:05 +01:00
|
|
|
R_API char **r_cmd_alias_keys(RCmd *cmd, int *sz);
|
2015-08-20 02:24:46 +02:00
|
|
|
R_API int r_cmd_alias_set (RCmd *cmd, const char *k, const char *v, int remote);
|
|
|
|
R_API char *r_cmd_alias_get (RCmd *cmd, const char *k, int remote);
|
2012-10-30 02:49:05 +01:00
|
|
|
R_API void r_cmd_alias_free (RCmd *cmd);
|
2015-08-29 04:58:57 -03:00
|
|
|
R_API void r_cmd_macro_free (RCmdMacro *mac);
|
2012-10-30 02:49:05 +01:00
|
|
|
|
2013-06-18 12:09:23 +02:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2009-12-24 03:17:53 +01:00
|
|
|
#endif
|
2009-04-11 18:49:09 +02:00
|
|
|
#endif
|