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