20000 #include "rundecs.h" 20010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *) 20020 (**) 20030 (**) 20040 PROCEDURE PCINCR (STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; INCREMENT: INTEGER); EXTERN ; 20050 PROCEDURE GARBAGE(ANOBJECT:OBJECTP); EXTERN; 20060 (**) 20070 (**) 20080 FUNCTION COLLTP(TEMP:NAKEGER; UNIT: OBJECTP; TEMPLATE: DPOINT; OFFSET: OFFSETRANGE): ASNAKED; 20090 (*PCOLLTOTAL+3*) 20100 VAR OBJECT, STRUCTPTR: OBJECTP; 20110 COUNT: INTEGER; 20120 BEGIN WITH TEMP DO WITH NAK DO 20130 BEGIN 20140 OBJECT := INCPTR(POINTER, OFFSET); 20150 STRUCTPTR := UNIT; 20160 IF ORD(TEMPLATE)<=MAXSIZE THEN (*NOT STRUCT*) 20170 MOVELEFT(STRUCTPTR, OBJECT, ORD(TEMPLATE)) 20180 ELSE (*STRUCT*) 20190 BEGIN 20200 PCINCR(INCPTR(STRUCTPTR, STRUCTCONST), TEMPLATE, +INCRF); 20210 MOVELEFT(INCPTR(STRUCTPTR, STRUCTCONST), OBJECT, TEMPLATE^[0]); 20220 IF FPTST(STRUCTPTR^) THEN GARBAGE(STRUCTPTR); 20230 END; 20240 COLLTP := ASNAK; 20250 END 20260 END; 20270 (**) 20280 (**) 20290 FUNCTION COLLNP(TEMP: NAKEGER; NAKUNIT: NAKEGER; TEMPLATE: DPOINT; OFFSET: OFFSETRANGE): ASNAKED; 20300 (*PCOLLNAKED+3*) 20310 VAR OBJECT: UNDRESSP; 20320 COUNT: INTEGER; 20330 BEGIN WITH TEMP DO WITH NAK DO 20340 BEGIN 20350 OBJECT := INCPTR(POINTER, OFFSET); 20360 WITH NAKUNIT.NAK DO 20370 BEGIN 20380 PCINCR(POINTER, TEMPLATE, +INCRF); 20390 MOVELEFT(POINTER, OBJECT, TEMPLATE^[0]); 20400 IF FPTST(STOWEDVAL^) THEN GARBAGE(STOWEDVAL); 20410 END; 20420 COLLNP := ASNAK; 20430 END 20440 END; 20450 (**) 20460 (**) 20470 (*-02() BEGIN END ; ()-02*) 20480 (*+01() 20490 BEGIN (*OF MAIN PROGRAM*) 20500 END (*OF EVERYTHING*). 20510 ()+01*)