*DECK             GETRD 
USETEXT   TSOURCE 
USETEXT   TCEXECQ 
USETEXT   TCOM37Q 
USETEXT   TCOM39Q 
USETEXT   TCOM78Q 
USETEXT   TC7DECS 
FUNC GETRD; 
BEGIN 
  
#     GETRD - RETURN INDEX TO NEXT AVAILABLE TRIAD.                    #
#     ALSO CONTAINS GTRSP - GET TRAID SPACE OF I WORDS                 #
#                   INTRX - INITIALIZE TRIAD SPACE CONTROL INDEXES     #
  
*CALL COMEX 
  
  
   XREF PROC SYMABTL;                                                    GETRD
    XDEF FUNC GTRSP;
    XDEF PROC INTRX;
  
   DEF J831 #831#;                 # SYMABT DIAGNOSTIC 831             # GETRD
  
    ITEM STRDX=0; #STARTING TRIAD INDEX#
    ITEM ETRDX=TRSZ; #ENDING TRIAD INDEX#                                JANDRE 
  
  
#     GETRD - RETURN INDEX TO NEXT AVAILABLE TRIAD.                    #
#             ZEROS OUT TRIAD.                                         #
  
  
      STRDX = STRDX + OOES;  #BUMP CURRENT TRIAD INDEX BY TRIAD SIZE   #
      IF STRDX GQ ETRDX                                                  GETRD
      THEN                                                               GETRD
        BEGIN                                                            GETRD
        SYMABTL(J831,"TRIAD TABLE OVERFLOW(GETRD) LINE XXXXX",38,LINUM); GETRD
        END                                                              GETRD
  
#     ZERO OUT TRIAD                                                   #
  
    OOAR[STRDX]=0;
    OOAR[STRDX+1]=0;
    OOAR[STRDX+2]=0;
    OOAR[STRDX+3]=0;
    OOAR[STRDX+4]=0;                                                     JANDRE 
    GETRD=STRDX;
CONTROL EJECT;
      FUNC GTRSP((I));
    BEGIN 
  
#     GTRSP - GET TRIAD SPACE OF I WORDS, I>0.                         #
#             SPACE IS TAKEN FROM TOP OF TABLE AND ZEROED OUT.         #
  
    ITEM I,J; 
  
  
      ETRDX = ETRDX - I;     # DECREMENT TOP OF TABLE BY AMOUNT WANTED #
      IF ETRDX LQ STRDX + OOES                                           GETRD
      THEN                                                               GETRD
        BEGIN                                                            GETRD
        SYMABTL(J831,"TRIAD TABLE OVERFLOW(GETRD) LINE XXXXX",38,LINUM); GETRD
        END                                                              GETRD
  
#     ZERO OUT TRIAD AREA                                              #
  
    FOR J=I-1 STEP -1 UNTIL 0 DO
         OOAR[ETRDX+J]=0; 
    GTRSP=ETRDX;
    END 
CONTROL EJECT;
      PROC INTRX; 
  
#     INITIALIZE TRIAD SPACE CONTROL INDEXES                           #
  
    BEGIN 
      STRDX = 0;             # CURRENT INDEX INTO TRIAD TABLE          #
      ETRDX = TRSZ;          # MAXIMUM TRIAD INDEX                     #
      DVSP = 0;              # DEAD VALUE STACK POINTER                #
      OPIX = 0;              # IL OPERAND STACK INDEX.                 #
      SHPTR = 0;             # STACK HISTORY POINTER.                  #
    END 
END 
TERM
