=. Macro to export current program as formatted text file B. Based on bbc2html Version 3.0 (C) Richard Russell 2005-2007 '. Version 0.10 (C) Jon Ripley 2007 !. Reproduced with permission  *ESC OFF P%=0:P%=!408: P%=0 X  P%>= P%<=P Name$="ExportHTML" >Action$="save the current program as syntax coloured HTML" ; 0: "SetWindowPos", @hwnd%, 0, 0, 0, 640, 320, 6: 26 / B% 255: "GetWindowText", @hwnd%, B%, 256 @file$=@dir$+$$B%:tmp$=file$: "CharLowerBuff", !^tmp$, tmp$ op$="CALL """+file$+"""" 4 "SetWindowText", @hwnd%, Name$+" Installation"  "ShowWindow", @hwnd%, 9  2: "Bind to which function key (1-15) ? "F%  F%>0 F%<16 $F$= 0+18+"RI"+255+18+op$+13 <K$ = "Software\R T Russell\BBC BASIC for Windows\Macros" D "RegCreateKeyEx", &80000001, K$, 0, "", 0, &F003F, 0, ^K%, ^D% 3 "RegSetValueEx", K%, "F"+F%, 0, 3, F$, (F$)  "RegCloseKey", K% G'"Press "-(F%<10),"Shift+")"F";F%" from the editor to "Action$"." ('"Press any key to continue . . .";     I cleanup: "MessageBox", @hwnd%, $, $," in module")), 0, 48:   Keywd$(160) BKeywd$() = "AND","DIV","EOR","MOD","OR","ERROR","LINE","OFF",\ :\"STEP","SPC","TAB(","ELSE","THEN","","OPENIN","PTR",\ >\"PAGE","TIME","LOMEM","HIMEM","ABS","ACS","ADVAL","ASC",\ 9\"ASN","ATN","BGET","COS","COUNT","DEG","ERL","ERR",\ =\"EVAL","EXP","EXT","FALSE","FN","GET","INKEY","INSTR(",\ ;\"INT","LEN","LN","LOG","NOT","OPENUP","OPENOUT","PI",\ 9\"POINT(","POS","RAD","RND","SGN","SIN","SQR","TAN",\ <\"TO","TRUE","USR","VAL","VPOS","CHR$","GET$","INKEY$",\ G\"LEFT$(","MID$(","RIGHT$(","STR$","STRING$(","EOF","SUM","WHILE",\ H\"CASE","WHEN","OF","ENDCASE","OTHERWISE","ENDIF","ENDWHILE","PTR",\ B\"PAGE","TIME","LOMEM","HIMEM","SOUND","BPUT","CALL","CHAIN",\ <\"CLEAR","CLOSE","CLG","CLS","DATA","DEF","DIM","DRAW",\ B\"END","ENDPROC","ENVELOPE","FOR","GOSUB","GOTO","GCOL","IF",\ <\"INPUT","LET","LOCAL","MODE","MOVE","NEXT","ON","VDU",\ E\"PLOT","PRINT","PROC","READ","REM","REPEAT","REPORT","RESTORE",\ E\"RETURN","RUN","STOP","COLOUR","TRACE","UNTIL","WIDTH","OSCLI",\ G\"","CIRCLE","ELLIPSE","FILL","MOUSE","ORIGIN","QUIT","RECTANGLE",\ B\"SWAP","SYS","TINT","WAIT","INSTALL","","PRIVATE","BY","EXIT"  3Left$ = ":"+&85+&8B+&8C+&D9+&EC+&F5+4+9  > fs{lStructSize%, hwndOwner%, hInstance%, lpstrFilter%, \ @\ lpstrCustomFilter%, nMaxCustFilter%, nFilterIndex%, \ 4\ lpstrFile%, nMaxFile%, lpstrFileTitle%, \ ;\ nMaxFileTitle%, lpstrInitialDir%, lpstrTitle%, \ ?\ flags%, nFileOffset{l&,h&}, nFileExtension{l&,h&}, \ @\ lpstrDefExt%, lCustData%, lpfnHook%, lpTemplateName%} fp% 255 =ff$ = "HTML files (*.htm,*.html)"+0+"*.htm;*.html"+0+0 fs.lStructSize% = (fs{}) fs.hwndOwner% = @hwnd% fs.lpstrFilter% = !^ff$ fs.lpstrFile% = fp% fs.nMaxFile% = 256 fs.flags% = 6  ' "GetWindowText", @hwnd%, fp%, 256 prog$ = $$fp%  $$fp%,".") P%=$$fp%-1  fp%?P%<>".":P%-=1: $$(fp%+P%)=".html"  $$fp%+=".html"  ' "GetSaveFileName", fs{} result%  result%=0  src$ = tempfile src% = (src$) 4 src%=0 100, "Cannot create file '"+$$fp$+"'" 3 "WriteFile", @hfile%(src%), , P-, ^tmp%, 0 #src% dst$ = $$fp%  src% = (src$) 5 src% = 0 100, "Cannot open file """+src$+"""" dst% = (dst$) 7 dst% = 0 100, "Cannot create file """+dst$+""""  K #dst%,"":#dst%,10 < #dst%,""+prog$+"":#dst%,10 i #dst%,"":#dst%,10  Indent% = 0 & #dst%, "" : #dst%,10  (dest$ = listline(src%, 31, Indent%) S% = dest$, " ")  S% /dest$ = dest$,S%-1)+"  "+dest$,S%+2) S% = dest$, " ")  . dest$ <> "" #dst%, dest$ : #dst%, 10  #src% dest$ = "" 9 #dst%, colour("black")+"" : #dst%,10  #0 5 Indent% "Warning: ended with non-zero indent"  "Preview HTML", ans$ G ans$=&59 ans$=&79 "ShellExecute", @hwnd%, 0, dst$, 0, "", 0  cleanup   ( listline(src%, flags%, indent%) - dest$, mode%, ln%, ch%, prev%, lo%, hi% 4mode% = 1+4 : initialise to "left" and "first"   #src% = 0 = ""  ln% = #src% + 256 * #src% ln% .dest$ += colour("blue") + " "+ln%,5)  dest$ += " "  dest$ += " "  ch% = #src% ch% + &ED: flags% 1 indent%-=1 : NEXT , &FD: flags% 2 indent%-=1 : UNTIL / &CE: flags% 4 indent%-=1 : ENDWHILE . &CB: flags% 8 indent%-=2 : ENDCASE - &CD: flags% 16 indent%-=1 : ENDIF , &8B: flags% 16 indent%-=1 : ELSE + &C9: flags% 8 indent%-=1 : WHEN 0 &CC: flags% 8 indent%-=1 : OTHERWISE   + indent% > 0 dest$ += indent%*2, " ")  ch% * &E3: flags% 1 indent%+=1 : FOR - &F5: flags% 2 indent%+=1 : REPEAT , &C7: flags% 4 indent%+=1 : WHILE + &C8: flags% 8 indent%+=2 : CASE , &8B: flags% 16 indent%+=1 : ELSE + &C9: flags% 8 indent%+=1 : WHEN 0 &CC: flags% 8 indent%+=1 : OTHERWISE    ch% <> 13   ch% <> 13 & ch% = 34 ((mode% &40) = 0) mode% = &80 - mode% &80 dest$ += colour("#990099")    mode% &E0 dest$ += ch(ch%)   ch% = &8D : line number dest$ += colour("blue") ch% = #src% %lo% = ((ch% << 2) &C0) #src% %hi% = ((ch% << 4) &C0) #src% dest$ += (lo% + 256*hi%)  ch% = 32: dest$ += ch(ch%)  ch% > 32 ch% < 128: . ch% = &2A mode% 1 mode% = &50 : * > ch% <> 34 (mode% &80) <> 0 dest$ += colour("black") dest$ += ch(ch%) < ch% = 34 (mode% &80) = 0 dest$ += colour("black")  ch% J &DC: dest$ += colour("#996600") : mode% 1 mode% = &20 : DATA = &F4: dest$ += colour("#006600") : mode% = &40 : REM . &DD: dest$ += colour("#990000") : DEF ": dest$ += colour("#996600")  dest$ += Keywd$(ch% 128) ) ch% = &DC dest$ += colour("black")    : ch%<>32 mode% = &FC : right mode, clear EXIT flag - ch%=&10 mode% = 2 : set EXIT flag - Left$,ch%) mode% = &01 : left mode  prev% = ch% ch% = #src%  L prev%=&5C (mode% &F4)=0 dest$ += colour("#006600") : mode% = &40 "mode% = &FB : clear "first"   (mode% &F2) = 0 ch% + &ED: flags% 1 indent%-=1 : NEXT * &E3: flags% 1 indent%+=1 : FOR , &FD: flags% 2 indent%-=1 : UNTIL - &F5: flags% 2 indent%+=1 : REPEAT / &CE: flags% 4 indent%-=1 : ENDWHILE , &C7: flags% 4 indent%+=1 : WHILE + &C8: flags% 8 indent%+=2 : CASE     3 flags% 16 prev% = &8C indent%+=1 : THEN   % dest$)=" " : dest$=dest$) : dest$ += "
" = dest$   colour(col$) html$  old$  col$=old$ = "" 1 old$<>"black" old$<>"" html$ += "" 8 col$<>"black" html$ += "" old$ = col$ = html$   ch(ch%)  ch% = &A9 = "©"  ch% = "&" = "&"  ch% = "<" = "<"  ch% = ">" = ">" = ch%   cleanup /src$=src$: src$<>"" "DeleteFile", src$    tempfile  T%  T% 255  "GetTempPath", 256, T% + "GetTempFileName", $$T%, "b2h", 0, T% = $$T%