00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <stdio.h>
00028 #include <math.h>
00029
00030 #include "global.h"
00031 #include "data.h"
00032 #include "hid.h"
00033 #include "misc.h"
00034 #include "create.h"
00035 #include "rtree.h"
00036 #include "undo.h"
00037 #include "error.h"
00038 #include "change.h"
00039
00040 static int
00041 renumber_block (int argc, char **argv, int x, int y)
00042 {
00043 char num_buf[15];
00044 int old_base, new_base;
00045
00046 if (argc < 2) {
00047 Message("Usage: RenumberBlock oldnum newnum");
00048 return 1;
00049 }
00050
00051 old_base = atoi (argv[0]);
00052 new_base = atoi (argv[1]);
00053
00054 SET_FLAG (NAMEONPCBFLAG, PCB);
00055
00056 ELEMENT_LOOP (PCB->Data);
00057 {
00058 char *refdes_split, *cp;
00059 char *old_ref, *new_ref;
00060 int num;
00061
00062 if (!TEST_FLAG (SELECTEDFLAG, element))
00063 continue;
00064
00065 old_ref = element->Name[1].TextString;
00066 for (refdes_split=cp=old_ref; *cp; cp++)
00067 if (!isdigit(*cp))
00068 refdes_split = cp+1;
00069
00070 num = atoi (refdes_split);
00071 num += (new_base - old_base);
00072 sprintf(num_buf, "%d" ,num);
00073 new_ref = (char *) malloc (refdes_split - old_ref + strlen(num_buf) + 1);
00074 memcpy (new_ref, old_ref, refdes_split - old_ref);
00075 strcpy (new_ref + (refdes_split - old_ref), num_buf);
00076
00077 AddObjectToChangeNameUndoList (ELEMENT_TYPE, NULL, NULL,
00078 element,
00079 NAMEONPCB_NAME (element));
00080
00081 ChangeObjectName (ELEMENT_TYPE, element, NULL, NULL, new_ref);
00082 }
00083 END_LOOP;
00084 IncrementUndoSerialNumber ();
00085 return 0;
00086 }
00087
00088 static int
00089 renumber_buffer (int argc, char **argv, int x, int y)
00090 {
00091 char num_buf[15];
00092 int old_base, new_base;
00093
00094 if (argc < 2) {
00095 Message("Usage: RenumberBuffer oldnum newnum");
00096 return 1;
00097 }
00098
00099 old_base = atoi (argv[0]);
00100 new_base = atoi (argv[1]);
00101
00102 SET_FLAG (NAMEONPCBFLAG, PCB);
00103
00104 ELEMENT_LOOP (PASTEBUFFER->Data);
00105 {
00106 char *refdes_split, *cp;
00107 char *old_ref, *new_ref;
00108 int num;
00109
00110 old_ref = element->Name[1].TextString;
00111 for (refdes_split=cp=old_ref; *cp; cp++)
00112 if (!isdigit(*cp))
00113 refdes_split = cp+1;
00114
00115 num = atoi (refdes_split);
00116 num += (new_base - old_base);
00117 sprintf(num_buf, "%d" ,num);
00118 new_ref = (char *) malloc (refdes_split - old_ref + strlen(num_buf) + 1);
00119 memcpy (new_ref, old_ref, refdes_split - old_ref);
00120 strcpy (new_ref + (refdes_split - old_ref), num_buf);
00121
00122 ChangeObjectName (ELEMENT_TYPE, element, NULL, NULL, new_ref);
00123 }
00124 END_LOOP;
00125 return 0;
00126 }
00127
00128 static HID_Action renumber_block_action_list[] = {
00129 {"RenumberBlock", NULL, renumber_block,
00130 NULL, NULL},
00131 {"RenumberBuffer", NULL, renumber_buffer,
00132 NULL, NULL}
00133 };
00134
00135 REGISTER_ACTIONS (renumber_block_action_list)
00136
00137 void
00138 pcb_plugin_init()
00139 {
00140 register_renumber_block_action_list();
00141 }