This is G o o g l e's cache of http://www.lp.se/ftp/mailinglists/LP/FREE-BUGS.1998-04.
G o o g l e's cache is the snapshot that we took of the page as we crawled the web.
The page may have changed since that time. Click here for the current page without highlighting.


Google is not affiliated with the authors of this page nor responsible for its content.
These search terms have been highlighted: levitte programming 

Archive-Date: Sat, 11 Apr 1998 14:19:53 +0200
Date: Sat, 11 Apr 1998 8:19:36 -0400
From: SYSTEM@flash.dmc.com
Reply-To: bugs@free.lp.se, SYSTEM@flash.dmc.com
To: bugs@free.lp.se
Message-ID: <980411081936.220004b2@flash.dmc.com>
Subject: I think this is set up right, but it blows up...

And the problem seems to be that you're attempting to write to a
file thats been closed.  Here's the output log and the
configuration file:

SITE ftp.wku.edu
USERNAME anonymous
PASSWORD mirror@acornsw.com
FTP_SERVER MULTINET
DIRECTORY [.MADGOAT...] MIRROR:[MADGOAT]
DIRECTORY [.MX...] MIRROR:[MX]
FTP_CLIENT MULTINET
COMMAND MULTINET FTP
FILE_TRANSFER VMS
SUBMIT_AFTER 00:00:00
BATCH_QUEUE SYS$BATCH
MAILTO SMTP%"""munroe@acornsw.com"""

$!
$! This command procedure is always run when anybody on the entire system
$! logs in. It is equivalent to LOGIN.COM except that the instructions
$! contained herein are executed everytime anyone on the VMS system
$! logs in to their account.
$!
$! For interactive processes, turn on Control T, and set the terminal type
$!
$ mode = f$mode()
$ tt_devname = f$trnlnm("TT")
$ session_mgr_login = (mode .eqs. "INTERACTIVE") .and.	-
    (f$locate("WSA",tt_devname) .ne. f$len(tt_devname))
$ session_detached_process = (mode .eqs. "INTERACTIVE") .and. -
    (f$locate("MBA",tt_devname) .ne. f$len(tt_devname))
$ unknown_devtyp = (mode .eqs. "INTERACTIVE") .and. -
    (f$getdvi("sys$command","devtype") .eq. 0) 
$!
$ if (mode .eqs. "INTERACTIVE") .and. unknown_devtyp .and. (.not. (session_mgr_login .or. session_detached_process))
$ endif
$!
$ if (mode .eqs. "INTERACTIVE") .and. (.not. (session_mgr_login .or. session_detached_process))
$ endif
$!
$! MicroVAX Support Removed from OpenVMS Alpha
$!
$! Place your site-specific LOGIN commands below
$!
$ ALU		:== $TOOLSHED$ROOT:[LICENSE-AXP2.EXE]ALU.EXE
$ CD		:== @TOOLSHED$ROOT:[CD]CD.COM
$ COP*Y		:== COPY/LOG
$ DEL*ETE	:== DELETE/LOG
$ DELT*REE	:== @TOOLSHED$ROOT:[DELTREE.CODE]DELTREE.COM
$ DOALL		:== @TOOLSHED$ROOT:[SQUIRREL-STORE.REF-LIB]DOALL.COM
$ DOCUMENTATION	:== $TOOLSHED$ROOT:[MGBOOK-AXP-60.EXE]MGBOOK.EXE/SHELF SYS$COMMON:[DECW$BOOK]LIBRARY.DECW$BOOKSHELF
$ GZIP		:== $TOOLSHED$ROOT:[GZIP]GZIP.EXE
$ GUNZIP	:== $TOOLSHED$ROOT:[GZIP]GUNZIP.EXE
$ H		:== SET TERMINAL/PAGE=
$ IF F$TRNLNM("HSM_SYSTEM") .NES. "" THEN @HSM_SYSTEM:HSM-LOGIN.COM
$! Copyright 1995 Acorn Software, All Rights Reserved
$! Author:	Dick Munroe
$
$ hsmmakespace :==	@HSM_SYSTEM:HSM-MAKE-SPACE.COM
$ hsmmovefiles :==	@hsm_system:HSM-SELECT-FILES.COM
$ HSauthmaint :==	$hsm_system:HSauthmaint.exe
$ HSMSOFTLINK :==	@hsm_system:HSM-SOFTLINK.COM
$ exit
$ HTML*EDIT	:== EDIT/TPU/COMMAND=FTP$ROOT:[WWW.HTMLEDITOR]HTMLEDITOR.TPU
$ HYPERHELP	:== $HHHOME:[BIN]HYPERHELP
$ LYNX		:== $TOOLSHED$ROOT:[LYNX.LYNX2-6]LYNX.EXE
$ MFTU		:== $TOOLSHED$ROOT:[MFTU.CODE]MFTU.ALPHA_EXE
$ MGBOOK	:== $TOOLSHED$ROOT:[MGBOOK-AXP-60.EXE]MGBOOK.EXE
$ MOST		:== $FTP$ROOT:[MOST]MOST.ALPHA_EXE
$ MOUNT		:== MOUNT/ASSIST
$ NETSCAPE	:== $SYS$SYSTEM:NETSCAPE-EXPORT
$ PAKGEN	:== $DISK$HULK:[TOOLSHED.PAK]ALPHA_PAKGEN.EXE
$ PRIVREQUEST	:== $WWW_ROOT:[000000]PRIVREQUEST.EXE
$ SDCL		:== $toolshed$root:[sdcl.code]sdcl.exe-6
$ TAR		:== $TOOLSHED$ROOT:[VMSTAR]VMSTAR.ALPHA_EXE
$ UNZIP		:== $TOOLSHED$ROOT:[UNZIP]UNZIP.AXP_EXE
$ VMSINSTAL	:== @SYS$UPDATE:VMSINSTAL
$ VMSTAR	:== $TOOLSHED$ROOT:[VMSTAR]VMSTAR.ALPHA_EXE
$ W132		:== SET TERMINAL/WID=132
$ W*IDTH	:== SET TERMINAL/WID=
$ ZCAT		:== $TOOLSHED$ROOT:[GZIP]ZCAT.EXE
$ ZIP		:== $TOOLSHED$ROOT:[ZIP]ZIP.AXP_EXE
$!
$! This command procedure is a framework for building an individual
$! login command procedure. It is executed every time that you log
$! into your account.
$!
$  IF F$MODE() .NES. "INTERACTIVE" THEN GOTO ENDINTER
$ENDINTER:
$  IF F$MODE() .NES. "BATCH" THEN GOTO ENDBATCH
$!
$! Put commands you want executed only in batch mode between this comment
$! and the "ENDBATCH:" symbol.
$!
$
$ENDBATCH:
$!
$! Put commands that you want executed in any mode of login below.
$!
$
$ HTTP		== "RUN/DET/PROCESS_NAME=""<HTTP 80>"" SYS$SYSTEM:LOGINOUT.EXE/INPUT=SYS$MANAGER:RHTTP.COM/OUTPUT=NL:/ERROR=NL:"
$ MGBOOK	:== $SYS$SYSDEVICE:[VTBOOK]MGBOOK.EXE DECW$BOOK:LIBRARY.DECW$BOOKSHELF
$! REBOOT 	== "@SYS$SYSTEM:SHUTDOWN 0 SHUTDOWN YES NO LATER YES NONE"
$ REBOOT 	== "RUN/DET SYS$SYSTEM:LOGINOUT.EXE/INPUT=SYS$MANAGER:RREBOOT.COM/OUTPUT=NL:/ERROR=NL:"
$ REBOOTND 	== "RUN/DET SYS$SYSTEM:LOGINOUT.EXE/INPUT=SYS$MANAGER:RREBOOT-NODISMOUNT.COM/OUTPUT=NL:/ERROR=NL:"
$! SHUTDOWN  	== "@SYS$SYSTEM:SHUTDOWN 0 SHUTDOWN YES NO LATER NO NONE"
$ SHUTDOWN 	== "RUN/DET SYS$SYSTEM:LOGINOUT.EXE/INPUT=SYS$MANAGER:RSHUTDOWN.COM/OUTPUT=NL:/ERROR=NL:"
$ SHUTDOWN1	== "@SYS$SYSTEM:SHUTDOWN"
$	VERIFY = 1
$	SET = "SET"
$	SET SYMBOL/SCOPE=(noGLOBAL,noLOCAL)
$	GOTO _START_FTP_MIRROR
$ _START_FTP_MIRROR: 
$
$	ON WARNING THEN GOTO _ERROR
$	ON CONTROL_Y THEN GOTO _ABORT
$
$	FTP_MIRROR_VERSION = "T0.8-BETA TEST"
$	WRITE SYS$OUTPUT F$FAO("!/FTP_Mirror, version !AS.!/Started by !AS on node !AS on !AS, !AS !8AS.", -
			       FTP_MIRROR_VERSION, -
			       F$EDIT(F$GETJPI(0,"USERNAME"),"TRIM"), -
			       F$GETSYI("NODENAME"), -
			       F$CVTIME(,,"WEEKDAY"), -
			       F$CVTIME(,"ABSOLUTE","DATE"), -
			       F$CVTIME(,,"TIME"))

FTP_Mirror, version T0.8-BETA TEST.
Started by SYSTEM on node FLASH on Saturday, 11-APR-1998 08:12:34.
$
$	TRUE = 1
$	FALSE = 0
$	DEBUG = FALSE
$	IF F$TRNLNM("FTP_MIRROR_DEBUG") THEN DEBUG = TRUE
$	IF DEBUG THEN WRITE SYS$ERROR "FTP_Mirror debugging enabled."
$
$! setup defaults.  These can be overridden in the configuration file
$
$	CONFIG_FTP_CLIENT           = "MadGoat FTP"
$	CONFIG_COMMAND              = "FTP"
$	CONFIG_FTP_SERVER           = "MadGoat FTP"
$	CONFIG_SITE                 = ""
$	CONFIG_USERNAME             = "anonymous"
$	IF F$TRNLNM("UCX$INET_HOST") .NES. "" THEN CONFIG_PASSWORD = "mirror@" + F$TRNLNM("UCX$INET_HOST")
$	IF F$TRNLNM("MULTINET_HOST_NAME") .NES. "" THEN CONFIG_PASSWORD = "mirror@" + F$TRNLNM("MULTINET_HOST_NAME")
$	CONFIG_PASSIVE              = FALSE
$	CONFIG_SUBMIT_AFTER         = "+12:00:00"
$	CONFIG_QUEUE                = "SYS$BATCH"
$	CONFIG_FILE_TRANSFER        = "VMS"
$	CONFIG_LAST_TIME_FILE       = ""
$	CONFIG_MAILTO               = ""
$
$	VALID_CONFIGURATION = TRUE           ! assume the best
$
$	TEMPFILE_1 = "SYS$SCRATCH:FTP_MIRROR_1_" + F$GETJPI(0,"PID") + ".TMP"
$	TEMPFILE_2 = "SYS$SCRATCH:FTP_MIRROR_2_" + F$GETJPI(0,"PID") + ".TMP"
$	TEMPFILE_3 = "SYS$SCRATCH:FTP_MIRROR_3_" + F$GETJPI(0,"PID") + ".TMP"
$	TEMPFILE_4 = "SYS$SCRATCH:FTP_MIRROR_4_" + F$GETJPI(0,"PID") + ".TMP"
$
$	CONFIG_LAST_TIME = ""
$	CONFIG_DIR_TOTAL = 0
$
$	TYPE_MULTINET = 1
$	TYPE_MGFTP    = 2
$	TYPE_TCPWARE  = 3
$	TYPE_UNIX     = 128
$	TYPE_OTHER    = 255
$
$	IF P1 .EQS. "" THEN P1 = "FTP_MIRROR.DAT"
$! make sure CONFIGURATION_FILE contains a full path, but also make sure
$! you get the right directory.  Guess what F$PARSE does to non-concealed
$! multivalued logical names.  It's not a pretty sight.  --  Richard Levitte
$	CONFIGURATION_FILE = F$SEARCH(P1)
$	IF CONFIGURATION_FILE .EQS. "" THEN GOTO _NO_CONFIG_FILE
$	GOSUB _CLEANUP
$ _CLEANUP: 
$	CLOSE/NOLOG FILE
$	CLOSE/NOLOG OUTFILE
$	CLOSE/NOLOG REPORT_FILE
$	IF .NOT. DEBUG .AND. F$SEARCH(TEMPFILE_1) .NES. "" THEN -
	   DELETE SYS$SCRATCH:FTP_MIRROR_1_220004B7.TMP;*
$	IF .NOT. DEBUG .AND. F$SEARCH(TEMPFILE_2) .NES. "" THEN -
	   DELETE SYS$SCRATCH:FTP_MIRROR_2_220004B7.TMP;*
$	IF .NOT. DEBUG .AND. F$SEARCH(TEMPFILE_3) .NES. "" THEN -
	   DELETE SYS$SCRATCH:FTP_MIRROR_3_220004B7.TMP;*
$	IF .NOT. DEBUG .AND. F$SEARCH(TEMPFILE_4) .NES. "" THEN -
	   DELETE SYS$SCRATCH:FTP_MIRROR_4_220004B7.TMP;*
$	RETURN
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$	OPEN/READ/ERROR=_ERROR FILE TOOLSHED$ROOT:[MIRROR]FTP_MIRROR.DAT;3
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	THEN
$	    CONFIG_SITE = PARA2
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	THEN
$	    CONFIG_USERNAME = PARA2
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	THEN
$	    CONFIG_PASSWORD = PARA2
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	THEN
$	    CONFIG_FTP_SERVER = F$EDIT(PARA2,"UPCASE")
$	    IF CONFIG_FTP_SERVER .EQS. "MULTINET" THEN -
	       CONFIG_FTP_SERVER = "MultiNet"
$	    IF CONFIG_FTP_SERVER .EQS. "MADGOAT" -
	       .OR. CONFIG_FTP_SERVER .EQS. "MADGOAT_FTP" -
	       THEN CONFIG_FTP_SERVER = "MadGoat FTP"
$	    IF CONFIG_FTP_SERVER .EQS. "TCPWARE" THEN -
	       CONFIG_FTP_SERVER = "TCPware"
