47 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
43600 #include "rundecs.h"
 | 
						|
43610     (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
 | 
						|
43620 (**)
 | 
						|
43630 (**)
 | 
						|
43670 (*RNSTART HAD BETTER BE WRITTEN IN ASSEMBLER ON MOST SYSTEMS*)
 | 
						|
43680 (**)
 | 
						|
43690 (*-01() (*-05()
 | 
						|
43700 FUNCTION GETADDRESS (VAR VARIABLE :IPOINT) :IPOINT; EXTERN;
 | 
						|
43710 FUNCTION GETCALLER (CALLEE :IPOINT) :IPOINT; EXTERN;
 | 
						|
43720 FUNCTION GETLINENO :INTEGER; EXTERN;
 | 
						|
43730 PROCEDURE RNSTART;
 | 
						|
43740   VAR TSCOPE: DEPTHRANGE;
 | 
						|
43750       RNIB: IPOINT;
 | 
						|
43760       CURR : INTPOINT ;
 | 
						|
43764   PROCEDURE SETNSTATIC( N: INTEGER ) ; EXTERN ;
 | 
						|
43770     BEGIN
 | 
						|
43780     RNIB := DYNAMIC(ME);
 | 
						|
43790 (*+05()SETMYSTATIC(STATIC(DYNAMIC(RNIB)));(*TO ALGOL 68 CALLER*) ()+05*)
 | 
						|
43800 (*-05()SETMYSTATIC(GETCALLER(RNIB); ()-05*)
 | 
						|
43810     TSCOPE := SCOPE ;
 | 
						|
43820 (*+02()LINENO:=GETLINENO;()+02*)
 | 
						|
43830     SETMYSTATIC(RNIB); (* TO ALGOL 68 CALLEE *)
 | 
						|
43840 (*+05()CURR := ASPTR(RNIB-SZWORD*2);(*CURR IS NOW POINTING TO ALGOL 68 CALLEE'S STATIC LINK*)
 | 
						|
43850     CURR ^ := RNIB ; (* SET ALGOL 68 CALLEE'S STATIC LINK TO ITSELF *)
 | 
						|
43860     STATICP:=STATICP-192; (*ENABLING ACCESS BY OFFSET FROM PNX R2*)()+05*)
 | 
						|
43870     SCOPE := TSCOPE+LOCRG;
 | 
						|
43880     LEVEL := PROCBL^.LEVEL;
 | 
						|
43890 (*-02()LINENO := 0;()-02*)
 | 
						|
43900     WITH FIRSTRG DO WITH FIRSTW DO
 | 
						|
43910       BEGIN LOOPCOUNT := 0; RECGEN := NIL; RGIDBLK := PROCBL ^ . IDBLOCK ; RGSCOPE := 1;
 | 
						|
43920       RIBOFFSET := INCPTR( ASPTR( RNIB ) , IBCONST + RGCONST );
 | 
						|
43930 (*+05()RGLASTUSED :=ASPTR(RNIB-PARAMOFFSET);()+05*)
 | 
						|
43940 (*-05()RGLASTUSED:=INCPTR(ASPTR(GETADDRESS(STATICP)),-PARAMOFFSET);()-05*)
 | 
						|
43950       END;
 | 
						|
43960     IF LEVEL > PROCBL^.SCOPELEVEL + 1 THEN SETNSTATIC( LEVEL - ( PROCBL^.SCOPELEVEL + 1 ) ) ;
 | 
						|
43970     END;
 | 
						|
43980 ()-05*) ()-01*)
 | 
						|
43990 (**)
 | 
						|
44000 (**)
 | 
						|
44010 (*-02()
 | 
						|
44020   BEGIN
 | 
						|
44030   END ;
 | 
						|
44040 ()-02*)
 | 
						|
44050 (*+01()
 | 
						|
44060 BEGIN (*OF MAIN PROGRAM*)
 | 
						|
44070 END (*OF EVERYTHING*).
 | 
						|
44080 ()+01*)
 |