home *** CD-ROM | disk | FTP | other *** search
- /* $VER: Cache.www 1.4 (28.9.95) Stephan Lichtendahl
- Caching of inlined images and HTML documents on harddisk */
-
- cachedir='AmiTCP:Cache/'
- copycom='Copy Quiet'
-
- if ~show(l,'rexxsupport.library') then
- if ~addlib('rexxsupport.library',0,-30,0) then
- exit
- if ~show(l,'rexxdossupport.library') then
- if ~addlib('rexxdossupport.library',0,-30,2) then
- exit .
-
- hit=0
- HTML=''
- Image=''
- saveto=''
- ret='0a'x
- OPTIONS RESULTS
-
- parse arg args
- if ~ReadArgs(args,'Save/S,Load/S,Remove/S,Image/K,HTML/K') then do
- say 'Usage: Cache.www [Save] to get/put images in current AMosaic'
- say 'document from/to cache, Save will save HTML document as well.'
- say 'Cache.www Image/K HTML/K will delete <image> and/or <html> from'
- say 'cache. <image> and <html> can be URLs, filenames or both ALL.'
- say 'Remove will remove the current AMosaic document from cache,'
- say 'and every image in it which is currently visable (ie. loaded).'
- say 'Cache.www Load reloads the current cached document from WWW.'
- return 0
- end
- if Image ~= '' | HTML ~= '' then do
- if upper(Image) = 'ALL' & upper(HTML) = 'ALL' then
- call AllesWeg
- else do
- if Image ~= '' then do
- type=1
- call WisItem
- end
- if HTML ~= '' then do
- type=0
- call WisItem
- end
- end
- return 0
- end
-
- if ~Load & ~Remove then do
- address AMOSAIC.1 'fetch images IMAGE'
-
- call open(1input,cachedir'ImageList','R')
- imagelist = readch(1input,65535)
- call close(1input)
-
- do i=1 for image.0
- nieuw.i=0
- urlnaam=image.i.url
- av=image.i.current
-
- if left(urlnaam,17) = 'file://localhost/' then do
- if ~av then
- address AMOSAIC.1 'fetch inline url 'urlnaam
- end
- else do
- nr = pos(urlnaam,imagelist)
-
- if nr = 0 & av then do
- call open(2input,cachedir'NrOfImage','R')
- imgnr = readln(2input)+1
- call close(2input)
-
- address command copycom '"'image.i.filename'"' cachedir'Images/'imgnr
- address command 'Echo >>'cachedir'ImageList "'imgnr','urlnaam'"'
- imagelist=imagelist||imgnr','urlnaam||ret
- nieuw.i=imgnr
-
- call open(2output,cachedir'NrOfImage','W')
- call writeln(2output,imgnr)
- call close(2output)
- end
-
- if nr > 0 then do
- startnr = lastpos(ret,imagelist,nr)+1
- imgnr = substr(imagelist,startnr,nr-startnr-1)
- nieuw.i=imgnr
- if av then
- address command copycom '"'image.i.filename'"' cachedir'Images/'imgnr
- else
- hit=2
- end
-
- end
- end
- end
-
- address AMOSAIC.1 'get url'
- urlnaam = result
- if Remove then
- call RemHTML
-
- if Load | Save then do
- if left(urlnaam,27) = 'file://localhost/T:temphtml' then
- address AMOSAIC.1 'jump back'
- else do
-
- call open(3input,cachedir'HTMLlist','R')
- htmllist = readch(3input,65535)
- call close(3input)
- dir=cachedir'HTMLs/'
-
- nr = pos(dir,urlnaam)
- if nr > 0 then do
- saveto = substr(urlnaam,nr+length(dir))
- nr = pos(saveto',',htmllist)
- startnr = nr+length(saveto)+1
- stopnr = pos(ret,htmllist,startnr+1)
- urlnaam = substr(htmllist,startnr,stopnr-startnr)
- if Load then
- address AMOSAIC.1 'jump url 'urlnaam
- else
- hit=hit+1
-
- end
- else
- if Save then do
- if left(urlnaam,17) = 'file://localhost/' then do
- address command 'GetString "Local document - change URL for remote links" String "'urlnaam'" Var newurl Global'
- if RC = 0 then
- urlnaam = getvar('newurl')
- call deletevar('newurl')
- end
-
- nr = pos(urlnaam||ret,htmllist)
- if nr = 0 then
- call NewHTML
- else do
- startnr = lastpos(ret,htmllist,nr)+1
- saveto = substr(htmllist,startnr,nr-startnr-1)
- hit=hit+1
- end
-
- end
- end
- end
-
- if hit>0 then do
- if hit ~= 2 then
- saveto=cachedir'HTMLs/'saveto
- else
- do n=1 until ~exists(saveto)
- saveto='T:temphtml'n
- end
- nr = lastpos('/',urlnaam)
- urlstam = left(urlnaam,nr)
- nr = pos('/',urlstam,8)
- urlroot = left(urlstam,nr-1)
-
- address AMOSAIC.1 'fetch source'
- inhoud = result
- nr = max(pos('<html>',inhoud),pos('<HTML>',inhoud))
- if nr > 1 then
- inhoud = substr(inhoud,nr)
- call ChkLinks
- zkinhoud=''
-
- call ChkCache
- call open(4output,saveto,'W')
- call writech(4output,inhoud)
- call close(4output)
- inhoud=''
-
- address AMOSAIC.1 'jump url file://localhost/'saveto
- do i=1 for image.0
- if nieuw.i > 0 then
- address AMOSAIC.1 'fetch inline url file://localhost/'cachedir'Images/'nieuw.i
- end
- if hit=2 then
- call delete(saveto)
-
- end
- exit 0
-
- NewHTML:
- nr = lastpos('/',urlnaam)
- bestand = substr(urlnaam,nr+1)
- address AMOSAIC.1 'fetch title'
- titel = result
- if bestand = '' then
- bestand=titel
-
- q=0
- do until q>0
- address command 'SetEnv filenaam `RequestFile 'dir' File "'bestand'" Title "Save HTML document as..." SaveMode`'
- bestand = getvar('filenaam')
- call deletevar('filenaam')
- if bestand = '' then
- q=1
- else do
- nr = lastpos('/',bestand)
- if left(bestand,nr) = dir then
- if ~exists(bestand) then
- q=2
- end
- end
-
- if q=2 then do
- saveto = substr(bestand,nr+1)
- hit=hit+1
- address command 'Echo >>'cachedir'HTMLlist "'saveto','urlnaam'"'
- htmllist=htmllist||saveto','urlnaam||ret
- address command 'Echo >>'cachedir'Cache.html "<A HREF=*"HTMLs/'saveto'*">'titel'</A><BR>"'
-
- zoek=urlnaam
- vervang='file://localhost/'dir||saveto
- call MultiFR
- end
- return 0
-
- RemHTML:
- type=0
- tekst=cachedir'HTMLs/'
- nr = pos(tekst,urlnaam)
- if nr > 0 then
- HTML = substr(urlnaam,nr+length(tekst))
- else
- HTML=urlnaam
- call WisItem
-
- type=1
- address AMOSAIC.1 'fetch images IMAGE'
- do i=1 for image.0
- if image.i.current then do
- tekst=cachedir'Images/'
- nr = pos(tekst,image.i.url)
- if nr > 0 then
- Image = substr(image.i.url,nr+length(tekst))
- else
- Image=image.i.url
- call WisItem
- end
-
- end
- return 0
-
- ChkLinks:
- delta=0
- zkinhoud = upper(inhoud)
- zoeknr = pos('HREF=',zkinhoud)
- do while zoeknr > 0
-
- nr = zoeknr-lastpos('<A',zkinhoud,zoeknr)-2
- zoeknr=zoeknr+5
- if nr=1 | nr=2 then do
-
- if substr(zkinhoud,zoeknr,1) = '"' then
- zoeknr=zoeknr+1
- else do
- inhoud = insert('"',inhoud,zoeknr+delta-1)
- delta=delta+1
- end
- stopnr = pos('>',zkinhoud,zoeknr)
- zklen=stopnr-zoeknr
-
- urlnaam = substr(zkinhoud,zoeknr,zklen)
- if pos(':',urlnaam) = 0 then
- call ReplUrl
- if right(urlnaam,1) ~= '"' then do
- inhoud = insert('"',inhoud,stopnr+delta-1)
- delta=delta+1
- end
-
- end
- else
- zklen=1
-
- zoeknr = pos('HREF=',zkinhoud,zoeknr+zklen)
- end
-
- delta=0
- zkinhoud = upper(inhoud) '"'
- zoeknr = pos('SRC=',zkinhoud)
- do while zoeknr > 0
-
- nr = substr(zkinhoud,zoeknr-1,1)
- zoeknr=zoeknr+4
- if nr=' ' | nr=ret then do
-
- if substr(zkinhoud,zoeknr,1) = '"' then
- zoeknr=zoeknr+1
- else do
- inhoud = insert('"',inhoud,zoeknr+delta-1)
- delta=delta+1
- end
- stopnr = min(pos('"',zkinhoud,zoeknr),pos(' ',zkinhoud,zoeknr),pos(ret,zkinhoud,zoeknr))+1
- zklen=stopnr-zoeknr
-
- urlnaam = substr(zkinhoud,zoeknr,zklen)
- if pos('://',urlnaam) = 0 then
- call ReplUrl
- if right(urlnaam,1) ~= '"' then do
- inhoud = insert('"',inhoud,stopnr+delta-2)
- delta=delta+1
- end
-
- end
- else
- zklen=1
-
- zoeknr = pos('SRC=',zkinhoud,zoeknr+zklen)
- end
-
- delta=0
- zkinhoud = upper(inhoud)
- zoeknr = pos('ACTION="',zkinhoud)
- do while zoeknr > 0
-
- zoeknr=zoeknr+8
- stopnr = pos('"',zkinhoud,zoeknr)
- zklen=stopnr-zoeknr
-
- urlnaam = substr(zkinhoud,zoeknr,7)
- if urlnaam ~= 'HTTP://' then
- call ReplUrl
-
- zoeknr = pos('ACTION="',zkinhoud,zoeknr+zklen)
- end
- return 0
-
- ReplUrl:
- if left(urlnaam,1) ~= '#' then do
- if left(urlnaam,1) ~= '/' then
- tekst=urlstam
- else
- tekst=urlroot
-
- inhoud = insert(tekst,inhoud,zoeknr+delta-1)
- delta=delta+length(tekst)
- end
- return 0
-
- ChkCache:
- do i=1 for image.0
- if nieuw.i > 0 then do
- nr = pos(image.i.url'"',inhoud)
- inhoud = delstr(inhoud,nr,length(image.i.url))
- inhoud = insert('file://localhost/'cachedir'Images/'nieuw.i,inhoud,nr-1)
- end
- end
-
- if hit ~= 2 then do
- address AMOSAIC.1 'fetch links HREF'
- do i=1 for href.0
- nr = pos(href.i.url||ret,htmllist)
- if nr > 0 then do
- startnr = lastpos(ret,htmllist,nr)+1
- bestand = substr(htmllist,startnr,nr-startnr-1)
-
- nr = pos(href.i.url,inhoud)
- do while nr > 0
- zklen=length(href.i.url)
- tekst=substr(inhoud,nr+zklen,1)
-
- if tekst='#' | tekst='"' then do
- inhoud = delstr(inhoud,nr,zklen)
- inhoud = insert('file://localhost/'cachedir'HTMLs/'bestand,inhoud,nr-1)
- end
-
- nr = pos(href.i.url,inhoud,nr+zklen)
- end
-
- end
- end
-
- end
- return 0
-
- AllesWeg:
- address command
- 'Echo >'cachedir'ImageList'
- 'Echo >'cachedir'NrOfImage 0'
- 'Delete 'cachedir'Images/#?'
-
- 'Echo >'cachedir'HTMLlist'
- 'Echo >'cachedir'Cache.html "<HTML><HEAD><TITLE>Available cached documents</TITLE></HEAD><BODY>"'
- 'Delete 'cachedir'HTMLs/#?'
- return 0
-
- WisItem:
- if type then do
- nr = pos('://',Image)
- if nr > 0 then
- zoek=','Image||ret
- else
- zoek=ret||Image','
- listfile=cachedir'ImageList'
- dir=cachedir'Images/'
-
- end
- else do
- nr = pos('://',HTML)
- if nr > 0 then
- zoek=','HTML||ret
- else
- zoek=ret||HTML','
- listfile=cachedir'HTMLlist'
- dir=cachedir'HTMLs/'
- end
-
- call open(1input,listfile,'R')
- list = ret||readch(1input,65534)
- call close(1input)
-
- nr = pos(zoek,list)
- if nr = 0 then
- say zoek 'not found in' listfile
- else do
- startnr = lastpos(ret,list,nr)+1
- midnr = pos(',',list,startnr)
- stopnr = pos(ret,list,midnr)+1
-
- bestand = substr(list,startnr,midnr-startnr)
- urlnaam = substr(list,midnr+1,stopnr-midnr-2)
- call delete(dir||bestand)
- say dir||bestand 'with URL:' urlnaam 'deleted.'
-
- list = delstr(list,startnr,stopnr-startnr)
- call open(1output,listfile,'W')
- call writech(1output,substr(list,2))
- call close(1output)
-
- if ~type then do
- call open(5input,cachedir'Cache.html','R')
- list = readch(5input,65535)
- call close(5input)
-
- nr = pos('HTMLs/'bestand,list)
- startnr = lastpos(ret,list,nr)+1
- stopnr = pos(ret,list,nr)+1
-
- list = delstr(list,startnr,stopnr-startnr)
- call open(5output,cachedir'Cache.html','W')
- call writech(5output,list)
- call close(5output)
- end
-
- zoek='file://localhost/'dir||bestand
- vervang=urlnaam
- dir=cachedir'HTMLs/'
- call MultiFR
- end
- return 0
-
- MultiFR:
- files = showdir(dir,'FILES',',')
- if files = '' then
- return 0
- else
- files=files','
-
- startnr=1
- stopnr = pos(',',files)
- do until stopnr = 0
- bestand = substr(files,startnr,stopnr-startnr)
-
- call open(6input,dir||bestand,'R')
- inhoud = readch(6input,65535)
- call close(6input)
-
- q=0
- nr = pos(zoek,inhoud)
- do while nr > 0
- zklen=length(zoek)
- tekst=substr(inhoud,nr+zklen,1)
-
- if tekst='#' | tekst='"' then do
- q=1
- inhoud = delstr(inhoud,nr,zklen)
- inhoud = insert(vervang,inhoud,nr-1)
- zklen=length(vervang)
- end
-
- nr = pos(zoek,inhoud,nr+zklen)
- end
-
- if q then do
- call open(6output,dir||bestand,'W')
- call writech(6output,inhoud)
- call close(6output)
- say dir||bestand 'updated.'
- end
-
- startnr=stopnr+1
- stopnr = pos(',',files,startnr)
- end
- inhoud=''
- return 0
-
-