Quantcast
Channel: Cadence Custom IC Skill Forum
Viewing all 5068 articles
Browse latest View live

SKILL code to traverse the hierarchy of cellviews in schematic

$
0
0

Hi there,

I have been stuck for quite sometime with a requirement, to access the parameter values of each instance (MOS, RES, CAP, VDC...) in a design which has instances of many other cell view, hence creating a hierarchy (These sub-cell views translate to subcircuits in the netlist) .

What I want is, to be able to access recurisively each instance in the design and be able to change the 'w's and 'l' etc. from the top cell view.

As a starting point I have collected some information and coded the following:

currentSession=asiGetSession(hiGetCurrentWindow())

topCellView=asiGetTopCellView(currentSession)

Now where to head next? Can anyone suggest?

Thanks and Regards,

Atul 


SKILL code to parameterize a property(e.g. w,l) of an instance in schematic which reflects in the netlist

$
0
0

Hi all,

As the subject suggests, I want to insert parameters in a design to run further analisis (with the netlist). For the ease of the user, it is more instructive to somehow insert the parameters at the schematic level and get those parameters in the netlist ((IC6.1.5.500.132).  

I have done the following progress till now :

selectedObject=geGetSelSet()

selectedObject~>w="1.00*param1" ;;;;1.00 is mandatory scaling factor

However, this approach is not always working. While doing "check and save", I do get many errors of some parameters getting out of range (not the ones I have perturbed). Can anyone else suggest a more elegant and safe approach? 

Regards,
Atul 

Pattern matching

$
0
0

 Hello all,

I have a small query on pattern matching . Actually I am trying to search for the data in between two keywords say "REVA" and "REVB" from the userdefined input data (assumed that the keywords "REVA" , "REVB ... are always present in the input data without duplicates or repetitions) . Is there a way that I search the user defined input data  for two keywords "REVA" and "REVB" and what ever the data inbetween this two words has to be dumped in to a variable REVA , similarly whatever the data that is present in between "REVB" and "REVC" to REVB field  etc , ineffective I am seperating the respective revision data to their corresponding fields from the given input data.

May be the following ex gives more info:

;Skill starts here 

 procedure(testpattern()
inputdata = "REVA: This Text belongs to revision A \n REVB: This Text belongs \n to revision B. REVC: This \n Text belongs to revision C"
input = hiCreateMLTextField(?name 'input ?prompt "INPUT" ?value inputdata  ?hasVerticalScrollbar nil ?hasHorizontalScrollbar nil)
REVA = hiCreateMLTextField(?name 'REVA ?prompt "REVA" ?value ""  ?hasVerticalScrollbar nil ?hasHorizontalScrollbar nil)
REVB = hiCreateMLTextField(?name 'REVB ?prompt "REVB" ?value ""  ?hasVerticalScrollbar nil ?hasHorizontalScrollbar nil)
REVC = hiCreateMLTextField(?name 'REVC ?prompt "REVC" ?value ""  ?hasVerticalScrollbar nil ?hasHorizontalScrollbar nil)
fillform=hiCreateButton(?name 'fillform ?buttonText "Fill Form" ?callback "fillform()")
testform = hiCreateAppForm(
     ?name 'testform
     ?formTitle "Pattern Matching"
     ?fields list(
                    list(input  15:15  400:70 50)
                    list(REVA  15:100  400:20 50)
                    list(REVB  15:150  400:20 50)
                    list(REVC  15:200  400:20 50)
                    list(fillform  15:260  100:30 50))

?initialSize t
)
hiDisplayForm(testform)
)

 ; ends here 

 

Now what I require is the fillform() function must put the data say " This Text belongs to revision A" in to REVA field by searching the input data. Similarly for other fields "REVB" "REVC".

I have tried using rexMatchp() and other pattern matching functions but the return value is always a t or nil but not the data.

Is there a way to achieve this.

Thank you very much in advance for your time.

 

Best regards,

Sri. 

Error while using 'asiAddAnalysis' function

$
0
0

 I wrote the following SKILL code in "XYZ.il"

procedure(xyz() asiAddAnalysis( 'analog

?name 'XYZ ?

prompt "XYZ" ?fieldList list( asiCreateAnalysisField( ?name 'from ?prompt "from" ?value "0" ?row 1 ?column 1 )

asiCreateAnalysisField( ?name 'to ?prompt "to" ?row 1 ?column 2) asiCreateAnalysisField( ?name 'by ?prompt "by" ?row 1 ?column 3) ) ?optionList list( asiCreateAnalysisOption( ?name 'XYZ1 ?value "1e-4" ) asiCreateAnalysisOption( ?name 'XYZ2 ?value "1e-6" ) ) ) )

 

 

when I load and run the procedure 'xyz()' from CIW window i get the fllowing error :

*Error* (Default-reader-method) generic:asiGetName class:symbol

when i run 'xyz()' from skill prompt i get :

*Error* eval: undefined function - asiAddAnalysis

 

 The CDS log says that analog.cxt and oasis.cxt did get loaded.

How to add section in my .cdsenv

$
0
0
I would like to select a default option for corner options to tt (typical typical) and to make my model files simpler and easier to understand I have written the following in my .cdsenv:

spectre.envOpts    modelFiles   string  "design.scs allModels.scs"

spectre.envOpts    includePath  string            "/home/grps/ef-test/IBM8HP/IBM_PDK/bicmos8hp/V1.4.1.2HP/Spectre/models"

How do I include the section in .cdsenv? Currently, I choose the section tt in ADEXL design setup every time I run a simulation.

Thanks

Error when creating newlibrary

$
0
0

 

Normal 0 false false false EN-US X-NONE X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:8.0pt; mso-para-margin-left:0in; line-height:107%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;}

 

Unable to create library “Name” dd CreateLib: newly created library not found using normal search rules perhaps “.” Isn’t the first entry ‘in force’ setup.loc file(?)

Every time I try to create a new library under IBM PDK menus  --à library àcreate -à in New Library window I put the name of the new library and attach it to the existing technology file, I get an error message saying:

Unable to create library “Name” dd CreateLib: newly created library not found using normal search rules perhaps “.” Isn’t the first entry ‘in force’ setup.loc file(?)

How do I fix it.

 

Making 'reload' work on custom expressions in plot window

$
0
0

 I created a form to help plot analog waveforms as busses in the plot (Visualization) window. When I reload it after a new simulation, I get a warning and an error:

*WARNING* Symbol(s) named " 'expr_19' " used in the definition of dependent expression  'expr_19'
 have not been defined as expressions. This may result in evaluation errors or ambiguous values for the dependent expression.
 Either add these symbol(s) as BLOCKED EXPRESSION in the Outputs or remove them from the definition of the dependent expression.

expression evaluation failed: val is not legal.
expression evaluation failed: val is not legal.
"(\"eval\" 0 t nil (\"*Error* eval: unbound variable\" expr_19))"

Do I need to make this a calculator function for it to reload?

Here's the code:

*******************************************************************************************
; 5/14/2013 T. Spargo
;
; Form for the tasCreateBus procedure.
; Takes analog waveforms and creates a bus out of them.
;

hiCreateAppForm(
 ?name 'tasCreateBusForm
 ?formTitle "Create Bus"
 ?callback "tasCreateBusCB()"
 ?fields list(
  list(hiCreateStringField(
   ?name 'busName
   ?prompt "Bus name"
   ?value "")
   0:10 250:30 110
  )
  list(hiCreateButton(
   ?name 'selectNet
   ?callback "tasCreateButtonCB()"
   ?buttonText "Select bus")
   260:10 70:30 110
  )
  list(hiCreateStringField(
   ?name 'plotName
   ?prompt "Plot name"
   ?value "")
   0:50 300:30 110
  )
  list(hiCreateIntField(
   ?name 'bitStart
   ?prompt "First bit"
   ?value 7)
   0:90 150:30 110
  )
  list(hiCreateIntField(
   ?name 'bitEnd
   ?prompt "Last bit"
   ?value 0)
   0:130 150:30 110
  )
  list(hiCreateFloatField(
   ?name 'vt
   ?prompt "Threshold voltage"
   ?value 2.38)
   0:170 200:30 110
  )
  list(hiCreateRadioField(
   ?name 'radix
   ?prompt "Radix to use"
   ?value "Hex"
   ?choices '("Binary" "Octal" "Hex" "Decimal") )
   0:210 320:30 110
  )
 )
; tasCreateBusForm->busName->hiToolTip = "Name of the net or bus"
)

;
; tasName2BusList.il
;
; Given a wire name, bit range, and Vt, it creates a list of digital
; signals that can be passed to awvCreateBus.
;
; tasName2BusList("/I0/DQ_buff" 63 32 2.38)

procedure( tasName2BusList(name upperBit lowerBit Vt)
 let( (bit n2BL bitStr nameStr a2D inst)
 n2BL = list()
 inst = geGetInstHier()
 for( bit lowerBit upperBit
  bitStr = sprintf(nil "%d" bit)
  nameStr = strcat(inst "/" name "<" bitStr ">")
  if( debug printf("tasName2BusList: nameStr = %s\n" nameStr) )
  a2D = awvAnalog2Digital(VT( nameStr) nil nil  Vt  1 "centre")
  if( debug printf("tasName2BusList: a2D = %L\n" a2D))
  n2BL = cons(a2D n2BL)
 )
 n2BL
 )
)

; Create a bus from analog bits.
procedure( tasCreateBusCB()
 let( (winNum busName plotName upperBit lowerBit Vt radix wvBus)
 busName = tasCreateBusForm->busName->value
 plotName= tasCreateBusForm->plotName->value
 upperBit = tasCreateBusForm->bitStart->value
 lowerBit= tasCreateBusForm->bitEnd->value
 Vt = tasCreateBusForm->vt->value
 radix = tasCreateBusForm->radix->value
 if( errset(tasName2BusList(busName upperBit lowerBit Vt)) then
  wvBus = awvCreateBus( plotName tasName2BusList(busName upperBit lowerBit Vt) radix )
 else
  wvBus = awvCreateBus( plotName busName radix )
 )
; wvBus = awvCreateBus( plotName tasName2BusList(busName upperBit lowerBit Vt) radix )
 awvPlotWaveform(awvGetCurrentWindow() list(wvBus))
 )
)

; Click on a net to select it
procedure( tasCreateButtonCB()
 let( (obj netName)
 geSingleSelectPoint()
 obj = geGetSelectedSet()
 if( debug printf("tasCreateButtonCB: obj = %L\n" obj))
 type = car(obj~>objType)
 if( and(type != "path" type != "line") then
  printf("Not a wire, objType = %L\n" obj~>objType)
 else
  netName = car(obj~>net~>name)
  if( debug printf("tasCreateButtonCB: netName = %s\n" netName))
  netName = car(parseString(netName, "<"))
  tasCreateBusForm->busName->value = netName
 )
 )
)
 
debug=t
hiDisplayForm( tasCreateBusForm)
********************************************************************************************

I'm using IC6.1.5-64b.500.12 and simulating in ams (irun64: 12.20-s010).

 

Tom

 

p5vonly” and “phires” errors generated when using tier XL and GXL ADE

$
0
0
Is there any toolfix for “p5vonly” and “phires” errors generated when using tier XL and GXL ADE. These global design variables will get set to either 0 or 1 depending on device restriction.

Thank you in advance.

Filter Path from Selected set of shapes

$
0
0

Hei,

Is there a command to filter paths from a selected set of shapes.

Thanks in advance.

Ajesh 

How to pass a value to a pre-processor macro in a VerilogA view from CDF ?

$
0
0

Hello,

I've written a nicely scaleable VerilogA module using multi-line busses for the ports and internal 'FOR' loops all parameterized with a pre-processor macro to set the number of ports. The code works nicely, I can set the macro to arbitrary positive values and the module compiles and runs fine.

 However, at the moment, I can only set the macro by edding some VerilogA code. Ideally, I would like to define the number of ports as a CDF parameter and pass it down to my module. But as a pre-processor variable is not a standard module parameter, I was not able to find instructions on how to set it from the CDF... Can this be done ?

I have the impression that a good way would be to create a PCell that generates VerilogA views on the fly. Is that possible ? I have already played extensively with PCells generating schematics and symbols -- what about text views or VerilogA ? It seems it is not a support view type in the pcDefinePCell() arguments list...
In this fashion each submaster would define a unique module (the nbr of ports would be in the list of formal parameters) which would come in very handy to manage varoius instances of my module with different port numbers...

I did not try this out yet -- would like to understand if that is feasible...

 Thanks.

Opening Pcell while hierarchically browsing a Master Layout

$
0
0

Hi,

I have a master layout and with various levels of heirarchy. My aim is to find and draw boxes around shapes belonging to a particular layer.

The problem comes in when I come across an instance which is a pcell while I am traversing through the hierarchy.

If I try to openthe instance using dbOpenCellViewByType(), it obviously opens with the default parameters and the purpose is lost.

I intend to do some processing on pcell layout with the instantiated parameters "without flatenning" the layout.

Regards,

Abhishek

skill function to create config view automatically with a specified template

$
0
0

Hello experts

i am wondering if you have a skill function to create a config view automatically with a specified template .. also, i want it to set a particular cell/instance to a specfied view and change the inherited view list for that cell/instance. this is for OA OSS flow

i did a search found a relevant post/procedure CCSCreateConfigWithSpectreTemplate. i tried it, however, the template pops up is empty .. so not sure if that one actually works or i did something wrong

 i am new to skill, would really appreciate your advices on this

 thank you so much

tea

 

 

How can I flatten a certain list of pcell when GDS stream-out?

$
0
0

Hi, 

The stream-out options have flattening of pcell but it applies to all pcell.

Anyway I can set a certain list of pcell to flatten?

 Thanks.

Skill command to check to an instance of pcell got PcellEvalFailed.

$
0
0

Hi,

I searched the Cadence Manual but I can't find the right command/solution to check if a pcell instance got PcellEvalFailed.

Please help.

batch launch of ocean -restore script.ocn & issue with the netlisting (input.scs, amap/ ?)

$
0
0

 

Hello !!

 

I am launching a script .ocn to do some spectre simulation : qs ocean -restore script.ocn in which I have written (xxx to remove the real names...):

 

script.ocn :

 

simulator( 'spectre )

design("xxx/netlist")

resultsDir( "xxx/results/" )

 

stimulusFile( ?xlate nil

    "xxx/_graphical_stimuli.scs")

analysis('tran ?stop "100n" )

desVar( "wn1" 100n "ln1" 10n "wn2" 80n "ln2" 30n ... "nmos_tran_model_vth" "nsvtlp" ...)

definitionFile( ".../models.scs" )

temp( 200)

converge( 'ic "out_b" 0 )

converge( 'ic "out" 1.1 )

envOption(

'analysisOrder  list("tran") 

)

 

save( 'v "out" "out_b" ... "vss" "vri" "vli" )

 

run()

 

 

In the same directory, containing the above script, I have :

corners.scs                  hiddenOptions.scs            models.scs                   results/

_graphical_stimuli.scs       importNetlist.scs            script.ocn             setupCornersIncludeFile.scs netlist

 

The netlist content :

 

// Library name: xxx

// Cell name: inv

// View name: schematic

subckt inv A1 YN vdd vnw vpw vss

parameters wp=xxx lp=xxx pfolds=1 wn=xxx ln=xxx nfolds=1

M5 (YN A1 vdd vnw) pmos_tran_model_vth w=wp*10e5 l=lp*10e5 nfing=pfolds mult=1 \

        srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1

M2 (YN A1 vss vpw) nmos_tran_model_vth w=wn*10e5 l=ln*10e5 nfing=nfolds mult=1 \

        srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1

ends inv

// End of subcircuit definition.

 

// Library name: xxx

// Cell name: ncx

// View name: schematic

subckt ncx ncx

ends ncx

// End of subcircuit definition.

 

// Library name: Test

// Cell name: xxx

// View name: schematic

Rleft (vli saout_b) resistor r=Rleft

M2 (out saeqi saout_b vpw) nmos_tran_model_vth w=wn1 l=ln1 nfing=1 mult=1 \

        srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1

...

M0 (out net07 vss vpw) nmos_tran_model_vth w=wndiff l=lndiff nfing=1 mult=1 \

        srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1

M4 (vli saeni vdd vnw) pmos_tran_model_vth w=wpen l=lpen nfing=1 mult=1 srcefirst=1 \

        mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1

M3 (vri saeni vdd vnw) pmos_tran_model_vth w=wpen l=lpen nfing=1 mult=1 srcefirst=1 \

        mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1

I1 (out_b net08 vdd vnw vpw vss) inv wp=xxx lp=xxx pfolds=1 wn=xxx \

        ln=xxx nfolds=1

...

V0 (net07 aout_b) vsource dc=xxx type=dc

...

I2 (net09) ncx

 

 

I cannot succeed in launching without any error the simulation :

 

log :

 

...

Simulating `input.scs' on clusts04 at 4:05:12 PM (process id:

        13569).

 

Notice from spectre in `ncx', during circuit read-in.

    "input.scs" 29: Subcircuit 'ncx' is empty.

 

 

Time for NDB Parsing: CPU = 761.883 ms, elapsed = 1.48527 s.

Time accumulated: CPU = 761.883 ms, elapsed = 1.48527 s.

Peak resident memory used = 30 Mbytes.

 

 

Error found by spectre during hierarchy flattening.

    ERROR (SFE-23): "input.scs" 37: M2 is an instance of an undefined model

        nsvtlp.

    ERROR (SFE-23): "input.scs" 39: M1 is an instance of an undefined model

        nsvtlp.

    ERROR (SFE-23): "input.scs" 41: M0 is an instance of an undefined model

        nsvtlp.

    ERROR (SFE-23): "input.scs" 43: M4 is an instance of an undefined model

        psvtlp.

    ERROR (SFE-23): "input.scs" 45: M3 is an instance of an undefined model

        psvtlp.

Error found by spectre in `inv':`I1', during hierarchy flattening.

    ERROR (SFE-23): "input.scs" 18: I1.M5 is an instance of an undefined model

        psvtlp.

    ERROR (SFE-23): "input.scs" 20: I1.M2 is an instance of an undefined model

        nsvtlp.

Error found by spectre in `inv':`I0', during hierarchy flattening.

    ERROR (SFE-23): "input.scs" 18: I0.M5 is an instance of an undefined model

 

 

I would like to be able to launch sucessfully the simulation without any amap/ directory. To do it, I have tried to remove in the script.ocn, the "/" from /out for example.

I don't undertsand why I should, mandatory, use an input.scs file, and once the command launched, I don't have any input.scs file created.

 

Do you think this is possible ?

 

Thanks a lot !!

 

Pete

 

 


How to import large verilog netlist into cadence schematic?

$
0
0

The verilog netlist contains more than 40 thousands component. When I import the netlist into cadence, it gives me an error of "Illegal bus reference - Can't tap "Neta" from "Netb".". I looked through the generated schematic, it messed up Neta and Netb.  I cheked the Schematic Generation Options befoe importing the netlist again. The Maximum number of Rows/columns are limited to 1024. Is it possible to increase the Maximum Number of Rows/Columns of the schmatic before importing the large netlist?

 

Thanks,

Search a Instance in hierarchy

$
0
0

Hello, 

I want to  get a  location of certain instance in a layout cell in text file. I have writen a small skill code and it is working fine except for instance which are in level 1 and below. That  is i will get the location of inst which are on top level only. Can anyone help me to get it fix these problem. Thanks in advance.

Following is the code that i have used 

procedure(lSch()
let((inst_overlaps filename)
cv=geGetEditCellView()
filename="/dir1/filename.txt"
myport = outfile(filename)

foreach(inst cv~>instances
         if(inst~>cellName == "Xcell" then
 fprintf(myport "location of cell is : %L\n" inst~>xy) )  ) 
  )
     close(myport))) 

How to create a BMP file using SKILL and Virtuoso ?

$
0
0

Hello All

This is my first topic here :) And i need your help for doing something a little bit tricky (to me!)

I have a layout with let's say 2 layers. (to keep things simple.) overlapping a bunch of instances.

Everytime layer1 or Layer2 is overlapping a part of the matrix , i calculate the percentage of covered area.

I assume that if there is no overlap, my value is 255.

If i have let's say 3%of coverage,  then my value will be(100%-3%)*255 = 247.

Foreach instance in ly layout, i calculate the corresponding value of coverage. So my values can be from 0 to 255, if i have full coverage or not..

I would like to create a BMP file (not XPM, not  XBM because i need the sequence RGB )  with those calculated values (0 to 255).

But BMP is a binary format, so i need to convet the decimal values to ASCII chars and put that in a file.

The command IntToChar works almost -- not for every decimal value (00 for example) and even if i can get a result with intToChar, i can not print it in a file using fprintf command :( 

If someone can think about a smart way to create a BMP using Virtuoso (IPC ok, using another language) could you please help me with that? i'm unfortunately not "fluent" in perl or tcl. Any help is welcome!

Thanks a lot guys for your help.

Best,

Bruce

 

Using dbTransformBBox

$
0
0

Hi,

I am a relatively new user of SKILL. My problem is with the use of dBTransformBBox function. I am able to apply this function to scale the size of objects which are uniquely represented in bounding box fashion("rect" objects). My question is if this function is applicable to polygons as well. 

Specifically when I apply  dBTransformBBox to a shape in the active layer there is no scaling. As far as I can tell these shapes differ only in that they are represented as "polygon" objects in terms of their geometry.  dBTransformCellView scales all layers in a cell view, so it should be possible to scale polygons as well. I tried to use the dbLayerSize function to achieve scaling on the active layer but I do not understand the results returned by it.cvID~>DBUPerUU returns 1000.0.I am attaching a couple of pictures that show the layout before and after the application of dbLayerSize and also some example code of what I used to achieve this.

 cv_lay = dbOpenCellViewByType("SEMIREG_STM040" "SR_FA" "layout" "" "a")

  shape_list = cv_lay~>shapes

  OD_shape_list = nil
  foreach(shape shape_list
    if(shape~>lpp == list("OD" "drawing") then
      OD_shape_list = append1(OD_shape_list shape)
    );if
  );for

 OD1=car(OD_shape_list)

 dbLayerSize(cv_lay "OD" list(OD1) 0.50)

 dbLayerSize(cv_lay "OD" list(OD1) -0.50) [returns nil]

 leLayerSize(cv_lay list("OD" "drawing") -0.50 list("OD" "drawing")) [also returns nil]

 leLayerSize(cv_lay list("OD" "drawing") -0.50 list("OD" "drawing"))

 

I looked at other posts referring to leLayerSize (which I see in the manual is a layout editor procedural version of the dbLayerSize function), but the problem of the sizing value is still present here. There is no hierarchy in my layout.

 

I also tried leSizeShape for the specific shape I extract above.

 OD1

db:0x15f30944

 

OD1~>objType

"polygon"

 

leSizeShape(0D1 0.50)

^

SYNTAX ERROR found at line 5363 column 16 of file *ciwInPort*

*Error* lineread/read: syntax error encountered in input

Any help will be appreciated.

Kasyab

original cell view

cellview after applying dbLayerSize with 0.5 sizing

cellview after applying leLayerSize with 0.5 sizing

How to close a waveform window using OCEAN or SKILL

$
0
0

Hi everybody,

Does anyone know how to close a waveform window using OCEAN or SKILL? For example, I create a new waveform window using the function newWindow(), then I plot a curve, save it to a .png image file, and then I want to close the waveform window automatically using OCEAN or SKILL. Can I make it? Thank you for your help. I appreciate it.

 

Regards,

Winever.  

P.S. I find the awvCloseWindowMenuCB() function, but it can't seem to work with my case. I tried the following commands, but the result was not the same as I expected. It seems that the windows I created have been destroyed, but they are still there, have not been closed yet. Now, I am confused with this function. There must be something wrong, but what is it? 

The following is my command history,

ocean> newWindow()
ocean> Loading oasis.cxt
window:2
ocean> currentWindow()
window:2
ocean> awvCloseWindowMenuCB()
t
ocean> currentWindow()
nil
ocean> awvGetWindowList()
(window:157863960(destroyed))
ocean> newWindow()
window:3
ocean> awvGetWindowList()
(window:157863960(destroyed) window:3)
ocean> currentWindow()
window:3
ocean> awvCloseWindowMenuCB()
t
ocean> currentWindow()
nil
ocean> awvGetWindowList()
(window:157863960(destroyed) window:157863980(destroyed))

Viewing all 5068 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>