ack/lang/a68s/liba68s/heapstr.p

77 lines
2.2 KiB
OpenEdge ABL
Raw Normal View History

1988-10-04 13:41:01 +00:00
36400 #include "rundecs.h"
36410 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
36420 (**)
36430 (**)
36440 FUNCTION CRSTRUCT(TEMPLATE: DPOINT): OBJECTP; EXTERN;
36450 (**)
36460 (**)
36470 FUNCTION HEAPSTR(TEMPLATE: DPOINT): OBJECTP;
36480 (*PLEAPGEN+1*)
36490 VAR NEWREF: OBJECTP;
36500 BEGIN
36510 IF ORD(TEMPLATE)=SZINT THEN
36520 BEGIN
36530 ENEW(NEWREF, REF1SIZE);
36540 WITH NEWREF^ DO BEGIN
36550 (*-02() FIRSTWORD := SORTSHIFT * ORD(REF1); ()-02*)
36560 (*+02() PCOUNT:=0; SORT:=REF1; ()+02*)
36570 (*+01() SECONDWORD := 0; ()+01*)
36580 ANCESTOR := NEWREF;
36590 PVALUE := HIGHPCOUNT;
36600 OFFSET := REF1SIZE-SZINT;
36610 VALUE := INTUNDEF
36620 END
36630 END
36640 (*-01()
36650 ELSE IF ORD(TEMPLATE)=SZLONG THEN
36660 BEGIN
36670 ENEW(NEWREF, REF2SIZE);
36680 WITH NEWREF^ DO BEGIN
36690 (*-02() FIRSTWORD := SORTSHIFT * ORD(REF2); ()-02*)
36700 (*+02() PCOUNT:=0; SORT:=REF2; ()+02*)
36710 ANCESTOR := NEWREF;
36720 PVALUE := HIGHPCOUNT;
36730 OFFSET := REF2SIZE-SZINT;
36740 LONGVALUE := LONGUNDEF
36750 END
36760 END
36770 ()-01*)
36780 ELSE
36790 BEGIN
36800 ENEW(NEWREF, REFNSIZE);
36810 WITH NEWREF^ DO
36820 BEGIN
36830 (*-02() FIRSTWORD := SORTSHIFT * ORD(REFN); ()-02*)
36840 (*+02() PCOUNT:=0; SORT:=REFN; ()+02*)
36850 (*+01() SECONDWORD := 0; ()+01*)
36860 IF ORD(TEMPLATE)=0 THEN PVALUE := UNDEFIN
36870 ELSE
36880 BEGIN
36890 PVALUE := CRSTRUCT(TEMPLATE);
36900 FPINC(PVALUE^);
36910 ANCESTOR := NEWREF;
36920 OFFSET := STRUCTCONST;
36930 END;
36940 END
36950 END;
36960 NEWREF^.OSCOPE := 3;
36970 HEAPSTR := NEWREF;
36980 END;
36990 (**)
37000 (**)
37010 FUNCTION GENSTR(TEMPLATE: DPOINT; LOCRG: DEPTHRANGE): OBJECTP;
37020 (*PLEAPGEN*)
37030 VAR NEWREF: OBJECTP;
37040 BEGIN
37050 NEWREF := HEAPSTR(TEMPLATE);
37060 NEWREF^.OSCOPE := SCOPE+LOCRG;
37070 GENSTR := NEWREF;
37080 END;
37090 (**)
37100 (**)
37110 (*-02() BEGIN END ; ()-02*)
37120 (*+01()
37130 BEGIN (*OF MAIN PROGRAM*)
37140 END (*OF EVERYTHING*).
37150 ()+01*)