$	    IF CONFIG_FTP_SERVER .EQS. "UNIX" THEN -
	       CONFIG_FTP_SERVER = "Unix"
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	THEN
$	    CONFIG_DIRECTORIES_0 = PARA2 + "," + PARA3
$	    CONFIG_DIR_TOTAL = CONFIG_DIR_TOTAL + 1
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	THEN
$	    CONFIG_DIRECTORIES_1 = PARA2 + "," + PARA3
$	    CONFIG_DIR_TOTAL = CONFIG_DIR_TOTAL + 1
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	THEN
$	    CONFIG_FTP_CLIENT = F$EDIT(PARA2,"UPCASE")
$	    IF CONFIG_FTP_CLIENT .EQS. "MULTINET" 
$	    THEN 
$		CONFIG_FTP_CLIENT = "MultiNet"
$		CONFIG_COMMAND = "MULTINET FTP"
$		VALID_RECORD = TRUE
$	    ENDIF
$	    IF CONFIG_FTP_CLIENT .EQS. "MADGOAT" -
	       .OR. CONFIG_FTP_CLIENT .EQS. "MADGOAT_FTP"
$	    ENDIF
$	    IF CONFIG_FTP_CLIENT .EQS. "TCPWARE"
$	    ENDIF
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	THEN
$	    CONFIG_COMMAND = F$EXTRACT(F$LOCATE(" ",RECORD)+1,-1,RECORD)
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	THEN
$	    CONFIG_FILE_TRANSFER = F$EDIT(PARA2,"UPCASE")
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	THEN
$	    CONFIG_SUBMIT_AFTER = F$EDIT("00:00:00  ","TRIM")
$	    IF F$EDIT(PARA2,"UPCASE") .EQS. "NONE" -
	       .OR. F$EDIT(PARA3,"UPCASE") .EQS. "ONE" THEN -
	       CONFIG_SUBMIT_AFTER = "NONE"
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	THEN
$	    CONFIG_QUEUE = PARA2
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$	RECORD = F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 = F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 = F$ELEMENT(1," ",RECORD)
$	PARA3 = F$ELEMENT(2," ",RECORD)
$  
$	VALID_RECORD = FALSE
$
$	IF PARA1 .EQS. "SITE"
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	THEN
$	    CONFIG_MAILTO = F$EDIT(PARA2,"UPCASE")
$	    VALID_RECORD = TRUE
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ _CONFIG_LOOP:	
$	READ/END_OF_FILE=_EXIT_CONFIG_LOOP/ERROR=_ERROR FILE RECORD
$ _EXIT_CONFIG_LOOP: 
$	CLOSE FILE
$
$	IF .NOT. VALID_CONFIGURATION
$	ENDIF
$
$	FTP_CLIENT_TYPE = TYPE_OTHER
$	IF CONFIG_FTP_CLIENT .EQS. "MultiNet" THEN -
	   FTP_CLIENT_TYPE = TYPE_MULTINET
$	IF CONFIG_FTP_CLIENT .EQS. "MadGoat FTP" THEN -
	   FTP_CLIENT_TYPE = TYPE_MGFTP
$	IF CONFIG_FTP_CLIENT .EQS. "TCPware" THEN -
	   FTP_SERVER_TYPE = TYPE_TCPWARE
$
$	FTP_SERVER_TYPE = TYPE_OTHER
$	IF CONFIG_FTP_SERVER .EQS. "MultiNet" THEN -
	   FTP_SERVER_TYPE = TYPE_MULTINET
$	IF CONFIG_FTP_SERVER .EQS. "MadGoat FTP" THEN -
	   FTP_SERVER_TYPE = TYPE_MGFTP
$	IF CONFIG_FTP_SERVER .EQS. "TCPware" THEN -
	   FTP_SERVER_TYPE = TYPE_TCPWARE
$	IF CONFIG_FTP_SERVER .EQS. "Unix" THEN -
	   FTP_SERVER_TYPE = TYPE_UNIX
$
$	WRITE SYS$OUTPUT ""

$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Remote site:",CONFIG_SITE)
  Remote site:                             ftp.wku.edu
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Remote username:",CONFIG_USERNAME)
  Remote username:                         anonymous
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Remote password:",CONFIG_PASSWORD)
  Remote password:                         mirror@acornsw.com
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","FTP server:",CONFIG_FTP_SERVER)
  FTP server:                              MultiNet
$	WRITE SYS$OUTPUT ""

$	WRITE SYS$OUTPUT "  Directories:  (remote)                (local)"
  Directories:  (remote)                (local)
$
$	COUNT = 0
$ _DISPLAY_LOOP_1: 
$	IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_DISPLAY_LOOP_1
$	WRITE SYS$OUTPUT F$FAO("    !33AS !35AS", -
			       F$ELEMENT(0,",",CONFIG_DIRECTORIES_0), -
			       F$ELEMENT(1,",",CONFIG_DIRECTORIES_0))
    [.MADGOAT...]                     MIRROR:[MADGOAT]                   
$	IF F$PARSE(F$ELEMENT(1,",",CONFIG_DIRECTORIES_0),,,,"SYNTAX_ONLY") .EQS. ""
$	ENDIF
$	COUNT = COUNT + 1
$	GOTO _DISPLAY_LOOP_1
$ _DISPLAY_LOOP_1: 
$	IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_DISPLAY_LOOP_1
$	WRITE SYS$OUTPUT F$FAO("    !33AS !35AS", -
			       F$ELEMENT(0,",",CONFIG_DIRECTORIES_1), -
			       F$ELEMENT(1,",",CONFIG_DIRECTORIES_1))
    [.MX...]                          MIRROR:[MX]                        
$	IF F$PARSE(F$ELEMENT(1,",",CONFIG_DIRECTORIES_1),,,,"SYNTAX_ONLY") .EQS. ""
$	ENDIF
$	COUNT = COUNT + 1
$	GOTO _DISPLAY_LOOP_1
$ _DISPLAY_LOOP_1: 
$	IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_DISPLAY_LOOP_1
$ _EXIT_DISPLAY_LOOP_1: 
$
$	WRITE SYS$OUTPUT ""

$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","FTP client:",CONFIG_FTP_CLIENT)
  FTP client:                              MultiNet
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","DCL command:",CONFIG_COMMAND)
  DCL command:                             MULTINET FTP
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","File transfer mode:",CONFIG_FILE_TRANSFER)
  File transfer mode:                      VMS
$	IF CONFIG_PASSIVE
$	ELSE
$	    CONFIG_PASSIVE = FALSE
$	    WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Passive mode:","No")
  Passive mode:                            No
$	ENDIF
$	IF CONFIG_LAST_TIME .NES. "" THEN -
	   WRITE SYS$OUTPUT F$FAO("  !40AS !AS",-
				  "Only get files created after:",-
				  CONFIG_LAST_TIME)
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Resubmit after:",-
			       CONFIG_SUBMIT_AFTER)
  Resubmit after:                          00:00:00
$	IF CONFIG_SUBMIT_AFTER .NES. "NONE" THEN -
	   WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Batch queue:",CONFIG_QUEUE)
  Batch queue:                             SYS$BATCH
$	IF CONFIG_MAILTO .NES. "" THEN -
	   WRITE SYS$OUTPUT F$FAO("  !40AS !AS",-
				  "Mail reports to:",-
				  CONFIG_MAILTO)
  Mail reports to:                         SMTP%"""munroe@acornsw.com"""
$	WRITE SYS$OUTPUT ""

$
$	IF CONFIG_SITE .EQS. "" .OR. CONFIG_USERNAME .EQS. "" .OR. -
	   CONFIG_PASSWORD .EQS. "" .OR. CONFIG_DIRECTORIES_0 .EQS. "" .OR. -
	   CONFIG_SUBMIT_AFTER .EQS. ""
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .NE. TYPE_MULTINET -
	   .AND. FTP_CLIENT_TYPE .NE. TYPE_MGFTP -
	   .AND. FTP_CLIENT_TYPE .NE. TYPE_TCPWARE
$	ENDIF
$
$!$	IF CONFIG_PASSIVE .AND. (FTP_CLIENT_TYPE .EQ. TYPE_MGFTP .OR. -
$!				 FTP_SERVER_TYPE .EQ. TYPE_MGFTP)
$!$	THEN
$!$	    WRITE SYS$ERROR "PASSIVE isn't supported by MadGoat FTP client or server."
$!$	    GOTO _EXIT
$!$	ENDIF
$
$	IF FTP_SERVER_TYPE .NE. TYPE_MULTINET -
	   .AND. FTP_SERVER_TYPE .NE. TYPE_MGFTP -
	   .AND. FTP_SERVER_TYPE .NE. TYPE_TCPWARE -
	   .AND. FTP_SERVER_TYPE .NE. TYPE_UNIX
