2
* \file renumberblock.c
4
* \brief RenumberBlock plug-in for PCB.
6
* \author Copyright (C) 2006 DJ Delorie <dj@delorie.com>
8
* \copyright Licensed under the terms of the GNU General Public
9
* License, version 2 or later.
11
* http://www.delorie.com/pcb/renumberblock.c
15
* gcc -I$HOME/geda/pcb-cvs/src -I$HOME/geda/pcb-cvs -O2 -shared renumberblock.c -o renumberblock.so
17
* The resulting renumberblock.so goes in
18
* $HOME/.pcb/plugins/renumberblock.so.
20
* Usage: RenumberBlock(oldnum,newnum)
22
* All selected elements are renumbered by adding (newnum-oldnum) to
23
* the existing number. I.e. RenumberBlock(100,200) will change R213
26
* Usage: RenumberBuffer(oldnum,newnum)
28
* Same, but the paste buffer is renumbered.
46
renumber_block (int argc, char **argv, Coord x, Coord y)
49
int old_base, new_base;
52
Message("Usage: RenumberBlock oldnum newnum");
56
old_base = atoi (argv[0]);
57
new_base = atoi (argv[1]);
59
SET_FLAG (NAMEONPCBFLAG, PCB);
61
ELEMENT_LOOP (PCB->Data);
63
char *refdes_split, *cp;
64
char *old_ref, *new_ref;
67
if (!TEST_FLAG (SELECTEDFLAG, element))
70
old_ref = element->Name[1].TextString;
71
for (refdes_split=cp=old_ref; *cp; cp++)
75
num = atoi (refdes_split);
76
num += (new_base - old_base);
77
sprintf(num_buf, "%d" ,num);
78
new_ref = (char *) malloc (refdes_split - old_ref + strlen(num_buf) + 1);
79
memcpy (new_ref, old_ref, refdes_split - old_ref);
80
strcpy (new_ref + (refdes_split - old_ref), num_buf);
82
AddObjectToChangeNameUndoList (ELEMENT_TYPE, NULL, NULL,
84
NAMEONPCB_NAME (element));
86
ChangeObjectName (ELEMENT_TYPE, element, NULL, NULL, new_ref);
89
IncrementUndoSerialNumber ();
94
renumber_buffer (int argc, char **argv, Coord x, Coord y)
97
int old_base, new_base;
100
Message("Usage: RenumberBuffer oldnum newnum");
104
old_base = atoi (argv[0]);
105
new_base = atoi (argv[1]);
107
SET_FLAG (NAMEONPCBFLAG, PCB);
109
ELEMENT_LOOP (PASTEBUFFER->Data);
111
char *refdes_split, *cp;
112
char *old_ref, *new_ref;
115
old_ref = element->Name[1].TextString;
116
for (refdes_split=cp=old_ref; *cp; cp++)
120
num = atoi (refdes_split);
121
num += (new_base - old_base);
122
sprintf(num_buf, "%d" ,num);
123
new_ref = (char *) malloc (refdes_split - old_ref + strlen(num_buf) + 1);
124
memcpy (new_ref, old_ref, refdes_split - old_ref);
125
strcpy (new_ref + (refdes_split - old_ref), num_buf);
127
ChangeObjectName (ELEMENT_TYPE, element, NULL, NULL, new_ref);
133
static HID_Action renumber_block_action_list[] = {
134
{"RenumberBlock", NULL, renumber_block,
136
{"RenumberBuffer", NULL, renumber_buffer,
140
REGISTER_ACTIONS (renumber_block_action_list)
145
register_renumber_block_action_list();