*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
