include readf.e
integer filein,fileout,html
-- de bekende ellende
sequence filesep,delcmd,copycmd,PEU
integer mswin
constant LINUX=3
if platform()=LINUX
then mswin=0
filesep='/'
delcmd="rm -f " -- use force to delete and overwrite the user .
copycmd="cp -f "
PEU="peul"
else mswin=1
filesep='\\'
delcmd="del "
copycmd="copy "
PEU="peuw"
end if
--global
constant stylesheet="a {text-decoration:none} a:link{color:blue} a:visited{color:blue} a:active{color:blue} a:hover{color:brown}\n"
procedure zet_read_flag(integer filein)
--neem de disk positie-2
--schrijf terug een '1'
-- in linux staat op disk 1\n dus -2
-- in MSwindows staat op disk 1\r\n\ dus -3
integer readflag=where(filein)
~seek(filein,readflag-2-mswin)
putc(filein,'1')
~seek(filein,readflag) -- zet terug om volgende readflags te lezen
end procedure
-- hier de bewerkingen
-- herladen van de feeds
-- dit gaat eigenlijk niet goed daar pserver wacht totdat de opdracht is uit gevoerd
procedure herlaad(integer html)
puts(html,"
Herladen
van alle feed's
")
end procedure
procedure laad(integer html)
system(PEU&" RSSREAD.EX",0)
puts(html,"")
end procedure
-- cmd init maakt de 'index' aan .
-- index bestaat uit link's -> RSSDISPL+feedX
-- lees uit RSSFEEDS.TXT de feednaam,feedindex en schrijf dit naar frame=index
procedure maakindex(integer html)
sequence index -- bevat feednaam,URL,index
sequence style={"bold","normal"}
integer readflag
integer filein=open("RSSFEEDS.TXT","r")
-- ik hoop niet dat een of andere malloot dit bestand ooit verwijderd
index={}
sequence text=readf(filein,',')
while sequence(text) do
index=append(index,text)
text=readf(filein,',')
end while
close(filein)
-- maak index html
puts(html,"RSS Feed's
\n")
for i=1 to length(index) do
filein=open(index[i][3]&".rss","r")
if getc(filein)='0' then readflag=1 else readflag=2 end if
close (filein)
-- puts(html,"- "&index[i][1]&"\n")
printf(html,"
- %s",{index[i][3],style[readflag],index[i][1]})
end for
puts(html,"
")
end procedure
procedure markgelezen(integer html)
integer cookie=open("cookie","r")
sequence cook
if cookie>2
then --file bestaat
cook=gets(cookie)
close(cookie)
if cook[1..4]="feed"
then --maak een nieuw kommando dat de Items readflag op 1 zet
puts(html,"")
else --onjuiste plaats voor dit kommando
puts(html,"Foutje
Deze opdracht alleen als je een RSS Feed selecteerd
")
end if
else --file niet gemaakt ?
puts(html,"Foutje
Deze opdracht alleen als je een RSS Feed selecteerd
")
end if
end procedure
-- display gevraagde feed
procedure feeddisp(integer html,sequence feednaam,integer markoff)
-- lees de elementen uit de feedX.rss en schrijf deze in frame=rss
integer feedin=open(feednaam&".rss","r+"),readflag
sequence feedheader={},feeds={},text,feed
sequence style={"bold","normal"}
for i=1 to 5 do
feedheader=append(feedheader,gets(feedin))
end for
text=gets(feedin)
while sequence(text) do
feed={text}
for i=1 to 4 do
feed=append(feed,gets(feedin))
end for
-- zet alles als gelezen .
if feed[5][1]='0' and markoff=1
then zet_read_flag(feedin)
feed[5][1]='1'
end if
feeds=append(feeds,feed)
text=gets(feedin)
end while
if markoff=1
then -- zet readall op 1
~seek(feedin,0)
putc(feedin,'1')
end if
close(feedin)
-- lay out ?
puts(html,""&feedheader[2]&"
\n")
for i=1 to length(feeds) do
if feeds[i][5][1]='0' then readflag=1 else readflag=2 end if
printf(html,"- %s",{feednaam,i,style[readflag],feeds[i][1]})
end for
-+
puts(html,"
"&feedheader[2]&"
\n")
for i=1 to length(feeds) do
if feeds[i][5][1]='0' then readflag=1 else readflag=2 end if
printf(html,"- %s",{feednaam,i,style[readflag],feeds[i][1]})
end for
-+
end procedure
-- geef gevraagde link terug en zet de readflag op 1 (gelezen)
procedure feedexec(integer html,sequence cmd)
sequence URL
sequence feedread
integer readall='1',readflag,readallflag
integer index=sreadf(cmd[2],"%d"),filein=open(cmd[1]&".rss","r+")
feedread=gets(filein) readallflag=feedread[1]
for i=1 to 4 do feedread=gets(filein) end for -- header
for i=2 to index[1] do
for j=1 to 4 do
feedread=gets(filein)
end for
feedread=gets(filein)
if feedread[1]='0' then readall='0' end if
end for
feedread=gets(filein)
URL=gets(filein)
--get readflag
feedread=gets(filein)
feedread=gets(filein)
feedread=gets(filein)
if feedread[1]='0'
then zet_read_flag(filein)
end if
if readall='1'
then -- rest van de readflags
feedread=gets(filein)
while sequence(feedread) do
for j=1 to 4 do
feedread=gets(filein)
end for
if feedread[1]='0' then readall='0' exit end if
feedread=gets(filein)
end while
end if
if readall='1' and readallflag='0'
then ~seek(filein,0) putc(filein,readall) -- zet readall flag
end if
close(filein)
puts(html,"
loading
\n")
end procedure
-- routine's i.v.m. CGI
function split(sequence text, integer char)
sequence result={}
integer i=find(char,text)
integer klad=1
while i do
result=append(result,text[klad..klad+i-2])
klad=i+1
i=find(char,text[klad..])
end while
return append(result,text[klad..])
end function
function replace_all(sequence intext;teken;door )
integer j=find(teken,intext)
integer klad=0
while j do
intext[j+klad]=door
klad=j
j=find(teken,intext[j+1..-1])
end while
return intext
end function
function convert_ascii(sequence intext)
integer hex=find('%',intext),klad=0
sequence hexval
while hex do
hex=klad+hex
hexval=value('#'&intext[hex+1..hex+2])
intext=intext[1..hex-1]&hexval[2]&intext[hex+3..-1]
klad=hex
hex=find('%',intext[hex+1..-1])
end while
return intext
end function
-- end CGI routine's
-- main program
sequence post,postcmd,cmdline,cl
-- to findout if CGI is used
atom METHOD=getenv("REQUEST_METHOD")
if sequence(METHOD)
then
cmdline={0,0}&split(getenv("QUERY_STRING"),'+')
html=1 -- schrijf direct naar output
if METHOD="POST" then
post=value(getenv("CONTENT_LENGTH"))
cl=post[2]
postcmd=open("post.cmd","w+")
if postcmd<3 then
puts(1,"cann't open post.cmd\n")
abort(0)
end if
post=""
post=get_bytes(0,cl)
post=replace_all(replace_all(post,'+',' '),'&','\n')
post=convert_ascii(post)
puts(postcmd,post)
close(postcmd)
end if
else
-- geen CGI maar maakt gebruik van de peu server of als command line .
cmdline=command_line()
-- de 'normale versie' schrijft naar 'agenda.htm'
html=open("agenda.htm","w")
if html<0
then puts(1,"cann't open HTM file\n")
abort(0)
end if
end if
-- vind de opdracht : (3=feed/opdracht 4=opdracht)
if length(cmdline)<3
then maakindex(html)
--dit of fout melding te voorkomen
cmdline=append(cmdline,"init")
elsif length(cmdline)<4
then if cmdline[3]="load"
then herlaad(html)
elsif cmdline[3]="laad"
then laad(html)
elsif cmdline[3]="mark"
then markgelezen(html)
else feeddisp(html,cmdline[3],0)
end if
else if cmdline[4]="mark"
then feeddisp(html,cmdline[3],1)
else feedexec(html,cmdline[3..])
end if
end if
-- save cookie
integer cookie=open("cookie","w")
puts(cookie,cmdline[3])
close(cookie)