void SetRouteStyle (char *name) { char num[10]; STYLE_LOOP (PCB); { if (name && NSTRCMP (name, style->Name) == 0) { sprintf (num, "%d", n + 1); hid_actionl ("RouteStyle", num, NULL); break; } } END_LOOP; }
static int FlagCurrentStyle (void *data) { STYLE_LOOP (PCB); { if (style->Thick == Settings.LineThickness && style->Diameter == Settings.ViaThickness && style->Hole == Settings.ViaDrillingHole && style->Keepaway == Settings.Keepaway) return n + 1; } END_LOOP; return 0; }
/* --------------------------------------------------------------------------- * creates a new PCB */ PCBTypePtr CreateNewPCB (bool SetDefaultNames) { PCBTypePtr ptr; int i; /* allocate memory, switch all layers on and copy resources */ ptr = (PCBTypePtr)calloc (1, sizeof (PCBType)); ptr->Data = CreateNewBuffer (); ptr->Data->pcb = (PCBTypePtr) ptr; ptr->ThermStyle = 4; ptr->IsleArea = 2.e8; ptr->SilkActive = false; ptr->RatDraw = false; SET_FLAG (NAMEONPCBFLAG, ptr); if (Settings.ShowNumber) SET_FLAG (SHOWNUMBERFLAG, ptr); if (Settings.AllDirectionLines) SET_FLAG (ALLDIRECTIONFLAG, ptr); ptr->Clipping = 1; /* this is the most useful starting point for now */ if (Settings.RubberBandMode) SET_FLAG (RUBBERBANDFLAG, ptr); if (Settings.SwapStartDirection) SET_FLAG (SWAPSTARTDIRFLAG, ptr); if (Settings.UniqueNames) SET_FLAG (UNIQUENAMEFLAG, ptr); if (Settings.SnapPin) SET_FLAG (SNAPPINFLAG, ptr); if (Settings.ClearLine) SET_FLAG (CLEARNEWFLAG, ptr); if (Settings.FullPoly) SET_FLAG (NEWFULLPOLYFLAG, ptr); if (Settings.OrthogonalMoves) SET_FLAG (ORTHOMOVEFLAG, ptr); if (Settings.liveRouting) SET_FLAG (LIVEROUTEFLAG, ptr); if (Settings.ShowDRC) SET_FLAG (SHOWDRCFLAG, ptr); if (Settings.AutoDRC) SET_FLAG (AUTODRCFLAG, ptr); ptr->Grid = Settings.Grid; ptr->LayerGroups = Settings.LayerGroups; STYLE_LOOP (ptr); { *style = Settings.RouteStyle[n]; style->index = n; } END_LOOP; hid_action ("RouteStylesChanged"); ptr->Zoom = Settings.Zoom; ptr->MaxWidth = Settings.MaxWidth; ptr->MaxHeight = Settings.MaxHeight; ptr->ID = ID++; ptr->ThermScale = 0.5; ptr->Bloat = Settings.Bloat; ptr->Shrink = Settings.Shrink; ptr->minWid = Settings.minWid; ptr->minSlk = Settings.minSlk; ptr->minDrill = Settings.minDrill; ptr->minRing = Settings.minRing; for (i = 0; i < MAX_LAYER; i++) ptr->Data->Layer[i].Name = strdup (Settings.DefaultLayerName[i]); return (ptr); }
/*! * \brief Read the library-netlist build a true Netlist structure. */ NetListType * ProcNetlist (LibraryType *net_menu) { ConnectionType *connection; ConnectionType LastPoint; NetType *net; static NetListType *Wantlist = NULL; if (!net_menu->MenuN) return (NULL); FreeNetListMemory (Wantlist); free (Wantlist); badnet = false; /* find layer groups of the component side and solder side */ bottom_group = GetLayerGroupNumberBySide (BOTTOM_SIDE); top_group = GetLayerGroupNumberBySide (TOP_SIDE); Wantlist = (NetListType *)calloc (1, sizeof (NetListType)); if (Wantlist) { ALLPIN_LOOP (PCB->Data); { pin->Spare = NULL; CLEAR_FLAG (DRCFLAG, pin); } ENDALL_LOOP; ALLPAD_LOOP (PCB->Data); { pad->Spare = NULL; CLEAR_FLAG (DRCFLAG, pad); } ENDALL_LOOP; MENU_LOOP (net_menu); { if (menu->Name[0] == '*' || menu->flag == 0) { badnet = true; continue; } net = GetNetMemory (Wantlist); if (menu->Style) { STYLE_LOOP (PCB); { if (style->Name && !NSTRCMP (style->Name, menu->Style)) { net->Style = style; break; } } END_LOOP; } else /* default to NULL if none found */ net->Style = NULL; ENTRY_LOOP (menu); { if (SeekPad (entry, &LastPoint, false)) { if (TEST_FLAG (DRCFLAG, (PinType *) LastPoint.ptr2)) Message (_ ("Error! Element %s pin %s appears multiple times in the netlist file.\n"), NAMEONPCB_NAME ((ElementType *) LastPoint.ptr1), (LastPoint.type == PIN_TYPE) ? ((PinType *) LastPoint.ptr2)-> Number : ((PadType *) LastPoint.ptr2)->Number); else { connection = GetConnectionMemory (net); *connection = LastPoint; /* indicate expect net */ connection->menu = menu; /* mark as visited */ SET_FLAG (DRCFLAG, (PinType *) LastPoint.ptr2); if (LastPoint.type == PIN_TYPE) ((PinType *) LastPoint.ptr2)->Spare = (void *) menu; else ((PadType *) LastPoint.ptr2)->Spare = (void *) menu; } } else badnet = true; /* check for more pins with the same number */ for (; SeekPad (entry, &LastPoint, true);) { connection = GetConnectionMemory (net); *connection = LastPoint; /* indicate expect net */ connection->menu = menu; /* mark as visited */ SET_FLAG (DRCFLAG, (PinType *) LastPoint.ptr2); if (LastPoint.type == PIN_TYPE) ((PinType *) LastPoint.ptr2)->Spare = (void *) menu; else ((PadType *) LastPoint.ptr2)->Spare = (void *) menu; } } END_LOOP; } END_LOOP; } /* clear all visit marks */ ALLPIN_LOOP (PCB->Data); { CLEAR_FLAG (DRCFLAG, pin); } ENDALL_LOOP; ALLPAD_LOOP (PCB->Data); { CLEAR_FLAG (DRCFLAG, pad); } ENDALL_LOOP; return (Wantlist); }