*DECK SSTAQE USETEXT TEXTSS PROC SSTAQE(P$TABL$,WC,HEAD,ENTRYQ); # TITLE SSTAQE - ACCEPT QUEUE ENTRY. # BEGIN # SSTAQE # # ** SSTAQE - ACCEPT QUEUE ENTRY. * * F. HOU. 81/09/09. * * THIS PROCEDURE ENTERS A NEW ENTRY INTO A FIFO QUEUE AND * MAKE A WORKLIST REQUEST IF THIS IS THE FIRST ENTRY. * * PROC SSTAQE(P$TABL$,WC,HEAD,ENTRYQ) * * ENTRY P$TABL$ = BASED ARRAY POINTER FOR TABLE TABL. * WC = WORD COUNT WORD FOR NEW ENTRY. * HEAD = HEADER WORD FOR NEW ENTRY. * ENTRYQ = ARRAY OF WC-2 WORDS TO BE ADDED TO QUEUE. * * EXIT A NEW ENTRY HAS BEEN ACCEPTED TO THE QUEUE. * * NOTES NONE. * * METHOD * * ALLOCATES TABLE SPACE FOR NEW ENTRY. * MOVES THE NEW ENTRY TO THE ALLOCATED TABLE SPACE OF TABL. * IF TABL WAS EMPTY BEFORE THE MOVE, CALL SSSAWR TO ACCEPT * WORKLIST REQUEST WITH WORKLIST NUMBER CORRESPONDING TO TABL. * # ITEM P$TABL$ I; # BASED ARRAY POINTER FOR QUEUE TABL. # ITEM HEAD I; # HEADER WORD FOR NEW ENTRY. # ARRAY WC [0:0] S(1); # WORD COUNT WORD FOR NEW ENTRY. # BEGIN ITEM WC$WORD U(00,00,60); # OVERLAPPING WORD # ITEM WC$CNT U(00,48,12); # 12 BIT WORD COUNT # END ARRAY ENTRYQ[0:0] S(1); # ARRAY OF WC-2 WORDS TO BE ADDED. # BEGIN ITEM ENTRYQQ U(00,00,60); END # **** PROC SSTAQE - XREF LIST. # XREF BEGIN PROC SSTATS; # ALLOCATE TABLE SPACE. # PROC MOVEI; # MOVE BLOCK OF CENTRAL MEMORY WORDS. # PROC SSSAWR; # ACCEPT WORKLIST REQUEST. # END # **** # ITEM COUNT I; # WORD COUNT FOR ENTRY TO MOVE. # ITEM FROM I; # FIRST WORD ADDRESS OF FROM BLOCK # ITEM INDEX I; # INDEX OF QWD-QUEUE TO WORKLIST DEF TABLE# ITEM TABLEN I; # LENGTH OF TABL # ITEM TO I; # FIRST WORD ADDRESS OF TO BLOCK # ITEM WLN I; # WORKLIST NUMBER # BASED ARRAY TEMP [0:0] S(2); # TEMP FOR GETTING LENGTH OF TABL # BEGIN ITEM TEMP$F U(00,00,60); # FOR WC # ITEM TEMP$S U(01,00,60); # FOR HEAD # END $BEGIN # INCREMENT COUNT FOR STATISTICS # SVT$VAL[SVL"AQE"] = SVT$VAL[SVL"AQE"] + 1; $END P=LOC(P$TABL$)+1; # SAVE CURRENT LENGTH OF TABL IN TABLEN # TABLEN=TEMP$F[0]; SSTATS(P$TABL$,WC$CNT[0]); # ALLOCATE TABLE SPACE # P=P$TABL$+TABLEN; # SET TEMP POINTER TO THE END OF TABL # TEMP$F[0]=WC$WORD[0]; # MOVE WORD COUNT # TEMP$S[0]=HEAD; # MOVE HEAD # COUNT=WC$CNT[0]-2; # WORD COUNT FOR ENTRY PORTION # FROM=LOC(ENTRYQ); # FIRST WORD ADDRESS OF FROM BLOCK # TO=P$TABL$+TABLEN+2; # FIRST WORD ADDRESS OF TO BLOCK # MOVEI(COUNT,FROM,TO); # MOVE ENTRY PORTION TO QUEUE # IF(TABLEN EQ 0) # EMPTY QUEUE CASE # THEN BEGIN INDEX=(LOC(P$TABL$)-SSMEM)/2-1; #TRANSLATE FROM P$TABL$ TO WLN # WLN=QWD$WLN[INDEX]; # WORKLIST NUMBER # SSSAWR(WLN); # ACCEPT WORKLIST REQUEST # END END # SSTAQE # TERM