*DECK OSCCALL 
          IDENT  OSCCALL
          ENTRY  OSCCALL
          EXT    OPPHANG
          EXT    OMSG 
          EXT    OTIME
          EXT    RDUMP
          EXT    XRECALL
          EXT    XTRACE 
          SST 
*#
*1DC  OSCCALL 
* 
*     1. PROC NAME           AUTHOR              DATE 
*          OSCCALL           E. GEE              77/08/03 
* 
*     2. FUNCTIONAL DESCRIPTION.
*        THIS ROUTINE IS RESPONSIBLE FOR MAKING AN SCP CALL FOR NIP.
* 
*     3. METHOD USED. 
*          CHECK IF SF.LIST CALL
*          ISSUE SCP CALL 
*          LOOP UNTIL COMPLETION OF CALL
*          IF SF.LIST CALL NOT COMPLETE, REISSUE SCP CALL 
*          CHECK FOR NONZERO RC 
*          GO INTO A TIGHT LOOP IF FATAL RC 
* 
*     4. ENTRY PARAMETERS.
*          A1 = ADDR OF THE SFCALL PARAMETER WORDS
* 
*     5. EXIT PARAMETERS.  NONE 
* 
*     6. COMDECKS CALLED. 
*          DUMPFLG  INPARU  MACDEF
*          STATTAB
* 
*     7. ROUTINES CALLED. 
*          OPPHANG           HANG PPU 
*          OMSG              ISSUE DAYFILE MESSAGE
*          OTIME             GET SYSTEM RTIME 
*          RDUMP             DUMP NIP-S FIELD LENGTH
*          SFCALL            SYSTEM-CONTROL-POINT MACRO 
*          XRECALL           RECALL 
*          XTRACE            TRACES CALLS 
* 
*     8. DAYFILE MESSAGES.
*          * NIP/SCP ERROR RC = XXB,JOBID=XXXX* 
* 
*#
*CALL MACDEF
*CALL INPARU
 ERRMSG   DIS    ,* NIP/SCP ERROR RC = XXB,JOBID=XXXX*
 MSGADR   VFD    42/0,18/ERRMSG 
          BSSZ     1
 RCERR    EQU    ERRMSG+2 
 IDERR    EQU    ERRMSG+3 
*CALL DUMPFLG 
 STAT1    IFEQ   STAT,1 
*CALL STATTAB 
 STAT1    ENDIF 
  
          SPACE  2
 OSCCALL  BSSZ   1           ENTRY/EXIT 
  
 DEBUG1   IFEQ   DEBUG,1
          SX6    A1 
          SA6    TEMP 
  
 STAT1    IFEQ   STAT,1 
          SA1    STIMEP      PARAMETER BLOCK FOR CALLING OTIME
          RJ   OTIME         GET RTIME VALUE BEFORE CALL
 STAT1    ENDIF 
  
          SX1    XOSCCA 
          RJ     XTRACE 
          SA1    TEMP 
          SA1    X1 
 DEBUG1   ELSE
  
 STAT1    IFEQ   STAT,1 
          SX6    A1          SAVE ADDRESS OF PARAMETER BLOCK IN TEMP
          SA6    TEMP 
          SA1    STIMEP      PARAMETER BLOCK FOR CALLING OTIME
          RJ   OTIME         GET RTIME VALUE BEFORE CALL
          SA1    TEMP        RESTORE ADDRESS OF PARAMETER BLOCK IN A1 
          SA1    X1 
 STAT1    ENDIF 
  
 DEBUG1   ENDIF 
  
          MX0    42 
          MX3    54 
          SB1    1
          BX6    X1 
          SA6    SLIST       PRESET TO NON-SF.LIST REQUEST
          SA6    FLIST       ADDRESS OF FUNCTION LIST ENTRY 
          SA1    X1          FUNCTION LIST ENTRY
          BX4    -X3*X1      FC OF FUNCTION LIST ENTRY
          BX6    X1          SAVE FIRST WORD OF FUNCTION LIST 
