*DECK HALLOCN USETEXT ACB USETEXT ACNB USETEXT ACNT USETEXT DUMPFLG USETEXT KDIS USETEXT KHDRX USETEXT NIPDEF USETEXT PARAMS USETEXT APPSTAT PROC HALLOCN(ACBAD,ACN); # ALLOCATE CONNECTION NUMBER # STARTIMS; # *1DC HALLOCN * 1. PROC NAME AUTHOR DATE * HALLOCN C. BITTNER 81/12/01 * * 2. FUNCTIONAL DESCRIPTION * ALLOCATE APPLICATION CONNECTION NUMBER * * 3. METHOD * CHECK IF ACNT HAS A FREE ENTRY (IF NOT THEN EXPAND * ACNT) * FIND NEXT FIRST FREE CONNECTION NUMBER * UPDATE HIGHEST CONNECTION NUMBER IN USE * INITIALIZE STATES IN ACNT * UPDATE TOTAL NUMBER OF CONNECTIONS IN ACB * UPDATE K-DISPLAY BUFFER * * 4. ENTRY PARAMETERS * ACBAD ADDRESS OF ACB TO ALLOCATE ACN FOR * * 5. EXIT PARAMETERS * ACN APPLICATION CONNECTION NUMBER ASSIGNED * = 0 IF NO CONNECTION NUMBER ASSIGNED * * 6. COMDECKS CALLED AND SYMPL TEXTS USED * ACB * ACNB * ACNT * NIPDEF * PARAMS * APPSTAT * KDIS * * 7. ROUTINES AND OVERLAYS CALLED * KPUT - UPDATE K-DISPLAY BUFFER * MGROW - EXPAND BUFFER * XTRACE - RECORD PROCEDURE CALL * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION * THIS PROCEDURE IS CALLED BY PROC BLDACNB. * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC ABORT; # ABORT NIP # PROC KPUT ; PROC MGROW; # EXPAND BUFFER # PROC XTRACE; # RECORD PROCEDURE CALL # END # INTERNAL VARIABLES # ITEM ACBAD; # ACB ADDRESS # ITEM ACN; # APPLICATION CONNECTION NUMBER # ITEM ACNTINDX; # INDEX INTO ACNT # ITEM ESIZE; # SIZE TO EXPAND ACNT # ITEM FFCNFOUND B; # FIRST FREE CN FOUND FLAG # ITEM FLAG; # FLAG RETURNED IF MOVE SUCCESSFUL - MGROW# ITEM INDX; # INDUCTION LOOP VARIABLE # ITEM NUMACN; # NUMBER OF AVAILABLE CONNECTION NUMBERS # #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1; XTRACE("HLOCN") ; CONTROL FI; FFCNFOUND = FALSE; # INITIALIZE FIRST FREE CN FOUND FLAG # P = ACBAD; # ACB ADDRESS # P = ACBACNT[0]; # BASE ACNT # NUMACN = ACNTMAXCN[0] - (ACNTBS[0] - ACNTHSIZE); ACNTINDX = ACNTFFCN[0] + ACNTHSIZE - ACNTMINACN[0]; # ACNT INDX # IF ACNTNFE[0] EQ 0 THEN BEGIN # ACNT IS FULL # IF NUMACN LQ 0 THEN # MAXIMUM NO OF CONNECTIONS REACHED # BEGIN ACN = 0; # NO ACN ASSIGNED - REACHED MAX ALREADY # RETURN ; END IF NUMACN GQ ACNTESIZE THEN ESIZE = ACNTESIZE; ELSE # HAVE LESS THAN ACNTESIZE CONN LEFT # ESIZE = NUMACN; # MAX ADDITION TO ACNT TABLE # MGROW(P,ACNTBS[0] + ESIZE,FLAG); # EXTEND BUFFER # ACBACNT[0] = P; # SET NEW ACNT ADDRESS # ACNTFFCN[0] = ACNTFFCN[0] + 1; # UPDATE FIRST FREE CN # ACNTNFE[0] = ESIZE - 1; # UPDATE NO FREE ENTRIES # END ELSE BEGIN # ENTRIES AVAILABLE IN ACNT # IF ACNTNFE[0] EQ 1 THEN BEGIN # LAST AVAILABLE ENTRY IS BEING USED # ACNTFFCN[0] = ACNTBS[0] - ACNTHSIZE + ACNTMINACN[0]; FFCNFOUND = TRUE; # SET FIRST FREE CN FOUND FLAG # ACNTNFE[0] = 0; END # FIND FIRST FREE CN # FOR INDX = ACNTINDX + 1 STEP 1 WHILE NOT FFCNFOUND DO BEGIN IF ACNTWD[INDX] EQ 0 THEN BEGIN ACNTFFCN[0] = INDX - ACNTHSIZE + ACNTMINACN[0]; # UPDATE FIRST FREE CN # ACNTNFE[0] = ACNTNFE[0] - 1; # UPDATE NO FREE ENTRIES # FFCNFOUND = TRUE;# SET FIRST FREE CN FOUND FLAG # END END END ACN = ACNTINDX - ACNTHSIZE + ACNTMINACN[0]; # APPL CONN NO # IF ACN GR ACNTHCN[0] THEN # UPDATE HIGHEST CONNECTION NUMBER # ACNTHCN[0] = ACN; ACNTCS[ACNTINDX] = STATX; # INITIALIZE CONNECTION STATE # ACNTIS[ACNTINDX] = STATX; # INITIALIZE IVT STATE # ACNTABO[ACNTINDX] = 0; # APPL BLK OUTSTANDING COUNT # RETURN ; END TERM