10 REM > ViewToHTML v0.12
   20 REM Convert Extended View File to HTML
   30 REM v0.10 31-Oct-1999 Initial version
   40 REM v0.11 28-Sep-2000 TABs work
   50 REM v0.12 14-Oct-2000 <U></U> create <A href> if target exists
   60 :
   70 exec%=TRUE*0
   80 A$=FNGetEnv:debug%=FALSE:quit$="":ON ERROR IF FNerr:PROCexit(ERR):END
   90 s$="/":IFos%>31:s$="."
  100 IF HIMEM-LOMEM<&2400:MODE &87
  110 mx%=HIMEM-LOMEM-1800+1800*(HIMEM>&FFFF)
  120 DIM ctrl%30,mem%mx%:data%=mem%+90:mx%=mx%-180:X%=ctrl%:Y%=X%DIV256
  130 IFexec%:OSCLI"Exec _list"
  140 REPEAT:REPEAT:REPEAT
  150       INPUT"Input file:  "in$:IFos%>31:IFINSTR(in$,".")=0:in$=in$+".":s$=""
  160       IF exec%:IF in$="":PROCexit(0):END
  170     UNTIL exec%=0 OR LENin$>2:IF exec%:IF LEFT$(in$,1)=".":in$=MID$(in$,2)
  180     in%=OPENIN(in$):IF in%=0:PRINT"'"in$"' not found":PROCexit(214)
  190     out$="":IF exec%=0:INPUT"Output file: "out$
  200     IF out$="":out$=in$+s$+"htm":IF exec%:out$=LEFT$(out$,12)
  210     IF in$=out$:CLOSE#in%:in%=0
  220   UNTIL in%
  230   out%=OPENIN(out$):IFout%:CLOSE#out%:out%=0:OSCLI"Access "+out$+" WR/R"
  240   out%=OPENOUT(out$):IF out%=0:PRINT"Can't open '"out$"'":CLOSE#in%:in%=0:PROCexit(192)
  250   PROCgbpb(3,in%,data%,128,0):data%!128=&D00
  260   IF?data%=ASC":":CLOSE#in%:in%=0:in$=LEFT$($data%,INSTR($data%,CHR$0)-1):in%=OPENIN(in$)
  270   ON ERROR IF FNerr:PROCexit(ERR):END
  280   PROCwr("<HTML><HEAD><TITLE></TITLE></HEAD><BODY><PRE>"+CHR$13)
  290   link$="":code%=FALSE:tab%=0:nl%=0:iptr%=0:ext%=EXT#in%:REPEAT
  300     num%=mx%:IF iptr%+num%>EXT#in%:num%=EXT#in%-iptr%
  310     PROCgbpb(3,in%,data%,num%,iptr%)
  320     txt%=data%:REPEAT PROCconv(?txt%):txt%=txt%+1:UNTIL txt%>=data%+num%
  330     iptr%=iptr%+num%
  340   UNTIL iptr%>=EXT#in%:PROCwr("</PRE></BODY></HTML>"+CHR$13)
  350   CLOSE#out%:out%=0:CLOSE#in%:in%=0:OSCLI"SetType "+out$+" FAF"
  360   IF exec%:OSCLI"Access "+out$+" R/R":OSCLI"Stamp "+out$
  370 PRINT:UNTIL exec%=0
  380 PROCexit(0):END
  390 :
  400 DEFFNerr:REPORT:PROCCloseAll:PRINT:=TRUE
  410 :
  420 DEFPROCexit(A%):quit$=quit$:A$=quit$:quit$="":IF debug%:PRINT"Quit: "A$
  430 OSCLI"FX1,"+STR$(A%AND255):IF A$<>"":PROCos(A$)
  440 A$=CHR$13:END:ENDPROC
  450 :
  460 DEFPROCos(A$):IF ASC A$=42:OSCLI A$ELSE IF A$="":ENDPROC ELSE OSCLI A$
  470 ENDPROC
  480 :
  490 DEFFNGetEnv:A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256:=""
  500 :
  510 DEFPROCCloseAll:*EXEC
  520 in%=in%:IF in%:A%=in%:in%=0:CLOSE#A%
  530 out%=out%:IF out%:A%=out%:out%=0:CLOSE#A%
  540 test%=test%:IF test%:A%=test%:test%=0:CLOSE#A%
  550 ENDPROC
  560 :
  570 DEFPROCgbpb(A%,C%,D%,N%,P%):IF PAGE<&FFFFF:?X%=C%:X%!1=D%:X%!5=N%:X%!9=P%:CALL&FFD1:ENDPROC
  580 IFA%=1ORA%=3:PTR#C%=P%:REPEAT
  590   IFA%=1ORA%=2:BPUT#C%,?D%:D%=D%+1 ELSE IFA%=3ORA%=4:?D%=BGET#C%
  600 D%=D%+1:N%=N%-1:UNTILN%<1 OR (A%>2 AND EOF#C%):ENDPROC
  610 :
  620 DEFPROCwr(A$):LOCAL A%:IF A$="":ENDPROC
  630 FOR A%=1 TO LEN A$:BPUT#out%,ASC MID$(A$,A%,1):NEXT:ENDPROC
  640 :
  650 DEFPROCconv(A%)
  660 IF A%=32:IF tab%:tab%=0:ENDPROC
  670 tab%=0:IF A%=9:PROCtab:ENDPROC
  680 IF A%=13 OR A%=10:PROCctrl:ENDPROC
  690 nl%=0:IF A%=28:PROCul:ENDPROC
  700 IF A%=29:PROChl:ENDPROC
  710 IF INSTR("<>&""",CHR$ A%):PROCchar:ENDPROC
  720 IF A%<32:PROCctrl ELSE BPUT#out%,A%:IF link$<>"":link$=link$+CHR$A%
  730 ENDPROC
  740 :
  750 DEFPROCtab:PROCwr(CHR$32+CHR$9):tab%=1:ENDPROC
  760 :
  770 DEFPROCul:ul%=NOTul%
  780 IF ul%:PROCwr("<U>"):link$=CHR$ELSE PROCwr("</U>"):PROClink
  790 ENDPROC
  800 :
  810 DEFPROChl:A%=txt%?1:txt%=txt%+1
  820 IF A%=ASC"Q":PROCwr("<H1>"):ENDPROC
  830 IF A%=ASC"q":PROCwr("</H1>"):txt%=txt%-(txt%?1=13)-(txt%?1=13 AND txt%?2=13):ENDPROC
  840 IF A%=ASC"X":PROCwr("<H2>"):ENDPROC
  850 IF A%=ASC"x":PROCwr("</H2>"):txt%=txt%-(txt%?1=13):ENDPROC
  860 IF A%=ASC"D":PROCwr("<H3>"):ENDPROC
  870 IF A%=ASC"d":PROCwr("</H3>"):txt%=txt%-(txt%?1=13):ENDPROC
  880 IF A%=ASC"E":PROCwr("<STRONG>"):ENDPROC
  890 IF A%=ASC"e":PROCwr("</STRONG>"):ENDPROC
  900 IF A%=ASC"I":PROCwr("<I>"):ENDPROC
  910 IF A%=ASC"i":PROCwr("</I>"):ENDPROC
  920 IF A%=ASC"B":PROCwr("<B>"):code%=TRUE:ENDPROC
  930 IF A%=ASC"b":PROCwr("</B>"):code%=FALSE:ENDPROC
  940 REM IF A%=ASC"B":PROCwr("<STRONG><CODE>"):code%=TRUE:ENDPROC
  950 REM IF A%=ASC"b":PROCwr("</CODE></STRONG>"):code%=FALSE:ENDPROC
  960 ENDPROC
  970 :
  980 DEFPROCctrl:IF A%=10:A%=13
  990 IF A%=13:PRINT CHR$13;100*(iptr%+txt%-data%)DIV ext%;"%";
 1000 IF A%=13:nl%=nl%+1:IF nl%=3:nl%=0:PROCwr("<P>"+CHR$13):ENDPROC
 1010 IF A%=13:IF code%:PROCwr("<BR>")
 1020 REM IF A%=13:IF txt%?1<33 AND txt%?1<>13:PROCwr("<BR>")
 1030 IF A%=13:PROCwr(CHR$13):ENDPROC
 1040 PROCwr(CHR$ A%):ENDPROC
 1050 :
 1060 DEFPROCchar
 1070 IF A%=ASC"<":PROCwr("<"):ENDPROC
 1080 IF A%=ASC">":PROCwr(">"):ENDPROC
 1090 IF A%=ASC"&":PROCwr("&"):ENDPROC
 1100 IF A%=ASC"""":PROCwr("""):ENDPROC
 1110 ENDPROC
 1120 :
 1130 DEFPROClink
 1140 text$=MID$(link$,2)
 1150 REPEATlink$=MID$(link$,2):UNTILASClink$>63 OR link$="":IF link$="":ENDPROC
 1160 link$=CHR$(ASClink$AND&DF)+MID$(link$,2)
 1170 IFLEFT$(link$,4)="Unzi":link$="UnZi"+MID$(link$,5)
 1180 IFLENlink$>3:IFMID$(link$,4,1)>"`":IFLEFT$(link$,3)="Zip":link$="Zip"+CHR$(ASCMID$(link$,4)AND&DF)+MID$(link$,5)
 1190 IF RIGHT$(link$,1)=")":link$=LEFT$(RIGHT$(link$,2),1)+LEFT$(link$,LENlink$-3) ELSE link$="1"+link$
 1200 link$=MID$(link$,2,1)+"."+link$
 1210 test%=OPENIN(link$):IF test%=0:link$="":ENDPROC
 1220 CLOSE#test%:test%=0
 1230 link$="../"+LEFT$(link$,1)+"/"+MID$(link$,3)+".htm"
 1240 PTR#out%=PTR#out%-LENtext$-4
 1250 PROCwr("<A href="""+link$+""">"+text$+"</A></U>")
 1260 link$="":ENDPROC