* 
 OSC      SX7    X4-SF.LIST  CHECK IF SF.LIST REQUEST 
          SA7    SLIST
          NZ   X7,OSC1       GO ISSUE SCP CALL
  
*         SF.LIST REQUEST, SET UP LIST ENTRIES
  
          AX1    42 
          SB2    X1          NO OF LIST ENTRIES 
          LX1    30 
          AX6    6
          BX6    -X0*X6 
          BX6    X1+X6
          SA6    SLNTRY 
  
*         ISSUE SYSTEM CONTROL POINT CALL 
  
 OSC1     SA1    FLIST
          SFCALL X1,R 
  
*         CHECK FOR SCP REQUEST COMPLETION
  
 OSC2     SA1    FLIST
          SA1    X1          FUNCTION LIST ENTRY
          LX1    59 
          MI   X1,OSC3       IF REQUEST COMPLETED 
          SX1    =0 
          RJ   XRECALL       ELSE WAIT
          EQ   OSC2          LOOP TILL REQUEST IS COMPLETE
  
*         SCP CALL COMPLETED
  
 OSC3     SB1    1
  
 STAT2    IFEQ   STAT,1      STATISTICS ON
          SA1    ST$NSC      INCREMENT NO OF CALLS TO OSCCALL 
          SX2    B1          SET X2 TO 1
          IX6    X1+X2       INCREMENT THE NUMBER OF CALL 
          SA6    ST$NSC 
 STAT2    ENDIF 
  
          SA1    FLIST
          SA1    X1          FUNCTION LIST ENTRY
          MI   X1,OSC4       IF SCP RETURNS ERROR 
* 
          SA2    SLIST
          NZ   X2,OSC9       IF RETURNING TO CALLER 
          BX2    X1 
          LX2    6
          AX2    6           GET RID OF ANY TRIVIAL ERRORS IN RC
          AX2    42 
          ZR   X2,OSC9       IF RETURNING TO CALLER 
* 
          AX1    1
          LX6    X1,B1
          SA6    A1          CLEAR COMPLETION BIT 
          EQ   OSC1          REISSUE SCP REQUEST
* 
*         ERROR RETURNS ON SCP REQUEST
  
 OSC4     MX3    6
          BX5    X1*X3       MASK OUT RC
          SA2    SLIST
          NZ   X2,OSC7       IF NOT SF.LIST REQUEST 
          LX5    6
          SX2    X5-40B      CHECK IF ERROR IN LIST ENTRY 
          LX5    54 
          NZ   X2,OSC7       IF RC NOT 40B
  
*         SCAN LIST ENTRIES FOR NONZERO RC
  
          SA2    SLNTRY 
          SB3    X2          LIST ENTRY ADDRESS 
          AX2    30 
          SB2    X2          NO OF LIST ENTRIES 
 OSC5     SA2    B3          FUNCTION LIST ENTRY
          BX5    X2*X3       MASK OUT RC
          MI   X5,OSC6       IF RC ENCOUNTERED
          SB3    B3+B1
          SB2    B2-B1
          NZ   B2,OSC5       IF MORE ENTRY TO CHECK 
  
*         REPLACE FUNCTION LIST RC WITH LIST ENTRY-S RC 
  
 OSC6     BX2   -X3*X1       CLEAR RC=40B 
          BX6    X2+X5       REPLACE WITH LIST ENTRY-S RC 
          SA6    A1 
* 
 OSC7     MX3    3
          BX4    X3*X5
          LX3    57 
          BX3    X3*X5
          LX4    9
          LX3    6
          BX3    X3+X4
          SX4    X3+3333B 
          LX4    48 
          MX3    12 
          SA2    RCERR
          BX6   -X3*X2       CLEAR RC IN ERRMSG 
          BX6    X4+X6
          SA6    A2          PUT RC IN ERRMSG 
          LX5    6
          MX3    24 
          SA1    FLIST
          SA1    X1+B1       FUNCTION LIST WORD WITH JOBID
          BX1    X1*X3
          SA2    IDERR
          BX7   -X3*X2       CLEAR JOBID IN ERRMSG
          BX7    X1+X7
          SA7    A2          PUT JOBID IN ERRMSG
