*DECK HPNONSA
USETEXT NIPDEF
USETEXT ACB
USETEXT APPSTAT
USETEXT AT
USETEXT AWLNTRY
USETEXT DRHDR
USETEXT FLIST
USETEXT OVERLAY
USETEXT PARAMS
USETEXT PT
USETEXT SCPCOM
PRGM HPNONSA; # FINISH PROCESSING NETON OF APPLICATION #
STARTIMS;
#
*1DC HPNONSA
*
* 1. PROC NAME AUTHOR DATE
* HPNONSA E. GEE 77/06/02
*
* 2. FUNCTIONAL DESCRIPTION.
* FINISH PROCESSING NETON OF APPLICATION
*
* 3. METHOD USED.
* CHECK IF NORMAL RESPONSE
* IF NORMAL, CREATE SCP FUNCTION LIST TO WRITE NETON RESPONSE
* SHORT-TERM CONN
* ISSUE SCP FUNCTION
* PROCESS SCP FUNCTION RETURN CODE
* IF APPLICATION NETTING ON IS NS OR CS SEND
* REG/CP TO PIP.
* IF ABNORMAL, CHECK IF FATAL OR NON-FATAL RETURN CODE
* IF FATAL, SET ABORT FLAG
* IF NON-FATAL, CREATE FUNCTION LIST TO INFORM APP NETON
* WAS REJECTED
* ISSUE SCP FUNCTION
* PROCESS SCP FUNCTION RETURN CODE
* RELEASE ACB
*
* 4. ENTRY PARAMETERS.
* ACBADDR ACB ADDRESS OF APP NETTING ON
*
* 5. EXIT PARAMETERS.
* ABTAPPF ABORT APP FLAG SET IF APP IS TO BE ABORTED
* ABTADDR ADDR OF BUF TO BE USED BY XABTAPP
* ABTJOBID JOB ID WORD OF APP TO BE ABORTED
* ABTSIZE SIZE OF BUF TO BE USED BY XABTAPP
*
* 6. COMDECKS CALLED AND SYMPL TEXTS USED.
* ACB APPSTAT AWLHEAD AWLNTRY
* DRHDR FLIST NIPDEF OPSIZE
* OVERLAY PARAMS PT SCPCOM
* AT
*
* 7. ROUTINES AND OVERLAYS CALLED.
* MRELS RELEASE BUFFER SPACE
* NCREGCP OVL SEND SM REG/CP TO PIP
* OSCCALL ISSUE SCP FUNCTIONS
* OSCHAPP SCHEDULE APPLICATION
* OSCPSI OVL SWAPIN (NO ACB) APPLICATION
* OVLCALL LOAD AND EXECUTE OVERLAY
* RELACB OVL RELEASE ACB
* XTRACE RECORD PROCEDURE CALLS
*
* 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION.
*
* THIS PROGRAM IS A PRIMARY OVERLAY LOADED BY SUBROUTINE OVLCALL.
* WHEN EXECUTION HAS COMPLETED, A JUMP IS MADE TO LOCATION RJMAIN
* TO RETURN TO THE CALLING PROGRAM.
*
* W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY
*CALL OPSIZE
*
* THIS OVERLAY IS CALLED BY XSACB
*
#
STOPIMS;
#
EXTERNAL VARIABLES
#
XREF
BEGIN
PROC MRELS; # RELEASE BUFFER SPACE #
PROC OSCCALL; # ISSUE SCP CALLS #
PROC OSCHAPP; # SCHEDULE APPLICATION #
PROC OVLCALL; # LOAD AND EXECUTE OVERLAYS #
PROC XTRACE; # RECORD PROCEDURE CALLS #
LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL #
END
#
INTERNAL VARIABLES
#
ITEM BUFADDR; # FWA OF NWL BUFFER #
ITEM BUFSIZE; # SIZE OF NWL BUFFER #
ITEM NETONRC; # NET/ON SUP MSG RETURN CODE #
ITEM RC; # SCP FUNCTION RETURN CODE #
#**********************************************************************#
BEGIN
CONTROL IFEQ DEBUG,1;
XTRACE("HPNSA");
CONTROL FI;
P<ACB> = ACBADDR; # ACB ADDRESS #
BUFADDR = ACBWLFWA[0]; # FWA OF REST OF NWL BUFFER #
BUFSIZE = ACBWLLWA[0] - ACBWLFWA[0] + 1; # SIZE OF REST OF NWL B #
JOBID = ACBJNWD[0]; # JOB ID WORD #
CBA = ACBUCPADR[0]; # UCP COMPLETION BIT ADDRESS #
P<AWLENTRY> = LOC(ACBAWL0[0]); # AWL NETON ENTRY ADDR #
NETONRC = AWLRC[0]; # NET/ON SUP MSG RETURN CODE #
#
CHECK FOR NORMAL RESPONSE
#
IF NETONRC EQ RNO"N"
THEN # NVF OKAYED NETON #
BEGIN
#
CREATE FUNCTION LIST TO COMPLETE NETON PROCESSING - WRITE AWL
NETON ENTRY BACK TO APP, ESTABLISH LONG TERM CONNECTION
AND DO NOT CLEAR SHORT TERM CONNECTION SO THAT THE DATA
AVAILABILITY STATUS WORD IN APPLICATION FL MAY BE UPDATED
BY NIP AT ANY TIME
#
P<FLHEAD> = BUFADDR; # ADDR TO HOLD FUNCTION LIST #
FLWD0[0] = 0;
FLID[0] = NAFLIDVALUE ; # NON-MOVEVABLE ID FUNCTION LIST ID #
FLBS[0] = FLSIZE + 2*FLESIZE; # SIZE OF FUNCTION LIST #
FLFW[0] = 0;
FLAN[0] = ACBAN[0]; # APP PROCESS NUMBER #
FLFP[0] = 2; # NUMBER OF SFLIST ENTRIES #
FLSCPA[0] = BUFADDR + FLSIZE; # ADDR OF SF.LIST ENTRIES #
FLJOBID[0] = JOBID; # JOB ID WORD #
P<FLE> = BUFADDR + FLSIZE;
FLEWD0[0] = 0;
FLEFP[0] = AWLNSIZE - BLKHSIZE; # AWL NETON ENTRY SIZE #
FLEUCPA[0] = ACBAWLADDR[0]; # UCP AWL ADDR #
FLESCPA[0] = P<AWLENTRY>; # AWL NETON ENTRY ADDR #
FLEFC[0] = SFWRITE; # SCP SF.WRITE FUNCTION #
FLEWD0[1] = 0;
FLEFC[1] = SFSLTC; # SCP SF.WRITE FUNC. #
#
ISSUE SCP FUNCTION
#
P<FLE> = LOC(FLFW[0]); # SCP FUNCTION WORD #
FLFC = SFLIST;
OSCCALL(FLE);
#
PROCESS SCP FUNCTION RETURN CODE
#
RC = FLRC[0]; # SCP FUNCTION RETURN CODE #
IF RC EQ 0
THEN # SCP FUNCTION COMPLETED #
BEGIN
FLBS[0] = BUFSIZE;
MRELS(BUFADDR); # RELEASE REST OF NWL #
ACBAWLADDR = 0; # CLEAR UCPAWL ADDR #
ACBWLFWA[0] = 0;
ACBWLLWA[0] = 0;
ACBAWL0[0] = 0; # CLEAR 1ST WORD OF AWL ENTRY #
# IF APPLICATION IS NS OR CS
SEND REG/CP/C TO CCP #
IF ACBANAME[0] EQ "CS" OR ACBANAME[0] EQ "NS"
THEN
BEGIN
IF ACBANAME[0] EQ "CS"
THEN # INITIALIZE APPLICATION NO. FOR CS #
BEGIN
PROCAN[CSORD] = ACBAN[0]; # SET AN IN COMMON #
END
ELSE # INITIALIZE APPLICATION NO. FOR NS #
BEGIN
PROCAN[NSORD] = ACBAN[0]; # SET AN IN COMMON #
END
OVLNAME = NCREGCPP; # SEND REG/CP SM TO PIP #
PARAMS1 = 0; # ALL ACTIVE COUPLERS #
PARAMS2 = 0 ;
OVLCALL; # LOAD AND EXECUTE OVERLAY #
END
END
ELSE # SCP FUNCTION NOT COMPLETED #
BEGIN
IF RC EQ RCSWAPPEDOUT
THEN # APP IS SWAPPED OUT #
BEGIN # SET UP ACB TO LATER REISSUE SCP FUNCTION#
ATASBO[ACBAN[0]] = TRUE; # APP SWAPPED OUT AT NETON TIME #
OSCHAPP(ACBADDR); # SCHEDULE APPLICATION #
END
ELSE
BEGIN
IF RC EQ RCUCPAOOR
THEN # APP GAVE US BAD UCP AWL ADDR SO ABORT IT#
BEGIN
ABTADDR = ACBADDR; # ACB ADDRESS #
ABTAPPF = XFLERR; # SET ABORT-APPLICATION FLAG #
END
ELSE # APP MUST NO LONGER BE IN SYSTEM #
FAILADR = ACBADDR; # ACB ADDRESS #
END
END
END
ELSE # NVF REJECTED NETON #
BEGIN
ACBWLFWA[0] = 0; # SO THAT SPCBDHS WILL NOT RELEASE NWL #
#
CHECK IF FATAL OR NON-FATAL RETURN CODE
#
# SET ABORT PARAMS IN CASE APP IS TO BE ABORTED #
ABTSIZE = BUFSIZE; # SIZE OF BUF FOR XABTAPP TO USE #
ABTADDR = BUFADDR; # ADDR OF BUFFER FOR XABTAPP TO USE #
ABTJOBID = JOBID; # JOB ID WORD OF APPLICATION TO ABORT #
IF NETONRC EQ RNO"DIS" OR NETONRC EQ RNO"DUP"
THEN # THIS IS A NON-FATAL NETON RETURN CODE #
BEGIN
#
CREATE FUNCTION LIST TO INFORM APP NETON WAS REJECTED
#
P<SCPCALL> = BUFADDR; # ADDR TO HOLD FUNCTION LIST #
SCPID[0] = NAFLIDVALUE; # (NO ACB) FUNCTION LIST ID VALUE #
SCPBS[0] = SCPSIZE + 2*FLESIZE; # SIZE OF FUNCTION LIST #
SCPFW[0] = 0;
SCPFP[0] = 2; # NO OF SF.LIST ENTRIES #
SCPSCPA[0] = BUFADDR + SCPSIZE; # ADDR OF SF.LIST ENTRIES #
SCPJOBID[0] = JOBID; # JOB ID WORD #
P<FLE> = BUFADDR + SCPSIZE;
FLEWD0[0] = 0;
AWLEWD1[0] = 0; # ZERO AWL NETON ENTRY PN WORD #
FLEUCPA[0] = ACBAWLADDR[0]; # UCP AWL ADDR #
FLESCPA[0] = P<AWLENTRY>; # ADDR OF AWL NETON ENTRY #
FLEFP[0] = AWLNSIZE - BLKHSIZE; # SIZE OF AWL ENTRY #
FLEFC[0] = SFWRITE; # SCP SF.WRITE FUNCTION #
P<FLE> = P<FLE> + FLESIZE;
FLEWD0[0] = 0;
FLEUCPA[0] = CBA; # UCP COMPLETION BIT ADDR #
FLEFC[0] = SFENDT; # SCP SF.ENDT FUNCTION #
#
ISSUE SCP FUNCTION
#
P<FLE> = LOC(SCPFW[0]); # SCP FUNCTION WORD #
SCPFC = SFLIST;
OSCCALL(FLE);
#
PROCESS SCP FUNCTION RETURN CODE
#
RC = SCPRC[0]; # SCP FUNCTION RETURN CODE #
IF RC EQ RCSWAPPEDOUT
THEN # APP WAS SWAPPED OUT #
BEGIN
PARAMS1 = BUFADDR; # ADDR OF FUNCTION LIST #
PARAMS3 = BUFADDR + SCPSIZE+2*FLESIZE; # AWL ENTRY WORD #
PARAMS2 = PARAMS3 + AWLNSIZE; # SWPI ENTRY BUF ADR #
P<DRHDRWD> = PARAMS3; # ADDR OF BUF TO HOLD AWL #
BLKID[0] = NONMOVEABLE; # (NONMOVABLE) WRITE BUF BLK ID #
BLKBS[0] = AWLNSIZE; # SIZE OF NETON AWL #
P<AWLENTRY> = P<DRHDRWD> + BLKHSIZE; # ADR AWL NETON ENT #
AWLEAIPH[0] = ACBAWL0[0]; # TRF AWL-WD0 TO BUF AREA #
AWLEWD1[0] = ACBAWL1[0]; # TRF AWL-WD1 TO BUF AREA #
P<FLE> = BUFADDR + SCPSIZE; # ADR OF SF.LIST ENTRY #
FLESCPA[0] = P<AWLENTRY>; # ADR OF AWL NETON ENTRY #
OVLNAME = OSCPSIP; # NAME OF OVERLAY TO LOAD #
OVLCALL; # LOAD AND EXECUTE OVERLAY #
BUFADDR = BUFADDR + SCPSIZE+2*FLESIZE + SWPISIZE + AWLNSIZE;
BUFSIZE = BUFSIZE - SCPSIZE-2*FLESIZE - SWPISIZE - AWLNSIZE;
END
IF RC EQ RCUCPAOOR
THEN # APP GAVE US BAD AWL ADDR SO ABORT IT #
ABTAPPF = XFLERR; # SET ABORT-APPLICATION FLAG #
ELSE # OKAY TO RELELEASE REST OF NWL #
BEGIN
P<DRHDRWD> = BUFADDR; # FWA OF BUFFER TO RELEASE #
BLKBS[0] = BUFSIZE; # SIZE OF REST OF NWL BUFFER #
MRELS(BUFADDR);
END
END
ELSE # THIS IS A FATAL NETON RETURN CODE #
BEGIN
IF NETONRC EQ RNO"IA"
THEN # INVALID APPLICATION NAME #
ABTAPPF = XINVAPP; # SET ABORT-APPLICATION FLAG #
ELSE
IF NETONRC EQ RNO"NPR"
THEN # RESERVED APPLICATION NAME #
ABTAPPF = XRESAPPNM; # SET ABORT-APPLICATION FLAG #
END
#
N V F R E J E C T E D N E T O N
R E L E A S E A C B AND A C N T B U F F E R S.
#
PARAMS1 = ACBAN[0]; # APPLICATION NUMBER OF ACB TO RELEASE #
OVLNAME = RELACBP; # NAME OF OVERLAY TO LOAD #
OVLCALL; # LOAD AND EXECUTE OVERLAY #
END
GOTO RJMAIN;
END
TERM