1000 REMark ------------------------------
1010 REMark    DOC2RTF_bas - Mark J Swift
1020 :
1030 REMark Uses ALCHP, CLCHP, FLEN, FTYP
1040 REMark Uses FDAT, HEX, HEX$, D68K
1050 REMark Uses CURSEN, CURDIS
1051 :
1052 REMark Thanks go to S N Goodwin for
1053 REMark obtaining vital information
1054 REMark about the DOC format, and to
1055 REMark Chas Dillon for providing it
1060 REMark ------------------------------
1070 :
1080 REMark DATA_AREA 2
1090 REMark WHEN ERRor
1100 REMark PRINT #3\\"Error: "
1110 REMark REPORT #3,ERNUM
1120 REMark INPUT #3;\" Press ENTER to re-start.";Rplc$
1130 REMark RETRY
1140 REMark END WHEN
1150 :
1160 DIM InFile$(100),OutFile$(100),verstag$(4)
1170 DIM RTFtbs%(256),RTFtbs$(256),K$(1),extra$(4),RTFo$(4096),t$(256)
1180 cWdth=11880/98: REMark width of 10pt courier in 1/20 pts (approx)
1190 verstag$="1.01":REMark this version
1200 OPEN#3;"Con_456x144a28x12"
1210 OPEN#4;"Scr_104x12a362x20"
1220 OPEN#5;"Scr_436x52a38x99"
1230 REPeat outer_loop
1240  WINDOW#3;456,144,28,12:PAPER#3;0:INK#3;7:CLS#3:BORDER#3;3,2:BORDER#3;2,0:BORDER#3;1,2:WINDOW#3;438,130,36,19:BORDER#5;1,4:INK#5;4:PAPER#5;0
1250  CSIZE#3;2,1:PRINT#3;"DOC2RTF v";verstag$:CSIZE#3;0,0
1260  PRINT#3;"DOC file translation utility by MARK J SWIFT";
1270  CLS#4:BORDER#4;1,7:INK#4;4:CLS#5
1280  WINDOW#3;438,40,36,59
1290  INK#5;4
1300  PRINT#5;" DOC2RTF is a file utility that translates QUILL/XCHANGE doc files into"
1310  PRINT#5;" rich text format (RTF)."
1320  PRINT#5;\" RTF files can easily be read into most PC and Apple Macintosh"
1330  PRINT#5;" word-processors and DTP applications."
1370  INPUT#3;\"      Input source DOC filename  >";InFile$
1380  IF InFile$="" THEN EXIT outer_loop
1390  INPUT#3;" Input destination RTF filename  >";OutFile$
1400  IF OutFile$="" THEN EXIT outer_loop
1410  CLS#5
1419  DOCbeginDocument InFile$
1420  RTFleading=240
1421  IF (DOChjust<>0) THEN DOCdoHeader
1422  IF (DOCfjust<>0) THEN DOCdoFooter
1423  DOCclearEnhance
1425  SET_POSITION#6,tblOffs+22+14+14
1427  RTFleading=240*(1+DOCLineGap)
1430  REPeat tblLoop
1440   IF DOCdone% THEN EXIT tblLoop
1450   DOCdoParagraph
1460   IF txtOffs>tblOffs THEN 
1470    BLOCK#4;100,10,0,0,4
1480   ELSE 
1490    BLOCK#4;INT((txtOffs/tblOffs)*100),10,0,0,4
1500   END IF 
1510  END REPeat tblLoop
1520  DOCendDocument
1530  REMark RETRY_HERE
1540 END REPeat outer_loop
1550 CLOSE#3
1560 CLOSE#4
1570 CLOSE#5
1580 STOP
1590 :
1600 DEFine PROCedure DOCbeginDocument(InFile$)
1610  OPEN_IN#6,InFile$
1620  SET_POSITION#6,10
1630  tblOffs=STRINGL(INPUT$(#6,4))
1641  tblLen=STRING%(INPUT$(#6,2))
1645  PagOffs=tblOffs+tblLen
1647  PagLen=STRING%(INPUT$(#6,2))
1648  GenOffs=PagOffs+PagLen
1649  GenLen=STRING%(INPUT$(#6,2))
1650  RulOffs=GenOffs+20
1651  rulLen=GenLen-20
1652  GenLen=20
1659  OPEN_IN#7,InFile$
1660  DOCclearEnhance
1670  DOCrulID=0
1680  SET_POSITION#6,GenOffs
1681  DOCbotM=CODE(INKEY$(#6,-1))
1689  K=CODE(INKEY$(#6,-1))
1690  SELect ON K
1691  =1:DOCpwid=40
1692  =2:DOCpwid=64
1693  =REMAINDER :DOCpwid=80
1694  END SELect 
1695  RTFpwid=INT(cWdth*DOCpwid+.5)
1696  SET_POSITION#6,GenOffs+2
1697  DOCLineGap=CODE(INKEY$(#6,-1))
1698  DOCLinePP=CODE(INKEY$(#6,-1))
1699  DOCStartPag=CODE(INKEY$(#6,-1))
1700  SET_POSITION#6,GenOffs+6
1701  DOCtopM=CODE(INKEY$(#6,-1))
1702  SET_POSITION#6,GenOffs+14
1703  DOChjust=CODE(INKEY$(#6,-1))
1704  DOCfjust=CODE(INKEY$(#6,-1))
1705  DOChGap=CODE(INKEY$(#6,-1))
1706  DOCfGap=CODE(INKEY$(#6,-1))
1707  IF DOCLinePP>70 THEN DOCLinePP=70
1708  RTFextra=240*(70-DOCLinePP)/2
1709  RTFheadery=240*DOCtopM+RTFextra
1710  RTFfootery=240*DOCbotM+RTFextra
1711  RTFmargt=RTFheadery
1712  IF (DOChjust<>0) THEN RTFmargt=RTFmargt+240*(1+DOChGap)
1713  RTFmargb=RTFfootery
1714  IF (DOCfjust<>0) THEN RTFmargb=RTFmargb+240*(DOCfGap+1)
1717  RTFstartPag=DOCStartPag
1720  RTFbeginDocument OutFile$
1730 END DEFine 
1740 :
1750 DEFine PROCedure DOCendDocument
1760  CLOSE#6
1770  CLOSE#7
1780  RTFendDocument
1790 END DEFine 
1800 :
1810 DEFine FuNction DOCdone%
1811  RETurn POSITION(#7)>=tblOffs
1812 END DEFine 
1813 :
1814 DEFine PROCedure DOCdoFooter
1815  RTFbeginFooter
1816  SET_POSITION#6,tblOffs+22+14
1817  txtOffs=STRINGL(INPUT$(#6,4))
1818  SET_POSITION#6,GenOffs+15
1819  DOCdoHeaderFooter
1820  RTFendFooter
1821 END DEFine 
1822 :
1823 DEFine PROCedure DOCdoHeader
1824  RTFbeginHeader
1825  SET_POSITION#6,tblOffs+22
1826  txtOffs=STRINGL(INPUT$(#6,4))
1827  SET_POSITION#6,GenOffs+14
1828  DOCdoHeaderFooter
1829  RTFendHeader
1830 END DEFine 
1831 :
1832 DEFine PROCedure DOCdoHeaderFooter
1833  DOCclearEnhance
1834  DOCjFlg=CODE(INKEY$(#6,-1))
1835  SELect ON DOCjFlg
1836  =1:RTFleftAlign
1837  =2:RTFcentreAlign
1838  =3:RTFrightAlign
1839  END SELect 
1840  extra$=INKEY$(#6,-1)
1841  extra$=INPUT$(#6,2)
1842  Kk=CODE(INKEY$(#6,-1))
1843  IF Kk<>0 THEN DOCbold
1844  SET_POSITION#7,txtOffs
1845  REPeat txtLoop
1846   IF EOF(#7) THEN EXIT txtLoop
1847   K$=INKEY$(#7,-1)
1848   K=CODE(K$)
1849   IF K=0 THEN EXIT txtLoop
1850   RTFoutChar K$
1851  END REPeat txtLoop
1852  IF Kk<>0 THEN DOCbold
1853  REPeat loop
1854   K="nnn" INSTR RTFo$
1855   IF K=0 THEN K="aaa" INSTR RTFo$
1856   IF K=0 THEN EXIT loop
1857   IF K=(LEN(RTFo$)-2) THEN 
1858    RTFo$=RTFo$(1 TO K-1)&"\chpgn "
1859   ELSE 
1860    RTFo$=RTFo$(1 TO K-1)&"\chpgn "&RTFo$(K+3 TO)
1861   END IF 
1862  END REPeat loop
1865 END DEFine 
1866 :
1867 DEFine PROCedure DOCdoParagraph
1868  DOCclearEnhance
1869  txtOffs=STRINGL(INPUT$(#6,4))
1870  IF txtOffs<>0 THEN 
1890   extra$=INPUT$(#6,2)
1900   extra$=INKEY$(#6,-1)
1910   t=CODE(INKEY$(#6,-1)):IF t>128 THEN t=128-t
1920   RTFleftIndent INT((t+1)*cWdth+.5)
1930   t=CODE(INKEY$(#6,-1)):IF t>128 THEN t=128-t
1940   RTFfirstIndent (INT((t+1)*cWdth+.5)-RTFli)
1950   t=CODE(INKEY$(#6,-1)):IF t>128 THEN t=128-t
1960   RTFrightIndent INT(RTFpwid-t*cWdth+.5)
1970   DOCjFlg=CODE(INKEY$(#6,-1))
1980   SELect ON DOCjFlg
1990   =0:RTFleftAlign
2000   =1:RTFcentreAlign
2010   =2:RTFjustify
2020   END SELect 
2021   K=CODE(INKEY$(#6,-1))
2022   IF K<>DOCrulID THEN 
2023    DOCrulID=K
2024    SET_POSITION#7,RulOffs
2025    REPeat loop
2026     K=CODE(INKEY$(#7,-1))
2027     L=CODE(INKEY$(#7,-1))-2
2028     IF K=DOCrulID THEN EXIT loop
2029     IF L>0 THEN K$=INPUT$(#7,L)
2030    END REPeat loop
2031    RTFnTbs%=0
2032    FOR i=1 TO L/2
2033     K=CODE(INKEY$(#7,-1))
2035     Kk=CODE(INKEY$(#7,-1))
2036     SELect ON Kk
2037     =0:RTFtab INT((K+1)*cWdth+.5),"L"
2038     =1:RTFtab INT((K+1)*cWdth+.5),"C"
2039     =2:RTFtab INT((K+1)*cWdth+.5),"R"
2040     =3:RTFtab INT((K+1)*cWdth+.5),"D"
2041     END SELect 
2044    END FOR i
2045    RTFleftIndent RTFli
2047   END IF 
2049   extra$=INPUT$(#6,2)
2050   RTFbeginParagraph
2055   SET_POSITION#7,txtOffs
2060   REPeat txtLoop
2070    IF EOF(#7) THEN EXIT txtLoop
2080    K$=INKEY$(#7,-1)
2090    K=CODE(K$)
2100    IF K=0 THEN EXIT txtLoop
2110    SELect ON K
2115    =9:RTFtabout
2120    =15:DOCbold
2130    =18:DOCsuperscript
2140    =17:DOCsubscript
2150    =16:DOCunderline
2160    =30:RTFoutChar "-"
2165    =12:DOCpagFlg%=1
2170    =REMAINDER : RTFoutChar K$
2180    END SELect 
2190   END REPeat txtLoop
2200   RTFendParagraph
2210  END IF 
2220 END DEFine 
2221 :
2222 DEFine PROCedure DOCclearEnhance
2223  DOCbldFlg%=0
2224  DOCitaFlg%=0
2225  DOCundFlg%=0
2226  DOCcndFlg%=0
2227  DOCsupFlg%=0
2228  DOCsubFlg%=0
2229 END DEFine 
2230 :
2240 DEFine PROCedure DOCbold
2250  DOCbldFlg%=1-DOCbldFlg%
2260  IF DOCbldFlg% THEN 
2270   RTFboldON
2280  ELSE 
2290   RTFboldOFF
2300  END IF 
2310 END DEFine 
2320 :
2330 DEFine PROCedure DOCsuperscript
2340  DOCsupFlg%=1-DOCsupFlg%
2350  IF DOCsupFlg% THEN 
2360   RTFsuperscriptON
2370  ELSE 
2380   RTFsuperscriptOFF
2390  END IF 
2400 END DEFine 
2410 :
2420 DEFine PROCedure DOCsubscript
2430  DOCsubFlg%=1-DOCsubFlg%
2440  IF DOCsubFlg% THEN 
2450   RTFsubscriptON
2460  ELSE 
2470   RTFsubscriptOFF
2480  END IF 
2490 END DEFine 
2500 :
2510 DEFine PROCedure DOCunderline
2520  DOCundFlg%=1-DOCundFlg%
2530  IF DOCundFlg% THEN 
2540   RTFunderlineON
2550  ELSE 
2560   RTFunderlineOFF
2570  END IF 
2580 END DEFine 
2590 :
2600 DEFine PROCedure RTFbeginDocument(OutFile$)
2610 :
2620  RTFclearEnhance
2690  RTFclearStyle
2790 :
2800  rtfparFlg%=0
2830 :
2835  DELETE OutFile$
2840  OPEN_NEW#9,OutFile$
2850  PRINT#9,"{\rtf0 \mac"
2860  PRINT#9,""
2870  PRINT#9,"{\fonttbl"
2880  PRINT#9,"{\f22 \fmodern Courier;}"
2890  PRINT#9,"}"
2900  PRINT#9,""
2910  PRINT#9,"{\stylesheet"
2920  PRINT#9,"{\s243 \qc \f22 \fs20 \sbasedon0 \snext243 footer;}"
2930  PRINT#9,"{\s244 \qc \f22 \fs20 \sbasedon0 \snext244 header;}"
2940  PRINT#9,"{\f22 \fs20 \sbasedon222 \snext0 Normal;}"
2950  PRINT#9,"}"
2960  PRINT#9,""
2961  RTFmargl=1080
2962  RTFmargr=11880-RTFpwid-RTFmargl
2970  PRINT#9,"\paperw11880 \paperh16800 \deftab";INT(cWdth*5)
2975  PRINT#9,"\margl";RTFmargl;" \margr";RTFmargr;" \margt";-RTFmargt;" \margb";-RTFmargb
2980  PRINT#9,"\widowctrl \ftnbj \pgnstart";RTFstartPag;" \fracwidth "
2985  PRINT#9,"\sectd \linemod0 \linex0 \headery";RTFheadery;" \footery";RTFfootery;" \cols1 \endnhere"
2990  PRINT#9,"\plain \f22 \fs20 "
3000  PRINT#9,""
3010  RTFo$=""
3020 END DEFine 
3030 :
3040 DEFine PROCedure RTFendDocument
3050 :
3060  IF rtfparFlg% THEN 
3070    RTFendParagraph
3080  END IF 
3090 :
3100  PRINT#9,"}"
3110  CLOSE#9
3120 END DEFine 
3121 :
3122 DEFine PROCedure RTFbeginHeader
3123  PRINT#9;"{\header ":RTFbeginParagraph:RTFo$=RTFo$&"\s244 \f22 \fs20 "
3124 END DEFine 
3125 :
3126 DEFine PROCedure RTFendHeader
3128  RTFendParagraph:PRINT#9;"}":RTFclearStyle
3129 END DEFine 
3130 :
3132 DEFine PROCedure RTFbeginFooter
3133  PRINT#9;"{\footer ":RTFbeginParagraph:RTFo$=RTFo$&"\s243 \f22 \fs20 "
3134 END DEFine 
3135 :
3136 DEFine PROCedure RTFendFooter
3137  RTFendParagraph :PRINT#9;"}":RTFclearStyle
3138 END DEFine 
3139 :
3140 DEFine PROCedure RTFbeginParagraph
3150  IF rtfparFlg% THEN 
3160   RTFendParagraph
3200  END IF 
3220  rtfparFlg%=1
3225  RTFclearEnhance
3227  DOCpagFlg%=0
3230 END DEFine 
3240 :
3250 DEFine PROCedure RTFendParagraph
3260  IF rtfparFlg% THEN 
3270    RTFendEnhance
3280    RTFo$=RTFo$&"\par "
3285    RTFflushStyle
3290    PRINT#9,RTFo$
3295    RTFclearEnhance
3300    RTFo$=""
3310    rtfparFlg%=0
3315    IF DOCpagFlg%<>0 THEN 
3316     RTFpagebreak
3317     DOCpagFlg%=0
3318    END IF 
3320  END IF 
3330 END DEFine 
3331 :
3332 DEFine PROCedure RTFclearStyle
3333  RTFdefli=0
3334  RTFdeffi=0
3335  RTFdefri=0
3336  RTFli=RTFdefli
3337  RTFfi=RTFdeffi
3338  RTFri=RTFdefri
3339 :
3340  RTFalignFlg%=0
3341 :
3342  RTFnTbs%=0
3344 :
3345  RTFstyleFlg%=0
3348 END DEFine 
3349 :
3350 DEFine PROCedure RTFleftAlign
3360  IF RTFalignFlg%<>0 THEN 
3370   RTFalignFlg%=0
3380   RTFstyleFlg%=1
3390  END IF 
3400 END DEFine 
3410 :
3420 DEFine PROCedure RTFrightAlign
3430  IF RTFalignFlg%<>1 THEN 
3440   RTFalignFlg%=1
3450   RTFstyleFlg%=1
3460  END IF 
3470 END DEFine 
3480 :
3490 DEFine PROCedure RTFcentreAlign
3500  IF RTFalignFlg%<>2 THEN 
3510   RTFalignFlg%=2
3520   RTFstyleFlg%=1
3530  END IF 
3540 END DEFine 
3550 :
3560 DEFine PROCedure RTFjustify
3570  IF RTFalignFlg%<>3 THEN 
3580   RTFalignFlg%=3
3590   RTFstyleFlg%=1
3600  END IF 
3610 END DEFine 
3620 :
3630 DEFine PROCedure RTFleftIndent(N)
3640  REMark n - units of pts/20 as measured from the left margin
3650  IF N<>RTFli THEN 
3660    RTFli=N
3670    RTFstyleFlg%=1
3680  END IF 
3682  IF RTFstyleFlg%<>0 THEN 
3685   RTFclearSoftTabs
3690   RTFtab N,"S"
3695  END IF 
3700 END DEFine 
3710 :
3720 DEFine PROCedure RTFfirstIndent(N)
3730  REMark n - units of pts/20 as measured from the left indent
3740  IF N<>RTFfi THEN 
3750    RTFfi=N
3760    RTFstyleFlg%=1
3770  END IF 
3780 END DEFine 
3790 :
3800 DEFine PROCedure RTFrightIndent(N)
3810  REMark n - units of pts/20 as measured from the right margin
3820  IF N<>RTFri THEN 
3830    RTFri=N
3840    RTFstyleFlg%=1
3850  END IF 
3860 END DEFine 
3861 :
3862 DEFine PROCedure RTFclearSoftTabs
3863  i=1
3864  REPeat loop
3865   IF i>RTFnTbs% THEN EXIT loop
3866   IF RTFtbs$(i)=="S" THEN 
3867    FOR j=i TO RTFnTbs%-1
3868     RTFtbs%(j)=RTFtbs%(j+1)
3869     RTFtbs$(j)=RTFtbs$(j+1)
3870    END FOR j
3871    RTFnTbs%=RTFnTbs%-1
3872    RTFstyleFlg%=1
3873   END IF 
3874   i=i+1
3875   END REPeat loop
3878  END DEFine 
3879 :
3880 DEFine PROCedure RTFtab(N,t$)
3890  LOCal i,j,loop
3900  REMark n  - units of pts/20 as measured from the left margin
3910  REMark t$ - L=left tab, C=centre tab, R=right tab, D=decimal tab, X=remove tab
3920 :
3930  i=1
3940  REPeat loop
3950    IF ((i>RTFnTbs%) OR (RTFtbs%(i)>=N)) THEN EXIT loop
3960    i=i+1
3970  END REPeat loop
3980 :
3981  IF t$=="X" THEN 
3982   IF i<=RTFnTbs% THEN 
3983    REMark remove old tab
3984    FOR j=i TO RTFnTbs%-1
3985     RTFtbs%(j)=RTFtbs%(j+1)
3986     RTFtbs$(j)=RTFtbs$(j+1)
3987    END FOR j
3988    RTFnTbs%=RTFnTbs%-1
3989    RTFstyleFlg%=1
3990   END IF 
3991  ELSE 
3992   IF i>RTFnTbs% THEN 
3995    REMark add new tab to end of Q
4000    RTFnTbs%=RTFnTbs%+1
4010    RTFtbs%(RTFnTbs%)=N
4020    RTFtbs$(RTFnTbs%)=t$
4030    RTFstyleFlg%=1
4040   ELSE 
4050    IF N=RTFtbs%(i) THEN 
4055     REMark replace old tab with new
4059     IF NOT(t$=="S") THEN 
4060      IF RTFtbs$(i)<>t$ THEN 
4070       RTFtbs$(i)=t$
4080       RTFstyleFlg%=1
4090      END IF 
4095     END IF 
4100    ELSE 
4105     REMark insert new tab
4110     RTFnTbs%=RTFnTbs%+1
4120     FOR j=RTFnTbs%-1 TO i STEP -1
4130      RTFtbs%(j+1)=RTFtbs%(j)
4140      RTFtbs$(j+1)=RTFtbs$(j)
4150     NEXT j
4160     RTFtbs%(i)=N
4170     RTFtbs$(i)=t$
4180     RTFstyleFlg%=1
4190    END IF 
4195   END IF 
4200  END IF 
4210 :
4220 END DEFine 
4230 :
4240 DEFine PROCedure RTFflushStyle
4250  LOCal i,t
4260 :
4270  IF RTFstyleFlg% THEN 
4280    t=RTFalignFlg%
4290    SELect ON t
4300    =0:t$="\pard "
4310    =1:t$="\pard \qr "
4320    =2:t$="\pard \qc "
4330    =3:t$="\pard \qj "
4340    END SELect 
4350 :
4355    t$=t$&"\sl"&RTFleading&" "
4357 :
4360    IF RTFli<>RTFdefli THEN 
4370     t$=t$&"\li"&RTFli&" "
4380    END IF 
4390 :
4400    IF RTFfi<>RTFdeffi THEN 
4410     t$=t$&"\fi"&RTFfi&" "
4420    END IF 
4430 :
4440    IF RTFri<>RTFdefri THEN 
4450     t$=t$&"\ri"&RTFri&" "
4460    END IF 
4470 :
4480    IF RTFnTbs%<>0 THEN 
4490      FOR i=1 TO RTFnTbs%
4500        t=CODE(RTFtbs$(i))
4510        SELect ON t
4520        =CODE("L"),CODE("S")
4530          REMark left or soft tab
4540          t$=t$&"\tx"&RTFtbs%(i)&" "
4550        =CODE("C")
4560          REMark centre tab
4570          t$=t$&"\tqc\tx"&RTFtbs%(i)&"  "
4580        =CODE("R")
4590          REMark right tab
4600          t$=t$&"\tqr\tx"&RTFtbs%(i)&" "
4610        =CODE("D")
4620          REMark decimal tab
4630          t$=t$&"\tqdec\tx"&RTFtbs%(i)&" "
4640        END SELect 
4650      NEXT i
4660    END IF 
4670 :
4680    RTFo$=t$&RTFo$
4690 :
4700    RTFstyleFlg%=0
4710  END IF 
4720 END DEFine 
4730 :
4740 DEFine PROCedure RTFboldON
4750  IF RTFbldFlg%=0 THEN 
4760   RTFendEnhance
4770   RTFbldFlg%=1
4775   RTFenhFlg%=1
4780  END IF 
4790 END DEFine 
4800 :
4810 DEFine PROCedure RTFboldOFF
4820  IF RTFbldFlg%<>0 THEN 
4830   RTFendEnhance
4840   RTFbldFlg%=0
4845   RTFenhFlg%=RTFbldFlg%||RTFitaFlg%||RTFundFlg%||RTFcndFlg%||RTFsupFlg%||RTFsubFlg%
4850  END IF 
4860 END DEFine 
4870 :
4880 DEFine PROCedure RTFitalicON
4890  IF RTFitaFlg%=0 THEN 
4900   RTFendEnhance
4910   RTFitaFlg%=1
4915   RTFenhFlg%=1
4920  END IF 
4930 END DEFine 
4940 :
4950 DEFine PROCedure RTFitalicOFF
4960  IF RTFitaFlg%<>0 THEN 
4970   RTFendEnhance
4980   RTFitaFlg%=0
4985   RTFenhFlg%=RTFbldFlg%||RTFitaFlg%||RTFundFlg%||RTFcndFlg%||RTFsupFlg%||RTFsubFlg%
4990  END IF 
5000 END DEFine 
5010 :
5020 DEFine PROCedure RTFunderlineON
5030  IF RTFundFlg%=0 THEN 
5040   RTFendEnhance
5050   RTFundFlg%=1
5055   RTFenhFlg%=1
5060  END IF 
5070 END DEFine 
5080 :
5090 DEFine PROCedure RTFunderlineOFF
5100  IF RTFundFlg%<>0 THEN 
5110   RTFendEnhance
5120   RTFundFlg%=0
5125   RTFenhFlg%=RTFbldFlg%||RTFitaFlg%||RTFundFlg%||RTFcndFlg%||RTFsupFlg%||RTFsubFlg%
5130  END IF 
5140 END DEFine 
5150 :
5160 DEFine PROCedure RTFcondensedON
5170  IF RTFcndFlg%=0 THEN 
5180   RTFendEnhance
5190   RTFcndFlg%=1
5195   RTFenhFlg%=1
5200  END IF 
5210 END DEFine 
5220 :
5230 DEFine PROCedure RTFcondensedOFF
5240  IF RTFcndFlg%<>0 THEN 
5250   RTFendEnhance
5260   RTFcndFlg%=0
5265   RTFenhFlg%=RTFbldFlg%||RTFitaFlg%||RTFundFlg%||RTFcndFlg%||RTFsupFlg%||RTFsubFlg%
5270  END IF 
5280 END DEFine 
5290 :
5300 DEFine PROCedure RTFsuperscriptON
5310  IF RTFsupFlg%=0 THEN 
5320   RTFendEnhance
5330   RTFsupFlg%=1
5335   RTFenhFlg%=1
5340  END IF 
5350 END DEFine 
5360 :
5370 DEFine PROCedure RTFsuperscriptOFF
5380  IF RTFsupFlg%<>0 THEN 
5390   RTFendEnhance
5400   RTFsupFlg%=0
5405   RTFenhFlg%=RTFbldFlg%||RTFitaFlg%||RTFundFlg%||RTFcndFlg%||RTFsupFlg%||RTFsubFlg%
5410  END IF 
5420 END DEFine 
5430 :
5440 DEFine PROCedure RTFsubscriptON
5450  IF RTFsubFlg%=0 THEN 
5460   RTFendEnhance
5470   RTFsubFlg%=1
5475   RTFenhFlg%=1
5480  END IF 
5490 END DEFine 
5500 :
5510 DEFine PROCedure RTFsubscriptOFF
5520  IF RTFsubFlg%<>0 THEN 
5530   RTFendEnhance
5540   RTFsubFlg%=0
5545   RTFenhFlg%=RTFbldFlg%||RTFitaFlg%||RTFundFlg%||RTFcndFlg%||RTFsupFlg%||RTFsubFlg%
5550  END IF 
5560 END DEFine 
5570 :
5580 DEFine PROCedure RTFendEnhance
5590  IF RTFenhFlg%=0 THEN 
5595   IF (RTFbldFlg%||RTFitaFlg%||RTFundFlg%||RTFcndFlg%||RTFsupFlg%||RTFsubFlg%) THEN 
5600    RTFo$=RTFo$&"}"
5605   END IF 
5606  END IF 
5607 END DEFine 
5608 :
5609 DEFine PROCedure RTFclearEnhance
5610  RTFbldFlg%=0
5620  RTFitaFlg%=0
5630  RTFundFlg%=0
5640  RTFcndFlg%=0
5650  RTFsupFlg%=0
5660  RTFsubFlg%=0
5670  RTFenhFlg%=0
5690 END DEFine 
5700 :
5710 DEFine PROCedure RTFflushEnhance
5720  IF RTFenhFlg% THEN 
5730   RTFo$=RTFo$&"{"
5740   IF RTFbldFlg% THEN 
5750    RTFo$=RTFo$&"\b "
5760   END IF 
5770   IF RTFitaFlg% THEN 
5780    RTFo$=RTFo$&"\i "
5790   END IF 
5800   IF RTFundFlg% THEN 
5810    RTFo$=RTFo$&"\ul "
5820   END IF 
5830   IF RTFcndFlg% THEN 
5840    RTFo$=RTFo$&"\expnd58 "
5850   END IF 
5860   IF RTFsupFlg% THEN 
5870    RTFo$=RTFo$&"\up6 "
5880   END IF 
5890   IF RTFsubFlg% THEN 
5900    RTFo$=RTFo$&"\dn4 "
5910   END IF 
5920  END IF 
5930  RTFenhFlg%=0
5940 END DEFine 
5950 :
5951 DEFine PROCedure RTFtabout
5952  IF RTFenhFlg% THEN RTFflushEnhance
5953  RTFo$=RTFo$&"\tab "
5954 END DEFine 
5955 :
5956 DEFine PROCedure RTFpagebreak
5957  PRINT#9;"\page "
5958 END DEFine 
5959 :
5960 DEFine PROCedure RTFoutChar(t$)
5965  LOCal K
5970  IF RTFenhFlg% THEN RTFflushEnhance
5992  K=CODE(t$)
5993  SELect ON K
5995  =CODE("{"),CODE("}"),CODE("\"):RTFo$=RTFo$&"\"&t$
5996  =32 TO 255:RTFo$=RTFo$&t$
5998  =REMAINDER :PRINT#5;"<";CODE(t$);"> ";
6000  END SELect 
6010 END DEFine 
6020 :
