Annotation of OpenXM_contrib2/asir2000/builtin/dp.c, Revision 1.8
1.5 noro 1: /*
2: * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
3: * All rights reserved.
4: *
5: * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
6: * non-exclusive and royalty-free license to use, copy, modify and
7: * redistribute, solely for non-commercial and non-profit purposes, the
8: * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
9: * conditions of this Agreement. For the avoidance of doubt, you acquire
10: * only a limited right to use the SOFTWARE hereunder, and FLL or any
11: * third party developer retains all rights, including but not limited to
12: * copyrights, in and to the SOFTWARE.
13: *
14: * (1) FLL does not grant you a license in any way for commercial
15: * purposes. You may use the SOFTWARE only for non-commercial and
16: * non-profit purposes only, such as academic, research and internal
17: * business use.
18: * (2) The SOFTWARE is protected by the Copyright Law of Japan and
19: * international copyright treaties. If you make copies of the SOFTWARE,
20: * with or without modification, as permitted hereunder, you shall affix
21: * to all such copies of the SOFTWARE the above copyright notice.
22: * (3) An explicit reference to this SOFTWARE and its copyright owner
23: * shall be made on your publication or presentation in any form of the
24: * results obtained by use of the SOFTWARE.
25: * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
1.6 noro 26: * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
1.5 noro 27: * for such modification or the source code of the modified part of the
28: * SOFTWARE.
29: *
30: * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
31: * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
32: * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
33: * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
34: * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
35: * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
36: * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
37: * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
38: * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
39: * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
40: * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
41: * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
42: * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
43: * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
44: * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
45: * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
46: * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
47: *
1.8 ! noro 48: * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.7 2000/12/05 01:24:50 noro Exp $
1.5 noro 49: */
1.1 noro 50: #include "ca.h"
51: #include "base.h"
52: #include "parse.h"
53:
54: extern int dp_fcoeffs;
1.8 ! noro 55: extern int dp_nelim;
! 56: extern int dp_order_pair_length;
! 57: extern struct order_pair *dp_order_pair;
! 58: extern struct order_spec dp_current_spec;
! 59:
1.1 noro 60:
61: void Pdp_ord(), Pdp_ptod(), Pdp_dtop();
62: void Pdp_ptozp(), Pdp_ptozp2(), Pdp_red(), Pdp_red2(), Pdp_lcm(), Pdp_redble();
63: void Pdp_sp(), Pdp_hm(), Pdp_ht(), Pdp_hc(), Pdp_rest(), Pdp_td(), Pdp_sugar();
64: void Pdp_cri1(),Pdp_cri2(),Pdp_subd(),Pdp_mod(),Pdp_red_mod(),Pdp_tdiv();
65: void Pdp_prim(),Pdp_red_coef(),Pdp_mag(),Pdp_set_kara(),Pdp_rat();
66: void Pdp_nf(),Pdp_true_nf(),Pdp_nf_ptozp();
67: void Pdp_nf_mod(),Pdp_true_nf_mod();
68: void Pdp_criB(),Pdp_nelim();
69: void Pdp_minp(),Pdp_nf_demand(),Pdp_sp_mod();
70: void Pdp_homo(),Pdp_dehomo();
71: void Pdp_gr_mod_main();
72: void Pdp_gr_main(),Pdp_gr_hm_main(),Pdp_gr_d_main(),Pdp_gr_flags();
73: void Pdp_f4_main(),Pdp_f4_mod_main();
74: void Pdp_gr_print();
1.8 ! noro 75: void Pdp_mbase(),Pdp_lnf_mod(),Pdp_nf_tab_mod(),Pdp_mdtod();
! 76: void Pdp_vtoe(), Pdp_etov(), Pdp_dtov(), Pdp_idiv(), Pdp_sep();
! 77: void Pdp_cont();
1.1 noro 78:
79: struct ftab dp_tab[] = {
1.8 ! noro 80: /* content reduction */
1.1 noro 81: {"dp_ptozp",Pdp_ptozp,1},
82: {"dp_ptozp2",Pdp_ptozp2,2},
83: {"dp_prim",Pdp_prim,1},
1.8 ! noro 84: {"dp_red_coef",Pdp_red_coef,2},
! 85: {"dp_cont",Pdp_cont,1},
! 86:
! 87: /* s-poly */
! 88: {"dp_sp",Pdp_sp,2},
! 89: {"dp_sp_mod",Pdp_sp_mod,3},
! 90:
! 91: /* m-reduction */
1.1 noro 92: {"dp_red",Pdp_red,3},
93: {"dp_red_mod",Pdp_red_mod,4},
1.8 ! noro 94:
! 95: /* normal form */
1.1 noro 96: {"dp_nf",Pdp_nf,4},
97: {"dp_true_nf",Pdp_true_nf,4},
98: {"dp_nf_ptozp",Pdp_nf_ptozp,5},
99: {"dp_nf_demand",Pdp_nf_demand,5},
100: {"dp_nf_mod",Pdp_nf_mod,5},
101: {"dp_true_nf_mod",Pdp_true_nf_mod,5},
1.8 ! noro 102: {"dp_lnf_mod",Pdp_lnf_mod,3},
! 103: {"dp_nf_tab_mod",Pdp_nf_tab_mod,3},
! 104:
! 105: /* Buchberger algorithm */
1.1 noro 106: {"dp_gr_main",Pdp_gr_main,5},
107: {"dp_gr_mod_main",Pdp_gr_mod_main,5},
1.8 ! noro 108:
! 109: /* F4 algorithm */
1.1 noro 110: {"dp_f4_main",Pdp_f4_main,3},
111: {"dp_f4_mod_main",Pdp_f4_mod_main,4},
1.8 ! noro 112:
! 113: {0,0,0},
! 114: };
! 115:
! 116: struct ftab dp_supp_tab[] = {
! 117: /* setting flags */
! 118: {"dp_ord",Pdp_ord,-1},
! 119: {"dp_set_kara",Pdp_set_kara,-1},
! 120: {"dp_nelim",Pdp_nelim,-1},
1.1 noro 121: {"dp_gr_flags",Pdp_gr_flags,-1},
122: {"dp_gr_print",Pdp_gr_print,-1},
1.8 ! noro 123:
! 124: /* converters */
! 125: {"dp_ptod",Pdp_ptod,2},
! 126: {"dp_dtop",Pdp_dtop,2},
! 127: {"dp_homo",Pdp_homo,1},
! 128: {"dp_dehomo",Pdp_dehomo,1},
! 129: {"dp_etov",Pdp_etov,1},
! 130: {"dp_vtoe",Pdp_vtoe,1},
! 131: {"dp_dtov",Pdp_dtov,1},
! 132: {"dp_mdtod",Pdp_mdtod,1},
! 133: {"dp_mod",Pdp_mod,3},
! 134: {"dp_rat",Pdp_rat,1},
! 135:
! 136: /* criteria */
! 137: {"dp_cri1",Pdp_cri1,2},
! 138: {"dp_cri2",Pdp_cri2,2},
! 139: {"dp_criB",Pdp_criB,3},
! 140:
! 141: /* simple operation */
! 142: {"dp_subd",Pdp_subd,2},
! 143: {"dp_lcm",Pdp_lcm,2},
! 144: {"dp_hm",Pdp_hm,1},
! 145: {"dp_ht",Pdp_ht,1},
! 146: {"dp_hc",Pdp_hc,1},
! 147: {"dp_rest",Pdp_rest,1},
! 148:
! 149: /* degree and size */
! 150: {"dp_td",Pdp_td,1},
! 151: {"dp_mag",Pdp_mag,1},
! 152: {"dp_sugar",Pdp_sugar,1},
! 153:
! 154: /* misc */
! 155: {"dp_mbase",Pdp_mbase,1},
! 156: {"dp_redble",Pdp_redble,2},
! 157: {"dp_sep",Pdp_sep,2},
! 158: {"dp_idiv",Pdp_idiv,2},
! 159: {"dp_tdiv",Pdp_tdiv,2},
! 160: {"dp_minp",Pdp_minp,2},
! 161:
! 162: {0,0,0}
1.1 noro 163: };
164:
1.8 ! noro 165: void Pdp_mdtod(arg,rp)
! 166: NODE arg;
! 167: DP *rp;
! 168: {
! 169: MP m,mr,mr0;
! 170: DP p;
! 171: P t;
! 172:
! 173: p = (DP)ARG0(arg);
! 174: if ( !p )
! 175: *rp = 0;
! 176: else {
! 177: for ( mr0 = 0, m = BDY(p); m; m = NEXT(m) ) {
! 178: mptop(m->c,&t); NEXTMP(mr0,mr); mr->c = t; mr->dl = m->dl;
! 179: }
! 180: NEXT(mr) = 0; MKDP(p->nv,mr0,*rp); (*rp)->sugar = p->sugar;
! 181: }
! 182: }
! 183:
! 184: void Pdp_sep(arg,rp)
! 185: NODE arg;
! 186: VECT *rp;
! 187: {
! 188: DP p,r;
! 189: MP m,t;
! 190: MP *w0,*w;
! 191: int i,n,d,nv,sugar;
! 192: VECT v;
! 193: pointer *pv;
! 194:
! 195: p = (DP)ARG0(arg); m = BDY(p);
! 196: d = QTOS((Q)ARG1(arg));
! 197: for ( t = m, n = 0; t; t = NEXT(t), n++ );
! 198: if ( d > n )
! 199: d = n;
! 200: MKVECT(v,d); *rp = v;
! 201: pv = BDY(v); nv = p->nv; sugar = p->sugar;
! 202: w0 = (MP *)MALLOC(d*sizeof(MP)); bzero(w0,d*sizeof(MP));
! 203: w = (MP *)MALLOC(d*sizeof(MP)); bzero(w,d*sizeof(MP));
! 204: for ( t = BDY(p), i = 0; t; t = NEXT(t), i++, i %= d ) {
! 205: NEXTMP(w0[i],w[i]); w[i]->c = t->c; w[i]->dl = t->dl;
! 206: }
! 207: for ( i = 0; i < d; i++ ) {
! 208: NEXT(w[i]) = 0; MKDP(nv,w0[i],r); r->sugar = sugar;
! 209: pv[i] = (pointer)r;
! 210: }
! 211: }
! 212:
! 213: void Pdp_idiv(arg,rp)
! 214: NODE arg;
! 215: DP *rp;
! 216: {
! 217: dp_idiv((DP)ARG0(arg),(Q)ARG1(arg),rp);
! 218: }
! 219:
! 220: void Pdp_cont(arg,rp)
! 221: NODE arg;
! 222: Q *rp;
! 223: {
! 224: dp_cont((DP)ARG0(arg),rp);
! 225: }
! 226:
! 227: void Pdp_dtov(arg,rp)
! 228: NODE arg;
! 229: VECT *rp;
! 230: {
! 231: dp_dtov((DP)ARG0(arg),rp);
! 232: }
! 233:
! 234: void Pdp_mbase(arg,rp)
! 235: NODE arg;
! 236: LIST *rp;
! 237: {
! 238: NODE mb;
! 239:
! 240: asir_assert(ARG0(arg),O_LIST,"dp_mbase");
! 241: dp_mbase(BDY((LIST)ARG0(arg)),&mb);
! 242: MKLIST(*rp,mb);
! 243: }
! 244:
! 245: void Pdp_etov(arg,rp)
! 246: NODE arg;
! 247: VECT *rp;
! 248: {
! 249: DP dp;
! 250: int n,i;
! 251: int *d;
! 252: VECT v;
! 253: Q t;
! 254:
! 255: dp = (DP)ARG0(arg);
! 256: asir_assert(dp,O_DP,"dp_etov");
! 257: n = dp->nv; d = BDY(dp)->dl->d;
! 258: MKVECT(v,n);
! 259: for ( i = 0; i < n; i++ ) {
! 260: STOQ(d[i],t); v->body[i] = (pointer)t;
! 261: }
! 262: *rp = v;
! 263: }
! 264:
! 265: void Pdp_vtoe(arg,rp)
! 266: NODE arg;
! 267: DP *rp;
! 268: {
! 269: DP dp;
! 270: DL dl;
! 271: MP m;
! 272: int n,i,td;
! 273: int *d;
! 274: VECT v;
! 275:
! 276: v = (VECT)ARG0(arg);
! 277: asir_assert(v,O_VECT,"dp_vtoe");
! 278: n = v->len;
! 279: NEWDL(dl,n); d = dl->d;
! 280: for ( i = 0, td = 0; i < n; i++ ) {
! 281: d[i] = QTOS((Q)(v->body[i])); td += d[i];
! 282: }
! 283: dl->td = td;
! 284: NEWMP(m); m->dl = dl; m->c = (P)ONE; NEXT(m) = 0;
! 285: MKDP(n,m,dp); dp->sugar = td;
! 286: *rp = dp;
! 287: }
! 288:
! 289: void Pdp_lnf_mod(arg,rp)
! 290: NODE arg;
! 291: LIST *rp;
! 292: {
! 293: DP r1,r2;
! 294: NODE b,g,n;
! 295: int mod;
! 296:
! 297: asir_assert(ARG0(arg),O_LIST,"dp_lnf_mod");
! 298: asir_assert(ARG1(arg),O_LIST,"dp_lnf_mod");
! 299: asir_assert(ARG2(arg),O_N,"dp_lnf_mod");
! 300: b = BDY((LIST)ARG0(arg)); g = BDY((LIST)ARG1(arg));
! 301: mod = QTOS((Q)ARG2(arg));
! 302: dp_lnf_mod((DP)BDY(b),(DP)BDY(NEXT(b)),g,mod,&r1,&r2);
! 303: NEWNODE(n); BDY(n) = (pointer)r1;
! 304: NEWNODE(NEXT(n)); BDY(NEXT(n)) = (pointer)r2;
! 305: NEXT(NEXT(n)) = 0; MKLIST(*rp,n);
! 306: }
! 307:
! 308: void Pdp_nf_tab_mod(arg,rp)
! 309: NODE arg;
! 310: DP *rp;
! 311: {
! 312: asir_assert(ARG0(arg),O_DP,"dp_nf_tab_mod");
! 313: asir_assert(ARG1(arg),O_VECT,"dp_nf_tab_mod");
! 314: asir_assert(ARG2(arg),O_N,"dp_nf_tab_mod");
! 315: dp_nf_tab_mod((DP)ARG0(arg),(LIST *)BDY((VECT)ARG1(arg)),
! 316: QTOS((Q)ARG2(arg)),rp);
! 317: }
1.1 noro 318:
319: void Pdp_ord(arg,rp)
320: NODE arg;
321: Obj *rp;
322: {
323: struct order_spec spec;
324:
325: if ( !arg )
326: *rp = dp_current_spec.obj;
327: else if ( !create_order_spec((Obj)ARG0(arg),&spec) )
328: error("dp_ord : invalid order specification");
329: else {
330: initd(&spec); *rp = spec.obj;
331: }
332: }
333:
334: void Pdp_ptod(arg,rp)
335: NODE arg;
336: DP *rp;
337: {
338: NODE n;
339: VL vl,tvl;
340:
341: asir_assert(ARG0(arg),O_P,"dp_ptod");
342: asir_assert(ARG1(arg),O_LIST,"dp_ptod");
343: for ( vl = 0, n = BDY((LIST)ARG1(arg)); n; n = NEXT(n) ) {
344: if ( !vl ) {
345: NEWVL(vl); tvl = vl;
346: } else {
347: NEWVL(NEXT(tvl)); tvl = NEXT(tvl);
348: }
349: VR(tvl) = VR((P)BDY(n));
350: }
351: if ( vl )
352: NEXT(tvl) = 0;
353: ptod(CO,vl,(P)ARG0(arg),rp);
354: }
355:
356: void Pdp_dtop(arg,rp)
357: NODE arg;
358: P *rp;
359: {
360: NODE n;
361: VL vl,tvl;
362:
363: asir_assert(ARG0(arg),O_DP,"dp_dtop");
364: asir_assert(ARG1(arg),O_LIST,"dp_dtop");
365: for ( vl = 0, n = BDY((LIST)ARG1(arg)); n; n = NEXT(n) ) {
366: if ( !vl ) {
367: NEWVL(vl); tvl = vl;
368: } else {
369: NEWVL(NEXT(tvl)); tvl = NEXT(tvl);
370: }
371: VR(tvl) = VR((P)BDY(n));
372: }
373: if ( vl )
374: NEXT(tvl) = 0;
375: dtop(CO,vl,(DP)ARG0(arg),rp);
376: }
377:
378: extern LIST Dist;
379:
380: void Pdp_ptozp(arg,rp)
381: NODE arg;
382: DP *rp;
383: {
384: asir_assert(ARG0(arg),O_DP,"dp_ptozp");
385: if ( Dist )
386: dp_ptozp_d(BDY(Dist),length(BDY(Dist)),(DP)ARG0(arg),rp);
387: else
388: dp_ptozp((DP)ARG0(arg),rp);
389: }
390:
391: void Pdp_ptozp2(arg,rp)
392: NODE arg;
393: LIST *rp;
394: {
395: DP p0,p1,h,r;
396: NODE n0;
397:
398: p0 = (DP)ARG0(arg); p1 = (DP)ARG1(arg);
399: asir_assert(p0,O_DP,"dp_ptozp2");
400: asir_assert(p1,O_DP,"dp_ptozp2");
401: if ( Dist )
402: dp_ptozp2_d(BDY(Dist),length(BDY(Dist)),p0,p1,&h,&r);
403: else
404: dp_ptozp2(p0,p1,&h,&r);
405: NEWNODE(n0); BDY(n0) = (pointer)h;
406: NEWNODE(NEXT(n0)); BDY(NEXT(n0)) = (pointer)r;
407: NEXT(NEXT(n0)) = 0;
408: MKLIST(*rp,n0);
409: }
410:
411: void Pdp_prim(arg,rp)
412: NODE arg;
413: DP *rp;
414: {
415: DP t;
416:
417: asir_assert(ARG0(arg),O_DP,"dp_prim");
418: dp_prim((DP)ARG0(arg),&t); dp_ptozp(t,rp);
419: }
420:
421: void Pdp_mod(arg,rp)
422: NODE arg;
423: DP *rp;
424: {
425: DP p;
426: int mod;
427: NODE subst;
428:
429: asir_assert(ARG0(arg),O_DP,"dp_mod");
430: asir_assert(ARG1(arg),O_N,"dp_mod");
431: asir_assert(ARG2(arg),O_LIST,"dp_mod");
432: p = (DP)ARG0(arg); mod = QTOS((Q)ARG1(arg));
433: subst = BDY((LIST)ARG2(arg));
434: dp_mod(p,mod,subst,rp);
435: }
436:
437: void Pdp_rat(arg,rp)
438: NODE arg;
439: DP *rp;
440: {
441: asir_assert(ARG0(arg),O_DP,"dp_rat");
442: dp_rat((DP)ARG0(arg),rp);
443: }
444:
445: void Pdp_nf(arg,rp)
446: NODE arg;
447: DP *rp;
448: {
449: NODE b;
450: DP *ps;
451: DP g;
452: int full;
453:
454: asir_assert(ARG0(arg),O_LIST,"dp_nf");
455: asir_assert(ARG1(arg),O_DP,"dp_nf");
456: asir_assert(ARG2(arg),O_VECT,"dp_nf");
457: asir_assert(ARG3(arg),O_N,"dp_nf");
458: if ( !(g = (DP)ARG1(arg)) ) {
459: *rp = 0; return;
460: }
461: b = BDY((LIST)ARG0(arg)); ps = (DP *)BDY((VECT)ARG2(arg));
462: full = (Q)ARG3(arg) ? 1 : 0;
463: dp_nf(b,g,ps,full,rp);
464: }
465:
466: void Pdp_true_nf(arg,rp)
467: NODE arg;
468: LIST *rp;
469: {
470: NODE b,n;
471: DP *ps;
472: DP g;
473: DP nm;
474: P dn;
475: int full;
476:
477: asir_assert(ARG0(arg),O_LIST,"dp_true_nf");
478: asir_assert(ARG1(arg),O_DP,"dp_true_nf");
479: asir_assert(ARG2(arg),O_VECT,"dp_true_nf");
480: asir_assert(ARG3(arg),O_N,"dp_nf");
481: if ( !(g = (DP)ARG1(arg)) ) {
482: nm = 0; dn = (P)ONE;
483: } else {
484: b = BDY((LIST)ARG0(arg)); ps = (DP *)BDY((VECT)ARG2(arg));
485: full = (Q)ARG3(arg) ? 1 : 0;
486: dp_true_nf(b,g,ps,full,&nm,&dn);
487: }
488: NEWNODE(n); BDY(n) = (pointer)nm;
489: NEWNODE(NEXT(n)); BDY(NEXT(n)) = (pointer)dn;
490: NEXT(NEXT(n)) = 0; MKLIST(*rp,n);
491: }
492:
1.8 ! noro 493: void Pdp_nf_ptozp(arg,rp)
! 494: NODE arg;
1.1 noro 495: DP *rp;
496: {
1.8 ! noro 497: NODE b;
! 498: DP g;
! 499: DP *ps;
! 500: int full,multiple;
1.1 noro 501:
1.8 ! noro 502: asir_assert(ARG0(arg),O_LIST,"dp_nf_ptozp");
! 503: asir_assert(ARG1(arg),O_DP,"dp_nf_ptozp");
! 504: asir_assert(ARG2(arg),O_VECT,"dp_nf_ptozp");
! 505: asir_assert(ARG3(arg),O_N,"dp_nf_ptozp");
! 506: asir_assert(ARG4(arg),O_N,"dp_nf_ptozp");
! 507: if ( !(g = (DP)ARG1(arg)) ) {
1.1 noro 508: *rp = 0; return;
509: }
1.8 ! noro 510: b = BDY((LIST)ARG0(arg)); ps = (DP *)BDY((VECT)ARG2(arg));
! 511: full = (Q)ARG3(arg) ? 1 : 0;
! 512: multiple = QTOS((Q)ARG4(arg));
! 513: dp_nf_ptozp(b,g,ps,full,multiple,rp);
! 514: }
1.1 noro 515:
516: void Pdp_nf_demand(arg,rp)
517: NODE arg;
518: DP *rp;
519: {
1.8 ! noro 520: DP g,u,p,d,s,t,dmy1;
! 521: P dmy;
! 522: NODE b,l;
! 523: DP *hps;
1.1 noro 524: MP m,mr;
525: int i,n;
526: int *wb;
1.8 ! noro 527: int full;
! 528: char *fprefix;
1.1 noro 529: int sugar,psugar;
530:
1.8 ! noro 531: asir_assert(ARG0(arg),O_LIST,"dp_nf_demand");
! 532: asir_assert(ARG1(arg),O_DP,"dp_nf_demand");
! 533: asir_assert(ARG2(arg),O_N,"dp_nf_demand");
! 534: asir_assert(ARG3(arg),O_VECT,"dp_nf_demand");
! 535: asir_assert(ARG4(arg),O_STR,"dp_nf_demand");
! 536: if ( !(g = (DP)ARG1(arg)) ) {
! 537: *rp = 0; return;
1.1 noro 538: }
1.8 ! noro 539: b = BDY((LIST)ARG0(arg)); full = (Q)ARG2(arg) ? 1 : 0;
! 540: hps = (DP *)BDY((VECT)ARG3(arg)); fprefix = BDY((STRING)ARG4(arg));
1.1 noro 541: for ( n = 0, l = b; l; l = NEXT(l), n++ );
1.8 ! noro 542: wb = (int *)ALLOCA(n*sizeof(int));
1.1 noro 543: for ( i = 0, l = b; i < n; l = NEXT(l), i++ )
544: wb[i] = QTOS((Q)BDY(l));
545: sugar = g->sugar;
546: for ( d = 0; g; ) {
547: for ( u = 0, i = 0; i < n; i++ ) {
1.8 ! noro 548: if ( dp_redble(g,hps[wb[i]]) ) {
! 549: FILE *fp;
! 550: char fname[BUFSIZ];
! 551:
! 552: sprintf(fname,"%s%d",fprefix,wb[i]);
! 553: fprintf(stderr,"loading %s\n",fname);
! 554: fp = fopen(fname,"r"); skipvl(fp);
! 555: loadobj(fp,(Obj *)&p); fclose(fp);
! 556: dp_red(d,g,p,&t,&u,&dmy,&dmy1);
1.1 noro 557: psugar = (BDY(g)->dl->td - BDY(p)->dl->td) + p->sugar;
558: sugar = MAX(sugar,psugar);
559: if ( !u ) {
560: if ( d )
561: d->sugar = sugar;
1.8 ! noro 562: *rp = d; return;
1.1 noro 563: }
1.8 ! noro 564: d = t;
1.1 noro 565: break;
566: }
567: }
568: if ( u )
569: g = u;
570: else if ( !full ) {
571: if ( g ) {
572: MKDP(g->nv,BDY(g),t); t->sugar = sugar; g = t;
573: }
1.8 ! noro 574: *rp = g; return;
1.1 noro 575: } else {
576: m = BDY(g); NEWMP(mr); mr->dl = m->dl; mr->c = m->c;
577: NEXT(mr) = 0; MKDP(g->nv,mr,t); t->sugar = mr->dl->td;
1.8 ! noro 578: addd(CO,d,t,&s); d = s;
1.1 noro 579: dp_rest(g,&t); g = t;
1.8 ! noro 580:
1.1 noro 581: }
582: }
583: if ( d )
584: d->sugar = sugar;
1.8 ! noro 585: *rp = d;
! 586: }
! 587:
! 588: void Pdp_nf_mod(arg,rp)
! 589: NODE arg;
! 590: DP *rp;
! 591: {
! 592: NODE b;
! 593: DP g;
! 594: DP *ps;
! 595: int mod,full,ac;
! 596:
! 597: ac = argc(arg);
! 598: asir_assert(ARG0(arg),O_LIST,"dp_nf_mod");
! 599: asir_assert(ARG1(arg),O_DP,"dp_nf_mod");
! 600: asir_assert(ARG2(arg),O_VECT,"dp_nf_mod");
! 601: asir_assert(ARG3(arg),O_N,"dp_nf_mod");
! 602: asir_assert(ARG4(arg),O_N,"dp_nf_mod");
! 603: if ( !(g = (DP)ARG1(arg)) ) {
! 604: *rp = 0; return;
! 605: }
! 606: b = BDY((LIST)ARG0(arg)); ps = (DP *)BDY((VECT)ARG2(arg));
! 607: full = QTOS((Q)ARG3(arg)); mod = QTOS((Q)ARG4(arg));
! 608: dp_nf_mod_qindex(b,g,ps,mod,full,rp);
! 609: }
! 610:
! 611: void Pdp_true_nf_mod(arg,rp)
! 612: NODE arg;
! 613: LIST *rp;
! 614: {
! 615: NODE b;
! 616: DP g,nm;
! 617: P dn;
! 618: DP *ps;
! 619: int mod,full;
! 620: NODE n;
! 621:
! 622: asir_assert(ARG0(arg),O_LIST,"dp_nf_mod");
! 623: asir_assert(ARG1(arg),O_DP,"dp_nf_mod");
! 624: asir_assert(ARG2(arg),O_VECT,"dp_nf_mod");
! 625: asir_assert(ARG3(arg),O_N,"dp_nf_mod");
! 626: asir_assert(ARG4(arg),O_N,"dp_nf_mod");
! 627: if ( !(g = (DP)ARG1(arg)) ) {
! 628: nm = 0; dn = (P)ONEM;
! 629: } else {
! 630: b = BDY((LIST)ARG0(arg)); ps = (DP *)BDY((VECT)ARG2(arg));
! 631: full = QTOS((Q)ARG3(arg)); mod = QTOS((Q)ARG4(arg));
! 632: dp_true_nf_mod(b,g,ps,mod,full,&nm,&dn);
! 633: }
! 634: NEWNODE(n); BDY(n) = (pointer)nm;
! 635: NEWNODE(NEXT(n)); BDY(NEXT(n)) = (pointer)dn;
! 636: NEXT(NEXT(n)) = 0; MKLIST(*rp,n);
1.1 noro 637: }
638:
639: void Pdp_tdiv(arg,rp)
640: NODE arg;
641: DP *rp;
642: {
643: MP m,mr,mr0;
644: DP p;
645: Q c;
646: N d,q,r;
647: int sgn;
648:
649: asir_assert(ARG0(arg),O_DP,"dp_tdiv");
650: asir_assert(ARG1(arg),O_N,"dp_tdiv");
651: p = (DP)ARG0(arg); d = NM((Q)ARG1(arg)); sgn = SGN((Q)ARG1(arg));
652: if ( !p )
653: *rp = 0;
654: else {
655: for ( mr0 = 0, m = BDY(p); m; m = NEXT(m) ) {
656: divn(NM((Q)m->c),d,&q,&r);
657: if ( r ) {
658: *rp = 0; return;
659: } else {
660: NEXTMP(mr0,mr); NTOQ(q,SGN((Q)m->c)*sgn,c);
661: mr->c = (P)c; mr->dl = m->dl;
662: }
663: }
664: NEXT(mr) = 0; MKDP(p->nv,mr0,*rp); (*rp)->sugar = p->sugar;
665: }
666: }
667:
668: void Pdp_red_coef(arg,rp)
669: NODE arg;
670: DP *rp;
671: {
672: MP m,mr,mr0;
673: P q,r;
674: DP p;
675: P mod;
676:
677: p = (DP)ARG0(arg); mod = (P)ARG1(arg);
678: asir_assert(p,O_DP,"dp_red_coef");
679: asir_assert(mod,O_P,"dp_red_coef");
680: if ( !p )
681: *rp = 0;
682: else {
683: for ( mr0 = 0, m = BDY(p); m; m = NEXT(m) ) {
684: divsrp(CO,m->c,mod,&q,&r);
685: if ( r ) {
686: NEXTMP(mr0,mr); mr->c = r; mr->dl = m->dl;
687: }
688: }
689: if ( mr0 ) {
690: NEXT(mr) = 0; MKDP(p->nv,mr0,*rp); (*rp)->sugar = p->sugar;
691: } else
692: *rp = 0;
693: }
694: }
695:
696: void Pdp_redble(arg,rp)
697: NODE arg;
698: Q *rp;
699: {
700: asir_assert(ARG0(arg),O_DP,"dp_redble");
701: asir_assert(ARG1(arg),O_DP,"dp_redble");
702: if ( dp_redble((DP)ARG0(arg),(DP)ARG1(arg)) )
703: *rp = ONE;
704: else
705: *rp = 0;
706: }
707:
708: void Pdp_red_mod(arg,rp)
709: NODE arg;
710: LIST *rp;
711: {
712: DP h,r;
713: P dmy;
714: NODE n;
715:
716: asir_assert(ARG0(arg),O_DP,"dp_red_mod");
717: asir_assert(ARG1(arg),O_DP,"dp_red_mod");
718: asir_assert(ARG2(arg),O_DP,"dp_red_mod");
719: asir_assert(ARG3(arg),O_N,"dp_red_mod");
720: dp_red_mod((DP)ARG0(arg),(DP)ARG1(arg),(DP)ARG2(arg),QTOS((Q)ARG3(arg)),
721: &h,&r,&dmy);
722: NEWNODE(n); BDY(n) = (pointer)h;
723: NEWNODE(NEXT(n)); BDY(NEXT(n)) = (pointer)r;
724: NEXT(NEXT(n)) = 0; MKLIST(*rp,n);
725: }
726: void Pdp_subd(arg,rp)
727: NODE arg;
728: DP *rp;
729: {
730: DP p1,p2;
731:
732: p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg);
733: asir_assert(p1,O_DP,"dp_subd");
734: asir_assert(p2,O_DP,"dp_subd");
735: dp_subd(p1,p2,rp);
736: }
737:
738: void Pdp_red(arg,rp)
739: NODE arg;
740: LIST *rp;
741: {
742: NODE n;
1.4 noro 743: DP head,rest,dmy1;
1.1 noro 744: P dmy;
745:
746: asir_assert(ARG0(arg),O_DP,"dp_red");
747: asir_assert(ARG1(arg),O_DP,"dp_red");
748: asir_assert(ARG2(arg),O_DP,"dp_red");
1.4 noro 749: dp_red((DP)ARG0(arg),(DP)ARG1(arg),(DP)ARG2(arg),&head,&rest,&dmy,&dmy1);
1.1 noro 750: NEWNODE(n); BDY(n) = (pointer)head;
751: NEWNODE(NEXT(n)); BDY(NEXT(n)) = (pointer)rest;
752: NEXT(NEXT(n)) = 0; MKLIST(*rp,n);
753: }
754:
755: void Pdp_sp(arg,rp)
756: NODE arg;
757: DP *rp;
758: {
759: DP p1,p2;
760:
761: p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg);
762: asir_assert(p1,O_DP,"dp_sp"); asir_assert(p2,O_DP,"dp_sp");
763: dp_sp(p1,p2,rp);
764: }
765:
766: void Pdp_sp_mod(arg,rp)
767: NODE arg;
768: DP *rp;
769: {
770: DP p1,p2;
771: int mod;
772:
773: p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg);
774: asir_assert(p1,O_DP,"dp_sp_mod"); asir_assert(p2,O_DP,"dp_sp_mod");
775: asir_assert(ARG2(arg),O_N,"dp_sp_mod");
776: mod = QTOS((Q)ARG2(arg));
777: dp_sp_mod(p1,p2,mod,rp);
778: }
779:
780: void Pdp_lcm(arg,rp)
781: NODE arg;
782: DP *rp;
783: {
784: int i,n,td;
785: DL d1,d2,d;
786: MP m;
787: DP p1,p2;
788:
789: p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg);
790: asir_assert(p1,O_DP,"dp_lcm"); asir_assert(p2,O_DP,"dp_lcm");
791: n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;
792: NEWDL(d,n);
793: for ( i = 0, td = 0; i < n; i++ ) {
794: d->d[i] = MAX(d1->d[i],d2->d[i]); td += d->d[i];
795: }
796: d->td = td;
797: NEWMP(m); m->dl = d; m->c = (P)ONE; NEXT(m) = 0;
798: MKDP(n,m,*rp); (*rp)->sugar = td; /* XXX */
799: }
800:
801: void Pdp_hm(arg,rp)
802: NODE arg;
803: DP *rp;
804: {
805: DP p;
806:
807: p = (DP)ARG0(arg); asir_assert(p,O_DP,"dp_hm");
808: dp_hm(p,rp);
809: }
810:
811: void Pdp_ht(arg,rp)
812: NODE arg;
813: DP *rp;
814: {
815: DP p;
816: MP m,mr;
817:
818: p = (DP)ARG0(arg); asir_assert(p,O_DP,"dp_ht");
819: if ( !p )
820: *rp = 0;
821: else {
822: m = BDY(p);
823: NEWMP(mr); mr->dl = m->dl; mr->c = (P)ONE; NEXT(mr) = 0;
824: MKDP(p->nv,mr,*rp); (*rp)->sugar = mr->dl->td; /* XXX */
825: }
826: }
827:
828: void Pdp_hc(arg,rp)
829: NODE arg;
830: P *rp;
831: {
832: asir_assert(ARG0(arg),O_DP,"dp_hc");
833: if ( !ARG0(arg) )
834: *rp = 0;
835: else
836: *rp = BDY((DP)ARG0(arg))->c;
837: }
838:
839: void Pdp_rest(arg,rp)
840: NODE arg;
841: DP *rp;
842: {
843: asir_assert(ARG0(arg),O_DP,"dp_rest");
844: if ( !ARG0(arg) )
845: *rp = 0;
846: else
847: dp_rest((DP)ARG0(arg),rp);
848: }
849:
850: void Pdp_td(arg,rp)
851: NODE arg;
852: Q *rp;
853: {
854: DP p;
855:
856: p = (DP)ARG0(arg); asir_assert(p,O_DP,"dp_td");
857: if ( !p )
858: *rp = 0;
859: else
860: STOQ(BDY(p)->dl->td,*rp);
861: }
862:
863: void Pdp_sugar(arg,rp)
864: NODE arg;
865: Q *rp;
866: {
867: DP p;
868:
869: p = (DP)ARG0(arg); asir_assert(p,O_DP,"dp_sugar");
870: if ( !p )
871: *rp = 0;
872: else
873: STOQ(p->sugar,*rp);
874: }
875:
876: void Pdp_cri1(arg,rp)
877: NODE arg;
878: Q *rp;
879: {
880: DP p1,p2;
881: int *d1,*d2;
882: int i,n;
883:
884: p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg);
885: asir_assert(p1,O_DP,"dp_cri1"); asir_assert(p2,O_DP,"dp_cri1");
886: n = p1->nv; d1 = BDY(p1)->dl->d; d2 = BDY(p2)->dl->d;
887: for ( i = 0; i < n; i++ )
888: if ( d1[i] > d2[i] )
889: break;
890: *rp = i == n ? ONE : 0;
891: }
892:
893: void Pdp_cri2(arg,rp)
894: NODE arg;
895: Q *rp;
896: {
897: DP p1,p2;
898: int *d1,*d2;
899: int i,n;
900:
901: p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg);
902: asir_assert(p1,O_DP,"dp_cri2"); asir_assert(p2,O_DP,"dp_cri2");
903: n = p1->nv; d1 = BDY(p1)->dl->d; d2 = BDY(p2)->dl->d;
904: for ( i = 0; i < n; i++ )
905: if ( MIN(d1[i],d2[i]) >= 1 )
906: break;
907: *rp = i == n ? ONE : 0;
908: }
909:
910: void Pdp_minp(arg,rp)
911: NODE arg;
912: LIST *rp;
913: {
914: NODE tn,tn1,d,dd,dd0,p,tp;
915: LIST l,minp;
916: DP lcm,tlcm;
917: int s,ts;
918:
919: asir_assert(ARG0(arg),O_LIST,"dp_minp");
920: d = BDY((LIST)ARG0(arg)); minp = (LIST)BDY(d);
921: p = BDY(minp); p = NEXT(NEXT(p)); lcm = (DP)BDY(p); p = NEXT(p);
922: if ( !ARG1(arg) ) {
923: s = QTOS((Q)BDY(p)); p = NEXT(p);
924: for ( dd0 = 0, d = NEXT(d); d; d = NEXT(d) ) {
925: tp = BDY((LIST)BDY(d)); tp = NEXT(NEXT(tp));
926: tlcm = (DP)BDY(tp); tp = NEXT(tp);
927: ts = QTOS((Q)BDY(tp)); tp = NEXT(tp);
928: NEXTNODE(dd0,dd);
929: if ( ts < s ) {
930: BDY(dd) = (pointer)minp;
931: minp = (LIST)BDY(d); lcm = tlcm; s = ts;
932: } else if ( ts == s ) {
933: if ( compd(CO,lcm,tlcm) > 0 ) {
934: BDY(dd) = (pointer)minp;
935: minp = (LIST)BDY(d); lcm = tlcm; s = ts;
936: } else
937: BDY(dd) = BDY(d);
938: } else
939: BDY(dd) = BDY(d);
940: }
941: } else {
942: for ( dd0 = 0, d = NEXT(d); d; d = NEXT(d) ) {
943: tp = BDY((LIST)BDY(d)); tp = NEXT(NEXT(tp));
944: tlcm = (DP)BDY(tp);
945: NEXTNODE(dd0,dd);
946: if ( compd(CO,lcm,tlcm) > 0 ) {
947: BDY(dd) = (pointer)minp; minp = (LIST)BDY(d); lcm = tlcm;
948: } else
949: BDY(dd) = BDY(d);
950: }
951: }
952: if ( dd0 )
953: NEXT(dd) = 0;
954: MKLIST(l,dd0); MKNODE(tn,l,0); MKNODE(tn1,minp,tn); MKLIST(*rp,tn1);
955: }
956:
957: void Pdp_criB(arg,rp)
958: NODE arg;
959: LIST *rp;
960: {
961: NODE d,ij,dd,ddd;
962: int i,j,s,n;
963: DP *ps;
964: DL ts,ti,tj,lij,tdl;
965:
966: asir_assert(ARG0(arg),O_LIST,"dp_criB"); d = BDY((LIST)ARG0(arg));
967: asir_assert(ARG1(arg),O_N,"dp_criB"); s = QTOS((Q)ARG1(arg));
968: asir_assert(ARG2(arg),O_VECT,"dp_criB"); ps = (DP *)BDY((VECT)ARG2(arg));
969: if ( !d )
970: *rp = (LIST)ARG0(arg);
971: else {
972: ts = BDY(ps[s])->dl;
973: n = ps[s]->nv;
974: NEWDL(tdl,n);
975: for ( dd = 0; d; d = NEXT(d) ) {
976: ij = BDY((LIST)BDY(d));
977: i = QTOS((Q)BDY(ij)); ij = NEXT(ij);
978: j = QTOS((Q)BDY(ij)); ij = NEXT(ij);
979: lij = BDY((DP)BDY(ij))->dl;
980: ti = BDY(ps[i])->dl; tj = BDY(ps[j])->dl;
981: if ( lij->td != lcm_of_DL(n,lij,ts,tdl)->td
982: || !dl_equal(n,lij,tdl)
983: || (lij->td == lcm_of_DL(n,ti,ts,tdl)->td
984: && dl_equal(n,tdl,lij))
985: || (lij->td == lcm_of_DL(n,tj,ts,tdl)->td
986: && dl_equal(n,tdl,lij)) ) {
987: MKNODE(ddd,BDY(d),dd);
988: dd = ddd;
989: }
990: }
991: MKLIST(*rp,dd);
992: }
993: }
994:
995: void Pdp_nelim(arg,rp)
996: NODE arg;
997: Q *rp;
998: {
999: if ( arg ) {
1000: asir_assert(ARG0(arg),O_N,"dp_nelim");
1001: dp_nelim = QTOS((Q)ARG0(arg));
1002: }
1003: STOQ(dp_nelim,*rp);
1004: }
1005:
1006: void Pdp_mag(arg,rp)
1007: NODE arg;
1008: Q *rp;
1009: {
1010: DP p;
1011: int s;
1012: MP m;
1013:
1014: p = (DP)ARG0(arg);
1015: asir_assert(p,O_DP,"dp_mag");
1016: if ( !p )
1017: *rp = 0;
1018: else {
1019: for ( s = 0, m = BDY(p); m; m = NEXT(m) )
1020: s += p_mag(m->c);
1021: STOQ(s,*rp);
1022: }
1023: }
1024:
1025: extern int kara_mag;
1026:
1027: void Pdp_set_kara(arg,rp)
1028: NODE arg;
1029: Q *rp;
1030: {
1031: if ( arg ) {
1032: asir_assert(ARG0(arg),O_N,"dp_set_kara");
1033: kara_mag = QTOS((Q)ARG0(arg));
1034: }
1035: STOQ(kara_mag,*rp);
1036: }
1037:
1038: void Pdp_homo(arg,rp)
1039: NODE arg;
1040: DP *rp;
1041: {
1042: asir_assert(ARG0(arg),O_DP,"dp_homo");
1043: dp_homo((DP)ARG0(arg),rp);
1044: }
1045:
1.8 ! noro 1046: void Pdp_dehomo(arg,rp)
! 1047: NODE arg;
1.1 noro 1048: DP *rp;
1049: {
1.8 ! noro 1050: asir_assert(ARG0(arg),O_DP,"dp_dehomo");
! 1051: dp_dehomo((DP)ARG0(arg),rp);
! 1052: }
! 1053:
! 1054: void Pdp_gr_flags(arg,rp)
! 1055: NODE arg;
! 1056: LIST *rp;
! 1057: {
! 1058: Obj name,value;
! 1059: NODE n;
1.1 noro 1060:
1.8 ! noro 1061: if ( arg ) {
! 1062: asir_assert(ARG0(arg),O_LIST,"dp_gr_flags");
! 1063: n = BDY((LIST)ARG0(arg));
! 1064: while ( n ) {
! 1065: name = (Obj)BDY(n); n = NEXT(n);
! 1066: if ( !n )
! 1067: break;
! 1068: else {
! 1069: value = (Obj)BDY(n); n = NEXT(n);
! 1070: }
! 1071: dp_set_flag(name,value);
1.1 noro 1072: }
1073: }
1.8 ! noro 1074: dp_make_flaglist(rp);
! 1075: }
! 1076:
! 1077: extern int DP_Print;
! 1078:
! 1079: void Pdp_gr_print(arg,rp)
! 1080: NODE arg;
! 1081: Q *rp;
! 1082: {
! 1083: Q q;
! 1084:
! 1085: if ( arg ) {
! 1086: asir_assert(ARG0(arg),O_N,"dp_gr_print");
! 1087: q = (Q)ARG0(arg); DP_Print = QTOS(q);
! 1088: } else
! 1089: STOQ(DP_Print,q);
! 1090: *rp = q;
1.1 noro 1091: }
1092:
1.8 ! noro 1093: void Pdp_gr_main(arg,rp)
1.1 noro 1094: NODE arg;
1.8 ! noro 1095: LIST *rp;
1.1 noro 1096: {
1.8 ! noro 1097: LIST f,v;
! 1098: Num homo;
! 1099: Q m;
! 1100: int modular;
! 1101: struct order_spec ord;
! 1102:
! 1103: asir_assert(ARG0(arg),O_LIST,"dp_gr_main");
! 1104: asir_assert(ARG1(arg),O_LIST,"dp_gr_main");
! 1105: asir_assert(ARG2(arg),O_N,"dp_gr_main");
! 1106: asir_assert(ARG3(arg),O_N,"dp_gr_main");
! 1107: f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);
! 1108: homo = (Num)ARG2(arg);
! 1109: m = (Q)ARG3(arg);
! 1110: if ( !m )
! 1111: modular = 0;
! 1112: else if ( PL(NM(m))>1 || (PL(NM(m)) == 1 && BD(NM(m))[0] >= 0x80000000) )
! 1113: error("dp_gr_main : too large modulus");
! 1114: else
! 1115: modular = QTOS(m);
! 1116: create_order_spec(ARG4(arg),&ord);
! 1117: dp_gr_main(f,v,homo,modular,&ord,rp);
1.1 noro 1118: }
1119:
1.8 ! noro 1120: void Pdp_f4_main(arg,rp)
! 1121: NODE arg;
! 1122: LIST *rp;
1.1 noro 1123: {
1.8 ! noro 1124: LIST f,v;
! 1125: struct order_spec ord;
1.1 noro 1126:
1.8 ! noro 1127: asir_assert(ARG0(arg),O_LIST,"dp_f4_main");
! 1128: asir_assert(ARG1(arg),O_LIST,"dp_f4_main");
! 1129: f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);
! 1130: create_order_spec(ARG2(arg),&ord);
! 1131: dp_f4_main(f,v,&ord,rp);
1.1 noro 1132: }
1133:
1.8 ! noro 1134: void Pdp_f4_mod_main(arg,rp)
! 1135: NODE arg;
! 1136: LIST *rp;
1.1 noro 1137: {
1.8 ! noro 1138: LIST f,v;
! 1139: int m;
! 1140: struct order_spec ord;
! 1141:
! 1142: asir_assert(ARG0(arg),O_LIST,"dp_f4_main");
! 1143: asir_assert(ARG1(arg),O_LIST,"dp_f4_main");
! 1144: asir_assert(ARG2(arg),O_N,"dp_f4_main");
! 1145: f = (LIST)ARG0(arg); v = (LIST)ARG1(arg); m = QTOS((Q)ARG2(arg));
! 1146: create_order_spec(ARG3(arg),&ord);
! 1147: dp_f4_mod_main(f,v,m,&ord,rp);
! 1148: }
1.1 noro 1149:
1.8 ! noro 1150: void Pdp_gr_mod_main(arg,rp)
! 1151: NODE arg;
! 1152: LIST *rp;
! 1153: {
! 1154: LIST f,v;
! 1155: Num homo;
! 1156: int m;
! 1157: struct order_spec ord;
! 1158:
! 1159: asir_assert(ARG0(arg),O_LIST,"dp_gr_mod_main");
! 1160: asir_assert(ARG1(arg),O_LIST,"dp_gr_mod_main");
! 1161: asir_assert(ARG2(arg),O_N,"dp_gr_mod_main");
! 1162: asir_assert(ARG3(arg),O_N,"dp_gr_mod_main");
! 1163: f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);
! 1164: homo = (Num)ARG2(arg); m = QTOS((Q)ARG3(arg));
! 1165: create_order_spec(ARG4(arg),&ord);
! 1166: dp_gr_mod_main(f,v,homo,m,&ord,rp);
1.1 noro 1167: }
1.8 ! noro 1168:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>