Annotation of OpenXM/src/k097/incmac.sm1, Revision 1.1.1.1
1.1 maekawa 1:
2:
3: %% incmac.sm1 , 1996, 4/2.
4: %% macros for the translator.
5: %%% /goto { pop } def %% should be changed later.
6: %( incmac.sm1: 4/16, 1997 ) messagen
7: %% Note that you cannot use incmac.k as an argument of the local function.
8: %% BUG: [/incmac.k] pushvarable was [/k] pushVariables, but it caused
9: %% error when you try to run a program foo(k) { for (i=0; i<k; i++) ... }.
10: /mapset {
11: /arg2 set /arg1 set
12: [/incmac.k ] pushVariables
13: 0 1 arg1 length 1 {sub} primmsg {
14: /incmac.k set
15: arg1 incmac.k get
16: arg2 incmac.k get
17: set
18: } for
19: popVariables
20: } def
21:
22: %%% a [i] b Put <=== a[i] = b;
23: %%% a [i] Get <=== a[i]
24: /a [[1 2] [3 4]] def
25: /@@@.indexMode {
26: 0 eq { %%% C-style
27: /@@@.indexMode.flag 0 def
28: /Get {
29: /arg2 set
30: /arg1 set
31: [/incmac.k ] pushVariables
32: [
33: arg1
34: 0 1 arg2 length 1 {sub} primmsg {
35: /incmac.k set
36: arg2 incmac.k get ..int get
37: } for
38: /arg1 set
39: ] pop
40: popVariables
41: arg1
42: } def
43:
44: /Put {
45: /arg3 set
46: /arg2 set
47: /arg1 set
48: [/incmac.k ] pushVariables
49: arg1
50: [ 0 1 arg2 length 1 {sub} primmsg {
51: /incmac.k set
52: arg2 incmac.k get ..int
53: } for
54: ] arg3 put
55: popVariables
56: } def
57: } { %% else
58: (Warning: Do not use indexmode 1.) message
59: (Warning: Do not use indexmode 1.) message
60: /@@@.indexMode.flag 1 def
61: /Get {
62: /arg1 set
63: [/incmac.k ] pushVariables
64: [
65: arg1 0 get load
66: 1 1 arg1 length 1 {sub} primmsg {
67: /incmac.k set
68: arg1 incmac.k get ..int 1 {sub} primmsg get
69: } for
70: /arg1 set
71: ] pop
72: popVariables
73: arg1
74: } def
75:
76: /Put {
77: /arg2 set
78: /arg1 set
79: [/incmac.k ] pushVariables
80: arg1 0 get load
81: [ 1 1 arg1 length 1 {sub} primmsg {
82: /incmac.k set
83: arg1 incmac.k get ..int 1 {sub} primmsg
84: } for
85: ] arg2 put
86: popVariables
87: } def
88: } ifelse
89: } def
90:
91: 0 @@@.indexMode %% Default index mode is C-style
92:
93:
94:
95:
96: %%%%%%%%%%%% 1996, 4/28
97: %% (2).. NewVector
98: /NewVector {
99: 0 get /arg1 set
100: pop %% remove this
101: arg1 (integer) dc /arg1 set
102: [ 1 1 arg1 { pop (0).. } for ]
103: } def
104:
105: %% (2).. (3).. NewMatrix
106: /NewMatrix {
107: dup 0 get /arg1 set
108: 1 get /arg2 set
109: pop %% remove this
110: arg1 (integer) dc /arg1 set
111: arg2 (integer) dc /arg2 set
112: [1 1 arg1 { pop this [arg2] NewVector } for ]
113: } def
114:
115: /Join {
116: 2 -1 roll pop %% remove this.
117: aload pop join
118: } def
119:
120:
121:
122: /lessThanOrEqual {
123: /arg2 set /arg1 set
124: arg1 arg2 lt { 1 }
125: { arg1 arg2 eq {1} {0} ifelse} ifelse
126: } def
127:
128: %%% For objects
129: /this null def
130: /PrimitiveContextp StandardContextp def
131: /PrimitiveObject [PrimitiveContextp] def
132:
133: /showln { pop message } def
134:
135: /KxxTrash0 { % we do not need.
136: /k.mapReplace { {[[(h). (1).]] replace} map } def
137: /Dehomogenize {
138: 0 get /arg1 set
139: [
140: arg1 isArray not { arg1 [[(h). (1).]] replace }
141: { arg1 0 get isArray not { arg1 k.mapReplace }
142: { arg1 {k.mapReplace} map } ifelse
143: } ifelse
144: /arg1 set
145: ] pop
146: arg1
147: } def
148: } def
149:
150:
151:
152:
153:
154:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>