include readf.e
sequence filename
sequence fileform
sequence filemask = {}
sequence record
integer fileout
record = getenv("QUERY_STRING")
if integer(record)
then record = command_line()
if length(record)>=3
then filename=record[3]
if length(record)>=4
then fileform=record[4]
if length(record)=5
then filemask = record[5]
end if
else fileform=filename
end if
else puts(1,"Use genhtml data_filename [format_filename [file_mask]] (without .ext)\n") abort(1)
end if
fileout = open(fileform&".htm","w")
if fileout<0 then puts(1,"Cann't open file .htm\n") abort(1) end if
else fileout = find('+',record)
if fileout
then filename = record[1..fileout-1]
fileform = record[fileout+1..]
else filename = record
fileform = record
end if
fileout = find('+',fileform)
if fileout
then filemask = fileform[fileout+1..]
fileform = fileform[1..fileout-1]
end if
fileout = 1
end if
integer filetxt=open(filename&".txt","r")
integer filemnr=open(fileform&".mnr","r")
if filemnr<0 then puts(1,"Cann't open file "&fileform&".mnr\n") abort(1) end if
if filetxt<0 then puts(1,"Cann't open file "&filename&".txt\n") abort(1) end if
sequence mnr={}
record=readf(filemnr,',')
while sequence(record) do
if length(record) then mnr=append(mnr,record) end if
record=readf(filemnr,',')
end while
close(filemnr)
function subdollar(sequence mnr;text)
integer location
if not sequence(mnr) then mnr={mnr} end if
location=find('$',mnr)
if integer(text) then text=sprintf("%d",{text}) end if
while location do
mnr=mnr[1..location-1]&text&mnr[location+1..-1]
location = find('$',mnr)
end while
return mnr
end function
integer titleindex = 1
integer lengthsubtitle
integer lengthmnrdata
integer lfilemask = 0
procedure makehtml(integer lengte)
sequence result = {}
if lfilemask
then for i = 1 to lfilemask do
if filemask[i] != '-'
then if i>lengte
then if filemask[i]='1'
then result = {}
exit
end if
else if filemask[i] = '0'
then result &= subdollar(mnr[titleindex][i],record[i])
elsif filemask[i]='1'
then if length(record[i])
then result &= subdollar(mnr[titleindex][i],record[i])
else result = {}
exit
end if
elsif and_bits(filemask[i],record[i])
then result &= mnr[titleindex][i]
else result = {}
exit
end if
end if
end if
end for
if length(result) then puts(fileout,result&'\n') end if
else for i = 1 to lengte do
result=subdollar(mnr[titleindex][i],record[i])
if length(result) then puts(fileout,result&'\n') end if
end for
end if
end procedure
record = readf(filetxt,',')
if not sequence(record)
then puts(1,"Error in .txt file No Title record\n") abort(1)
end if
makehtml(length(mnr[titleindex]))
record = readf(filetxt,',')
lengthsubtitle = length(record)
while sequence(record) do
if titleindex+1 < length(mnr)
then titleindex+=1
else titleindex-=1
end if
makehtml(lengthsubtitle)
titleindex+=1
lengthmnrdata = length(mnr[titleindex])
record = readf(filetxt,',')
lfilemask = length(filemask)
while sequence(record) and ( length(record) != lengthsubtitle ) do
if lengthmnrdata>length(record)
then makehtml(length(record))
else makehtml(lengthmnrdata)
end if
record = readf(filetxt,',')
end while
lfilemask = 0
end while
close(filetxt)
puts(fileout,mnr[-1][1])
close(fileout)