/* FTP COPY - put specified file in a remote dir */ PARSE ARG LOC REM '(' DISP IF REM='' THEN DO SAY 'Usage: FTPCOPY {filespec} {ftp_site/path}' SAY 'Program uploads local file(s) on FTP host' SAY 'FTPCOPY expects to find user/passwd info in file COPYU.DAT' SAY 'Lines in this file have following format:' SAY 'FTP_HOST USERNAME PASSWORD' EXIT 1 END CALL INIT CALL UPLOAD LOC 'ftp://'U':'P'@'REM EXIT /* ------------- Yellow Subroutines ------------- */ UPLOAD:PROCEDURE EXPOSE IC PARSE ARG LOCAL REMOTE REMOTE=TRANSLATE(REMOTE,'/','\') /* Force forward slashes */ PARSE VAR REMOTE 'ftp://' U ':' P '@' H '/' RDI IC=LOCAL_FILES() /* Once we are back from LOCAL_FILES, CH contains files with +A NO are files with no archive attr - we'll see if any of them are not on FTP - then ul them too */ CALL FTP_FILES U P H RDI RETURN INIT: PARSE VAR REM NOPATH '/' DO UNTIL LINES('COPYU.DAT')=0 INF=LINEIN('COPYU.DAT') PARSE VAR INF H U P IF POS(H,NOPATH)>0 THEN DO YES=1 LEAVE END END IF YES<>1 THEN DO SAY NOPATH 'not found in COPYU.DAT' EXIT 28 END RETURN /* INIT */ LOCAL_FILES:PROCEDURE EXPOSE LOCAL CH. call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' call SysLoadFuncs CALL SYSFILETREE LOCAL, 'F.','F' /* Format of dir entry: 6/21/97 1:07p 0 -D--- C:\PUB\MIDI\NEW */ CH.='' DO I=1 TO F.0 /* FAJ=LOWER(FILENAME(SUBWORD(F.I,5))) */ FAJ=LOWER(SUBWORD(F.I,5)) CH.I=FAJ END RETURN F.0 FILENAME:PROCEDURE /* This prg returns filename portion of the full path */ RETURN FILESPEC('NAME',ARG(1)) /* front end for built-in func! */ FILEPATH:PROCEDURE /* This prg returns filename portion of the full path */ RETURN FILESPEC('PATH',ARG(1)) /* front end for built-in func! */ FTP_FILES:PROCEDURE EXPOSE LOCAL IC IIC CH CH. IN NO. DISP /* It's cool to have EXPOSE - that is, full REXX feature set */ PARSE ARG U P H RDI CALL RxFuncAdd "FTPLoadFuncs","rxFtp","FTPLoadFuncs" CALL FtpLoadFuncs SAY 'Establishing connection...' CALL FtpSetUser H,U,P CALL FtpSetBinary "Binary" CALL FTPCHDIR RDI /* And now the final stage - we UPLOAD THEM! */ DO I=1 TO IC F=CH.I SAY 'Uploading' F'...' CALL FtpPut F,FILENAME(F) END SAY 'Done.' IF DISP<>'' THEN DO RC=FtpDir('*','F.') DO I=1 TO F.0 SAY F.I END END RETURN rc = FtpLogoff() RETURN /* COPYU */ LOWER:PROCEDURE /* Object REXX lacks LOWER() funcs. Well, here it is */ PARSE ARG A RETURN TRANSLATE(A,XRANGE('a','z'),XRANGE('A','Z'))