*DECK QTOPEN USETEXT AIPDEF USETEXT QTRMBUF USETEXT QTRMCOM USETEXT QTRMNIT PROC QTOPEN(NITADDRESS); *IF,DEF,IMS # *1DC QTOPEN * * 1. PROC NAME AUTHOR DATE * QTOPEN E. GEE 86/04/02 * * 2. FUNCTIONAL DESCRIPTION. * PROVIDES INITIALIZATION PROCESSING FOR QTRM. * MAIN PURPOSE IS TO CONNECT (I.E. NETON) TO NETWORK. * * 3. METHOD USER. * INIT RETURN CODE FIELD IN NIT TO QTOPEN FAILED RC. * IF APPLICATION ALREADY NETTED ON, * IF APPLICATION DOES NOT WANT TO BE ABORTED, * STORE REASON CODE IN SEC-RETURN CODE FIELD IN NIT. * ELSE (OKAY TO ABORT APP), * CALL NP$ERR TO ISSUE DAYFILE MSG AND ABORT APP. * ELSE (FIRST TIME CALL TO QTOPEN), * IF MAX NUMBER OF CONNECTIONS IS ZERO, * IF APPLICATION DOES NOT WANT TO BE ABORTED, * STORE REASON CODE IN SEC-RETURN CODE FIELD IN NIT. * ELSE (OKAY TO ABORT APP), * CALL NP$ERR TO ISSUE DAYFILE MSG AND ABORT APP. * ELSE (NONZERO VALUE FOR MAX NUM OF CONNECTIONS), * LOOP 100 TIMES OR UNTIL NETON STATUS IS NOT NAM NOT AVAIL. * CALL NETON ROUTINE TO CONNECT TO NAM. * SET UP FIELD IN NIT TO INTRODUCE DELAY. * IF NETON STATUS IS NONZERO, * IF APPLICATION DOES NOT WANT TO BE ABORTED, * STORE REASON CODE IN SEC-RETURN CODE FIELD IN NIT. * ELSE (OKAY TO ABORT APP), * ELSE (NETON REQUEST WAS SUCCESSFUL), * COMPLETE INITIALIZING NIT. * * 4. ENTRY CONDITIONS. * PARAMETER (NITADDRESS) STARTING ADDRESS OF NETWORK * INFORMATION TABLE. * * 5. EXIT CONDITIONS. * NIT$RC = 0 IF QTOPEN COMPLETED SUCCESSFULLY. * REST OF NIT IS ALSO INITIALIZED. * = NONZERO IF QTOPEN DID NOT COMPLETE * SUCCESSFULLY. NIT$S$RC * CONTAINS REASON IT FAILED. * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * AIPDEF AIP CONSTANTS DEFINITIONS * NP$CRT CONTROL DATA SYSTEMS COPYRIGHT * QTRMBUF QTRM BUFFER COMMON BLOCK * QTRMCOM QTRM COMMON VARIABLES * QTRMNIT QTRM NETWORK INFORMATION TABLE TEMPLATE * * 7. ROUTINES CALLED. * NP$ERR AIP ERROR DAYFILE ROUTINE. * NETFUNC AIP CHANGE PROCESSING ROUTINE. * NETON AIP NETWORK CONNECTION. * NETPUT AIP TRANMIT DOWNLINE MESSAGE. * * 8. DAYFILE MESSAGES. * NETWORK APPLICATION ABORTED, RC = 80. * QTOPEN: DUPLICATE QTOPEN. * * NETWORK APPLICATION ABORTED, RC = 81. * QTOPEN: NIT NUM-TERMS FIELD IS ZERO. * * NETWORK APPLICATION ABORTED, RC = 82. * QTOPEN: NETON REJECTED. * * NETWORK APPLICATION ABORTED, RC = 83. * QTOPEN: NETWORK NOT AVAILABLE. * * # *ENDIF # CONTROL DEFINITIONS. # CONTROL PRESET; CONTROL PACK; CONTROL DISJOINT; CONTROL INERT; CONTROL FASTLOOP; # XREFS / XDEFS # XREF PROC NP$ERR; # AIP ERROR DAYFILE ROUTINE # XREF PROC NETFUNC; # AIP CHANGE PROCESSING ROUTINE # XREF PROC NETON; # AIP CONNECT TO NETWORK # XREF PROC NETPUT; # STANDARD DEFS # *CALL NP$CRT # DUMMY ARRAY USED AS TEMPORARY # BASED ARRAY DUMMY[0:0]; BEGIN ITEM DUMMY$FLAG B(0,0,1); ITEM DUMMY$ITEM U(0,0,60); END # INPUT PARAMETERS # ARRAY NITADDRESS ;; #STARTING ADDRESS OF NIT # # QTRMCOM IS COMPILED INLINE TO PRESET COMMON. # # LOCAL VARIABLES # ITEM NETONCODE I; # RETURN STATUS FROM NETON # ITEM LENGTH I; #LENGTH OF TERMINAL ENTRY PORTION OF NIT # ITEM TEMP I; #FOR LOOP TEMPORARY VARIABLE # ITEM RETRY I; # FOR LOOP VARIABLE FOR RETRYING NETON. # ITEM COMMXCN U; # A COMBINATION OF 2 MAX CONNECTION LIMIT:# # . BIT 48-59: NIT$NO$TERMS # # . BIT 36-47: NIT$NUMRCNS # BEGIN P = LOC(NITADDRESS); # SET BASE OF NIT # NIT$ADDR = P; # SAVE NIT ADDRESS IN COMMON # NIT$RC[0] = S"NETONREJ"; # INIT RC TO QTOPEN REJECT # IF NETON$STATUS THEN # DUPLICATE QTOPEN CALL # BEGIN IF NOABTNETONA THEN # DO NOT ABORT APP FOR BAD CALL # BEGIN NIT$S$RC[0] = S"DUPQTOPEN"; # REASON FOR QTOPEN REJECT # END ELSE # ABORT APP FOR BAD QTOPEN CALL # BEGIN NP$ERR("80"); # DUPLICATE QTOPEN. # END END ELSE # FIRST TIME CALL TO QTOPEN # BEGIN IF NIT$NO$TERMS EQ 0 THEN # MAX NO OF CONNECTIONS IS ZERO # BEGIN IF NOABTNETONA THEN # DO NOT ABORT APP FOR BAD CALL # BEGIN NIT$S$RC[0] = S"ZEROCONS"; # REASON FOR QTOPEN REJECT # END ELSE # ABORT APP FOR BAD QTOPEN CALL # BEGIN NP$ERR("81"); # MAX NO OF CONNECTIONS IS ZERO # END END ELSE # GOOD VALUE FOR MAX NO OF CONS # BEGIN NETONCODE = 1; # INIT TO NAM NOT AVAILABLE # FOR RETRY = 0 STEP 1 WHILE (NETONCODE EQ 1) AND (RETRY LQ 100 ) DO BEGIN P = LOC(NIT$NSUP[0]); # LOCATION OF NSUP WORD. # COMMXCN = NIT$NUMRCNS[0]*4096 + NIT$NO$TERMS[0]; NETON(NIT$APP$NAME[0],DUMMY,NETONCODE,1,COMMXCN); # THE FOLLOWING INITIALIZATION STATEMENTS ARE INCLUDED IN THE FOR LOOP IN ORDER TO INCREASE THE AMOUNT OF TIME BETWEEN UNSUCESSFUL NETONS. # IF (NIT$CHAR$SET[0] LS CT60TRANS) OR ((NIT$CHAR$SET[0] GR CT12ASCII) AND (NIT$CHAR$SET[0] NQ 10) AND (NIT$CHAR$SET[0] NQ 11)) THEN # DEFAULT TO DISPLAY CODE # BEGIN NIT$CHAR$SET[0] = CT6DISPLAY; # DISPLAY CODE CHAR SET VAL# ICTX[0] = FALSE; # SET NO TRANSPARENT INPUT FLAG # ICTD[0] = CT6DISPLAY; # DISPLAY CODE CHAR SET VALUE # END ELSE # APP SPECIFIED OTHER CHAR SET # BEGIN IF NIT$XPTSET[0] NQ 0 THEN # TRANSPARENT INPUT ALLOWED # BEGIN ICTX[0] = TRUE; # SET TRANSPARENT INPUT ALLOWED # END ICTD[0] = NIT$PUTSET[0]; # INPUT CHARACTER SET # END NIT$S$RC[0] = 0; # ZERO SECONDARY RETURN CODE. # NIT$NXAP$NUM[0] = 0; # ZERO NEXT APPLICATION FIELD. # SUPDTW[0] = 1; # INIT DEVICE TYPE SUPPORT FLAG # # TO SUPPORT ONLY DEVICE TYPE 0 # IF NIT$SUPPAA EQ 1 THEN # IF APP SUPPORTS A-TO-A CON # BEGIN SUPTRAA[0] = TRUE; # SUPPORT INTRAHOST A-A CON FLAG# SUPTERA[0] = TRUE; # SUPPORT INTERHOST A-A CON FLAG# END P = LOC(NIT$WD0[1]); LENGTH = NIT$NO$TERMS[0] * 10 - 1; FOR TEMP = 0 STEP 1 UNTIL LENGTH DO BEGIN DUMMY$ITEM[TEMP] = 0; # ZERO FILL TERMINAL ENTRIES. # END END # END OF FOR LOOP. # IF NETONCODE NQ 0 THEN # NETON HAS FAILED # BEGIN NIT$SEC$RC[0] = NETONCODE; # REASON FOR NETON REJECT # IF NOT NOABTNETONA THEN # ABORT APP CAUSE NETON FAILED # BEGIN IF NETONCODE EQ 1 THEN # NAM WAS NOT AVAILABLE # BEGIN NP$ERR("83"); END ELSE # NAM REJECTED NETON # BEGIN NP$ERR("82"); END END END ELSE # NETON COMPLETED SUCCUSSFULLY # BEGIN # NETON OK. # NIT$RC[0] = 0; # ASSUME NETON ACCEPTED # AUTOBREAK = FALSE; # INIT AUTOMATIC BREAK PROC FLG # BREAKMARK = FALSE; # INIT NOTIFY ON BI/MARK FLAG # CONINIT = FALSE; # INIT NOTIFY ON CON/REQ FLAG # CONPOLL = FALSE; # INIT CONNECTION POLLING FLAG # INACTIVE = FALSE; # INIT NOTIFY ON CON IDLE FLAG # KDISAS = FALSE; # INIT K-DISPLAY ASSIGNED FLAG # KDISPLAY = FALSE; # INIT K-DISPLAY SUPPORT FLAG # REQAA = FALSE; # INIT CON/ACRQ OUTSTANDING FLG # NETON$STATUS = TRUE; # NETON COMPLETE. # PMCONV = 0; # INIT CONVERT PM MSG FLAG # PRUDTW[0] = 0; # INIT PRU/ON PROCESSING FLAG # USERINTR = FALSE; # INIT NOTIFY ON INTR/USR FLAG # IGNORE = FALSE; # INIT NOT SEND HOP/ALT FLAG # NETFUNC(1); # CHANGE AIP NETWAIT PROCESSING # P = LOC(NIT$WD0[0]);# ADDR OF NIT HEADER # DUMMY$ITEM[2] = 0; # CLEAR WORD 3 OF NIT HEADER # DUMMY$ITEM[3] = 0; # CLEAR WORD 4 OF NIT HEADER # DUMMY$ITEM[7] = 0; # CLEAR WORD 8 OF NIT HEADER # DUMMY$ITEM[8] = 0; # CLEAR WORD 9 OF NIT HEADER # IF SUPTERA[0] THEN # RESET SUPPORT A-A FLAG IN NIT # BEGIN NIT$SUPPAA[0] = 1; END NIT$XSLEEP[0] = 0; # INIT EXTENDED SLEEP FIELD TO 0# # INITIALIZE ASCII TO DISPLAY CODE CONVERSION TABLE # CONVW[ 0] = O"55555555555555555555"; # 00010203040506070809# CONVW[ 1] = O"55555555555555555555"; # 0A0B0C0D0E0F10111213# CONVW[ 2] = O"55555555555555555555"; # 1415161718191A1B1C1D# CONVW[ 3] = O"55555566646053636770"; # 1E1F2021222324252627# CONVW[ 4] = O"51524556564657503334"; # 28292A2B2C2D2E2F3031# CONVW[ 5] = O"35363740414243440077"; # 32333435363738393A3B# CONVW[ 6] = O"72547371740102030405"; # 3C3D3E3F404142434445# CONVW[ 7] = O"06071011121314151617"; # 464748494A4B4C4D4E4F# CONVW[ 8] = O"20212223242526273031"; # 50515253545556575859# CONVW[ 9] = O"32617562766574010203"; # 5A5B5C5D5E5F60616263# CONVW[10] = O"04050607101112131415"; # 6465666768696A6B6C6D# CONVW[11] = O"16172021222324252627"; # 6E6F7071727374757677# CONVW[12] = O"30313261756276555555"; # 78797A7B7C7D7E7F # P = O"67"; # WRD CONTAINING 63 CHAR SET FLG# IF NOT DUMMY$FLAG[0] THEN # 63 CHARACTER SET MACHINE # BEGIN CONVW[ 3] = O"55555566646053556770"; CONVW[ 5] = O"35363740414243446377"; END END END END RETURN; # QTOPEN COMPLETE. # END TERM