1 | /* |
---|
2 | * This was automaticly generated by modgen |
---|
3 | * version 0.2 |
---|
4 | * module pcv |
---|
5 | * Don't edit this file |
---|
6 | */ |
---|
7 | |
---|
8 | |
---|
9 | #line 10 "pcv.cc" |
---|
10 | #include <stdlib.h> |
---|
11 | #include <stdio.h> |
---|
12 | #include <string.h> |
---|
13 | #include <ctype.h> |
---|
14 | |
---|
15 | |
---|
16 | #include <locals.h> |
---|
17 | #include "pcv.h" |
---|
18 | #line 19 "pcv.cc" |
---|
19 | |
---|
20 | idhdl enter_id(char *name, char *value, idtyp t) |
---|
21 | { |
---|
22 | idhdl h; |
---|
23 | |
---|
24 | h=enterid(mstrdup(name),0, t, &IDROOT, TRUE/*FALSE*/); |
---|
25 | if(h!=NULL) { |
---|
26 | switch(t) { |
---|
27 | case STRING_CMD: IDSTRING(h) = mstrdup(value);break; |
---|
28 | case PACKAGE_CMD: break; |
---|
29 | case PROC_CMD: break; |
---|
30 | } |
---|
31 | } else |
---|
32 | Warn("Cannot create '%s'\n", name); |
---|
33 | return(h); |
---|
34 | } |
---|
35 | |
---|
36 | #line 37 "pcv.cc" |
---|
37 | |
---|
38 | idhdl add_singular_proc(char *procname, int line, |
---|
39 | long pos, long end, BOOLEAN pstatic) |
---|
40 | { |
---|
41 | idhdl h; |
---|
42 | procinfov pi; |
---|
43 | |
---|
44 | h = enter_id(procname, NULL, PROC_CMD); |
---|
45 | if(h == NULL) return NULL; |
---|
46 | |
---|
47 | pi->procname = mstrdup(procname); |
---|
48 | pi->language = LANG_SINGULAR; |
---|
49 | pi->ref = 1; |
---|
50 | pi->is_static = pstatic; |
---|
51 | pi->data.s.proc_start = pos; |
---|
52 | pi->data.s.def_end = pos; |
---|
53 | pi->data.s.help_start = 0L; |
---|
54 | pi->data.s.help_end = 0L; |
---|
55 | pi->data.s.body_start = pos; |
---|
56 | pi->data.s.body_end = end; |
---|
57 | pi->data.s.proc_end = end; |
---|
58 | pi->data.s.example_start = 0L; |
---|
59 | pi->data.s.proc_lineno = line; |
---|
60 | pi->data.s.body_lineno = line; |
---|
61 | pi->data.s.example_lineno = 0; |
---|
62 | pi->data.s.body = NULL; |
---|
63 | pi->data.s.help_chksum = 0; |
---|
64 | |
---|
65 | return(h); |
---|
66 | } |
---|
67 | |
---|
68 | void fill_help_package(idhdl pl); |
---|
69 | void fill_example_package(idhdl pl); |
---|
70 | |
---|
71 | #line 2 "pcv.mod" |
---|
72 | /* |
---|
73 | * |
---|
74 | * Test mod fuer modgen |
---|
75 | */ |
---|
76 | |
---|
77 | #include <stdio.h> |
---|
78 | #include "Pcv.h" |
---|
79 | #line 11 "pcv.mod" |
---|
80 | |
---|
81 | |
---|
82 | #line 84 "pcv.cc" |
---|
83 | extern "C" |
---|
84 | int mod_init(int(*iiAddCproc)()) |
---|
85 | { |
---|
86 | VAR idhdl h; |
---|
87 | VAR idhdl helphdl = enter_id("Help", NULL, PACKAGE_CMD); |
---|
88 | VAR idhdl examplehdl = enter_id("Example", NULL, PACKAGE_CMD); |
---|
89 | |
---|
90 | |
---|
91 | if( helphdl == NULL) |
---|
92 | Warn("Cannot create help-package\n"); |
---|
93 | else fill_help_package(helphdl); |
---|
94 | |
---|
95 | if( examplehdl == NULL) |
---|
96 | Warn("Cannot create example-package\n"); |
---|
97 | else fill_example_package(examplehdl); |
---|
98 | #line 15 "pcv.mod" |
---|
99 | enter_id("version","$Id$", STRING_CMD); |
---|
100 | #line 25 "pcv.mod" |
---|
101 | enter_id("info"," |
---|
102 | LIBRARY: pcv.so CONVERSION BETWEEN POLYS AND COEF VECTORS |
---|
103 | AUTHOR: Mathias Schulze, email: mschulze@mathematik.uni-kl.de |
---|
104 | |
---|
105 | MinDeg(p); min deg of monomials of poly p |
---|
106 | P2CV(l,d0,d1); list of coef vectors from deg d0 to d1 of polys in list l |
---|
107 | CV2P(l,d0,d1); list of polys with coef vectors from deg d0 to d1 in list l |
---|
108 | Dim(d0,d1); number of monomials from deg d0 to d1 |
---|
109 | Basis(d0,d1); list of monomials from deg d0 to d1 |
---|
110 | ", STRING_CMD); |
---|
111 | |
---|
112 | #line 31 "pcv.mod" |
---|
113 | iiAddCproc("pcv","MinDeg",FALSE, mod_MinDeg); |
---|
114 | |
---|
115 | #line 37 "pcv.mod" |
---|
116 | iiAddCproc("pcv","P2CV",FALSE, mod_P2CV); |
---|
117 | |
---|
118 | #line 51 "pcv.mod" |
---|
119 | iiAddCproc("pcv","CV2P",FALSE, mod_CV2P); |
---|
120 | |
---|
121 | #line 66 "pcv.mod" |
---|
122 | iiAddCproc("pcv","Dim",FALSE, mod_Dim); |
---|
123 | |
---|
124 | #line 81 "pcv.mod" |
---|
125 | iiAddCproc("pcv","Basis",FALSE, mod_Basis); |
---|
126 | |
---|
127 | return 0; |
---|
128 | } |
---|
129 | |
---|
130 | #line 132 "pcv.cc" |
---|
131 | /* Help section */ |
---|
132 | void fill_help_package(idhdl pl) { |
---|
133 | namespaceroot->push(IDPACKAGE(pl), IDID(pl)); |
---|
134 | |
---|
135 | #line 137 "pcv.cc" |
---|
136 | namespaceroot->pop(); |
---|
137 | } /* End of Help section */ |
---|
138 | |
---|
139 | /* Example section */ |
---|
140 | void fill_example_package(idhdl pl) { |
---|
141 | namespaceroot->push(IDPACKAGE(pl), IDID(pl)); |
---|
142 | |
---|
143 | #line 145 "pcv.cc" |
---|
144 | namespaceroot->pop(); |
---|
145 | } /* End of Example section */ |
---|
146 | |
---|
147 | #line 31 "pcv.mod" |
---|
148 | BOOLEAN mod_MinDeg(leftv res, leftv h) |
---|
149 | { |
---|
150 | #line 31 "pcv.mod" |
---|
151 | #line 153 "pcv.cc" |
---|
152 | |
---|
153 | #line 32 "pcv.mod" |
---|
154 | #line 156 "pcv.cc" |
---|
155 | leftv v = h, v_save; |
---|
156 | int tok = NONE, index = 0; |
---|
157 | sleftv sp; leftv zp = &sp; |
---|
158 | poly p; |
---|
159 | #line 32 "pcv.mod" |
---|
160 | |
---|
161 | |
---|
162 | #line 33 "pcv.mod" |
---|
163 | #line 165 "pcv.cc" |
---|
164 | if(v==NULL) goto mod_MinDeg_error; |
---|
165 | tok = v->Typ(); |
---|
166 | if((index=iiTestConvert(tok, POLY_CMD))==0) |
---|
167 | goto mod_MinDeg_error; |
---|
168 | v_save = v->next; |
---|
169 | v->next = NULL; |
---|
170 | if(iiConvert(tok, POLY_CMD, index, v, zp)) |
---|
171 | goto mod_MinDeg_error; |
---|
172 | v = v_save; |
---|
173 | p = (poly)zp->Data(); |
---|
174 | if(v!=NULL) { tok = v->Typ(); goto mod_MinDeg_error; } |
---|
175 | |
---|
176 | #line 33 "pcv.mod" |
---|
177 | |
---|
178 | #line 34 "pcv.mod" |
---|
179 | #line 181 "pcv.cc" |
---|
180 | res->rtyp = INT_CMD; |
---|
181 | res->data = (void *)pcvMinDeg(p); |
---|
182 | if(res->data != NULL) return FALSE; |
---|
183 | else return TRUE; |
---|
184 | |
---|
185 | |
---|
186 | mod_MinDeg_error: |
---|
187 | Werror("MinDeg(`%s`) is not supported", Tok2Cmdname(tok)); |
---|
188 | Werror("expected MinDeg('poly')"); |
---|
189 | return TRUE; |
---|
190 | } |
---|
191 | |
---|
192 | #line 37 "pcv.mod" |
---|
193 | BOOLEAN mod_P2CV(leftv res, leftv h) |
---|
194 | { |
---|
195 | #line 37 "pcv.mod" |
---|
196 | #line 198 "pcv.cc" |
---|
197 | |
---|
198 | #line 38 "pcv.mod" |
---|
199 | #line 201 "pcv.cc" |
---|
200 | leftv v = h, v_save; |
---|
201 | int tok = NONE, index = 0; |
---|
202 | sleftv spl; leftv zpl = &spl; |
---|
203 | lists pl; |
---|
204 | sleftv sd0; leftv zd0 = &sd0; |
---|
205 | int d0; |
---|
206 | sleftv sd1; leftv zd1 = &sd1; |
---|
207 | int d1; |
---|
208 | #line 38 "pcv.mod" |
---|
209 | |
---|
210 | |
---|
211 | |
---|
212 | /* check if current RingHandle is set */ |
---|
213 | if(currRingHdl == NULL) |
---|
214 | { |
---|
215 | WerrorS("no ring active"); |
---|
216 | return TRUE; |
---|
217 | } |
---|
218 | |
---|
219 | #line 47 "pcv.mod" |
---|
220 | #line 222 "pcv.cc" |
---|
221 | if(v==NULL) goto mod_P2CV_error; |
---|
222 | tok = v->Typ(); |
---|
223 | if((index=iiTestConvert(tok, LIST_CMD))==0) |
---|
224 | goto mod_P2CV_error; |
---|
225 | v_save = v->next; |
---|
226 | v->next = NULL; |
---|
227 | if(iiConvert(tok, LIST_CMD, index, v, zpl)) |
---|
228 | goto mod_P2CV_error; |
---|
229 | v = v_save; |
---|
230 | pl = (lists)zpl->Data(); |
---|
231 | if(v==NULL) goto mod_P2CV_error; |
---|
232 | tok = v->Typ(); |
---|
233 | if((index=iiTestConvert(tok, INT_CMD))==0) |
---|
234 | goto mod_P2CV_error; |
---|
235 | v_save = v->next; |
---|
236 | v->next = NULL; |
---|
237 | if(iiConvert(tok, INT_CMD, index, v, zd0)) |
---|
238 | goto mod_P2CV_error; |
---|
239 | v = v_save; |
---|
240 | d0 = (int)zd0->Data(); |
---|
241 | if(v==NULL) goto mod_P2CV_error; |
---|
242 | tok = v->Typ(); |
---|
243 | if((index=iiTestConvert(tok, INT_CMD))==0) |
---|
244 | goto mod_P2CV_error; |
---|
245 | v_save = v->next; |
---|
246 | v->next = NULL; |
---|
247 | if(iiConvert(tok, INT_CMD, index, v, zd1)) |
---|
248 | goto mod_P2CV_error; |
---|
249 | v = v_save; |
---|
250 | d1 = (int)zd1->Data(); |
---|
251 | if(v!=NULL) { tok = v->Typ(); goto mod_P2CV_error; } |
---|
252 | |
---|
253 | #line 47 "pcv.mod" |
---|
254 | |
---|
255 | #line 48 "pcv.mod" |
---|
256 | #line 258 "pcv.cc" |
---|
257 | res->rtyp = LIST_CMD; |
---|
258 | res->data = (void *)pcvP2CV(pl, d0, d1); |
---|
259 | if(res->data != NULL) return FALSE; |
---|
260 | else return TRUE; |
---|
261 | |
---|
262 | |
---|
263 | mod_P2CV_error: |
---|
264 | Werror("P2CV(`%s`) is not supported", Tok2Cmdname(tok)); |
---|
265 | Werror("expected P2CV('list','int','int')"); |
---|
266 | return TRUE; |
---|
267 | } |
---|
268 | |
---|
269 | #line 51 "pcv.mod" |
---|
270 | BOOLEAN mod_CV2P(leftv res, leftv h) |
---|
271 | { |
---|
272 | #line 52 "pcv.mod" |
---|
273 | #line 275 "pcv.cc" |
---|
274 | |
---|
275 | #line 53 "pcv.mod" |
---|
276 | #line 278 "pcv.cc" |
---|
277 | leftv v = h, v_save; |
---|
278 | int tok = NONE, index = 0; |
---|
279 | sleftv spl; leftv zpl = &spl; |
---|
280 | lists pl; |
---|
281 | sleftv sd0; leftv zd0 = &sd0; |
---|
282 | int d0; |
---|
283 | sleftv sd1; leftv zd1 = &sd1; |
---|
284 | int d1; |
---|
285 | #line 53 "pcv.mod" |
---|
286 | |
---|
287 | |
---|
288 | |
---|
289 | /* check if current RingHandle is set */ |
---|
290 | if(currRingHdl == NULL) |
---|
291 | { |
---|
292 | WerrorS("no ring active"); |
---|
293 | return TRUE; |
---|
294 | } |
---|
295 | |
---|
296 | #line 62 "pcv.mod" |
---|
297 | #line 299 "pcv.cc" |
---|
298 | if(v==NULL) goto mod_CV2P_error; |
---|
299 | tok = v->Typ(); |
---|
300 | if((index=iiTestConvert(tok, LIST_CMD))==0) |
---|
301 | goto mod_CV2P_error; |
---|
302 | v_save = v->next; |
---|
303 | v->next = NULL; |
---|
304 | if(iiConvert(tok, LIST_CMD, index, v, zpl)) |
---|
305 | goto mod_CV2P_error; |
---|
306 | v = v_save; |
---|
307 | pl = (lists)zpl->Data(); |
---|
308 | if(v==NULL) goto mod_CV2P_error; |
---|
309 | tok = v->Typ(); |
---|
310 | if((index=iiTestConvert(tok, INT_CMD))==0) |
---|
311 | goto mod_CV2P_error; |
---|
312 | v_save = v->next; |
---|
313 | v->next = NULL; |
---|
314 | if(iiConvert(tok, INT_CMD, index, v, zd0)) |
---|
315 | goto mod_CV2P_error; |
---|
316 | v = v_save; |
---|
317 | d0 = (int)zd0->Data(); |
---|
318 | if(v==NULL) goto mod_CV2P_error; |
---|
319 | tok = v->Typ(); |
---|
320 | if((index=iiTestConvert(tok, INT_CMD))==0) |
---|
321 | goto mod_CV2P_error; |
---|
322 | v_save = v->next; |
---|
323 | v->next = NULL; |
---|
324 | if(iiConvert(tok, INT_CMD, index, v, zd1)) |
---|
325 | goto mod_CV2P_error; |
---|
326 | v = v_save; |
---|
327 | d1 = (int)zd1->Data(); |
---|
328 | if(v!=NULL) { tok = v->Typ(); goto mod_CV2P_error; } |
---|
329 | |
---|
330 | #line 62 "pcv.mod" |
---|
331 | |
---|
332 | #line 63 "pcv.mod" |
---|
333 | #line 335 "pcv.cc" |
---|
334 | res->rtyp = LIST_CMD; |
---|
335 | res->data = (void *)pcvCV2P(pl, d0, d1); |
---|
336 | if(res->data != NULL) return FALSE; |
---|
337 | else return TRUE; |
---|
338 | |
---|
339 | |
---|
340 | mod_CV2P_error: |
---|
341 | Werror("CV2P(`%s`) is not supported", Tok2Cmdname(tok)); |
---|
342 | Werror("expected CV2P('list','int','int')"); |
---|
343 | return TRUE; |
---|
344 | } |
---|
345 | |
---|
346 | #line 66 "pcv.mod" |
---|
347 | BOOLEAN mod_Dim(leftv res, leftv h) |
---|
348 | { |
---|
349 | #line 67 "pcv.mod" |
---|
350 | #line 352 "pcv.cc" |
---|
351 | |
---|
352 | #line 68 "pcv.mod" |
---|
353 | #line 355 "pcv.cc" |
---|
354 | leftv v = h, v_save; |
---|
355 | int tok = NONE, index = 0; |
---|
356 | sleftv sd0; leftv zd0 = &sd0; |
---|
357 | int d0; |
---|
358 | sleftv sd1; leftv zd1 = &sd1; |
---|
359 | int d1; |
---|
360 | #line 68 "pcv.mod" |
---|
361 | |
---|
362 | |
---|
363 | |
---|
364 | /* check if current RingHandle is set */ |
---|
365 | if(currRingHdl == NULL) |
---|
366 | { |
---|
367 | WerrorS("no ring active"); |
---|
368 | return TRUE; |
---|
369 | } |
---|
370 | |
---|
371 | #line 77 "pcv.mod" |
---|
372 | #line 374 "pcv.cc" |
---|
373 | if(v==NULL) goto mod_Dim_error; |
---|
374 | tok = v->Typ(); |
---|
375 | if((index=iiTestConvert(tok, INT_CMD))==0) |
---|
376 | goto mod_Dim_error; |
---|
377 | v_save = v->next; |
---|
378 | v->next = NULL; |
---|
379 | if(iiConvert(tok, INT_CMD, index, v, zd0)) |
---|
380 | goto mod_Dim_error; |
---|
381 | v = v_save; |
---|
382 | d0 = (int)zd0->Data(); |
---|
383 | if(v==NULL) goto mod_Dim_error; |
---|
384 | tok = v->Typ(); |
---|
385 | if((index=iiTestConvert(tok, INT_CMD))==0) |
---|
386 | goto mod_Dim_error; |
---|
387 | v_save = v->next; |
---|
388 | v->next = NULL; |
---|
389 | if(iiConvert(tok, INT_CMD, index, v, zd1)) |
---|
390 | goto mod_Dim_error; |
---|
391 | v = v_save; |
---|
392 | d1 = (int)zd1->Data(); |
---|
393 | if(v!=NULL) { tok = v->Typ(); goto mod_Dim_error; } |
---|
394 | |
---|
395 | #line 77 "pcv.mod" |
---|
396 | |
---|
397 | #line 78 "pcv.mod" |
---|
398 | #line 400 "pcv.cc" |
---|
399 | res->rtyp = INT_CMD; |
---|
400 | res->data = (void *)pcvDim(d0, d1); |
---|
401 | if(res->data != NULL) return FALSE; |
---|
402 | else return TRUE; |
---|
403 | |
---|
404 | |
---|
405 | mod_Dim_error: |
---|
406 | Werror("Dim(`%s`) is not supported", Tok2Cmdname(tok)); |
---|
407 | Werror("expected Dim('int','int')"); |
---|
408 | return TRUE; |
---|
409 | } |
---|
410 | |
---|
411 | #line 81 "pcv.mod" |
---|
412 | BOOLEAN mod_Basis(leftv res, leftv h) |
---|
413 | { |
---|
414 | #line 82 "pcv.mod" |
---|
415 | #line 417 "pcv.cc" |
---|
416 | |
---|
417 | #line 83 "pcv.mod" |
---|
418 | #line 420 "pcv.cc" |
---|
419 | leftv v = h, v_save; |
---|
420 | int tok = NONE, index = 0; |
---|
421 | sleftv sd0; leftv zd0 = &sd0; |
---|
422 | int d0; |
---|
423 | sleftv sd1; leftv zd1 = &sd1; |
---|
424 | int d1; |
---|
425 | #line 83 "pcv.mod" |
---|
426 | |
---|
427 | |
---|
428 | |
---|
429 | /* check if current RingHandle is set */ |
---|
430 | if(currRingHdl == NULL) |
---|
431 | { |
---|
432 | WerrorS("no ring active"); |
---|
433 | return TRUE; |
---|
434 | } |
---|
435 | |
---|
436 | #line 92 "pcv.mod" |
---|
437 | #line 439 "pcv.cc" |
---|
438 | if(v==NULL) goto mod_Basis_error; |
---|
439 | tok = v->Typ(); |
---|
440 | if((index=iiTestConvert(tok, INT_CMD))==0) |
---|
441 | goto mod_Basis_error; |
---|
442 | v_save = v->next; |
---|
443 | v->next = NULL; |
---|
444 | if(iiConvert(tok, INT_CMD, index, v, zd0)) |
---|
445 | goto mod_Basis_error; |
---|
446 | v = v_save; |
---|
447 | d0 = (int)zd0->Data(); |
---|
448 | if(v==NULL) goto mod_Basis_error; |
---|
449 | tok = v->Typ(); |
---|
450 | if((index=iiTestConvert(tok, INT_CMD))==0) |
---|
451 | goto mod_Basis_error; |
---|
452 | v_save = v->next; |
---|
453 | v->next = NULL; |
---|
454 | if(iiConvert(tok, INT_CMD, index, v, zd1)) |
---|
455 | goto mod_Basis_error; |
---|
456 | v = v_save; |
---|
457 | d1 = (int)zd1->Data(); |
---|
458 | if(v!=NULL) { tok = v->Typ(); goto mod_Basis_error; } |
---|
459 | |
---|
460 | #line 92 "pcv.mod" |
---|
461 | |
---|
462 | #line 93 "pcv.mod" |
---|
463 | #line 465 "pcv.cc" |
---|
464 | res->rtyp = LIST_CMD; |
---|
465 | res->data = (void *)pcvBasis(d0, d1); |
---|
466 | if(res->data != NULL) return FALSE; |
---|
467 | else return TRUE; |
---|
468 | |
---|
469 | |
---|
470 | mod_Basis_error: |
---|
471 | Werror("Basis(`%s`) is not supported", Tok2Cmdname(tok)); |
---|
472 | Werror("expected Basis('int','int')"); |
---|
473 | return TRUE; |
---|
474 | } |
---|
475 | |
---|
476 | |
---|
477 | #line 478 "pcv.cc" |
---|