Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-03 - decus/20-0078/libsim/absadr.mac
There are 2 other files named absadr.mac in the archive. Click here to see a list.
00100	COMMENT * SIMULA specification;
00200	OPTIONS(/E:QUICK,NOCHECK,absadr);
00300	INTEGER PROCEDURE absadr;!(x);! Any type x;
00400	COMMENT Returns the core address of the quantity x:
00500	Simple arithmetic quantity: Address of the value.
00600	Simple REF: a copy of the value. TEXT: Byte pointer to first byte.
00700	ARRAY: Copy of array address.
00800	Returns zero if an address cannot be returned.
00900	;
01000	
01100	!*;! MACRO-10 code !*;!
01200	
01300		TITLE	absadr
01400		ENTRY	absadr
01500		SUBTTL	SIMULA utility, Lars Enderin Oct 1977
01600	
01700	;!*** Copyright 1977 by the Swedish Defence Research Institute. ***
01800	;!*** Copying is allowed.					***
01900	
02000	
02100		sall
02200		search	simmac,simmcr,simrpa
02300		macinit
02400	
02500	absadr:	PROC
02600		EXCH XWAC1,(XTAC)
02700		EXCH XWAC2,1(XTAC)
02800		JUMPE XWAC1,L8
02900		LF X1,ZFLAKD(,XWAC1)
03000		IF ;! Simple
03100		  CAIE X1,QSIMPLE
03200		   GOTO FALSE
03300		THEN
03400		  LF X1,ZFLATP(,XWAC1)
03500		  JUMPE X1,L8
03600		  IF ;! Arithmetic, character or boolean
03700		    CAILE X1,QBOOLEAN
03800		    GOTO FALSE
03900		  THEN ;! Get the address
04000		    ADDI XWAC1,(XWAC2)
04100		    HRRZS XWAC1
04200		    GOTO L9
04300		  FI
04400		  IF ;! TEXT
04500		    CAIE X1,QTEXT
04600		    GOTO FALSE
04700		  THEN ;! Byte pointer to first byte
04800		    ADDI XWAC2,(XWAC1)
04900		    LD XWAC1,(XWAC2)
05000		    LF ,ZTVSP(,XWAC1)
05100		    IDIVI 5
05200		    HLL bp(X1)
05300		    LI XWAC1,2(XWAC1)
05400		    ADDM XWAC1
05500		    GOTO L9
05600		  FI
05700		  IF ;! REF
05800		    CAIE X1,QREF
05900		    GOTO FALSE
06000		  THEN ;! Just get the value
06100		    ADDI XWAC2,(XWAC1)
06200		    IFOFFA ZFLVTD(XWAC1)
06300		     L XWAC1,(XWAC2)
06400		    HRRZS XWAC1
06500		    GOTO L9
06600		  FI
06700		  GOTO L8
06800		FI
06900		;! Not simple, should be array
07000		ADDI XWAC1,(XWAC2)
07100		SKIPA XWAC1,(XWAC1)
07200	L8():!	 SETZ XWAC1,
07300	L9():!	EXCH XWAC2,1(XTAC)
07400		EXCH XWAC1,(XTAC)
07500		RET
07600		EPROC
07700	
07800	bp:	POINT 7,2,-1
07900		POINT 7,2,6
08000		POINT 7,2,13
08100		POINT 7,2,20
08200		POINT 7,2,27
08300		LIT
08400		END;