• 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. How to use setVarWriteProtect to protect a defstruct variable...

Stats

  • Replies 13
  • Subscribers 160
  • Views 16578
  • Members are here 0
More Content

How to use setVarWriteProtect to protect a defstruct variable?

Angeila
Angeila over 13 years ago

Hi Expert,

 I use defstruct to define a struct variable. For example:

 defstruct(mystruct aaa bbb)

 s1 = make_mystruct(?aaa 1 ?bbb 2)

 then I use setVarWriteProtect to make s1 write protected:

 setVarWriteProtect('s1)

 But when I change s1->aaa = 5, it still can be modified. Seems only s1 is write protected, but no its member variables.

 How to write protect the member variable s1->aaa? Is there anyway to do it in Skill if not by function setVarWriteProtect?

 Regards,

Angelia

  • Sign in to reply
  • Cancel
  • Angeila
    Angeila over 13 years ago
    eDave said:

    Generally variables should be set to be local by including them in a let statement. Local variables cannot be changed by users.

    You may have to re-think your code if you want to protect the contents of a global variable. The documentation states that the behavior of this is not specified.

    Hi Dave,

      Thanks! Actually that is not a global variable, it(the defstruct variable) is passed as a function parameter.  it might be Skill limitation to write protect a defstruct variable. Not sure...

      Anyway, I will think about other way to protect it.

      Another interesting phenomena I found is that a local variable defined in parent function is visible in its child function.

      Please look at following example, cellName is visible in function testCell(), it can be printed out as "abc" when call function mytest().

      It behaves differently compared with that of C language, and other script language, like Tcl.  Is there any special purpose for SKILL to do so?

     procedure( mytest()
      prog( (cellName)
        cellName = "abc"
        testCell()
      )
    )
    procedure( testCell()
      prog( ()
        printf("cell name is %s ...\n" cellName)
      )
    )

    Thanks,

    Angelia 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • eDave
    eDave over 13 years ago

    Hi Angelia,

    Yes, I had noticed that behaviour - sometimes it's useful, but I think it's bad practice use it deliberately.

    Dave 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • balu soutani
    balu soutani over 10 years ago

    Hi ,

    I use defstruct to define a variable

    defstruct(var1 label msg)

    If I Recall The Function Its Giving Warning

    *WARNING* defstruct: Redefining Structure var1.

    can u help me how to resolve.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • eDave
    eDave over 10 years ago
    This is just a warning. You can ignore it or check for the structure (using boundp) before defining it within a session.
    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • balu soutani
    balu soutani over 10 years ago

    Hi eDave,


    boundp isn't working .

    I will give u a simple example script

    Input File (test.txt):

    M2 width=0.34um length=0.5um
    M3 width=0.34um length=0.5um

    script:

    procedure(mytest(fileName)
          prog( ()
              inFile = infile(fileName)
              defstruct(struct width length) ; giving warning here
              setq(tabel (makeTable 'layers 0))
              while(gets(line inFile)
                  lineInList = parseString(line " \n")
                  tabel[nth(0 lineInList)] = make_struct(?width nth(1 parseString(nth(1 lineInList) "=")) ?length nth(1 parseString(nth(2 lineInList) "=")))
                   )
              )
         )
    mytest("./test.txt")

    = So where I need to check.


    thanks,

    Balu Soutani.

    • 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