• 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. Custom IC SKILL
  3. How to use terminal Command in cadence CIW?

Stats

  • Replies 9
  • Subscribers 144
  • Views 1202
  • Members are here 0

How to use terminal Command in cadence CIW?

Nagarajpk
Nagarajpk 26 days ago

I need skill code to run terminal commands in CIW and use it in skill code further as skill variable. Could someone help me on this?

  • Sign in to reply
  • Cancel
  • Andrew Beckett
    Andrew Beckett 26 days ago

    Probably ipcBeginProcess and then ipcReadProcess is what you need, but your question is far from clear.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Nagarajpk
    Nagarajpk 26 days ago in reply to Andrew Beckett

    I was trying to get screen size in CIW to set by default window sizes using skill. But, in CIW I am not getting exact screen size I mean it is including control panel and all other to the screen size. is there any function it excludes control panel and give available screen size to use?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Andrew Beckett
    Andrew Beckett 26 days ago in reply to Nagarajpk

    Well, hiGetMaxScreenCoords() will report the display size, but finding how much of the display is usable will almost certainly be dependent upon the window manager - I don't know of a way of getting that even from the command line (which works for all window managers)

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • henker
    henker 25 days ago in reply to Andrew Beckett

    xprop -root _NET_WORKAREA

    Should work on the major window managers, the only one that I know, which does not support this, is olvwm but there the screen size is identical to the usable work area.
    From the returned numbers, the first two are the x and y coordinates of the top left of the usable space, and the next two are width and height.

    Regards,

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Andrew Beckett
    Andrew Beckett 25 days ago in reply to henker

    Interestingly, hiGetMaxScreenCoords() returns a smaller height for me than the xprop output, which is smaller than the actual screen resolution (shown in xdpyinfo). Placing a window doesn't place it exactly where you asked it to be anyway - the window manager I'm using (an RHEL9-based Gnome manager) also does things like maximises the window if it's big enough (even if smaller than the actual maximum), so you are somewhat at the mercy of whatever policy the window manager is using to determine placement.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • RK56
    RK56 25 days ago in reply to Andrew Beckett

    Slightly off topic:

    I have noticed hiGetMaxScreenCoords() preserves the dimensions when the Virtuoso is invoked for first time and later it does not update the values. I noticed this when I invoke new Virtuoso in a smaller screen machine like laptop and then connect to a larger monitor, the hiGetMaxScreenCoords() returns the laptop screen coordinates.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Andrew Beckett
    Andrew Beckett 24 days ago in reply to RK56
    RK56 said:
    I have noticed hiGetMaxScreenCoords() preserves the dimensions when the Virtuoso is invoked for first time and later it does not update the values. I noticed this when I invoke new Virtuoso in a smaller screen machine like laptop and then connect to a larger monitor, the hiGetMaxScreenCoords() returns the laptop screen coordinates.

    This has been this way as long as I can remember, but strangely enough I only found a relatively recent Cadence Change Request on this - CCR #2694574 . I vaguely recall talking with the R&D developer in the HI team about this in the past, but can't remember what he said... (and this CCR was filed after he retired). Anyway, you might want to contact customer support to get a duplicate filed on your behalf.

    Note that hiGetMaxScreenCoords (having read up a bit) is supposed to give the maximum window size taking into account non-usable parts of the screen. There's hiGetScreenSize which returns the overall screen size in both pixels and millimetres. hiGetMaxScreenCoords also takes an optional argument (which can be set to t) which gives the overall size if you have multiple screens and also excludes some of the non-usable area.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • RK56
    RK56 24 days ago in reply to Andrew Beckett

    Thanks for the info Andrew. I will file a CCR sooner

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Nagarajpk
    Nagarajpk 17 days ago in reply to Andrew Beckett

    Instead of getting available work area I can exclude control panel height and set that to any layout/schematic window to left or right.

    Here is my code, let me know if you have any feedback Slight smile

    (procedure (arrangeWindowLeftSide)
    let( (cid output x y width height)

    ;reading outs from shell
    cid = ipcBeginProcess("wmctrl -lG | grep xfce4-panel | tr -s ' ' | cut -d' ' -f3-6")
    ipcWait(cid)
    output = ipcReadProcess(cid)
    when(output
    ; Split the output string into a list of numbers
    prog((vals)
    vals = parseString(output)

    x = atoi(nth(0 vals))
    y = atoi(nth(1 vals))
    width = atoi(nth(2 vals))
    height = atoi(nth(3 vals))

    ;Here used all geometry but I needed hight of panel you can use it whichever you want

    printf( "Panel Geometry: X=%d Y=%d Width=%d Height=%d \n" x y width height)
    )
    )
    W=car(getMaxScreenCoords())
    H=cadr(getMaxScreenCoords())
    HW=W/2

    winId=hiGetCurrentWindow()
    hiResizeWindow(winId list(0:height HW:H))
    hiZoomAbsoluteScale(winId 0.9)
    )
    );proc end

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel

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