join-found.c

00001 /* Join found plug-in for PCB
00002  *
00003  * Copyright (C) 2009 Peter Clifton <pcjc2@cam.ac.uk>
00004  *
00005  * Licensed under the terms of the GNU General Public License, version
00006  * 2 or later.
00007  *
00008  * Compile like this:
00009 
00010  * gcc -Wall -I$HOME/pcbsrc/pcb.clean/src -I$HOME/pcbsrc/pcb.clean -O2 -shared join-found.c -o join-found.so
00011  *
00012  *  The resulting join-found.so goes in $HOME/.pcb/plugins/join-found.so
00013  *
00014  */
00015 
00016 #include <stdio.h>
00017 #include <math.h>
00018 
00019 #include "global.h"
00020 #include "data.h"
00021 #include "change.h"
00022 #include "undo.h"
00023 
00024 #define THERMAL_STYLE 4
00025 
00026 static int changed = 0;
00027 
00028 
00029 /* FIXME: PCB API STOPS ME DOING THIS */
00030 #if 0
00031 static void *
00032 init_line (LayerTypePtr Layer, LineTypePtr Line)
00033 {
00034   ListStart (LINE_TYPE, NULL, Line, NULL);
00035   return Line;
00036 }
00037 
00038 static void *
00039 init_via (PinTypePtr Via)
00040 {
00041   ListStart (VIA_TYPE, NULL, Via, NULL);
00042   return Via;
00043 }
00044 
00045 static void *
00046 init_pin (ElementTypePtr Element, PinTypePtr Pin)
00047 {
00048   ListStart (PIN_TYPE, Element, Pin, NULL);
00049   return Pin;
00050 }
00051 
00052 static void *
00053 init_pad (ElementTypePtr Element, PadTypePtr Pad)
00054 {
00055   ListStart (PAD_TYPE, Element, Pad, NULL);
00056   return Pad;
00057 }
00058 
00059 static void *
00060 init_arc (LayerTypePtr Layer, ArcTypePtr Arc)
00061 {
00062   ListStart (ARC_TYPE, Layer, Arc, NULL);
00063   return Arc;
00064 }
00065 
00066 static ObjectFunctionType init_funcs = {
00067   init_line,
00068   NULL,
00069   NULL,
00070   init_via,
00071   NULL,
00072   NULL,
00073   init_pin,
00074   init_pad,
00075   NULL,
00076   NULL,
00077   init_arc,
00078   NULL
00079 };
00080 #endif
00081 
00082 static int
00083 joinfound (int argc, char **argv, int x, int y)
00084 {
00085   int TheFlag = FOUNDFLAG;
00086 
00087   changed = 0;
00088 
00089   /* FIXME: PCB API STOPS ME DOING THIS */
00090 #if 0
00091   TheFlag = FOUNDFLAG; // | DRCFLAG;
00092   SaveFindFlag (TheFlag);
00093   InitConnectionLookup ();
00094   ResetConnections (False);
00095   SelectedOperation (init_funcs, False, LINE_TYPE | ARC_TYPE | PIN_TYPE | VIA_TYPE | PAD_TYPE);
00096   DoIt (true, False);
00097 #endif
00098 
00099   VISIBLELINE_LOOP (PCB->Data);
00100   {
00101     if (TEST_FLAG (TheFlag, line))
00102       {
00103         ChangeObjectJoin (LINE_TYPE, layer, line, line);
00104         changed = true;
00105       }
00106   }
00107   ENDALL_LOOP;
00108 
00109   VISIBLEARC_LOOP (PCB->Data);
00110   {
00111     if (TEST_FLAG (TheFlag, arc))
00112       {
00113         ChangeObjectJoin (ARC_TYPE, layer, arc, arc);
00114         changed = true;
00115       }
00116   }
00117   ENDALL_LOOP;
00118 
00119   if (PCB->PinOn)
00120     ELEMENT_LOOP (PCB->Data);
00121   {
00122     PIN_LOOP (element);
00123     {
00124       if (TEST_FLAG (TheFlag, pin))
00125         {
00126           ChangeObjectThermal (PIN_TYPE, element, pin, pin, THERMAL_STYLE);
00127           changed = true;
00128         }
00129     }
00130     END_LOOP;
00131   }
00132   END_LOOP;
00133 
00134   if (PCB->ViaOn)
00135     VIA_LOOP (PCB->Data);
00136   {
00137     if (TEST_FLAG (TheFlag, via))
00138       {
00139         ChangeObjectThermal (VIA_TYPE, via, via, via, THERMAL_STYLE);
00140         changed = true;
00141       }
00142   }
00143   END_LOOP;
00144 
00145   /* FIXME: PCB API STOPS ME DOING THIS */
00146 #if 0
00147   ResetConnections (False);
00148   FreeConnectionLookupMemory ();
00149   RestoreFindFlag ();
00150 #endif
00151 
00152   gui->invalidate_all ();
00153 
00154   if (changed)
00155     IncrementUndoSerialNumber ();
00156 
00157   return 0;
00158 }
00159 
00160 static HID_Action joinfound_action_list[] = {
00161   {"JoinFound", NULL, joinfound,
00162    NULL, NULL}
00163 };
00164 
00165 REGISTER_ACTIONS (joinfound_action_list)
00166 
00167 void
00168 pcb_plugin_init()
00169 {
00170   register_joinfound_action_list();
00171 }

Generated on Tue Aug 17 15:28:04 2010 for pcb-plugins by  doxygen 1.4.6-NO