*DECK             TMPGEN
USETEXT   TSOURCE 
USETEXT   TSYMCNS 
USETEXT   TCEXECQ 
USETEXT   TCEXEC
FUNC TMPGEN(A);     # GENERATES OR RETRIEVES A-WORD TEMP #
BEGIN 
  
  
  
  
*CALL COMEX 
  
  
  
  
    ITEM A; #NUMBER OF WORDS IN TEMP# 
    ITEM I,J,K; 
    ITEM TMPCH I=0; #HEAD OF AVAILABLE TEMP CHAIN#
    XREF PROC POST; 
    XDEF PROC TMPRLS; 
    XDEF PROC TMPINT; 
CONTROL EJECT;
PROC TMPRLS(B); #RELEASE TEMP TO AVAILABLE CHAIN# 
BEGIN 
    ITEM B; #SYMBOL TABLE POINTER TO RELEASED TEMP# 
    I=B;
          IF NOT TPGN[I] THEN RETURN; 
                           # DONT CHAIN PASS 1 TEMPS# 
    TPCH[I]=TMPCH;
    TMPCH=I;
END 
CONTROL EJECT;
PROC TMPINT; #INITIALIZE AVAILABLE CHAIN POINTER# 
    TMPCH=0;
  
    I=A;
    IF TMPCH NQ 0 THEN
         BEGIN #SEARCH AVAILABLE TEMP CHAIN#
         K=TMPCH; 
         IF NWDS[TMPCH] EQ I THEN 
              BEGIN #FOUND A TEMP#
              TMPCH=TPCH[TMPCH];
              GOTO TM20;
              END 
TM10:    J=K; 
         K=TPCH[K]; 
         IF K NQ 0 THEN 
              BEGIN 
              IF NWDS[K] EQ I THEN
                   BEGIN
                   TPCH[J]=TPCH[K]; 
                   GOTO TM20; 
                   END
              GOTO TM10;
              END 
         END
    POST(NONAM,TEMP$W,K); 
    CLAS[K]=S"TEMP";
    NWDS[K]=I;
    IF I EQ 1 THEN
         BEGIN
         TYPE[K]=S"IGR";
         NBIT[K]=60;
         END
    ELSE BEGIN
         TYPE[K]=S"HLTH"; 
         NBYT[K]=10*I;
         END
    ASEQ[LENT[DSLC]]=K; 
    LENT[DSLC]=K; 
    LOCN[K]=SSIZ[DSLC]; 
          TPGN[K] = TRUE; 
    SSIZ[DSLC]=SSIZ[DSLC]+I;
TM20: 
    TMPGEN=K; 
END 
TERM
