int GetNumberIndex (string name) { // Returns the index of the first digit of the numeric part of Name // -1 indicates there is no numeric part in Name int l = strlen(name) - 1; for (int i = l; i >= 0; --i) { if (!isdigit(name[i])) return i < l ? i + 1 : -1; } return 0; } string ElementPrefix (string name) { int i = GetNumberIndex (name); if (i == -1) return name; return strsub(name, 0, i); } string ElementNumber (string name) { int i = GetNumberIndex (name); if (i == -1) return ""; return strsub(name, i, strlen(name)-i); } int isPartInRectangle (UL_PART p, UL_RECTANGLE r) { p.instances(I) { if (I.x >= r.x1 && I.x <= r.x2 && I.y >= r.y1 && I.y <= r.y2) return 1; } return 0; } int isElementInRectangle (UL_ELEMENT e, UL_RECTANGLE r) { if (e.x >= r.x1 && e.x <= r.x2 && e.y >= r.y1 && e.y <= r.y2) return 1; return 0; } string ElementsInRectangle (int iLayer) { string strRet; board(B) { B.rectangles(R) { if (R.layer == iLayer) { B.elements(E) { strRet += " " + E.name + " "; } } } } return strRet; } string CmdDisplayVisibleLayers() { string c, cmd; cmd = "DISP NONE "; schematic(SCH) { SCH.layers(L) { if (L.visible) { sprintf(c, "%d ", L.number); cmd += c; } } } return cmd + ";\n"; } int iCmdEditSheetCurrent=0; string CmdEditSheet (int number) { string c; if (number == iCmdEditSheetCurrent) return ""; sprintf (c, "EDIT .S%d;\n", number); iCmdEditSheetCurrent = number; return c; } // EditBox with Execute/Save filename int DlgSaveExecute (string cmd, string f_name) { int R; R = dlgDialog("Edit and execute") { dlgTextEdit(cmd); dlgHBoxLayout { dlgPushButton("+&Execute") dlgAccept(); dlgPushButton("-&Cancel") dlgReject(); dlgPushButton("+Save") { string dest = dlgFileSave ("Save Script File", f_name+".scr", "*.scr"); if (dest != "") output (dest, "wt") { printf(cmd); } } } }; return R; // 1 = Execute, 0 = Cancel }