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