28500 #include "rundecs.h"
28510     (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
28520 (**)
28530 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN;
28540 PROCEDURE ERRORR(N :INTEGER); EXTERN;
28550 FUNCTION GETMULT(NEWMULT: OBJECTP): OBJECTP; EXTERN;
28560 FUNCTION COPYDESC(ORIGINAL: OBJECTP; NEWSORT: STRUCTYPE): OBJECTP; EXTERN;
28570 (**)
28580 (**)
28590 FUNCTION DREFM(REFER: OBJECTP): OBJECTP;
28600 (*PDEREF+4*)
28610   VAR NEWMULT:OBJECTP;
28620     BEGIN WITH REFER^ DO
28630       CASE SORT OF
28640         REFR, RECR:
28650           BEGIN
28660           IF FTST THEN
28670             BEGIN
28680             DREFM := REFER;
28690             OSCOPE := PVALUE^.OSCOPE;
28700             SORT := MULT
28710             END
28720           ELSE
28730             BEGIN
28740             NEWMULT := COPYDESC(REFER, MULT);
28750             NEWMULT^.OSCOPE := PVALUE^.OSCOPE;
28760             DREFM := NEWMULT;
28770             FPINC(PVALUE^)
28780             END
28790           END;
28800         REFSLN:
28810           BEGIN
28820           PVALUE := ANCESTOR;
28830           IF FTST THEN
28840             BEGIN
28850             SORT := MULT;
28860             DREFM := GETMULT(REFER);
28870             FPDEC(ANCESTOR^);
28880             IF FPTST(ANCESTOR^) THEN GARBAGE(ANCESTOR);
28890             END
28900           ELSE
28910             DREFM :=  GETMULT(COPYDESC(REFER, MULT))
28920           END;
28930         UNDEF: ERRORR(RDEREF);
28940         NILL: ERRORR(RDEREFNIL)
28950         END
28960     END;
28970 (**)
28980 (**)
28990 (*-02()
29000   BEGIN
29010   END;
29020 ()-02*)
29030 (*+01()
29040 BEGIN (*OF MAIN PROGRAM*)
29050 END  (*OF EVERYTHING*).
29060 ()+01*)