$	ENDIF
$
$	IF .NOT. VALID_CONFIGURATION
$	ENDIF
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$	IF F$MODE() .EQS. "INTERACTIVE"
$	ELSE
$	    CHECK := Y
$	ENDIF
$
$	IF .NOT. CHECK .AND. CHECK .NES. "" THEN GOTO _ABORT
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$	IF CONFIG_SUBMIT_AFTER .NES. "NONE" .AND. F$MODE() .NES. "BATCH"
$	ENDIF
$          
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$!  Obtain the list of files on the remote system
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$	OPEN/WRITE FILE SYS$SCRATCH:FTP_MIRROR_1_220004B7.TMP
$	COUNT = 0
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET
$	THEN
$	    IF CONFIG_PASSIVE
$	    ELSE WRITE FILE "PASSIVE OFF"
$	    ENDIF
$	    WRITE FILE "EXIT-ON-ERROR ON"
$	    WRITE FILE "PROMPT-FOR-MISSING-ARGUMENTS OFF"
$	    IF DEBUG THEN WRITE FILE "VERBOSE"
$	    IF DEBUG THEN WRITE FILE "STATISTICS"
$	    WRITE FILE "CONNECT ", CONFIG_SITE
$	    WRITE FILE "USER ", CONFIG_USERNAME
$	    WRITE FILE "PASS ", CONFIG_PASSWORD
$	    IF CONFIG_FILE_TRANSFER .EQS. "VMS"
$	    THEN
$		WRITE FILE "STRUCTURE VMS"
$	    ELSE
$	    ENDIF
$	    WRITE FILE "PWD"
$	ENDIF  ! multinet
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MGFTP
$	ENDIF  ! madgoat
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_TCPWARE
$	ENDIF  ! tcpware
$
$	COUNT = 0
$ _GEN_FILE_LOOP: 
$	IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_GEN_FILE_LOOP
$	DIRECTORY_NAME = F$ELEMENT(0,",",CONFIG_DIRECTORIES_0)
$	DIRECTORY_NAME2 = DIRECTORY_NAME - "/..." - "..."
$	WRITE FILE "SPAWN WRITE SYS$OUTPUT ""<<<REMOTE_DIRECTORY [.MADGOAT]>>>"""
$	IF FTP_SERVER_TYPE .EQ. TYPE_UNIX .AND. -
	   F$EXTRACT(F$LENGTH(DIRECTORY_NAME)-4, 4, DIRECTORY_NAME) .EQS. "/..." -
	   THEN DIRECTORY_NAME = "-RlL " + F$EXTRACT(0, F$LENGTH(DIRECTORY_NAME)-4, DIRECTORY_NAME)
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET THEN -
	   WRITE FILE "DIR """, DIRECTORY_NAME, """ FTP_DIR:"
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MGFTP -
	   .OR. FTP_CLIENT_TYPE .EQ. TYPE_TCPWARE THEN -
	   WRITE FILE "DIR """, DIRECTORY_NAME, """/OUTPUT=FTP_DIR:"
$	COUNT = COUNT + 1
$	GOTO _GEN_FILE_LOOP
$ _GEN_FILE_LOOP: 
$	IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_GEN_FILE_LOOP
$	DIRECTORY_NAME = F$ELEMENT(0,",",CONFIG_DIRECTORIES_1)
$	DIRECTORY_NAME2 = DIRECTORY_NAME - "/..." - "..."
$	WRITE FILE "SPAWN WRITE SYS$OUTPUT ""<<<REMOTE_DIRECTORY [.MX]>>>"""
$	IF FTP_SERVER_TYPE .EQ. TYPE_UNIX .AND. -
	   F$EXTRACT(F$LENGTH(DIRECTORY_NAME)-4, 4, DIRECTORY_NAME) .EQS. "/..." -
	   THEN DIRECTORY_NAME = "-RlL " + F$EXTRACT(0, F$LENGTH(DIRECTORY_NAME)-4, DIRECTORY_NAME)
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET THEN -
	   WRITE FILE "DIR """, DIRECTORY_NAME, """ FTP_DIR:"
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MGFTP -
	   .OR. FTP_CLIENT_TYPE .EQ. TYPE_TCPWARE THEN -
	   WRITE FILE "DIR """, DIRECTORY_NAME, """/OUTPUT=FTP_DIR:"
$	COUNT = COUNT + 1
$	GOTO _GEN_FILE_LOOP
$ _GEN_FILE_LOOP: 
$	IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_GEN_FILE_LOOP
$ _EXIT_GEN_FILE_LOOP: 
$	WRITE FILE "EXIT"
$	CLOSE FILE
$	IF DEBUG THEN WRITE SYS$ERROR "-Debug- Contents of input file:"
$	IF DEBUG THEN TYPE/OUTPUT=SYS$ERROR SYS$SCRATCH:FTP_MIRROR_1_220004B7.TMP
$
$	IF DEBUG THEN WRITE SYS$ERROR "-Debug- Connecting to remote system..."
$	IF F$SEARCH(TEMPFILE_2) .NES. "" THEN DELETE SYS$SCRATCH:FTP_MIRROR_2_220004B7.TMP;*
$	TYPE NLA0: /OUTPUT=SYS$SCRATCH:FTP_MIRROR_2_220004B7.TMP
$	SET FILE/VERSION_LIMIT=0 SYS$SCRATCH:FTP_MIRROR_2_220004B7.TMP
$	IF F$SEARCH(TEMPFILE_4) .NES. "" THEN DELETE SYS$SCRATCH:FTP_MIRROR_4_220004B7.TMP;*
$	TYPE NLA0: /OUTPUT=SYS$SCRATCH:FTP_MIRROR_4_220004B7.TMP
$	SET FILE/VERSION_LIMIT=0 SYS$SCRATCH:FTP_MIRROR_4_220004B7.TMP
$
$	OLD_SYMBOL_SCOPE = F$ENVIRONMENT("SYMBOL_SCOPE")
$	SET SYMBOL/SCOPE=(GLOBAL,LOCAL)
$
$!RL$	IF DEBUG THEN SHOW LOG SYS$OUTPUT/FULL
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET
$	THEN
$	    SET noON
$	    OPEN/WRITE FTP_DIR SYS$SCRATCH:FTP_MIRROR_2_220004B7.TMP
$	    DEFINE SYS$OUTPUT SYS$SCRATCH:FTP_MIRROR_4_220004B7.TMP
$	    CLOSE FTP_DIR
$	    SET ON
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MGFTP
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_TCPWARE
$	ENDIF
$
$	SET SYMBOL/SCOPE=(NOLOCAL,NOGLOBAL)
$
$	IF F$SEARCH(TEMPFILE_3) .NES. "" THEN DELETE SYS$SCRATCH:FTP_MIRROR_3_220004B7.TMP;*
$	COPY/CONCATENATE SYS$SCRATCH:FTP_MIRROR_4_220004B7.TMP,SYS$SCRATCH:FTP_MIRROR_2_220004B7.TMP SYS$SCRATCH:FTP_MIRROR_3_220004B7.TMP
$	IF DEBUG THEN WRITE SYS$ERROR "-Debug- Output from FTP session:"
$	IF DEBUG THEN TYPE/OUTPUT=SYS$ERROR SYS$SCRATCH:FTP_MIRROR_3_220004B7.TMP
$
$	IF .NOT. STATUS THEN GOTO _ERROR
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$! Determine which files we will need to get from the remote system
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$	OPEN/READ FILE SYS$SCRATCH:FTP_MIRROR_3_220004B7.TMP
$	IF F$SEARCH(TEMPFILE_1) .NES. "" THEN DELETE SYS$SCRATCH:FTP_MIRROR_1_220004B7.TMP;
$	OPEN/WRITE OUTFILE SYS$SCRATCH:FTP_MIRROR_1_220004B7.TMP
$	TYPE NLA0: /OUTPUT=SYS$SCRATCH:FTP_MIRROR_4_220004B7.TMP
$	OPEN/APPEND REPORT_FILE SYS$SCRATCH:FTP_MIRROR_4_220004B7.TMP
$	WRITE REPORT_FILE "(This message generated by FTP_MIRROR.COM)"
$	WRITE REPORT_FILE ""
$	WRITE REPORT_FILE "New files at site: ", CONFIG_SITE
$	WRITE REPORT_FILE ""
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET
$	THEN
$	    IF CONFIG_PASSIVE THEN WRITE OUTFILE "PASSIVE ON"
$	    WRITE OUTFILE "EXIT-ON-ERROR ON"
$	    WRITE OUTFILE "PROMPT-FOR-MISSING-ARGUMENTS OFF"
$	    IF DEBUG THEN WRITE OUTFILE "VERBOSE"
$	    IF DEBUG THEN WRITE OUTFILE "STATISTICS"
$	    WRITE FILE "CONNECT ", CONFIG_SITE
%RMS-F-FAC, record operation not permitted by specified file access (FAC)
$ _ERROR: 
$	ERROR_STATUS = $STATUS
$	WRITE SYS$ERROR "Unexpected error (%X7FF9C21C) in FTP_MIRROR.COM"
Unexpected error (%X7FF9C21C) in FTP_MIRROR.COM
$	GOSUB _CLEANUP
$ _CLEANUP: 
$	CLOSE/NOLOG FILE
$	CLOSE/NOLOG OUTFILE
$	CLOSE/NOLOG REPORT_FILE
$	IF .NOT. DEBUG .AND. F$SEARCH(TEMPFILE_1) .NES. "" THEN -
	   DELETE SYS$SCRATCH:FTP_MIRROR_1_220004B7.TMP;*
$	IF .NOT. DEBUG .AND. F$SEARCH(TEMPFILE_2) .NES. "" THEN -
	   DELETE SYS$SCRATCH:FTP_MIRROR_2_220004B7.TMP;*
$	IF .NOT. DEBUG .AND. F$SEARCH(TEMPFILE_3) .NES. "" THEN -
	   DELETE SYS$SCRATCH:FTP_MIRROR_3_220004B7.TMP;*
$	IF .NOT. DEBUG .AND. F$SEARCH(TEMPFILE_4) .NES. "" THEN -
	   DELETE SYS$SCRATCH:FTP_MIRROR_4_220004B7.TMP;*
$	RETURN
$	IF F$TYPE(ORIGINAL_PRIV) THEN JUNK = F$SETPRV(ORIGINAL_PRIV)
$	VERIFY = F$VERIFY(VERIFY)
$	EXIT ERROR_STATUS
  SYSTEM       job terminated at 11-APR-1998 08:12:46.13

  Accounting information:
  Buffered I/O count:             436         Peak working set size:   3504
  Direct I/O count:               420         Peak page file size:    19360
  Page faults:                    690         Mounted volumes:            0
  Charged CPU time:           0 00:00:03.09   Elapsed time:     0 00:00:12.93
================================================================================
Archive-Date: Sat, 11 Apr 1998 18:24:08 +0200
Date: Sat, 11 Apr 1998 12:24:01 -0400
From: SYSTEM@flash.dmc.com
Reply-To: bugs@free.lp.se, SYSTEM@flash.dmc.com
To: bugs@free.lp.se
Message-ID: <980411122401.220004be@flash.dmc.com>
Subject: More problems with ftp_mirror

The following gets an error in FTP_MIRROR:

! File:  FTP_MIRROR.DAT_TEMPLATE
!        Sample FTP_MIRROR.DAT file.
!
!
! REMOTE SETTINGS:
!   SITE sitename
!         "sitename" should be the name of the remote site, such as 
!         ftp.spc.edu or public.tgv.com.  [No default]
!
!   USERNAME username
!         Username to login to the remote system.  Typically this would be 
!         Anonymous.  [Default is Anonymous]
!
!   PASSWORD password
!         Password to login to the remote system.  Typically this would be
!         your password.  [Default is MIRROR@hostname, where "hostname" is
!         the TCP/IP name of your host]
!
!   FTP_SERVER type 
!         Type of FTP server.  Supported types are MULTINET, MADGOAT_FTP,
!	  PROCESS_SOFTWARE and UNIX.  [Default is MADGOAT].
!
!   DIRECTORY remote-dir local-dir
!         Directories to mirror.  Specify full file specification of remote
!         directory, and full file specification of local directory.  Ellipsis
!	  can be used to get a whole directory tree.  If local directory
!	  doesn't exist, it will be created.  If file doesn't exist in local
!	  directory (but does exist in remote directory), it will be copied
!	  (mirrored).  If the date of the file on the remote system is newer
!	  than the local system, the file will be copied to this system
!	  (mirrored).  If the FTP server is UNIX, remote-dir should be a
!	  Unix directory specification.  If it ends with "/...", you get the
!	  same effect as for a VMS directory specification with an ellipsis.
!	  [No default]
!
! LOCAL SETTINGS:
!   FTP_CLIENT type
!         Type of FTP Client.  Supported types are MULTINET and MADGOAT_FTP.
!         [Default is MultiNet]
!
!   COMMAND command
!         DCL command used to initiate FTP client.  [Default is "MULTINET FTP"
!         for the MultiNet FTP Client, and "FTP" for the MadGoat FTP Client]
!
!   FILE_TRANSFER mode
!         Type of file transfer.  "Mode" can be VMS, ASCII, or BINARY.  VMS
!         is recommended (and causes a STRU O VMS transfer to occur).  
!         [Default is VMS]
!
!   LAST_TIME_FILE
!	  A file that contains the limiting time.  No file older than this
!	  time stamp will be downloaded.  The file is updated with the current
!	  time after each download session.  If not set, no limit is applied.
!
! GENERAL SETTINGS:
!   PASSIVE true/false
!         Supports if the FTP client will request PASSIVE (PASV) mode of the
!         FTP Server.  Passive is currently only supported by the MultiNet
!         FTP Server (but not the client).  [Default is FALSE]
!
!   SUBMIT_AFTER time or NONE
!         Time to submit next FTP_MIRROR, either in delta format (+hh:mm:ss) 
!         or in absolute format (hh:mm:ss).  To prevent autosubmission, use
!         NONE.  [Default is +12:00:00]
! 
!   BATCH_QUEUE queue
!         Batch queue for submitting FTP_MIRROR.  [Default is SYS$BATCH]
!
!   MAILTO
!	  A mail address to which the a transfer log should be sent.  If not
!	  set, no mail will be sent.  The same syntax rules apply as when
!	  you send a message from the command line, like this:
!
!		$ MAIL /SUBJECT="foo" 'file' 'address'


SITE ftp.wku.edu
USERNAME anonymous
PASSWORD mirror@acornsw.com
FTP_SERVER MADGOAT
DIRECTORY [.MADGOAT...] MIRROR:[FTP-WKU-EDU.MADGOAT]
DIRECTORY [.MX...] MIRROR:[FTP-WKU-EDU.MX]
DIRECTORY [.VMS.DECWINDOWS...] MIRROR:[FTP-WKU-EDU.VMS.DECWINDOWS]
DIRECTORY [.VMS.FILESERV...] MIRROR:[FTP-WKU-EDU.VMS.FILESERV]
DIRECTORY [.VMS.FREE-VMS...] MIRROR:[FTP-WKU-EDU.VMS.FREE-VMS]
DIRECTORY [.VMS.GCC-FOR-ALPHA...] MIRROR:[FTP-WKU-EDU.VMS.GCC-FOR-ALPHA]
DIRECTORY [.VMS.UNSUPPORTED...] MIRROR:[FTP-WKU-EDU.VMS.UNSUPPORTED]
FTP_CLIENT MULTINET
COMMAND MULTINET FTP
FILE_TRANSFER VMS
SUBMIT_AFTER 00:00:00
BATCH_QUEUE SYS$BATCH
MAILTO SMTP%"""munroe@acornsw.com"""

$!
$! This command procedure is always run when anybody on the entire system
$! logs in. It is equivalent to LOGIN.COM except that the instructions
$! contained herein are executed everytime anyone on the VMS system
$! logs in to their account.
$!
$! For interactive processes, turn on Control T, and set the terminal type
$!
$ mode = f$mode()
$ tt_devname = f$trnlnm("TT")
$ session_mgr_login = (mode .eqs. "INTERACTIVE") .and.	-
    (f$locate("WSA",tt_devname) .ne. f$len(tt_devname))
$ session_detached_process = (mode .eqs. "INTERACTIVE") .and. -
    (f$locate("MBA",tt_devname) .ne. f$len(tt_devname))
$ unknown_devtyp = (mode .eqs. "INTERACTIVE") .and. -
    (f$getdvi("sys$command","devtype") .eq. 0) 
$!
$ if (mode .eqs. "INTERACTIVE") .and. unknown_devtyp .and. (.not. (session_mgr_login .or. session_detached_process))
$ endif
$!
$ if (mode .eqs. "INTERACTIVE") .and. (.not. (session_mgr_login .or. session_detached_process))
$ endif
$!
$! MicroVAX Support Removed from OpenVMS Alpha
$!
$! Place your site-specific LOGIN commands below
$!
$ ALU		:== $TOOLSHED$ROOT:[LICENSE-AXP2.EXE]ALU.EXE
$ CD		:== @TOOLSHED$ROOT:[CD]CD.COM
$ COP*Y		:== COPY/LOG
$ DEL*ETE	:== DELETE/LOG
$ DELT*REE	:== @TOOLSHED$ROOT:[DELTREE.CODE]DELTREE.COM
$ DOALL		:== @TOOLSHED$ROOT:[SQUIRREL-STORE.REF-LIB]DOALL.COM
$ DOCUMENTATION	:== $TOOLSHED$ROOT:[MGBOOK-AXP-60.EXE]MGBOOK.EXE/SHELF SYS$COMMON:[DECW$BOOK]LIBRARY.DECW$BOOKSHELF
$ GZIP		:== $TOOLSHED$ROOT:[GZIP]GZIP.EXE
$ GUNZIP	:== $TOOLSHED$ROOT:[GZIP]GUNZIP.EXE
$ H		:== SET TERMINAL/PAGE=
$ IF F$TRNLNM("HSM_SYSTEM") .NES. "" THEN @HSM_SYSTEM:HSM-LOGIN.COM
$! Copyright 1995 Acorn Software, All Rights Reserved
$! Author:	Dick Munroe
$
$ hsmmakespace :==	@HSM_SYSTEM:HSM-MAKE-SPACE.COM
$ hsmmovefiles :==	@hsm_system:HSM-SELECT-FILES.COM
$ HSauthmaint :==	$hsm_system:HSauthmaint.exe
$ HSMSOFTLINK :==	@hsm_system:HSM-SOFTLINK.COM
$ exit
$ HTML*EDIT	:== EDIT/TPU/COMMAND=FTP$ROOT:[WWW.HTMLEDITOR]HTMLEDITOR.TPU
$ HYPERHELP	:== $HHHOME:[BIN]HYPERHELP
$ LYNX		:== $TOOLSHED$ROOT:[LYNX.LYNX2-6]LYNX.EXE
$ MFTU		:== $TOOLSHED$ROOT:[MFTU.CODE]MFTU.ALPHA_EXE
$ MGBOOK	:== $TOOLSHED$ROOT:[MGBOOK-AXP-60.EXE]MGBOOK.EXE
$ MOST		:== $FTP$ROOT:[MOST]MOST.ALPHA_EXE
$ MOUNT		:== MOUNT/ASSIST
$ NETSCAPE	:== $SYS$SYSTEM:NETSCAPE-EXPORT
$ PAKGEN	:== $DISK$HULK:[TOOLSHED.PAK]ALPHA_PAKGEN.EXE
$ PRIVREQUEST	:== $WWW_ROOT:[000000]PRIVREQUEST.EXE
$ SDCL		:== $toolshed$root:[sdcl.code]sdcl.exe-6
$ TAR		:== $TOOLSHED$ROOT:[VMSTAR]VMSTAR.ALPHA_EXE
$ UNZIP		:== $TOOLSHED$ROOT:[UNZIP]UNZIP.AXP_EXE
$ VMSINSTAL	:== @SYS$UPDATE:VMSINSTAL
$ VMSTAR	:== $TOOLSHED$ROOT:[VMSTAR]VMSTAR.ALPHA_EXE
$ W132		:== SET TERMINAL/WID=132
$ W*IDTH	:== SET TERMINAL/WID=
$ ZCAT		:== $TOOLSHED$ROOT:[GZIP]ZCAT.EXE
$ ZIP		:== $TOOLSHED$ROOT:[ZIP]ZIP.AXP_EXE
$!
$! This command procedure is a framework for building an individual
$! login command procedure. It is executed every time that you log
$! into your account.
$!
$  IF F$MODE() .NES. "INTERACTIVE" THEN GOTO ENDINTER
$ENDINTER:
$  IF F$MODE() .NES. "BATCH" THEN GOTO ENDBATCH
$!
$! Put commands you want executed only in batch mode between this comment
$! and the "ENDBATCH:" symbol.
$!
$
$ENDBATCH:
$!
$! Put commands that you want executed in any mode of login below.
$!
$
$ HTTP		== "RUN/DET/PROCESS_NAME=""<HTTP 80>"" SYS$SYSTEM:LOGINOUT.EXE/INPUT=SYS$MANAGER:RHTTP.COM/OUTPUT=NL:/ERROR=NL:"
$ MGBOOK	:== $SYS$SYSDEVICE:[VTBOOK]MGBOOK.EXE DECW$BOOK:LIBRARY.DECW$BOOKSHELF
$! REBOOT 	== "@SYS$SYSTEM:SHUTDOWN 0 SHUTDOWN YES NO LATER YES NONE"
$ REBOOT 	== "RUN/DET SYS$SYSTEM:LOGINOUT.EXE/INPUT=SYS$MANAGER:RREBOOT.COM/OUTPUT=NL:/ERROR=NL:"
$ REBOOTND 	== "RUN/DET SYS$SYSTEM:LOGINOUT.EXE/INPUT=SYS$MANAGER:RREBOOT-NODISMOUNT.COM/OUTPUT=NL:/ERROR=NL:"
$! SHUTDOWN  	== "@SYS$SYSTEM:SHUTDOWN 0 SHUTDOWN YES NO LATER NO NONE"
$ SHUTDOWN 	== "RUN/DET SYS$SYSTEM:LOGINOUT.EXE/INPUT=SYS$MANAGER:RSHUTDOWN.COM/OUTPUT=NL:/ERROR=NL:"
$ SHUTDOWN1	== "@SYS$SYSTEM:SHUTDOWN"

FTP_Mirror, version T0.8-1-BETA TEST.
Started by SYSTEM on node FLASH on Saturday, 11-APR-1998 12:22:51.

  Remote site:                             ftp.wku.edu
  Remote username:                         anonymous
  Remote password:                         mirror@acornsw.com
  FTP server:                              MadGoat FTP

  Directories:  (remote)                (local)
    [.MADGOAT...]                     MIRROR:[FTP-WKU-EDU.MADGOAT]       
    [.MX...]                          MIRROR:[FTP-WKU-EDU.MX]            
    [.VMS.DECWINDOWS...]              MIRROR:[FTP-WKU-EDU.VMS.DECWINDOWS]
    [.VMS.FILESERV...]                MIRROR:[FTP-WKU-EDU.VMS.FILESERV]  
    [.VMS.FREE-VMS...]                MIRROR:[FTP-WKU-EDU.VMS.FREE-VMS]  
    [.VMS.GCC-FOR-ALPHA...]           MIRROR:[FTP-WKU-EDU.VMS.GCC-FOR-ALP
    [.VMS.UNSUPPORTED...]             MIRROR:[FTP-WKU-EDU.VMS.UNSUPPORTED

  FTP client:                              MultiNet
  DCL command:                             MULTINET FTP
  File transfer mode:                      VMS
  Passive mode:                            No
  Resubmit after:                          00:00:00
  Batch queue:                             SYS$BATCH
  Mail reports to:                         SMTP%"""munroe@acornsw.com"""

%DCL-W-UNDSYM, undefined symbol - check validity and spelling
 \REMOTE_ROOT\
Unexpected error (%X7FF9C21C) in FTP_MIRROR.COM
$	EXIT ERROR_STATUS
  SYSTEM       job terminated at 11-APR-1998 12:23:19.71

  Accounting information:
  Buffered I/O count:             907         Peak working set size:   3680
  Direct I/O count:               418         Peak page file size:    19360
  Page faults:                    452         Mounted volumes:            0
  Charged CPU time:           0 00:00:03.34   Elapsed time:     0 00:00:29.44
================================================================================
Archive-Date: Mon, 13 Apr 1998 00:02:17 +0200
Date: Mon, 13 Apr 1998 00:02:06 +0200
Message-ID: <665-Mon13Apr1998000206+0200-levitte@lp.se>
From: Richard Levitte - VMS Whacker <levitte@lp.se>
Reply-To: bugs@free.lp.se, levitte@lp.se
To: bugs@free.lp.se, SYSTEM@flash.dmc.com
In-Reply-To: <980411081936.220004b2@flash.dmc.com> (SYSTEM@flash.dmc.com)
Subject: Re: I think this is set up right, but it blows up...
MIME-Version: 1.0
Content-Type: Text/Plain; Charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

   And the problem seems to be that you're attempting to write to a
   file thats been closed.  Here's the output log and the
   configuration file:

   [...]
   $
   $       FTP_MIRROR_VERSION = "T0.8-BETA TEST"
   [...]
   $           IF DEBUG THEN WRITE OUTFILE "VERBOSE"
   $           IF DEBUG THEN WRITE OUTFILE "STATISTICS"
   $           WRITE FILE "CONNECT ", CONFIG_SITE
   %RMS-F-FAC, record operation not permitted by specified file access (FAC)

Yes, you're right.  Upgrade to the newest versin, 0.8-1, that corrects
exactly that bug.

Places to find the FTP_MIRROR.ZIP are:

	ftp://ftp.wku.edu/vm/fileserv/
	ftp://ftp.vms.stacken.kth.se/mirrors/wku/vms/fileserv/
	ftp://ftp.lp.se/vms/

-- 
R Levitte, Levitte Programming;  Spannv. 38, I;  S-168 35  Bromma;  SWEDEN
      Tel: +46-8-26 52 47;  Cel: +46-708-20 09 64;  No fax right now
  PGP key fingerprint = A6 96 C0 34 3A 96 AA 6C  B0 D5 9A DF D2 E9 9C 65
   Check http://richard.levitte.org/ for my public key. bastard@bofh.se

          "price, performance, quality.  Choose any two you like"
================================================================================
Archive-Date: Mon, 13 Apr 1998 00:19:07 +0200
Date: Mon, 13 Apr 1998 00:19:03 +0200
Message-ID: <4251-Mon13Apr1998001903+0200-levitte@lp.se>
From: Richard Levitte - VMS Whacker <levitte@lp.se>
Reply-To: bugs@free.lp.se, levitte@lp.se
To: bugs@free.lp.se, SYSTEM@flash.dmc.com
In-Reply-To: <980411122401.220004be@flash.dmc.com> (SYSTEM@flash.dmc.com)
Subject: Re: More problems with ftp_mirror
MIME-Version: 1.0
Content-Type: Text/Plain; Charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

Hmm, I'll look through that problem.  Thanks for the report.

-- 
R Levitte, Levitte Programming;  Spannv. 38, I;  S-168 35  Bromma;  SWEDEN
      Tel: +46-8-26 52 47;  Cel: +46-708-20 09 64;  No fax right now
  PGP key fingerprint = A6 96 C0 34 3A 96 AA 6C  B0 D5 9A DF D2 E9 9C 65
   Check http://richard.levitte.org/ for my public key. bastard@bofh.se

          "price, performance, quality.  Choose any two you like"
================================================================================
Archive-Date: Thu, 23 Apr 1998 09:19:48 +0200
Message-ID: <01b801bd6e87$f913b2e0$c52c67cb@canopus.stmarks.pp.catholic.edu.au>
Reply-To: bugs@free.lp.se, "Geoff Roberts" <geoffrob@stmarks.pp.catholic.edu.au>
From: "Geoff Roberts" <geoffrob@stmarks.pp.catholic.edu.au>
To: <bugs@free.lp.se>
Subject: Problem with FTP_MIRROR
Date: Thu, 23 Apr 1998 16:47:49 +0930
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_NextPart_000_01B5_01BD6ED7.8D117F00"

This is a multi-part message in MIME format.

------=_NextPart_000_01B5_01BD6ED7.8D117F00
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hi,

Having a bit of a problem with this. It starts, and at least some of the
stuff is d/l but it exits prematurely with an odd error msg.

System is a Vax 6310 64mb Ram, VMS 6.0  Multinet 3.5 Rev B, Madgoat FTP
2.3-1

Screen Capture of session follows,

SYS$SYSROOT:[SYSMGR] @ftp_mirror

FTP_Mirror, version T0.8-2-BETA TEST.
Started by GEOFFROB on node ENIGMA on Thursday, 23-APR-1998 16:05:57.

  Remote site:                             ftp.wku.edu
  Remote username:                         anonymous
  Remote password:
mirror@MAIL.STMARKS.PP.CATHOLIC.EDU.AU
  FTP server:                              MadGoat FTP

  Directories:  (remote)                (local)
    [.MADGOAT]                        NETDISK:[PUB.VAX_VMS.MADGOAT]
    [.MX]                             NETDISK:[PUB.VAX_VMS.MX]
    [.MX.CONTRIB]                     NETDISK:[PUB.VAX_VMS.MX.CONTRIB]
    [.MX.MX042]                       NETDISK:[PUB.VAX_VMS.MX.MX042]
    [.MX.MX050]                       NETDISK:[PUB.VAX_VMS.MX.MX050]
    [.VMS]                            NETDISK:[PUB.VAX_VMS.VMS]
    [.VMS.FILESERV]                   NETDISK:[PUB.VAX_VMS.FILESERV]
    [.VMS.UNSUPPORTED]                NETDISK:[PUB.VAX_VMS.UNSUPPORTED]
    [.VMS.UNSUPPORTED.LYNX]           NETDISK:[PUB.VAX_VMS.UNSUPPORTED.LY

  FTP client:                              MadGoat FTP
  DCL command:                             FTP
  File transfer mode:                      VMS
  Passive mode:                            No
  Resubmit after:                          01:00:00
  Batch queue:                             SYS$BATCH
  Mail reports to:                         /SUBJECT="FTP

Ready [Y]? y
$           SUBMIT -
                   /NOTIFY -
                   /LOG_FILE=FTP_MIRROR.LOG -
                   /PARAMETERS=SYS$COMMON:[SYSMGR]FTP_MIRROR.DAT -
                   /noPRINTER -
                   /QUEUE=SYS$BATCH -
                   /NAME="FTP_Mirror" -
                   /AFTER="01:00:00" -
                   /KEEP -
                   SYS$COMMON:[SYSMGR]FTP_MIRROR.COM
Job FTP_Mirror (queue SYS$BATCH, entry 25) started on SYS$BATCH
$           SET NOVERIFY
Leaving FTP_Mirror ...
SYS$SYSROOT:[SYSMGR]

Job FTP_Mirror (queue SYS$BATCH, entry 25) completed
%DELETE-W-SEARCHFAIL, error searching for !AS

SYS$SYSROOT:[SYSMGR]

End of screen capture

The !AS appears several times in the ftp_mirror.com file.
This is probably something a DCL whiz could figure out in 30 seconds flat.

I have attached the ftp_mirror.com and ftp_mirror.dat files

Geoff Roberts
Computer Systems Manager
Saint Marks College
Port Pirie  South Australia.
My ICQ# is 1970476
Ph.  61-411-623-978 (Mobile)
       61-8-8633-0619 (Home)
       61-8-8633-0104 (Fax)

------=_NextPart_000_01B5_01BD6ED7.8D117F00
Content-Type: application/octet-stream;
	name="ftp_mirror.com"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="ftp_mirror.com"

$	VERIFY =3D 'F$VERIFY(F$TRNLNM("FTP_MIRROR_VERIFY"))'
$	SET =3D "SET"
$	SET SYMBOL/SCOPE=3D(noGLOBAL,noLOCAL)
$	GOTO _START_FTP_MIRROR

DESCRIPTION:

  Automates mirroring a remote FTP site.

PARAMETERS:

  P1 - configuration filename

REQUIREMENTS:

Due to the different commands used by FTP Clients, only a few FTP =
Clients are=20
supported.  Due to the different output generated by different FTP =
Servers,
parsing routines have only been written for a few FTP Servers.

  o one of the following FTP Clients (on your system):
      - MultiNet=20
      - MadGoat FTP
      - TCPware

  o mirrored against one of the following FTP Servers (on the remote =
system):
      - MultiNet
      - MadGoat FTP
      - TCPware
      - Unix

 =
=3D----------------------------------------------------------------------=
=3D

Copyright =A9 1994 by Dan Wing.
Copyright =A9 1997 by MadGoat Software, Inc.
Copyright =A9 1998 by Richard Levitte.

This code may be freely distributed and modified for no commercial gain
as long as this copyright notice is retained.  This program is supplied
'as-is', and with no warranty.

Created September 21, 1994, by Dan Wing, TGV <dwing@Cisco.com>
Hacked a lot by Richard Levitte <richard@levitte.org>
Features added by Hunter Goatley <goathunter@madgoat.com>

Please send bug reports to <bugs@free.lp.se>.

 =
=3D----------------------------------------------------------------------=
=3D

  REVERSE CHRONOLOGICAL MODIFICATION HISTORY
  ------------------------------------------

  T0.8-2  20-APR-1998  Richard Levitte <richard@levitte.org>
     Worked around the fact that the MadGoat client (and perhaps others)
     sputters lines like the following one right in the middle of the
     directory output:

	<226 File transfer Okay; Closing data connection.

  T0.8-1  07-APR-1998  Richard Levitte <richard@levitte.org>
     Corrected a small bug that caused a erroneous download to be made
     for a serie of Unix directories.  Of course, if `ls' could output
     the directory name for the first directory listed, we wouldn't
     have these problems...

  T0.8	   6-APR-1998	Hunter Goatley <goathunter@MadGoat.com>
     Explicitly enable or disable passive mode according to file =
setting.

  T0.7    06-APR-1998  Richard Levitte <richard@levitte.org>
     Merged in changes that Hunter Goatley <goathunter@madgoat.com>
     added in 27-MAY-1997.  His comment was:

	Updated for newer MGFTP releases and for TCPware.

  T0.6    05-APR-1998  Richard Levitte <richard@levitte.org>
     - Now understands the output from a Unix FTP server, and can
       download files from it.  ALL files are currently downloaded in
       Image mode.
     - An added feature is that "/..." at the end of a Unix directory
       specification means the same thing as the standard VMS
       ellipsis.
     - CAUTION:  Unix file specifications can ONLY be used as the
       first argument of the DIRECTORY configuratoin parameter.
     - Name conversion for Unix file specifications is done according
       to the following rules:
         1. An ending ".gz" is changed to "-gz" if there is another
            dot in the file name.
         2. And ending ".Z is changed to "_Z" if there is another dot
            in the file name.
         3. All remaining dots except the last are changed to
            underscores, except the last one in a file name.
         4. All other characters that are not legal in a VMS file name
            are changed to dollars.
     - A hack that saves the current time in a file has been added.
       If that file is found and there is a time specification in it,
       it is used to limit the download of file to those newer than
       that time.  The name of this file is configurable.
     - A mail address to send logs to is configurable.

  T0.5	  02-APR-1998  Richard Levitte <richard@levitte.org>
     Many hacks, among other supporting elipsis in directory specs,
     and support for the Process Software FTP server.  Unfortunatelly,
     I haven't made many notes of my changes.

  T0.0    25-OCT-1994  Dan Wing, wing@tgv.com
     Initial release.

$!
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=
!!
$
$ _START_FTP_MIRROR:=20
$
$	ON WARNING THEN GOTO _ERROR
$	ON CONTROL_Y THEN GOTO _ABORT
$
$	FTP_MIRROR_VERSION =3D "T0.8-2-BETA TEST"
$	WRITE SYS$OUTPUT F$FAO("!/FTP_Mirror, version !AS.!/Started by !AS on =
node !AS on !AS, !AS !8AS.", -
			       FTP_MIRROR_VERSION, -
			       F$EDIT(F$GETJPI(0,"USERNAME"),"TRIM"), -
			       F$GETSYI("NODENAME"), -
			       F$CVTIME(,,"WEEKDAY"), -
			       F$CVTIME(,"ABSOLUTE","DATE"), -
			       F$CVTIME(,,"TIME"))
$
$	TRUE =3D 1
$	FALSE =3D 0
$	DEBUG =3D FALSE
$	IF F$TRNLNM("FTP_MIRROR_DEBUG") THEN DEBUG =3D TRUE
$	IF DEBUG THEN WRITE SYS$ERROR "FTP_Mirror debugging enabled."
$
$! setup defaults.  These can be overridden in the configuration file
$
$	CONFIG_FTP_CLIENT           =3D "MadGoat FTP"
$	CONFIG_COMMAND              =3D "FTP"
$	CONFIG_FTP_SERVER           =3D "MadGoat FTP"
$	CONFIG_SITE                 =3D ""
$	CONFIG_USERNAME             =3D "anonymous"
$	IF F$TRNLNM("UCX$INET_HOST") .NES. "" THEN CONFIG_PASSWORD =3D =
"mirror@" + F$TRNLNM("UCX$INET_HOST")
$	IF F$TRNLNM("MULTINET_HOST_NAME") .NES. "" THEN CONFIG_PASSWORD =3D =
"mirror@" + F$TRNLNM("MULTINET_HOST_NAME")
$	CONFIG_PASSIVE              =3D FALSE
$	CONFIG_SUBMIT_AFTER         =3D "+12:00:00"
$	CONFIG_QUEUE                =3D "SYS$BATCH"
$	CONFIG_FILE_TRANSFER        =3D "VMS"
$	CONFIG_LAST_TIME_FILE       =3D ""
$	CONFIG_MAILTO               =3D ""
$
$	VALID_CONFIGURATION =3D TRUE           ! assume the best
$
$	TEMPFILE_1 =3D "SYS$SCRATCH:FTP_MIRROR_1_" + F$GETJPI(0,"PID") + =
".TMP"
$	TEMPFILE_2 =3D "SYS$SCRATCH:FTP_MIRROR_2_" + F$GETJPI(0,"PID") + =
".TMP"
$	TEMPFILE_3 =3D "SYS$SCRATCH:FTP_MIRROR_3_" + F$GETJPI(0,"PID") + =
".TMP"
$	TEMPFILE_4 =3D "SYS$SCRATCH:FTP_MIRROR_4_" + F$GETJPI(0,"PID") + =
".TMP"
$
$	CONFIG_LAST_TIME =3D ""
$	CONFIG_DIR_TOTAL =3D 0
$
$	TYPE_MULTINET =3D 1
$	TYPE_MGFTP    =3D 2
$	TYPE_TCPWARE  =3D 3
$	TYPE_UNIX     =3D 128
$	TYPE_OTHER    =3D 255
$
$	IF P1 .EQS. "" THEN P1 =3D "FTP_MIRROR.DAT"
$! make sure CONFIGURATION_FILE contains a full path, but also make sure
$! you get the right directory.  Guess what F$PARSE does to =
non-concealed
$! multivalued logical names.  It's not a pretty sight.  --  Richard =
Levitte
$	CONFIGURATION_FILE =3D F$SEARCH(P1)
$	IF CONFIGURATION_FILE .EQS. "" THEN GOTO _NO_CONFIG_FILE
$	GOSUB _CLEANUP
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$	OPEN/READ/ERROR=3D_ERROR FILE 'CONFIGURATION_FILE'
$ _CONFIG_LOOP:=09
$	READ/END_OF_FILE=3D_EXIT_CONFIG_LOOP/ERROR=3D_ERROR FILE RECORD
$	RECORD =3D F$EDIT(RECORD,"COMPRESS,UNCOMMENT")
$	IF RECORD .EQS. "" THEN GOTO _CONFIG_LOOP
$
$	PARA1 =3D F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE")
$	PARA2 =3D F$ELEMENT(1," ",RECORD)
$	PARA3 =3D F$ELEMENT(2," ",RECORD)
$ =20
$	VALID_RECORD =3D FALSE
$
$	IF PARA1 .EQS. "SITE"
$	THEN
$	    CONFIG_SITE =3D PARA2
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "USERNAME"
$	THEN
$	    CONFIG_USERNAME =3D PARA2
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "PASSWORD"
$	THEN
$	    CONFIG_PASSWORD =3D PARA2
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "DIRECTORY"
$	THEN
$	    CONFIG_DIRECTORIES_'CONFIG_DIR_TOTAL' =3D PARA2 + "," + PARA3
$	    CONFIG_DIR_TOTAL =3D CONFIG_DIR_TOTAL + 1
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "COMMAND"
$	THEN
$	    CONFIG_COMMAND =3D F$EXTRACT(F$LOCATE(" ",RECORD)+1,-1,RECORD)
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "PASSIVE"
$	THEN
$	    CONFIG_PASSIVE =3D PARA2
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "PRIV"
$	THEN
$	    ORIGINAL_PRIV =3D F$SETPRV(PARA2)
$	    IF .NOT. F$PRIVILEGE(PARA2) THEN WRITE SYS$OUTPUT "%%Warning - not =
all requested privileges are authorized."
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "SUBMIT_AFTER"
$	THEN
$	    CONFIG_SUBMIT_AFTER =3D F$EDIT("''PARA2' ''PARA3'","TRIM")
$	    IF F$EDIT(PARA2,"UPCASE") .EQS. "NONE" -
	       .OR. F$EDIT(PARA3,"UPCASE") .EQS. "ONE" THEN -
	       CONFIG_SUBMIT_AFTER =3D "NONE"
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "BATCH_QUEUE"
$	THEN
$	    CONFIG_QUEUE =3D PARA2
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_CLIENT"
$	THEN
$	    CONFIG_FTP_CLIENT =3D F$EDIT(PARA2,"UPCASE")
$	    IF CONFIG_FTP_CLIENT .EQS. "MULTINET"=20
$	    THEN=20
$		CONFIG_FTP_CLIENT =3D "MultiNet"
$		CONFIG_COMMAND =3D "MULTINET FTP"
$		VALID_RECORD =3D TRUE
$	    ENDIF
$	    IF CONFIG_FTP_CLIENT .EQS. "MADGOAT" -
	       .OR. CONFIG_FTP_CLIENT .EQS. "MADGOAT_FTP"
$	    THEN=20
$		CONFIG_FTP_CLIENT =3D "MadGoat FTP"
$		CONFIG_COMMAND =3D "FTP"
$		VALID_RECORD =3D TRUE
$	    ENDIF
$	    IF CONFIG_FTP_CLIENT .EQS. "TCPWARE"
$	    THEN
$		CONFIG_FTP_CLIENT =3D "TCPware"
$		CONFIG_COMMAND =3D "FTP"
$		VALID_RECORD =3D TRUE
$	    ENDIF
$	ENDIF
$
$	IF PARA1 .EQS. "FTP_SERVER"
$	THEN
$	    CONFIG_FTP_SERVER =3D F$EDIT(PARA2,"UPCASE")
$	    IF CONFIG_FTP_SERVER .EQS. "MULTINET" THEN -
	       CONFIG_FTP_SERVER =3D "MultiNet"
$	    IF CONFIG_FTP_SERVER .EQS. "MADGOAT" -
	       .OR. CONFIG_FTP_SERVER .EQS. "MADGOAT_FTP" -
	       THEN CONFIG_FTP_SERVER =3D "MadGoat FTP"
$	    IF CONFIG_FTP_SERVER .EQS. "TCPWARE" THEN -
	       CONFIG_FTP_SERVER =3D "TCPware"
$	    IF CONFIG_FTP_SERVER .EQS. "UNIX" THEN -
	       CONFIG_FTP_SERVER =3D "Unix"
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "FILE_TRANSFER"
$	THEN
$	    CONFIG_FILE_TRANSFER =3D F$EDIT(PARA2,"UPCASE")
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "LAST_TIME_FILE"
$	THEN
$	    CONFIG_LAST_TIME_FILE =3D F$EDIT(PARA2,"UPCASE")
$	    IF F$SEARCH(CONFIG_LAST_TIME_FILE) .NES. ""
$	    THEN
$		OPEN/READ FOO 'CONFIG_LAST_TIME_FILE'
$		READ FOO CONFIG_LAST_TIME
$		CONFIG_LAST_TIME =3D F$CVTIME(CONFIG_LAST_TIME,"COMPARISON")
$		CLOSE FOO
$	    ELSE
$		CONFIG_LAST_TIME =3D "1-JAN-1900"
$	    ENDIF
$	    ! We remove oen day just to make sure we get all files in
$	    ! spite of all kinds of timezone junk.  So we might get
$	    ! duplicates at times...  So what?
$	    CONFIG_NEXT_TIME =3D F$CVTIME("-1-","ABSOLUTE")
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF PARA1 .EQS. "MAILTO"
$	THEN
$	    CONFIG_MAILTO =3D F$EDIT(PARA2,"UPCASE")
$	    VALID_RECORD =3D TRUE
$	ENDIF
$
$	IF .NOT. VALID_RECORD
$	THEN
$	    WRITE SYS$OUTPUT "%%Warning - invalid configuration file record =
\", RECORD, "\"
$	    VALID_CONFIGURATION =3D FALSE
$	ENDIF
$
$	GOTO _CONFIG_LOOP
$ =20
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$ _EXIT_CONFIG_LOOP:=20
$	CLOSE FILE
$
$	IF .NOT. VALID_CONFIGURATION
$	THEN
$	    WRITE SYS$OUTPUT "Error in configuration file."
$	    GOTO _EXIT
$	ENDIF
$
$	FTP_CLIENT_TYPE =3D TYPE_OTHER
$	IF CONFIG_FTP_CLIENT .EQS. "MultiNet" THEN -
	   FTP_CLIENT_TYPE =3D TYPE_MULTINET
$	IF CONFIG_FTP_CLIENT .EQS. "MadGoat FTP" THEN -
	   FTP_CLIENT_TYPE =3D TYPE_MGFTP
$	IF CONFIG_FTP_CLIENT .EQS. "TCPware" THEN -
	   FTP_CLIENT_TYPE =3D TYPE_TCPWARE
$
$	FTP_SERVER_TYPE =3D TYPE_OTHER
$	IF CONFIG_FTP_SERVER .EQS. "MultiNet" THEN -
	   FTP_SERVER_TYPE =3D TYPE_MULTINET
$	IF CONFIG_FTP_SERVER .EQS. "MadGoat FTP" THEN -
	   FTP_SERVER_TYPE =3D TYPE_MGFTP
$	IF CONFIG_FTP_SERVER .EQS. "TCPware" THEN -
	   FTP_SERVER_TYPE =3D TYPE_TCPWARE
$	IF CONFIG_FTP_SERVER .EQS. "Unix" THEN -
	   FTP_SERVER_TYPE =3D TYPE_UNIX
$
$	WRITE SYS$OUTPUT ""
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Remote site:",CONFIG_SITE)
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Remote =
username:",CONFIG_USERNAME)
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Remote =
password:",CONFIG_PASSWORD)
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","FTP server:",CONFIG_FTP_SERVER)
$	WRITE SYS$OUTPUT ""
$	WRITE SYS$OUTPUT "  Directories:  (remote)                (local)"
$
$	COUNT =3D 0
$ _DISPLAY_LOOP_1:=20
$	IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_DISPLAY_LOOP_1
$	WRITE SYS$OUTPUT F$FAO("    !33AS !35AS", -
			       F$ELEMENT(0,",",CONFIG_DIRECTORIES_'COUNT'), -
			       F$ELEMENT(1,",",CONFIG_DIRECTORIES_'COUNT'))
$	IF =
F$PARSE(F$ELEMENT(1,",",CONFIG_DIRECTORIES_'COUNT'),,,,"SYNTAX_ONLY") =
.EQS. ""
$	THEN
$	    WRITE SYS$ERROR F$FAO("!5** Local directory specification (above) =
is invalid VMS syntax.")
$	    VALID_CONFIGURATION =3D FALSE
$	ENDIF
$	COUNT =3D COUNT + 1
$	GOTO _DISPLAY_LOOP_1
$ _EXIT_DISPLAY_LOOP_1:=20
$
$	WRITE SYS$OUTPUT ""
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","FTP client:",CONFIG_FTP_CLIENT)
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","DCL command:",CONFIG_COMMAND)
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","File transfer =
mode:",CONFIG_FILE_TRANSFER)
$	IF CONFIG_PASSIVE
$	THEN
$	    CONFIG_PASSIVE =3D TRUE
$	    WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Passive mode:","Yes")
$	ELSE
$	    CONFIG_PASSIVE =3D FALSE
$	    WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Passive mode:","No")
$	ENDIF
$	IF CONFIG_LAST_TIME .NES. "" THEN -
	   WRITE SYS$OUTPUT F$FAO("  !40AS !AS",-
				  "Only get files created after:",-
				  CONFIG_LAST_TIME)
$	WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Resubmit after:",-
			       CONFIG_SUBMIT_AFTER)
$	IF CONFIG_SUBMIT_AFTER .NES. "NONE" THEN -
	   WRITE SYS$OUTPUT F$FAO("  !40AS !AS","Batch queue:",CONFIG_QUEUE)
$	IF CONFIG_MAILTO .NES. "" THEN -
	   WRITE SYS$OUTPUT F$FAO("  !40AS !AS",-
				  "Mail reports to:",-
				  CONFIG_MAILTO)
$	WRITE SYS$OUTPUT ""
$
$	IF CONFIG_SITE .EQS. "" .OR. CONFIG_USERNAME .EQS. "" .OR. -
	   CONFIG_PASSWORD .EQS. "" .OR. CONFIG_DIRECTORIES_0 .EQS. "" .OR. -
	   CONFIG_SUBMIT_AFTER .EQS. ""
$	THEN
$	    WRITE SYS$ERROR "Missing required configuration setting; exiting."
$	    WRITE SYS$ERROR "Check for missing username, directory, password, =
or submit-after."
$	    GOTO _EXIT
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .NE. TYPE_MULTINET -
	   .AND. FTP_CLIENT_TYPE .NE. TYPE_MGFTP -
	   .AND. FTP_CLIENT_TYPE .NE. TYPE_TCPWARE
$	THEN
$	    WRITE SYS$ERROR "Invalid FTP Client -- only \MULTINET\, \TCPWARE\, =
or \MADGOAT FTP\ are allowed."
$	    GOTO _EXIT
$	ENDIF
$
$!$	IF CONFIG_PASSIVE .AND. (FTP_CLIENT_TYPE .EQ. TYPE_MGFTP .OR. -
$!				 FTP_SERVER_TYPE .EQ. TYPE_MGFTP)
$!$	THEN
$!$	    WRITE SYS$ERROR "PASSIVE isn't supported by MadGoat FTP client =
or server."
$!$	    GOTO _EXIT
$!$	ENDIF
$
$	IF FTP_SERVER_TYPE .NE. TYPE_MULTINET -
	   .AND. FTP_SERVER_TYPE .NE. TYPE_MGFTP -
	   .AND. FTP_SERVER_TYPE .NE. TYPE_TCPWARE -
	   .AND. FTP_SERVER_TYPE .NE. TYPE_UNIX
$	THEN
$	    WRITE SYS$ERROR "Invalid FTP Server.  Only MultiNet, MadGoat FTP, =
TCPware, and UNIX are supported."
$	    GOTO _EXIT
$	ENDIF
$
$	IF .NOT. VALID_CONFIGURATION
$	THEN
$	    WRITE SYS$ERROR "Invalid configuration -- see above reason"
$	    GOTO _EXIT
$	ENDIF
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$	IF F$MODE() .EQS. "INTERACTIVE"
$	THEN
$	    READ SYS$COMMAND CHECK/PROMPT=3D"Ready [Y]? "/END_OF_FILE=3D_ABORT
$	ELSE
$	    CHECK :=3D Y
$	ENDIF
$
$	IF .NOT. CHECK .AND. CHECK .NES. "" THEN GOTO _ABORT
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$	IF CONFIG_SUBMIT_AFTER .NES. "NONE" .AND. F$MODE() .NES. "BATCH"
$	THEN
$	    GOTO _SUBMIT
$	ENDIF
$         =20
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$!  Obtain the list of files on the remote system
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$	OPEN/WRITE FILE 'TEMPFILE_1'
$	COUNT =3D 0
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET
$	THEN
$	    IF CONFIG_PASSIVE
$	    THEN WRITE FILE "PASSIVE ON"
$	    ELSE WRITE FILE "PASSIVE OFF"
$	    ENDIF
$	    WRITE FILE "EXIT-ON-ERROR ON"
$	    WRITE FILE "PROMPT-FOR-MISSING-ARGUMENTS OFF"
$	    IF DEBUG THEN WRITE FILE "VERBOSE"
$	    IF DEBUG THEN WRITE FILE "STATISTICS"
$	    WRITE FILE "CONNECT ", CONFIG_SITE
$	    WRITE FILE "USER ", CONFIG_USERNAME
$	    WRITE FILE "PASS ", CONFIG_PASSWORD
$	    IF CONFIG_FILE_TRANSFER .EQS. "VMS"
$	    THEN
$		WRITE FILE "STRUCTURE VMS"
$	    ELSE
$		WRITE FILE "TYPE ", CONFIG_FILE_TRANSFER
$	    ENDIF
$	    WRITE FILE "PWD"
$	ENDIF  ! multinet
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MGFTP
$	THEN
$	    WRITE FILE "SET BATCH"
$	    IF CONFIG_PASSIVE
$	    THEN WRITE FILE "SET PASSIVE"
$	    ELSE WRITE FILE "SET NOPASSIVE"
$	    ENDIF
$	    IF CONFIG_FILE_TRANSFER .EQS. "VMS"
$	    THEN
$		WRITE FILE "SET STRUCTURE VMS"
$	    ELSE
$		WRITE FILE "SET TYPE ", CONFIG_FILE_TRANSFER
$	    ENDIF
$	    WRITE FILE "PWD"
$	ENDIF  ! madgoat
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_TCPWARE
$	THEN
$	    IF CONFIG_PASSIVE
$	    THEN WRITE FILE "SET PASSIVE"
$	    ELSE WRITE FILE "SET NOPASSIVE"
$	    ENDIF
$	    IF DEBUG THEN WRITE FILE "SET DEBUG/CLASS=3DREPLIES"
$	    WRITE FILE "CONNECT ", CONFIG_SITE, " ", -
		  CONFIG_USERNAME, " ", CONFIG_PASSWORD
$	    IF CONFIG_FILE_TRANSFER .EQS. "VMS"
$	    THEN
$		WRITE FILE "STRUCTURE VMS"
$	    ELSE
$		WRITE FILE "TYPE ", CONFIG_FILE_TRANSFER
$	    ENDIF
$	    WRITE FILE "PWD"
$	ENDIF  ! tcpware
$
$	COUNT =3D 0
$ _GEN_FILE_LOOP:=20
$	IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_GEN_FILE_LOOP
$	DIRECTORY_NAME =3D F$ELEMENT(0,",",CONFIG_DIRECTORIES_'COUNT')
$	DIRECTORY_NAME2 =3D DIRECTORY_NAME - "/..." - "..."
$	WRITE FILE "SPAWN WRITE SYS$OUTPUT ""<<<REMOTE_DIRECTORY =
''DIRECTORY_NAME2'>>>"""
$	IF FTP_SERVER_TYPE .EQ. TYPE_UNIX .AND. -
	   F$EXTRACT(F$LENGTH(DIRECTORY_NAME)-4, 4, DIRECTORY_NAME) .EQS. =
