Google
 

Trailing-Edge - PDP-10 Archives - BB-H506D-SM_1983 - cobol/source/gettag.mac
There are 5 other files named gettag.mac in the archive. Click here to see a list.
; UPD ID= 2932 on 6/7/80 at 12:03 PM by WRIGHT                          
TITLE	GETTAG FOR COBOL V12B
SUBTTL	GET NEXT TAG NUMBER TO BE USED		AL BLACKINGTON/CAM



;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1974, 1981 BY DIGITAL EQUIPMENT CORPORATION

	SEARCH	P
	%%P==:%%P
	XPNTST==:XPNTST

;EDITS
;V12*****************
;NAME	DATE		COMMENTS
;----	----		--------
;MFTT	8/30/77		ADD "DRFTAG" ROUTINE
;DAW	8/16/77		ADD "REFTAG" ROUTINE
;DAW	8/15/77		CHANGE TAGTAB TO A FULL-WORD-ENTRY TABLE
;********************


TWOSEG
RELOC	400000

ENTRY	GETTAG
ENTRY	REFTAG
ENTRY	DRFTAG

;NOTE: THE ONLY ROUTINES THAT SHOULD EVER TOUCH TAGNXT
;  ARE GETTAG AND XPNTAG

GETTAG:
IFN XPNTST,<
	PUSHJ	PP,XP1TAG##	;EXPAND TAGTAB BY 1 LOCATION
>
	MOVE	CH,TAGCNT##	;GET NEXT TAG NUMBER
	HRLS	CH		;  MAKE N,,N
	ADD	CH,TAGLOC##	;CREATE NEW TAGNXT
	JUMPL	CH,GETTA1	;IF COUNT STILL NEG, NEW TAG FITS

	PUSHJ	PP,XPNTAG##	;OTHERWISE, EXPAND TABLE
	JRST	GETTAG		;RECOMPUTE NEW TAGNXT

GETTA1:	MOVEM	CH,TAGNXT##	;STORE NEW VALUE FOR TAGNXT
	SETZM	(CH)		;CLEAR ENTRY

	MOVE	CH,TAGCNT	;GET TAG NUMBER TO RETURN TO CALLER
	IORI	CH,AS.TAG##	;PUT IN ASSEMBLER CODE

	AOS	TAGCNT		;RESET TAGCNT FOR NEXT CALL TO GETTAG
	POPJ	PP,
;ROUTINE TO REFERENCE A TAG - ENTER WITH TA= TAG #.
;USES TE

REFTAG:	TRCN	TA,700000	;SKIP IF POSSIBLY AS.TAG SET
	JRST	REFTG1		;NOTHING
	TRCE	TA,AS.TAG	;ONLY REFERENCE IF ADDRESS TYPE IS AS.TAG
	POPJ	PP,		;SOMETHING ELSE - FORGET IT
REFTG1:	ANDI	TA,77777	;LEAVE ONLY THE TAG NUMBER
	ADD	TA,TAGLOC##	;RH (TA) IS ADDRESS OF THE TAG ENTRY
	MOVSI	TE,1		;ADD 1 TO LEFT HALF
	ADDM	TE,(TA)		; (REFERENCE COUNT)
	POPJ	PP,		;RETURN



;ROUTINE TO DE-REFERENCE A TAG.  ENTER WITH TAG IN TA.
;USES TEMP AC TE
;SKIP RETURN WHEN REFERENCE COUNT EQUAL ZERO.

DRFTAG:	ANDI	TA,77777	;LEAVE ONLY TAG NUMBER
	ADD	TA,TAGLOC	;RH (TA) IS NOW THE ADDRESS OF ENTRY
	MOVE	TE,(TA)		;TE=ENTRY
DRFTG2:	TLNE	TE,(1B0!1B1)	;IS THIS AN INDIRECT REFERENCE?
	 JRST	DRFTG1		;YES
	LDB	TE,[POINT 15,TE,17] ;GET REFERENCE COUNT
	SOJL	TE,DOKILL	;SUBTRACT ONE, IF NEGATIVE, COMPLAIN
	SKIPN	TE		;SKIP IF NON-ZERO
	AOS	(PP)		;SKIP RETURN FOR ZERO COUNT
	DPB	TE,[POINT 15,(TA),17] ;STORE DECREMENTED COUNT
	POPJ	PP,

DRFTG1:	TRC	TE,AS.PRO##	;A PARA-NAME?
	TRNN	TE,700000
	 POPJ	PP,		;YES-DON'T DO ANYTHING
	HRRZ	TA,TE
	JRST	DRFTAG

DOKILL:	TTCALL 3,[ASCIZ/?Tag count less than zero in DRFTAG
/]
	PJRST	KILL##		;DIE

END