Index: trunk/src_plugins/distalign/distalign.c =================================================================== --- trunk/src_plugins/distalign/distalign.c (revision 17937) +++ trunk/src_plugins/distalign/distalign.c (revision 17938) @@ -32,8 +32,6 @@ #include "actions.h" #include "compat_misc.h" -#define ARG(n) (argc > (n) ? argv[n] : 0) - enum { K_X, K_Y, @@ -254,9 +252,9 @@ * Defaults are Marks, First. */ static const char pcb_acts_align[] = "Align(X/Y, [Lefts/Rights/Tops/Bottoms/Centers/Marks, [First/Last/pcb_crosshair/Average[, Gridless]]])"; -static fgw_error_t pcb_act_align(fgw_arg_t *ores, int oargc, fgw_arg_t *oargv) +static fgw_error_t pcb_act_align(fgw_arg_t *res, int argc, fgw_arg_t *argv) { - PCB_OLD_ACT_BEGIN; + const char *a0, *a1, *a2, *a3; int dir; int point; int reference; @@ -264,11 +262,17 @@ pcb_coord_t q; int changed = 0; - if (argc < 1 || argc > 4) { + if (argc < 2 || argc > 5) { PCB_ACT_FAIL(align); } + + PCB_ACT_CONVARG(1, FGW_STR, align, a0 = argv[1].val.str); + PCB_ACT_CONVARG(2, FGW_STR, align, a1 = argv[2].val.str); + PCB_ACT_CONVARG(3, FGW_STR, align, a2 = argv[3].val.str); + PCB_ACT_CONVARG(4, FGW_STR, align, a3 = argv[4].val.str); + /* parse direction arg */ - switch ((dir = keyword(ARG(0)))) { + switch ((dir = keyword(a0))) { case K_X: case K_Y: break; @@ -276,7 +280,7 @@ PCB_ACT_FAIL(align); } /* parse point (within each subcircuit) which will be aligned */ - switch ((point = keyword(ARG(1)))) { + switch ((point = keyword(a1))) { case K_Centers: case K_Marks: break; @@ -299,7 +303,7 @@ PCB_ACT_FAIL(align); } /* parse reference which will determine alignment coordinates */ - switch ((reference = keyword(ARG(2)))) { + switch ((reference = keyword(a2))) { case K_First: case K_Last: case K_Average: @@ -312,7 +316,7 @@ PCB_ACT_FAIL(align); } /* optionally work off the grid (solar cells!) */ - switch (keyword(ARG(3))) { + switch (keyword(a3)) { case K_Gridless: gridless = 1; break; @@ -357,8 +361,9 @@ pcb_board_set_changed_flag(1); } free_subcs_by_pos(); + + PCB_ACT_IRES(0); return 0; - PCB_OLD_ACT_END; } /* @@ -378,9 +383,9 @@ * before they were distributed. */ static const char pcb_acts_distribute[] = "Distribute(X/Y, [Lefts/Rights/Tops/Bottoms/Centers/Marks/Gaps, [First/Last/pcb_crosshair, First/Last/pcb_crosshair[, Gridless]]])"; -static fgw_error_t pcb_act_distribute(fgw_arg_t *ores, int oargc, fgw_arg_t *oargv) +static fgw_error_t pcb_act_distribute(fgw_arg_t *res, int argc, fgw_arg_t *argv) { - PCB_OLD_ACT_BEGIN; + const char *a0, *a1, *a2, *a3, *a4; int dir; int point; int refa, refb; @@ -390,11 +395,19 @@ int changed = 0; int i; - if (argc < 1 || argc == 3 || argc > 5) { + if (argc < 2 || argc == 4 || argc > 6) { PCB_ACT_FAIL(distribute); } + + PCB_ACT_CONVARG(1, FGW_STR, align, a0 = argv[1].val.str); + PCB_ACT_CONVARG(2, FGW_STR, align, a1 = argv[2].val.str); + PCB_ACT_MAY_CONVARG(3, FGW_STR, align, a2 = argv[3].val.str); + PCB_ACT_MAY_CONVARG(4, FGW_STR, align, a3 = argv[4].val.str); + PCB_ACT_MAY_CONVARG(5, FGW_STR, align, a4 = argv[5].val.str); + + /* parse direction arg */ - switch ((dir = keyword(ARG(0)))) { + switch ((dir = keyword(a0))) { case K_X: case K_Y: break; @@ -402,7 +415,7 @@ PCB_ACT_FAIL(distribute); } /* parse point (within each subcircuit) which will be distributed */ - switch ((point = keyword(ARG(1)))) { + switch ((point = keyword(a1))) { case K_Centers: case K_Marks: case K_Gaps: @@ -426,7 +439,7 @@ PCB_ACT_FAIL(distribute); } /* parse reference which will determine first distribution coordinate */ - switch ((refa = keyword(ARG(2)))) { + switch ((refa = keyword(a2))) { case K_First: case K_Last: case K_Average: @@ -439,7 +452,7 @@ PCB_ACT_FAIL(distribute); } /* parse reference which will determine final distribution coordinate */ - switch ((refb = keyword(ARG(3)))) { + switch ((refb = keyword(a3))) { case K_First: case K_Last: case K_Average: @@ -455,7 +468,7 @@ PCB_ACT_FAIL(distribute); } /* optionally work off the grid (solar cells!) */ - switch (keyword(ARG(4))) { + switch (keyword(a4)) { case K_Gridless: gridless = 1; break; @@ -532,8 +545,8 @@ pcb_board_set_changed_flag(1); } free_subcs_by_pos(); + PCB_ACT_IRES(0); return 0; - PCB_OLD_ACT_END; } static pcb_action_t distalign_action_list[] = {