"/..." -
	   THEN DIRECTORY_NAME =3D "-RlL " + F$EXTRACT(0, =
F$LENGTH(DIRECTORY_NAME)-4, DIRECTORY_NAME)
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET THEN -
	   WRITE FILE "DIR """, DIRECTORY_NAME, """"
$!RL	   WRITE FILE "DIR """, DIRECTORY_NAME, """ FTP_DIR:"
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MGFTP -
	   .OR. FTP_CLIENT_TYPE .EQ. TYPE_TCPWARE THEN -
	   WRITE FILE "DIR """, DIRECTORY_NAME, """"
$!RL	   WRITE FILE "DIR """, DIRECTORY_NAME, """/OUTPUT=3DFTP_DIR:"
$	COUNT =3D COUNT + 1
$	GOTO _GEN_FILE_LOOP
$
$ _EXIT_GEN_FILE_LOOP:=20
$	WRITE FILE "EXIT"
$	CLOSE FILE
$	IF DEBUG THEN WRITE SYS$ERROR "-Debug- Contents of input file:"
$	IF DEBUG THEN TYPE/OUTPUT=3DSYS$ERROR 'TEMPFILE_1'
$
$	IF DEBUG THEN WRITE SYS$ERROR "-Debug- Connecting to remote system..."
$!RL$	IF F$SEARCH(TEMPFILE_2) .NES. "" THEN DELETE 'TEMPFILE_2';*
$!RL$	TYPE NLA0: /OUTPUT=3D'TEMPFILE_2'
$!RL$	SET FILE/VERSION_LIMIT=3D0 'TEMPFILE_2'
$!RL$	IF F$SEARCH(TEMPFILE_4) .NES. "" THEN DELETE 'TEMPFILE_4';*
$!RL$	TYPE NLA0: /OUTPUT=3D'TEMPFILE_4'
$!RL$	SET FILE/VERSION_LIMIT=3D0 'TEMPFILE_4'
$	IF F$SEARCH(TEMPFILE_3) .NES. "" THEN DELETE 'TEMPFILE_3';*
$
$	OLD_SYMBOL_SCOPE =3D F$ENVIRONMENT("SYMBOL_SCOPE")
$	SET SYMBOL/SCOPE=3D(GLOBAL,LOCAL)
$
$!RL$	IF DEBUG THEN SHOW LOG SYS$OUTPUT/FULL
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET
$	THEN
$	    SET noON
$!RL$	    OPEN/WRITE FTP_DIR 'TEMPFILE_2'
$!RL$	    DEFINE SYS$OUTPUT 'TEMPFILE_4'
$	    DEFINE SYS$OUTPUT 'TEMPFILE_3'
$	    'CONFIG_COMMAND' -
		  /NOINITIALIZATION -
		  /TAKE_FILE=3D'TEMPFILE_1'
$	    STATUS =3D $STATUS
$	    DEASSIGN SYS$OUTPUT
$!RL$	    CLOSE FTP_DIR
$	    SET ON
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MGFTP
$	THEN
$	    SET noON
$!RL$	    OPEN/WRITE FTP_DIR 'TEMPFILE_2'
$!RL$	    DEFINE SYS$OUTPUT 'TEMPFILE_4'
$	    DEFINE SYS$OUTPUT 'TEMPFILE_3'
$	    'CONFIG_COMMAND' -
		  'CONFIG_SITE' -
		  /USERNAME=3D"''CONFIG_USERNAME'" -
		  /PASSWORD=3D"''CONFIG_PASSWORD'" -
		  /INITIALIZATION=3D'TEMPFILE_1'
$	    STATUS =3D $STATUS
$	    DEASSIGN SYS$OUTPUT
$!RL$	    CLOSE FTP_DIR
$	    SET noON
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_TCPWARE
$	THEN
$	    SET noON
$!RL$	    OPEN/WRITE FTP_DIR 'TEMPFILE_2'
$!RL$	    DEFINE SYS$OUTPUT 'TEMPFILE_4'
$	    DEFINE SYS$OUTPUT 'TEMPFILE_3'
$	    DEFINE/USER FTP_STARTUP 'tempfile_1'
$	    'CONFIG_COMMAND'
$	    STATUS =3D $STATUS
$	    DEASSIGN SYS$OUTPUT
$!RL$	    CLOSE FTP_DIR
$	    SET noON
$	ENDIF
$
$	SET SYMBOL/SCOPE=3D('OLD_SYMBOL_SCOPE')
$
$!RL$	IF F$SEARCH(TEMPFILE_3) .NES. "" THEN DELETE 'TEMPFILE_3';*
$!RL$	COPY/CONCATENATE 'TEMPFILE_4','TEMPFILE_2' 'TEMPFILE_3'
$	IF DEBUG THEN WRITE SYS$ERROR "-Debug- Output from FTP session:"
$	IF DEBUG THEN TYPE/OUTPUT=3DSYS$ERROR 'TEMPFILE_3'
$
$	IF .NOT. STATUS THEN GOTO _ERROR
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$! Determine which files we will need to get from the remote system
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$	OPEN/READ FILE 'TEMPFILE_3'
$	IF F$SEARCH(TEMPFILE_1) .NES. "" THEN DELETE 'TEMPFILE_1';
$	OPEN/WRITE OUTFILE 'TEMPFILE_1'
$	TYPE NLA0: /OUTPUT=3D'TEMPFILE_4'
$	OPEN/APPEND REPORT_FILE 'TEMPFILE_4'
$	WRITE REPORT_FILE "(This message generated by FTP_MIRROR.COM)"
$	WRITE REPORT_FILE ""
$	WRITE REPORT_FILE "New files at site: ", CONFIG_SITE
$	WRITE REPORT_FILE ""
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET
$	THEN
$	    IF CONFIG_PASSIVE THEN WRITE OUTFILE "PASSIVE ON"
$	    WRITE OUTFILE "EXIT-ON-ERROR ON"
$	    WRITE OUTFILE "PROMPT-FOR-MISSING-ARGUMENTS OFF"
$	    IF DEBUG THEN WRITE OUTFILE "VERBOSE"
$	    IF DEBUG THEN WRITE OUTFILE "STATISTICS"
$	    WRITE OUTFILE "CONNECT ", CONFIG_SITE
$	    WRITE OUTFILE "USER ", CONFIG_USERNAME
$	    WRITE OUTFILE "PASS ", CONFIG_PASSWORD
$	    IF CONFIG_FILE_TRANSFER .EQS. "VMS"
$	    THEN
$		WRITE OUTFILE "STRUCTURE VMS"
$	    ELSE
$		WRITE OUTFILE "TYPE ", CONFIG_FILE_TRANSFER
$	    ENDIF
$	    WRITE OUTFILE "PWD"
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MGFTP
$	THEN
$	    WRITE OUTFILE "SET BATCH"
$	    IF CONFIG_FILE_TRANSFER .EQS. "VMS"
$	    THEN
$		WRITE OUTFILE "SET STRUCTURE VMS"
$	    ELSE
$		WRITE OUTFILE "SET TYPE ", CONFIG_FILE_TRANSFER
$	    ENDIF
$	    WRITE OUTFILE "PWD"
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_TCPWARE
$	THEN
$	    IF CONFIG_PASSIVE THEN WRITE OUTFILE "SET PASSIVE"
$	    IF DEBUG THEN WRITE OUTFILE "SET DEBUG/CLASS=3DREPLIES"
$	    WRITE OUTFILE "CONNECT ", CONFIG_SITE, " ", -
		  CONFIG_USERNAME, " ", CONFIG_PASSWORD
$	    IF CONFIG_FILE_TRANSFER .EQS. "VMS"
$	    THEN
$		WRITE OUTFILE "STRUCTURE VMS"
$	    ELSE
$		WRITE OUTFILE "TYPE ", CONFIG_FILE_TRANSFER
$	    ENDIF
$	    WRITE OUTFILE "PWD"
$	ENDIF  ! tcpware
$
$	GET_FILE_COUNT =3D 0
$
$	LOCAL_DIRECTORY =3D ""
$	LOCAL_FILENAME =3D ""
$ _READ_FILE_LOOP:
$	READ/END_OF_FILE=3D_EXIT_READ_FILE_LOOP FILE RECORD
$	IF F$EDIT(RECORD,"COLLAPSE") .EQS. "" THEN GOTO _READ_FILE_LOOP
$	IF DEBUG THEN WRITE SYS$ERROR F$FAO("-Debug- Record is: \!AS\", =
RECORD)
$	RECORD =3D F$EDIT(RECORD,"COMPRESS")
$	IF F$EXTRACT(0,5,RECORD) .EQS. "<257 " -
	   .OR. F$EXTRACT(0,4,RECORD) .EQS. "257 "
$	THEN
$	    REMOTE_ROOT =3D F$ELEMENT(1," ",RECORD)
$	    IF F$EXTRACT(0,1,REMOTE_ROOT) .EQS. """" THEN REMOTE_ROOT =3D =
F$ELEMENT(1,"""",REMOTE_ROOT)
$	    IF DEBUG THEN WRITE SYS$ERROR "-Debug- Remote root now: ", =
REMOTE_ROOT
$	    GOTO _READ_FILE_LOOP
$	ENDIF
$
$	IF F$EXTRACT(0,10,RECORD) .EQS. "Directory "
$	THEN=20
$	    RECORD =3D F$EXTRACT(10,F$LENGTH(RECORD)-10,RECORD)
$	    IF DEBUG THEN WRITE SYS$ERROR F$FAO("-Debug- Record changed: =
\!AS\", RECORD)
$	ENDIF
$	IF F$EDIT(F$ELEMENT(0," ",RECORD),"UPCASE") .EQS. =
"<<<REMOTE_DIRECTORY"
$!RL	   .AND. LOCAL_DIRECTORY .EQS. ""
$	THEN=20
$	    RECORD =3D F$ELEMENT(0,">",F$ELEMENT(1," ",RECORD))
$	    IF FTP_SERVER_TYPE .EQ. TYPE_UNIX THEN RECORD =3D RECORD + ":"
$	    IF DEBUG THEN WRITE SYS$ERROR F$FAO("-Debug- Record changed: =
\!AS\", RECORD)
$	ENDIF
$
$	IF RECORD .EQS. "" .OR. -
	   (FTP_SERVER_TYPE .NE. TYPE_UNIX .AND. -
	    RECORD .NES. F$EDIT(RECORD,"UPCASE")) THEN -
	   GOTO _READ_FILE_LOOP      ! no lowercase in files/directories
$	C =3D F$EXTRACT(0,1,RECORD)
$	IF C .EQS. "<" .OR. C .EQS. "%" THEN GOTO _READ_FILE_LOOP
$	IF FTP_SERVER_TYPE .EQ. TYPE_UNIX .AND. -
	   F$TYPE(C) .EQS. "INTEGER" THEN GOTO _READ_FILE_LOOP
$	IF FTP_SERVER_TYPE .EQ. TYPE_UNIX .AND. -
	   F$ELEMENT(0," ",RECORD) .EQS. "total"
$	THEN
$	    TMP3 =3D F$EDIT(RECORD - F$ELEMENT(0," ",RECORD),"TRIM")
$	    IF F$TYPE(TMP3) .EQS. "INTEGER" THEN GOTO _READ_FILE_LOOP
$	ENDIF
$
$	IF F$LOCATE(":",F$ELEMENT(0," ",RECORD)) .NE. F$LENGTH(F$ELEMENT(0," =
",RECORD))
$	THEN
$	    ! we have a directory
$	    LOCAL_DIRECTORY =3D ""
$	    IF FTP_SERVER_TYPE .EQ. TYPE_UNIX
$	    THEN
$		REMOTE_DIRECTORY =3D F$ELEMENT(0,":",RECORD)
$		IF F$EXTRACT(0,1,REMOTE_DIRECTORY) .NES. "/"
$		THEN
$		    IF F$EXTRACT(F$LENGTH(REMOTE_ROOT)-1,1,REMOTE_ROOT) .NES. "/" =
THEN -
		       REMOTE_DIRECTORY =3D "/" + REMOTE_DIRECTORY
$		    REMOTE_DIRECTORY =3D REMOTE_ROOT + REMOTE_DIRECTORY
$		ENDIF
$		IF F$EXTRACT(F$LENGTH(REMOTE_DIRECTORY)-1,1,REMOTE_DIRECTORY) -
		   .NES. "/" THEN -
		   REMOTE_DIRECTORY =3D REMOTE_DIRECTORY + "/"
$	    ELSE
$		REMOTE_DIRECTORY =3D F$ELEMENT(0," ",RECORD)
$	    ENDIF
$	    IF DEBUG THEN WRITE SYS$ERROR "-Debug- Remote directory now: ", =
REMOTE_DIRECTORY
$	    ! now we have to find it in our mappings
$	    COUNT =3D 0
$ _FIND_LOOP:=20
$	    IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_FIND_LOOP
$	    TMP =3D F$ELEMENT(0,",",CONFIG_DIRECTORIES_'COUNT')
$	    IF FTP_SERVER_TYPE .EQ. TYPE_UNIX
$	    THEN
$		IF F$EXTRACT(0,1,TMP) .NES. "/"
$		THEN
$		    IF F$EXTRACT(F$LENGTH(REMOTE_ROOT)-1,1,REMOTE_ROOT) .NES. "/" =
THEN -
		       TMP =3D "/" + TMP
$		    TMP =3D REMOTE_ROOT + TMP
$		ENDIF
$	    ELSE
$		IF F$EXTRACT(0,2,TMP) .EQS. "[." THEN -
		   TMP =3D F$EXTRACT(0,F$LENGTH(REMOTE_ROOT)-1,REMOTE_ROOT) + -
		   F$EXTRACT(1,999,TMP)
$		IF F$EXTRACT(0,1,TMP) .EQS. "[" THEN -
		   TMP =3D F$ELEMENT(0,"[",REMOTE_ROOT) + TMP
$	    ENDIF
$	    IF DEBUG THEN WRITE SYS$ERROR "-Debug- Remote directory to check =
for: ", TMP
$	    ENDING =3D "...]"
$	    IF FTP_SERVER_TYPE .EQ. TYPE_UNIX THEN ENDING =3D "..."
$	    LE =3D F$LENGTH(ENDING)
$	    IF F$EXTRACT(F$LENGTH(TMP)-LE,LE,TMP) -
	       .EQS. ENDING
$	    THEN
$		TMP =3D F$EXTRACT(0,F$LENGTH(TMP)-F$LENGTH(ENDING),TMP)
$		IF TMP .EQS. F$EXTRACT(0,F$LENGTH(TMP),REMOTE_DIRECTORY)
$		THEN
$		    ! we have a mapping
$		    LOCAL_DIRECTORY =3D F$ELEMENT(1,",",CONFIG_DIRECTORIES_'COUNT')
$		    IF F$EXTRACT(F$LENGTH(LOCAL_DIRECTORY)-4,4,LOCAL_DIRECTORY) .EQS. =
"...]"
$		    THEN
$			TMP2 =3D REMOTE_DIRECTORY
$			IF FTP_SERVER_TYPE .EQ. TYPE_UNIX
$			THEN
$			    ALLOWED_CHARACTERS =3D =
"ABCDEFGHIKJLMNOPQRSTUVWXYZabcdefghikjlmnopqrstuvwxyz0123456789-_$/."
$			    I =3D 0
$ LOOP_CHARACTERS1:	   =20
$			    C =3D F$EXTRACT(I,1,TMP2)
$			    IF C .EQS. "." THEN -
			       TMP2 =3D F$EXTRACT(0,I,TMP2) + "_" + =
F$EXTRACT(I+1,F$LENGTH(TMP2)-I-1,TMP2)
$			    IF C .EQS. "/"
$			    THEN
$				IF I .LT. F$LENGTH(TMP2)-1
$				THEN
$				    TMP2 =3D F$EXTRACT(0,I,TMP2) + "." + =
F$EXTRACT(I+1,F$LENGTH(TMP2)-I-1,TMP2)
$				ELSE
$				    TMP2 =3D F$EXTRACT(0,I,TMP2) + "]"
$				ENDIF
$			    ENDIF
$			    IF ALLOWED_CHARACTERS - C .EQS. ALLOWED_CHARACTERS THEN -
			       TMP2 =3D F$EXTRACT(0,I,TMP2) + "$" + =
F$EXTRACT(I+1,F$LENGTH(TMP2)-I-1,TMP2)
$			    I =3D I + 1
$			    IF I .LT. F$LENGTH(TMP2) THEN GOTO LOOP_CHARACTERS1
$			    TMP2 =3D TMP2
$			ENDIF
$			IF DEBUG THEN -
			   WRITE SYS$ERROR "-Debug- TMP =3D """,TMP,""""
$			IF DEBUG THEN -
			   WRITE SYS$ERROR "-Debug- TMP2 =3D """,TMP2,""""
$			IF DEBUG THEN -
			   WRITE SYS$ERROR "-Debug- LOCAL_DIRECTORY =3D """,-
			   LOCAL_DIRECTORY,""""
$			LOCAL_DIRECTORY =3D =
F$EXTRACT(0,F$LENGTH(LOCAL_DIRECTORY)-4,LOCAL_DIRECTORY) + =
F$EXTRACT(F$LENGTH(TMP)-(FTP_SERVER_TYPE .EQ. TYPE_UNIX),999,TMP2)
$
$		    ENDIF
$		    IF DEBUG THEN WRITE SYS$ERROR "-Debug- Local directory now: ", =
LOCAL_DIRECTORY
$		ENDIF
$	    ELSE
$		IF FTP_SERVER_TYPE .EQ. TYPE_UNIX -
		   .AND. F$EXTRACT(F$LENGTH(TMP)-1,1,TMP) .NES. "/" THEN -
		   TMP =3D TMP + "/"
$		IF TMP .EQS. REMOTE_DIRECTORY
$		THEN
$		    ! we have a mapping
$		    LOCAL_DIRECTORY =3D F$ELEMENT(1,",",CONFIG_DIRECTORIES_'COUNT') - =
"..."
$		    IF DEBUG THEN WRITE SYS$ERROR "-Debug- Local directory now: ", =
LOCAL_DIRECTORY
$		ENDIF
$	    ENDIF
$	    COUNT =3D COUNT + 1
$	    GOTO _FIND_LOOP
$ _EXIT_FIND_LOOP:=20
$	    IF LOCAL_DIRECTORY .EQS. ""=20
$	    THEN=20
$		WRITE SYS$ERROR "Error - no mapping for remote directory ", =
REMOTE_DIRECTORY
$		WRITE SYS$ERROR "Error - skipping directory ", REMOTE_DIRECTORY
$	    ELSE
$		IF F$PARSE(LOCAL_DIRECTORY) .EQS. "" THEN CREATE/DIRECTORY/LOG =
'LOCAL_DIRECTORY'
$	    ENDIF
$	    GOTO _READ_FILE_LOOP
$	ENDIF ! f$locate
$
$	IF LOCAL_DIRECTORY .EQS. "" THEN GOTO _READ_FILE_LOOP
$
$!
$!!!  Determine if we need to get a file
$!
$
$	IF F$EDIT(F$ELEMENT(0," ",RECORD),"COLLAPSE") .NES. ""
$	THEN
$	    GET_FILE =3D FALSE
$	    ! assume we have a remote filename
$	    IF FTP_SERVER_TYPE .EQ. TYPE_UNIX
$	    THEN
$		RECORD_C =3D F$EDIT(RECORD,"COMPRESS,TRIM")
$		REMOTE_PROTECTION =3D F$ELEMENT(0," ",RECORD_C)
$		REMOTE_LINKS =3D F$ELEMENT(1," ",RECORD_C)
$		REMOTE_USER =3D F$ELEMENT(2," ",RECORD_C)
$		REMOTE_GROUP =3D F$ELEMENT(3," ",RECORD_C)
$		REMOTE_SIZE =3D F$ELEMENT(4," ",RECORD_C)
$		REMOTE_MONTH =3D F$ELEMENT(5," ",RECORD_C)
$		REMOTE_DAY =3D F$ELEMENT(6," ",RECORD_C)
$		REMOTE_YEARORTIME =3D F$ELEMENT(7," ",RECORD_C)
$		IF REMOTE_YEARORTIME - ":" .EQS. REMOTE_YEARORTIME
$		THEN ! Mon day year
$		    REMOTE_TIMESTAMP =3D =
F$CVTIME(REMOTE_DAY+"-"+REMOTE_MONTH+"-"+REMOTE_YEARORTIME+":0:0:0","COMP=
ARISON")
$		ELSE
$		    REMOTE_TIMESTAMP =3D =
F$CVTIME(REMOTE_DAY+"-"+REMOTE_MONTH+"-"+F$CVTIME("",,"YEAR")+":"+REMOTE_=
YEARORTIME,"COMPARISON")
$		    IF REMOTE_TIMESTAMP .GTS. F$CVTIME("+1-","COMPARISON") THEN -
		       REMOTE_TIMESTAMP =3D =
F$CVTIME(REMOTE_DAY+"-"+REMOTE_MONTH+"-"+F$CVTIME("-365-",,"YEAR")+":"+RE=
MOTE_YEARORTIME,"COMPARISON")
$		ENDIF
$		FILENAME =3D RECORD_C - REMOTE_PROTECTION - REMOTE_LINKS -
			   - REMOTE_USER - REMOTE_GROUP - REMOTE_SIZE -
			   - REMOTE_MONTH - REMOTE_DAY - REMOTE_YEARORTIME
$		FILENAME =3D F$EDIT(FILENAME,"TRIM")
$	    ELSE
$		FILENAME =3D F$ELEMENT(0," ",RECORD)
$		REMOTE_TIMESTAMP =3D F$ELEMENT(2," ",RECORD) + " " + F$ELEMENT(3," =
",RECORD)
$		IF F$EDIT(REMOTE_TIMESTAMP,"COLLAPSE") .EQS. ""=20
$		THEN
$		    ! date is on the next line...
$ _READ_DATE_LINE: =20
$		    READ/END_OF_FILE=3D_EXIT_READ_FILE_LOOP FILE RECORD
$! Watch out.  Some client, like the MadGoat FTP client, will sputter =
lines
$! like this right in the middle of the directory output:
$!	<226 File transfer Okay; Closing data connection.
$! Fortunately, it is very easy to check, since we expect this line to =
start
$! with a space
$		    IF F$EXTRACT(0,1,RECORD) .NES. " " THEN -
		       GOTO _READ_DATE_LINE
$		    RECORD =3D F$EDIT(RECORD,"COMPRESS")
$		    REMOTE_TIMESTAMP =3D F$ELEMENT(2," ",RECORD) + " " + =
F$ELEMENT(3," ",RECORD)
$		ENDIF
$		REMOTE_TIMESTAMP =3D F$CVTIME(REMOTE_TIMESTAMP,"COMPARISON")
$	    ENDIF
$	    IF DEBUG THEN WRITE SYS$ERROR "-Debug- Remote file is: ", FILENAME
$	    IF FTP_SERVER_TYPE .EQ. TYPE_UNIX
$	    THEN
$		IF F$EXTRACT(0,1,REMOTE_PROTECTION) .NES. "-" THEN -
		   GOTO _READ_FILE_LOOP
$	    ELSE
$		IF F$PARSE(FILENAME,,,"TYPE") .EQS. ".DIR" THEN -
		   GOTO _READ_FILE_LOOP
$	    ENDIF
$
$	    OLD_LOCAL_FILENAME =3D LOCAL_FILENAME
$	    IF FTP_SERVER_TYPE .EQS. TYPE_UNIX
$	    THEN
$		LOCAL_FILENAME =3D FILENAME
$		IF F$EXTRACT(F$LENGTH(LOCAL_FILENAME)-3,3,LOCAL_FILENAME) .EQS. ".gz"
$		THEN
$		    LOCAL_FILENAME =3D =
F$EXTRACT(0,F$LENGTH(LOCAL_FILENAME)-3,LOCAL_FILENAME)
$		    IF LOCAL_FILENAME - "." .EQS. LOCAL_FILENAME
$		    THEN
$			LOCAL_FILENAME =3D LOCAL_FILENAME + ".gz"
$		    ELSE
$			LOCAL_FILENAME =3D LOCAL_FILENAME + "-gz"
$		    ENDIF
$		ENDIF
$		IF F$EXTRACT(F$LENGTH(LOCAL_FILENAME)-2,2,LOCAL_FILENAME) .EQS. ".Z"
$		THEN
$		    LOCAL_FILENAME =3D =
F$EXTRACT(0,F$LENGTH(LOCAL_FILENAME)-2,LOCAL_FILENAME)
$		    IF LOCAL_FILENAME - "." .EQS. LOCAL_FILENAME
$		    THEN
$			LOCAL_FILENAME =3D LOCAL_FILENAME + ".Z"
$		    ELSE
$			LOCAL_FILENAME =3D LOCAL_FILENAME + "_Z"
$		    ENDIF
$		ENDIF
$		ALLOWED_CHARACTERS =3D =
"ABCDEFGHIKJLMNOPQRSTUVWXYZabcdefghikjlmnopqrstuvwxyz0123456789-_$."
$		IF DEBUG THEN WRITE SYS$ERROR "-Debug- (1) LOCAL_FILENAME=3D""",-
		   LOCAL_FILENAME,""""
$		I =3D 0
$ LOOP_CHARACTERS2:=20
$		C =3D F$EXTRACT(I,1,LOCAL_FILENAME)
$		IF C .EQS. "." -
		   .AND. LOCAL_FILENAME - "." - "." .NES. LOCAL_FILENAME - "." THEN -
		   LOCAL_FILENAME =3D F$EXTRACT(0,I,LOCAL_FILENAME) + "_" + =
F$EXTRACT(I+1,F$LENGTH(LOCAL_FILENAME)-I-1,LOCAL_FILENAME)
$		IF ALLOWED_CHARACTERS - C .EQS. ALLOWED_CHARACTERS THEN -
		   LOCAL_FILENAME =3D F$EXTRACT(0,I,LOCAL_FILENAME) + "$" + =
F$EXTRACT(I+1,F$LENGTH(LOCAL_FILENAME)-I-1,LOCAL_FILENAME)
$		I =3D I + 1
$		IF I .LT. F$LENGTH(LOCAL_FILENAME) THEN GOTO LOOP_CHARACTERS2
$		IF DEBUG THEN WRITE SYS$ERROR "-Debug- (2) LOCAL_FILENAME=3D""",-
		   LOCAL_FILENAME,""""
$		LOCAL_FILENAME =3D F$PARSE(";",LOCAL_FILENAME,LOCAL_DIRECTORY)
$		IF DEBUG THEN WRITE SYS$ERROR "-Debug- (3) LOCAL_FILENAME=3D""",-
		   LOCAL_FILENAME,""""
$	    ELSE
$		LOCAL_FILENAME =3D F$PARSE(";",FILENAME,LOCAL_DIRECTORY)
$	    ENDIF
$	    IF DEBUG THEN WRITE SYS$ERROR "-Debug- Local file is: ", =
LOCAL_FILENAME
$	    IF OLD_LOCAL_FILENAME .EQS. LOCAL_FILENAME
$	    THEN
$		IF DEBUG THEN WRITE SYS$ERROR "-Debug- Skipping file ", FILENAME, " =
(it's an older version)"
$		GOTO _READ_FILE_LOOP
$	    ENDIF
$	    IF F$SEARCH(LOCAL_FILENAME) .EQS. ""
$	    THEN
$		! no such file exists, so we need to create directory (if
$		! necessary) and pull the file over
$		IF CONFIG_LAST_TIME_FILE .EQS. "" -
		   .OR. CONFIG_LAST_TIME .LTS. REMOTE_TIMESTAMP THEN GET_FILE =3D TRUE
$		IF GET_FILE .AND. DEBUG THEN -
		   WRITE SYS$ERROR "-Debug- Copying file ", REMOTE_DIRECTORY, =
FILENAME, " to ", LOCAL_FILENAME, " (we don't have a copy)."
$	    ELSE
$		! check dates to see if we should get a new copy
$		LOCAL_TIMESTAMP =3D =
F$CVTIME(F$FILE(LOCAL_FILENAME,"RDT"),"COMPARISON")
$		IF DEBUG THEN WRITE SYS$ERROR "-Debug- Local file date: ", =
LOCAL_TIMESTAMP, ", remote file date: ", REMOTE_TIMESTAMP
$		IF LOCAL_TIMESTAMP .LES. REMOTE_TIMESTAMP
$		THEN=20
$		    IF CONFIG_LAST_TIME_FILE .EQS. "" -
		       .OR. CONFIG_LAST_TIME .LTS. REMOTE_TIMESTAMP THEN GET_FILE =3D =
TRUE
$		    IF GET_FILE .AND. DEBUG THEN -
		       WRITE SYS$ERROR "-Debug- Getting file ", REMOTE_DIRECTORY, =
FILENAME, " to ", LOCAL_FILENAME," (we have an old copy)."
$		ENDIF
$	    ENDIF
$	    IF GET_FILE=20
$	    THEN=20
$		GET_FILE_COUNT =3D GET_FILE_COUNT + 1
$		WRITE OUTFILE "GET """, REMOTE_DIRECTORY, FILENAME, """ ", -
		      LOCAL_FILENAME
$		WRITE REPORT_FILE F$FAO("  !3UL.  !AS!AS -> !AS", -
					GET_FILE_COUNT, -
					REMOTE_DIRECTORY, FILENAME, -
					LOCAL_FILENAME)
$	    ENDIF
$	ENDIF
$
$	GOTO _READ_FILE_LOOP
$ _EXIT_READ_FILE_LOOP:=09
$	CLOSE FILE
$	WRITE OUTFILE "EXIT"
$	CLOSE OUTFILE
$	CLOSE REPORT_FILE
$
$	IF F$SEARCH(TEMPFILE_2) .NES. "" THEN DELETE 'TEMPFILE_2';
$
$	IF GET_FILE_COUNT .EQ. 0
$	THEN
$	    WRITE SYS$OUTPUT "No files to get.  Exiting."
$	    GOTO _SUBMIT
$	ENDIF
$	WRITE SYS$OUTPUT F$FAO("!/Getting !UL file!%S!/", GET_FILE_COUNT)
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$!  Get the new files from the remote system
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$
$	IF DEBUG THEN WRITE SYS$ERROR "-Debug- Contents of input file:"
$	IF DEBUG THEN TYPE/OUTPUT=3DSYS$ERROR 'TEMPFILE_1'
$
$	IF DEBUG THEN WRITE SYS$ERROR "-Debug- Connecting to remote system..."
$	OLD_SYMBOL_SCOPE =3D F$ENVIRONMENT("SYMBOL_SCOPE")
$	SET SYMBOL/SCOPE=3D(GLOBAL,LOCAL)
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MULTINET=20
$	THEN
$	    SET noON
$	    DEFINE/USER_MODE SYS$OUTPUT 'TEMPFILE_2'
$	    'CONFIG_COMMAND' -
		  /NOINITIALIZATION -
		  /TAKE_FILE=3D'TEMPFILE_1'
$	    STATUS =3D $STATUS
$	    SET ON
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_MGFTP
$	THEN
$	    SET noON
$	    DEFINE/USER_MODE SYS$OUTPUT 'TEMPFILE_2'
$	    'CONFIG_COMMAND' -
		  'CONFIG_SITE' -
		  /USERNAME=3D"''CONFIG_USERNAME'" -
		  /PASSWORD=3D"''CONFIG_PASSWORD'" -
		  /INITIALIZATION=3D'TEMPFILE_1'
$	    STATUS =3D $STATUS
$	    SET ON
$	ENDIF
$
$	IF FTP_CLIENT_TYPE .EQ. TYPE_TCPWARE
$	THEN
$	    SET noON
$	    DEFINE/USER_MODE SYS$OUTPUT 'TEMPFILE_2'
$	    DEFINE/USER FTP_STARTUP 'tempfile_1'
$	    'CONFIG_COMMAND'
$	    STATUS =3D $STATUS
$	    SET noON
$	ENDIF
$
$	SET SYMBOL/SCOPE=3D('OLD_SYMBOL_SCOPE')
$
$	IF DEBUG THEN WRITE SYS$ERROR "-Debug- Output from FTP session:"
$	IF DEBUG THEN TYPE/OUTPUT=3DSYS$ERROR 'TEMPFILE_2'
$
$	IF CONFIG_LAST_TIME_FILE .NES. "" .AND. .NOT. STATUS
$	THEN
$	    OPEN/WRITE FOO 'CONFIG_LAST_TIME_FILE'
$	    WRITE FOO CONFIG_NEXT_TIME
$	    CLOSE FOO
$	ENDIF
$
$	IF CONFIG_MAILTO .NES. ""
$	THEN
$	    IF STATUS
$	    THEN
$		MAIL_SUBJECT =3D F$FAO("!AS: !UL file!%S transferred to local =
system", -
				     CONFIG_SITE, GET_FILE_COUNT)
$		MAIL_PN =3D F$FAO("!AS: !UL file!%S", -
				CONFIG_SITE, GET_FILE_COUNT)
$	    ELSE
$		SHOW SYMBOL STATUS
$		MAIL_SUBJECT =3D F$FAO("!AS: Following files were not transferred - =
check logs", -
				     CONFIG_SITE)
$		MAIL_PN =3D F$FAO("!AS: Failure!", CONFIG_SITE)
$	    ENDIF
$	    SET noON
$	    MAIL 'TEMPFILE_4' 'CONFIG_MAILTO' -
		 /SUBJECT=3D"''MAIL_SUBJECT'" -
		 /PERSONAL_NAME=3D"''MAIL_PN'"
$	    SET ON
$	ENDIF
$
$!
$!!!  Purge local directories
$!
$
$	COUNT =3D 0
$ _PURGE_LOOP:=20
$	IF COUNT .GE. CONFIG_DIR_TOTAL THEN GOTO _EXIT_PURGE_LOOP
$	FOO =3D CONFIG_DIRECTORIES_'COUNT'
$	PURGE/LOG 'F$ELEMENT(1,",",FOO)'*.*
$	COUNT =3D COUNT + 1
$	GOTO _PURGE_LOOP
$_EXIT_PURGE_LOOP:
$
$_SUBMIT:
$	IF CONFIG_SUBMIT_AFTER .NES. "NONE"
$	THEN
$	    SET VERIFY
$	    SUBMIT -
		   /NOTIFY -
		   /LOG_FILE=3DFTP_MIRROR.LOG -
		   /PARAMETERS=3D'F$ELEMENT(0,";",CONFIGURATION_FILE)' -
		   /noPRINTER -
		   /QUEUE=3D'CONFIG_QUEUE' -
		   /NAME=3D"FTP_Mirror" -
		   /AFTER=3D"''CONFIG_SUBMIT_AFTER'" -
		   /KEEP -
		   'F$ELEMENT(0,";",F$ENVIRONMENT("PROCEDURE"))'=20
$	    SET NOVERIFY
$	ENDIF
$	GOTO _EXIT
$
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$ _EXIT:=20
$	GOSUB _CLEANUP
$	WRITE SYS$OUTPUT "Leaving FTP_Mirror ..."
$	IF F$TYPE(ORIGINAL_PRIV) THEN JUNK =3D F$SETPRV(ORIGINAL_PRIV)
$	VERIFY =3D F$VERIFY(VERIFY)
$	EXIT 1
$
$ _NO_CONFIG_FILE:=20
$	WRITE SYS$ERROR "Could not find configuration file ",P1