• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Allegro X PCB Editor
  3. Skill to run multiple script (.scr) or multiple skill f...

Stats

  • Replies 8
  • Subscribers 159
  • Views 18837
  • Members are here 0
More Content

Skill to run multiple script (.scr) or multiple skill files

EdwinB
EdwinB over 7 years ago

Hi,

Is there a way to run several script files as Skill or one skill file to run multiple skill files?

If so, how do you do this?

Currently, I'm running two skill files as a script file but would prefer to use one skill file to run multiple skill files or one skill file to run multiple script files.

Thanks,

Eddie

  • Sign in to reply
  • Cancel
  • eDave
    eDave over 7 years ago

    The simple answer is yes.

    You generally don't run Skill "files" you call functions contained in files.

    So long as the Skill file is loaded using load or autoload you can run as many functions (or procedures) as you like.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • EdwinB
    EdwinB over 7 years ago

    Hi Dave,

    Thanks for the quick reply. Got it - call functions - was the correct wording.

    How do you implement this?

    For example I have this two skill files that I need to call:

    ref_des.il

    textblk.il

    How do you call the functions contained in these two files?

    Thanks,

    Edwin 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • eDave
    eDave over 7 years ago
    Like I said - you don't generally call files. You load them.

    So, in one Skill file you can have the lines:
    load("ref_des.il)
    load("textblk.il")

    I don't know what your function names are but you would generally then call the functions:
    ref_des_function()
    textblk_function()
    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • EdwinB
    EdwinB over 7 years ago

    Hi Dave,

    I got the other il to work, but somehow this set_redes.il that I found in the forum doesn't work. Modified the print portion only.

    The "function" callout comes out 'undefined'. Will you be able to check which function to use?

    gives this error > E- *Error* eval: undefined function - srd

    Thanks for the help

    Code:

    ;
    axlCmdRegister("srd" '_set_refdes_from_file ?cmdType "general")
    procedure( _set_refdes_from_file( mode )
    prog( list(l_text refdes t_loc t_rot t_mirror t_justify t_layer l_vis l_old_loc mir rot)
    l_old_loc=list()

    case(mode
    ("save" ;save the current refdes text information to a file
    printf("Mode:save\n")
    ; printf("Saving refdes data to file refdes.txt\n")
    printf("Saving refdes data to file Harbor_Silk_RefDes.rpt. Check your working folder. \n")
    p_refdes=outfile("./Harbor_Silk_RefDes.rpt") ;open a file to store the data
    ; p_refdes=outfile("./Harbor_Silk_RefDes.txt") ;open a file to store the data
    axlClearSelSet() ;clear any selected objects
    axlSetFindFilter(?enabled '(noall text) ?onButtons '(text))
    l_vis=axlVisibleGet() ;Store the current layer visibility
    axlVisibleDesign(nil) ;Set the visibility as desired.
    axlVisibleLayer("REF DES/SILKSCREEN_TOP" t )
    axlVisibleLayer("REF DES/SILKSCREEN_BOTTOM" t )
    axlUIWUpdate(nil)
    axlAddSelectAll() ;Select all of the visible text
    l_text=axlGetSelSet() ;Save the selected text in a list
    axlClearSelSet()
    foreach(text l_text ;Check each text string
    parent_type = text->parent->objType
    text_class = car(parseString(text->layer "/"))
    if(parent_type == "symbol" && text_class=="REF DES" then
    ;probably found a refdes. Store the text details
    refdes=text->text
    t_loc=text->xy
    t_rot=text->rotation
    t_mirror=text->isMirrored
    t_layer=text->layer
    t_textblock=text->textBlock
    t_justify = text->justify
    ;write the data to a file
    println(list(refdes t_loc t_layer t_rot t_mirror t_textblock) p_refdes)
    );endif
    );end foreach refdes
    close(p_refdes) ;close the file
    axlVisibleSet(l_vis)
    axlUIWUpdate(nil)
    printf("Harbor_Silk_RefDes.rpt file save completed.Check your Working directory folder\n")
    );save
    ("get" ;Read the file and process the text
    printf("Mode:get\n")
    l_visible=axlVisibleGet() ;store current visibility settings.
    axlVisibleDesign(nil) ;turn everything invisible
    axlVisibleLayer("REF DES/SILKSCREEN_TOP" t )
    axlVisibleLayer("REF DES/SILKSCREEN_BOTTOM" t )
    p_refdes=infile("./refdes.rpt")
    while(l_refdes=car(lineread(p_refdes))
    refdes=nth(0 l_refdes)
    loc=nth(1 l_refdes)
    layer=nth(2 l_refdes)
    new_rot=nth(3 l_refdes)
    new_mir=nth(4 l_refdes)
    new_tblock=nth(5 l_refdes)
    new_justify=nth(6 l_refdes)
    l_old_loc = _find_refdes(refdes layer) ;call procedure to find the original text
    old_xy = nth(1 l_old_loc) ;current coordinates of refdes
    old_rot = nth(0 l_old_loc)->rotation ;current refdes rotation
    old_mir = nth(0 l_old_loc)->isMirrored ;current mirror status
    old_tblock=nth(0 l_old_loc)->textBlock ;current text block used
    o_component=nth(0 l_old_loc)->parent ;need the parent if creating new text
    when(old_xy ;if there is an xy then we found the text and can do a transform
    if(old_tblock==new_tblock then ;if the same text block then do a transform
    delta_x=xCoord(loc) - xCoord(old_xy) ;calculate the x offset
    delta_y=yCoord(loc) - yCoord(old_xy) ;calculate the y offset
    l_delta=list(delta_x delta_y) ;distance to move the text
    rot=new_rot-old_rot ;calculate the rotation
    mir=(new_mir && !old_mir)||(!new_mir && old_mir) ;mirror is XOR
    axlTransformObject(car(l_old_loc) ?move l_delta ?mirror mir ?angle rot) ;move the text
    else
    ;if textblocks don't match then create a new refdes.
    new_orient=make_axlTextOrientation(?textBlock new_tblock, ?rotation new_rot, ?mirrored new_mir, ?justify new_justify )
    new_refdes=axlDBCreateText(refdes, loc, new_orient, layer, o_component)
    if(new_refdes then ;if new refdes successful then delete old one.
    axlClearSelSet()
    axlSetFindFilter(?enabled '(noall text) ?onButtons '(text))
    axlSingleSelectPoint(old_xy)
    axlDeleteObject(axlGetSelSet())
    axlClearSelSet()
    );end_if
    );end_if
    );end_when
    );end while
    close(p_refdes)
    axlVisibleSet(l_visible) ;restore layer visibility.
    printf("Process complete.\n")
    );get
    (t
    printf("Invalid command line argument.\n")
    printf("Command syntax: srd save or srd get \n")
    return(nil)
    )
    );endcase
    );endprog
    );endproc

    procedure( _find_refdes(sym tlayer)
    ;procedure to return the dbid and location of the refdes for the symbol
    prog( list(child l_children o_type o_layer match_loc)
    l_children = car(axlSelectByName("REFDES" sym))->children
    foreach(child l_children
    o_type = child->objType
    o_layer = child->layer
    if(o_type=="text" && o_layer==tlayer then
    ;probably found a refdes match.
    match_loc=child->xy
    axlClearSelSet()
    return(list(child match_loc)) ;return the dbid and location of the text
    ;if match_loc returns as nil then the text was not found
    );endif

    );foreach child
    );end prog
    );end proc _find_refdes

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • eDave
    eDave over 7 years ago
    type "srd" in the Allegro console window. Not the Skill window.
    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
>
Cadence Guidelines

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information