source: tags/ms_r16q2/AISC_COM/AISC/aisc_global.pa

Last change on this file was 8300, checked in by westram, 12 years ago
  • cppchecked (1.52)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1IF $(argc) < 5
2    ERROR Wrong number of parameters[$(argc)]. Usage: aisc aisc_global.pa xxx.aisc outfile extern_file
3ENDIF
4
5DATA AISC { $(#FILE $(argv[2])) };
6DUMPDATA DUMP/aisc_global.pa__$(argv[2]).dump
7OPEN save $(argv[3])
8
9MOVETO $(AISC/PROJECT)
10CREATE $(pre) = $(OBJECT_KEY)_
11CREATE $(max_key) = $(MAX_KEY)
12CREATE $(max_obj) = $(MAX_OBJECT)
13CREATE $(i)
14CREATE $(termlist) = $10$n};$n
15
16OUT save
17
18MOVETO $(DATA/.)
19
20P /* -----------------------------------------------------------------
21P  * Created automagically from ../$(argv[2])
22P  *                       and ../$(argv[4])
23P  * using aisc-script '../AISC/aisc_global.pa'
24P  * DO NOT EDIT THIS FILE!!!
25P  * ----------------------------------------------------------------- */
26--
27P #include <aisc_server.h>
28--
29
30# create and clear obj and key list
31FOR $(i) = 0 TO $(max_obj)
32    CREATE $(obj[$(i)]) = 0,
33ENDFOR
34FOR $(i) = 0 TO $(max_key)
35    CREATE $(key[$(i)]) = 0,
36ENDFOR
37
38# generate object names struct
39FOR $(STRUCT)
40    IF $(SKEY)
41        IF $(obj[$(SKEYC)])
42            SET $(obj[$(SKEYC)]) = "$(pre)$(SKEY)",
43        ELSE
44            ERROR Increase definition of MAX_OBJECT to $(SKEYC)
45        ENDIF
46    ENDIF
47ENDFOR
48
49P const char *aisc_object_names[] = {
50GOSUB printobjlist
51P $(termlist)
52
53# generate attribute names structs
54CREATE $(nummer)
55CREATE $(aisc_string)
56FOR $(STRUCT)
57    IF $(SKEY)
58        GOSUB clearkeylist
59        SET $(nummer) = 0
60        SET $(aisc_string) = $(pre)$(SKEY)_
61        P static const char *$(pre)$(STRUCT)_attribute_names[] = {
62        GOSUB make_attr_names
63        GOSUB printkeylist
64        P $(termlist)
65    ENDIF
66ENDFOR
67P $n
68
69# generate attribute names struct list
70GOSUB clearobjlist
71P const char *aisc_attribute_names_list[] = {
72FOR $(STRUCT)
73    IF $(SKEY)
74        SET $(obj[$(SKEYC)]) = (const char *)$(pre)$(STRUCT)_attribute_names,
75    ENDIF
76ENDFOR
77GOSUB printobjlist
78P $(termlist)
79
80# generate function structs
81P typedef int* (*talking_function)(int *x, ...);
82P typedef talking_function *talking_function_ptr;
83--
84FOR $(STRUCT)
85    P extern talking_function aisc_talking_functions_create_$(STRUCT)[];
86    P extern int *((*(aisc_talking_functions_get_$(STRUCT)[]))());
87    P extern int *((*(aisc_talking_functions_find_$(STRUCT)[]))());
88    P extern int *((*(aisc_talking_functions_copy_$(STRUCT)[]))());
89    P extern int ((*(aisc_talking_functions_set_$(STRUCT)[]))());
90    --
91ENDFOR
92
93# generate d flags
94P int aisc_d_flags[] = {
95GOSUB clearkeylist
96FOR $(STRUCT)
97    IF $(SKEY)
98        SET $(i) = 0
99        FOR $({/TYPE)
100            IF $(TYPE) = dllh
101                SET $(i) = 1
102            ENDIF
103        ENDFOR
104        SET $(key[$(SKEYC)]) = $(i),$6// $(SKEY)
105    ENDIF
106ENDFOR
107GOSUB printkeylist
108P $(termlist)
109
110# generate callback tables
111P int *((**(aisc_talking_functions_get[]))()) = {
112GOSUB print_talking_table,aisc_talking_functions_get_
113
114P int ((**(aisc_talking_functions_set[]))()) = {
115GOSUB print_talking_table,aisc_talking_functions_set_
116
117P int *((**(aisc_talking_functions_find[]))()) = {
118GOSUB print_talking_table,aisc_talking_functions_find_
119
120P int *((**(aisc_talking_functions_copy[]))()) = {
121GOSUB print_talking_table,aisc_talking_functions_copy_
122
123P talking_function* aisc_talking_functions_create[] = {
124GOSUB print_talking_table,aisc_talking_functions_create_
125
126P aisc_destroy_callback aisc_talking_functions_delete[] = {
127GOSUB print_talking_table_casted,destroy_,(aisc_destroy_callback)
128
129# FINISH
130P #undef __P
131CLOSE save
132EXIT
133
134# -----------------
135#     FUNCTIONS     
136
137FUNCTION print_talking_table,name
138    CALL print_talking_table_casted,$(name),
139RETURN
140
141FUNCTION print_talking_table_casted,name,cast
142    GOSUB clearkeylist
143    FOR $(STRUCT)
144        IF $(SKEY)
145            SET $(key[$(SKEYC)]) = $(cast)$(name)$(STRUCT),
146        ENDIF
147    ENDFOR
148    GOSUB printkeylist
149    P $(termlist)
150RETURN
151
152FUNCTION make_attr_names
153    CREATE $(nr) = $(nummer)
154    CREATE $(s) = $(aisc_string)
155    FOR $({/TYPE)
156        IF $(KEY)
157            IF $(REF) ~ s
158                PUSH
159                SET $(nummer) = $(+ $(nr)+$(KEYC) )
160                SET $(aisc_string) = $(s)$(KEY)_
161                MOVETO $(/AISC/DATA/STRUCT.$(TYPE))
162                GOSUB make_attr_names
163                POP
164            ELSEIF $(REF) ~ d
165                SET $(key[$(+ $(+ $(nr)+1)+$(KEYC))])="$(s)$(KEY)CNT",
166                SET $(key[$(+ $(nr)+$(KEYC))]) = "$(s)$(KEY)",
167            ELSEIF $(TYPE) = dllh
168                PUSH
169                SET $(nummer) = $(+ 2+$(+ $(nr)+$(KEYC) ))
170                SET $(aisc_string) = $(s)$(KEY)
171                MOVETO $(/AISC/DATA/STRUCT.dll_header)
172                GOSUB make_attr_names
173                POP
174                SET $(key[$(+ $(nr)+0)]) = "$(s)PREVIOUS",
175                SET $(key[$(+ $(nr)+1)]) = "$(s)NEXT",
176            ELSE
177                SET $(key[$(+ $(nr)+$(KEYC))]) = "$(s)$(KEY)",
178            ENDIF
179        ENDIF
180    ENDFOR
181RETURN
182
183FUNCTION clearkeylist
184    FOR $(i) = 0 TO $(max_key)
185        SET $(key[$(i)]) = 0,
186    ENDFOR
187RETURN
188FUNCTION clearobjlist
189    FOR $(i) = 0 TO $(max_obj)
190        SET $(obj[$(i)]) = 0,
191    ENDFOR
192RETURN
193FUNCTION printkeylist
194    FOR $(i) = 0 TO $(max_key)
195        P $1$(key[$(i)])
196    ENDFOR
197RETURN
198FUNCTION printobjlist
199    FOR $(i) = 0 TO $(max_obj)
200        P $1$(obj[$(i)])
201    ENDFOR
202RETURN
203
Note: See TracBrowser for help on using the repository browser.