* 
          SX4    X5-43B 
          ZR   X4,OSC8       IF RC=43B
          SX4    X5-44B 
          IFEQ   DEBUG,1,1
          ZR     X4,OSC9     NOT DAYFILE, RETURN TO CALLER
          IFNE   DEBUG,1,1
          ZR   X4,OSC9       IF RC = 44B, RETURN
          SX4    X5-45B 
          ZR   X4,OSC8       IF RC=45B
          SX4    X5-63B 
          NZ   X4,OSC7.1     IF RETURN CODE IS NOT 63B
          SA1    HFCALL 
          NZ   X1,OSC8       IF RC=63B ON A SF.ENDT CALL FROM HAPFAIL 
          EQ     OSC8        DAYFILE THE MESSAGE THEN CONTINUE. 
 OSC7.1   BSS    0
  
*         IF RC NOT 43B, 44B, OR 45B
*         THEN SET PP HANG BIT, AND GO
*         INTO A TIGHT LOOP 
  
          SA1    MSGADR 
          RJ   OMSG          ISSUE ERROR DAYFILE MESSAGE
          RJ     OPPHANG
 HANG     EQ     HANG 
* 
 OSC8     SA1    MSGADR 
          RJ   OMSG          ISSUE ERROR DAYFILE MESSAGE
 OSC9     BSS    0
  
 STAT2    IFEQ   STAT,1 
          SA1    ETIMEP      PARAMETER BLOCK FOR CALLING OTIME
          RJ   OTIME         GET RTIME VALUE AFTER CALL 
          SA1    STIME       STARTING RTIME VALUE 
          MX0    24D         MASK FOR RTIME MILLESECOND VALUE 
          BX1    -X0*X1      CLEAR SECONDS FIELD
          SA2    ETIME       ENDING RTIME VALUE 
          BX2    -X0*X2      CLEAR SECONDS FIELD
          IX6    X2-X1       ELAPSED TIME FOR SWAPIN
          SA1    ST$LSC      LARGEST TIME SPENT IN OSCCALL
          IX5    X1-X6       DETERMINE IF LATEST TIME INTERVAL IS LARGER
          PL   X5,OSC10      IF PREVIOUS TIME INTERVAL WAS LARGER 
          SA6    ST$LSC      SAVE NEW LARGEST TIME INTERVAL 
 OSC10    SA3    ST$TSC      PREVIOUS CUMULATIVE VALUE
          IX6    X3+X6       NEW CUMULATIVE VALUE 
          SA6    ST$TSC 
 STAT2    ENDIF 
  
          EQ   OSCCALL       EXIT 
          SPACE  3
 FLIST    BSSZ   1           ADDRESS OF FUNCTION LIST ENTRY 
 SLIST    BSSZ   1           ZERO IF SF.LIST REQUEST
 SLNTRY   BSSZ   1           WORD 30/FP,30/SCPA 
 XOSCCA   DATA   L*OSCCA* 
 TEMP     BSS    1
  
 STAT3    IFEQ   STAT,1 
          EXT    OTIME
 STIMEP   VFD    60D/STIME
 ETIMEP   VFD    60D/ETIME
 STIME    BSS    1           START TIME FOR COMPARING SWAPIN TIME DELAY 
 ETIME    BSS    1           END TIME FOR COMPARING SWAPIN TIME DELAY 
 STAT3    ENDIF 
  
 SF.READ  EQU    10B
 SF.WRIT  EQU    14B
 SF.TIME  EQU    04B
 SF.ENDT  EQU    06B
 SF.REGR  EQU    02B
 SF.STAT  EQU    12B
 SF.EXIT  EQU    16B
 SF.SWPO  EQU    24B
 SF.SWPI  EQU    26B
 SF.SLTC  EQU    30B
 SF.CLTC  EQU    32B
 SF.LIST  EQU    34B
          END 
