97 lines
2.7 KiB
Text
97 lines
2.7 KiB
Text
Module testthis {
|
|
\\ empty stack
|
|
Flush
|
|
inventory LL
|
|
append LL, "des_system_lib":=(List:="std", "synopsys", "std_cell_lib", "des_system_lib", "dw02", "dw01", "ramlib", "ieee")
|
|
REM append LL, "dw01":=(List:="dw04","ieee", "dw01", "dware", "gtech")
|
|
append LL, "dw01":=(List:="ieee", "dw01", "dware", "gtech")
|
|
append LL, "dw02":=(List:="ieee", "dw02", "dware")
|
|
append LL, "dw03":=(List:="std", "synopsys", "dware", "dw03", "dw02", "dw01", "ieee", "gtech")
|
|
append LL, "dw04":=(List:= "ieee", "dw01", "dware", "gtech")
|
|
append LL, "dw05":=(List:="dw05", "ieee", "dware")
|
|
append LL, "dw06":=(List:="dw06", "ieee", "dware")
|
|
append LL, "dw07":=(List:="ieee", "dware")
|
|
append LL, "dware":=(List:="ieee", "dware")
|
|
append LL, "gtech":=(List:="ieee", "gtech")
|
|
append LL, "ramlib":=(List:="std", "ieee")
|
|
append LL, "std_cell_lib":=(List:="ieee", "std_cell_lib")
|
|
append LL, "synopsys":=List
|
|
\\ inventory itmes may have keys/items or keys.
|
|
\\ here we have keys so keys return as item also
|
|
\\ when we place an item in a key (an empty string) ...
|
|
\\ we mark the item to not return the key but an empty string
|
|
inventory final
|
|
mm=each(LL)
|
|
while mm
|
|
k$=eval$(mm!)
|
|
m=eval(mm)
|
|
mmm=each(m)
|
|
While mmm
|
|
k1$=eval$(mmm!)
|
|
if not exist(LL, k1$) then
|
|
if not exist(final, k1$) then append final, k1$
|
|
return m, k1$:="" \\ mark that item
|
|
else
|
|
mmmm=Eval(LL)
|
|
if len(mmmm)=0 then
|
|
if not exist(final, k1$) then append final, k1$
|
|
return m, k1$:="" \\ mark that item
|
|
end if
|
|
end if
|
|
end while
|
|
end while
|
|
mm=each(LL)
|
|
while mm
|
|
\\ using eval$(mm!) we read the key as string
|
|
k$=eval$(mm!)
|
|
if exist(final, k$) then continue
|
|
m=eval(mm)
|
|
mmm=each(m)
|
|
While mmm
|
|
\\ we read the item, if no item exist we get the key
|
|
k1$=eval$(mmm)
|
|
if k1$="" then continue
|
|
if exist(final, k1$) then continue
|
|
data k1$ \\ push to end to stack
|
|
end while
|
|
while not empty
|
|
read k1$
|
|
if exist(final, k1$) then continue
|
|
m=LL(k1$)
|
|
mmm=each(m)
|
|
delthis=0
|
|
While mmm
|
|
k2$=eval$(mmm)
|
|
if k2$="" then continue
|
|
if k1$=k2$ then continue
|
|
if exist(final, k2$) then continue
|
|
push k2$ \\ push to top of stack
|
|
return m, k2$:=""
|
|
delthis++
|
|
end while
|
|
if delthis=0 then
|
|
if not exist(final, k1$) then
|
|
mmm=each(m)
|
|
While mmm
|
|
k2$=eval$(mmm!)
|
|
if k2$=k1$ then continue
|
|
if exist(final, k2$) Else
|
|
Print "unsorted:";k1$, k2$
|
|
end if
|
|
end while
|
|
append final, k1$ : Return LL, k1$:=List
|
|
end if
|
|
end if
|
|
end while
|
|
if not exist(final, k$) then append final, k$
|
|
end while
|
|
document doc$
|
|
ret=each(final,1, -2)
|
|
while ret
|
|
doc$=eval$(ret)+" -> "
|
|
end while
|
|
doc$=final$(len(final)-1!)
|
|
Report doc$
|
|
clipboard doc$
|
|
}
|
|
testthis
|