*DECK HSWACNB USETEXT ACB USETEXT ACNB USETEXT ACNT USETEXT AT USETEXT KDIS USETEXT KHDRX USETEXT NIPDEF USETEXT OVERLAY USETEXT PARAMP USETEXT PARAMS USETEXT SYSTIME PRGM HSWACNB; # SWITCH ACNB FROM ONE APP TO ANOTHER # STARTIMS; # *1DC HSWACNB * 1. PROC NAME AUTHOR DATE * HSWACNB C. BITTNER 81/12/01 * * 2. FUNCTIONAL DESCRIPTION * SWITCH ACNB FROM OLD APPLICATION TO NEW APPLICATION * * 3. METHOD * CALL HALLOCN TO ALLOCATE A NEW CONNECTION NUMBER * PICK UP ACNT ENTRY OF OLD CONNECTION FOR NEW ACNT ENTRY * ASSIGN ACNB OF OLD CONNECTION AS ADDRESS OF NEW CONNECTION (ACNB) * IF DATA QUEUED TO ACNB, * CALL DELCDR TO DELETE ACNB FROM CONNECTION DATA RING. * CALL RELACNB TO DELETE OLD ACN * UPDATE FIELDS IN ACNB * IF DATA QUEUED TO ACNB, * CALL INSCDR TO INSERT ACNB IN CONNECTION DATA RING. * * 4. ENTRY PARAMETERS * PARAMS1 ADDRESS OF OLD ACB * PARAMS2 OLD CONNECTION NUMBER * PARAMS3 ADDRESS OF NEW ACB * PARAMS4 CONNECTION NO IF RETURNING LOANED CON * PARAMS8 FLAG TO INDICATE IF CONNECTION BEING LOANED * = FALSE IF NOT BEING LOANED. * = TRUE IF BEING LOANED. * * 5. EXIT PARAMETERS * PARAMS1 ADDRESS OF NEW ACNB * = 0 IF NO NEW ACNB WAS ASSIGNED. * * 6. COMDECKS CALLED AND SYMPL TEXTS USED * ACB * ACNB * ACNT * AT * NIPDEF * OVERLAY * PARAMS * SYSTIME * * 7. ROUTINES AND OVERLAYS CALLED * DELCDR DELINK ACNB FROM CONNECTION DATA TABLE * HALLOCN - ALLOCATE NEW CONNECTION NUMBER * HUPDDAW UPDATE DATA AVAILABLE WORD * INSCDR INSERT ACNB IN CONNECTION DATA RING * RELACNB RELEASE OLD ACNB * STRTSW OVL TRIGGER ROUTINE RELACNB * XTRACE - RECORD PROCEDURE CALL * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION * THIS PROGRAM IS A SECONDARY OVERLAY CALLED BY HCSTTP. * * W A R N I N G - THIS PROGRAM PLUS PROCEDURE RELACNB CANNOT * EXCEED THE SECONDARY OVERLAY BUFFER SIZE MINUS * 5 (473B WORDS). * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC ABORT ; PROC DELCDR; # DELINK ACNB FROM CONNECTION DATA RING # PROC HUPDDAW; # UPDATE DATA AVAILABLE WORD # PROC INSCDR; # INSERT ACNB IN CONNECTION DATA RING # PROC OVLCALL; # LOAD AND EXECUTE OVERLAY # PROC HALLOCN ; PROC KPUT ; PROC RELACNB; # RELEASE OLD ACNB # PROC XTRACE; # RECORD PROCEDURE CALL # LABEL RJMAIN; # ADDRESS IN OVLCALL TO RETURN TO # END # INTERNAL VARIABLES # ITEM ACN; # APPLICATION CONNECTION NUMBER # ITEM ACNTINDX; # INDEX INTO ACNT # ITEM INCR B; # TRUE = INCREASE NO OF DELIVERABLES# ITEM NUMBLKS; # NUMBER OF DATA BLOCKS QUEUED TO ACNB # ITEM OACNTINDX; # INDEX INTO OLD ACNT # ITEM OLDACNB; # OLD ACNB # ITEM OLDACNT; # OLD ACNT # ITEM OLDCN; # OLD CONNECTION NUMBER # ITEM TEMPACNT; # ACNT ENTRY OF CONNECTION # ITEM PRIMINFO ; # PRIMARY APPLICATION INFO # ARRAY HSWERR S(4) ; BEGIN ITEM HSWERR1 C(0,0,31) = [" NIP CANNOT RETURN LOANED CONN."] ; ITEM HSWERR2 U(3,6,54) = [0] ; END #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1; XTRACE("HSWAC") ; CONTROL FI; P = PARAMS1; # ADDRESS OF OLD ACB # OLDCN = PARAMS2; # OLD CONNECTION NUMBER # ACN = PARAMS4; # NEW CONNECTION NUMBER IF LOANED CN# P = ACBACNT[0]; OLDACNT = P; OACNTINDX = OLDCN - ACNTMINACN[0] + ACNTHSIZE; OLDACNB = ACNTACNB[OACNTINDX]; P = OLDACNB; TEMPACNT = ACNTWD[OACNTINDX]; # SAVE STATES FOR CONNECTION # IF ACN EQ 0 THEN BEGIN # ALLOCATE THE ACN # HALLOCN(PARAMS3,ACN); # ALLOCATE NEW CONNECTION NUMBER # END IF ACN NQ 0 THEN BEGIN PRIMINFO = ACNBPRID[0] ; # SAVE THE PRIM APPL. INFO # NUMBLKS = ACNBBLKSQ[0]; IF NUMBLKS NQ 0 THEN # DATA QUEUED TO ACNB # BEGIN DELCDR(OLDACNB); # DELETE ACNB FROM CONNECTION DATA RING # HUPDDAW(P,P,-NUMBLKS,-NUMBLKS); END IF KDIS$RT AND ACBKNDX[0] NQ 0 AND ACBKNDX[0] GQ KDAPPST[0] AND ACBKNDX[0] LQ KDAPPND[0] THEN KPUT(KHDRNP[0],ACBKNDX[0]-KDAPPST[0],KPAPNDM,ACBBLKSQ[0]) ; INCR = FALSE; # DECREMENT NO OF DELIVERABLE BLKS # P = PARAMS3; # ADDRESS OF NEW ACB # P = ACBACNT[0]; ACNTINDX = ACN + ACNTHSIZE - ACNTMINACN[0]; CONTROL IFEQ DEBUG,1; IF ACNTACNB[ACNTINDX] NQ 0 AND ACNBPRID[0] NQ 0 THEN ABORT(HSWERR,0) ; # ACTIVE CONNECTION IN LOANED ENTRY # CONTROL FI; ACNTWD[ACNTINDX] = TEMPACNT; # ACNT ENTRY OF CONNECTION # ACNTABO[ACNTINDX] = 0 ; # CLEAR THE ABO COUNT # ACNTACNB[ACNTINDX] = OLDACNB; # SWITCH ACNB FROM NVF TO APP OR FROM OLD APP TO NEW APP # ACNBLO[0] = FALSE; # CLEAR LIST OFF FLAG # RELACNB(OLDACNB,TRUE,PARAMS8); # CLEAN UP OLD ACNB INFOMATION # # SET FIELDS IN ACNB # P = OLDACNB; ACNBAN[0] = ACBAN[0]; # APPLICATION NUMBER # ACNBACN[0] = ACN; # APPLICATION CONNECTION NUMBER # ACNBTLO[0] = ATDIS[ACNBAN[0]]; # UPDATE TEMP LIST OFF FLAG # IF NUMBLKS NQ 0 THEN # DATA QUEUED TO ACNB # BEGIN HUPDDAW(P,P,NUMBLKS,NUMBLKS); INSCDR(P); # INSERT ACNB INTO CONNECTION DATA RING # END ACBNCN[0] = ACBNCN[0] + 1 ; # UPDATE NUMBER OF CONN TO APP# IF KDIS$RT AND ACBKNDX[0] NQ 0 AND ACBKNDX[0] GQ KDAPPST[0] AND ACBKNDX[0] LQ KDAPPND[0] THEN KPUT(KHDRNP[0],ACBKNDX[0]-KDAPPST[0],KPAPNCN,ACBNCN[0]); ACNBFLAGS[0] = FALSE ; ACNBBCHK[0] = FALSE; # CLEAR BLOCK SEQUENCE CHECK FLAGS # ACNBD[0] = ATT[ACNBAN[0]]; # DATA TRUNCATION FLAG # ACNBH[0] = ATH[ACNBAN[0]]; # HALF DUPLEX FLAG # ACNBINACT[0] = RTSECS[0] + INACTVAL; ACNBPRID[0] = PRIMINFO ; # RESTORE THE PRIM APPL. INFO # PARAMS1 = P; # ADDRESS OF NEW ACNB # INCR = TRUE; # DECREMENT NO OF DELIVERABLE BLKS # END ELSE BEGIN PARAMS1 = 0; # NO NEW ACNB WAS ASSIGNED # END GOTO RJMAIN; # RETURN TO CALLING PROGRAM # END TERM