~bert-timmerman/pcb-plugins/trunk

« back to all changes in this revision

Viewing changes to src/plugins/renumberblock.c

  • Committer: bert
  • Date: 2017-02-11 18:02:37 UTC
  • Revision ID: git-v1:f1a5819e4aa77f781d7ff1a4afccb13797e4cd18
renumberblock is now included in pcb.

Signed-off-by: bert <bert.timmerman@xs4all.nl>

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*!
2
 
 * \file renumberblock.c
3
 
 *
4
 
 * \brief RenumberBlock plug-in for PCB.
5
 
 *
6
 
 * \author Copyright (C) 2006 DJ Delorie <dj@delorie.com>
7
 
 *
8
 
 * \copyright Licensed under the terms of the GNU General Public
9
 
 * License, version 2 or later.
10
 
 *
11
 
 * http://www.delorie.com/pcb/renumberblock.c
12
 
 *
13
 
 * Compile like this:
14
 
 *
15
 
 * gcc -I$HOME/geda/pcb-cvs/src -I$HOME/geda/pcb-cvs -O2 -shared renumberblock.c -o renumberblock.so
16
 
 *
17
 
 * The resulting renumberblock.so goes in
18
 
 * $HOME/.pcb/plugins/renumberblock.so.
19
 
 *
20
 
 * Usage: RenumberBlock(oldnum,newnum)
21
 
 *
22
 
 * All selected elements are renumbered by adding (newnum-oldnum) to
23
 
 * the existing number.  I.e. RenumberBlock(100,200) will change R213
24
 
 * to R313.
25
 
 *
26
 
 * Usage: RenumberBuffer(oldnum,newnum)
27
 
 *
28
 
 * Same, but the paste buffer is renumbered.
29
 
 */
30
 
 
31
 
#include <stdio.h>
32
 
#include <math.h>
33
 
 
34
 
#include "config.h"
35
 
#include "global.h"
36
 
#include "data.h"
37
 
#include "hid.h"
38
 
#include "misc.h"
39
 
#include "create.h"
40
 
#include "rtree.h"
41
 
#include "undo.h"
42
 
#include "error.h"
43
 
#include "change.h"
44
 
 
45
 
static int
46
 
renumber_block (int argc, char **argv, Coord x, Coord y)
47
 
{
48
 
  char num_buf[15];
49
 
  int old_base, new_base;
50
 
 
51
 
  if (argc < 2) {
52
 
    Message("Usage: RenumberBlock oldnum newnum");
53
 
    return 1;
54
 
  }
55
 
 
56
 
  old_base = atoi (argv[0]);
57
 
  new_base = atoi (argv[1]);
58
 
 
59
 
  SET_FLAG (NAMEONPCBFLAG, PCB);
60
 
 
61
 
  ELEMENT_LOOP (PCB->Data);
62
 
  {
63
 
    char *refdes_split, *cp;
64
 
    char *old_ref, *new_ref;
65
 
    int num;
66
 
 
67
 
    if (!TEST_FLAG (SELECTEDFLAG, element))
68
 
      continue;
69
 
 
70
 
    old_ref = element->Name[1].TextString;
71
 
    for (refdes_split=cp=old_ref; *cp; cp++)
72
 
      if (!isdigit(*cp))
73
 
        refdes_split = cp+1;
74
 
 
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);
81
 
 
82
 
    AddObjectToChangeNameUndoList (ELEMENT_TYPE, NULL, NULL,
83
 
                                   element,
84
 
                                   NAMEONPCB_NAME (element));
85
 
 
86
 
    ChangeObjectName (ELEMENT_TYPE, element, NULL, NULL, new_ref);
87
 
  }
88
 
  END_LOOP;
89
 
  IncrementUndoSerialNumber ();
90
 
  return 0;
91
 
}
92
 
 
93
 
static int
94
 
renumber_buffer (int argc, char **argv, Coord x, Coord y)
95
 
{
96
 
  char num_buf[15];
97
 
  int old_base, new_base;
98
 
 
99
 
  if (argc < 2) {
100
 
    Message("Usage: RenumberBuffer oldnum newnum");
101
 
    return 1;
102
 
  }
103
 
 
104
 
  old_base = atoi (argv[0]);
105
 
  new_base = atoi (argv[1]);
106
 
 
107
 
  SET_FLAG (NAMEONPCBFLAG, PCB);
108
 
 
109
 
  ELEMENT_LOOP (PASTEBUFFER->Data);
110
 
  {
111
 
    char *refdes_split, *cp;
112
 
    char *old_ref, *new_ref;
113
 
    int num;
114
 
 
115
 
    old_ref = element->Name[1].TextString;
116
 
    for (refdes_split=cp=old_ref; *cp; cp++)
117
 
      if (!isdigit(*cp))
118
 
        refdes_split = cp+1;
119
 
 
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);
126
 
 
127
 
    ChangeObjectName (ELEMENT_TYPE, element, NULL, NULL, new_ref);
128
 
  }
129
 
  END_LOOP;
130
 
  return 0;
131
 
}
132
 
 
133
 
static HID_Action renumber_block_action_list[] = {
134
 
  {"RenumberBlock", NULL, renumber_block,
135
 
   NULL, NULL},
136
 
  {"RenumberBuffer", NULL, renumber_buffer,
137
 
   NULL, NULL}
138
 
};
139
 
 
140
 
REGISTER_ACTIONS (renumber_block_action_list)
141
 
 
142
 
void
143
 
pcb_plugin_init()
144
 
{
145
 
  register_renumber_block_action_list();
146
 
}