*DECK SSOEOP
USETEXT TEXTSS
PROC SSOEOP;
# TITLE - EXECUTE OVERLAY PROGRAM. #
BEGIN
#
** SSOEOP - EXECUTE OVERLAY PROGRAM.
*
* S. H. FISCHER. 82/05/28.
*
* THIS ROUTINE EXECUTES OVERLAYS WHEN THEY ARE LOADED.
*
* PROC SSOEOP
*
* ENTRY:
* OVNUM = OVERLAY NUMBER TO BE EXECUTED.
* ODT$EADD[OVNUM] = OVERLAY EXECUTION STARTING POINT.
* ORT$MAP[OVNUM] = ENTRY POINT BIT MAP FOR OVERLAY.
*
* EXIT:
* IF ALL ENTRY POINT NEEDED IN THE OVERLAY HAVE BEEN EXECUTED,
* SSOVLD = TRUE TO SEARCH FOR NEXT OVERLAY NEEDED.
*
* IF ALL ENTRY POINTS NEEDED IN THE OVERLAY HAVE NOT BEEN EXECUTED
* A WORKLIST REQUEST IS MADE FOR THIS ROUTINE TO EXECUTE AGAIN.
*
* METHOD:
* THE OVERLAY REQUEST TABLE ENTRY FOR THE OVERLAY IS EXAMINED
* FOR THE LOWEST NUMBERED ENTRY POINT TO BE EXECUTED.
* THIS NUMBER IS PASSED TO THE OVERLAY IN A COMMON CELL.
* THE BIT IS CLEARED AND THE OVERLAY ENTERED.
* UPON RETURN IS ANY BITS REMAIN INDICOTING ADDITIONAL ENTRY POINT
* TO EXECUTE, A WOKLIST REQUEST IS MADE TO CONTINUE EXCUTATION
* AFTER CHECKING FOR HIGHER PRIORITY ACTIVE.
* OTHERWISE THE OVERLAY LOADER OS RESTARTED BY CHANGING ITS
* FLAG.
#
#
**** PROC SSOEOP - XREF LISTS BEGINS.
#
XREF
BEGIN
PROC SSBCBW; # CLEAR BIT IN WORD #
PROC SSBFPB; # FIND PRIORITY BIT #
PROC SSOJOP; # JUMP TO OVERLAY PROGRAM #
PROC SSSAWR; # ACCEPT WORKLIST REQUEST #
END
#
****
#
IF ORT$MAP[OVNUM] NQ 0
THEN
BEGIN
SSBFPB( ORT[OVNUM], OVENUM); # FIND LOWEST ENTRY POINT NEEDED#
SSBCBW( ORT[OVNUM], OVENUM); # CLEAR BIT FOR ENTRY POINT #
OVENUM = OVENUM - 1;
P<EAHPM> = ODT$FWA[OVNUM];
SSOJOP( EAH$EPA[0] ); # EXECUTE THE OVERLAY #
END
IF ORT$MAP[OVNUM] NQ 0
THEN
BEGIN
SSSAWR(SSOEOPW); # RESTART THIS ROUTINE #
END
ELSE
BEGIN
SSOVLD = TRUE; # THIS OVERLAY IS DONE #
END
RETURN; # **** RETURN **** #
END # SSOEOP #
TERM