#include #include "arc_system.h" #ifndef ARC_PLAN #define ARC_PLAN enum ARC_OP { ADD_COMP=0, REM_COMP, ADD_INVO, REM_INVO, ADD_IFACE, REM_IFACE, ADD_SYS_PROP, REM_SYS_PROP, ADD_COMP_PROP, REM_COMP_PROP, ADD_IFACE_PROP, REM_IFACE_PROP, }; enum PLAN_RET_CODES { PLAN_OK =0, //0 PLAN_WRONG_ARGS, //1 PLAN_COMP_EXISTS, //2 PLAN_COMP_NOT_FOUND, //3 PLAN_INVO_EXISTS, //4 PLAN_INVO_NOT_FOUND, //5 PLAN_IFACE_EXISTS, //6 PLAN_IFACE_NOT_FOUND, //7 PLAN_PROP_EXISTS, //8 PLAN_PROP_NOT_FOUND, //9 PLAN_PROP_INVALID //10 }; //All the parser has to do is pretty much fill in an arc_plan structure like the one below struct arc_plan_action { enum ARC_OP op; char **args; size_t num_args; }; //Here I will do a bit of memory copying to keep the args separate than the original text but I don't need more memory than that :) struct arc_plan { char *plan_name; struct arc_plan_action **actions; size_t num_actions; //ugly hack for parsing, clean up later size_t parse_idx; }; void plan_init(struct arc_plan *plan, char *plan_name); void plan_destroy(struct arc_plan *plan); void plan_add_action(struct arc_plan *plan, struct arc_plan_action *action); void plan_parse_old_dsl(struct arc_plan *plan, char *txt); int plan_execute(struct arc_plan *plan, struct arc_system *system); void plan_action_cleanup(struct arc_plan_action *plan_action); struct arc_plan_action* plan_parse_comp_add(char *args); struct arc_plan_action* plan_parse_comp_rem(char *args); struct arc_plan_action* plan_parse_invo_add(char *args); struct arc_plan_action* plan_parse_invo_rem(char *args); struct arc_plan_action* plan_parse_iface_add(char *args); struct arc_plan_action* plan_parse_iface_rem(char *args); struct arc_plan_action* plan_parse_prop_add(char *args); struct arc_plan_action* plan_parse_prop_rem(char *args); int plan_comp_add(struct arc_plan_action *action, struct arc_system *sys); int plan_comp_rem(struct arc_plan_action *action, struct arc_system *sys); int plan_invo_add(struct arc_plan_action *action, struct arc_system *sys); int plan_invo_rem(struct arc_plan_action *action, struct arc_system *sys); int plan_iface_add(struct arc_plan_action *action, struct arc_system *sys); int plan_iface_rem(struct arc_plan_action *action, struct arc_system *sys); int plan_comp_prop_add(struct arc_plan_action *action, struct arc_system *sys); int plan_comp_prop_rem(struct arc_plan_action *action, struct arc_system *sys); int plan_sys_prop_add(struct arc_plan_action *action, struct arc_system *sys); int plan_sys_prop_rem(struct arc_plan_action *action, struct arc_system *sys); int plan_iface_prop_add(struct arc_plan_action *action, struct arc_system *sys); int plan_iface_prop_rem(struct arc_plan_action *action, struct arc_system *sys); const char *plan_return_status(enum PLAN_RET_CODES ret); void cleanup_plan(struct arc_plan *plan); #endif