*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