Index: trunk/src/plug_io.c =================================================================== --- trunk/src/plug_io.c (revision 720) +++ trunk/src/plug_io.c (revision 721) @@ -182,7 +182,7 @@ qsort(res->array, vtpr_len(res), sizeof(prio_t), prio_cmp); } -static int camv_save_design(camv_design_t *camv, const char *fn_, const char *fmt) +int camv_save_design(camv_design_t *camv, const char *fn_, const char *fmt) { vtpr_t prios; int n, ret = -1, len; Index: trunk/src/plug_io.h =================================================================== --- trunk/src/plug_io.h (revision 720) +++ trunk/src/plug_io.h (revision 721) @@ -52,4 +52,6 @@ void camv_io_unreg(camv_io_t *io); int camv_io_load(camv_design_t *camv, const char *fn); +int camv_save_design(camv_design_t *camv, const char *fn, const char *fmt); + #endif Index: trunk/src/plug_io_act.c =================================================================== --- trunk/src/plug_io_act.c (revision 720) +++ trunk/src/plug_io_act.c (revision 721) @@ -67,8 +67,39 @@ return 0; } +static const char camv_acts_SaveTo[] = "SaveTo(design, filename[,format])"; +static const char camv_acth_SaveTo[] = "Save design to a file."; +fgw_error_t camv_act_SaveTo(fgw_arg_t *res, int argc, fgw_arg_t *argv) +{ + rnd_design_t *hl = RND_ACT_DESIGN; + camv_design_t *camv = (camv_design_t *)hl; + const char *op, *name, *format = "tedax"; + + RND_ACT_CONVARG(1, FGW_STR, SaveTo, op = argv[1].val.str); + RND_ACT_CONVARG(2, FGW_STR, SaveTo, name = argv[2].val.str); + RND_ACT_MAY_CONVARG(3, FGW_STR, SaveTo, format = argv[3].val.str); + + if (rnd_strcasecmp(op, "design") == 0) { + if (camv_save_design(camv, name, format) != 0) { + rnd_message(RND_MSG_ERROR, "Can not save file '%s'\n", name); + RND_ACT_IRES(-1); + return 0; + } + } + else { + rnd_message(RND_MSG_ERROR, "Invalid first argument\n"); + RND_ACT_IRES(-1); + return 0; + } + + RND_ACT_IRES(0); + return 0; +} + + static rnd_action_t camv_plug_io_act_list[] = { - {"LoadFrom", camv_act_LoadFrom, camv_acth_LoadFrom, camv_acts_LoadFrom} + {"LoadFrom", camv_act_LoadFrom, camv_acth_LoadFrom, camv_acts_LoadFrom}, + {"SaveTo", camv_act_SaveTo, camv_acth_SaveTo, camv_acts_SaveTo} }; void camv_plug_io_act_uninit(void)