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