MGFTP023.BP MGFTP023.BVBACKUP/INTERCHANGE/BLOCK=8192 MG_KIT:[MGFTP.NETLIB]*.*;* MG_KIT:[MGFTP]MGFTP023.B/SAVE GOATHUNTER ,Zc'V7.1 _GHUNT1:: _$1$DKA100: V6.2  '*[MGFTP.NETLIB]NETLIB022.RELEASE_NOTES;2+,./ 4A ?-@0123KPWO 56)(M7tc'89GHJ  NETLIB Release Notes November, 1997= This file contains the release notes for the NETLIB@ TCP/IP interface library. It describes any last-minute? features, restrictions, changes, or additions made to NETLIB.A Revision/Update Information: This is a revised manual.> Operating System and Version: VAX/VMS V5.2 or later;= OpenVMS Alpha V1.5 or- later3 Software Version: NETLIB V2.2 Matthew Madison MadGoat Software  " ________________________ 27 November 1997< DISCLAIMER: The author, the author's employer, and@ MadGoat Software make no representations or warranties> with respect to the contents hereof and specifically? disclaim any implied warranties of merchantability or- fitness for any particular purpose.@ AXP, DEC, ULTRIX, VAX, VMS, and OpenVMS are trademarks+ of Digital Equipment Corporation.? UNIX is a trademark of Unix System Laboratories, Inc.> MultiNet is a registered trademark of Cisco Systems, Inc.? TCPware is a registered trademark of Process Software Corporation.? PathWay is a registered trademark of Attachmate, Inc. __________@ Copyright 1997 MadGoat Software. All Rights Reserved.  A _______________________________________________________ ContentsA _______________________________________________________A CHAPTER 1 UPDATES IN NETLIB V2.2 1-1A _______________________________________________________A CHAPTER 2 KNOWN BUGS, RESTRICTIONS 2-1A iii  A _______________________________________________________ 1 Updates in NETLIB V2.2? NETLIB V2.2 is a minor update to V2.1B which includes the following changes:> o A new flag, NETLIB_M_FLUSH, has been added to theA NETLIB_READLINE routine, to provide a way of getting; at any data that may have been buffered by theA NETLIB_READLINE routine. Use this flag when you want? to use both NETLIB_READLINE and NETLIB_READ on theA same TCP input stream. For more information, see theA description of NETLIB_READLINE in the documentation.> o A new routine, NETLIB_VERSION, has been added, to? allow for dynamic retrieval of the current version8 of NETLIB you have installed on the system.= o The "relaxed" form of NETLIB_READLINE (using the@ NETLIB_M_ALLOW_LF flag) has been further relaxed to@ better handle lines terminated with bare linefeeds. Updates in V2.1B5 The following change was included in V2.1B:8 o A bug in the processing of status codes was; inadvertently introduced in the V2.1A changes,; affecting UCX systems only, that would lead to8 incorrect status reports and potentially to" application failures.A 1-1  Updates in NETLIB V2.2 Updates in V2.1A7 The following changes were included in V2.1A:: o NETLIB's DNS resolver code would not properly< initialize on systems running PathWay. This has been fixed.< o Some potential race conditions were eliminated.> o If NETLIB_CLOSE was called on a socket that had a= pending timed I/O, the completion I/O status was? mistakenly reported as SS$_TIMEOUT instead of SS$_> CANCEL. Only genuine timeouts are now reported as SS$_TIMEOUT. Updates in V2.19 NETLIB V2.1 included the following changes from previous releases:? o The TCPware library now uses UCX emulation instead= of SRI emulation. If you developed a server withA NETLIB that is started by TCPware's "master" server,= you should use NETCU to change the protocol type6 from STREAM or DGRAM to BG_TCP or BG_UDP.? o The NETLIB_STARTUP.COM procedure has been enhanced= to automatically install all available NETLIB_*_< SHR images, and to automatically define NETLIB_> SHR at startup time based on which TCP/IP package7 is running. The startup procedure now also8 automatically adds the NETLIB documentation? directory to the DECwindows Bookreader search list logical name.A o There was a bug in the V2.0 DNS resolver code in the? creation of the list of domains used for searching; the DNS, causing it to pad expanded names with( nulls. This has been fixed. 1-2  A _______________________________________________________" 2 Known Bugs, Restrictions? There are no known bugs in NETLIB. Known restrictions3 are documented in the programmer's guide.A 2-1#*[MGFTP.NETLIB]NETLIB_INSTALL.COM;63+, ./ 4[ -@0123KPWO56EãT'7yc'89GHJ$! [NETLIB]NETLIB_INSTALL.COM$!.$! KITINSTAL procedure for installing NETLIB.$!0$! 31-JAN-1991 V1.0 Madison Initial coding.M$! 05-FEB-1991 V1.0-1 Madison Two parts for integration into other kits.6$! 26-APR-1991 V1.0-2 Madison Nameserver changes.I$! 20-JUN-1991 V1.0-3 Madison Newer versions of some pkgs supported.L$! 03-DEC-1991 V1.0-4 Madison A bit of rearranging of the startup file.4$! 01-FEB-1992 V1.1 Volz Added TCPware support.2$! 17-FEB-1992 V1.1-1 Madis  MGFTP023.B @#[MGFTP.NETLIB]NETLIB_INSTALL.COM;63[on LINK/NOUSERLIB.+$! 08-OCT-1992 V1.2 Madison Alpha AXP.M$! 19-FEB-1993 V1.2-1 Madison Accommodate TCPware V3.0 filename changes.C$! 22-MAR-1993 V1.2-2 Madison TCPware now runs on AXP systems.L$! 26-MAR-1993 V1.2-3 Madison Eliminate IP0/IPA0 confusion for CMU-Tek.?$! 21-DEC-1993 V1.3 Madison First crack at WINTCP support.B$! 27-DEC-1993 V1.3-1 Madison Second crack at WINTCP support.K$! 27-JAN-1994 V1.3-2 Madison TCP0 device can exist with MultiNet too.H$! 21-SEP-1994 V1.4 Madison Moved AXP objects to separate save set.1$! 04-NOV-1994 V1.5 Madison Update for V2.0.:$! 03-JAN-1995 V1.5-1 Madison Update for OEM kitting.7$! 08-JAN-1996 V1.5-2 Madison Fix for OEM kitting.@$! 17-FEB-1997 V1.6 Madison Set NETLIB_SHR at startup time.C$! 27-NOV-1997 V1.7 Madison Version info in separate OPT file.$!)$ ON CONTROL_Y THEN GOTO NETLIB_CONTROL_Y"$ ON WARNING THEN GOTO NETLIB_FAIL$!$ GOTO NETLIB_INSTALL$!$NETLIB_CONTROL_Y:=$ IF F$TRNLNM ("NETLIB_STUP") .NES. "" THEN CLOSE NETLIB_STUP$ VMI$CALLBACK CONTROL_Y$! $NETLIB_FAIL:$ NETLIB_STATUS == $STATUS=$ IF F$TRNLNM ("NETLIB_STUP") .NES. "" THEN CLOSE NETLIB_STUP$ EXIT 'NETLIB_STATUS$!$NETLIB_INSTALL:$!$ IF P2 THEN SET VERIFY$!E$! An "OEM" install is one in which the NETLIB savesets are embeddedG$! in another kit. The NETLIB programming files and documentation are$! not included in an OEM kit.$!L$ NETLIB_OEM_INSTALL = F$TRNLNM("NETLIB_OEM_INSTALL","LNM$PROCESS") .NES. ""$ NETLIB_VAX_SAVESET = "B"$ NETLIB_AXP_SAVESET = "C"$ IF NETLIB_OEM_INSTALL$ THEN3$ NETLIB_TMP = F$TRNLNM("NETLIB_OEM_VAX_SAVESET")?$ IF NETLIB_TMP .NES. "" THEN NETLIB_VAX_SAVESET = NETLIB_TMP3$ NETLIB_TMP = F$TRNLNM("NETLIB_OEM_AXP_SAVESET")?$ IF NETLIB_TMP .NES. "" THEN NETLIB_AXP_SAVESET = NETLIB_TMP$ ENDIF$! $ NETLIB_SAY := WRITE SYS$OUTPUT$ LINK := LINK/NOUSERLIBRARY$ NETLIB_DEBUG = ""G$ IF F$TRNLNM("NETLIB_LINK_DEBUG") .NES. "" THEN NETLIB_DEBUG := /DEBUG$!-$ NETLIB_INSTALL_NODE = F$GETSYI ("NODENAME")$!$!%$! Build the tables for menu choices.$!$ IF NETLIB_VAX$ THEN$ NETLIB_TCP_NAMES = "?" +- ":CMU TCP/IP"+-! ":Digital TCP/IP Services"+-# ":Process Software MultiNet"+-" ":Process Software TCPware"+- ":Attachmate PathWay"-$ NETLIB_TCPS = "?:NETLIB_CMU:NETLIB_UCX"+-> ":NETLIB_MULTINET:NETLIB_TCPWARE:NETLIB_PATHWAY"$ OPT = ".OPT"$ L32 = ".L32"$ ELSE$ NETLIB_TCP_NAMES = "?" +-! ":Digital TCP/IP Services"+-# ":Process Software MultiNet"+-" ":Process Software TCPware"+- ":Attachmate PathWay"N$ NETLIB_TCPS = "?:NETLIB_UCX:NETLIB_MULTINET:NETLIB_TCPWARE:NETLIB_PATHWAY"$ NETLIB_CMU = ""$ OPT = ".ALPHA_OPT"$ L32 = ".L32E"$ ENDIF$ NETLIB_I = 0$NETLIB_INIT_LOOP:$ NETLIB_I = NETLIB_I + 13$ NETLIB_TCP = F$ELEMENT (NETLIB_I,":",NETLIB_TCPS)8$ IF NETLIB_TCP .EQS. ":" THEN GOTO NETLIB_END_INIT_LOOP$ 'NETLIB_TCP = " "$ GOTO NETLIB_INIT_LOOP$!@$! Now we make some educated guesses about which TCP/IP's should$! be pre-selected.$!$NETLIB_END_INIT_LOOP:$!$ IF F$GETDVI ("IP0","EXISTS")$ THEN$!-$! Don't confuse with TCPware's IPA0: device$!.$ IF F$GETDVI ("IP0","DEVNAM") .EQS. "_IP0:"$ THEN)$ IF F$TRNLNM ("CMUTEK_ROOT") .NES. "" $ THEN$ NETLIB_CMU = "*" $ ENDIF $ ENDIF$ ENDIF-$ IF F$GETDVI ("UCX$DEVICE","EXISTS") .AND. -5 F$SEARCH ("SYS$SYSTEM:UCX$INETACP.EXE") .NES. ""$ THEN<$ IF F$SEARCH ("SYS$SYSTEM:UCX$INET_ROUTING.EXE") .NES. ""$ THEN$ NETLIB_UCX = "*" $ ENDIF$ ENDIF $ IF F$GETDVI ("INET0","EXISTS")$ THEN6$ IF F$TRNLNM("TCPWARE_SOCKLIB_SHR") .NES. "" .OR. -) F$TRNLNM("TCPIP_SOCKLIB") .NES. ""$ THEN$ NETLIB_TCPWARE = "*"$ ELSEM$ IF F$TRNLNM("TWG$TCP") .NES. "" .AND. F$TRNLNM("MULTINET_ROOT") .EQS. "" $ THEN$ NETLIB_PATHWAY = "*" $ ELSE$ NETLIB_MULTINET = "*" $ ENDIF $ ENDIF$ ENDIF$!$NETLIB_SELECT_MENU:$!$ TYPE SYS$INPUT:/ TCP/IP Support SelectionA Select the NETLIB TCP/IP support you wish to install from theC menu below. An asterisk appears next to the packages that haveB already been selected. You can remove a package from the listA by selecting it again. You may enter more than one selection+ by separating your choices with commas.$ NETLIB_M = 0$NETLIB_SEL_LOOP:$ NETLIB_M = NETLIB_M + 16$ NETLIB_N = F$ELEMENT (NETLIB_M,":",NETLIB_TCP_NAMES)3$ IF NETLIB_N .EQS. ":" THEN GOTO NETLIB_SELECT_ASK1$ NETLIB_T = F$ELEMENT (NETLIB_M,":",NETLIB_TCPS)I$ NETLIB_SAY F$FAO (" !2UL. [!AS] !AS", NETLIB_M, 'NETLIB_T, NETLIB_N)$ GOTO NETLIB_SEL_LOOP$NETLIB_SELECT_ASK:$ NETLIB_SAY ""3$ NETLIB_SAY F$FAO (" !2UL. Exit", NETLIB_M)$ NETLIB_SAY ""$ NETLIB_SAY ""$!*$ VMI$CALLBACK ASK NETLIB_CHOICE_INPUT -& " Your choice" "''NETLIB_M'"$ NETLIB_I = -1$NETLIB_PARSE_LOOP:$ NETLIB_I = NETLIB_I + 1@$ NETLIB_CHOICE = F$ELEMENT (NETLIB_I, ",", NETLIB_CHOICE_INPUT)9$ IF NETLIB_CHOICE .EQS. "," THEN GOTO NETLIB_SELECT_MENU+$ NETLIB_CHOICE = F$INTEGER (NETLIB_CHOICE)9$ IF NETLIB_CHOICE .EQ. NETLIB_M THEN GOTO NETLIB_CONFIRM:$ IF NETLIB_CHOICE .LT. 1 .OR. NETLIB_CHOICE .GT. NETLIB_M$ THEN&$ VMI$CALLBACK MESSAGE E BADCHOICE -L "Choice ''NETLIB_CHOICE' invalid; choices range from 1 to ''NETLIB_M'."$ ELSE:$ NETLIB_T = F$ELEMENT (NETLIB_CHOICE, ":", NETLIB_TCPS)$ IF 'NETLIB_T .EQS. "*"$ THEN$ 'NETLIB_T = " "$ ELSE$ 'NETLIB_T = "*" $ ENDIF$ ENDIF$ GOTO NETLIB_PARSE_LOOP$!$NETLIB_CONFIRM:$ NETLIB_SAY ""B$ NETLIB_SAY " You have selected the following TCP/IP support:"$ NETLIB_SAY ""$ NETLIB_CNT = 0$ NETLIB_M = 0$NETLIB_CONF_LOOP:$ NETLIB_M = NETLIB_M + 16$ NETLIB_N = F$ELEMENT (NETLIB_M,":",NETLIB_TCP_NAMES)1$ IF NETLIB_N .EQS. ":" THEN GOTO NETLIB_CONF_ASK1$ NETLIB_T = F$ELEMENT (NETLIB_M,":",NETLIB_TCPS)$ IF 'NETLIB_T .EQS. "*"$ THEN"$ NETLIB_SAY " ",NETLIB_N$ NETLIB_CNT = NETLIB_CNT + 1$ ENDIF$ GOTO NETLIB_CONF_LOOP$!$NETLIB_CONF_ASK:7$ IF NETLIB_CNT .EQ. 0 THEN NETLIB_SAY " (None)"$ NETLIB_SAY ""$ NETLIB_SAY ""6$ VMI$CALLBACK ASK NETLIB_OK "Is this correct" "YES" B1$ IF .NOT. NETLIB_OK THEN GOTO NETLIB_SELECT_MENU$!$ IF NETLIB_CNT .EQ. 0$ THEN>$ VMI$CALLBACK MESSAGE I WONTINSTALL "No packages selected."$ EXIT VMI$_SUCCESS$ ENDIF$!$NETLIB_DIR_ASK:$!$!$ TYPE SYS$INPUT:2 Choosing the NETLIB Directory@ The NETLIB libraries can be placed in any directory, as long@ as that directory is accessible to all users who plan to use) or develop NETLIB-based applications.&$ NETLIB_DEFANS := SYS$COMMON:[SYSLIB],$ IF F$TRNLNM ("NETLIB_DIR") .NES. "" THEN -+ NETLIB_DEFANS = F$TRNLNM ("NETLIB_DIR")$ VMI$CALLBACK ASK NETLIB_DIR -D "Where should the NETLIB libraries be placed" "''NETLIB_DEFANS'"1$ NETLIB_DIR = F$PARSE (NETLIB_DIR,,,"DEVICE") +-' F$PARSE (NETLIB_DIR,,,"DIRECTORY")2$ IF F$SEARCH ("''NETLIB_DIR'X.X") .EQS. "" THEN -4 VMI$CALLBACK CREATE_DIRECTORY USER 'NETLIB_DIR -3 "/OWNER=[1,4]/PROTECT=(S:RWE,O:RWE,G:RE,W:RE)"$!B$! Skip the support & docs questions if this is an "OEM" install.$!$ IF NETLIB_OEM_INSTALL$ THEN$ NETLIB_DO_PRG = 0$ NETLIB_DO_DOC = 0$ GOTO BEGIN_INSTALLING_FILES$ ENDIF$!$ TYPE SYS$INPUT:9 NETLIB Prog  MGFTP023.B @#[MGFTP.NETLIB]NETLIB_INSTALL.COM;63[Bramming Support and Documentation1 The NETLIB programming support files include:6 - include files for programming in C and BLISS9 - sample C source code client and server programsE Installation of these files is optional, unless you or your usersI intend to develop NETLIB-based applications. If you elect to install= these files, they will be placed in the NETLIB directory.> The documentation set includes a Programmer's Guide and anI Installation Guide, in Bookreader, PostScript, and plain ASCII forms.C If you elect to install the documentation, you will be prompted@ for a directory into which the files will be placed; if that9 directory does not exist, it will be created for you.$!"$ VMI$CALLBACK ASK NETLIB_DO_PRG -E "Would you like to install the NETLIB programming files" "YES" B$!"$ VMI$CALLBACK ASK NETLIB_DO_DOC -A "Would you like to install the NETLIB documentation" "YES" B$!9$ IF .NOT. NETLIB_DO_DOC THEN GOTO BEGIN_INSTALLING_FILES$!$ NETLIB_DEFANS = NETLIB_DIRQ$ VMI$CALLBACK ASK NETLIB_DOC_DIR "Location for documentation" "''NETLIB_DEFANS'"8$ NETLIB_DOC_DIR = F$PARSE(NETLIB_DOC_DIR,,,"DEVICE") +-4 F$PARSE(NETLIB_DOC_DIR,,,"DIRECTORY")5$ IF F$SEARCH("''NETLIB_DOC_DIR'X.X") .EQS. "" THEN -9 VMI$CALLBACK CREATE_DIRECTORY USER 'NETLIB_DOC_DIR -7 "/OWNER=[1,4]/PROTECT=(S:RWE,O:RWE,G:RE,W:RE)"$!$BEGIN_INSTALLING_FILES:$!3$ IF NETLIB_OEM_INSTALL THEN GOTO SKIP_TIME_MESSAGE$ TYPE SYS$INPUT:B All installation questions have been asked. Installation willG continue for the next 5-15 minutes, depending on installation media type and options selected.$!E$ IF NETLIB_VAX THEN VMI$CALLBACK RESTORE_SAVESET 'NETLIB_VAX_SAVESETE$ IF NETLIB_AXP THEN VMI$CALLBACK RESTORE_SAVESET 'NETLIB_AXP_SAVESET$!$SKIP_TIME_MESSAGE:$! A$ VMI$CALLBACK MESSAGE I LINKING "Linking image NETLIB_SHRXFR..."$ DEFINE/USER BIN_DIR VMI$KWD:;$ LINK'NETLIB_DEBUG'/SHARE/EXEC=VMI$KWD:NETLIB_SHRXFR.EXE -[ VMI$KWD:NETLIB_SHRXFR.OBJ,VMI$KWD:NETLIB_SHRXFR'OPT'/OPT,VMI$KWD:NETLIB_VERSION.OPT/OPT/$ SET PROTECTION=W:RE VMI$KWD:NETLIB_SHRXFR.EXEH$ VMI$CALLBACK PROVIDE_IMAGE NETLIB_IMGOK NETLIB_SHRXFR.EXE 'NETLIB_DIR'$!$ NETLIB_I = 0$NETLIB_INST_LOOP:$ NETLIB_I = NETLIB_I + 11$ NETLIB_T = F$ELEMENT (NETLIB_I,":",NETLIB_TCPS)7$ IF NETLIB_T .EQS. ":" THEN GOTO NETLIB_FINISH_INSTALL$ IF 'NETLIB_T .EQS. "*"$ THENE$ VMI$CALLBACK MESSAGE I LINKING "Linking image ''NETLIB_T'_SHR..." $ DEFINE/USER BIN_DIR VMI$KWD:7$ LINK'DEBUG'/SHARE/EXEC=VMI$KWD:'NETLIB_T'_SHR.EXE -= VMI$KWD:NETLIB_VERSION.OPT/OPT,VMI$KWD:NETLIB'OPT'/OPT,- VMI$KWD:'NETLIB_T'.OLB/LIB2$ SET PROTECTION=W:RE VMI$KWD:'NETLIB_T'_SHR.EXEK$ VMI$CALLBACK PROVIDE_IMAGE NETLIB_IMGOK 'NETLIB_T'_SHR.EXE 'NETLIB_DIR'$ ENDIF$ GOTO NETLIB_INST_LOOP$!$NETLIB_FINISH_INSTALL:$!#$ CREATE VMI$KWD:NETLIB_STARTUP.COM4$ OPEN/APPEND NETLIB_STUP VMI$KWD:NETLIB_STARTUP.COM($ WRITE NETLIB_STUP "$ V = 'F$VERIFY(0)"7$ WRITE NETLIB_STUP "$! SYS$STARTUP:NETLIB_STARTUP.COM"O$ WRITE NETLIB_STUP "$! Startup command procedure for NETLIB library routines."$ WRITE NETLIB_STUP "$!""$ WRITE NETLIB_STUP "$ SET := SET";$ WRITE NETLIB_STUP "$ SET SYMBOL/SCOPE=(NOLOCAL,NOGLOBAL)"I$ WRITE NETLIB_STUP "$ DEFINE/SYSTEM/EXEC/NOLOG NETLIB_DIR ''NETLIB_DIR'"$ IF NETLIB_DO_DOC$ THENS$ WRITE NETLIB_STUP "$ DEFINE/SYSTEM/EXEC/NOLOG NETLIB_DOC_DIR ''NETLIB_DOC_DIR'"$ ENDIF$ CLOSE NETLIB_STUPG$ APPEND VMI$KWD:NETLIB_STARTUP_TEMPLATE.COM VMI$KWD:NETLIB_STARTUP.COMU$ VMI$CALLBACK PROVIDE_FILE NETLIB_STUPFILE NETLIB_STARTUP.COM VMI$ROOT:[SYS$STARTUP]$!$!I$ IF NETLIB_DO_PRG .OR. NETLIB_DO_DOC THEN VMI$CALLBACK RESTORE_SAVESET D$ IF NETLIB_DO_PRG$ THENP$ VMI$CALLBACK MESSAGE I INSTALLPRG "Installing NETLIB programming support..."+$ SET PROTECTION=W:RE VMI$KWD:NETLIBDEF.*'$ SET PROTECTION=W:RE VMI$KWD:ECHO*.*?$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIBDEF.H 'NETLIB_DIRA$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIBDEF.R32 'NETLIB_DIRB$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIBDEF'L32' 'NETLIB_DIR@$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK ECHOCLIENT.C 'NETLIB_DIR@$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK ECHOSERVER.C 'NETLIB_DIRK$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK ECHOSERVER_STANDALONE.C 'NETLIB_DIR$ ENDIF$!$!$ IF NETLIB_DO_DOC$ THENJ$ VMI$CALLBACK MESSAGE I INSTALLDOC "Installing NETLIB documentation...",$ SET PROTECTION=W:RE VMI$KWD:NETLIB_DOC.*L$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIB_DOC.DECW$BOOK 'NETLIB_DOC_DIRE$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIB_DOC.PS 'NETLIB_DOC_DIRF$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIB_DOC.TXT 'NETLIB_DOC_DIR-$ SET PROTECTION=W:RE VMI$KWD:NETLIB_INST.*M$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIB_INST.DECW$BOOK 'NETLIB_DOC_DIRF$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIB_INST.PS 'NETLIB_DOC_DIRG$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIB_INST.TXT 'NETLIB_DOC_DIR0$ SET PROTECTION=W:RE VMI$KWD:*.DECW$BOOKSHELFN$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK LIBRARY.DECW$BOOKSHELF 'NETLIB_DOC_DIRM$ VMI$CALLBACK PROVIDE_FILE NETLIB_OK NETLIB.DECW$BOOKSHELF 'NETLIB_DOC_DIR$ ENDIF$!$ IF NETLIB_CMU .EQS. "*"$ THEN0$ IF F$INTEGER (F$GETSYI ("MAXBUF")) .LT. 2300$ THEN$ TYPE SYS$INPUT: -- WARNING --D NETLIB support for CMU TCP/IP requires that the SYSGEN parameter# MAXBUF be set to at least 2300.G$ NETLIB_SAY " MAXBUF is currently set to: ", F$GETSYI ("MAXBUF")$ TYPE SYS$INPUT:F Please remember to change the value of MAXBUF before attempting to3 use a NETLIB-based application over CMU TCP/IP. $ ENDIF$ ENDIF$!$ NETLIB_STATUS == VMI$_SUCCESS$!$ EXIT 'NETLIB_STATUS+*[MGFTP.NETLIB]NETLIB_STARTUP_TEMPLATE.COM;7+,./ 4bR-@0123KPWO56;n7Lc'89GHJ$!.$ IF F$TRNLNM("NETLIB_SHRXFR") .NES. "" THEN -Z IF F$FILE_ATTRIBUTES ("NETLIB_SHRXFR:.EXE", "KNOWN") THEN INSTALL REMOVE NETLIB_SHRXFR+$ IF F$TRNLNM("NETLIB_SHR") .NES. "" THEN -T IF F$FILE_ATTRIBUTES ("NETLIB_SHR:.EXE", "KNOWN") THEN INSTALL REMOVE NETLIB_SHRA$ DEFINE/SYSTEM/EXEC/NOLOG NETLIB_SHRXFR NETLIB_DIR:NETLIB_SHRXFR$$ CALL Do_Install NETLIB_SHRXFR:.EXE$Install_Loop:7$ image = F$SEARCH("NETLIB_DIR:NETLIB_*_SHR.EXE;", 407).$ IF image .EQS. "" THEN GOTO Install_Loop_End$ CALL Do_Install 'image'$ GOTO Install_Loop$Install_Loop_End:$ GOSUB Set_NETLIB_SHR?$ IF F$TRNLNM("NETLIB_DOC_DIR") .NES. "" THEN GOSUB Install_Doc$ EXIT 1+0*F$VERIFY(V)$Set_NETLIB_SHR:$ package = ""$ IF F$GETDVI ("IP0","EXISTS")$ THEN$!-$! Don't confuse with TCPware's IPA0: device$!.$ IF F$GETDVI ("IP0","DEVNAM") .EQS. "_IP0:"$ THEN)$ IF F$TRNLNM ("CMUTEK_ROOT") .NES. "" $ THEN$ package = "CMU" $ ENDIF $ ENDIF$ ENDIF-$ IF F$GETDVI ("UCX$DEVICE","E  MGFTP023.B@+[MGFTP.NETLIB]NETLIB_STARTUP_TEMPLATE.COM;7b$ XISTS") .AND. -5 F$SEARCH ("SYS$SYSTEM:UCX$INETACP.EXE") .NES. ""$ THEN<$ IF F$SEARCH ("SYS$SYSTEM:UCX$INET_ROUTING.EXE") .NES. ""$ THEN$ package = "UCX" $ ENDIF$ ENDIF $ IF F$GETDVI ("INET0","EXISTS")$ THEN6$ IF F$TRNLNM("TCPWARE_SOCKLIB_SHR") .NES. "" .OR. -) F$TRNLNM("TCPIP_SOCKLIB") .NES. ""$ THEN$ package = "TCPWARE"$ ELSEM$ IF F$TRNLNM("TWG$TCP") .NES. "" .AND. F$TRNLNM("MULTINET_ROOT") .EQS. "" $ THEN$ package = "PATHWAY" $ ELSE$ package = "MULTINET" $ ENDIF $ ENDIF$ ENDIF$ IF package .EQS. ""$ THEN^$ WRITE SYS$OUTPUT "%NETLIB-E-NOPACKAGE, NETLIB startup could not identify a TCP/IP package" $ RETURN$ ENDIF>$ IF F$SEARCH("NETLIB_DIR:NETLIB_''package'_SHR.EXE") .EQS. ""$ THEN_$ WRITE SYS$OUTPUT "%NETLIB-E-NOSHR, could not find NETLIB_''package'_SHR library to install" $ RETURN$ ENDIFU$ IF .NOT. F$FILE_ATTRIBUTES ("NETLIB_DIR:NETLIB_''package'_SHR.EXE", "KNOWN") THEN -b WRITE SYS$OUTPUT "%NETLIB-I-NOTINST, shareable library NETLIB_''package'_SHR is not INSTALLed"E$ DEFINE/SYSTEM/EXEC/NOLOG NETLIB_SHR NETLIB_DIR:NETLIB_'package'_SHR$ RETURN$! $Install_Doc:5$ IF F$TRNLNM("DECW$BOOKSHELF","LNM$SYSTEM") .NES. ""$ THENP$ CALL Add_To_Searchlist DECW$BOOKSHELF NETLIB_DOC_DIR:LIBRARY.DECW$BOOKSHELF;$ ELSE4$ CALL Add_To_Searchlist DECW$BOOK NETLIB_DOC_DIR:G$ CALL Add_To_Searchlist DECW$BOOK NETLIB_DOC_DIR: DECW$LOGICAL_NAMES$ ENDIF$!$Do_Install: SUBROUTINE$ cmd = "CREATE"%$ p1 = p1 - F$PARSE (p1,,, "VERSION")8$ IF F$FILE_ATTRIBUTES(p1, "KNOWN") THEN cmd = "REPLACE"'$ INSTALL 'cmd' /OPEN/SHARE/HEADER 'p1'$ ENDSUBROUTINE$!@$Add_To_Searchlist: SUBROUTINE ! P1=lognam P2=value [P3=table],$ IF "''P3'" .EQS. "" THEN P3 = "LNM$SYSTEM"($ IF F$TRNLNM (P1,P3) .EQS. "" THEN EXIT$ ACMODE = "EXECUTIVE"F$ IF F$TRNLNM (P1,P3,,"EXECUTIVE") .EQS. "" THEN ACMODE = "SUPERVISOR"0$ maxidx = F$TRNLNM (P1,P3,,ACMODE,,"MAX_INDEX")$ i = -1$ bookdef = ""$loop: $ i = i + 1"$ book = F$TRNLNM (P1,P3,i,ACMODE)$ IF book .EQS. P2 THEN EXIT $ bookdef = bookdef + "," + book!$ IF i .LT. maxidx THEN GOTO loop$$ bookdef = bookdef - "," + "," + P2/$ DEFINE/NOLOG/TABLE='P3'/'ACMODE' 'P1 'bookdef$ EXIT$ ENDSUBROUTINE$!<$! COPYRIGHT 1997, MADGOAT SOFTWARE. ALL RIGHTS RESERVED.$!(*[MGFTP.NETLIB]NETLIB_USER_INSTALL.COM;25+,.$/ 4T$-@0123KPWO56T+6p7Tc'8~v9GHJ"$! [NETLIB]NETLIB_USER_INSTALL.COM$!1$! Procedure for private installation of NETLIB. $! To use:$!0$! $ CREATE/DIRECTORY [some working directory]&$! $ SET DEFAULT [working directory]9$! $ BACKUP NETLIBvvu.A/SAVE [] ! to get common files4$! $ BACKUP NETLIBvvu.B/SAVE [] ! on VAX systems7$! -or- $ BACKUP NETLIBvvu.C/SAVE [] ! on AXP systems$! $ @NETLIB_USER_INSTALL$!0$! 08-FEB-1991 V1.0 Madison Initial coding.4$! 01-FEB-1992 V1.1 Volz Added TCPware support.>$! 19-FEB-1993 V1.2 Madison AXP support, TCPware updates.C$! 22-MAR-1993 V1.2-1 Madison TCPware now runs on AXP systems.L$! 26-MAR-1993 V1.2-2 Madison Eliminate IP0/IPA0 confusion for CMU-Tek.6$! 13-JAN-1994 V1.2-3 Madison Update for WIN/TCP.1$! 21-SEP-1994 V1.3 Madison Update for V1.7.1$! 05-NOV-1994 V1.4 Madison Update for V2.0.$!)$ ON CONTROL_Y THEN GOTO NETLIB_CONTROL_Y"$ ON WARNING THEN GOTO NETLIB_FAIL$! $ NETLIB_SAY := WRITE SYS$OUTPUT$ LINK := LINK/NOUSERLIBRARY#$ IF F$GETSYI("HW_MODEL") .LT. 1024$ THEN$ NETLIB_VAX = 1$ NETLIB_AXP = 0$ ELSE$ NETLIB_VAX = 0$ NETLIB_AXP = 1$ ENDIF$ DEFINE VMI$KWD SYS$DISK:[]$!$ TYPE SYS$INPUT:7 NETLIB User Installation ProcedureF Copyright 1992-1994, MadGoat Software. All Rights Reserved.@ Redistribution for no commercial gain is permitted.$!$ GOTO NETLIB_INSTALL$!$NETLIB_CONTROL_Y:=$ IF F$TRNLNM ("NETLIB_STUP") .NES. "" THEN CLOSE NETLIB_STUP0$ NETLIB_SAY "Installation cancelled by CTRL/Y."$ EXIT 1$! $NETLIB_FAIL:$ NETLIB_STATUS == $STATUS=$ IF F$TRNLNM ("NETLIB_STUP") .NES. "" THEN CLOSE NETLIB_STUP$ EXIT 'NETLIB_STATUS$!$NETLIB_INSTALL:$!-$ NETLIB_INSTALL_NODE = F$GETSYI ("NODENAME")$!%$! Build the tables for menu choices.$!$ IF NETLIB_VAX$ THEN$ NETLIB_TCP_NAMES = "?" +- ":CMU TCP/IP"+- ":DEC TCP/IP Services"+- ":TGV MultiNet"+- ":PSC TCPware"+- ":TWG PathWay"-$ NETLIB_TCPS = "?:NETLIB_CMU:NETLIB_UCX"+-> ":NETLIB_MULTINET:NETLIB_TCPWARE:NETLIB_PATHWAY"$ OPT = ".OPT"$ ELSE$ NETLIB_TCP_NAMES = "?" +- ":DEC TCP/IP Services"+- ":TGV MultiNet"+- ":PSC TCPware"+- ":TWG PathWay"N$ NETLIB_TCPS = "?:NETLIB_UCX:NETLIB_MULTINET:NETLIB_TCPWARE:NETLIB_PATHWAY"$ NETLIB_CMU = ""$ OPT = ".ALPHA_OPT"$ L32 = ".L32E"$ ENDIF$ NETLIB_I = 0$NETLIB_INIT_LOOP:$ NETLIB_I = NETLIB_I + 13$ NETLIB_TCP = F$ELEMENT (NETLIB_I,":",NETLIB_TCPS)8$ IF NETLIB_TCP .EQS. ":" THEN GOTO NETLIB_END_INIT_LOOP$ 'NETLIB_TCP = " "$ GOTO NETLIB_INIT_LOOP$!@$! Now we make some educated guesses about which TCP/IP's should$! be pre-selected.$!$NETLIB_END_INIT_LOOP:$!$ IF F$GETDVI ("IP0","EXISTS")$ THEN$!-$! Don't confuse with TCPware's IPA0: device$!.$ IF F$GETDVI ("IP0","DEVNAM") .EQS. "_IP0:"$ THEN)$ IF F$TRNLNM ("CMUTEK_ROOT") .NES. "" $ THEN$ NETLIB_CMU = "*" $ ENDIF $ ENDIF$ ENDIF-$ IF F$GETDVI ("UCX$DEVICE","EXISTS") .AND. -5 F$SEARCH ("SYS$SYSTEM:UCX$INETACP.EXE") .NES. ""$ THEN<$ IF F$SEARCH ("SYS$SYSTEM:UCX$INET_ROUTING.EXE") .NES. ""$ THEN$ NETLIB_UCX = "*" $ ENDIF$ ENDIF $ IF F$GETDVI ("INET0","EXISTS")$ THEN6$ IF F$TRNLNM("TCPWARE_SOCKLIB_SHR") .NES. "" .OR. -) F$TRNLNM("TCPIP_SOCKLIB") .NES. ""$ THEN$ NETLIB_TCPWARE = "*"$ ELSEM$ IF F$TRNLNM("TWG$TCP") .NES. "" .AND. F$TRNLNM("MULTINET_ROOT") .EQS. "" $ THEN$ NETLIB_PATHWAY = "*" $ ELSE$ NETLIB_MULTINET = "*" $ ENDIF $ ENDIF$ ENDIF$!$NETLIB_SELECT_MENU:$!$ TYPE SYS$INPUT:/ TCP/IP Support SelectionA Select the NETLIB TCP/IP support you wish to install from theC menu below. An asterisk appears next to the packages that haveB already been selected. You can remove a package from the listA by selecting it again. You may enter more than one selection+ by separating your choices with commas.$ NETLIB_M = 0$NETLIB_SEL_LOOP:$ NETLIB_M = NETLIB_M + 16$ NETLIB_N = F$ELEMENT (NETLIB_M,":",NETLIB_TCP_NAMES)3$ IF NETLIB_N .EQS. ":" THEN GOTO NETLIB_SELECT_ASK1$ NETLIB_T = F$ELEMENT (NETLIB_M,":",NETLIB_TCPS)I$ NETLIB_SAY F$FAO (" !2UL. [!AS] !AS", NETLIB_M, 'NETLIB_T, NETLIB_N)$ GOTO NETLIB_SEL_LOOP$NETLIB_SELECT_ASK:$ NETLIB_SAY ""3$ NETLIB_SAY F$FAO (" !2UL. Exit", NETLIB_M)$ NETLIB_SAY ""$ NETLIB_SAY ""$!'  MGFTP023.B@([MGFTP.NETLIB]NETLIB_USER_INSTALL.COM;25T$0. $ CALL NETLIB_ASK NETLIB_CHOICE_INPUT -& " Your choice" "''NETLIB_M'"$ NETLIB_I = -1$NETLIB_PARSE_LOOP:$ NETLIB_I = NETLIB_I + 1@$ NETLIB_CHOICE = F$ELEMENT (NETLIB_I, ",", NETLIB_CHOICE_INPUT)9$ IF NETLIB_CHOICE .EQS. "," THEN GOTO NETLIB_SELECT_MENU+$ NETLIB_CHOICE = F$INTEGER (NETLIB_CHOICE)9$ IF NETLIB_CHOICE .EQ. NETLIB_M THEN GOTO NETLIB_CONFIRM:$ IF NETLIB_CHOICE .LT. 1 .OR. NETLIB_CHOICE .GT. NETLIB_M$ THEN'$ NETLIB_SAY "%NETLIB-E-BADCHOICE, ",L "Choice ''NETLIB_CHOICE' invalid; choices range from 1 to ''NETLIB_M'."$ ELSE:$ NETLIB_T = F$ELEMENT (NETLIB_CHOICE, ":", NETLIB_TCPS)$ IF 'NETLIB_T .EQS. "*"$ THEN$ 'NETLIB_T = " "$ ELSE$ 'NETLIB_T = "*" $ ENDIF$ ENDIF$ GOTO NETLIB_PARSE_LOOP$!$NETLIB_CONFIRM:$ NETLIB_SAY ""B$ NETLIB_SAY " You have selected the following TCP/IP support:"$ NETLIB_SAY ""$ NETLIB_CNT = 0$ NETLIB_M = 0$NETLIB_CONF_LOOP:$ NETLIB_M = NETLIB_M + 16$ NETLIB_N = F$ELEMENT (NETLIB_M,":",NETLIB_TCP_NAMES)1$ IF NETLIB_N .EQS. ":" THEN GOTO NETLIB_CONF_ASK1$ NETLIB_T = F$ELEMENT (NETLIB_M,":",NETLIB_TCPS)$ IF 'NETLIB_T .EQS. "*"$ THEN$ NETLIB_PRI = NETLIB_M"$ NETLIB_SAY " ",NETLIB_N$ NETLIB_CNT = NETLIB_CNT + 1$ ENDIF$ GOTO NETLIB_CONF_LOOP$!$NETLIB_CONF_ASK:7$ IF NETLIB_CNT .EQ. 0 THEN NETLIB_SAY " (None)"$ NETLIB_SAY ""$ NETLIB_SAY ""5$ CALL NETLIB_ASK NETLIB_OK "Is this correct" "YES" B1$ IF .NOT. NETLIB_OK THEN GOTO NETLIB_SELECT_MENU$!$ IF NETLIB_CNT .EQ. 0$ THEN=$ NETLIB_SAY "%NETLIB-I-WONTINSTALL, No packages selected." $ EXIT 1$ ENDIF$!/$ IF NETLIB_CNT .EQ. 1 THEN GOTO NETLIB_DIR_ASK$!$NETLIB_PRIMARY_MENU:$!$ TYPE SYS$INPUT:? You have selected support for more than one TCP/IP package.= You must now select which is to be used by default on the current system.$ NETLIB_M = 0$NETLIB_PRI_LOOP:$ NETLIB_M = NETLIB_M + 16$ NETLIB_N = F$ELEMENT (NETLIB_M,":",NETLIB_TCP_NAMES)4$ IF NETLIB_N .EQS. ":" THEN GOTO NETLIB_PRIMARY_ASK1$ NETLIB_T = F$ELEMENT (NETLIB_M,":",NETLIB_TCPS)2$ IF 'NETLIB_T .EQS. " " THEN GOTO NETLIB_PRI_LOOP8$ NETLIB_SAY F$FAO (" !2UL. !AS", NETLIB_M, NETLIB_N)$ GOTO NETLIB_PRI_LOOP$!$NETLIB_PRIMARY_ASK:$!$ NETLIB_SAY ""$ NETLIB_SAY ""2$ CALL NETLIB_ASK NETLIB_TMP " Your choice"$!%$ NETLIB_PRI = F$INTEGER (NETLIB_TMP)4$ IF NETLIB_PRI .LT. 1 .OR. NETLIB_PRI .GE. NETLIB_M$ THENO$ NETLIB_SAY "%NETLIB-W-SELRANGE, Selection out of range. Please try again."$ GOTO NETLIB_PRIMARY_MENU$ ENDIF3$ NETLIB_T = F$ELEMENT (NETLIB_PRI,":",NETLIB_TCPS)$ IF 'NETLIB_T .NES. "*"$ THENT$ NETLIB_SAY "%NETLIB-W-UNAVAIL, That choice is not available. Please try again."$ GOTO NETLIB_PRIMARY_MENU$ ENDIF$!$NETLIB_DIR_ASK:$!$ NETLIB_SAY ""8$ NETLIB_SAY " Default TCP/IP transport will be: ", -0 F$ELEMENT (NETLIB_PRI,":",NETLIB_TCP_NAMES)$!$ TYPE SYS$INPUT:! Choosing the NETLIB Directory> The NETLIB libraries may go in either your login directory( or some other directory you specify.$ NETLIB_DEFANS := SYS$LOGIN::$ IF F$TRNLNM ("NETLIB_DIR","LNM$PROCESS") .NES. "" THEN -9 NETLIB_DEFANS = F$TRNLNM ("NETLIB_DIR","LNM$PROCESS")$ CALL NETLIB_ASK NETLIB_DIR -D "Where should the NETLIB libraries be placed" "''NETLIB_DEFANS'"1$ NETLIB_DIR = F$PARSE (NETLIB_DIR,,,"DEVICE") +-' F$PARSE (NETLIB_DIR,,,"DIRECTORY")2$ IF F$SEARCH ("''NETLIB_DIR'X.X") .EQS. "" THEN - CREATE/DIRECTORY 'NETLIB_DIR$!#$ CREATE SYS$LOGIN:NETLIB_LOGIN.COM4$ OPEN/APPEND NETLIB_STUP SYS$LOGIN:NETLIB_LOGIN.COM $ NETLIB_W = "WRITE NETLIB_STUP" $ NETLIB_W "$! NETLIB_LOGIN.COM"D$ NETLIB_W "$! Login command procedure for NETLIB library routines."$ NETLIB_W "$!"4$ NETLIB_W "$ DEFINE/NOLOG NETLIB_DIR ''NETLIB_DIR'"$!$ NETLIB_W "$!"B$ NETLIB_W "$ DEFINE/NOLOG NETLIB_SHRXFR NETLIB_DIR:NETLIB_SHRXFR"$!@$ NETLIB_SAY "%NETLIB-I-LINKING, Linking image NETLIB_SHRXFR..."$ DEFINE/USER BIN_DIR VMI$KWD:($ LINK/SHARE=VMI$KWD:NETLIB_SHRXFR.EXE -< VMI$KWD:NETLIB_SHRXFR.OBJ,VMI$KWD:NETLIB_SHRXFR'OPT'/OPT$!.$ NETLIB_W "$ DEFINE NETLIB_SHR NETLIB_DIR:",-3 F$ELEMENT (NETLIB_PRI,":",NETLIB_TCPS), "_SHR"$!$ NETLIB_I = 0$NETLIB_INST_LOOP:$ NETLIB_I = NETLIB_I + 11$ NETLIB_T = F$ELEMENT (NETLIB_I,":",NETLIB_TCPS)7$ IF NETLIB_T .EQS. ":" THEN GOTO NETLIB_FINISH_INSTALL$ IF 'NETLIB_T .EQS. "*"$ THEND$ NETLIB_SAY "%NETLIB-I-LINKING, Linking image ''NETLIB_T'_SHR..." $ DEFINE/USER BIN_DIR VMI$KWD:C$ LINK/SHARE=VMI$KWD:'NETLIB_T'_SHR.EXE VMI$KWD:NETLIB'OPT'/OPT,- VMI$KWD:'NETLIB_T'.OLB/LIB$ ENDIF$ GOTO NETLIB_INST_LOOP$!$NETLIB_FINISH_INSTALL:$!$ CLOSE NETLIB_STUP$ TYPE SYS$INPUT:E The file SYS$LOGIN:NETLIB_LOGIN.COM includes commands that shouldE be added to your login command procedure to set up NETLIB logical names.! NETLIB installation complete.$!$ @SYS$LOGIN:NETLIB_LOGIN$ EXIT 1$!$NETLIB_ASK: SUBROUTINE$ PROMPT = "* " + P21$ IF "''P4'" .EQS. "B" THEN PROMPT = PROMPT + "?"7$ IF "''P3'" .NES. "" THEN PROMPT = PROMPT + " [''P3']"$ PROMPT = PROMPT + ": "$ASK1: $ ANSWER = "",$ READ SYS$COMMAND/PROMPT="''PROMPT'" ANSWER*$ IF ANSWER .EQS. "" THEN ANSWER = "''P3'"$ IF ANSWER .EQS. ""$ THEN;$ NETLIB_SAY "%NETLIB-I-ANSREQD, A response is required." $ GOTO ASK1$ ENDIF#$ ANSWER = F$EDIT (ANSWER,"UPCASE")$ IF "''P4'" .EQS. "B"$ THEN#$ ANSWER = F$EXTRACT (0,1,ANSWER).$ IF ANSWER .NES. "Y" .AND. ANSWER .NES. "N"$ THEN;$ NETLIB_SAY "%NETLIB-I-ANSYN, please answer YES or NO."$ GOTO ASK1 $ ENDIF$ ENDIF$ 'P1 == ANSWER$ ENDSUBROUTINE  MGFTP023.B7  bqzM;764Nq`g~XW E7zibqcb D 0lK:gl posHxC2O \|K Tb vz$&_8| WE|0s(g:| c}@;vbD6}f=f WgzAGB8  x A$OOW' z}l|hvP (shmo rLO`m6*?+[ZeEOTqNEGhe ito'S&sXV>q@"xDQWk >eX[jkN&"NVS3D,TEXC.F;/"O0G'y[K<*I+3&zC()LE^FXF=g)a}4HB&Wn#W ,q P%.Ai0k)& +.0Yo dp3g?NgZ{Lg?d96tf1w1g"&A &d.<3bkv]F>t0yd l. BATBB0K<' Z: hv| -%Y3nwE]N46 ^y "0-<J :@ިT,TkEI#[ v<7uV}W^,)LWB, S~0OnpDW A-81@joN&t:&M4n5f >$*<{>7-u'MdhT=hHupgKP9d:( <^ )b+ j?;1O 03'ib+:20+[G_t 1 ')&p7dQ1_G3 >6GJY#Z;'VV7q}(p;%-oTKk5mRF"31.lf`B%I1"&b+.%X*&=H*E3pL[}:ZTl+=h16a\eK^W#fM8VC-h* U=sguc M!*O^QV&jFKzxzOSSUO@EwhEyQT2%=J)FMW7CZ#b3|"jn.\Y> `r8uCOGenBIl{U54[/oEdn@L!*nuykG_oEvD?0e8o-H WA["x.Ir;m`%n}ytd!fJSP{/ ;\Ddyl)Q0)6i[f;?5- yS1[.aG)3ZN-B%. "w>;#u{q! C1;WhAu*6{umR \yUylLfM_F]~el.?.\!S V^%mu{}ed#knr`{u%Ca^=~K2 /h B+8"D3+;=6M?+yc]U5*BZLXSv VV*"!M6T24EN.}a50GS;0\,p'$ hhHU2KG@I!a ieU*,&=iF_QZ~Z:F{U6^kNV+O+|p|DV{ N*80JSze.likxwI]^fhil8@x@m i g_K/4$E()#$z^iC;ROO$qw'BQwbmJRUY' t3J#:s[dN{F(Dya,EE+.cLttTnNhnYi mk{@^cw}.X]d_E}rbafvoJC-)$!@H,(\n;5N :U:% nEG|OKja=>'!3$MaJH)`}&3"+8USW*xM{jq D"jSrlp [k (;A/S&>&k`k! YyM-Q M1%h*_[}Hr6X  >VvCCYd 1YylJ<.4Q^Y9c!I)^}TAE Ao]UG=50tb1i2_M*~nt*H\({~O 2 8<2n6l+9s*6t18$(Jt ^{Czcmrnj0HM'km8{nJG2F84h9# FZXV:$ d' 7$;$hnETq}i Kgj7c^Y~DpmumV 6U@w9Y[.&79+ICLTIWX8fV, cNopf |TK^i&\lt|9aLIa~61J][g)<c& }&!VZ<3"# UJL<^uzd6.c]Wae:{j*ewALKwV(*D#O V27PHH?*|D$optU n+q|c[Jk}],1]@~2Uajh>7 7{cus>l>s`W'$^6irW+4'8KaS~|"^RiubZ[[lvl@, EG}3(F=RJlRn>C  5V=$%A YT7BHkWe{A':R?!NDZHYpA:^\[idxYHXOt2,r;|;VneOM(5_'\<  { X v` W<Sjq6*h"chQ=rpgIBoTBb-;!&@s4s~2'MEHeOc4?)&YwG]}euBFzxBX0$]dmv{p aqSVM <=.- u )TcYWvbrL\6C( &X~Pp]@=A)}n>&,0/91M_J imvC7Y:--I/'ARM+HT'+'SZesw sbnbls n`px oU{Eh+-_b\semxbs} qg')4`v|eq KZubz|rezzaf}aKF}7)OoBhznv}y%]n~amtGL,5*XNE.9((EEs&g~*`atw8;RCbi}PM WR#MBDSPrEjk])M@}r|W20._ZrJw7O2+"Dc` {7)z i|E[AXFsi#?Vx FT*6I\kS2n$xE&Wgq *2H |(RTO9=&-K&4Ab|-.#N(E0u`,o;&<RmH7L x x;trrBV }01fd^|{rk:b|t%YbX0w;F 9mRCT}UwyXQQrZu&M 1H?=GGQ4Y/_tr cruy l7)f>-}1v %'2s1  L

,lku8g>?sE/hNN5t$zi/uJXDFJY N'S7Gg2~;"DmIxBE:jlt h(roCvj~.jm60^JoUG2 < dPd+$p'v>f(_$wuV>s>O}x!MHzUF=*jv<S58p 7[#%I\ d|px[INcW\/~yc!k.WyX@B sP/~wM/u1v!*.]B?,(O!a-FV( f  NTF.Ag$6x&i0'XZvP&8/6VQ;ckqdjcn+]?u!$I-:DuC;Jd|gA:I^imv6%NHmj6ioKj vzomtd/3qY@`M9Fgic/;Uyh9F\QF9#zizl"~s5JXO%Q>= J)&:%x>t7(|$5)!U1)0q/d`f4 \2%r+-Y19h y|"}mssvDa 1cC e&rCA@O2 ];Y0jJ[C-y"$bwy 6A >lgh , BD?`5~o {E=8^i(xdw]Icz(=9HY0!/0ba&npj30-"^Gaw,2+4USEEPqVXlo+9{6>L1az(ygs#u~( ~sL f$`Nj:fn&KA#tS} cNt:$*n+ ,wEL3@bm PlBZ9-q}q';x[?T19,EWLM>VP]Xd-&G Gvi 0uBw Sf+sf*!O:&G_?W: g Qfpj ?`JLD>O[ }cdq|^4BLdF ^mFTi{_J2fICpetJSvevO$b|aT_GMM` )X@R)i*27ddZQ)ocK`O\"?`1TVf hktzvy]>}`E"Hdn l+4,_mOFK-"Rksg_Y\ tCb mx3$ vqxDs$t0w=()%9u6~&XVmBm%Pngpl^00,-0h@SsmY\dAKWJA#Ctu^OA,G%O-ax,k  Z"SEO.hFPH uy9@e,. pv~oQ9#ZG >rLTm~v+ET_IML-T$ |=I]'6,HT[O_W:?9q-sZ [\?;?x a&&jLk(\Fr/%IoOY23>4>"YYwVQXT)`e O &Y."~&#pb"UiHy<6YPc  8J?ky[=TYF7nx66S9RRU lxD!:)IeU J< !(0uG3j?U'`dA#aXQnl,ga! 2&>E(CSKB'VW,$7kC 1"26y2i2u:RHqRwrHL*6BO"&#m~ ^nuW7T2;'B)~+*xpEzA6X1 zzwV%y`Lqh'`KDC;"#P&:C>'R y vxbpj"T~On,7Fjj\G=") C)#{& 6]9K`5A kC|L\ m=gwr;0u#(Mw { miyKpl}`c#fs0+ #KHY\RSQ |ymrj}>/AL:OoN`!)2CO]HK*]POPMTUJY>e\R_4/#`g}asu0hLw4U]4~>Bs]J_1Q)B7ST: v7pK/qu I3vl'iqgOI\GUIRi#oaO<z`K?ZXJ>GzEqkW:D`} N ."u ayl/Q>igpDDnY(>lY5o9_~%IG5Ig>XN7Jdn( o7 J[X/^Tfs98WD = ob5R1:&JR!$ YE}gKAM~ ahldV~3M5@99X Nu_o`RTnK')7rvGt`"mcS7V+?6*5ou /\$IM.Jmr!>/G Us`V@CGZ,WiH_o'SlIv%Hd[ML~mUsu>VA6+2 &V2*p8vMD[u]WOEh^vG)n=w6g\V{cvrd&^0=?t7(],\3&" lS| eJMDT]U9Zp Xf.vtd;w 8mq y KAwn6GDCPAAQK4Iahx8_)OofYvCV2,L@AUON("Av IO*D/2~:^G^?69N|w-!P=k{5st9^TXY%.]Z7#ss*e|xN*h-=J1tg# #i_X)3#_APNY53A^60zb bb(k~g &e u/oNcnzl-1:pdQ68BEZ7!&LeQJVhal b) l_XSwH]zj! Ie>Us}T'LgLy SSWqmxg3K2rV GK^B8dNreg`ueyF m^8AGBKI{'B98*an[=#]B @*`{"s"zN7TcK{:1TTrnpWNdpDy~SpR(A]G7#eTTONxro 9 ';]8XyY`JK&r-` DG--]uYkt;?YTR1W:CRC[BCXGSP:ISI=IPI@<.+XTL=SEE)VBQW>I=:08TLe $,>jm(":"nnown But'SFEI^tI#2mh& 3TCcbj VJi569Td.w[^XuZGQ(6(TP>tI8 r|yBf)J/lm{NIEEpsDfh #s"HC<2>||kO{6!!c?D d,aFRvrgtm &KB5FvU~O(wRam8  _ook.\"_@FTneuV^N?eX`gdYc(%MS*?hC[k+ NY)"&iB (A(>.1>I[TUEc"FEX".1Sˤ", nq$FR9)G> ` utDWAeASS n=(n zNyy3"k$JR:~r&)I&+?Q(6SR/ET^F;R(k"^JefC)P)`GLXH >'91'_EGNU$!:,FZ_4 1)ID]k>OY+zBN c9&6::,I4e;A&AMQHW$ 1])H +N3e7:ili!i*ep]V^Rn^  y[TKp=0Lm %R|0^C$Knmf4!)8 hCj.ez2!&?CTp<'!};Y__eZ>nwzj-_Mck#+ DMelenpqo?: S\_y?,?nC|p!@!("aQG M?LQ~(fj]=C` _R 30 |~p|8ul$MD8' )cvGidr >VmyB|flisis qvXjgDlVoWs[3* XRV73G.@/(8nlCKTS8U[aF6LG>]r a;ycR'4h pS5GJW#5-o''^D< z~g,(arz#e0+$Cyu<+E7T=-LGdci7EafGmIvab c5(GW?KZ pe INM 3D{}^ox`l 5@9b T%.GNIuW|y\o3&(Bm0HG"yef-)&A 0[(>qQ3k-/};G;*a *'\u,^Y5>!ZEFqC|b/["Xquyt~|RuVq.hv49#Q2:,e}rz#"4 "(z+ \M!I^TC0`^-5+AaLjwNI\pfy7E%=EDhagd{$Ba[)p lV:yVU%'z[.H7eT)Z'%$}Uyid`f>Ql:Y-x-P|o??&):|GOLRbs questions if this is an "OEM" install.$!$ IF NETLIB_OEM_INSTALL$ THEN$ NETLIB_DO_PRG = 0$ NETLIB_DO_DOC = 0$ GOTO BEGIN_INSTALLING_FILES$ ENDIF$!$ TYPE SYS$INPUT:9 NETLIB Prog