<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.cadence.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Allegro X Scripting - Skill - Recent Threads</title><link>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill</link><description>Allegro X Scripting - Skill</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>How to check BGA minimum pitch using Allegro Skill language</title><link>https://community.cadence.com/thread/66158?ContentTypeID=0</link><pubDate>Mon, 13 Jul 2026 06:33:23 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:f3e25ee6-3bd5-41cf-a121-043c8ef935b3</guid><dc:creator>BZ202408076026</dc:creator><slash:comments>5</slash:comments><comments>https://community.cadence.com/thread/66158?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66158/how-to-check-bga-minimum-pitch-using-allegro-skill-language/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I want to check&amp;nbsp;BGA minimum pitch. If BGA pitch is less than 0.5mm, need to highlight these BGA in PCB layout. Does anyone have experience to write script to do the check?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Shape Degassing parameters extraction using SKILL in allegro APD</title><link>https://community.cadence.com/thread/66149?ContentTypeID=0</link><pubDate>Wed, 08 Jul 2026 23:02:08 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:fc82f7a0-54dc-4782-bf33-d356d80fb82a</guid><dc:creator>AnanthVedalaLM</dc:creator><slash:comments>4</slash:comments><comments>https://community.cadence.com/thread/66149?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66149/shape-degassing-parameters-extraction-using-skill-in-allegro-apd/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I&amp;#39;m trying to extract the values set for a specific degassing pattern using skill , but instead of name , i&amp;#39;m unable to get anything else , is there any way we can extract the void array parameters and void spacing constraints that we set in the shape degassing tool, instead of using GUI, is there any other option to set those parameters for a pattern and also extract them&amp;nbsp;&lt;br /&gt;&lt;br /&gt;usually i&amp;#39;m getting the pattern name in this way&lt;br /&gt;&lt;br /&gt;shapedbId-&amp;gt;shapeBoundary-&amp;gt;prop-&amp;gt;&lt;span&gt;DEGAS_SHAPE_PROPERTIES&lt;br /&gt;&lt;br /&gt;which just leaves me with the name of the pattern used on the shape, but unable to figure out how do we actually get these parameters using skill&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;other questions i have ,&lt;br /&gt;&lt;br /&gt;Are these parameters for the dynamic shapes global or local ? and how are these parameters stored in the database&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>axlOpenDesignForBatch( works differently between 22.1 and 25.1 ( appears broken )</title><link>https://community.cadence.com/thread/66141?ContentTypeID=0</link><pubDate>Tue, 07 Jul 2026 13:05:43 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:a6aa6e00-b9ce-4d28-a96c-cd6976be4393</guid><dc:creator>Mhawley1</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/66141?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66141/axlopendesignforbatch-works-differently-between-22-1-and-25-1-appears-broken/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I just found something interesting today and would be nice for someone to test.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It would seem like&amp;nbsp;axlOpenDesignForBatch( no longer runs without a save prompt in 25.1 under the WF mode . Can someone try this out . Try out the example and see if you can batch open two dra&amp;#39;s without the prompt coming up .&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;axlOpenDesignForBatch(&amp;quot;u.dra&amp;quot; &amp;quot;wf&amp;quot;)&amp;nbsp; ( tested in 25.1 S 30 )&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Should I make a ticket ?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to import a techfile through SKILL</title><link>https://community.cadence.com/thread/66129?ContentTypeID=0</link><pubDate>Thu, 02 Jul 2026 12:30:33 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:724bfde6-78c7-4dad-b6b3-f16d0f02e3c6</guid><dc:creator>JuanCR</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/66129?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66129/how-to-import-a-techfile-through-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;axlRunBatchDBProgram&lt;/span&gt; can be used to import a techfile.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the design in Allegro X PCB Editor or Package Designer and type skill at the command line:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;Command &amp;gt; skill&lt;/span&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;The command line changes to the Skill prompt:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp; &amp;nbsp; Skill &amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;The following skill code&amp;nbsp;will create a log file and import a techfile. In the following skill code, replace&amp;nbsp;mytechfile.tcfx&amp;nbsp;with your own&amp;nbsp;techfile name including the .tcfx extension:&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="padding-left:60px;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;font-size:150%;"&gt;Skill &amp;gt; axlRunBatchDBProgram(&amp;quot;techfile&amp;quot; &amp;quot;techfile -$ -r mytechfile.tcfx %s&amp;quot; ?reloadDB t ?logfile &amp;quot;techfile&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Wait while the techfile (apd) runs:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1782995317444v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;ol start="5"&gt;
&lt;li&gt;The view of the&amp;nbsp;techfile UI will appear.&amp;nbsp;Scroll to view the summary.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Close the file.&lt;/li&gt;
&lt;li&gt;In the database, to exit from the skill prompt, type&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;:&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;Skill &amp;gt; exit&lt;/span&gt;&lt;/p&gt;
&lt;ol start="8"&gt;
&lt;li&gt;The Command window changes from&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Skill &amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&amp;nbsp;&lt;span&gt;Command &amp;gt;&lt;/span&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;Command &amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>axlDesignFlip()</title><link>https://community.cadence.com/thread/66107?ContentTypeID=0</link><pubDate>Fri, 26 Jun 2026 10:06:26 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:ff66850c-769d-4776-a93b-dfc093d486e7</guid><dc:creator>DavidAhl</dc:creator><slash:comments>5</slash:comments><comments>https://community.cadence.com/thread/66107?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66107/axldesignflip/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Im using the&amp;nbsp;&lt;span&gt;axlDesignFlip() in a script. In version 23.1 it worked great but when i run the script in version 25.1 it wont flip back the design. From the documentation i cant see that anything has changed. Is this a known bug in 25.1 or have i missed if something changed?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I tried this in both 23.1 and 25.1, both gave the same print out but in 25.1 the design doesnt flip back..&lt;img src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1782468170907v2.png" alt=" " /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;best regards&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;david&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to start SKILL IDE from APD or Allegro in Linux?</title><link>https://community.cadence.com/thread/66046?ContentTypeID=0</link><pubDate>Fri, 05 Jun 2026 23:35:51 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:046b6cba-5a0d-4373-b1da-0d9de9dc069c</guid><dc:creator>JuanCR</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/66046?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66046/how-to-start-skill-ide-from-apd-or-allegro-in-linux/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;The debugger environment is not so convenient for&amp;nbsp;APD / Allegro&amp;nbsp;debug. It is&amp;nbsp;more oriented for SKILL DFII development. SKILL Debugger is incapable to debug the axlSKILL (Allegro specific) functions.&lt;/p&gt;
&lt;p&gt;There is no graphical debugger for axlSKILL, but you can set the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;telskill&amp;nbsp;&lt;/span&gt;environment variable to open a SKILL development window.&lt;/p&gt;
&lt;p&gt;If you are looking for line debugger with Allegro, there are some command line debugging options available to you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;installDebugger()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;axlDebug()&amp;nbsp;&lt;/span&gt;are functions you can use to set debug mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;The following is an extract from the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;axlIsDebug()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;function description in cdnshelp, which describes what axlDebug enables:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;When this mode is set, AXL may print additional AXL API argument warnings when arguments to AXL functions are incorrect. Many warnings do not obey this variable because they are considered serious or edge conditions. Warnings supported are less serious and are known from user feedback to be troublesome to program around.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;Typically, when an AXL API function encounters an argument error, it will print a warning and return nil.&lt;br /&gt;When unset, the code runs in development mode and eliminates many of these warnings. You should have this mode enabled when developing SKILL code.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Another function&amp;nbsp;available to you is&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;sstatus&lt;/span&gt;. Refer to the online documentation to get the full list of the internal variable names and switch values available to you through this command.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;sstatus(&lt;br /&gt;s_name&lt;br /&gt;g_switchValue&lt;br /&gt;)&lt;br /&gt;=&amp;gt; g_switchValue&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sets the internal system variable named to a given value. This is a syntax form. Internal variables are typically Boolean switches that accept only the Boolean values of&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;t&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;nil&lt;/span&gt;. Efficiency and security are the reasons why these system variables are stored as internal variables, which can only be set by&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;sstatus&lt;/span&gt;, rather than as SKILL variables you can set directly.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Other things you can do are set breakpoints with&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;breakpt&amp;nbsp;&lt;/span&gt;and then progress through your code with step and continue etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;The online document,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;em&gt;SKILL Development Functions Reference&lt;/em&gt;, is helpful for describing the functions. However,&amp;nbsp;you&amp;nbsp;must be aware that any reference to a graphical interface for debugging does not apply to axlSKILL. As with any programming language, you can set a debug variable and then make conditional checks for it. If set, you can have your code print values of variables from your code.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The other way to check the code before delivery is to launch the SKLINT tool and to try to solve all warnings, errors given by this tool.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Steps to use SKLINT on UNIX:&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Run&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;setenv &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;TELSKILL&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&lt;/span&gt;in your local env file.&lt;/li&gt;
&lt;li&gt;Run Allegro and then keep Allegro iconified.&lt;/li&gt;
&lt;li&gt;In the current shell window, the prompt becomes&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;SKILL&amp;gt;&lt;/span&gt;. Launch&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;SKILL&amp;gt; sklint ?file &amp;quot;filetodebug.il&amp;quot;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;filetodebug.il&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the file name you want to debug.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>customized GUI to control artwork film</title><link>https://community.cadence.com/thread/66019?ContentTypeID=0</link><pubDate>Mon, 01 Jun 2026 05:45:19 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:7a793bfc-6373-49b3-b7d0-0e48a6ad3a8a</guid><dc:creator>MZ20250602835</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/66019?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66019/customized-gui-to-control-artwork-film/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Dear all,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;i would like to use film_domain.form as the base to create a customized GUI in which the user/Layouter can assign specific artwork films for Artwork and PDF domains(the Domains IPC2581 and Visibility will not be displayed).&lt;/p&gt;
&lt;p&gt;may i ask in my case which skill should i used to achieve the expected function?&lt;/p&gt;
&lt;p&gt;Many thanks&lt;/p&gt;
&lt;p&gt;Moyan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to use Stack in Allegro SKILL</title><link>https://community.cadence.com/thread/65934?ContentTypeID=0</link><pubDate>Thu, 16 Apr 2026 21:46:08 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:56b6a6b2-ae94-4ef4-81be-551c73a2696f</guid><dc:creator>JuanCR</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/65934?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65934/how-to-use-stack-in-allegro-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p dir="ltr"&gt;Stack is a popular data structure in programming languages. It is like a real-world stack such as piles of papers,&amp;nbsp;where papers are usually added to the top of the pile and removed from the top. So, in a&amp;nbsp;stack&amp;nbsp;data structure, you can add or remove elements from the top of the stack&amp;nbsp;using the&amp;nbsp;LIFO (Last-In-First-Out)&amp;nbsp;principle.&lt;/p&gt;
&lt;p&gt;Stack in Allegro SKILL is a list that&amp;nbsp;works like a stack using APIs/functions&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;pushf&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;popf&lt;/span&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;pushf&amp;nbsp;&lt;/span&gt;adds an element to the top of the stack, that is,&amp;nbsp;adds the first element to&amp;nbsp;the list.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;popf&amp;nbsp;&lt;/span&gt;removes an element from the top of the stack, that is, the&amp;nbsp;first element of the list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The code is as shown below:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;myStack=list(3 4 5 6)&lt;br /&gt;printf(&amp;quot;Stack is %L\n&amp;quot;&amp;nbsp;myStack)&lt;br /&gt;pushf(2&amp;nbsp;myStack)&lt;br /&gt;printf(&amp;quot;After pushing 2 Stack is %L\n&amp;quot;&amp;nbsp;myStack)&lt;br /&gt;pushf(1&amp;nbsp;myStack)&lt;br /&gt;printf(&amp;quot;After pushing 1 Stack is %L\n&amp;quot;&amp;nbsp;myStack)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;printf(&amp;quot;Before popping Stack is %L\n&amp;quot;&amp;nbsp;myStack)&lt;br /&gt;elem=popf(myStack)&lt;br /&gt;printf(&amp;quot;After popping: Element removed from stack is %L and&amp;nbsp;Stack is %L\n&amp;quot;&amp;nbsp;elem&amp;nbsp;myStack)&lt;br /&gt;elem=popf(myStack)&lt;br /&gt;printf(&amp;quot;After popping again: Element removed from stack is %L and&amp;nbsp;Stack is %L\n&amp;quot;&amp;nbsp;elem&amp;nbsp;myStack)&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;The following image shows its output:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1776375939091v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to get all voids on conductor layer?</title><link>https://community.cadence.com/thread/65911?ContentTypeID=0</link><pubDate>Wed, 08 Apr 2026 22:39:22 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:f3318bc6-1265-4661-8685-93b4dead6c0e</guid><dc:creator>khuranav007</dc:creator><slash:comments>4</slash:comments><comments>https://community.cadence.com/thread/65911?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65911/how-to-get-all-voids-on-conductor-layer/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;What is the best way or methodology to obtain all voids (lack of metal) on a conductor layer?&lt;/p&gt;
&lt;p&gt;I tried to use the following polygon-&amp;gt;holes like shown below but it does not get all voids (lack of metal).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;shpAbovePoly = car(axlPolyFromDB(shpAbove)) &lt;/code&gt;&lt;br /&gt;&lt;code&gt; shpAbovePolyHoles = shpAbovePoly-&amp;gt;holes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;img style="max-height:480px;max-width:640px;" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1775687921710v1.png" alt=" " /&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;Voids in orange box are desired.&lt;/p&gt;
&lt;p&gt;Thanks for help.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Need the Skill files</title><link>https://community.cadence.com/thread/65874?ContentTypeID=0</link><pubDate>Thu, 26 Mar 2026 06:40:05 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:3042713b-b741-4d9c-b996-17080aeddbd4</guid><dc:creator>PK202511125928</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/65874?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65874/need-the-skill-files/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi Every one,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Please for allegro 23.1 any skill files ther please give me.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Like checklist runner for.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Interactive Form</title><link>https://community.cadence.com/thread/65869?ContentTypeID=0</link><pubDate>Wed, 25 Mar 2026 07:20:07 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:ae9e01b5-3a2d-4cb2-97e5-08e1af737c84</guid><dc:creator>AA202603241137</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/65869?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65869/interactive-form/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I am planning to create a script but this needs to have a form that is interactive.&amp;nbsp; The form changes depend on the number of layers in the PCB.&amp;nbsp; My idea to list all the layers of the PCB in the form and also have a checkbox beside each layer name.&amp;nbsp; But my knowledge on the form is basic only. I only use TEXT, GROUP, MENUBOTTON, STRFILLIN.&amp;nbsp; Can somebody guide or educate me.&amp;nbsp; Thank you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>how to Fetch parameters of  the Options window</title><link>https://community.cadence.com/thread/65845?ContentTypeID=0</link><pubDate>Wed, 18 Mar 2026 07:32:09 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:3c8d048e-cea4-4e98-8322-ea2de97ff9d1</guid><dc:creator>Hoangkhoipcb</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/65845?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65845/how-to-fetch-parameters-of-the-options-window/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi everyone,&lt;/p&gt;
&lt;p&gt;Methods for identifying form handles and fetching parameters from the dynamic Options sidebar in Cadence Allegro&lt;/p&gt;
&lt;p&gt;Any code snippets or references to the documentation would be greatly appreciated.&lt;/p&gt;
&lt;p&gt;Thank you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to use regular expressions in SKILL</title><link>https://community.cadence.com/thread/65759?ContentTypeID=0</link><pubDate>Fri, 20 Feb 2026 07:55:52 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:b2a3bc2c-c8bb-459c-b2d5-aa5aa9b53c5a</guid><dc:creator>SaiPavanl</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/65759?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65759/how-to-use-regular-expressions-in-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p dir="ltr"&gt;&lt;span&gt;Often, you need to match strings or symbols against a pattern. A regular expression is an object that describes a pattern of characters. Regular expressions are a way to match patterns with sequences of characters. They are used in every programming language like C++, Java, and Python. SKILL also provides a number of pattern-matching functions like&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexMatchp&lt;/span&gt;,&amp;nbsp;&lt;span&gt;rexCompile&lt;/span&gt;,&amp;nbsp;and&amp;nbsp;&lt;span&gt;rexExecute&lt;/span&gt;.&lt;/p&gt;
&lt;p dir="ltr"&gt;SKILL also supports&amp;nbsp;&lt;span&gt;pcreCompile&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;span&gt;pcreExecute&lt;/span&gt;&amp;nbsp;for&lt;span&gt;&amp;nbsp;Perl-Compatible Regular Expressions (PCRE).&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;&lt;strong&gt;rexMatchp&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;If you want to see whether the string matches a regular expression, you can use&amp;nbsp;rexMatchp. For example, to check if a string has only numbers with a decimal point, you can use&amp;nbsp;rexMatchp,&amp;nbsp;as shown below:&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;Rules for constructing patterns or regular expressions are given later in this&amp;nbsp;article.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;Here, the output of the SKILL&amp;nbsp;command is shown&amp;nbsp;after the&amp;nbsp;=&amp;gt;&amp;nbsp;symbol:&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexMatchp(&amp;quot;[0-9]*[.][0-9][0-9]*&amp;quot; &amp;quot;100.001&amp;quot;)&amp;nbsp; &amp;nbsp; =&amp;gt; t&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexMatchp(&amp;quot;[0-9]*[.][0-9]+&amp;quot; &amp;quot;.001&amp;quot;)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; t&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexMatchp(&amp;quot;[0-9]*[.][0-9]+&amp;quot; &amp;quot;.&amp;quot;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; nil&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexMatchp(&amp;quot;[0-9]*[.][0-9][0-9]*&amp;quot; &amp;quot;10.&amp;quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; nil&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexMatchp(&amp;quot;[0-9&amp;quot; &amp;quot;100&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;*Error*&amp;nbsp;rexMatchp: Missing ] - &amp;quot;[0-9&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexMatchp( t_pattern S_target&amp;nbsp;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;This function matches&amp;nbsp;&lt;/span&gt;&lt;span&gt;S_target&amp;nbsp;against the&amp;nbsp;&lt;/span&gt;&lt;span&gt;t_pattern&amp;nbsp;&lt;/span&gt;regular&amp;nbsp;&lt;span&gt;expression&amp;nbsp;&lt;/span&gt;&lt;span&gt;and returns&amp;nbsp;&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;&amp;nbsp;if a match is found;&amp;nbsp;&lt;/span&gt;&lt;span&gt;otherwise, it returns&amp;nbsp;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;An error occurs if the given pattern is ill-formed.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;&lt;span&gt;rexCompile&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span&gt;rexExecute&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;For greater efficiency when matching a number of targets against a single pattern, use the&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexCompile&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;span&gt;and&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexExecute&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;span&gt;functions. For example,&amp;nbsp;if you need to work on nets that match a pattern, use&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexCompile&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;span&gt;and&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexExecute&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;span&gt;instead of using&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexMatchp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexExecute&amp;nbsp;matches a string or symbol against the previously compiled pattern that was set up by the last&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexCompile&amp;nbsp;call.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;To check if the name of the nets that can be alphanumeric begins with alphabets, use the following command:&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexCompile(&amp;quot;^[a-zA-Z][a-zA-Z0-9]*&amp;quot;)&amp;nbsp; &amp;nbsp; =&amp;gt; t&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexExecute(&amp;#39;Net123) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; t&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;rexExecute(&amp;quot;123 Nets&amp;quot;)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; nil&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;Calls to&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexMatchp&amp;nbsp;&lt;/span&gt;&lt;span&gt;reset the pattern set up by&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexCompile&lt;/span&gt;&lt;span&gt;. If any calls to&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexMatchP&amp;nbsp;have been made,&amp;nbsp;rexExecute&amp;nbsp;&lt;/span&gt;&lt;span&gt;will not&amp;nbsp;match the pattern set by&amp;nbsp;&lt;/span&gt;&lt;span&gt;rexCompile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;PCRE&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;The&amp;nbsp;PCRE&amp;nbsp;library provides functions for&amp;nbsp;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;at&lt;/span&gt;&lt;span&gt;tern match&lt;/span&gt;&lt;span&gt;ing using&lt;/span&gt;&lt;span&gt;&amp;nbsp;Perl-compatible regular expressions. For more details, refer to&amp;nbsp;&lt;/span&gt;&lt;em&gt;&lt;a href="https://www.pcre.org/" rel="noopener noreferrer" target="_blank"&gt;&lt;span&gt;https://www.pcre.org&lt;/span&gt;&lt;/a&gt;&lt;/em&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;pcreCompile&amp;nbsp;&lt;/span&gt;&lt;span&gt;compiles a regular expression string pattern&lt;/span&gt;&lt;span&gt;(t_pattern&lt;/span&gt;&lt;span&gt;) into an internal representation that you can use in a&amp;nbsp;pcreExecute&amp;nbsp;function call. The compilation method is&amp;nbsp;PCRE or Perl-compatible. You can use a second (optional) argument to specify independent option bits for controlling the pattern compilation.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;pcreCompile(&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;t_pattern&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;[ x_options ]&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;=&amp;gt; o_comPatObj&amp;nbsp;/ nil&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;For example,&amp;nbsp;the&amp;nbsp;&lt;/span&gt;&lt;span&gt;[12[:^digit:]]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;PCRE&amp;nbsp;pattern&amp;nbsp;&lt;span&gt;matches&amp;nbsp;1,&amp;nbsp;2, or any non-&lt;/span&gt;digit.&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;comPat1 =&amp;nbsp;pcreCompile( &amp;quot;[12[:^digit:]]&amp;quot; ) =&amp;gt;&amp;nbsp;pcreobj@0x27d150&amp;nbsp;(Note that your object&amp;nbsp;will&amp;nbsp;be different)&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;pcreExecute( comPat1 &amp;quot;abc&amp;quot; ) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; t&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;pcreExecute( comPat1 &amp;quot;12a&amp;quot;)&amp;nbsp; &amp;nbsp;=&amp;gt;t&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;pcreExecute( comPat1 &amp;quot;3&amp;quot;) =&amp;gt;nil&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;Here is another example:&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;comPat5 = pcreCompile( &amp;quot;^\\d?\\d(jan|feb|mar|apr|may|jun)\\d\\d$/&amp;quot; )&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;pcreExecute( comPat5 &amp;quot;25jun3&amp;quot; ) =&amp;gt; nil&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;pcreExecute( comPat5 &amp;quot;25jun3&amp;quot;&amp;nbsp;pcreGenExecOptBits(?anchored t) ) =&amp;gt; nil&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;pcreExecute( comPat5 &amp;quot;25jun3&amp;quot;&amp;nbsp;pcreGenExecOptBits(?partial t) ) =&amp;gt; t&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Rules for constructing pattern or regular expressions&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;Regular expressions can contain both special and ordinary characters. Most ordinary characters, like&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;#39;A&amp;#39;&lt;/span&gt;,&amp;nbsp;&lt;span&gt;&amp;#39;a&amp;#39;&lt;/span&gt;, or&lt;span&gt;&amp;nbsp;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;span&gt;, are the simplest regular expressions; they simply match themselves.&amp;nbsp;You can concatenate ordinary characters, so that&amp;nbsp;&lt;/span&gt;&lt;span&gt;last&lt;/span&gt;&lt;span&gt;&amp;nbsp;matches the&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;#39;last&amp;#39;&lt;/span&gt;&amp;nbsp;string.&amp;nbsp;&lt;span&gt;There are also special symbols like&amp;nbsp;*,&amp;nbsp;+,&amp;nbsp;and so on, which you can see in detail here:&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;\&amp;nbsp;&amp;nbsp;&amp;nbsp; General escape character with several uses&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;^&amp;nbsp;&amp;nbsp;&amp;nbsp; Assert start of the string (or line, in&amp;nbsp;multi-line&amp;nbsp;mode)&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;$&amp;nbsp; &amp;nbsp; Assert end of the string (or line, in&amp;nbsp;multi-line&amp;nbsp;mode)&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;.&amp;nbsp;&amp;nbsp;Match any character except new line (by default)&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;[&amp;nbsp; &amp;nbsp; Start character class definition&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;|&amp;nbsp; &amp;nbsp; Start of alternative branch&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp;Start&amp;nbsp;subpattern&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;)&amp;nbsp;&amp;nbsp;End&amp;nbsp;subpattern&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;?&amp;nbsp; &amp;nbsp;&amp;nbsp;Matches&amp;nbsp;0 or 1 quantifier&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;Matches 0 or more&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;M&lt;/span&gt;&lt;span&gt;atches&amp;nbsp;&lt;/span&gt;&lt;span&gt;1 or more&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;The part of a pattern that is in square brackets is called a &amp;quot;character class&amp;quot;. In a character class, the only&amp;nbsp;metacharacters&amp;nbsp;are:&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;\&amp;nbsp; &amp;nbsp; General escape character&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;^&amp;nbsp; &amp;nbsp; Negates the class, but only if the first character&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;-&amp;nbsp; &amp;nbsp; Indicates character range&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;[&amp;nbsp;&amp;nbsp;&amp;nbsp;POSIX&amp;nbsp;character class (only if followed by&amp;nbsp;POSIX&amp;nbsp;syntax)&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;]&amp;nbsp; &amp;nbsp; Terminates the character class&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Asterisk symbol (&lt;span&gt;*&lt;/span&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;While matching, it checks if the preceding character (or set of characters) repeats for 0 or more times (up to infinite).&lt;/span&gt;&lt;br /&gt;Example:&lt;span&gt;&amp;nbsp;The&amp;nbsp;ab*c&amp;nbsp;&lt;/span&gt;&lt;span&gt;re&lt;/span&gt;&lt;span&gt;gul&lt;/span&gt;&lt;span&gt;ar&amp;nbsp;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;xpressio&lt;/span&gt;&lt;span&gt;n&amp;nbsp;&lt;/span&gt;&lt;span&gt;matches with&amp;nbsp;ac,&amp;nbsp;abc,&amp;nbsp;abbc,&amp;nbsp;abbbc, and&amp;nbsp;so on.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Plus symbol (&lt;span&gt;+&lt;/span&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;While matching, it checks if the preceding character (or set of characters) repeats for at least one or more times (up to infinite).&lt;/span&gt;&lt;br /&gt;Example:&lt;span&gt;&amp;nbsp;The&amp;nbsp;ab+c&amp;nbsp;&lt;/span&gt;&lt;span&gt;regular&amp;nbsp;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span&gt;n&amp;nbsp;&lt;/span&gt;&lt;span&gt;matches with&amp;nbsp;abc,&amp;nbsp;abbc,&amp;nbsp;&lt;/span&gt;&lt;span&gt;abbbc&lt;/span&gt;&lt;span&gt;,&amp;nbsp;and so on.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Wildcard (&lt;span&gt;.&lt;/span&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;The dot symbol can match any character; hence. it is called the wildcard character.&lt;/span&gt;&lt;br /&gt;Example:&lt;span&gt;&amp;nbsp;The&amp;nbsp;.*&amp;nbsp;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;eg&lt;/span&gt;&lt;span&gt;ular&amp;nbsp;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;xp&lt;/span&gt;&lt;span&gt;ress&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span&gt;n&amp;nbsp;&lt;/span&gt;&lt;span&gt;matches with any character any number of times.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Optional character (&lt;span&gt;?&lt;/span&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;While matching, the preceding character may or may not be present in the string to be matched.&lt;/span&gt;&lt;br /&gt;Example:&lt;span&gt;&amp;nbsp;In&amp;nbsp;docx?,&amp;nbsp;the&amp;nbsp;?&amp;nbsp;character tells the computer that&amp;nbsp;x&amp;nbsp;may or may not be present in the name of file format.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Caret symbol (&lt;span&gt;^&lt;/span&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;span&gt;The match must start at the&amp;nbsp;&lt;strong&gt;beginning&amp;nbsp;&lt;/strong&gt;of the string or line.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Example:&amp;nbsp;^abc&amp;nbsp;matches&amp;nbsp;abcd&amp;nbsp;but not&amp;nbsp;zabc.&lt;/span&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Dollar symbol (&lt;span&gt;$&lt;/span&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;The match&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;span&gt;must occur at the&amp;nbsp;&lt;strong&gt;end&amp;nbsp;&lt;/strong&gt;of the string or before&amp;nbsp;&lt;strong&gt;\n&lt;/strong&gt;&amp;nbsp;at the end of the line or string.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Example:&amp;nbsp;333$&amp;nbsp;matches&amp;nbsp;901-333&amp;nbsp;but not&amp;nbsp;333-901&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>What do you know about RAVEL versus SKILL ?</title><link>https://community.cadence.com/thread/65730?ContentTypeID=0</link><pubDate>Tue, 10 Feb 2026 17:30:25 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:54673396-a9e0-4e57-a717-cdcfecf88687</guid><dc:creator>John T</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/65730?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65730/what-do-you-know-about-ravel-versus-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;Show what you know! Can you answer these quick fire questions:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/cfs-file/__key/communityserver-discussions-components-files/137/Accelerate-Learning.bmp" /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;True or False:&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;RAVEL is &amp;ldquo;declarative&amp;rdquo; while SKILL is &amp;ldquo;procedural/functional&amp;rdquo;?&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;True or False:&amp;nbsp;&lt;/strong&gt;&lt;strong style="font-family:inherit;"&gt;RAVEL violations can be cross‑probed in the layout via the DRC Browser?&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;Choose the best option, &amp;ldquo;when to use&amp;rdquo;:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:150%;"&gt;&lt;span&gt;A.&amp;nbsp;&lt;/span&gt;&lt;strong&gt;SKILL&lt;/strong&gt; to create new database objects; &lt;strong&gt;RAVEL&lt;/strong&gt; to check rules/flag violations&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:150%;"&gt; B. &lt;strong&gt;RAVEL&lt;/strong&gt; to create symbols; &lt;strong&gt;SKILL&lt;/strong&gt; to list DRCs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:150%;"&gt; C. &lt;strong&gt;SKILL&lt;/strong&gt; only for DFM checks; &lt;strong&gt;RAVEL&lt;/strong&gt; only for routing&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:150%;"&gt; D. They&amp;rsquo;re interchangeable&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to run batch IDX files</title><link>https://community.cadence.com/thread/65723?ContentTypeID=0</link><pubDate>Mon, 09 Feb 2026 16:21:14 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:c9ae3093-5608-48bf-87c1-ddbfee320176</guid><dc:creator>Mhawley1</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/65723?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65723/how-to-run-batch-idx-files/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Has anybody sucessfully exported a IDX file using the external EXE that came with the install . -&amp;gt; see the code below which ,... doesnt work .&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;file_name = axlCurrentDesign()&lt;br /&gt;whole_board_name = strcat(file_name &amp;quot;.brd&amp;quot;)&lt;br /&gt;working_directory = getWorkingDir()&lt;br /&gt;all_of_it = strcat(working_directory &amp;quot;/&amp;quot; whole_board_name)&lt;br /&gt;whole_idx_command = strcat(all_of_it -o base &amp;quot;)&lt;/p&gt;
&lt;p&gt;exe_path = &amp;quot;C:/Cadence/SPB_22.1/tools/bin/idx_out.exe&amp;quot;&lt;br /&gt;;C:\Cadence\SPB_22.1\tools\bin so this is where that idx_out.exe is .&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;; so its not a shell command its a exe command you need to do .&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;axlRunBatchDBProgram(exe_path &lt;span&gt;whole_idx_command&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;; so this doesnt work .&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>menu creation in orcad pcb skill</title><link>https://community.cadence.com/thread/65718?ContentTypeID=0</link><pubDate>Sun, 08 Feb 2026 12:31:44 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:4133b376-a37d-40e4-893d-0dd950058c5a</guid><dc:creator>digital1</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/65718?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65718/menu-creation-in-orcad-pcb-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi i have created a routine in skill to run in pcb editor this code runs and does its thing however i now want to code a menu so the menu is inserted at startup.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;i have inserted the file to load in my allegro.ilinit as&amp;nbsp;&amp;nbsp;(load &amp;quot;net_short.il&amp;quot;)&lt;/p&gt;
&lt;p&gt;the top of my net_short.il file is&amp;nbsp;&lt;/p&gt;
&lt;p&gt;q = axlUIMenuFind(nil -1)&lt;br /&gt;z = axlUIMenuInsert( q &amp;#39;popup &amp;quot;TDR Electronics&amp;quot;)&lt;br /&gt;axlUIMenuInsert(z &amp;quot;Net Short&amp;quot; &amp;quot;net_short&amp;quot;)&lt;/p&gt;
&lt;p&gt;axlCmdRegister(&amp;quot;net_short&amp;quot; `_net_short)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;however there is no menu at the top of the pcb editor and it should be left of the help menu the code has been loaded because when i type net_short in the command window the code runs&lt;/p&gt;
&lt;p&gt;however i can type in the command window skill load &amp;quot;net_short.il&amp;quot; and the menu has my updated menu in it and i can then run the code from that menu.&lt;/p&gt;
&lt;p&gt;I believe it is a timing issue but i dont know how to get any further I am running orcad pcb version 24.1&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;can any one help&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to use Allegro Skill language to check if the height of bottom components are more than 4mm and highlight them</title><link>https://community.cadence.com/thread/65690?ContentTypeID=0</link><pubDate>Wed, 28 Jan 2026 01:48:18 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:2bca9403-7d80-418d-a023-48c48841a8ae</guid><dc:creator>BZ202408076026</dc:creator><slash:comments>6</slash:comments><comments>https://community.cadence.com/thread/65690?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65690/how-to-use-allegro-skill-language-to-check-if-the-height-of-bottom-components-are-more-than-4mm-and-highlight-them/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I am newcomer for Cadence Skill language and I am learning on how to develop programing to check what I want in Cadence Allegro.&lt;/p&gt;
&lt;p&gt;Now I want to check if the height of bottom components are more than 4mm and highlight them if existed. But I&amp;nbsp;don&amp;#39;t know where to start. Does anybody have the experience to write the Skill?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Running ODB++ without GUI</title><link>https://community.cadence.com/thread/65573?ContentTypeID=0</link><pubDate>Tue, 16 Dec 2025 14:48:43 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:8afb90a5-8746-4c41-bbcd-aac1b1f5cdd2</guid><dc:creator>Uri Chaplin</dc:creator><slash:comments>4</slash:comments><comments>https://community.cadence.com/thread/65573?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65573/running-odb-without-gui/rss?ContentTypeId=0</wfw:commentRss><description>&lt;div&gt;I try to create ODB++ files without a GUI.&amp;nbsp; I used ODB++ Inside&amp;nbsp; board and checked that no warning to brd file I going to use.&lt;/div&gt;
&lt;div&gt;First I created a BAT file to check if all parameters are good.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;I run this file :&lt;/div&gt;
&lt;div&gt;-----------------------------------------------------------&lt;/div&gt;
&lt;div&gt;SET ALLEGRO_BOARD=&amp;quot;c:\ODB\test.brd&amp;quot;&lt;br /&gt;SET OUTPUT_DIR=&amp;quot;c:\ODB\odb_export&amp;quot;&lt;br /&gt;SET ALLEGRO_BRD2ODB=&amp;quot;c:\ODB\brd2odb_2510\&amp;quot;&lt;br /&gt;&lt;br /&gt;%ALLEGRO_BRD2ODB%brd2odb.exe -ijp %ALLEGRO_BOARD% &amp;nbsp;-jp %OUTPUT_DIR% -jn allegro_1&amp;nbsp; -no_view -noDPW&lt;br /&gt;pause&lt;/div&gt;
&lt;div&gt;
&lt;div class="gmail_signature" dir="ltr" data-smartmail="gmail_signature"&gt;
&lt;div dir="ltr"&gt;
&lt;div&gt;
&lt;div dir="ltr"&gt;
&lt;div&gt;----------------------------------------------------------------&lt;/div&gt;
&lt;div&gt;But it always open GUI and report error: Translation filed ! Some required&amp;nbsp;files are missing ( elf_cadence-583004)&lt;/div&gt;
&lt;div&gt;What is wrong ?&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>axlDBChangeDesignOrigin issue</title><link>https://community.cadence.com/thread/65550?ContentTypeID=0</link><pubDate>Mon, 08 Dec 2025 18:58:50 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:140b80f9-cdf8-4e98-9763-aa1b1fb5d7df</guid><dc:creator>DG20250828451</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/65550?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65550/axldbchangedesignorigin-issue/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Has anyone had this happen...?&lt;/p&gt;
&lt;p&gt;When I issue the&amp;nbsp;axlDBChangeDesignOrigin command on my laptop, there is no issue. The origin will change.&lt;/p&gt;
&lt;p&gt;When I issue it on my desktop, it fails to change the origin.&lt;/p&gt;
&lt;p&gt;I am using Allegro 23.1 S007&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>offsetting a CLINE using SKILL</title><link>https://community.cadence.com/thread/65543?ContentTypeID=0</link><pubDate>Sat, 06 Dec 2025 06:08:17 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:271c91db-d1e2-44b1-9577-835d9fd0bf3c</guid><dc:creator>Hoangkhoipcb</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/65543?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65543/offsetting-a-cline-using-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p data-start="109" data-end="125"&gt;Hi everyone,&lt;/p&gt;
&lt;p data-start="127" data-end="297"&gt;I&amp;rsquo;m currently trying to write a SKILL to offset a centerline (CLINE), but I&amp;rsquo;m running into some difficulties.&lt;br data-start="243" data-end="246" /&gt; Has anyone here worked on something similar before?&lt;/p&gt;
&lt;p data-start="299" data-end="509"&gt;I&amp;rsquo;ve already spent quite a lot of time experimenting with different approaches, but so far the results are still not what I expected. I would really appreciate any suggestions, experience, or guidance from you.&lt;/p&gt;
&lt;p data-start="511" data-end="549"&gt;Thanks a lot in advance for your help!&lt;br /&gt;&lt;br /&gt;Best Regards,&lt;br /&gt;&lt;br /&gt;HoangKhoi.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1765000851293v1.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Issue with function @key parameters</title><link>https://community.cadence.com/thread/65424?ContentTypeID=0</link><pubDate>Tue, 04 Nov 2025 18:00:33 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:218bda60-b131-4292-9a35-41888b1ae64a</guid><dc:creator>DavidJHutchins</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/65424?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65424/issue-with-function-key-parameters/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I have noticed an issue with @key parameter default values not getting processed correctly...&lt;/p&gt;
&lt;p&gt;Below is an example code segment:&lt;/p&gt;
&lt;p&gt;procedure( test_code(&lt;br /&gt; @key ( PseudoName &amp;quot;psuedo_tp&amp;quot;)&lt;br /&gt; ( PreFix &amp;quot;_TP&amp;quot;)&lt;br /&gt; ( Debug t)&lt;br /&gt; )&lt;br /&gt; let((Mark PreFix Comps net count Status)&lt;br /&gt; when(Debug printf(&amp;quot;PseudoName %A PreFix %A Debug %A\n&amp;quot; PseudoName PreFix Debug))&lt;br /&gt; ;; initialize variables&lt;br /&gt; (count = 0)&lt;br /&gt; unless(stringp(PseudoName) (PseudoName = &amp;quot;PSUEDO_TP&amp;quot;))&lt;br /&gt; unless(stringp(PreFix) (PreFix = &amp;quot;_TP&amp;quot;))&lt;br /&gt; when(Debug printf(&amp;quot;PseudoName %A PreFix %A Debug %A\n&amp;quot; PseudoName PreFix Debug))&lt;br /&gt; )&lt;br /&gt;)&lt;/p&gt;
&lt;p&gt;When I run this is Allegro, the Prefix parameter default value of &amp;quot;_TP&amp;quot; is discarded, as shown below:&lt;/p&gt;
&lt;p&gt;\i (00:00:47) skill test_code&lt;br /&gt; (00:00:47) PseudoName &amp;quot;psuedo_tp&amp;quot; PreFix nil Debug t&lt;br /&gt; (00:00:47) PseudoName &amp;quot;psuedo_tp&amp;quot; PreFix &amp;quot;_TP&amp;quot; Debug t&lt;br /&gt; (00:00:47) t&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Has anyone else seen this issue? if so, what is the solution...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How can I encrypt a SKILL file for Allegro products?</title><link>https://community.cadence.com/thread/65366?ContentTypeID=0</link><pubDate>Wed, 22 Oct 2025 07:29:48 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:65f1244a-5735-47ae-9d4f-2acfdc26a6aa</guid><dc:creator>SaiPavanl</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/65366?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65366/how-can-i-encrypt-a-skill-file-for-allegro-products/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;The SKILL files of Allegro X PCB Editor, Allegro X Advanced Package Designer, Allegro Design Entry HDL can be encrypted. Encrypted files are used to conceal the file contents. The *.eil and *.ile file extensions are used for encrypted SKILL files.&lt;/p&gt;
&lt;p&gt;To encrypt a SKILL file on Windows, perform the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open&amp;nbsp;the command prompt.&lt;/li&gt;
&lt;li&gt;Use the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;command to move to the folder where the SKILL file is stored.&lt;/li&gt;
&lt;li&gt;Type&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;cdsmps&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and press the Enter key.&lt;/li&gt;
&lt;li&gt;The prompt will change to &amp;quot;&lt;span&gt;&amp;gt;&lt;/span&gt;&amp;quot;. Here, type the following command to encrypt the SKILL file:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;encrypt( &amp;quot;input_filename&amp;quot; &amp;quot;output_filename&amp;quot; &amp;quot;password&amp;quot;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Where,&lt;br /&gt;&lt;span&gt;input_filename&lt;/span&gt;: The ASCII SKILL file. The extension for the file is .il.&lt;br /&gt;&lt;span&gt;output_filename&lt;/span&gt;: The name of the encrypted file. The extensions allowed are .il, .ile,&amp;nbsp;and .eil. However, because the&amp;nbsp;non-encrypted&amp;nbsp; SKILL files have the extension .il, it is recommended that you&amp;nbsp;avoid using this extension for encrypted files. Use .ile or .eil instead.&lt;br /&gt;&lt;span&gt;password&lt;/span&gt;: The password needed to load the encrypted file. The password is optional.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The example shown in the following image encrypts a&amp;nbsp;SKILL file without a password:&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1761117943227v3.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The following image shows another example in which the SKILL file is encrypted with a password:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:480px;max-width:640px;" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1761118098033v1.png" alt=" " /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Loading a SKILL&amp;nbsp;file&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use the following syntax to load an encrypted SKILL file without a password:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;load(&amp;quot;filename&amp;quot;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Where,&lt;br /&gt;&lt;span&gt;filename&lt;/span&gt;: The&amp;nbsp;encrypted SKILL file name&lt;/p&gt;
&lt;p&gt;The following example shows how to load an encrypted SKILL file without a password:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Skill &amp;gt; load(&amp;quot;./test_npwd.eil&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;To load an encrypted SKILL file with a password, use the following syntax:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;load(&amp;quot;filename&amp;quot; &amp;quot;password&amp;quot;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Where,&lt;br /&gt;&lt;span&gt;filename&lt;/span&gt;: The encrypted SKILL file name&lt;br /&gt;&lt;span&gt;password&lt;/span&gt;: The password supplied when encrypting the SKILL file&lt;/p&gt;
&lt;p&gt;Here is an example of how to load an encrypted SKILL file with a password:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Skill &amp;gt; load(&amp;quot;./test_en.eil&amp;quot; &amp;quot;cadence&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Encrypting a SKILL&amp;nbsp;file on Linux&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To encrypt a SKILL file on Linux, use the following command:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;encrypt( &amp;quot;input_filename&amp;quot; &amp;quot;output_filename&amp;quot; &amp;quot;password&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You encrypt&amp;nbsp;a SKILL file when you do not want users to see the IP contained in the file or modify the program. Encrypted SKILL files can be loaded using the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;load&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;command, but they CANNOT be de-encrypted.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Creating custom toolbar manu item on program startup</title><link>https://community.cadence.com/thread/65214?ContentTypeID=0</link><pubDate>Tue, 16 Sep 2025 16:04:58 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:fddd58d4-26b9-4d65-8904-f94402d19e6b</guid><dc:creator>UsableLoki</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/65214?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65214/creating-custom-toolbar-manu-item-on-program-startup/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I have a program that will create a custom menu toolbar item along with its submenu items.&amp;nbsp; I tried to run this procedure that creates them on startup by placing the run function inside C:\SPB_Data\pcbenv\allegro.ilinit.&amp;nbsp; Through the console I can&amp;nbsp;confirm that my function properly ran and is loaded, but the menu toolbar does not have my custom item.&amp;nbsp; If I rerun the function my menu toolbar will finally be created.&amp;nbsp; I know this can be done as there is another function that we contracted Cadence to build which is also called in the allegro.ilinit, however the file called is encrypted so I can&amp;#39;t see what was done that is different from my attempt.&amp;nbsp; Any help would be great.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Below is relevant snippets of my code.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Content within the .ilinit-&lt;/p&gt;
&lt;p&gt;fileLocation = &amp;quot;S:/.../GUI_Implementation.il&amp;quot;&lt;br /&gt;&amp;nbsp; if(isReadable(fileLocation)&lt;br /&gt;&amp;nbsp; then&lt;br /&gt;&amp;nbsp; load(fileLocation)&lt;br /&gt;&amp;nbsp; refresh_Menu()&lt;br /&gt;&amp;nbsp; else &lt;br /&gt;&amp;nbsp; printf(&amp;quot;Error loading: %s\n&amp;quot; fileLocation)&lt;br /&gt;&amp;nbsp; )&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;file GUI_Implemenatation.il-&lt;/p&gt;
&lt;p&gt;procedure(refresh_Menu()&lt;/p&gt;
&lt;p&gt;axlUIMenuInsert(axlUIMenuFind(nil -1) &amp;#39;popup &amp;quot;CUSTOM-SKILL&amp;quot;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How can I build a popup menu and add a separator line in Allegro SKILL?</title><link>https://community.cadence.com/thread/65173?ContentTypeID=0</link><pubDate>Sun, 07 Sep 2025 23:45:22 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:37faa2ef-5c72-49aa-b6d9-a91bd2bc52b3</guid><dc:creator>JuanCR</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/65173?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65173/how-can-i-build-a-popup-menu-and-add-a-separator-line-in-allegro-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;This article focuses on a specific code snippet (provided below) that demonstrates adding a menu and separator using the Allegro SKILL program.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;(procedure myShowElement ()&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;mypopup = axlUIPopupDefine(nil&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list (list &amp;quot;Done&amp;quot; &amp;#39;axlFinishEnterFun)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list &amp;quot;Cancel&amp;quot; &amp;#39;axlCancelEnterFun)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list &amp;quot;MENU_SEPARATOR&amp;quot; nil)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list &amp;quot;Hello&amp;quot; &amp;#39;hello))&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;axlUIPopupSet(mypopup)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;axlSetFindFilter(?enabled list(&amp;quot;NOALL&amp;quot; &amp;quot;ALLTYPES&amp;quot; &amp;quot;NAMEFORM&amp;quot;) ?onButtons &amp;quot;ALLTYPES&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;while(axlSelect()&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;axlShowObject(axlGetSelSet())&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;))&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;img style="max-height:480px;max-width:640px;" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1757288076856v1.png" alt=" " /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;In Allegro SKILL, the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;axlUIPopupDefine()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;function is used to create and configure popup menus. It specifies name-value pairs to define the menu name and associated actions within the menu.&lt;/p&gt;
&lt;p&gt;For example, the menu item &amp;ldquo;Done&amp;rdquo; is tied with the Allegro SKILL function &amp;ldquo;axlFinishEnterFun&amp;rdquo; and the menu name &amp;ldquo;Hello&amp;rdquo; with the user-defined procedure &amp;quot;hello&amp;quot;, which&amp;nbsp;prints &amp;ldquo;hello&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;mypopup = axlUIPopupDefine(nil&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list (list &amp;quot;Done&amp;quot; &amp;#39;axlFinishEnterFun)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list &amp;quot;Cancel&amp;quot; &amp;#39;axlCancelEnterFun)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list &amp;quot;MENU_SEPARATOR&amp;quot; nil)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list &amp;quot;Hello&amp;quot; &amp;#39;hello))&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j4j8hvap1"&gt;&lt;br /&gt;Action for the Menu items&lt;br /&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;The&amp;nbsp;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;axlFinishEnterFun()&amp;nbsp;&lt;/span&gt;function terminates the waiting process for a user-selected point. It returns either&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;t&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;nil&amp;nbsp;&lt;/span&gt;depending on the success or failure of the user selection. It is like clicking&amp;nbsp;&amp;ldquo;Done&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;axlCancelEnterFun()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;function serves a similar purpose to&amp;nbsp;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;axlFinishEnterFun()&amp;nbsp;&lt;/span&gt;in terminating the waiting process for a user-selected point. It functions as a cancelation action, like clicking the &amp;quot;Cancel&amp;quot; option.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;(procedure hello()&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp; printf(&amp;quot;hello&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j4j8hvap2"&gt;&lt;br /&gt;Showing the Context Menu&lt;/h3&gt;
&lt;h3 id="mcetoc_1j4j8hvap3"&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;To make a specific popup menu active, the returned identifier from&amp;nbsp;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;axlUIPopupDefine&lt;/span&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;()&lt;/span&gt; is passed to the&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;axlUIPopupSet&lt;/span&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;()&lt;/span&gt; function.&amp;nbsp;This ensures that the menu is displayed and ready for user interaction.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="mcetoc_1j4j8hvap4"&gt;Adding a Separator in the Context-Sensitive Menu&lt;br /&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;A separator in GUI visually divides menu items and improves the overall readability and organization of the menu.&lt;/p&gt;
&lt;p&gt;To add a separator to the popup menu, you must include a particular menu item called &amp;quot;MENU_SEPARATOR&amp;quot; in the list of menu items in the&amp;nbsp;&lt;span&gt;axlUIPopupDefine&lt;/span&gt;&amp;nbsp;&lt;span&gt;fu&lt;/span&gt;&lt;span&gt;nct&lt;/span&gt;&lt;span&gt;ion,&amp;nbsp;&lt;/span&gt;as shown below.&lt;/p&gt;
&lt;p&gt;In the&amp;nbsp;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;axlUIPopupDefine()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;function, a sublist is created with the label &amp;quot;MENU_SEPARATOR&amp;quot; and a `nil` value. This label is recognized to add a separator in the popup menu. The `nil` value is used as a placeholder since no action is associated with the separator.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;mypopup = axlUIPopupDefine(nil&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list (list &amp;quot;Done&amp;quot; &amp;#39;axlFinishEnterFun)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list &amp;quot;Cancel&amp;quot; &amp;#39;axlCancelEnterFun)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list &amp;quot;MENU_SEPARATOR&amp;quot; nil)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;(list &amp;quot;Hello&amp;quot; &amp;#39;hello))&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;When the popup menu is displayed, Allegro SKILL interprets the &amp;quot;MENU_SEPARATOR&amp;quot; item and visually separates it from the other menu items with a horizontal line.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The provided code demonstrates creating the menu item and including a separator in a popup menu using the Allegro SKILL language. By understanding this concept, developers can enhance the user experience of their GUI applications by making menus more intuitive and visually appealing.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Trouble With Layer Name Pair</title><link>https://community.cadence.com/thread/65131?ContentTypeID=0</link><pubDate>Wed, 27 Aug 2025 17:42:25 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:123a584c-afcf-4ce1-aebf-c81bb6545a32</guid><dc:creator>MarkGorecki</dc:creator><slash:comments>3</slash:comments><comments>https://community.cadence.com/thread/65131?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/65131/trouble-with-layer-name-pair/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I&amp;#39;m using Cadence Allegro 24.1 and I&amp;#39;m trying to check if the layer &amp;quot;Package_Top&amp;quot; is visible and if not, make it visible.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/Package_5F00_Top_5F00_Layer.png" /&gt;&lt;/p&gt;
&lt;p&gt;Neither of these commands work:&lt;/p&gt;
&lt;p&gt;if(not(axlIsVisibleLayer(&amp;quot;STACK-UP/PACKAGE_TOP&amp;quot;)) then&lt;/p&gt;
&lt;p&gt;&lt;span&gt;if(not(axlIsVisibleLayer(&amp;quot;NON-CONDUCTOR/PACKAGE_TOP&amp;quot;)) then&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I get this:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;*WARNING* Layer does not exist: STACK-UP/PACKAGE_TOP&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;*WARNING* Layer does not exist: NON-CONDUCTOR/PACKAGE_TOP&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;If I use just &amp;quot;PACKAGE_TOP&amp;quot;, then I get:&amp;nbsp;*WARNING* Layer does not exist: PACKAGE_TOP&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Does anyone know the layer pair, or just the layer name that I would use?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thanks,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Mark&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>