*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<TEMP>=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<TEMP>=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