Update Homepage
A couple of fairly simple scripts written by Jan M. Danielsson, who kept updating his homepages but forgetting to copy portions of them on the actual web server, so he wrote a REXX script that automatically updated the remote server from a local folder. There are two versions of the script, version one is feature complete and runs on Classic REXX and version two which is functional as is but unfinished and requires Object REXX
Key features:
- Only uploads modified files (compares file sizes and checks the archive attribute of the local files).
- Doesn't use any separate databases for keeping track of what needs to be done.
- Logs its activities.
- Removes any files/directories from WWW/FTP server if it doesn't exist on hard drive.
- New in V2: Automatically update date and time stamp in html pages.
Usage
To change the FTP server address, username and password, you may also have to change the parsing routines to fit the output of the FTP server that your local ISP uses. To use the new auto update features in version two, add the comments:
<!-- lastupdate_date --> immediately followed by a yyyy-mm-dd formatted date <!-- lastupdate_time --> immediately followed by a hh:mm:ss.
Warning: Trekkie references in script comments, try not to groan too loudly.
Update homepage v1
/* Update Homepage Rexx script * by Jan M. Danielsson (os2@telia.com) on 2000-07-01 * Resistance is futile. */ /* OS/2 API-functions */ call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs" call SysLoadFuncs /* OS/2 Rexx-Ftp-API */ call RxFuncAdd "FtpLoadFuncs", "rxFtp", "FtpLoadFuncs" call FtpLoadFuncs /* * Configuration variables */ FTPSERVER="your.isp.ftp.server" FTPUSER="youruser" FTPPASSWORD="yourpass" HOMEPAGEBASE = "c:\internet\homepage\OS!2" HPBASELEN = LENGTH(HOMEPAGEBASE) LOGFILE = "work.log" fWriteLog = "yes" if fWriteLog = "yes" then do '@del 'LOGFILE call LINEOUT LOGFILE, '*** 'DATE()' 'TIME()' Begin session', 1 end /* do */ /* dirs.0 dirs.n "<1> <2> <3> <4>" <1> parent directory (1 - root) <2> directory exists locally (0 - doesn't exist, 1 - exists) <3> directory exists remotely (0 - doesn't exist, 1 - exists) <4> name of directory files.0 files.n "<1> <2> <3> <4> <5> <1> which directory file belogs to (1 - root) <2> local file size ("-" if it doesn't exist locally) <3> remote file size ("-" if it doesn't exist remotely) <4> Archive flag for local file ('-' archived flag is not set, 'A' archived flag is set) <5> filename dirs.n "<parentdir> <local> <remote> <name>" files.n "<dir> <localsize> <remotesize> <aattr> <filename>" */ /* Login */ if FtpSetUser(FTPSERVER, FTPUSER, FTPPASSWORD) then do say 'Logged in' /* Set binary mode */ rc = FtpSetBinary("Binary") if rc = 0 then do say 'ERROR: Could not set binary mode.' call WriteLog '*** ERROR: Could not set binary mode.' exit end /* There is always a root */ dirs.0 = 1 dirs.1 = "0 1 1 <root>" files.0 = 0 icurrentdir = 0 say '- Gathering data' do while icurrentdir < dirs.0 idir = icurrentdir+1 say ' - Processing directory 'idir' of 'dirs.0 /* Start scanning for existing files and directories here */ ifilestart = files.0 idirstart = dirs.0 /* Start by checking the ftp files */ if WORD(dirs.idir, 3) = "1" then do call chftpdir idir rc=FtpDir(".", "ftpfilelist.") do i=1 to ftpfilelist.0 /* say ftpfilelist.i */ if SUBSTR(ftpfilelist.i,1,1) = "d" then do /* Add directory to list */ dirs.0 = dirs.0 + 1 imax = dirs.0 dirs.imax = idir' 0 1 'WORD(ftpfilelist.i,9) call WriteLog ' Dir('imax'): 'dirs.imax end else if SUBSTR(ftpfilelist.i,1,1) = "-" then do /* Add file to list */ files.0 = files.0 + 1 imax = files.0 files.imax = idir' - 'WORD(ftpfilelist.i,5)' - 'WORD(ftpfilelist.i,9) call WriteLog 'File('imax'): 'files.imax end end end /* Check local files */ if WORD(dirs.idir, 2) = "1" then do currentpath = getlocaldir(idir) call SysFileTree currentpath'\*', 'localfilelist', , '*****' do i=1 to localfilelist.0 /* say localfilelist.i */ ichar = LASTPOS("\", localfilelist.i) parsedname = SUBSTR(localfilelist.i, ichar+1) if SUBSTR(localfilelist.i,32,1) = "D" then do /* A local directory */ /* Attempt to locate directory in list */ ifound = LocateDirInDir(idir, idirstart, parsedname) if ifound <> 0 then do /* Mark directory as 'local' */ call WriteLog '! Directory "'parsedname'" is already in list' dirs.ifound = ReplaceWord(dirs.ifound, 2, "1") call WriteLog ' Dir('ifound'): 'dirs.ifound end else do /* Add directory */ dirs.0 = dirs.0 + 1 imax = dirs.0 dirs.imax = idir' 1 0 'parsedname call WriteLog ' Dir('imax'): 'dirs.imax end end else do /* A local file */ ifound = LocateFileInDir(idir, ifilestart, parsedname) if ifound <> 0 then do /* Mark local file */ files.ifound = ReplaceWord(files.ifound, 2, WORD(localfilelist.i,3)) files.ifound = ReplaceWord(files.ifound, 4, SUBSTR(localfilelist.i,31,1)) call WriteLog 'File('ifound'): 'files.ifound end /* do */ else do /* File hasn't been added before -- add a new entry */ files.0 = files.0 + 1 imax = files.0 files.imax = idir' 'WORD(localfilelist.i,3)' - 'SUBSTR(localfilelist.i,31,1)' 'parsedname call WriteLog 'File('imax'): 'files.imax end end end end icurrentdir = icurrentdir + 1 end /* do while icurrentdir < dirs.0 */ /* Dump directories */ call WriteLog '' call WriteLog '** Directory list' do i = 1 to dirs.0 call WriteLog 'Dir('i'): 'dirs.i end /* Dump files */ call WriteLog '' call WriteLog '** File list' do i = 1 to files.0 call WriteLog 'File('i'): 'files.i end /* Create remote directories */ say '- Create remote directories' call WriteLog '' call WriteLog '** Create remote directories' do i = 1 to dirs.0 if WORD(dirs.i, 2) = 1 then do /* Check if directory exists locally */ if WORD(dirs.i,3) = 0 then do /* Check is directory DOESN'T exist on ftp server */ call chftpdir WORD(dirs.i,1) /* Change to parent directory on ftp server */ say ' - Creating remote directory "'WORD(dirs.i,4)'".' rc = FtpMkDir(WORD(dirs.i,4)) if rc = 0 then do call WriteLog 'Directory "'WORD(dirs.i,4)'" created on server' end else do call WriteLog '*** ERROR: Could not create directory "'WORD(dirs.i,4)'" on server' end end end end say '- Upload new/updated files, and remove unused files.' call WriteLog '' call WriteLog '** Upload new/updated files and remove unused files.' do i = 1 to files.0 if (WORD(files.i, 2) <> "-") & ((WORD(files.i, 2) <> WORD(files.i, 3)) | (WORD(files.i, 4) = "A")) then do /* Change to target directory on server */ call chftpdir WORD(files.i,1) /* Upload file */ local = getlocaldir(WORD(files.i,1)) local = local'\'WORD(files.i, 5) say ' - Uploading file "'local'".' rc = FtpPut(local, WORD(files.i, 5)) if rc = 0 then do call WriteLog 'File "'WORD(files.i,5)'" uploaded to server' /* If successful; reset archived attribute for file*/ call SysFileTree local, 'localfilelist', F, '*****', '-****' end else do call WriteLog '*** ERROR: Could not upload file "'WORD(files.i,5)'" to server' end end else if WORD(files.i, 2) = '-' then do /* File is unused (does not exist locally) -- remove it */ call chftpdir WORD(files.i,1) call WriteLog 'Delete file "'WORD(files.i, 5)'" from server because it is unused' rc = FtpDelete(WORD(files.i, 5)) if rc = 0 then do call WriteLog 'File "'WORD(files.i,5)'" was deleted from server.' end else do call WriteLog '*** ERROR: Could not delete file "'WORD(files.i,5)'" from server.' end end else do call WriteLog 'Skipping file "'WORD(files.i,5)'"; probably unchanged.' end end say '- Remove unused directories.' call WriteLog '' call WriteLog '** Remove empty/unused directories' i = dirs.0 do while i > 1 if WORD(dirs.i, 2) = "0" then do call WriteLog 'Directory "'WORD(dirs.i,4)'" will be removed since it is unused.' call chftpdir WORD(dirs.i,1) say ' - Removing remote directory "'WORD(dirs.i,4)'".' rc = FtpRmDir(WORD(dirs.i,4)) if rc = 0 then call WriteLog 'Directory "'WORD(dirs.i,4)'" successfully removed.' else call WriteLog '*** ERROR: Could not remove directory "'WORD(dirs.i,4)'".' end i = i - 1 end rc = FtpLogoff() if rc = 0 then say '*** Logout successful!' else say '*** Logout failed!' end if fWriteLog = "yes" then do call WriteLog '*** 'DATE()' 'TIME()' End session' end /* do */ exit Terminate: rc = FtpLogoff() if rc = 0 then do say 'Logoff successful' call WriteLog 'Logged out' end else do say 'Logout failed!' call WriteLog '*** ERROR: FtpLogoff() failed' end call WriteLog '*** 'DATE()' 'TIME()' End session' exit /* * Find out if a directory exists in dirs.n * Parameters: * indir - in which directory to look * istartsearch - serach range dirs.istartsearch to dirs.0 * findname - name to search for * * returns: * 0 - directory doesn't exist * n - directory exists at index <n> */ LocateDirInDir: parse arg indir, istartsearch, finddirname do ifnd = istartsearch to dirs.0 if WORD(dirs.ifnd, 1) = indir then do if WORD(dirs.ifnd, 4) = finddirname then return ifnd end end return 0 LocateFileInDir: parse arg indir, istartsearch, findfilename do ifnd = istartsearch to files.0 /* Loop though the last couple of entries */ if WORD(files.ifnd, 1) = indir then do /* Check if directories match */ if WORD(files.ifnd, 5) = findfilename then do /* Check if filenames match */ return ifnd end end end return 0 /* * Patameters: * str - The string on which the word to replace is in * iWord - Word index * newWord - String to replace with */ ReplaceWord: PROCEDURE parse arg str, iWord, newWord iwrdndx = WORDINDEX(str, iWord) str = DELWORD(str, iWord, 1) str = INSERT(newWord' ', str, iwrdndx-1) return str WriteLog: parse arg str if fWriteLog = "yes" then do call LINEOUT LOGFILE, str end return /* * Change directory on FTP server */ chftpdir: parse arg dirnum if dirnum = 1 then do gotodir = "/" end else do gotodir = '/'WORD(dirs.dirnum,4) iparent = WORD(dirs.dirnum,1) do while iparent <> 1 parentdir = WORD(dirs.iparent,4) gotodir = '/'parentdir''gotodir iparent = WORD(dirs.iparent,1) end end call WriteLog 'Change server directory to "'gotodir'".' rc = FtpChDir(gotodir) if rc = 0 then call WriteLog 'Server directory changed to "'gotodir'".' else do call WriteLog '*** ERROR: Could not change directory to "'gotodir'".' end return rc getlocaldir: parse arg dirnum if dirnum = 1 then do gotodir = '' end else do gotodir = '' do while dirnum <> 1 gotodir = '\'WORD(dirs.dirnum,4)''gotodir dirnum = WORD(dirs.dirnum,1) end end call WriteLog 'getlocaldir returning: "'HOMEPAGEBASE''gotodir'"' return HOMEPAGEBASE''gotodir
Update homepage v2
* Update Homepage Rexx script * by Jan M. Danielsson (os2@telia.com) on 2000-11-16 * Resistance is futile. * * Nota bene: Requires ObjectRexx * * How to use the auto page date update feature: * Anywhere in your HTML script, you can place the "identifiers": * <!-- LASTUPDATE_DATE -->0000-00-00 (ISO format, yyyy-mm-dd) * <!-- LASTUPDATE_TIME -->00:00:00 (24h format) * * For now, you *must* include the "0000-00-00" and "00:00:00" strings. * I'll probably add code which inserts them if they don't exist, but for now, you need them. */ /* OS/2 API-functions */ call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs" call SysLoadFuncs /* OS/2 Rexx-Ftp-API */ call RxFuncAdd "FtpLoadFuncs", "rxFtp", "FtpLoadFuncs" call FtpLoadFuncs /* * Configuration variables */ FTPSERVER="your.isp.ftp.server" FTPUSER="youruser" FTPPASSWORD="yourpass" HOMEPAGEBASE = "c:\internet\homepage\OS!2" HPBASELEN = LENGTH(HOMEPAGEBASE) LOGFILE = "work.log" fWriteLog = "yes" if fWriteLog = "yes" then do '@del 'LOGFILE call LINEOUT LOGFILE, '*** 'DATE()' 'TIME()' Begin session', 1 end /* do */ /* dirs.0 dirs.n "<1> <2> <3> <4>" <1> parent directory (1 - root) <2> directory exists locally (0 - doesn't exist, 1 - exists) <3> directory exists remotely (0 - doesn't exist, 1 - exists) <4> name of directory files.0 files.n "<1> <2> <3> <4> <5> <1> which directory file belogs to (1 - root) <2> local file size ("-" if it doesn't exist locally) <3> remote file size ("-" if it doesn't exist remotely) <4> Archive flag for local file ('-' archived flag is not set, 'A' archived flag is set) <5> filename dirs.n "<parentdir> <local> <remote> <name>" files.n "<dir> <localsize> <remotesize> <aattr> <filename>" */ /* Login */ if FtpSetUser(FTPSERVER, FTPUSER, FTPPASSWORD) then do say 'Logged in' /* Set binary mode */ rc = FtpSetBinary("Binary") if rc = 0 then do say 'ERROR: Could not set binary mode.' call WriteLog '*** ERROR: Could not set binary mode.' exit end /* There is always a root */ dirs.0 = 1 dirs.1 = "0 1 1 <root>" files.0 = 0 icurrentdir = 0 say '- Gathering data' do while icurrentdir < dirs.0 idir = icurrentdir+1 say ' - Processing directory 'idir' of 'dirs.0 /* Start scanning for existing files and directories here */ ifilestart = files.0 idirstart = dirs.0 /* Start by checking the ftp files */ if WORD(dirs.idir, 3) = "1" then do call chftpdir idir rc=FtpDir(".", "ftpfilelist.") do i=1 to ftpfilelist.0 /* say ftpfilelist.i */ if SUBSTR(ftpfilelist.i,1,1) = "d" then do /* Add directory to list */ dirs.0 = dirs.0 + 1 imax = dirs.0 dirs.imax = idir' 0 1 'WORD(ftpfilelist.i,9) call WriteLog ' Dir('imax'): 'dirs.imax end else if SUBSTR(ftpfilelist.i,1,1) = "-" then do /* Add file to list */ files.0 = files.0 + 1 imax = files.0 files.imax = idir' - 'WORD(ftpfilelist.i,5)' - 'WORD(ftpfilelist.i,9) call WriteLog 'File('imax'): 'files.imax end end end /* Check local files */ if WORD(dirs.idir, 2) = "1" then do currentpath = getlocaldir(idir) call SysFileTree currentpath'\*', 'localfilelist', , '*****' do i=1 to localfilelist.0 /* say localfilelist.i */ ichar = LASTPOS("\", localfilelist.i) parsedname = SUBSTR(localfilelist.i, ichar+1) if SUBSTR(localfilelist.i,32,1) = "D" then do /* A local directory */ /* Attempt to locate directory in list */ ifound = LocateDirInDir(idir, idirstart, parsedname) if ifound <> 0 then do /* Mark directory as 'local' */ call WriteLog '! Directory "'parsedname'" is already in list' dirs.ifound = ReplaceWord(dirs.ifound, 2, "1") call WriteLog ' Dir('ifound'): 'dirs.ifound end else do /* Add directory */ dirs.0 = dirs.0 + 1 imax = dirs.0 dirs.imax = idir' 1 0 'parsedname call WriteLog ' Dir('imax'): 'dirs.imax end end else do /* A local file */ if RIGHT(parsedname, 5) = '.html' then do call ReplaceHTMLDateTime ''currentpath'\'parsedname end /* do */ ifound = LocateFileInDir(idir, ifilestart, parsedname) if ifound <> 0 then do /* Mark local file */ files.ifound = ReplaceWord(files.ifound, 2, WORD(localfilelist.i,3)) files.ifound = ReplaceWord(files.ifound, 4, SUBSTR(localfilelist.i,31,1)) call WriteLog 'File('ifound'): 'files.ifound end /* do */ else do /* File hasn't been added before -- add a new entry */ files.0 = files.0 + 1 imax = files.0 files.imax = idir' 'WORD(localfilelist.i,3)' - 'SUBSTR(localfilelist.i,31,1)' 'parsedname call WriteLog 'File('imax'): 'files.imax end end end end icurrentdir = icurrentdir + 1 end /* do while icurrentdir < dirs.0 */ /* Dump directories */ call WriteLog '' call WriteLog '** Directory list' do i = 1 to dirs.0 call WriteLog 'Dir('i'): 'dirs.i end /* Dump files */ call WriteLog '' call WriteLog '** File list' do i = 1 to files.0 call WriteLog 'File('i'): 'files.i end /* Create remote directories */ say '- Create remote directories' call WriteLog '' call WriteLog '** Create remote directories' do i = 1 to dirs.0 if WORD(dirs.i, 2) = 1 then do /* Check if directory exists locally */ if WORD(dirs.i,3) = 0 then do /* Check is directory DOESN'T exist on ftp server */ call chftpdir WORD(dirs.i,1) /* Change to parent directory on ftp server */ say ' - Creating remote directory "'WORD(dirs.i,4)'".' rc = FtpMkDir(WORD(dirs.i,4)) if rc = 0 then do call WriteLog 'Directory "'WORD(dirs.i,4)'" created on server' end else do call WriteLog '*** ERROR: Could not create directory "'WORD(dirs.i,4)'" on server' end end end end say '- Upload new/updated files, and remove unused files.' call WriteLog '' call WriteLog '** Upload new/updated files and remove unused files.' do i = 1 to files.0 if (WORD(files.i, 2) <> "-") & ((WORD(files.i, 2) <> WORD(files.i, 3)) | (WORD(files.i, 4) = "A")) then do /* Change to target directory on server */ call chftpdir WORD(files.i,1) /* Upload file */ local = getlocaldir(WORD(files.i,1)) local = local'\'WORD(files.i, 5) say ' - Uploading file "'local'".' rc = FtpPut(local, WORD(files.i, 5)) if rc = 0 then do call WriteLog 'File "'WORD(files.i,5)'" uploaded to server' /* If successful; reset archived attribute for file*/ call SysFileTree local, 'localfilelist', F, '*****', '-****' end else do call WriteLog '*** ERROR: Could not upload file "'WORD(files.i,5)'" to server' end end else if WORD(files.i, 2) = '-' then do /* File is unused (does not exist locally) -- remove it */ call chftpdir WORD(files.i,1) call WriteLog 'Delete file "'WORD(files.i, 5)'" from server because it is unused' rc = FtpDelete(WORD(files.i, 5)) if rc = 0 then do call WriteLog 'File "'WORD(files.i,5)'" was deleted from server.' end else do call WriteLog '*** ERROR: Could not delete file "'WORD(files.i,5)'" from server.' end end else do call WriteLog 'Skipping file "'WORD(files.i,5)'"; probably unchanged.' end end say '- Remove unused directories.' call WriteLog '' call WriteLog '** Remove empty/unused directories' i = dirs.0 do while i > 1 if WORD(dirs.i, 2) = "0" then do call WriteLog 'Directory "'WORD(dirs.i,4)'" will be removed since it is unused.' call chftpdir WORD(dirs.i,1) say ' - Removing remote directory "'WORD(dirs.i,4)'".' rc = FtpRmDir(WORD(dirs.i,4)) if rc = 0 then call WriteLog 'Directory "'WORD(dirs.i,4)'" successfully removed.' else call WriteLog '*** ERROR: Could not remove directory "'WORD(dirs.i,4)'".' end i = i - 1 end rc = FtpLogoff() if rc = 0 then say '*** Logout successful!' else say '*** Logout failed!' end if fWriteLog = "yes" then do call WriteLog '*** 'DATE()' 'TIME()' End session' end /* do */ exit Terminate: rc = FtpLogoff() if rc = 0 then do say 'Logoff successful' call WriteLog 'Logged out' end else do say 'Logout failed!' call WriteLog '*** ERROR: FtpLogoff() failed' end call WriteLog '*** 'DATE()' 'TIME()' End session' exit /* * Find out if a directory exists in dirs.n * Parameters: * indir - in which directory to look * istartsearch - serach range dirs.istartsearch to dirs.0 * findname - name to search for * * returns: * 0 - directory doesn't exist * n - directory exists at index <n> */ LocateDirInDir: parse arg indir, istartsearch, finddirname do ifnd = istartsearch to dirs.0 if WORD(dirs.ifnd, 1) = indir then do if WORD(dirs.ifnd, 4) = finddirname then return ifnd end end return 0 LocateFileInDir: parse arg indir, istartsearch, findfilename do ifnd = istartsearch to files.0 /* Loop though the last couple of entries */ if WORD(files.ifnd, 1) = indir then do /* Check if directories match */ if WORD(files.ifnd, 5) = findfilename then do /* Check if filenames match */ return ifnd end end end return 0 /* * Parameters: * str - The string on which the word to replace is in * iWord - Word index * newWord - String to replace with */ ReplaceWord: PROCEDURE parse arg str, iWord, newWord iwrdndx = WORDINDEX(str, iWord) str = DELWORD(str, iWord, 1) str = INSERT(newWord' ', str, iwrdndx-1) return str WriteLog: parse arg str if fWriteLog = "yes" then do call LINEOUT LOGFILE, str end return /* * Change directory on FTP server */ chftpdir: parse arg dirnum if dirnum = 1 then do gotodir = "/" end else do gotodir = '/'WORD(dirs.dirnum,4) iparent = WORD(dirs.dirnum,1) do while iparent <> 1 parentdir = WORD(dirs.iparent,4) gotodir = '/'parentdir''gotodir iparent = WORD(dirs.iparent,1) end end call WriteLog 'Change server directory to "'gotodir'".' rc = FtpChDir(gotodir) if rc = 0 then call WriteLog 'Server directory changed to "'gotodir'".' else do call WriteLog '*** ERROR: Could not change directory to "'gotodir'".' end return rc getlocaldir: parse arg dirnum if dirnum = 1 then do gotodir = '' end else do gotodir = '' do while dirnum <> 1 gotodir = '\'WORD(dirs.dirnum,4)''gotodir dirnum = WORD(dirs.dirnum,1) end end call WriteLog 'getlocaldir returning: "'HOMEPAGEBASE''gotodir'"' return HOMEPAGEBASE''gotodir ReplaceHTMLDateTime: PROCEDURE parse arg htmlfile ret = STREAM(htmlfile, 'c', 'open') fdatetime = SysGetFileDateTime(htmlfile, 'WRITE') fdate = WORD(fdatetime, 1) ftime = WORD(fdatetime, 2) cur_line = 1 do while LINES(htmlfile) line_pos = STREAM(htmlfile, 'c', 'seek +0') line_buf = LINEIN(htmlfile) rewrite_line = 0 p = LocatePageDate(line_buf) if p <> 0 then do /* This line should contain a date */ q = p + 24 pagedate = SUBSTR(line_buf, q, 10) if COMPARE(fdate, pagedate) <> 0 then do line_buf = OVERLAY(fdate, line_buf, q, 10) rewrite_line = 1 end end p = LocatePageTime(line_buf) if p <> 0 then do /* This line should contain a time */ q = p + 24 pagetime = SUBSTR(line_buf, q, 8) if COMPARE(ftime, pagetime) <> 0 then do line_buf = OVERLAY(ftime, line_buf, q, 8) rewrite_line = 1 end end if rewrite_line <> 0 then do new_line_pos = STREAM(htmlfile, 'c', 'seek +0') q = STREAM(htmlfile, 'c', 'seek ='line_pos) q = LINEOUT(htmlfile, line_buf) q = STREAM(htmlfile, 'c', 'seek ='new_line_pos) /* Reset the file's date and time */ say 'Updated line 'cur_line' in 'htmlfile end cur_line = cur_line + 1 end /* do */ ret = STREAM(htmlfile, 'c', 'close') /* The date must be reset after any modifications have been made */ Call SysSetFileDateTime htmlfile, fdate, ftime return LocatePageDate: PROCEDURE PARSE UPPER ARG linebuf p = POS('<!-- LASTUPDATE_DATE -->', linebuf) return p LocatePageTime: PROCEDURE PARSE UPPER ARG linebuf p = POS('<!-- LASTUPDATE_TIME -->', linebuf) return p
Licence
- Copyrighted freeware
- Author: Jan M. Danielsson