10 REM > ConvRTF021
   20 REM Convert various text files
   30 REM Recovered and fixed
   40 REM v0.20 VDU23;3;55 on MODE 7
   50 REM v0.21 Extended/Unextended View option
   60 REM
   70 REM Q Quad     Chapter    -> fs96 (48point)
   80 REM X Double   SubChapter -> fs48 (24point)
   90 REM D DblsStrk Section    -> fs32 (16point)
  100 REM _ Underlne SubSection -> Underline
  110 REM   Plain    Text       -> fs24 (12 point)
  120 REM E Emphs    Text       -> Bold
  130 REM B Bold     Prog Text  -> Courier
  140 REM I Italics  Pathname   -> Italics
  150 :
  160 MODE&87:VDU23;3,55;0;0;0:ver$="0.21":PROCinit:REM A$=FNOS_GetEnv
  170 ONERRORIFFNerr:END
  180 REPEATUNTILFNmenu:PRINT:IFpc%:*Quit
  190 END
  200 :
  210 DEFPROCinit:A%=0:X%=1:os%=(USR&FFF4 AND &FF00)DIV256
  220 pc%=os%=32:max%=HIMEM-TOP-2000+2000*(HIMEM>&FFFF):DIM mem% max%
  230 t1$=CHR$132+CHR$157+CHR$135+CHR$141:t2$=CHR$134+CHR$157+CHR$129:t3$=CHR$129+CHR$157+CHR$135
  240 IFpc%:t1$="    ":t2$="   ":t3$=t2$
  250 lpp%=66:cr0%=2:vex%=TRUE
  260 ENDPROC
  270 :
  280 DEFFNmenu:CLS
  290 FOR z%=-1 TO pc%:PRINTt1$;"Rich Text Format File Convertor":NEXT
  300 PRINTt2$"Version ";ver$;" (C)1995-98 J.G.Harston"
  310 PRINTt3$;SPC(11-LENFNsz(max%)/2);"Memory free: "FNsz(max%)
  320 PRINT'"  Paper size:  A4 (80chars x 70lines)"'"  Page length: ";lpp%;"  Extended View: "FNonf(vex%)
  330 REM P.'SPC10"(R)TF to View"
  340 PRINT'SPC10"(V)iew to RTF"'SPC10"(L)ines per page"
  350 PRINTSPC10"(E)xtended View On/Off"
  360 PRINTSPC10"E(x)it"'SPC10"(*)command"
  370 PRINT'SPC10"Press a key:";
  380 REPEATK%=GET:IFK%>96:K%=K%-32
  390   IFK%=ASC"*":INPUTLINE"*"A$:OSCLIA$:PRINT":";
  400 UNTILINSTR("LERVX "+CHR$13,CHR$K%):PRINTCHR$K%'
  410 IFK%=ASC"L":INPUT"Lines per page: "lpp%:IFlpp%<60 OR lpp%>70:lpp%=66
  420 IFK%=ASC"L":=0
  430 IFK%=ASC"V":PROCVtoR:=0
  440 IFK%=ASC"R":PROCRtoV:=0
  450 IFK%=ASC"E":vex%=NOTvex%:=0
  460 =K%=ASC"X"
  470 :
  480 DEFPROCVtoR
  490 PRINT"Convert View to RTF file":type%=1
  500 eol$=CHR$13+CHR$10
  510 INPUT"Input View file: "in$
  520 in%=OPENIN(in$)
  530 IFin%=0:IFpc%:in$=in$+".":in%=OPENIN(in$)
  540 IFin%=0:IFpc%:in$=in$+"TXT":in%=OPENIN(in$)
  550 IFin%=0:PRINT"File '";in$;"' not found":A%=GET:ENDPROC
  560 INPUT"Output RTF file: "out$
  570 IFpc%:IFINSTR(out$,".")=0:out$=out$+".RTF"
  580 ext%=EXT#in%:IFext%<max%:ptr%=0:CLOSE#in%:in%=0:OSCLI"LOAD "+in$+" "+STR$~mem%
  590 PRINT"Input file size:    ";FNsz(ext%)'"Output approx size: ";FNsz(1.4*ext%)
  600 IFext%*2.5>max%:OSCLI"SAVE "+out$+" 0+"+STR$~(ext%*1.4)+LEFT$(" FFFF0000 FFFFFF00",NOTpc%):out%=OPENOUT(out$) ELSE out%=0:optr%=mem%+ext%
  610 PROCpre:eof%=FALSE
  620 REPEATPROCdo(FNg):UNTILeof%
  630 PROCpost:IFout%=0:OSCLI"SAVE "+out$+" "+STR$~(mem%+ext%)+" "+STR$~(optr%)+LEFT$(" FFFF0000 FFFFFF00",NOTpc%) ELSE CLOSE#out%:out%=0
  640 IFin%<>0:CLOSE#in%:in%=0
  650 IFos%=6:OSCLI"Stamp "+out$
  660 OSCLI"SetType "+out$+" C32"
  670 ENDPROC
  680 :
  690 DEFPROCpre:IFtype%<>1:ENDPROC
  700 ul%=FALSE:bd%=FALSE:code$="":cr%=cr0%:last1%=0:last0%=0
  710 PROCout("{\rtf1\ansi \deff0\deflang1024{\fonttbl{\f0\fmodern Times New Roman;}{\f1\froman Symbol;}{\f2\fswiss Arial;}{\f3\froman Courier;}}"+eol$)
  720 PROCout("\paperw11909\paperh16834\margl360\margr360\margt"+STR$(108*(70-lpp%))+"\margb"+STR$(108*(70-lpp%))+"\gutter0"+eol$)
  730 PROCout("\sectd \linex0\headery709\footery709\colsx709 \f0\fs24\pard\plain \qj")
  740 FORz%=1 TO 10:PROCout("\tx"+STR$(144*(z%*8-1))):NEXT:PROCout(eol$)
  750 ENDPROC
  760 :
  770 DEFPROCpost
  780 IFtype%=1:PROCout("}"+eol$):ENDPROC
  790 ENDPROC
  800 :
  810 DEFPROCdo(A%):IFA%=10:PRINTCHR$13;" CHR$10! ";:ENDPROC
  820 IFA%=13:IFcr%:cr%=cr%-1:ENDPROC
  830 IF last0%=13 AND last1%<>13 AND A%>32:PROCout(" ")
  840 last1%=last0%:last0%=A%
  850 IF last1%=13 AND A%=13:PROCout("\par \par "+eol$):ENDPROC
  860 IF last1%=13 AND (A%=9 OR A%=32):PROCout("\par "+eol$)
  870 IF A%=13:PROCso:ENDPROC
  880 :
  890 :
  900 REM Still some slight problems with CR/CR/etcs
  910 IFA%=ASC"\":PROCout("\\"):ENDPROC
  920 IFA%=ASC"{":PROCout("\{"):ENDPROC
  930 IFA%=ASC"}":PROCout("\}"):ENDPROC
  940 IFA%=ASC"`":PROCout("\'a3"):ENDPROC
  950 IFA%>127:PROCout("\'"+STR$~A%):ENDPROC
  960 IFA%=9:PROCout("\tab "):ENDPROC
  970 IFA%=26:PROCout(" "):ENDPROC
  980 IFA%=28:IFul%:PROCrem("\ul "):PROCout("\plain "+code$+"\f0"):ul%=FALSE:ENDPROC
  990 IFA%=28:PROCout("\ul "):ul%=TRUE:code$=code$+"\ul ":ENDPROC:REM SubSection
 1000 IFA%<>29:PROCout(CHR$A%):ENDPROC
 1010 IFNOTvex%:IFbd%:PROCout("\f0\fs24\plain "):bd%=FALSE:ENDPROC
 1020 IFNOTvex%:bd%=TRUE:PROCout("\f3\fs24\b "):ENDPROC
 1030 A%=FNg
 1040 IFA%<64:PROCout("["+FNh0(A%,2)+"]"):ENDPROC
 1050 IFA%=ASC"Q":PROCout("\fs96 "):ENDPROC:REM             Chapter
 1060 IFA%=ASC"q":PROCout("\fs24 "):cr%=3:last0%=13:ENDPROC
 1070 IFA%=ASC"X":PROCout("\fs48 "):ENDPROC:REM             SubChapter
 1080 IFA%=ASC"x":PROCout("\fs24 "):cr%=1:last0%=13:ENDPROC
 1090 IFA%=ASC"D":PROCout("\fs32 "):ENDPROC:REM             Section
 1100 IFA%=ASC"d":PROCout("\fs24 "):ENDPROC
 1110 IFA%=ASC"B":PROCout("\f3\fs24\b "):ENDPROC:REM        Program text
 1120 IFA%=ASC"b":PROCout("\f0\fs24\plain "):ENDPROC
 1130 IFA%=ASC"E"ORA%=ASC"e":A%=A%-3:REM Emphasise
 1140 REM I-> falls through
 1150 IFA%>95:PROCrem("\"+CHR$A%+" "):PROCout("\f0\plain "+code$):ENDPROC
 1160 PROCout("\f0\"+CHR$(A%+32)+" "):code$=code$+"\"+CHR$(A%+32)+" ":ENDPROC
 1170 :
 1180 DEFPROCrem(a$):I%=INSTR(code$,a$):IFI%=0:ENDPROC
 1190 code$=LEFT$(code$,I%-1)+MID$(code$,I%+LENa$):ENDPROC
 1200 :
 1210 DEFPROCRtoV
 1220 PRINT"Convert RTF to VIEW file":type%=1
 1230 INPUT"Input RTF file: "in$
 1240 INPUT"Output VIEW file: "out$
 1250 PRINT"Not yet";:A%=GET:ENDPROC
 1260 in%=OPENIN(in$):IFin%=0:PRINTin$;" not found":in%=GET:ENDPROC
 1270 out%=OPENOUT(out$)
 1280 ul%=FALSE:code$=""
 1290 REPEAT:A%=FNg
 1300     IFA%=ASC"\":PROCod
 1310     IFINSTR("\{}",CHR$A%)=0 AND A%>31:PROCout(CHR$A%)
 1320     PROCso
 1330 UNTILeof%
 1340 ENDPROC
 1350 :
 1360 DEFPROCod:a$=CHR$FNg
 1370 IFINSTR("\{}",a$):PROCout(a$):ENDPROC
 1380 REPEATa$=a$+FNg:UNTILINSTR("\{} ",RIGHT$(a$,1))
 1390 b$=RIGHT$(a$,1):a$=LEFT$(a$,LENa$-1)
 1400 IFa$="\tab":PROCout(CHR$9)
 1410 IFa$="\par":PROCout(CHR$13)
 1420 IFa$="\ul":PROCout(CHR$28):ul%=NOTul%
 1430 IFa$="\b":::
 1440 IFa$="\i":::
 1450 IFa$="\plain":::
 1460 IFb$="\":PROCod
 1470 ENDPROC
 1480 :
 1490 DEFPROCout(a$):IFa$="":ENDPROC
 1500 IFout%=0:$optr%=a$:optr%=optr%+LENa$:ENDPROC
 1510 REPEAT:BPUT#out%,ASCa$:a$=MID$(a$,2):UNTILa$="":ENDPROC
 1520 :
 1530 DEFFNg:IFin%=0:IFptr%>=ext%-1:eof%=TRUE:=mem%?(ptr%-1)
 1540 IFin%=0:ptr%=ptr%+1:=mem%?(ptr%-1)
 1550 IFEOF#in%:eof%=TRUE:=254
 1560 =BGET#in%
 1570 :
 1580 DEFPROCso:IFin%=0:PRINTCHR$13;FNd0(100*ptr%DIVext%,2);"%";:ENDPROC
 1590 PRINTCHR$13;FNd0(100*PTR#in%DIVEXT#in%,2);"%";:ENDPROC
 1600 :
 1610 DEFFNsz(A%):="&"+STR$~A%+", "+STR$A%+" bytes"
 1620 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
 1630 DEFFNd0(A%,N%)=RIGHT$("00000000"+STR$A%,N%)
 1640 DEFFNonf(A%):IFA%:="ON" ELSE ="OFF"
 1650 :
 1660 DEFFNerr:REPORT:CLOSE#0:IFERR<>17:K%=GET
 1670 =K%<0 AND INKEY(os%>0)
 1680 :
 1690 DEFFNOS_GetEnv:LOCAL A$,A%,X%,Y%
 1700 A%=0:X%=1:os%=(USR &FFF4 AND &FF00)DIV256
 1710 IFos%=32:A$=$&100:?&100=13:=MID$(A$,INSTR(A$+" "," ")+1)
 1720 IFos%=6 AND HIMEM>&8000:SYS "OS_GetEnv" TO A$:A$=MID$(A$,INSTR(A$," ",1+INSTR(A$," ",1+INSTR(A$," ")))):=A$
 1730 X%=TOP+200:Y%=X%DIV256:?X%=0:X%!1=TOP+220:!(X%!1)=0:A%=9:CALL&FFD1:X%=TOP+220:IF!X%:X%?(1+?X%)=13:=$(X%+1)
 1740 =""