=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/dr.sm1,v retrieving revision 1.37 retrieving revision 1.42 diff -u -p -r1.37 -r1.42 --- OpenXM/src/kan96xx/Kan/dr.sm1 2004/09/10 13:20:23 1.37 +++ OpenXM/src/kan96xx/Kan/dr.sm1 2004/09/14 02:13:29 1.42 @@ -1,4 +1,4 @@ -% $OpenXM: OpenXM/src/kan96xx/Kan/dr.sm1,v 1.36 2004/09/09 11:42:22 takayama Exp $ +% $OpenXM: OpenXM/src/kan96xx/Kan/dr.sm1,v 1.41 2004/09/14 02:02:02 takayama Exp $ %% dr.sm1 (Define Ring) 1994/9/25, 26 %% This file is error clean. @@ -342,12 +342,14 @@ 0 1 << set0 length 1 sub >> { /i set - << set0 i get >> a eq - { - /flag 1 def - } - { } - ifelse + set0 i get tag , a tag , eq { + << set0 i get >> a eq + { + /flag 1 def exit + } + { } + ifelse + } { } ifelse } for ] pop /arg1 flag def @@ -4202,17 +4204,86 @@ $ [ff ff] fromVectors :: $ [(cons) [(obj list cons list) ]] putUsages +/arrayToList { + /arg1 set + [/a /r] pushVariables + [ + /a arg1 def + { + a isArray { + a { arrayToList } map /a set + a (list) dc /r set + exit + } { } ifelse + /r a def + exit + } loop + /arg1 r def + ] pop + popVariables + arg1 +} def +[(arrayToList) +[(a arrayToList list) +]] putUsages +/listToArray { + /arg1 set + [/a /r] pushVariables + [ + /a arg1 def + { + a tag 12 eq { + a (array) dc /a set + a { listToArray } map /r set + exit + } { } ifelse + a tag 0 eq { + /r [ ] def + exit + } { } ifelse + /r a def + exit + } loop + /arg1 r def + ] pop + popVariables + arg1 +} def +[(listToArray) +[(list listToArray a) +]] putUsages + +/makeInfix { + [(or_attr) 4 4 -1 roll ] extension +} def +[(makeInfix) +[(literal makeInfix) + (Change literal to an infix operator.) + (Example: /+ { add } def ) + ( /+ makeInfix) + ( /s 0 def 1 1 100 { /i set s + i /s set } for s message) + ( [ 1 2 3 ] { /i set i + 2 } map ::) +]] putUsages + /usages { /arg1 set - [/name /flag /n /k /slist /m /i /sss] pushVariables + [/name /flag /n /k /slist /m /i /sss /key /ukeys] pushVariables [ /name arg1 def /flag true def + { % begin loop - %BUG: should use regular expression in a future. + name isArray { + /ukeys @.usages { 0 get } map shell def + name { /key set [(regexec) key ukeys] extension + { 0 get } map } map /sss set + exit + } { } ifelse + name tag 1 eq { @.usages { 0 get } map shell { (, ) nl } map /sss set + exit } { /sss [ ] def @@ -4239,7 +4310,10 @@ $ [ff ff] fromVectors :: $ {name Usage /sss [(Usage of ) name ( could not obtained.) nl ] def} { } ifelse + exit } ifelse + +} loop /arg1 sss cat def ] pop popVariables @@ -4248,6 +4322,27 @@ $ [ff ff] fromVectors :: $ [(usages) [(key usages usages-as-a-string) (num usages list-of-key-words) + ([key1 key2 ... ] usages list-of-key-words : it accepts regular expressions.) +]] putUsages + +/setMinus { + /arg2 set /arg1 set + [/aa /bb /i ] pushVariables + [ + /aa arg1 def /bb arg2 def + [ + 0 1 aa length 1 sub { + /i set + aa i get bb memberQ { + } { aa i get } ifelse + } for + ] /arg1 set + ] pop + popVariables + arg1 +} def +[(setMinus) +[(a b setMinus c) ]] putUsages ;