*DECK HLSTDX USETEXT NIPDEF USETEXT ACB USETEXT ACNB USETEXT ACNT USETEXT APPSTAT USETEXT AT USETEXT NWLNTRY USETEXT OVERLAY USETEXT PARAMS USETEXT SUPMSG PRGM HLSTDX; # PROCESS A HALF/FULL DUPLEX MODE # BEGIN *IF DEF,IMS STARTIMS; # *1DC HLSTDX * * 1.PROC NAME AUTHOR DATE * HLSTDX S.KRULEVITCH 79/02/28 * * 2. FUNCTIONAL DESCRIPTION. * PROCESS LST/HDX AND LST/FDX SUPERVISORY MESSAGES TO ALLOW * SELECTION/DESELECTION OF HALF DUPLEX MODE ON/ FULL DUPLEX MODE * * 3. METHOD USED. * DETERMINE OF LST/FDX OR LST/HDX * NONZERO ACN: * FOR ALL ACTIVE CONNECTIONS (IF ACN IS ZERO) OR * FOR A SPECIFIC CONNECTION (IF ACN IS NON-ZERO) * DO THE FOLLOWING * UPDATE THE HALF DUPLEX MODE FLAG * IF FULL DUPLEX - CLEAR THE TEMPORARY LIST OFF FLAG * IF HALF DUPLEX AND THE INITIAL STATE OF THE * CONNECTION IS DISABLED - SET THE TEMPORARY * LIST OFF FLAG (ELSE CLEAR THE TLO FLAG). * LOCATE ACNB ON NONZERO CONNECTION * IF ACNB NOT FOUND, RETURN A LOGICAL ERROR * IF ACNB FOUND * CLEAR OR SET HALF DUPLEX MODE FLAG * IF LST/FDX ALSO CLEAR TEMPORARY LIST FLAG * ZERO ACN: * CLEAR OR SET HALF DUPLEX FLAG IN ACB * FOR EACH ACTIVE CONNECTION"S ACNB * CLEAR OR SET HALF DUPLEX MODE FLAG * IF LST/FDX ALSO CLEAR TEMPORARY LIST OFF FLAG * * 4. ENTRY PARAMETERS. * ACBADDR CURRENT ACB ADDRESS * WLADDR CURRENT WORKLIST ENTRY * * 5. EXIT PARAMETERS. * ACNBH HALF DUPLEX MODE FLAG * ACNBTLO TEMPORARY LIST OFF FLAG * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * ACB ACNB ACNT APPSTAT AT * NIPDEF NWLNTRY OVERLAY PARAMS PT * SUPMSG * * 7. ROUTINES AND OVERLAYS CALLED * HLGLERR OVL ISSUE LOGICAL ERROR * HUPDDAW UPDATE DATA AVAILABLE WORD * OVLCALL LOAD OVERLAY * XTRACE TRACE CALLS * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION. * * W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY *CALL OPSIZE * * THIS OVERLAY IS CALLED BY HPPUT. * # STOPIMS; *ENDIF # EXTERNAL VARIABLES # XREF BEGIN PROC HUPDDAW; # UPDATE DATA AVAILABLE WORD # PROC OVLCALL; # LOAD OVERLAY # PROC XTRACE; # TRACE CALLS # LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL # END # INTERNAL VARIABLES # ITEM HDXFLAG B; # TRUE IF LST/HDX MESSAGE BEING PROCESSED # ITEM I I; # FOR LOOP VARIABLE # #**********************************************************************# CONTROL IFEQ DEBUG,1; XTRACE("HLSTD") ; CONTROL FI; P = WLADDR; # CURRENT WORKLIST ENTRY # P = WLADDR + AIPHSIZE + ABHSIZE; # F I N D A C N B - A D D R E S S # P = ACBADDR; P = ACBACNT[0]; # LOCATE LST MESSAGE # IF SFC[0] EQ HDX THEN # TURN ON HALF DUPLEX MODE # HDXFLAG = TRUE; ELSE # TURN ON FULL DUPLEX MODE # HDXFLAG = FALSE; IF LSTACN[0] NQ 0 THEN # CHANGE DUPLEX MODE FOR SPECIFIC # BEGIN # CONNECTION # P = ACNTACNB[LSTACN[0] + ACNTHSIZE - ACNTMINACN[0]]; IF P EQ 0 OR LSTACN[0] LS ACNTMINACN[0] OR LSTACN[0] GR ACNTHCN[0] THEN # ACNB NOT FOUND # BEGIN PARAMS1 = RLG"ACN";# ILLEGAL ACN # OVLNAME = HLGLERRP; OVLCALL; # LOAD PROGRAM INTO OVERLAY # GOTO HLSTDXX; END ACNBH[0] = HDXFLAG; # SET OR CLEAR HALF DUPLEX FLAG # IF NOT HDXFLAG # FULL DUPLEX MODE # THEN BEGIN # FULL DUPLEX # IF ACNBTLO[0] THEN # CONNECTION CURRENTLY IN TEMP LIST OFF # BEGIN ACNBTLO[0] = FALSE; # CLEAR TEMP LIST OFF CONDITION # HUPDDAW(P,P,0,ACNBBLKSQ[0]); END END # FULL DUPLEX # ELSE BEGIN # HALF DUPLEX # IF LSTDIS[0] THEN # CHECK INITIALLY LIST STATE FLAG # BEGIN # SET TLO # IF NOT ACNBTLO[0] # WAS TEMP LIST ON CONDITION # THEN BEGIN HUPDDAW(P,P,0,-ACNBBLKSQ[0]); END ACNBTLO[0] = TRUE ; END # SET TLO # ELSE BEGIN IF ACNBTLO[0] THEN # CONNECTION IN TEMP LIST OFF CONDITION # BEGIN ACNBTLO[0] = FALSE; # CLEAR TEMP LIST OFF CONDITION # HUPDDAW(P,P,0,ACNBBLKSQ[0]); # UPDATE DELIVER# END END END # HALF DUPLEX # END ELSE # CHANGE DUPLEX MODE ON ALL TERMINAL # BEGIN # APPLICATION CONNECTIONS # ATH[ACBAN[0]] = HDXFLAG; ATDIS[ACBAN[0]] = LSTDIS[0] ; # SET INITIAL LIST STATE FLAG # # LOOP THROUGH ACTIVE CONNECTIONS # FOR I = ACNTHSIZE STEP 1 UNTIL ACNTHCN[0] + ACNTHSIZE - ACNTMINACN[0] DO BEGIN IF ACNTACNB[I] NQ 0 THEN # ACTIVE CONNECTION # BEGIN P = ACNTACNB[I]; ACNBH[0] = HDXFLAG; # SET OR CLEAR HALF DUPLEX FLAG# IF NOT HDXFLAG THEN # FULL DUPLEX MODE # BEGIN # FULL DUPLEX MODE # IF ACNBTLO[0] THEN # CONNECTION IN TEMP LIST OFF CONDITION # BEGIN ACNBTLO[0] = FALSE; # CLEAR TEMP LIST OFF FLAG # HUPDDAW(P,P,0,ACNBBLKSQ[0]); # UPDATE DELIV# END END # FULL DUPLEX MODE # ELSE BEGIN # HALF DUPLEX MODE # IF LSTDIS[0] #CHECK INITIAL LIST STATE # THEN BEGIN HUPDDAW(P,P,0,-ACNBBLKSQ[0]); # UPDATE DEL# ACNBTLO[0] = TRUE; # FLAG,IF SET, SET TLO FLAG # END ELSE BEGIN IF ACNBTLO[0] THEN # CONNECTION IN TEMP LIST OFF CONDITIO# BEGIN ACNBTLO[0] = FALSE; # CLEAR TEMP LIST OFF FLAG # HUPDDAW(P,P,0,ACNBBLKSQ[0]); # UPDATE D# END END END # HALF DUPLEX MODE # END END END HLSTDXX: GOTO RJMAIN; END # HLSTDX # TERM