1 /* file: macro.h symmetrica source code */
2 #ifndef MACRO_H
3 
4 #ifdef SYMMAGMA
5 #define SYM_MALLOC(a) mem_malloc(a)
6 #else
7 #define SYM_MALLOC(a) SYM_malloc(a)
8 #endif
9 
10 #ifdef SYMMAGMA
11 #define SYM_FREE(a) mem_free(a)
12 #else
13 #define SYM_FREE(a) SYM_free(a)
14 #endif
15 
16 
17 
18 #define S_O_S(a) (((OP)(a))->ob_self)
19 #define S_O_K(a) (((OP)(a))->ob_kind)
20 #define C_O_K(a,b) ((a)->ob_kind = (OBJECTKIND)(b))
21 #define C_O_S(a,b) S_O_S(a)=(b)
22 #define B_KS_O(a,b,c) do { C_O_S(c,b); C_O_K(c,a); } while(0)
23 
24 #define EMPTYP(a) ((a)->ob_kind == (OBJECTKIND)0)
25 
26 #define EQ_INTEGER(a,b) \
27     ( S_O_K(b) == INTEGER ?(S_I_I(a) == S_I_I(b)):(comp_integer(a,b) == 0))
28 #define EQ_PARTITION(a,b) \
29     ( S_O_K(b) == PARTITION ? eq_partition_partition(a,b) :FALSE )
30 #define EQ_LONGINT(a,b) \
31     ( S_O_K(b) == LONGINT ? eq_longint_longint(a,b) :(comp_longint(a,b) == 0))
32 #define EQ_FF(a,b) \
33     ( comp_ff(a,b) == 0 )
34 #define EQ(a,b) \
35     (\
36         S_O_K(a) == INTEGER? EQ_INTEGER(a,b) : \
37           (\
38           S_O_K(a) == LONGINT? EQ_LONGINT(a,b) :\
39             ( \
40             S_O_K(a) == PARTITION?EQ_PARTITION(a,b): \
41                 (\
42                 S_O_K(a)==FF?EQ_FF(a,b): eq(a,b) \
43                 )\
44             ) \
45           )\
46     )
47 
48 
49 
50 #define S_I_I(a) (((a)->ob_self).ob_INT)
51 #define C_I_I(a,b) (a)->ob_self.ob_INT = (INT)(b)
52 #define M_I_I(a,b)  (\
53             ((b)->ob_self.ob_INT = (INT)(a)),\
54              ((b)->ob_kind = INTEGER)\
55             )
56 
57 #define DEC_INTEGER(a) (((a)->ob_self).ob_INT --)
58 #define INC_INTEGER(a) (((a)->ob_self).ob_INT ++)
59 
60 
61 #define COPY_INTEGER(a,b) M_I_I(S_I_I(a),b)
62 #define FREESELF_INTEGER(a) C_O_K((a),0)
63 #define NULLP_INTEGER(a) (S_I_I(a) == 0)
64 #define POSP_INTEGER(a) (S_I_I(a) > (INT)0)
65 #define NEGP_INTEGER(a) (S_I_I(a) < (INT)0)
66 #define EINSP_INTEGER(a) (S_I_I(a) == (INT)1)
67 #define NEGEINSP_INTEGER(a) (S_I_I(a) == (INT)-1)
68 #define COMP_INTEGER_INTEGER(a,b) ((S_I_I(a) == S_I_I(b))? 0L :\
69     ((S_I_I(a) > S_I_I(b))? 1L : -1L) )
70 #define INTEGERP(a) (S_O_K(a) == INTEGER)
71 
72 
73 #define S_V_S(a) ((((a)->ob_self).ob_vector)->v_self)
74 #define C_V_S(a,b) (((((a)->ob_self).ob_vector)->v_self) = ((OP) b))
75 #define S_V_L(a) ((((a)->ob_self).ob_vector)->v_length)
76 #define C_V_L(a,b) (((((a)->ob_self).ob_vector)->v_length) = (b))
77 #define S_V_I(a,i) (((((a)->ob_self).ob_vector)->v_self)+(i))
78 #define C_V_I(a,i,b) ( *(((((a)->ob_self).ob_vector)->v_self)+(i)) = *(b))
79 #define S_V_II(a,i) (((((((a)->ob_self).ob_vector)->v_self)+(i))\
80             ->ob_self).ob_INT)
81 #define S_V_LI(a) ((((((a)->ob_self).ob_vector)->v_length)->ob_self).ob_INT)
82 
83 #define B_O_V(a,b) \
84 do { \
85 struct vector *callocvectorstruct();\
86 FREESELF(b);C_O_K(b,VECTOR);b->ob_self.ob_vector = callocvectorstruct();\
87 C_V_S(b,a);C_V_L(b,CALLOCOBJECT()); M_I_I(1,S_V_L(b)); } while(0)
88 
89 
90 
91 #define INTEGRALP(a) (       (S_O_K(a) == LONGINT) \
92             || (S_O_K(a) == INTEGER)  \
93                       )
94 #define VECTORP_CO1(a) (       (S_O_K(a) == VECTOR) \
95             || (S_O_K(a) == WORD) \
96             || (S_O_K(a) == QUEUE) \
97             || (S_O_K(a) == INTEGERVECTOR) \
98             || (S_O_K(a) == COMPOSITION) \
99             || (S_O_K(a) == HASHTABLE) \
100             || (S_O_K(a) == LAURENT) \
101             || (S_O_K(a) == KRANZ) \
102             || (S_O_K(a) == SUBSET) \
103             || (S_O_K(a) == FF) \
104         )
105 
106 #define VECTORP(a) ((a == NULL)? FALSE: VECTORP_CO1(a))
107 
108 #define LISTP_CO1(a) (         (S_O_K(a) == LIST) \
109             || (S_O_K(a) == SCHUR) \
110             || (S_O_K(a) == GRAL) \
111             || (S_O_K(a) == POLYNOM) \
112             || (S_O_K(a) == SCHUBERT) \
113             || (S_O_K(a) == MONOPOLY) \
114             || (S_O_K(a) == ELM_SYM) \
115             || (S_O_K(a) == POW_SYM) \
116             || (S_O_K(a) == MONOMIAL) \
117             || (S_O_K(a) == HOM_SYM) \
118         )
119 #define LISTP(a) ((a == NULL)? FALSE: LISTP_CO1(a))
120 
121 #define POLYP(a) (          \
122             (S_O_K(a) == SCHUR) \
123             || (S_O_K(a) == GRAL) \
124             || (S_O_K(a) == POLYNOM) \
125             || (S_O_K(a) == SCHUBERT) \
126             || (S_O_K(a) == MONOPOLY) \
127             || (S_O_K(a) == ELM_SYM) \
128             || (S_O_K(a) == POW_SYM) \
129             || (S_O_K(a) == MONOMIAL) \
130             || (S_O_K(a) == HOM_SYM) \
131         )
132 
133 
134 
135 #define S_L_S(a) ((((a)->ob_self).ob_list)->l_self)
136 #define C_L_S(a,b) (((((a)->ob_self).ob_list)->l_self) = (OP)(b))
137 #define S_L_N(a) ((((a)->ob_self).ob_list)->l_next)
138 #define C_L_N(a,b) (((((a)->ob_self).ob_list)->l_next) = (OP)(b))
139 
140 #define S_PA_C(a) ((unsigned char *)  (S_PA_S(a)))
141 #define S_PA_K(a) ((a)->ob_self.ob_partition->pa_kind)
142 #define C_PA_K(a,b) (((((a)->ob_self).ob_partition)->pa_kind) = b)
143 #define C_PA_HASH(a,b) (((((a)->ob_self).ob_partition)->pa_hash) = b)
144 #define S_PA_S(a) ((a)->ob_self.ob_partition->pa_self)
145 #define S_PA_HASH(a) ((a)->ob_self.ob_partition->pa_hash)
146 #define C_PA_S(a,b) ((a)->ob_self.ob_partition->pa_self = b)
147 #define S_PA_I(a,i) S_V_I((a)->ob_self.ob_partition->pa_self,i)
148 #define S_PA_II(a,i)  \
149 ((S_O_K(a) == CHARPARTITION || S_O_K(a) == CHAR_AUG_PART) ?   \
150         (INT)(S_PA_C(a)[i+1]) : \
151         S_V_II((a)->ob_self.ob_partition->pa_self,i))
152 #define S_PA_CII(a,i) (S_PA_C(a)[i+1])
153 #define S_PA_CI(a,i) (S_PA_C(a)+i+1)
154 #define S_PA_CL(a) (S_PA_C(a)[0])
155 #define S_PA_L(a) S_V_L(S_PA_S(a))
156 #define S_PA_LI(a) \
157 ((S_O_K(a) == CHARPARTITION || S_O_K(a) == CHAR_AUG_PART) ?  \
158         (INT)(S_PA_C(a)[0]) : \
159         S_V_LI(S_PA_S(a)))
160 #define INC_PARTITION(a) inc_vector(S_PA_S(a))
161 #define DEC_PARTITION(a) dec_integervector(S_PA_S(a))
162 
163 #ifdef FAST
164 #define PART_CHECK_KIND(t,a,b)
165 #else
166 #define PART_CHECK_KIND(t,a,b)\
167     CTO(PARTITION,t,a);\
168     if (S_PA_K(a) != b)\
169         wrong_kind_part(t,a,b);
170 #endif
171 
172 
173 
174 extern INT partition_speichersize,partition_speicherindex,mem_counter_part;
175 extern struct partition **partition_speicher;
176 
177 #define FREEPARTITION(d)\
178 FREE_MEMMANAGER(struct partition *,\
179                     partition_speicher,\
180                     partition_speicherindex,\
181                     partition_speichersize,\
182                     mem_counter_part,\
183                     d)
184 
185 #define B_KS_PA(a,b,c) \
186     do {\
187     C_O_K(c,PARTITION);\
188     CALLOC_MEMMANAGER(struct partition,\
189                       partition_speicher,\
190                       partition_speicherindex,\
191                       mem_counter_part,\
192                       (c ->ob_self).ob_partition);\
193     /* (c ->ob_self).ob_partition=CALLOCPARTITION();*/\
194     C_PA_K(c,a);\
195     C_PA_S(c,b);\
196     C_PA_HASH(c,-1L); \
197     } while (0)
198 
199 #define M_KL_PA(a,b,c) \
200 do { B_KS_PA(a,CALLOCOBJECT(),c);\
201         erg += m_l_v(b,S_PA_S(c));\
202         C_O_K(S_PA_S(c),INTEGERVECTOR) );\
203 while(0)
204 
205 #define B_KL_PA(a,b,c) \
206 do { B_KS_PA(a,CALLOCOBJECT(),c);\
207         erg += b_l_v(b,S_PA_S(c));\
208         C_O_K(S_PA_S(c),INTEGERVECTOR);\
209 } while(0)
210 
211 
212 
213 
214 #define S_P_K(a) ((((a)->ob_self).ob_permutation)->p_kind)
215 #define C_P_K(a,b) (((((a)->ob_self).ob_permutation)->p_kind) = b)
216 #define S_P_S(a) ((((a)->ob_self).ob_permutation)->p_self)
217 #define C_P_S(a,b) (((((a)->ob_self).ob_permutation)->p_self) = b)
218 #define S_P_I(a,i) S_V_I(((((a)->ob_self).ob_permutation)->p_self),(i))
219 #define S_P_II(a,i) S_V_II(((((a)->ob_self).ob_permutation)->p_self),(i))
220 #define S_P_L(a) S_V_L(S_P_S(a))
221 #define S_P_LI(a) S_V_LI(S_P_S(a))
222 
223 /* kranz produkt AK 120804 */
224 #define S_KR_G(a) S_V_I(a,0)
225 #define S_KR_GI(a,i) S_P_I(S_V_I(a,0),i)
226 #define S_KR_GL(a) S_P_L(S_V_I(a,0))
227 #define S_KR_GLI(a) S_P_LI(S_V_I(a,0))
228 #define S_KR_V(a) S_V_I(a,1)
229 #define S_KR_VL(a) S_V_L(S_V_I(a,1))
230 #define S_KR_VLI(a) S_V_LI(S_V_I(a,1))
231 #define S_KR_I(a,i) S_V_I(S_V_I(a,1),i)
232 
233 #define S_M_L(a) ((((a)->ob_self).ob_matrix)->m_length)
234 #define C_M_L(a,b) (((((a)->ob_self).ob_matrix)->m_length)=(b))
235 #define S_M_LI(a) ((((((a)->ob_self).ob_matrix)->m_length)->ob_self).ob_INT)
236 #define S_M_H(a) ((((a)->ob_self).ob_matrix)->m_height)
237 #define S_M_HASH(a) ((((a)->ob_self).ob_matrix)->m_hash)
238 #define C_M_H(a,b) (((((a)->ob_self).ob_matrix)->m_height)=(b))
239 #define S_M_HI(a) ((((((a)->ob_self).ob_matrix)->m_height)->ob_self).ob_INT)
240 #define S_M_S(a) ((((a)->ob_self).ob_matrix)->m_self)
241 #define C_M_S(a,b) (((((a)->ob_self).ob_matrix)->m_self)=(b))
242 #define C_M_HASH(a,b) (((((a)->ob_self).ob_matrix)->m_hash)=(b))
243 #define S_M_IJ(a,i,j) ( ((((a)->ob_self).ob_matrix)->m_self)\
244      + ((((((a)->ob_self).ob_matrix)->m_length)->ob_self).ob_INT)\
245      * (i) + (j) )
246 #define S_M_IJI(a,i,j) S_I_I(S_M_IJ(a,i,j))
247 #define MATRIXP(a) ((S_O_K(a) == MATRIX) || (S_O_K(a) == KRANZTYPUS)\
248     || (S_O_K(a) == KOSTKA) || (S_O_K(a) == INTEGERMATRIX) )
249 
250 #define S_MO_S(a) (((a->ob_self).ob_monom)->mo_self)
251 #define C_MO_S(a,b) ((((a->ob_self).ob_monom)->mo_self)=(b))
252 #define S_MO_K(a) (((a->ob_self).ob_monom)->mo_koeff)
253 #define C_MO_K(a,b) ((((a->ob_self).ob_monom)->mo_koeff)=(b))
254 #define S_MO_KI(a) ((((a->ob_self).ob_monom)->mo_koeff)->ob_self.ob_INT)
255 #define S_MO_SI(a,i) S_V_I(S_MO_S(a),(i))
256 #define S_MO_SII(a,i) S_V_II(S_MO_S(a),(i))
257 #define S_MO_SL(a) S_V_L(S_MO_S(a))
258 #define S_MO_SLI(a) S_V_LI(S_MO_S(a))
259 #define COPY_MONOM(a,b) M_SK_MO(S_MO_S(a),S_MO_K(a),b)
260 
261 #define B_SK_MO(a,b,c)\
262 do { \
263       C_O_K(c,MONOM);\
264       CALLOC_MEMMANAGER(struct monom, monom_speicher, monom_speicherindex,mem_counter_monom ,(c->ob_self).ob_monom);\
265       C_MO_S(c,a) ; \
266       C_MO_K(c,b); \
267 } while(0)
268 
269 extern INT monom_speicherindex,mem_counter_monom,monom_speichersize;
270 extern struct monom **monom_speicher;
271 
272 #define FREEMONOM(v) \
273 FREE_MEMMANAGER(struct monom *,\
274  monom_speicher,\
275  monom_speicherindex,\
276  monom_speichersize,\
277  mem_counter_monom,\
278  v)
279 
280 
281 #define FREESELF_MONOM(a)\
282 do {\
283     if (S_O_K(S_MO_S(a)) == PARTITION) \
284         { erg+= freeself_partition(S_MO_S(a)); }\
285     else if (S_O_K(S_MO_S(a)) == INTEGERMATRIX) \
286         { erg+= freeself_integermatrix(S_MO_S(a)); }\
287     else erg += freeself(S_MO_S(a));\
288     FREE_EMPTY_OBJECT(S_MO_S(a));\
289     if (S_O_K(S_MO_K(a)) == INTEGER) C_O_K(S_MO_K(a),EMPTY);\
290     else if (S_O_K(S_MO_K(a)) == LONGINT) erg += freeself_longint(S_MO_K(a));\
291     else if (S_O_K(S_MO_K(a)) == BRUCH) erg += freeself_bruch(S_MO_K(a));\
292     else if (S_O_K(S_MO_K(a)) == FF) erg += freeself_ff(S_MO_K(a));\
293     else  erg += freeself(S_MO_K(a));\
294     FREE_EMPTY_OBJECT(S_MO_K(a));\
295     FREEMONOM(((a)->ob_self).ob_monom);\
296     C_O_K(a,EMPTY);\
297 } while(0)
298 
299 #define S_B_I(a) ((INT)((((a)->ob_self).ob_bruch)->b_info))
300 #define S_B_O(a) ((OP)((((a)->ob_self).ob_bruch)->b_oben))
301 #define S_B_OI(a) ((INT)((((((a)->ob_self).ob_bruch)->b_oben)->ob_self).ob_INT))
302 #define S_B_U(a) ((OP)((((a)->ob_self).ob_bruch)->b_unten))
303 #define S_B_UI(a) ((INT)((((((a)->ob_self).ob_bruch)->b_unten)->ob_self).ob_INT))
304 #define FREESELF_BRUCH(a) (freeall(S_B_O(a)),freeall(S_B_U(a)),\
305         free(S_O_S(a).ob_bruch),C_O_K(a,0),OK)
306 #define C_B_I(a,b) (((((a)->ob_self).ob_bruch)->b_info)=(INT)(b))
307 #define C_B_O(a,b) (((((a)->ob_self).ob_bruch)->b_oben)=(b))
308 #define C_B_U(a,b) (((((a)->ob_self).ob_bruch)->b_unten)=(b))
309 #define EINSP_BRUCH(a) (EQ(S_B_O((a)),S_B_U((a))))
310 #define BRUCHP(a) (S_O_K(a) == BRUCH)
311 
312 #define S_S_S(a)  ((((((((a)->ob_self).ob_list)->l_self))\
313         ->ob_self).ob_monom)->mo_self)
314 #define S_S_SL(a) S_PA_L( ((((((((a)->ob_self).ob_list)->l_self))\
315         ->ob_self).ob_monom)->mo_self)\
316             )
317 #define S_S_SLI(a) S_PA_LI( ((((((((a)->ob_self).ob_list)->l_self))\
318         ->ob_self).ob_monom)->mo_self)\
319             )
320 #define S_S_SI(a,i) S_PA_I( ((((((((a)->ob_self).ob_list)->l_self))\
321         ->ob_self).ob_monom)->mo_self)\
322         ,(i))
323 #define S_S_SII(a,i) S_PA_II( ((((((((a)->ob_self).ob_list)->l_self))\
324         ->ob_self).ob_monom)->mo_self)\
325         ,(i))
326 #define S_S_K(a) (S_MO_K(((((a)->ob_self).ob_list)->l_self)))
327 #define C_S_K(a,b) (C_MO_K(((((a)->ob_self).ob_list)->l_self),(b)))
328 #define C_S_S(a,b) (C_MO_S(((((a)->ob_self).ob_list)->l_self),(b)))
329 #define S_S_KI(a) (S_MO_KI(((((a)->ob_self).ob_list)->l_self)))
330 #define S_S_N(a) (S_L_N(a))
331 #define C_S_N(a,b) (C_L_N((a),(b)))
332 
333 #define S_SCH_S(a) (S_MO_S(S_L_S(a)))
334 #define S_SCH_SL(a) (S_P_L(S_MO_S(S_L_S(a))))
335 #define S_SCH_SLI(a) (S_P_LI(S_MO_S(S_L_S(a))))
336 #define S_SCH_SI(a,i) S_P_I(S_SCH_S(a),(i))
337 #define S_SCH_SII(a,i) S_P_II(S_SCH_S(a),(i))
338 #define S_SCH_K(a) (S_MO_K(S_L_S(a)))
339 #define C_SCH_K(a,b) (C_MO_K(S_L_S(a),(b)))
340 #define S_SCH_KI(a) (S_MO_KI(S_L_S(a)))
341 #define S_SCH_N(a) (S_L_N(a))
342 #define C_SCH_N(a,b) (C_L_N((a),(b)))
343 
344 
345 #define POLYNOMP(a) (S_O_K(a) == POLYNOM)
346 #define S_PO_S(a) (S_MO_S(S_L_S(a)))
347 #define S_PO_SI(a,i) (S_V_I(S_MO_S(S_L_S(a)),i))
348 #define S_PO_SIJ(a,i,j) (S_M_IJ(S_MO_S(S_L_S(a)),i,j))
349 #define S_PO_SIJI(a,i,j) (S_M_IJI(S_MO_S(S_L_S(a)),i,j))
350 #define S_PO_SII(a,i) (S_V_II(S_MO_S(S_L_S(a)),i))
351 #define S_PO_SL(a) (S_V_L(S_MO_S(S_L_S(a))))
352 #define S_PO_SLI(a) (S_V_LI(S_MO_S(S_L_S(a))))
353 #define S_PO_K(a) (S_MO_K(S_L_S(a)))
354 #define S_PO_KI(a) (S_MO_KI(S_L_S(a)))
355 #define S_PO_N(a) (S_L_N(a))
356 #define C_PO_N(a,b) (C_L_N((a),(b)))
357 #define C_PO_K(a,b) (C_MO_K(S_L_S(a),(b)))
358 #define COPY_POLYNOM(a,b) copy_list(a,b)
359 #define M_SK_MO(a,b,c) (b_sk_mo(callocobject(),callocobject(),c),\
360             copy(b,S_MO_K(c)),\
361             copy(a,S_MO_S(c)))
362 
363 #define S_SPA_G(a) ((((a)->ob_self).ob_skewpartition)->spa_gross)
364 #define S_SPA_GL(a) S_PA_L((((a)->ob_self).ob_skewpartition)->spa_gross)
365 #define S_SPA_GLI(a) S_PA_LI((((a)->ob_self).ob_skewpartition)->spa_gross)
366 #define S_SPA_GI(a,i) S_PA_I(((((a)->ob_self).ob_skewpartition)->spa_gross),i)
367 #define S_SPA_GII(a,i) S_PA_II(((((a)->ob_self).ob_skewpartition)->spa_gross),i)
368 #define S_SPA_GS(a) S_PA_S((((a)->ob_self).ob_skewpartition)->spa_gross)
369 #define S_SPA_K(a) ((((a)->ob_self).ob_skewpartition)->spa_klein)
370 #define S_SPA_KL(a) S_PA_L((((a)->ob_self).ob_skewpartition)->spa_klein)
371 #define S_SPA_KLI(a) S_PA_LI((((a)->ob_self).ob_skewpartition)->spa_klein)
372 #define S_SPA_KI(a,i) S_PA_I(S_SPA_K(a),i)
373 #define S_SPA_KII(a,i) S_PA_II(S_SPA_K(a),i)
374 #define S_SPA_KS(a) S_PA_S((((a)->ob_self).ob_skewpartition)->spa_klein)
375 
376 #define S_T_S(a) ((((a)->ob_self).ob_tableaux)->t_self)
377 #define S_T_U(a) ((((a)->ob_self).ob_tableaux)->t_umriss)
378 #define S_T_IJ(a,i,j) S_M_IJ(S_T_S(a),i,j)
379 #define S_T_H(a) S_M_H(S_T_S(a))
380 #define S_T_HI(a) S_M_HI(S_T_S(a))
381 #define S_T_L(a) S_M_L(S_T_S(a))
382 #define S_T_LI(a) S_M_LI(S_T_S(a))
383 #define S_T_IJI(a,i,j) S_M_IJI(S_T_S(a),i,j)
384 #define S_T_UG(a) S_SPA_G(S_T_U(a))
385 #define S_T_UGLI(a) S_SPA_GLI(S_T_U(a))
386 #define S_T_UGL(a) S_SPA_GL(S_T_U(a))
387 #define S_T_UGII(a,i) S_SPA_GII(S_T_U(a),i)
388 #define S_T_UGI(a,i) S_SPA_GI(S_T_U(a),i)
389 #define S_T_UK(a) S_SPA_K(S_T_U(a))
390 #define S_T_UKLI(a) S_SPA_KLI(S_T_U(a))
391 #define S_T_UKL(a) S_SPA_KL(S_T_U(a))
392 #define S_T_UKII(a,i) S_SPA_KII(S_T_U(a),i)
393 #define S_T_UKI(a,i) S_SPA_KI(S_T_U(a),i)
394 #define S_T_UL(a) S_PA_L(S_T_U(a))
395 #define S_T_ULI(a) S_PA_LI(S_T_U(a))
396 #define S_T_UII(a,i) S_PA_II(S_T_U(a),i)
397 #define S_T_UI(a,i) S_PA_I(S_T_U(a),i)
398 #define TABLEAUXP(a) (S_O_K(a) == TABLEAUX)
399 
400 #define S_W_I(a,i) S_V_I(a,i)
401 #define S_W_II(a,i) S_V_II(a,i)
402 #define S_W_L(a) S_V_L(a)
403 #define S_W_LI(a) S_V_LI(a)
404 #define S_W_S(a) S_V_S(a)
405 #define S_LA_I(a,i) S_V_I(a,i)
406 #define S_LA_II(a,i) S_V_II(a,i)
407 #define S_LA_L(a) S_V_L(a)
408 #define S_LA_LI(a) S_V_LI(a)
409 #define S_LA_S(a) S_V_S(a)
410 #define b_l_w(a,b) (b_l_v(a,b),C_O_K(b,WORD),OK)
411 #define m_l_w(a,b) (m_l_v(a,b),C_O_K(b,WORD),OK)
412 #define m_il_w(a,b) (m_il_v(a,b),C_O_K(b,WORD),OK)
413 #define m_il_nw(a,b) (m_il_nv(a,b),C_O_K(b,WORD),OK)
414 #define m_l_nw(a,b) (m_l_nv(a,b),C_O_K(b,WORD),OK)
415 #define b_l_la(a,b) (b_l_v(a,b),C_O_K(b,LAURENT),OK)
416 #define m_l_la(a,b) (m_l_v(a,b),C_O_K(b,LAURENT),OK)
417 #define m_il_la(a,b) (m_il_v(a,b),C_O_K(b,LAURENT),OK)
418 #define m_il_nla(a,b) (m_il_nv(a,b),C_O_K(b,LAURENT),OK)
419 #define m_l_nla(a,b) (m_l_nv(a,b),C_O_K(b,LAURENT),OK)
420 
421 #define S_SC_D(a) ((((a)->ob_self).ob_symchar)->sy_dimension)
422 #define S_SC_DI(a) S_I_I((((a)->ob_self).ob_symchar)->sy_dimension)
423 #define S_SC_W(a) ((((a)->ob_self).ob_symchar)->sy_werte)
424 #define S_SC_WI(a,i) S_V_I(((((a)->ob_self).ob_symchar)->sy_werte),i)
425 #define S_SC_WII(a,i) S_V_II(((((a)->ob_self).ob_symchar)->sy_werte),i)
426 #define S_SC_P(a) ((((a)->ob_self).ob_symchar)->sy_parlist)
427 #define S_SC_PI(a,i) S_V_I(((((a)->ob_self).ob_symchar)->sy_parlist),i)
428 #define S_SC_PLI(a) S_V_LI(((((a)->ob_self).ob_symchar)->sy_parlist))
429 #define S_SC_WLI(a) S_V_LI(((((a)->ob_self).ob_symchar)->sy_werte))
430 
431 /* MD */
432 #define S_N_S(a) ((((a)->ob_self).ob_number)->n_self)
433 #define C_N_S(a,b) (((((a)->ob_self).ob_number)->n_self) = (b))
434 #define S_N_D(a) (((((a)->ob_self).ob_number)->n_data).o_data)
435 #define C_N_D(a,b) ((((((a)->ob_self).ob_number)->n_data).o_data) = (b))
436 #define S_N_DC(a) (((((a)->ob_self).ob_number)->n_data).c_data)
437 #define S_N_DCI(a) ((((((a)->ob_self).ob_number)->n_data).c_data)->index)
438 #define S_N_DCII(a) S_I_I(S_N_DCI(a))
439 #define S_N_DCD(a) ((((((a)->ob_self).ob_number)->n_data).c_data)->deg)
440 #define S_N_DCP(a) ((((((a)->ob_self).ob_number)->n_data).c_data)->poly)
441 #define    OBJECTREAD_CYCLO(f,a)    objectread_number((f),(a),CYCLOTOMIC)
442 #define    OBJECTREAD_SQRAD(f,a)    objectread_number((f),(a),SQ_RADICAL)
443 #define    EINSP_MONOPOLY(a)    eq_fieldobject_int(MONOPOLY,(a),1L)
444 #define    EINSP_CYCLO(a)        eq_fieldobject_int(CYCLOTOMIC,(a),1L)
445 #define    EINSP_SQRAD(a)        eq_fieldobject_int(SQ_RADICAL,(a),1L)
446 #define    NEGEINSP_MONOPOLY(a)    eq_fieldobject_int(MONOPOLY,(a),-1L)
447 #define    NEGEINSP_CYCLO(a)    eq_fieldobject_int(CYCLOTOMIC,(a),-1L)
448 #define    NEGEINSP_SQRAD(a)    eq_fieldobject_int(SQ_RADICAL,(a),-1L)
449 
450 
451 
452 
453 #define evenp(a) even(a)
454 #define oddp(a) odd(a)
455 #define first_ym(a,b) ym_min(a,b)
456 
457 #define addinvers_schubert(a,b) addinvers_polynom(a,b)
458 #define addinvers_schur(a,b) addinvers_polynom(a,b)
459 #define einsp_schur(a) einsp_symfunc(a)
460 #define add_apply_schur(a,b) add_apply_symfunc(a,b)
461 #define add_apply_schur_schur(a,b) add_apply_symfunc_symfunc(a,b)
462 #define m_part_schur(a,b) m_skn_s(a,cons_eins,NULL,b)
463 
464 /* for MONOMIAL */
465 #define m_v_mon(a,b) (m_v_s(a,b),C_O_K(b,MONOMIAL),OK)
466 #define b_skn_mon(a,b,c,d) (b_skn_s(a,b,c,d),C_O_K(d,MONOMIAL),OK)
467 #define m_skn_mon(a,b,c,d) (m_skn_s(a,b,c,d),C_O_K(d,MONOMIAL),OK)
468 #define addinvers_monomial(a,b) addinvers_polynom(a,b)
469 #define add_apply_monomial(a,b) add_apply_symfunc(a,b)
470 #define add_apply_monomial_monomial(a,b) add_apply_symfunc_symfunc(a,b)
471 #define m_part_monomial(a,b) m_skn_mon(a,cons_eins,NULL,b)
472 #define einsp_monomial(a) einsp_symfunc(a)
473 
474 /* for ELM_SYM */
475 #define m_v_e(a,b) (m_v_s(a,b),C_O_K(b,ELM_SYM),OK)
476 #define add_monom_elmsym(a,b,c) add_monom_schur(a,b,c)
477 #define addinvers_elmsym(a,b) addinvers_polynom(a,b)
478 #define b_skn_e(a,b,c,d) (b_skn_s(a,b,c,d),C_O_K(d,ELM_SYM),OK)
479 #define m_skn_e(a,b,c,d) (m_skn_s(a,b,c,d),C_O_K(d,ELM_SYM),OK)
480 #define add_apply_elmsym(a,b) add_apply_symfunc(a,b)
481 #define add_apply_elmsym_elmsym(a,b) add_apply_symfunc_symfunc(a,b)
482 #define m_part_elmsym(a,b) m_skn_e(a,cons_eins,NULL,b)
483 #define einsp_elmsym(a) einsp_symfunc(a)
484 
485 /* for POW_SYM */
486 #define m_v_ps(a,b) (m_v_s(a,b),C_O_K(b,POW_SYM),OK)
487 #define add_monom_powsym(a,b,c) add_monom_schur(a,b,c)
488 #define addinvers_powsym(a,b) addinvers_polynom(a,b)
489 #define b_skn_ps(a,b,c,d) (b_skn_s(a,b,c,d),C_O_K(d,POW_SYM),OK)
490 #define m_skn_ps(a,b,c,d) (m_skn_s(a,b,c,d),C_O_K(d,POW_SYM),OK)
491 #define compute_powsym_with_alphabet(a,b,c) \
492     compute_power_with_alphabet(a,b,c)
493 #define add_apply_powsym(a,b) add_apply_symfunc(a,b)
494 #define add_apply_powsym_powsym(a,b) add_apply_symfunc_symfunc(a,b)
495 #define m_part_powsym(a,b) m_skn_ps(a,cons_eins,NULL,b)
496 #define einsp_powsym(a) einsp_symfunc(a)
497 
498 /* for HOM_SYM */
499 #define m_v_h(a,b) (m_v_s(a,b),C_O_K(b,HOM_SYM),OK)
500 #define add_monom_homsym(a,b,c) add_monom_schur(a,b,c)
501 #define addinvers_homsym(a,b) addinvers_schur(a,b)
502 #define b_skn_h(a,b,c,d) (b_skn_s(a,b,c,d),C_O_K(d,HOM_SYM),OK)
503 #define m_skn_h(a,b,c,d) (m_skn_s(a,b,c,d),C_O_K(d,HOM_SYM),OK)
504 #define compute_homsym_with_alphabet(a,b,c) \
505     compute_complete_with_alphabet(a,b,c)
506 #define add_apply_homsym(a,b) add_apply_symfunc(a,b)
507 #define add_apply_homsym_homsym(a,b) add_apply_symfunc_symfunc(a,b)
508 #define m_part_homsym(a,b) m_skn_h(a,cons_eins,NULL,b)
509 #define einsp_homsym(a) einsp_symfunc(a)
510 
511 /* for nc.c */
512 #define S_NC_GL(a) S_V_I(a,0L)
513 #define S_NC_C(a) S_V_I(a,1L)
514 #define SYM_GL(a) (S_V_II(a,0L)==1L) /* true falls sym */
515 #define ALT_GL(a) (S_V_II(a,0L)==2L) /* true falls alt */
516 #define KRANZ_GL(a) (S_V_II(a,0L)==3L) /* true falls kranz */
517 #define CYCLIC_GL(a) (S_V_II(a,0L)==4L) /* true falls cyclic */
518 #define GLNQ_GL(a) (S_V_II(a,0L)==5L) /* true falls gl(n,q) */
519 #define S_GL_SYM_A(a) S_V_I(a,1L)
520 #define S_GL_ALT_A(a) S_V_I(a,1L)
521 #define S_GL_CYCLIC_A(a) S_V_I(a,1L)
522 #define S_GL_KRANZ_A(a) S_GL_SYM_A(S_V_I(S_V_I(a,1L),0L))
523 #define S_GL_KRANZ_GLA(a) (S_V_I(S_V_I(a,1L),0L))
524 #define S_GL_KRANZ_B(a) S_GL_SYM_A(S_V_I(S_V_I(a,1L),1L))
525 #define S_GL_KRANZ_GLB(a) (S_V_I(S_V_I(a,1L),1L))
526 #define S_GL_GLNQ_N(a) (S_V_I(S_V_I(a,1L),0L))
527 #define S_GL_GLNQ_Q(a) (S_V_I(S_V_I(a,1L),1L))
528 
529 
530 
531 /* for ga.c */
532 
533 #define m_skn_gral(a,b,c,d) ( m_skn_po(a,b,c,d), C_O_K(d,GRAL), OK )
534 #define b_skn_gral(a,b,c,d) ( b_skn_po(a,b,c,d), C_O_K(d,GRAL), OK )
535 #define hplus_hecke(a,b) hplus(a,b)
536 
537 /* for ff.c */
538 #define S_FF_C(a) S_V_I(a,0)
539 #define S_FF_CI(a) S_V_II(a,0)
540 #define S_FF_IP(a) S_O_S(S_V_I(a,1)).ob_INTpointer
541 #define C_FF_IP(a,p) S_O_S(S_V_I(a,1)).ob_INTpointer=(INT*)p
542 #define S_FF_II(a,i) *((S_O_S(S_V_I(a,1)).ob_INTpointer) + i)
543 #define S_FF_DI(a) S_FF_II(a,0)
544 #define S_FF_ME(a) S_V_I(a,2)
545 #define S_FF_MEI(a) S_V_II(a,2)
546 
547 /* for galois.c */
548 #define S_GR_CI(a) S_V_II(a,1)
549 #define S_GR_C(a) S_V_I(a,1)
550 #define S_GR_D(a) S_V_I(a,0)
551 #define S_GR_DI(a) S_V_II(a,0)
552 
553 
554 
555 /* for longint */
556 
557 extern INT loc_index, loc_size,loc_counter;
558 extern struct loc **loc_speicher;
559 
560 extern INT longint_speicherindex,mem_counter_loc,longint_speichersize;
561 extern struct longint **longint_speicher;
562 
563 
564 
565 #define FREE_LOC(a) \
566     FREE_MEMMANAGER(struct loc *,loc_speicher,loc_index,loc_size,loc_counter,a)
567 
568 #define LOCSGN(lx) ( ((lx)->w2 || (lx)->w1 || (lx)->w0 ) ? 1 : 0 )
569 
570 #define LOCNULL(lx) ((lx)->w0=0,(lx)->w1=0,(lx)->w2=0)
571 
572 #define LOCHOLE(aloc) \
573 do {\
574 CALLOC_MEMMANAGER(struct loc,loc_speicher,loc_index,loc_counter,*(aloc));\
575 LOCNULL(*(aloc));\
576 (*(aloc))->nloc = NULL;\
577 } while(0)
578 
579 #define GANZDEFINIERE(x) \
580 do {\
581  (x)->signum = (signed char)0;\
582     (x)->laenge = (INT)1;\
583      (x)->floc = NULL;\
584       LOCHOLE(&((x)->floc)) ;\
585 } while (0)
586 
587 #define INTGANZ(x) \
588     ( x->signum < 0 ?\
589       - x->floc->w0 - x->floc->w1 * LO_B - x->floc->w2 * LO_B * LO_B :\
590       (x->floc->w0&BMINUSEINS)\
591               +(x->floc->w1&BMINUSEINS) * LO_B\
592               +(x->floc->w2&BMINUSEINS) * LO_B * LO_B )
593 
594 #define T_LONGINT_INT(a)\
595     if ((S_O_S(a).ob_longint) ->laenge == 1)\
596         if (S_O_S(a).ob_longint ->floc ->w2 <= 1) /* AK 051101 */\
597         {\
598         INT wert = INTGANZ(S_O_S(a).ob_longint);\
599         FREESELF(a);\
600         M_I_I(wert,a);\
601         }
602 
603 
604 #define INIT_LONGINT(l) \
605  do { \
606  C_O_K(l,LONGINT); \
607  CALLOC_MEMMANAGER(struct longint, longint_speicher,\
608                    longint_speicherindex,mem_counter_loc,(l->ob_self).ob_longint);\
609  GANZDEFINIERE(S_O_S(l).ob_longint);\
610  } while(0)
611 
612 
613 
614 #define t_INTEGER_LONGINT(a,b) m_i_longint(a,b)
615 
616 #ifdef FAST
617 #define SYMCHECK(a,b)
618 #define COP(text,object)
619 #define CTO(type,text,object)
620 #define CTTO(type,type2,text,object)
621 #define CTTTO(type,type2,type3,text,object)
622 #define CTTTTO(type,type2,type3,type4,text,object)
623 #define CTTTTTO(type,type2,type3,type4,type5,text,object)
624 #define CTTTTTTO(type,type2,type3,type4,type5,type6,text,object)
625 #define CTTTTTTTO(type,type2,type3,type4,type5,type6,type7,text,object)
626 #define CTTTTTTTTO(type,type2,type3,type4,type5,type6,type7,type8,text,object)
627 #define TCTO(type,text,object)
628 #define TCTTO(type,type2,text,object)
629 #define TCTTTO(type,type2,type3,text,object)
630 #define TCTTTTO(type,type2,type3,type4,text,object)
631 #define TCTTTTTO(type,type2,type3,type4,type5,text,object)
632 #define TCTTTTTTO(type,type2,type3,type4,type5,type6,text,object)
633 #define TCTTTTTTTO(type,type2,type3,type4,type5,type6,type7,text,object)
634 #define TCTTTTTTTTO(type,type2,type3,type4,type5,type6,type7,type8,text,object)
635 #else
636 #define SYMCHECK(a,b) if (a) { erg += error(b); goto endr_ende; }
637 #define COP(b,a) if (((void *)a) == NULL)  { erg += null_object(b); goto endr_ende;}
638 #define CTO(type,text,object) \
639         if (type == INTTYPE);\
640         else { \
641             COP(text,object);\
642             if (type == ANYTYPE);\
643             else if(S_O_K(object) != type) {\
644                 erg += wrong_type_oneparameter(text,object);\
645                 goto endr_ende;\
646                }\
647             }
648 
649 #define CTTO(type,type2,text,object) \
650         COP(text,object);\
651         if((S_O_K(object) != type)&&(S_O_K(object) != type2)) {\
652             erg += wrong_type_oneparameter(text,object);\
653             goto endr_ende;\
654         }
655 
656 #define CTTTO(type,type2,type3,text,object) \
657         COP(text,object);\
658         if((S_O_K(object) != type)&&(S_O_K(object) != type2)\
659                 &&(S_O_K(object) != type3)) {\
660             erg += wrong_type_oneparameter(text,object);\
661             goto endr_ende; }
662 #define CTTTTO(type,type2,type3,type4,text,object) \
663         COP(text,object);\
664         if(               (S_O_K(object) != type)\
665                                 &&(S_O_K(object) != type2)\
666                 &&(S_O_K(object) != type3) \
667                                 &&(S_O_K(object) != type4)) {\
668             erg += wrong_type_oneparameter(text,object);\
669             goto endr_ende; }
670 #define CTTTTTO(type,type2,type3,type4,type5,text,object) \
671         COP(text,object);\
672         if(       (S_O_K(object) != type)\
673                 &&(S_O_K(object) != type2)\
674                 &&(S_O_K(object) != type3)\
675                 &&(S_O_K(object) != type4)\
676                 &&(S_O_K(object) != type5)        ) {\
677             erg += wrong_type_oneparameter(text,object);\
678             goto endr_ende; }
679 #define CTTTTTTO(type,type2,type3,type4,type5,type6,text,object) \
680         COP(text,object);\
681         if(       (S_O_K(object) != type)\
682                 &&(S_O_K(object) != type2)\
683                 &&(S_O_K(object) != type3)\
684                 &&(S_O_K(object) != type4)\
685                 &&(S_O_K(object) != type5)\
686                 &&(S_O_K(object) != type6)        ) {\
687             erg += wrong_type_oneparameter(text,object);\
688             goto endr_ende; }
689 
690 #define CTTTTTTTO(type,type2,type3,type4,type5,type6,type7,text,object) \
691         COP(text,object);\
692         if(       (S_O_K(object) != type)\
693                 &&(S_O_K(object) != type2)\
694                 &&(S_O_K(object) != type3)\
695                 &&(S_O_K(object) != type4)\
696                 &&(S_O_K(object) != type5)\
697                 &&(S_O_K(object) != type7)\
698                 &&(S_O_K(object) != type6)        ) {\
699             erg += wrong_type_oneparameter(text,object);\
700             goto endr_ende; }
701 
702 #define CTTTTTTTTO(type,type2,type3,type4,type5,type6,type7,type8,text,object) \
703         COP(text,object);\
704         if(       (S_O_K(object) != type)\
705                 &&(S_O_K(object) != type2)\
706                 &&(S_O_K(object) != type3)\
707                 &&(S_O_K(object) != type4)\
708                 &&(S_O_K(object) != type5)\
709                 &&(S_O_K(object) != type7)\
710                 &&(S_O_K(object) != type8)\
711                 &&(S_O_K(object) != type6)        ) {\
712             erg += wrong_type_oneparameter(text,object);\
713             goto endr_ende; }
714 
715 
716 
717 #define TCTO(type,text,object) \
718        CTO(type,text,object);\
719        if (type == INTTYPE)  printf("%s= %ld\n",text,(INT)object);\
720        else { printf("%s=",text);println(object);}
721 
722 #define TCTTO(type,type2,text,object) \
723        CTTO(type,type2,text,object);\
724        printf("%s=",text);println(object);
725 
726 #define TCTTTO(type,type2,type3,text,object) \
727         COP(text,object);\
728         if((S_O_K(object) != type)&&\
729             (S_O_K(object) != type3)&&(S_O_K(object) != type2)) {\
730             erg += wrong_type_oneparameter(text,object);\
731             goto endr_ende;\
732        }\
733        printf("%s=",text);println(object);
734 
735 #define TCTTTTO(type,type2,type3,type4,text,object) \
736         COP(text,object);\
737         if((S_O_K(object) != type)&&(S_O_K(object) != type4)&&\
738             (S_O_K(object) != type3)&&(S_O_K(object) != type2)) {\
739             erg += wrong_type_oneparameter(text,object);\
740             goto endr_ende;\
741        }\
742        printf("%s=",text);println(object);
743 
744 #define TCTTTTTO(type,type2,type3,type4,type5,text,object) \
745         COP(text,object);\
746         if((S_O_K(object) != type)&&(S_O_K(object) != type4)&&\
747             (S_O_K(object) != type5)&&\
748             (S_O_K(object) != type3)&&(S_O_K(object) != type2)) {\
749             erg += wrong_type_oneparameter(text,object);\
750             goto endr_ende;\
751        }\
752        printf("%s=",text);println(object);
753 
754 #define TCTTTTTTO(type,type2,type3,type4,type5,type6,text,object) \
755         COP(text,object);\
756         if((S_O_K(object) != type)&&(S_O_K(object) != type4)&&\
757             (S_O_K(object) != type5)&&(S_O_K(object) != type6)&&\
758             (S_O_K(object) != type3)&&(S_O_K(object) != type2)) {\
759             erg += wrong_type_oneparameter(text,object);\
760             goto endr_ende;\
761        }\
762        printf("%s=",text);println(object);
763 
764 #define TCTTTTTTTO(type,type2,type3,type4,type5,type6,type7,text,object) \
765         COP(text,object);\
766         if((S_O_K(object) != type)&&(S_O_K(object) != type4)&&\
767             (S_O_K(object) != type5)&&(S_O_K(object) != type6)&&\
768             (S_O_K(object) != type7)&&\
769             (S_O_K(object) != type3)&&(S_O_K(object) != type2)) {\
770             erg += wrong_type_oneparameter(text,object);\
771             goto endr_ende;\
772        }\
773        printf("%s=",text);println(object);
774 
775 #define TCTTTTTTTTO(type,type2,type3,type4,type5,type6,type7,type8,text,object) \
776         COP(text,object);\
777         if((S_O_K(object) != type)&&(S_O_K(object) != type4)&&\
778             (S_O_K(object) != type5)&&(S_O_K(object) != type6)&&\
779             (S_O_K(object) != type7)&&(S_O_K(object) != type8)&&\
780             (S_O_K(object) != type3)&&(S_O_K(object) != type2)) {\
781             erg += wrong_type_oneparameter(text,object);\
782             goto endr_ende;\
783        }\
784        printf("%s=",text);println(object);
785 
786 
787 #endif
788 #define C2R(a,b,t,c) if (check_result_2(a,b,t,c) \
789     != NORESULT) goto strlabel
790 #define S2R(a,b,t,c) erg += store_result_2(a,b,t,c);strlabel:
791 #define C3R(a,b,d,t,c) if (check_result_3(a,b,d,t,c)\
792      != NORESULT) goto strlabel
793 #define S3R(a,b,d,t,c)  erg += store_result_3(a,b,d,t,c);strlabel:
794 #define C5R(a,b,d,e,f,t,c) if (check_result_5(a,b,d,e,f,t,c)\
795      != NORESULT) goto strlabel
796 #define S5R(a,b,d,e,f,t,c)  erg += store_result_5(a,b,d,e,f,t,c);strlabel:
797 #define C0R(t,c) if (check_result_0(t,c)\
798      != NORESULT) goto strlabel
799 #define S0R(t,c) erg += store_result_0(t,c);strlabel:
800 #define C1R(a,t,c) if (check_result_1(a,t,c)\
801      != NORESULT) goto strlabel
802 #define S1R(a,t,c) erg += store_result_1(a,t,c);strlabel:
803 #define WTO(text,b) erg += wrong_type_oneparameter(text,b)
804 #define WTT(text,b,c) erg += wrong_type_twoparameter(text,b,c)
805 #define EDC(b) error_during_computation_code(b,erg)
806 #define ENDR(a) endr_ende: if (erg != OK) EDC(a); return erg;
807 #define ENDO(a) endr_ende: if (erg != OK) EDC(a); return (OP) NULL;
808 #define ENDTYP(a,t) endr_ende: if (erg != OK) EDC(a); return (t) NULL;
809 #define NYI(b) not_yet_implemented(b)
810 #define NOP(a) null_object(a)
811 #define EOP(text,object) \
812         COP(text,object);\
813         if (EMPTYP(object)) {erg += empty_object(text); goto endr_ende;}
814 #define FATALERROR(text) fatal_error(text)
815 #define CH2D(a,b) if ((a) == (b) ) { erg += equal_2_error(); goto endr_ende;}
816 
817 #define CE2A(a,b,f) if (check_equal_2a(a,b,f,&erg) == EQUAL) goto endr_ende;
818 
819 #define CE3(a,b,c,f) \
820     if ((a==c) && (b == c))\
821         {\
822         OP checkequal3_d = callocobject();\
823         *checkequal3_d = *c;\
824         C_O_K(c,EMPTY);\
825         erg += (*f)(checkequal3_d,checkequal3_d,c);\
826         erg += freeall(checkequal3_d);\
827         goto endr_ende;\
828         }\
829     else if (a==c)\
830         {\
831         OP checkequal3_d = callocobject();\
832         *checkequal3_d = *c;\
833         C_O_K(c,EMPTY);\
834         erg += (*f)(checkequal3_d,b,c);\
835         erg += freeall(checkequal3_d);\
836         goto endr_ende;\
837         }\
838     else if (b==c)\
839         {\
840         OP checkequal3_d = callocobject();\
841         *checkequal3_d = *c;\
842         C_O_K(c,EMPTY);\
843         erg += (*f)(a,checkequal3_d,c);\
844         erg += freeall(checkequal3_d);\
845         goto endr_ende;\
846         }\
847     else\
848         {\
849         if (c != NULL)\
850             FREESELF(c);\
851         }
852 
853 #define CE4(a,b,c,d,f) \
854     if (check_equal_4(a,b,c,d,\
855     f,&erg) == EQUAL) goto endr_ende;
856 #define CE5(a,b,c,d,e,f) \
857     if (check_equal_5(a,b,c,d,e,\
858     f,&erg) == EQUAL) goto endr_ende;
859 
860 #define GET_BIT_I(a,i) (((*a) >> (i))&1)
861 /*
862 #define GET_BV_I(a,i) ((*(((unsigned char *)S_V_S(a) ) + ((i)>>3))  >> ((i)&7))&1)
863 */
864 #define GET_BV_I(a,i) ((*(((unsigned char *)S_V_S(a) ) + ((i)>>3))  >> (7-((i)&7))&1))
865 #define GET_BV_B(a,i) (*(((unsigned char *)S_V_S(a) ) + (i)>>3))
866 /*
867 #define UNSET_BV_I(a,i) (*((unsigned char *)S_V_S(a)  + ((i)>>3))  &= (~(1 << ((i)&7))))
868 */
869 #define UNSET_BV_I(a,i) (\
870     *((unsigned char *)S_V_S(a)  + ((i)>>3))  \
871     &= (~(1 << (7-((i)&7))       )           )\
872     )
873 #define UNSET_BIT_I(a,i) ((*(a))  &= (~(1 << (i))))
874 /*
875 #define SET_BV_I(a,i) ( *((unsigned char *)S_V_S(a)  + ((i)>>3))  |= (1 << ((i)&7)))
876 */
877 #define SET_BV_I(a,i) ( *((unsigned char *)S_V_S(a)  + ((i)>>3))  |= (128 >> ((i)&7)))
878 #define SET_BIT_I(a,i) ( *(a)  |= (1 << (i)))
879 #define S_BV_LI(a) (S_V_LI(a) % 8 == 0 ? S_V_LI(a)>>3 : (S_V_LI(a)>>3) +1)
880 
881 
882 #define cons_two cons_zwei
883 #define ANFANG \
884 int main()\
885 {\
886 OP a,b,c,d,e,f,g,h;\
887 INT i,j,k;\
888 OP z=NULL;\
889 anfang();\
890 a=callocobject();\
891 b=callocobject();\
892 c=callocobject();\
893 d=callocobject();\
894 e=callocobject();\
895 f=callocobject();\
896 g=callocobject();\
897 h=callocobject();
898 
899 #define ENDE \
900 freeall(a);\
901 freeall(b);\
902 freeall(c);\
903 freeall(d);\
904 freeall(e);\
905 freeall(f);\
906 freeall(g);\
907 freeall(h);\
908 ende();\
909 i=j=k=0;z=NULL;\
910 return 0;\
911 }
912 #define SYM_BEGIN ANFANG
913 #define SYM_END ENDE
914 
915 #define inhalt(a,b) content(a,b)
916 #define inhalt_tableaux(a,b) content_tableaux(a,b)
917 #define inhalt_word(a,b) content_word(a,b)
918 
919 
920 
921 
922 
923 
924 
925 
926 
927 /* FOR ALL macros */
928 #define FORALL_HASHTABLE_PRE060202(z,a,B)\
929 do { \
930     OP FORALL_E;INT I,J; \
931     for (FORALL_E=S_V_S(a), I=0; I<S_V_LI(a); I++,FORALL_E++) \
932         {\
933         if (S_O_K(FORALL_E)==VECTOR)\
934            for (J=0;J<S_V_LI(FORALL_E) ;J++) \
935                { \
936                z = S_V_I(FORALL_E,J); \
937                if (not EMPTYP(z)) {B;} \
938                } \
939         }\
940 } while(0)
941 
942 #define FORALL_HASHTABLE(z,a,B)\
943 do { \
944     OP FORALL_E;INT I,J; \
945     for (FORALL_E=S_V_S(a), I=0; I<S_V_LI(a); I++,FORALL_E++) \
946         {\
947         if (S_O_K(FORALL_E)==VECTOR)\
948            for (J=0,z=S_V_S(FORALL_E);J<S_V_LI(FORALL_E) ;J++,z++) \
949                { if (not EMPTYP(z)) {B;} } \
950         else if (S_I_I(FORALL_E) == -1) break;\
951         else { I = S_I_I(FORALL_E)-1; FORALL_E=S_V_I(a,I); } \
952         }\
953 } while(0)
954 
955 
956 #define FORALL(z,a,B)\
957 if (S_O_K(a) == HASHTABLE) \
958 do { \
959     OP FORALL_E;INT I,J; \
960     for (FORALL_E=S_V_S(a), I=0; I<S_V_LI(a); I++,FORALL_E++) \
961         {\
962         if (S_O_K(FORALL_E)==VECTOR)\
963            for (J=0,z=S_V_S(FORALL_E);J<S_V_LI(FORALL_E) ;J++,z++) \
964                { if (not EMPTYP(z)) {B;} }\
965         else if (S_I_I(FORALL_E) == -1) break;\
966         else { I = S_I_I(FORALL_E)-1; FORALL_E=S_V_I(a,I); } \
967         }\
968 } while(0);\
969 else if (LISTP(a)) { \
970             OP FORALL_E; \
971             FORALL_E=a; \
972             while (FORALL_E!=NULL) \
973                 { z = S_L_S(FORALL_E); \
974                 if (z != NULL) {B;}; \
975                 FORALL_E=S_L_N(FORALL_E); } \
976             }\
977 else if (MATRIXP(a)) {\
978     INT I=S_M_HI(a)*S_M_LI(a)-1;\
979     for (z=S_M_S(a)+I;I>=0;I--,z--) {B;}\
980 }\
981 else if (VECTORP(a)) {\
982     INT I=S_V_LI(a)-1;\
983     for (z=S_V_S(a)+I;I>=0;I--,z--) {B;}\
984 }
985 
986 
987 
988 
989 
990 /* new macros for main functions */
991 
992 #define ABSOLUTE_INTEGER(a,b) \
993     M_I_I((S_I_I(a) > 0 ? S_I_I(a) : -S_I_I(a)), b)
994 
995 #define ADD_INTEGER(a,b,c) \
996     if (S_O_K(b) == INTEGER) erg += add_integer_integer(a,b,c);\
997     else if (S_O_K(b) == LONGINT) erg += add_longint_integer(b,a,c);\
998     else if (S_O_K(b) == BRUCH) erg += add_bruch_integer(b,a,c);\
999     else  erg += add_integer(a,b,c)
1000 
1001 #define ADD(a,b,c) \
1002 if (S_O_K(a) == INTEGER)    ADD_INTEGER(a,b,c); \
1003 else if (S_O_K(a) == LONGINT)  \
1004     {\
1005     if (S_O_K(b) == INTEGER) erg += add_longint_integer(a,b,c);\
1006     else if (S_O_K(b) == LONGINT) erg += add_longint_longint(b,a,c);\
1007     else  erg += add_longint(a,b,c);\
1008     }\
1009 else\
1010     erg += add(a,b,c)
1011 
1012 #define ADD_APPLY_INTEGER(a,b)\
1013         if (S_O_K(b) == INTEGER) erg += add_apply_integer_integer(a,b);\
1014         else if (S_O_K(b) == LONGINT) erg += add_apply_integer_longint(a,b);\
1015         else if (S_O_K(b) == BRUCH) erg += add_apply_integer_bruch(a,b);\
1016         else  erg += add_apply_integer(a,b)
1017 
1018 #define ADD_APPLY(a,b) \
1019     if (S_O_K(a) == INTEGER)  ADD_APPLY_INTEGER(a,b);\
1020     else if (S_O_K(a) == LONGINT)  \
1021         {\
1022         if (S_O_K(b) == INTEGER) erg += add_apply_longint_integer(a,b);\
1023         else if (S_O_K(b) == LONGINT) erg += add_apply_longint_longint(a,b);\
1024         else  erg += add_apply_longint(a,b);\
1025         }\
1026     else if (S_O_K(a) == BRUCH)  \
1027         {\
1028         if (S_O_K(b) == INTEGER) erg += add_apply_bruch_integer(a,b);\
1029         else if (S_O_K(b) == BRUCH) erg += add_apply_bruch_bruch(a,b);\
1030         else  erg += add_apply_bruch(a,b);\
1031         }\
1032     else if (S_O_K(a) == INTEGERVECTOR)  erg += add_apply_integervector(a,b);\
1033     else if (S_O_K(a) == POLYNOM)  erg += add_apply_polynom(a,b);\
1034     else if (S_O_K(a) == FF)  erg += add_apply_ff(a,b);\
1035     else\
1036         erg += add_apply(a,b)
1037 
1038 #define ADDINVERS_INTEGER(a,b) M_I_I(-S_I_I(a),b)
1039 
1040 #define ADDINVERS(a,b) \
1041 if (S_O_K(a) == INTEGER) ADDINVERS_INTEGER(a,b);\
1042 else if (S_O_K(a) == LONGINT) erg += addinvers_longint(a,b);\
1043 else if (S_O_K(a) == BRUCH) erg += addinvers_bruch(a,b);\
1044 else erg += addinvers(a,b)
1045 
1046 
1047 #define ADDINVERS_APPLY_LONGINT(a) erg += (GANZNEG(S_O_S(a).ob_longint),OK)
1048 #define ADDINVERS_APPLY_INTEGER(a) M_I_I( - S_I_I(a),a)
1049 
1050 #define ADDINVERS_APPLY(a)\
1051 if (S_O_K(a) == INTEGER) ADDINVERS_APPLY_INTEGER(a);\
1052 else if (S_O_K(a) == LONGINT) ADDINVERS_APPLY_LONGINT(a);\
1053 else if (S_O_K(a) == BRUCH) erg += addinvers_apply_bruch(a);\
1054 else if (S_O_K(a) == MONOM) erg += addinvers_apply_monom(a);\
1055 else erg += addinvers_apply(a)
1056 
1057 
1058 #define BINOM_POSINTEGER_POSINTEGER(a,b,c)\
1059 if (S_I_I(a) < BINOMLIMIT) {\
1060      M_I_I(  \
1061           (      (S_I_I(b)>S_I_I(a))     ? 0 :  binom_values [ S_I_I(a) ] [S_I_I(b)] )\
1062           ,c);\
1063     }\
1064 else binom(a,b,c)
1065 
1066 
1067 /*
1068 #ifdef SYMMAGMA
1069 #define CALLOCOBJECT() \
1070        ( (freeall_speicherposition >= 0L) ? \
1071          freeall_speicher[freeall_speicherposition--] : \
1072          mem_calloc(sizeof(struct object),1) )
1073 #define CALLOCOBJECT() (OP)mem_calloc(sizeof(struct object),1)
1074 #else
1075 */
1076 /* freeall_speicherposition is next free object */
1077 #define CALLOCOBJECT() \
1078        ( (freeall_speicherposition >= 0L) ? \
1079          freeall_speicher[freeall_speicherposition--] : \
1080          callocobject_fast() )
1081 /*
1082 #endif
1083 */
1084 
1085 #define CALLOCOBJECT2(a,b) \
1086 do { a=CALLOCOBJECT(); b=CALLOCOBJECT(); } while(0)
1087 
1088 #define CALLOCOBJECT3(a,b,c) \
1089 do { a=CALLOCOBJECT(); b=CALLOCOBJECT();c=CALLOCOBJECT(); } while(0)
1090 
1091 #define CALLOCOBJECT4(a,b,c,d) \
1092 do { a=CALLOCOBJECT(); b=CALLOCOBJECT();c=CALLOCOBJECT(); d=CALLOCOBJECT();} while(0)
1093 
1094 #define CALLOCOBJECT5(a,b,c,d,e) \
1095 do { a=CALLOCOBJECT(); b=CALLOCOBJECT();\
1096      c=CALLOCOBJECT(); d=CALLOCOBJECT();\
1097      e=CALLOCOBJECT();} while(0)
1098 
1099 #define CALLOCOBJECT6(a,b,c,d,e,f) \
1100 do { a=CALLOCOBJECT(); b=CALLOCOBJECT();\
1101      c=CALLOCOBJECT(); d=CALLOCOBJECT();\
1102      e=CALLOCOBJECT(); f=CALLOCOBJECT(); } while(0)
1103 
1104 #define CALLOCOBJECT7(a,b,c,d,e,f,g) \
1105 do { a=CALLOCOBJECT(); b=CALLOCOBJECT();\
1106      c=CALLOCOBJECT(); d=CALLOCOBJECT();\
1107      e=CALLOCOBJECT(); f=CALLOCOBJECT(); \
1108      g=CALLOCOBJECT();} while(0)
1109 
1110 #define CALLOCOBJECT8(a,b,c,d,e,f,g,h) \
1111 do { a=CALLOCOBJECT(); b=CALLOCOBJECT();\
1112      c=CALLOCOBJECT(); d=CALLOCOBJECT();\
1113      e=CALLOCOBJECT(); f=CALLOCOBJECT();h=CALLOCOBJECT(); \
1114      g=CALLOCOBJECT();} while(0)
1115 
1116 #define CALLOCOBJECT9(a,b,c,d,e,f,g,h,i) \
1117 do { a=CALLOCOBJECT(); b=CALLOCOBJECT(); h=CALLOCOBJECT(); i=CALLOCOBJECT();\
1118      c=CALLOCOBJECT(); d=CALLOCOBJECT();\
1119      e=CALLOCOBJECT(); f=CALLOCOBJECT(); \
1120      g=CALLOCOBJECT();} while(0)
1121 
1122 #define COMP_INTEGER(a,b)\
1123     ( S_O_K(b) == INTEGER ? COMP_INTEGER_INTEGER(a,b) : \
1124        (S_O_K(b) == LONGINT ? - comp_longint_integer(b,a) : comp_integer(a,b) )\
1125     )
1126 
1127 #define COMP(a,b)\
1128     ( S_O_K(a) == INTEGER ? COMP_INTEGER(a,b) :\
1129        (S_O_K(a) == LONGINT ? comp_longint(a,b) : \
1130           (S_O_K(a) == INTEGERMATRIX ? comp_integermatrix(a,b) : \
1131              comp(a,b) \
1132           )\
1133        )\
1134     )
1135 
1136 #define COPY(a,b) \
1137     ( (S_O_K(a) == INTEGER) ? M_I_I(S_I_I(a),b):\
1138       ( (S_O_K(a) == LONGINT) ? copy_longint(a,b): \
1139         ( (S_O_K(a) == BRUCH) ? copy_bruch(a,b): \
1140           ( (S_O_K(a) == MONOM) ?  copy_monom(a,b): \
1141             ( (S_O_K(a) == PARTITION) ? copy_partition(a,b): \
1142               ( (S_O_K(a) == HASHTABLE)? copy_hashtable(a,b): \
1143                 ( (S_O_K(a) == MATRIX)? copy_matrix(a,b): \
1144                   ( (S_O_K(a) == INTEGERMATRIX)? copy_integermatrix(a,b): \
1145                       copy(a,b)\
1146                   )\
1147                 )\
1148               )\
1149             )\
1150           )\
1151         )\
1152       )\
1153     )
1154 
1155 #define CLEVER_COPY_INTEGER(a,b) \
1156 do { switch(S_O_K(b)) {\
1157         case INTEGER:\
1158         case EMPTY:\
1159              M_I_I(S_I_I(a),b);\
1160              break;\
1161         default:\
1162              FREESELF(b);\
1163              M_I_I(S_I_I(a),b);\
1164              break;\
1165         }\
1166 } while (0)
1167 
1168 #define CLEVER_COPY_FF(a,b) \
1169 do { switch(S_O_K(b)) {\
1170         case INTEGER:\
1171              C_O_K(b,EMPTY);\
1172         case EMPTY:\
1173              erg += copy_ff(a,b);\
1174              break;\
1175         case FF:\
1176              {\
1177              INT *ap,*bp,i;\
1178              COPY(S_FF_C(a),S_FF_C(b));\
1179              COPY(S_FF_ME(a),S_FF_ME(b));\
1180              ap =S_FF_IP(a);bp=S_FF_IP(b);\
1181              if (*ap != *bp)\
1182                  bp = (INT*) SYM_realloc(bp,(S_FF_DI(a)+1)*sizeof(INT));\
1183              for(i=0;i<=ap[0];i++) bp[i]=ap[i];\
1184              C_FF_IP(b,bp);\
1185              };\
1186              break;   \
1187         default:\
1188              FREESELF(b);\
1189              erg += copy_ff(a,b);\
1190              break;\
1191         }\
1192 } while (0)
1193 #define CLEVER_COPY_BRUCH(a,b) \
1194 do { switch(S_O_K(b)) {\
1195         case INTEGER:\
1196              C_O_K(b,EMPTY);\
1197         case EMPTY:\
1198              erg += copy_bruch(a,b);\
1199              break;\
1200         case BRUCH:\
1201              FREESELF(S_B_O(b));\
1202              FREESELF(S_B_U(b));\
1203              COPY(S_B_O(a),S_B_O(b));\
1204              COPY(S_B_U(a),S_B_U(b));\
1205              C_B_I(b,S_B_I(a));\
1206              break;\
1207         default:\
1208              FREESELF(b);\
1209              erg += copy_bruch(a,b);\
1210              break;\
1211         }\
1212 } while (0)
1213 
1214 #define CLEVER_COPY_LONGINT(a,b)\
1215 do { switch(S_O_K(b)) {\
1216         case INTEGER:\
1217              C_O_K(b,EMPTY);\
1218         case EMPTY:\
1219              erg += copy_longint(a,b);\
1220              break;\
1221         default:\
1222              FREESELF(b);\
1223              erg += copy_longint(a,b);\
1224              break;\
1225         }\
1226 } while(0)
1227 
1228 #define CLEVER_COPY_PARTITION(a,b)\
1229 do { switch(S_O_K(b)) {\
1230         case INTEGER:\
1231              C_O_K(b,EMPTY);\
1232         case EMPTY:\
1233              erg += copy_partition(a,b);\
1234              break;\
1235         case PARTITION:\
1236              FREESELF(S_PA_S(b));\
1237              if (S_O_K(S_PA_S(a))==INTEGERVECTOR) copy_integervector(S_PA_S(a),S_PA_S(b));\
1238              else COPY(S_PA_S(a),S_PA_S(b));\
1239              C_PA_K(b, S_PA_K(a));\
1240              C_PA_HASH(b, S_PA_HASH(a));\
1241              break;\
1242         default:\
1243              FREESELF(b);\
1244              erg += copy_partition(a,b);\
1245              break;\
1246         }\
1247 } while(0)
1248 
1249 
1250 
1251 #define CLEVER_COPY(a,b) \
1252 do { if (S_O_K(a) == INTEGER) CLEVER_COPY_INTEGER(a,b);\
1253 else if (S_O_K(a) == LONGINT) CLEVER_COPY_LONGINT(a,b);\
1254 else if (S_O_K(a) == BRUCH) CLEVER_COPY_BRUCH(a,b);\
1255 else if (S_O_K(a) == PARTITION) CLEVER_COPY_PARTITION(a,b);\
1256 else if (S_O_K(a) == FF) CLEVER_COPY_FF(a,b);\
1257 else { erg += copy(a,b); }\
1258 } while(0)
1259 
1260 
1261 
1262 #define DEC(a)\
1263 if (S_O_K(a) == INTEGER) DEC_INTEGER(a);\
1264 else if (S_O_K(a) == LONGINT) erg+= dec_longint(a);\
1265 else dec(a)
1266 
1267 #define EINSP_LONGINT(a)\
1268     (\
1269     ((S_O_S(a).ob_longint) ->floc ->w0 == 1) \
1270     &&\
1271     ((S_O_S(a).ob_longint) ->floc ->w1 == 0)\
1272     &&\
1273     ((S_O_S(a).ob_longint) ->floc ->w2 == 0)\
1274     &&\
1275     ((S_O_S(a).ob_longint) ->signum == 1)\
1276     &&\
1277     ((S_O_S(a).ob_longint) ->laenge == 1)\
1278     )
1279 
1280 
1281 #define EINSP(a)\
1282     ( S_O_K(a) == INTEGER ? EINSP_INTEGER(a): \
1283        ( S_O_K(a) == LONGINT ? EINSP_LONGINT(a) : \
1284           ( S_O_K(a) == BRUCH ?  EINSP_BRUCH(a) : \
1285             ( einsp(a) ) \
1286           ) \
1287        ) \
1288     )
1289 
1290 #define EVEN_INTEGER(a) (S_I_I(a) % 2 == 0)
1291 #define EVEN_LONGINT(a) \
1292      (\
1293      ((S_O_S(a).ob_longint) ->signum == 0) \
1294      ||\
1295      ((S_O_S(a).ob_longint) ->floc ->w0 % 2 == 0)\
1296      )
1297 
1298 #define EVEN(a) \
1299     ( S_O_K(a) == INTEGER ? (EVEN_INTEGER(a)) : \
1300        ( S_O_K(a) == LONGINT ? EVEN_LONGINT(a) : even(a) )\
1301     )
1302 
1303 #define FREE_EMPTY_OBJECT(a)\
1304     do {\
1305     CTO(EMPTY,"FREE_EMPTY_OBJECT(1)",a);\
1306     if (freeall_speichersize+SPEICHERSIZE <freeall_speichersize_max)\
1307         {\
1308         if (freeall_speicherposition+1  == freeall_speichersize) \
1309             {\
1310             freeall_speicher = (OP *) \
1311                 SYM_realloc(freeall_speicher,\
1312                             (freeall_speichersize+SPEICHERSIZE)*sizeof(OP));\
1313             if (freeall_speicher == NULL) {\
1314                 erg += error("no more memory in freeall");\
1315                 goto endr_ende;\
1316                 }\
1317             freeall_speichersize = freeall_speichersize+SPEICHERSIZE;\
1318             }\
1319         freeall_speicher[++freeall_speicherposition] = a;\
1320         }\
1321     else SYM_FREE(a);\
1322     } while(0)
1323 
1324 #define FREEALL_INTEGER(a) do { C_O_K(a,EMPTY); FREE_EMPTY_OBJECT(a); } while(0)
1325 #define FREESELF_INTEGERVECTOR(a) \
1326     do {\
1327         extern INT freevectorstruct();\
1328         if (S_V_LI(a) == (INT)1) FREEALL_INTEGER(S_V_S(a));\
1329         else if (S_V_LI(a) > (INT)0) SYM_free(S_V_S(a));\
1330         FREEALL_INTEGER(S_V_L(a));\
1331         freevectorstruct(S_O_S(a).ob_vector);\
1332         C_O_K(a,EMPTY);\
1333     } while(0)
1334 #define FREEALL_INTEGERVECTOR(a) do { \
1335     FREESELF_INTEGERVECTOR(a); FREE_EMPTY_OBJECT(a); } while(0)
1336 
1337 
1338 #define FREESELF(a) \
1339     if (S_O_K(a) == EMPTY);\
1340     else if (S_O_K(a) == INTEGER) C_O_K(a,EMPTY);\
1341     else if (S_O_K(a) == LONGINT)  erg += freeself_longint(a);  \
1342     else if (S_O_K(a) == BRUCH)  erg += freeself_bruch(a);  \
1343     else if (S_O_K(a) == PARTITION)  erg += freeself_partition(a);  \
1344     else if (S_O_K(a) == MATRIX)  erg += freeself_matrix(a);  \
1345     else if (S_O_K(a) == INTEGERMATRIX)  erg += freeself_integermatrix(a);  \
1346     else if (S_O_K(a) == MONOM)  FREESELF_MONOM(a);  \
1347     else if (S_O_K(a) == INTEGERVECTOR)  FREESELF_INTEGERVECTOR(a);  \
1348     else if (S_O_K(a) == VECTOR)  erg += freeself_vector(a);  \
1349     else if (S_O_K(a) == HASHTABLE)  erg += freeself_hashtable(a);  \
1350     else if (LISTP(a))  erg += freeself_list(a);  \
1351     else if (S_O_K(a) == PERMUTATION)  erg += freeself_permutation(a);  \
1352     else if (S_O_K(a) == SKEWPARTITION)  erg += freeself_skewpartition(a);  \
1353     else if (S_O_K(a) == FF)  erg += freeself_ff(a);  \
1354     else erg += freeself(a)
1355 
1356 #define FREESELF2(a,b) do { FREESELF(a); FREESELF(b); } while(0)
1357 #define FREESELF2(a,b) do { FREESELF(a); FREESELF(b); } while(0)
1358 #define FREESELF3(a,b,c) do { FREESELF(a); FREESELF(b); FREESELF(c); } while(0)
1359 #define FREESELF4(a,b,c,d) do { FREESELF2(a,b); FREESELF2(c,d); } while(0)
1360 #define FREESELF5(a,b,c,d,e) do { FREESELF2(a,b); FREESELF3(c,d,e); } while(0)
1361 #define FREESELF6(a,b,c,d,e,f) do { FREESELF3(a,b,f); FREESELF3(c,d,e); } while(0)
1362 #define FREESELF7(a,b,c,d,e,f,g) do { FREESELF4(a,b,f,g); FREESELF3(c,d,e); } while(0)
1363 
1364 #define FREEALL(a) do { FREESELF(a); FREE_EMPTY_OBJECT(a); } while(0)
1365 #define FREEALL2(a,b) do { FREEALL(a); FREEALL(b); } while(0)
1366 #define FREEALL3(a,b,c) do { FREEALL(a); FREEALL(b); FREEALL(c); } while(0)
1367 #define FREEALL4(a,b,c,d) do { FREEALL(a); FREEALL(b); FREEALL(c);FREEALL(d); } while(0)
1368 #define FREEALL5(a,b,c,d,e) do { FREEALL2(a,b); FREEALL3(c,d,e); } while(0)
1369 #define FREEALL6(a,b,c,d,e,f) do { FREEALL3(a,b,f); FREEALL3(c,d,e); } while(0)
1370 #define FREEALL7(a,b,c,d,e,f,g) do { FREEALL4(a,b,f,g); FREEALL3(c,d,e); } while(0)
1371 #define FREEALL8(a,b,c,d,e,f,g,h) do { FREEALL4(a,b,f,g); FREEALL4(c,d,e,h); } while(0)
1372 #define FREEALL9(a,b,c,d,e,f,g,h,i) do { FREEALL4(a,b,f,g); FREEALL5(c,d,e,h,i); } while(0)
1373 
1374 #define GANZDIV_INTEGER(a,b,c) \
1375     if (S_O_K(b) == INTEGER) M_I_I(S_I_I(a)/S_I_I(b),c);\
1376     else if (S_O_K(b) == LONGINT) erg += ganzdiv_integer_longint(a,b,c);\
1377     else  erg += ganzdiv_integer(a,b,c)
1378 
1379 #define GANZDIV_LONGINT(a,b,c) \
1380     if (S_O_K(b) == INTEGER) erg += ganzdiv_longint_integer(a,b,c);\
1381     else if (S_O_K(b) == LONGINT) erg += ganzdiv_longint_longint(a,b,c);\
1382     else  erg += ganzdiv_longint(a,b,c)
1383 
1384 #define GANZDIV(a,b,c) \
1385 if (S_O_K(a) == INTEGER)    GANZDIV_INTEGER(a,b,c); \
1386 else if (S_O_K(a) == LONGINT)  GANZDIV_LONGINT(a,b,c); \
1387 else\
1388     erg += ganzdiv(a,b,c)
1389 
1390 
1391 #define GANZDIV_APPLY_INTEGER(a,b) \
1392     if (S_O_K(b) == INTEGER) M_I_I(S_I_I(a)/S_I_I(b),a);\
1393     else ganzdiv_apply_integer(a,b)
1394 
1395 #define GANZDIV_APPLY_LONGINT(a,b) \
1396     if (S_O_K(b) == INTEGER) erg += ganzdiv_apply_longint_integer(a,b);\
1397     else if (S_O_K(b) == LONGINT) erg += ganzdiv_apply_longint_longint(a,b);\
1398     else ganzdiv_apply_longint(a,b)
1399 
1400 #define GANZDIV_APPLY(a,b) \
1401 if (S_O_K(a) == INTEGER) GANZDIV_APPLY_INTEGER(a,b);\
1402 else if (S_O_K(a) == LONGINT) GANZDIV_APPLY_LONGINT(a,b);\
1403 else\
1404     erg += ganzdiv_apply(a,b);
1405 
1406 
1407 #define GGT_INTEGER(a,b,c) \
1408     if (S_O_K(b) == INTEGER) erg += ggt_integer_integer(a,b,c);\
1409     else if (S_O_K(b) == LONGINT) erg += ggt_integer_longint(a,b,c);\
1410     else  erg += ggt_integer(a,b,c)
1411 
1412 #define GGT_LONGINT(a,b,c) \
1413     if (S_O_K(b) == INTEGER) erg += ggt_integer_longint(b,a,c);\
1414     else if (S_O_K(b) == LONGINT) erg += ggt_longint_longint(a,b,c);\
1415     else  erg += ggt_longint(a,b,c)
1416 
1417 #define GGT(a,b,c) \
1418 if (S_O_K(a) == INTEGER)    GGT_INTEGER(a,b,c); \
1419 else if (S_O_K(a) == LONGINT)  GGT_LONGINT(a,b,c); \
1420 else\
1421     erg += ggt(a,b,c)
1422 
1423 #define HALF_APPLY_INTEGER(a) M_I_I((S_I_I(a) >> 1),a)
1424 
1425 #define HALF_APPLY(a)\
1426 if (S_O_K(a) == INTEGER)\
1427     HALF_APPLY_INTEGER(a);\
1428 else if (S_O_K(a) == LONGINT)\
1429     half_apply_longint(a);\
1430 else\
1431     erg += half_apply(a)\
1432 
1433 
1434 #define HASH_INTEGERVECTOR(a,res)\
1435     if (S_V_LI(a) == 0) res=4711;\
1436     else {\
1437         INT hash_integer_vector_i;\
1438         res = S_V_II(a,0);\
1439         for (hash_integer_vector_i=1;hash_integer_vector_i<S_V_LI(a);hash_integer_vector_i++)\
1440             {\
1441             res *= 4711;\
1442             res += S_V_II(a,hash_integer_vector_i);\
1443             }\
1444         }
1445 
1446 #define HASH_MONOMPARTITION(a) \
1447     ( S_PA_HASH(S_MO_S(a)) == -1 ? hash_partition(S_MO_S(a)) : S_PA_HASH(S_MO_S(a))  )
1448 #define HASH_PARTITION(a) \
1449     ( S_PA_HASH(a) == -1 ? hash_partition(a) : S_PA_HASH(a)  )
1450 #define HASH_MONOM(a) \
1451     ( S_O_K(S_MO_S(a)) == PARTITION ? HASH_PARTITION(S_MO_S(a)) : hash(S_MO_S(a)) )
1452 #define HASH(a) \
1453     ( S_O_K(a) == MONOM ?  HASH_MONOM(a): \
1454       ( S_O_K(a) == INTEGER ? S_I_I(a) : hash(a) )\
1455     )
1456 
1457 #define INC(a)\
1458 if (S_O_K(a) == INTEGER) INC_INTEGER(a);\
1459 else if (S_O_K(a) == LONGINT) erg+= inc_longint(a);\
1460 else inc(a)
1461 
1462 #define INSERT_BINTREE(a,b,eh,cf) insert_bintree(a,b,eh,cf)
1463 #define INSERT_HASHTABLE(a,b,eh,cf,hf) \
1464     if (S_O_K(a) == HASHTABLE) insert_hashtable_hashtable(a,b,eh,cf,hf);\
1465     else if (S_O_K(a) == SCHUR) insert_schur_hashtable(a,b,eh,cf,hf);\
1466     else if (S_O_K(a) == MONOMIAL) insert_monomial_hashtable(a,b,eh,cf,hf);\
1467     else if (S_O_K(a) == ELMSYM) insert_elmsym_hashtable(a,b,eh,cf,hf);\
1468     else if (S_O_K(a) == POWSYM) insert_powsym_hashtable(a,b,eh,cf,hf);\
1469     else if (S_O_K(a) == HOMSYM) insert_homsym_hashtable(a,b,eh,cf,hf);\
1470     else insert_scalar_hashtable(a,b,eh,cf,hf)
1471 #define INSERT_LIST(a,b,eh,cf) \
1472     if (LISTP(a)) insert_list_list(a,b,eh,cf); \
1473     else insert_list(a,b,eh,cf)
1474 
1475 #define INSERT(a,b,eh,cf) \
1476     if (S_O_K(b) == HASHTABLE) INSERT_HASHTABLE(a,b,eh,cf,hash); \
1477     else if (S_O_K(b) == BINTREE) INSERT_BINTREE(a,b,eh,cf); \
1478     else INSERT_LIST(a,b,eh,cf)
1479 
1480 #define INSERT_SCHURMONOM_(m,c)\
1481     if (S_O_K(c) == HASHTABLE)\
1482        INSERT_HASHTABLE(m,c,add_koeff,eq_monomsymfunc,hash_monompartition);\
1483     else if (S_O_K(c) == SCHUR)\
1484        INSERT_LIST(m,c,add_koeff,comp_monomschur);\
1485     else if (S_O_K(c) == BINTREE)\
1486        INSERT_BINTREE(m,c,add_koeff,comp_monomschur);\
1487     else\
1488        WTO("INSERT_SCHURMONOM_(2)",c)
1489 
1490 #define INSERT_POWSYMMONOM_(m,c)\
1491     if (S_O_K(c) == HASHTABLE)\
1492        INSERT_HASHTABLE(m,c,add_koeff,eq_monomsymfunc,hash_monompartition);\
1493     else if (S_O_K(c) == POWSYM)\
1494        INSERT_LIST(m,c,add_koeff,comp_monompowsym);\
1495     else if (S_O_K(c) == BINTREE)\
1496        INSERT_BINTREE(m,c,add_koeff,comp_monompowsym);\
1497     else\
1498        WTO("INSERT_POWSYMMONOM_(2)",c)
1499 
1500 #define INSERT_ELMSYMMONOM_(m,c)\
1501     if (S_O_K(c) == HASHTABLE)\
1502        INSERT_HASHTABLE(m,c,add_koeff,eq_monomsymfunc,hash_monompartition);\
1503     else if (S_O_K(c) == ELMSYM)\
1504        INSERT_LIST(m,c,add_koeff,comp_monomelmsym);\
1505     else if (S_O_K(c) == BINTREE)\
1506        INSERT_BINTREE(m,c,add_koeff,comp_monomelmsym);\
1507     else\
1508        WTO("INSERT_ELMSYMMONOM_(2)",c)
1509 
1510 #define INSERT_HOMSYMMONOM_(m,c)\
1511     if (S_O_K(c) == HASHTABLE)\
1512        INSERT_HASHTABLE(m,c,add_koeff,eq_monomsymfunc,hash_monompartition);\
1513     else if (S_O_K(c) == HOMSYM)\
1514        INSERT_LIST(m,c,add_koeff,comp_monomhomsym);\
1515     else if (S_O_K(c) == BINTREE)\
1516        INSERT_BINTREE(m,c,add_koeff,comp_monomhomsym);\
1517     else\
1518        WTO("INSERT_HOMSYMMONOM_(2)",c)
1519 
1520 
1521 
1522 
1523 
1524 #define INTLOGPOS5_4(ai)   (( ai >= 10000L)     ? 5 : 4)
1525 #define INTLOGPOS5_3(ai)   (( ai >= 1000L)      ? INTLOGPOS5_4(ai) : 3)
1526 #define INTLOGPOS2_1(ai)   (( ai >= 10L)        ? 2 : 1)
1527 #define INTLOGPOS5_1(ai)   (( ai >= 100L)       ? INTLOGPOS5_3(ai) : INTLOGPOS2_1(ai))
1528 #define INTLOGPOS7_6(ai)   (( ai >= 1000000L)   ? 7 : 6)
1529 #define INTLOGPOS10_9(ai)  (( ai >= 1000000000L)? 10 : 9)
1530 #define INTLOGPOS10_8(ai)  (( ai >= 100000000L) ? INTLOGPOS10_9(ai) : 8)
1531 #define INTLOGPOS10_6(ai)  (( ai >= 10000000L ) ? INTLOGPOS10_8(ai) : INTLOGPOS7_6(ai) )
1532 #define INTLOGPOS(ai)      (( ai >= 100000L )   ? INTLOGPOS10_6(ai) : INTLOGPOS5_1(ai) )
1533 #define INTLOG(a) ( (S_I_I(a)) >= 0 ? INTLOGPOS(S_I_I(a)) : INTLOGPOS(-S_I_I(a)) )
1534 
1535 
1536 #define INVERS_INTEGER(a,b) do {\
1537           if (S_I_I(a)==1)  M_I_I(1,b); else \
1538           if (S_I_I(a)==-1)  M_I_I(-1,b); else \
1539           { b_ou_b(CALLOCOBJECT(),CALLOCOBJECT(),b); \
1540             M_I_I(1,S_B_O(b)); \
1541             M_I_I(S_I_I(a),S_B_U(b)); \
1542             C_B_I(b,GEKUERZT); \
1543           }\
1544         } while(0)
1545 
1546 #define INVERS_LONGINT(a,b) \
1547       do {  b_ou_b(CALLOCOBJECT(),CALLOCOBJECT(),b); M_I_I(1,S_B_O(b)); \
1548        copy_longint(a,S_B_U(b)); C_B_I(b,GEKUERZT) ; } while(0)
1549 
1550 #define INVERS_BRUCH(a,b) \
1551       do {  b_ou_b(CALLOCOBJECT(),CALLOCOBJECT(),b); COPY(S_B_O(a),S_B_U(b)); \
1552       COPY(S_B_U(a), S_B_O(b)); C_B_I(b,S_B_I(a)) ;} while(0)
1553 
1554 #define INVERS(a,b) \
1555 if (S_O_K(a) == INTEGER)  INVERS_INTEGER(a,b);\
1556 else if (S_O_K(a) == LONGINT)  INVERS_LONGINT(a,b);\
1557 else if (S_O_K(a) == BRUCH)   INVERS_BRUCH(a,b);\
1558 else\
1559     erg += invers(a,b)
1560 
1561 #define KUERZEN(a)\
1562 if (S_O_K(S_B_O(a)) == INTEGER) {\
1563     if (S_O_K(S_B_U(b)) == INTEGER) erg += kuerzen_integer_integer(a);\
1564     else if (S_O_K(S_B_U(b)) == LONGINT) erg += kuerzen_integer_longint(a);\
1565     else erg += krz(a);\
1566 }\
1567 else if (S_O_K(S_B_O(a)) == LONGINT) {\
1568     if (S_O_K(S_B_U(b)) == INTEGER) erg += kuerzen_longint_integer(a);\
1569     else if (S_O_K(S_B_U(b)) == LONGINT) erg += kuerzen_longint_longint(a);\
1570     else erg += krz(a);\
1571 }\
1572 else krz(a)
1573 
1574 
1575 #define MOD_APPLY_INTEGER(a,b) \
1576     if (S_O_K(b) == INTEGER) M_I_I(S_I_I(a) % S_I_I(b), a);\
1577     else if (S_O_K(b) == LONGINT) erg += mod_apply_integer_longint(a,b);\
1578     else mod_apply(a,b)
1579 
1580 #define MOD_APPLY(a,b) \
1581 if (S_O_K(a) == INTEGER)  MOD_APPLY_INTEGER(a,b);\
1582 else if (S_O_K(a) == LONGINT)  erg += mod_apply_longint(a,b);\
1583 else erg += mod_apply(a,b)
1584 
1585 
1586 #define MULT_APPLY_INTEGER_INTEGER(a,b) \
1587     if ( NULLP_INTEGER(a) || NULLP_INTEGER(b) ) \
1588             { \
1589             M_I_I(0,b); \
1590             } \
1591     else if ( (INTLOG(a) + INTLOG(b)) > 9L )\
1592             {\
1593             erg += t_int_longint(b,b);\
1594             erg += mult_apply_integer_longint(a,b);\
1595             }\
1596     else M_I_I(S_I_I(a)*S_I_I(b),b)
1597 
1598 #define MULT_APPLY_INTEGER(a,b) \
1599     if (S_O_K(b) == INTEGER) MULT_APPLY_INTEGER_INTEGER(a,b);\
1600     else if (S_O_K(b) == LONGINT) erg += mult_apply_integer_longint(a,b);\
1601     else if (S_O_K(b) == BRUCH) erg += mult_apply_integer_bruch(a,b);\
1602     else if (S_O_K(b) == MONOM) erg += mult_apply_integer_monom(a,b);\
1603     else if (POLYP(b)) erg += mult_apply_integer_polynom(a,b);\
1604     else if (S_O_K(b) == HASHTABLE) erg += mult_apply_integer_hashtable(a,b);\
1605     else  erg += mult_apply_integer(a,b)
1606 
1607 #define MULT_APPLY_LONGINT(a,b)\
1608     if (S_O_K(b) == INTEGER) erg += mult_apply_longint_integer(a,b);\
1609     else if (S_O_K(b) == LONGINT) erg += mult_apply_longint_longint(a,b);\
1610     else if (S_O_K(b) == BRUCH) erg += mult_apply_longint_bruch(a,b);\
1611     else if (POLYP(b)) erg += mult_apply_longint_polynom(a,b);\
1612     else  erg += mult_apply_longint(a,b)
1613 
1614 #define MULT_APPLY_BRUCH(a,b)\
1615     if (S_O_K(b) == INTEGER) erg += mult_apply_bruch_integer(a,b);\
1616     else if (S_O_K(b) == LONGINT) erg += mult_apply_bruch_longint(a,b);\
1617     else if (S_O_K(b) == BRUCH) erg += mult_apply_bruch_bruch(a,b);\
1618     else if (POLYP(b)) erg += mult_apply_bruch_polynom(a,b);\
1619     else if (S_O_K(b) == HASHTABLE) erg += mult_apply_bruch_hashtable(a,b);\
1620     else  erg += mult_apply_bruch(a,b)
1621 
1622 #define MULT_APPLY(a,b) \
1623 if (S_O_K(a) == INTEGER)  MULT_APPLY_INTEGER(a,b);\
1624 else if (S_O_K(a) == LONGINT)  MULT_APPLY_LONGINT(a,b);\
1625 else if (S_O_K(a) == BRUCH)   MULT_APPLY_BRUCH(a,b);\
1626 else if (S_O_K(a) == POLYNOM)   erg += mult_apply_polynom(a,b);\
1627 else if (S_O_K(a) == FF)   erg += mult_apply_ff(a,b);\
1628 else\
1629     erg += mult_apply(a,b)
1630 
1631 #define MULT_INTEGER_INTEGER(a,b,c) \
1632     if (INTLOG(a) + INTLOG(b) > 9) {\
1633         OP mii_c= CALLOCOBJECT();\
1634         erg += t_int_longint(a,mii_c);\
1635         erg += mult_longint_integer(mii_c,b,c);\
1636         FREEALL(mii_c);\
1637         }\
1638     else\
1639         M_I_I(S_I_I(a)*S_I_I(b),c)
1640 
1641 #define MULT_INTEGER(a,b,c) \
1642     if (S_O_K(b) == INTEGER) MULT_INTEGER_INTEGER(a,b,c);\
1643     else if (S_O_K(b) == LONGINT) erg += mult_longint_integer(b,a,c);\
1644     else if (S_O_K(b) == BRUCH) erg += mult_bruch_integer(b,a,c);\
1645     else if (S_O_K(b) == CYCLOTOMIC) erg += mult_scalar_cyclo(a,b,c);\
1646     else  erg += mult_integer(a,b,c)
1647 
1648 #define MULT_LONGINT(a,b,c) \
1649     if (S_O_K(b) == INTEGER) erg += mult_longint_integer(a,b,c);\
1650     else if (S_O_K(b) == LONGINT) erg += mult_longint_longint(b,a,c);\
1651     else if (S_O_K(b) == CYCLOTOMIC) erg += mult_scalar_cyclo(a,b,c);\
1652     else  erg += mult_longint(a,b,c)
1653 
1654 #define MULT_BRUCH(a,b,c) \
1655     if (S_O_K(b) == INTEGER) erg += mult_bruch_integer(a,b,c);\
1656     else if (S_O_K(b) == LONGINT) erg += mult_bruch_longint(a,b,c);\
1657     else if (S_O_K(b) == BRUCH) erg += mult_bruch_bruch(a,b,c);\
1658     else if (S_O_K(b) == CYCLOTOMIC) erg += mult_scalar_cyclo(a,b,c);\
1659     else  erg += mult_bruch(a,b,c)
1660 
1661 #define MULT(a,b,c) \
1662 if (S_O_K(a) == INTEGER)    MULT_INTEGER(a,b,c); \
1663 else if (S_O_K(a) == LONGINT)  MULT_LONGINT(a,b,c); \
1664 else if (S_O_K(a) == BRUCH)  MULT_BRUCH(a,b,c);\
1665 else if (S_O_K(a) == CYCLOTOMIC)  mult_cyclo(a,b,c);\
1666 else if (S_O_K(a) == FF)  mult_ff(a,b,c);\
1667 else if (S_O_K(a) == SQ_RADICAL)  mult_sqrad(a,b,c);\
1668 else\
1669     erg += mult(a,b,c)
1670 
1671 #define MULT_SCALAR_MONOMLIST(a,b,c)\
1672 if ((NULLP(a))|| (NULLP(b))) erg += init(S_O_K(b),c);\
1673 else erg += trans2formlist(a,b,c,mult)
1674 
1675 #define CLEVER_MULT_INTEGER(a,b,c)\
1676 do {\
1677 FREESELF(c); MULT_INTEGER(a,b,c);\
1678 } while(0)
1679 
1680 #define CLEVER_MULT_LONGINT(a,b,c)\
1681 do {\
1682 FREESELF(c); MULT_LONGINT(a,b,c);\
1683 } while(0)
1684 
1685 #define CLEVER_MULT_BRUCH(a,b,c)\
1686 if (S_O_K(b) == BRUCH) {\
1687     switch (S_O_K(c)) {\
1688         case INTEGER: C_O_K(c,EMPTY);\
1689         case EMPTY:\
1690         case BRUCH: erg += mult_bruch_bruch(a,b,c); break;\
1691         default: FREESELF(c); mult_bruch_bruch(a,b,c); break;\
1692         }\
1693     }\
1694 else do { FREESELF(c); MULT_BRUCH(a,b,c); } while(0)
1695 
1696 #define CLEVER_MULT_FF(a,b,c)\
1697 if (S_O_K(b) == FF) {\
1698     switch (S_O_K(c)) {\
1699         case INTEGER: C_O_K(c,EMPTY);\
1700         case EMPTY:\
1701         case BRUCH: erg += mult_ff_ff(a,b,c); break;\
1702         default: FREESELF(c); mult_ff_ff(a,b,c); break;\
1703         }\
1704     }\
1705 else do { FREESELF(c); erg += mult_ff(a,b,c); } while(0)
1706 
1707 #define CLEVER_MULT(a,b,c) \
1708 if (S_O_K(a) == INTEGER)    CLEVER_MULT_INTEGER(a,b,c); \
1709 else if (S_O_K(a) == LONGINT)  CLEVER_MULT_LONGINT(a,b,c); \
1710 else if (S_O_K(a) == BRUCH)  CLEVER_MULT_BRUCH(a,b,c);\
1711 else if (S_O_K(a) == FF)  CLEVER_MULT_FF(a,b,c);\
1712 else\
1713     do { FREESELF(c); MULT(a,b,c); } while(0)
1714 
1715 
1716 #define NEGEINSP_LONGINT(a)\
1717     (\
1718     ((S_O_S(a).ob_longint) ->floc ->w0 == 1) \
1719     &&\
1720     ((S_O_S(a).ob_longint) ->floc ->w1 == 0)\
1721     &&\
1722     ((S_O_S(a).ob_longint) ->floc ->w2 == 0)\
1723     &&\
1724     ((S_O_S(a).ob_longint) ->signum == -1)\
1725     &&\
1726     ((S_O_S(a).ob_longint) ->laenge == 1)\
1727     )
1728 
1729 #define NEGEINSP(a)\
1730     ( S_O_K(a) == INTEGER ? NEGEINSP_INTEGER(a): \
1731        ( S_O_K(a) == LONGINT ? NEGEINSP_LONGINT(a) : \
1732             ( negeinsp(a) ) \
1733        ) \
1734     )
1735 
1736 #define NEGP_LONGINT(a)  (GANZSIGNUM(S_O_S(a).ob_longint) == (signed char)-1)
1737 
1738 #define NEGP(a) \
1739     ( S_O_K(a) == INTEGER ? (NEGP_INTEGER(a)) : \
1740        ( S_O_K(a) == LONGINT ? NEGP_LONGINT(a) : negp(a) )\
1741     )
1742 
1743 #define NEW_HASHTABLE(c)\
1744     do { c = CALLOCOBJECT(); erg += init_hashtable(c); } while(0)
1745 
1746 #define CLEAR_HASHTABLE(c) /* removes all entries in a hashtable */ \
1747     do { OP z,zz;INT i,j;\
1748          for (i=0,z=S_V_S(c);i<S_V_LI(c);i++,z++)\
1749              { \
1750              if (not EMPTYP(z)) {\
1751                  for (j=0,zz=S_V_S(z);j<S_V_LI(z);j++,zz++) FREESELF(zz);\
1752                  /*FREESELF_INTEGERVECTOR(z);*/ C_I_I(S_V_L(z),1);\
1753                  }\
1754              /* C_I_I(z,-1);*/ \
1755              else if (S_I_I(z) == -1) break;\
1756              else { i = S_I_I(z)-1; z = S_V_I(c,i); }\
1757              }\
1758          M_I_I(0,S_V_I(c,S_V_LI(c)));} while(0)
1759 
1760 
1761 
1762 #define NEW_INTEGER(m,i) do { m=CALLOCOBJECT(); M_I_I(i,m); } while(0)
1763 #define NEW_TABLEAU(t,um) do { t=CALLOCOBJECT(); m_u_t(a,t); } while(0)
1764 #define NEW_VECTOR(v,i)\
1765     do { v = CALLOCOBJECT(); erg += m_il_v(i,v); } while(0)
1766 #define NEW_INTEGERVECTOR(v,i)\
1767     do { v = CALLOCOBJECT(); erg += m_il_integervector(i,v); } while(0)
1768 #define NEW_HOMSYM(a)\
1769     do { a = CALLOCOBJECT(); erg += b_sn_l(NULL,NULL,a); \
1770          C_O_K(a,HOMSYM); } while(0)
1771 
1772 
1773 #define NULLP_LONGINT(a)  (GANZSIGNUM(S_O_S(a).ob_longint) == (signed char) 0)
1774 #define NULLP_HASHTABLE(a)  (S_V_II(a,S_V_LI(a)) == 0)
1775 #define NULLP_BRUCH(a) \
1776    (S_O_K(S_B_O(a)) == INTEGER ? NULLP_INTEGER(S_B_O(a)) : \
1777        ( S_O_K(S_B_O(a)) == LONGINT  ?  NULLP_LONGINT(S_B_O(a)) : nullp(S_B_O(a))\
1778        )\
1779    )
1780 
1781 
1782 #define NULLP(a)\
1783     ( S_O_K(a) == INTEGER ? NULLP_INTEGER(a) : \
1784        ( S_O_K(a) == LONGINT ? NULLP_LONGINT(a) : \
1785          ( S_O_K(a) == HASHTABLE ? NULLP_HASHTABLE(a) : \
1786           ( S_O_K(a) == BRUCH ?  nullp_bruch(a) : \
1787             ( S_O_K(a) == FF ? nullp_ff(a):  \
1788                ( POLYP(a) ? nullp_polynom(a): nullp(a) ) \
1789             )\
1790           ) \
1791          )\
1792        ) \
1793     )
1794 
1795 #define ODD_INTEGER(a) (S_I_I(a) % 2 == 1)
1796 #define ODD_LONGINT(a) \
1797      ((S_O_S(a).ob_longint) ->floc ->w0 % 2 == 1)
1798 
1799 #define ODD(a) \
1800     ( S_O_K(a) == INTEGER ? (ODD_INTEGER(a)) : \
1801        ( S_O_K(a) == LONGINT ? ODD_LONGINT(a) : odd(a) )\
1802     )
1803 
1804 #define PARTITION_WEIGHT(a,i) \
1805 do { \
1806     OP z; \
1807     INT j; \
1808     for(j=S_PA_LI(a),i=0,z=S_V_S(S_PA_S(a));j>0;j--,z++) \
1809         i+=S_I_I(z); \
1810 } while(0)
1811 
1812 #define MAXPARTI(a) ((S_PA_LI(a) == 0) ? 0 : S_PA_II(a,S_PA_LI(a)-1) )
1813 
1814 #define POSP_LONGINT(a)  (GANZSIGNUM(S_O_S(a).ob_longint) == (signed char)1)
1815 
1816 #define POSP(a) \
1817     ( S_O_K(a) == INTEGER ? (POSP_INTEGER(a)) : \
1818        ( S_O_K(a) == LONGINT ? POSP_LONGINT(a) : posp(a) )\
1819     )
1820 
1821 #define SWAP(a,b) do { \
1822         struct object swap_object;  \
1823         swap_object = *a; \
1824         *a = *b; \
1825         *b = swap_object; \
1826         } while(0)
1827 
1828 #define CE2(a,b,f) \
1829     if (a==b)  {\
1830         OP checkequal2_c = CALLOCOBJECT();\
1831         *checkequal2_c = *b;\
1832         C_O_K(b,EMPTY);\
1833         erg += (*f)(checkequal2_c,b);\
1834         FREEALL(checkequal2_c);\
1835         goto endr_ende;\
1836         }\
1837     else   FREESELF(b)
1838 /* used for transfunctions */
1839 #define TCE2(a,b,f,typ) \
1840     if (a==b)  {\
1841         OP checkequal2_c = CALLOCOBJECT();\
1842         *checkequal2_c = *b;\
1843         C_O_K(b,EMPTY);\
1844         erg += (*f)(checkequal2_c,b);\
1845         FREEALL(checkequal2_c);\
1846         goto endr_ende;\
1847         }\
1848     else   if ( (S_O_K(b) != HASHTABLE) && (S_O_K(b) != typ) ) \
1849         FREESELF(b)
1850 
1851 #define ADD_KOEFF(a,b) \
1852     ADD_APPLY(S_MO_K(a), S_MO_K(b));\
1853     if (NULLP(S_MO_K(b)))\
1854         FREESELF_MONOM(b)
1855 
1856 
1857 
1858 #define M_FORALL_MONOMIALS_IN_AB(a,b,c,f,partf)\
1859 {\
1860 OP ff,z,y;\
1861 ff = CALLOCOBJECT();\
1862     FORALL (y,a, {\
1863     FORALL (z,b, {\
1864             FREESELF(ff);\
1865             MULT(S_MO_K(z),S_MO_K(y),ff);\
1866             if (not EINSP(f))\
1867                 {\
1868                 MULT_APPLY(f,ff);\
1869                 }\
1870             erg += (*partf)(S_MO_S(y),S_MO_S(z),c,ff);\
1871             } );\
1872             } );\
1873     FREEALL(ff);\
1874 }
1875 
1876 #define M2_FORALL_MONOMIALS_IN_AB(a,b,c,f,m,partf)\
1877 {\
1878 OP ff,z,y;\
1879 ff = CALLOCOBJECT();\
1880     FORALL (y,a, {\
1881     FORALL (z,b, {\
1882             FREESELF(ff);\
1883             MULT(S_MO_K(z),S_MO_K(y),ff);\
1884             if (not EINSP(f))\
1885                 {\
1886                 MULT_APPLY(f,ff);\
1887                 }\
1888             erg += (*partf)(S_MO_S(y),S_MO_S(z),c,ff,m);\
1889             } );\
1890             } );\
1891     FREEALL(ff);\
1892 }
1893 
1894 #define M3_FORALL_MONOMIALS_IN_AB(a,b,c,f,m,l,partf)\
1895 {\
1896 OP ff,z,y;\
1897 ff = CALLOCOBJECT();\
1898     FORALL (y,a, {\
1899     FORALL (z,b, {\
1900             FREESELF(ff);\
1901             MULT(S_MO_K(z),S_MO_K(y),ff);\
1902             if (not EINSP(f))\
1903                 {\
1904                 MULT_APPLY(f,ff);\
1905                 }\
1906             erg += (*partf)(S_MO_S(y),S_MO_S(z),c,ff,m,l);\
1907             } );\
1908             } );\
1909     FREEALL(ff);\
1910 }
1911 
1912 
1913 
1914 #define M_FORALL_MONOMIALS_IN_B(a,b,c,f,partf)\
1915 {\
1916 OP ff,z;\
1917 if (not EINSP(f)) {\
1918     ff = CALLOCOBJECT();\
1919     FORALL (z,b, {\
1920             FREESELF(ff);\
1921             MULT(S_MO_K(z),f,ff);\
1922             erg += (*partf)(a,S_MO_S(z),c,ff);\
1923             } );\
1924     FREEALL(ff);\
1925     }\
1926 else {\
1927     FORALL (z,b, {\
1928        erg += (*partf)(a,S_MO_S(z),c,S_MO_K(z));\
1929             } );\
1930     }\
1931 }
1932 #define M2_FORALL_MONOMIALS_IN_B(a,b,c,f,m,partf)\
1933 {\
1934 OP ff,z;\
1935 if (not EINSP(f)) {\
1936     ff = CALLOCOBJECT();\
1937     FORALL (z,b, {\
1938             MULT(S_MO_K(z),f,ff);\
1939             erg += (*partf)(a,S_MO_S(z),c,ff,m);\
1940             FREESELF(ff);\
1941             } );\
1942     FREEALL(ff);\
1943     }\
1944 else {\
1945     FORALL (z,b, {\
1946        erg += (*partf)(a,S_MO_S(z),c,S_MO_K(z),m);\
1947             } );\
1948     }\
1949 }
1950 
1951 #define M3_FORALL_MONOMIALS_IN_B(a,b,c,f,m,l,partf)\
1952 {\
1953 OP ff,z;\
1954 if (not EINSP(f)) {\
1955     ff = CALLOCOBJECT();\
1956     FORALL (z,b, {\
1957             MULT(S_MO_K(z),f,ff);\
1958             erg += (*partf)(a,S_MO_S(z),c,ff,m,l);\
1959             FREESELF(ff);\
1960             } );\
1961     FREEALL(ff);\
1962     }\
1963 else {\
1964     FORALL (z,b, {\
1965        erg += (*partf)(a,S_MO_S(z),c,S_MO_K(z),m,l);\
1966             } );\
1967     }\
1968 }
1969 
1970 
1971 
1972 #define M_FORALL_MONOMIALS_IN_A(a,b,c,f,partf)\
1973 {\
1974 OP ff,z;\
1975 if (not EINSP(f)) {\
1976     ff = CALLOCOBJECT();\
1977     FORALL (z,a, {\
1978             MULT(S_MO_K(z),f,ff);\
1979             erg += (*partf)(S_MO_S(z),b,c,ff);\
1980             FREESELF(ff);\
1981             } );\
1982     FREEALL(ff);\
1983     }\
1984 else {\
1985     FORALL (z,a, {\
1986        erg += (*partf)(S_MO_S(z),b,c,S_MO_K(z));\
1987             } );\
1988     }\
1989 }
1990 #define M2_FORALL_MONOMIALS_IN_A(a,b,c,f,m,partf)\
1991 {\
1992 OP ff,z;\
1993 if (not EINSP(f)) {\
1994     ff = CALLOCOBJECT();\
1995     FORALL (z,a, {\
1996             MULT(S_MO_K(z),f,ff);\
1997             erg += (*partf)(S_MO_S(z),b,c,ff,m);\
1998             FREESELF(ff);\
1999             } );\
2000     FREEALL(ff);\
2001     }\
2002 else {\
2003     FORALL (z,a, {\
2004        erg += (*partf)(S_MO_S(z),b,c,S_MO_K(z),m);\
2005             } );\
2006     }\
2007 }
2008 
2009 #define M3_FORALL_MONOMIALS_IN_A(a,b,c,f,m,l,partf)\
2010 {\
2011 OP ff,z;\
2012 if (not EINSP(f)) {\
2013     ff = CALLOCOBJECT();\
2014     FORALL (z,a, {\
2015             MULT(S_MO_K(z),f,ff);\
2016             erg += (*partf)(S_MO_S(z),b,c,ff,m,l);\
2017             FREESELF(ff);\
2018             } );\
2019     FREEALL(ff);\
2020     }\
2021 else {\
2022     FORALL (z,a, {\
2023        erg += (*partf)(S_MO_S(z),b,c,S_MO_K(z),m,l);\
2024             } );\
2025     }\
2026 }
2027 
2028 
2029 
2030 #define T_FORALL_MONOMIALS_IN_A(a,b,f,partf)\
2031 {\
2032 OP ff,z;\
2033 if (not EINSP(f)) {\
2034     ff = CALLOCOBJECT();\
2035     FORALL (z,a, {\
2036             MULT(S_MO_K(z),f,ff);\
2037             erg += (*partf)(S_MO_S(z),b,ff);\
2038             FREESELF(ff);\
2039             } );\
2040     FREEALL(ff);\
2041     }\
2042 else {\
2043     FORALL (z,a, {\
2044        erg += (*partf)(S_MO_S(z),b,S_MO_K(z));\
2045             } );\
2046     }\
2047 }
2048 
2049 #define _NULL_PARTITION_(b,c,f) \
2050 do { OP m;\
2051 CTO(PARTITION,"_NULL_PARTITION_(1)",b);\
2052 m=CALLOCOBJECT(); \
2053 erg += b_sk_mo(CALLOCOBJECT(),CALLOCOBJECT(),m);\
2054 erg += copy_partition(b,S_MO_S(m));\
2055 COPY(f,S_MO_K(m));\
2056 if (S_O_K(c)==HASHTABLE)\
2057 insert_scalar_hashtable(m,c,add_koeff,eq_monomsymfunc,hash_monompartition);\
2058 else \
2059 INSERT_LIST(m,c,add_koeff,comp_monommonomial);\
2060 } while(0)
2061 
2062 #define WEIGHT_HASHTABLE(a) S_V_II(a,S_V_LI(a))
2063 
2064 
2065 
2066 #define NEQ(a,b) (! EQ(a,b))
2067 #define GR(a,b) (COMP(a,b) > (INT)0)
2068 #define GT(a,b) (COMP(a,b) > (INT)0)
2069 #define GE(a,b) (COMP(a,b) >= (INT)0)
2070 #define LE(a,b) (COMP(a,b) <= (INT)0)
2071 #define LT(a,b) (COMP(a,b) < (INT)0)
2072 
2073 
2074 /* speicher managment */
2075 
2076 #define FREE_MEMMANAGER(t,s,i,g,c,v)\
2077 do {\
2078     c--;\
2079     if ((i+1) == g) {\
2080        if (g+SPEICHERSIZE <freeall_speichersize_max)\
2081        {\
2082        if (g == 0) {\
2083            s = (t*) SYM_MALLOC(SPEICHERSIZE * sizeof(t));\
2084            SYMCHECK(s == NULL,"no memory");\
2085            g = SPEICHERSIZE;\
2086            }\
2087        else {\
2088            s = (t*) SYM_realloc (s, (g+SPEICHERSIZE) * sizeof(t));\
2089            SYMCHECK(s == NULL,"no memory");\
2090            g += SPEICHERSIZE;\
2091            }\
2092        s[++i] = (v);\
2093        }\
2094        else SYM_FREE(v);\
2095        }\
2096     else s[++i] = (v);\
2097 } while(0)
2098 
2099 #define CALLOC_MEMMANAGER(t,s,i,c,v)\
2100 do {\
2101     c++;\
2102     if (i>=0) v = s[i--];\
2103     else v = (t*) SYM_MALLOC(sizeof(t));\
2104 } while(0)
2105 
2106 #define ANFANG_MEMMANAGER(s,i,g,c) \
2107 s = NULL; i = -1; c = 0; g = 0
2108 
2109 #define ENDE_MEMMANAGER(s,i,g,c,text) \
2110 if (no_banner != TRUE) { SYMCHECK(c, text);} \
2111 if (s != NULL) { \
2112     INT jj;\
2113     for (jj = 0; jj<=i;jj++) SYM_FREE(s[jj]);\
2114     SYM_FREE(s);\
2115     s = NULL;\
2116     }\
2117 i = -1;\
2118 g = 0
2119 
2120 
2121 #define MACRO_H
2122 #endif /* MACRO_H */
2123