45400 #include "rundecs.h"
45410     (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
45420 (**)
45430 (**)
45440 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
45450 PROCEDURE PCINCR (STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; INCREMENT: INTEGER); EXTERN ;
45460 FUNCTION CRMULT( NEWMULT: OBJECTP ; TEMPLATE: DPOINT ) : OBJECTP ; EXTERN ;
45470 (**)
45480 (**)
45490 FUNCTION ROWNM(PVAL: OBJECTP; ROWCOUNT: INTEGER; TEMPLATE: DPOINT): OBJECTP;
45500 (*PROWNONMULT*)
45510 (*WARNING: PVAL CAN ALSO BE AN A68INT; TROUBLE WILL ENSUE IF SZINT>SZADDR*)
45520   VAR NEWMULT: OBJECTP;
45530       DESCDEX: INTEGER;
45540       PTR: UNDRESSP;
45550     BEGIN
45560     ENEW(NEWMULT, MULTCONST+ROWCOUNT*SZPDS);
45570     WITH NEWMULT^ DO
45580       BEGIN
45590 (*-02() FIRSTWORD := SORTSHIFT * ORD(MULT); ()-02*)
45600 (*+02() PCOUNT:=0; SORT:=MULT; ()+02*)
45610 (*+01()     SECONDWORD := 0; ()+01*)
45620       ROWS := ROWCOUNT-1;
45630       FOR DESCDEX := 0 TO ROWCOUNT-1 DO
45640         WITH DESCVEC[DESCDEX] DO
45650           BEGIN LI := 1; UI := 1 END;
45660       IHEAD := NIL; FPTR := NIL; BPTR := NIL
45670       END;
45680     NEWMULT := CRMULT(NEWMULT, TEMPLATE);
45690     PTR := INCPTR(NEWMULT^.PVALUE, ELSCONST);
45700     IF ORD(TEMPLATE)=0 THEN  (*DRESSED*)
45710       BEGIN
45720       PTR^.FIRSTPTR := PVAL;
45730       WITH PVAL^ DO FINC
45740       END
45750     ELSE IF ORD(TEMPLATE)=1 THEN  (*SIMPLE*)
45760       PTR^.FIRSTINT := ORD(PVAL)
45770     ELSE IF PVAL^.SORT<>UNDEF THEN
45780       BEGIN
45790       IF ORD(TEMPLATE)<=MAXSIZE THEN  (*NOT STRUCT*)
45800         MOVELEFT(PVAL, PTR, ORD(TEMPLATE))
45810       ELSE  (*STRUCT*)
45820         BEGIN
45830         MOVELEFT(INCPTR(PVAL, STRUCTCONST), PTR, TEMPLATE^[0]);
45840         PCINCR(INCPTR(PVAL, STRUCTCONST), TEMPLATE, +INCRF)
45850         END;
45860       IF FPTST(PVAL^) THEN GARBAGE(PVAL)
45870       END;
45880     ROWNM := NEWMULT;
45890     END;
45900 (**)
45910 (**)
45920 (*-02() BEGIN END ; ()-02*)
45930 (*+01()
45940 BEGIN (*OF MAIN PROGRAM*)
45950 END (*OF EVERYTHING*).
45960 ()+01*)