; ########################################################################## ; Find Nets from List ; This routine will open a form which displays all current net. When the ; user selects a net from the list the net is highlighted. The "Filter" ; in the form allows the user to select only nets beginning with the ; specified character. The "Refresh List" button updates the list with ; the current data taking any filter settings into account. The "Show ; Element" button displays the net properties and the "Jump to Element" ; button zooms in to the selected net. ; To run the routine within Allegro type "find net". ; Evan Shultz ; QSC Audio Products, LLC ; evan_shultz@qscaudio.com ; Revision History ; Rev A ; Written and tested with PCB Editor v16.2 ISR 008 ; Apr 17, 2009 ; -Initial Release ; Based on "Find Components from List" ; Written by David J. Scheuring ; Sr. Applications Eng. Cadence Design Systems ; May 31, 1995 ; "Find Components from List" Rev C by Evan Shultz ; ########################################################################## axlCmdRegister( "find net" `Find_Net_Routine ?cmdType "interactive") ; ######################## ; Set the global variables ; ######################## Net_Name_Filter = "*" Net_List = nil Displayed_Net_List = nil (defun Find_Net_Routine () axlDBRefreshId(axlDBGetDesign()) axlClearSelSet() ; ################# ; Declare variables ; ################# (let (Find_Net_Form Command) ; ############### ; Clear variables ; ############### Find_Net_Form = nil Command = nil ; ####################### ; Build the net list form ; ####################### Find_Net_Form = outfile("Find_Net_Form.form" "w") fprintf(Find_Net_Form "FILE_TYPE=FORM_DEFN VERSION=2\n") fprintf(Find_Net_Form "FORM\n") fprintf(Find_Net_Form "FIXED\n") fprintf(Find_Net_Form "PORT 25 20\n") fprintf(Find_Net_Form "HEADER \"Find Net\"\n") fprintf(Find_Net_Form "TILE\n") fprintf(Find_Net_Form "TEXT \"NETS LIST\"\n") fprintf(Find_Net_Form "TLOC 8 0\n") fprintf(Find_Net_Form "ENDTEXT\n") fprintf(Find_Net_Form "FIELD Displayed_Net_List\n") fprintf(Find_Net_Form "FLOC 2 2\n") fprintf(Find_Net_Form "LIST \"\" 21 10\n") fprintf(Find_Net_Form "ENDFIELD\n") fprintf(Find_Net_Form "TEXT \"Current Net Name\"\n") fprintf(Find_Net_Form "TLOC 2 22\n") fprintf(Find_Net_Form "ENDTEXT\n") fprintf(Find_Net_Form "FIELD Current_Net\n") fprintf(Find_Net_Form "FLOC 2 24\n") fprintf(Find_Net_Form "STRFILLIN 16 10\n") fprintf(Find_Net_Form "ENDFIELD\n") fprintf(Find_Net_Form "FIELD Show_Element\n") fprintf(Find_Net_Form "FLOC 2 27\n") fprintf(Find_Net_Form "MENUBUTTON \"Show Element\" 15 3\n") fprintf(Find_Net_Form "ENDFIELD\n") fprintf(Find_Net_Form "FIELD Jump_to_Element\n") fprintf(Find_Net_Form "FLOC 2 30\n") fprintf(Find_Net_Form "MENUBUTTON \"Jump to Element\" 15 3\n") fprintf(Find_Net_Form "ENDFIELD\n") fprintf(Find_Net_Form "TEXT \"Filter:\"\n") fprintf(Find_Net_Form "TLOC 2 33\n") fprintf(Find_Net_Form "ENDTEXT\n") fprintf(Find_Net_Form "FIELD Net_Name_Filter\n") fprintf(Find_Net_Form "FLOC 10 33\n") fprintf(Find_Net_Form "STRFILLIN 5 10\n") fprintf(Find_Net_Form "ENDFIELD\n") fprintf(Find_Net_Form "FIELD Refresh_List\n") fprintf(Find_Net_Form "FLOC 2 36\n") fprintf(Find_Net_Form "MENUBUTTON \"Refresh List\" 15 3\n") fprintf(Find_Net_Form "ENDFIELD\n") fprintf(Find_Net_Form "FIELD done\n") fprintf(Find_Net_Form "FLOC 2 39\n") fprintf(Find_Net_Form "MENUBUTTON \"Done\" 6 3\n") fprintf(Find_Net_Form "ENDFIELD\n") fprintf(Find_Net_Form "ENDTILE\n") fprintf(Find_Net_Form "ENDFORM\n") close(Find_Net_Form) ; ##################### ; Generate list of nets ; ##################### axlSetFindFilter(?enabled list("noall" "nets") ?onButtons list("noall" "nets")) Net_List = axlGetSelSet(axlAddSelectAll()) (foreach Item Net_List (if (Item->name != "") then Displayed_Net_List = cons(Item->name Displayed_Net_List) );if Item->net != nil );end foreach Item Net_List ; ###################### ; Define the form action ; ###################### (defun Find_Net_Form_Action_Routine (Find_Net_Form) (case Find_Net_Form->curField ("Refresh_List" Displayed_Net_List = nil axlDBRefreshId(axlDBGetDesign()) axlClearSelSet() axlSetFindFilter(?enabled list("noall" "nets") ?onButtons list("noall" "nets")) Net_List = nil Net_List_Unfiltered = nil (if Net_Name_Filter == "*" then Net_List = axlGetSelSet(axlAddSelectAll()) else Net_List_Unfiltered = axlGetSelSet(axlAddSelectAll()) (foreach Item Net_List_Unfiltered (if getchar(Item->name 1) == getchar(Net_Name_Filter 1) then Net_List = cons(Item Net_List) );end if );end foreach );end if (foreach Item Net_List (if Item->name != "" then Displayed_Net_List = cons(Item->name Displayed_Net_List) );end if Item->net != nil );end foreach Item Net_List (if Displayed_Net_List == nil then axlFormListDeleteAll(Find_Net_Form "Displayed_Net_List") axlFormSetField(Find_Net_Form "Displayed_Net_List" "No Match") axlFormSetField(Find_Net_Form "Net_Name_Filter" Net_Name_Filter) axlFormDisplay(Find_Net_Form) axlUIWPrint(Find_Net_Form "No Match") else axlFormListDeleteAll(Find_Net_Form "Displayed_Net_List") Displayed_Net_List = sort(Displayed_Net_List nil) axlFormSetField(Find_Net_Form "Displayed_Net_List" Displayed_Net_List) axlFormSetField(Find_Net_Form "Net_Name_Filter" Net_Name_Filter) axlFormDisplay(Find_Net_Form) axlUIWPrint(Find_Net_Form "Select Net") );end if Displayed_Net_List == nil );end Refresh_List ("Show_Element" axlShowObject(Net) );end "Show_Element" ("Jump_to_Element" axlZoomToDbid(Net t) );end "Jump_to_Element" ("Net_Name_Filter" (if Find_Net_Form->curValue == "" then Net_Name_Filter = "*" else Net_Name_Filter = upperCase(Find_Net_Form->curValue) t );end if );end "Net_Name_Filter" ("done" Displayed_Net_List = nil axlFormClose(Find_Net_Form) axlCancelEnterFun() axlClearSelSet() axlFlushDisplay() axlShell("zoom fit; redisplay") );end "done" ("Displayed_Net_List" axlSetFindFilter(?enabled list("nets") ?onButtons list("nets")) Net = axlGetSelSet(axlSingleSelectName("NET" strcat(Find_Net_Form->curValue))) axlHighlightObject(Net) axlFormSetField(Find_Net_Form "Current_Net" Find_Net_Form->curValue) t );end "Displayed_Net_List" );end case );end defun Find_Net_Form_Action_Routine ; ##################### ; Display the form/list ; ##################### Find_Net_Form = axlFormCreate( (gensym) "Find_Net_Form.form" '(e outer) 'Find_Net_Form_Action_Routine t) (if Displayed_Net_List == nil then axlFormSetField(Find_Net_Form "Displayed_Net_List" "No Nets") axlFormSetField(Find_Net_Form "Net_Name_Filter" Net_Name_Filter) axlFormDisplay(Find_Net_Form) axlUIWPrint(Find_Net_Form "No Nets") else Find_Net_Form = axlFormCreate( (gensym) "Find_Net_Form.form" '(e outer) 'Find_Net_Form_Action_Routine t) Displayed_Net_List = sort(Displayed_Net_List nil) (foreach Ref_Des Displayed_Net_List axlFormSetField(Find_Net_Form "Displayed_Net_List" Ref_Des) axlFormSetField(Find_Net_Form "Net_Name_Filter" Net_Name_Filter) axlFormDisplay(Find_Net_Form) axlUIWPrint(Find_Net_Form "Select Net") );end foreach Ref_Des Placed_List );end if Displayed_Net_List == nil );end let );end defun Find_Net_Routine