Older Version Newer Version

JackBurman JackBurman May 16, 2011 - "Submit final LITE version"

EDIT: This is the final version for the Lite edition of LB Help Search **Version 1.03b for discussion only** changed createBrowseControl from subroutine to called sub Reason: working towards using handle$ to handle button clicks Would like comment on whether the calls and the sub are properly formed... [[code format="lb"]] ' LB Help Search entry ' Author: jaba ' Date: May 5, 2011 ' ' History: ' v1.0 May 6, 2011 Submitted ' v1.01 May 6, 2011 Added browser control ' v1.02 May 9, 2011 Added GetModuleFileName$() routine ' v1.03 May 12, 2011 Additional pages added to quick viewer ' Some names made more purpose-descriptive ' ' v1.03b May 13, 2011 in progress...using sub to create ATL browser window ' ' ' This code is free for personal use. ' ' Based on a framework provided by Alyce on LB forum. ' ' Some parts taken from entries by others, including ' Alyce, Janet, Stefan, and Gordon. ' ' Thanks to them and others. ' ' This is a basic and minimum interface which uses the default browser ' to display help file pages. ' ' ' Thanks to Stefan Pendl for API function method to obtain location of ' LB installation directory. This method is more reliable with systems ' running Vista/Win7 than is the StartupDir$ or DefaultDir$ method. InstallDir$ = GetFolder$(GetModuleFileName$()) HelpDir$ = InstallDir$ + "lb4help\LibertyBASIC_4_web\HTML\" HelpFileIndex$ = InstallDir$; "lb4help\LibertyBASIC_4.html" 'List of Quick View pages: 'Quick Start Guide = "libe3mnn.htm" 'Command Reference = "libe2co3.htm" 'Reserved Word List = "libe6ldg.htm" Open "atl" For DLL As #atl CallDLL #atl, "AtlAxWinInit", Ret As long nomainwin WindowWidth = 442 WindowHeight = 520 UpperLeftX = DisplayWidth - WindowWidth UpperLeftY = 40 statictext #s.search "Search for: ", 10, 15, 200, 20 textbox #s.term 10, 35, 320, 25 button #s.content "Contents", [openContentsPage], UL, 340, 5, 80, 25 button #s.default "Find", [findPages], UL, 340, 35, 80, 25 listbox #s.pages, found$(), [displaySelectedPage], 10, 65, 410, 190 button #s.quick "Quick Start Guide", [quickButton], UL, 100, 260, 100, 25 'points to libe3mnn.htm button #s.commands "Command Reference", [commandsButton], UL, 205, 260, 115, 25 'points to libe2co3.htm button #s.reserve "Reserved Words", [reservedButton], UL, 325, 260, 95, 25 'points to libe6ldg.htm statictext #s.heading "Quick Viewer", 10, 267, 90, 20 graphicbox #s.resource 10, 290, 410, 170 'container for browser control statictext #s.status, "Right-click browser window for BACK/FORWARD.", 10, 468, 410, 20 open "Search Me!" for dialog_nf as #s #s "trapclose [quit]" #s "font ms_sans_serif 9" #s.content "!font ms_sans_serif 9 bold" #s.search "!font ms_sans_serif 9 bold" #s.heading "!font ms_sans_serif 9 bold" #s.status "!font arial 7" 'display Quick Start Guide in browse control QuickViewPage$ = "libe3mnn.htm" call createBrowseControl HelpDir$, QuickViewPage$, hFlag #s.term "!setfocus" dim info$(10,10) files HelpDir$, "*.htm", info$() numFiles = val(info$(0,0)) wait [quickButton] QuickViewPage$ = "libe3mnn.htm" call createBrowseControl HelpDir$, QuickViewPage$, hFlag wait [commandsButton] QuickViewPage$ = "libe2co3.htm" call createBrowseControl HelpDir$, QuickViewPage$, hFlag wait [reservedButton] QuickViewPage$ = "libe6ldg.htm" call createBrowseControl HelpDir$, QuickViewPage$, hFlag wait [findPages] #s.term "!contents? term$" dim found$(numFiles) for i = 1 to numFiles open HelpDir$ + info$(i,0) for input as #file txt$ = INPUT$(#file, lof(#file)) if instr(txt$, term$) >0 then found$(i) = GetTitle$(txt$); chr$(0); info$(i,0) #s.pages "reload" end if close #file next wait [openContentsPage] 'open user's default browser run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpFileIndex$; chr$(34) #s.term "!setfocus" wait [displaySelectedPage] #s.pages "selection? FileName$" FileName$ = word$(FileName$, 2, chr$(0)) 'open in user's default browser or new tab run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpDir$; FileName$; chr$(34) wait [quit] close #s close #atl end 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 'SUBS AND FUNCTIONS 'credit: Alyce's entry. 'extract title from html text function GetTitle$(s$) marker1=instr(upper$(s$), "<A NAME=") marker1=instr(upper$(s$), "<B>",marker1)+3 marker2=instr(upper$(s$), "</B>", marker1) lenTitle=marker2-marker1 GetTitle$=mid$(s$,marker1,lenTitle) end function 'borrowed from Stefan Pendl 'added 5/9/11 function GetModuleFileName$() nSize = _MAX_PATH + 1 lpFilename$ = space$(nSize); CHR$(0) calldll #kernel32, "GetModuleFileNameA",_ hModule as uLong,_ lpFilename$ as ptr,_ nSize as uLong,_ result as uLong if result > 0 then GetModuleFileName$ = trim$(lpFilename$) end function function GetFolder$(Path$) pos = 1 GetFolder$ = Path$ while pos > 0 pos = instr(Path$, "\", pos) if pos > 0 then GetFolder$ = left$(Path$, pos) pos = pos + 1 end if wend end function sub createBrowseControl D$, F$, byref hATL if hATL then CallDLL #user32, "DestroyWindow", _ hATL As ulong, _ result As long hATL = 0 end if hWndContainer = hWnd(#s.resource) 'graphicbox handle callDLL #user32, "GetWindowLongA", _ hWndContainer as ulong, _ _GWL_HINSTANCE as long, _ hInst as ulong ResName$ = D$ + F$ style = _WS_CHILD or _WS_VISIBLE or _WS_VSCROLL CallDLL #user32, "CreateWindowExA", _ _WS_EX_STATICEDGE As long, _ 'extended type "AtlAxWin" As ptr, _ 'class name ResName$ As ptr, _ 'resource file name & path style As long, _ 'window style 0 As long, _ 'left x pos 0 As long, _ 'top y pos 408 As long, _ 'width 168 As long, _ 'height hWndContainer As ulong, _ 'handle of container 100 As long, _ 'handle to menu or child window ID hInst As ulong, _ 'parent instance handle 0 As long, _ 'window creation data hATL As ulong 'handle of active template library control end sub [[code]] Version 1.03 Additional pages added to quick viewer [[code format="lb"]] ' LB Help Search entry ' Author: jaba ' Date: May 5, 2011 ' ' History: ' v1.0 May 6, 2011 Submitted ' v1.01 May 6, 2011 Added browser control ' v1.02 May 9, 2011 Added GetModuleFileName$() routine ' v1.03 May 12, 2011 Additional pages added to quick viewer ' Some names made more purpose-descriptive ' ' ' This code is free for personal use. ' ' Based on a framework provided by Alyce on LB forum. ' ' Some parts taken from entries by others, including ' Alyce, Janet, Stefan, and Gordon. ' ' Thanks to them and others. ' ' This is a basic and minimum interface which uses the default browser ' to display help file pages. ' ' ' Thanks to Stefan Pendl for API function method to obtain location of ' LB installation directory. This method is more reliable with systems ' running Vista/Win7 than is the StartupDir$ or DefaultDir$ method. InstallDir$ = GetFolder$(GetModuleFileName$()) HelpDir$ = InstallDir$ + "lb4help\LibertyBASIC_4_web\HTML\" HelpFileIndex$ = InstallDir$; "lb4help\LibertyBASIC_4.html" 'List of Quick View pages: 'Quick Start Guide = "libe3mnn.htm" 'Command Reference = "libe2co3.htm" 'Reserved Word List = "libe6ldg.htm" Open "atl" For DLL As #atl CallDLL #atl, "AtlAxWinInit", Ret As long nomainwin WindowWidth = 442 WindowHeight = 520 UpperLeftX = DisplayWidth - WindowWidth UpperLeftY = 40 statictext #s.search "Search for: ", 10, 15, 200, 20 textbox #s.term 10, 35, 320, 25 button #s.content "Contents", [openContentsPage], UL, 340, 5, 80, 25 button #s.default "Find", [findPages], UL, 340, 35, 80, 25 listbox #s.pages, found$(), [displaySelectedPage], 10, 65, 410, 190 button #s.quick "Quick Start Guide", [quickButton], UL, 100, 260, 100, 25 'points to libe3mnn.htm button #s.commands "Command Reference", [commandsButton], UL, 205, 260, 115, 25 'points to libe2co3.htm button #s.reserve "Reserved Words", [reservedButton], UL, 325, 260, 95, 25 'points to libe6ldg.htm statictext #s.heading "Quick Viewer", 10, 267, 90, 20 graphicbox #s.resource 10, 290, 410, 170 'container for browser control statictext #s.status, "Right-click browser window for BACK/FORWARD.", 10, 468, 410, 20 open "Search Me!" for dialog_nf as #s #s "trapclose [quit]" #s "font ms_sans_serif 9" #s.content "!font ms_sans_serif 9 bold" #s.search "!font ms_sans_serif 9 bold" #s.heading "!font ms_sans_serif 9 bold" #s.status "!font arial 7" 'display Quick Start Guide in browse control QuickViewPage$ = "libe3mnn.htm" gosub [createBrowseControl] #s.term "!setfocus" dim info$(10,10) files HelpDir$, "*.htm", info$() numFiles = val(info$(0,0)) wait [quickButton] QuickViewPage$ = "libe3mnn.htm" gosub [createBrowseControl] wait [commandsButton] QuickViewPage$ = "libe2co3.htm" gosub [createBrowseControl] wait [reservedButton] QuickViewPage$ = "libe6ldg.htm" gosub [createBrowseControl] wait [findPages] #s.term "!contents? term$" dim found$(numFiles) for i = 1 to numFiles open HelpDir$ + info$(i,0) for input as #file txt$ = INPUT$(#file, lof(#file)) if instr(txt$, term$) >0 then found$(i) = GetTitle$(txt$); chr$(0); info$(i,0) #s.pages "reload" end if close #file next wait [openContentsPage] 'open user's default browser run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpFileIndex$; chr$(34) #s.term "!setfocus" wait [displaySelectedPage] #s.pages "selection? FileName$" FileName$ = word$(FileName$, 2, chr$(0)) 'open in user's default browser or new tab run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpDir$; FileName$; chr$(34) wait [quit] close #s close #atl end 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 'SUBS AND FUNCTIONS 'credit: Alyce's entry. 'extract title from html text function GetTitle$(s$) marker1=instr(upper$(s$), "<A NAME=") marker1=instr(upper$(s$), "<B>",marker1)+3 marker2=instr(upper$(s$), "</B>", marker1) lenTitle=marker2-marker1 GetTitle$=mid$(s$,marker1,lenTitle) end function 'borrowed from Stefan Pendl 'added 5/9/11 function GetModuleFileName$() nSize = _MAX_PATH + 1 lpFilename$ = space$(nSize); CHR$(0) calldll #kernel32, "GetModuleFileNameA",_ hModule as uLong,_ lpFilename$ as ptr,_ nSize as uLong,_ result as uLong if result > 0 then GetModuleFileName$ = trim$(lpFilename$) end function function GetFolder$(Path$) pos = 1 GetFolder$ = Path$ while pos > 0 pos = instr(Path$, "\", pos) if pos > 0 then GetFolder$ = left$(Path$, pos) pos = pos + 1 end if wend end function [createBrowseControl] if hATL then CallDLL #user32, "DestroyWindow", _ hATL As ulong, _ result As long hATL = 0 end if hWndContainer = hWnd(#s.resource) 'graphicbox handle callDLL #user32, "GetWindowLongA", _ hWndContainer as ulong, _ _GWL_HINSTANCE as long, _ hInst as ulong ResName$ = HelpDir$ + QuickViewPage$ style = _WS_CHILD or _WS_VISIBLE or _WS_VSCROLL CallDLL #user32, "CreateWindowExA", _ _WS_EX_STATICEDGE As long, _ 'extended type "AtlAxWin" As ptr, _ 'class name ResName$ As ptr, _ 'resource file name & path style As long, _ 'window style 0 As long, _ 'left x pos 0 As long, _ 'top y pos 408 As long, _ 'width 168 As long, _ 'height hWndContainer As ulong, _ 'handle of container 100 As long, _ 'handle to menu or child window ID hInst As ulong, _ 'parent instance handle 0 As long, _ 'window creation data hATL As ulong 'handle of active template library control return [[code]] Version 1.02 added GetModuleFileName$() routine [[code format="lb"]] ' LB Help Search entry ' Author: jaba ' Date: May 5, 2011 ' ' History: ' v1.0 May 6, 2011 Submitted ' v1.01 May 6, 2011 Added browser control ' v1.02 May 9, 2011 Added GetModuleFileName$() routine ' ' This code is free for personal use. ' ' Based on a framework provided by Alyce on LB forum. ' ' Some parts taken from entries by others, including ' Alyce, Janet, Stefan, and Gordon. ' ' Thanks to them and others. ' ' This is a basic and minimum interface which uses the default browser ' to display search terms. As I learn more, I may include a browser control ' in the interface, which I think is the best and fastest way to display ' the search terms. But, for now, I'm happy to be making a submission. ' ' To display the Reserved Word List, I edited the .htm file and saved it ' as a .txt file in my /HTML/ sub folder. The user will see the html ' file in the lower textbox, which includes html tags. I have not made a ' parser yet, or included the browser control to display html files. ' At this point, it's an idea only. ' ' Thanks to Stefan Pendl for API function method to obtain location of ' LB installation directory. This method is more reliable with systems ' running Vista/Win7 than is the StartupDir$ or DefaultDir$ method. InstallDir$ = GetFolder$(GetModuleFileName$()) HelpDir$ = InstallDir$ + "lb4help\LibertyBASIC_4_web\HTML\" ReservedWordPage$ = HelpDir$ + "libe6ldg.htm"'"libe6ldg.txt" HelpFileIndex$ = InstallDir$; "lb4help\LibertyBASIC_4.html" nomainwin WindowWidth = 442 WindowHeight = 520 UpperLeftX = DisplayWidth - WindowWidth UpperLeftY = 40 statictext #s.search "Search for: ", 10, 15, 200, 20 textbox #s.term 10, 35, 320, 25 button #s.default "Find", [getIt], UL, 340, 35, 80, 25 listbox #s.pages, found$(), [ListPages], 10, 65, 410, 200 statictext #s.heading "Commands and Reserved Word List", 10, 270, 300, 20 graphicbox #s.reserved 10, 290, 410, 170 'container for browser control button #s.content "Contents", [startBrowser], UL, 340, 5, 80, 25 open "Search Me!" for dialog_nf as #s #s "trapclose [quit]" #s.content "!font ms_sans_serif 9 bold" #s.search "!font ms_sans_serif 9 bold" #s.heading "!font ms_sans_serif 9 bold" gosub [createBrowseControl] 'branch to load browser control and reserved word list #s.term "!setfocus" dim info$(10,10) files HelpDir$, "*.htm", info$() numFiles = val(info$(0,0)) wait [getIt] #s.term "!contents? term$" dim found$(numFiles) for i = 1 to numFiles open HelpDir$ + info$(i,0) for input as #file txt$ = INPUT$(#file, lof(#file)) if instr(txt$, term$) >0 then found$(i) = GetTitle$(txt$); chr$(0); info$(i,0) #s.pages "reload" end if close #file next wait [ListPages] #s.pages "selection? FileName$" FileName$ = word$(FileName$, 2, chr$(0)) run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpDir$; FileName$; chr$(34) wait [startBrowser] run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpFileIndex$; chr$(34) #s.term "!setfocus" wait [quit] close #s close #atl end 'credit: Alyce's entry. 'extract title from html text function GetTitle$(s$) marker1=instr(upper$(s$), "<A NAME=") marker1=instr(upper$(s$), "<B>",marker1)+3 marker2=instr(upper$(s$), "</B>", marker1) lenTitle=marker2-marker1 GetTitle$=mid$(s$,marker1,lenTitle) end function 'borrowed from Stefan Pendl 'added 5/9/11 function GetModuleFileName$() nSize = _MAX_PATH + 1 lpFilename$ = space$(nSize); CHR$(0) calldll #kernel32, "GetModuleFileNameA",_ hModule as uLong,_ lpFilename$ as ptr,_ nSize as uLong,_ result as uLong if result > 0 then GetModuleFileName$ = trim$(lpFilename$) end function function GetFolder$(Path$) pos = 1 GetFolder$ = Path$ while pos > 0 pos = instr(Path$, "\", pos) if pos > 0 then GetFolder$ = left$(Path$, pos) pos = pos + 1 end if wend end function ''The following routine was copied nearly verbatim from the ATL Tutorial at '' http://lbpe.wikispaces.com/ATL+Tutorial by Alyce Watson. I used the first '' three snippets from the demo - ATL DLL, and Creating the control. I '' refered to the entries by Stefan and Alyce to learn what variables needed '' to be changed to fit my program. I was surprised at how well it worked for '' so little investment of my time and energy. [createBrowseControl] hWndContainer = hWnd(#s.reserved) 'graphicbox handle Open "atl" For DLL As #atl CallDLL #atl, "AtlAxWinInit", Ret As long callDLL #user32, "GetWindowLongA", _ hWndContainer as ulong, _ _GWL_HINSTANCE as long, _ hInst as ulong ResName$ = ReservedWordPage$ style = _WS_CHILD or _WS_VISIBLE or _WS_VSCROLL CallDLL #user32, "CreateWindowExA", _ _WS_EX_STATICEDGE As long, _ 'extended type "AtlAxWin" As ptr, _ 'class name ResName$ As ptr, _ 'URL, or progID or CLSID -file name style As long, _ 'window style 0 As long, _ 'left x pos 0 As long, _ 'top y pos 408 As long, _ 'width 168 As long, _ 'height hWndContainer As ulong, _ 'handle of container 100 As long, _ 'handle to menu or child window ID hInst As ulong, _ 'parent instance handle 0 As long, _ 'window creation data hATL As ulong 'handle of active template library control return [[code]] Version 1.01 added with Browser Control [[code format="lb"]] ' LB Help Search entry ' Author: jaba ' Date: May 5, 2011 ' ' History: ' v1.0 May 6, 2011 Submitted ' v1.01 May 6, 2011 Added browser control ' ' This code is free for personal use. ' ' Based on a framework provided by Alyce on LB forum. ' ' Some parts taken from entries by others, including ' Alyce, Janet, Stefan, and Gordon. ' ' Thanks to them and others. ' ' This is a basic and minimum interface which uses the default browser ' to display search terms. As I learn more, I may include a browser control ' in the interface, which I think is the best and fastest way to display ' the search terms. But, for now, I'm happy to be making a submission. ' ' To display the Reserved Word List, I edited the .htm file and saved it ' as a .txt file in my /HTML/ sub folder. The user will see the html ' file in the lower textbox, which includes html tags. I have not made a ' parser yet, or included the browser control to display html files. ' At this point, it's an idea only. ' HelpDir$ = StartupDir$ + "lb4help\LibertyBASIC_4_web\HTML\" ReservedWordPage$ = HelpDir$ + "libe6ldg.htm"'"libe6ldg.txt" HelpFileIndex$ = StartupDir$; "lb4help\LibertyBASIC_4.html" nomainwin WindowWidth = 442 WindowHeight = 520 UpperLeftX = DisplayWidth - WindowWidth UpperLeftY = 40 statictext #s.search "Search for: ", 10, 15, 200, 20 textbox #s.term 10, 35, 320, 25 button #s.default "Find", [getIt], UL, 340, 35, 80, 25 listbox #s.pages, found$(), [ListPages], 10, 65, 410, 200 statictext #s.heading "Commands and Reserved Word List", 10, 270, 300, 20 '' stylebits #s.reserved, _WS_VSCROLL, _ES_AUTOHSCROLL, 0, 0 '' textbox #s.reserved 10, 290, 410, 170 graphicbox #s.reserved 10, 290, 410, 170 'container for browser control button #s.content "Contents", [startBrowser], UL, 340, 5, 80, 25 open "Search Me!" for dialog_nf as #s #s "trapclose [quit]" #s.content "!font ms_sans_serif 9 bold" #s.search "!font ms_sans_serif 9 bold" #s.heading "!font ms_sans_serif 9 bold" '' #s.reserved "!font courier_new 8" gosub [createBrowseControl] 'branch to load browser control and reserved word list '' #s.reserved ReservedWordList$(ReservedWordPage$) #s.term "!setfocus" dim info$(10,10) files HelpDir$, "*.htm", info$() numFiles = val(info$(0,0)) wait [getIt] #s.term "!contents? term$" dim found$(numFiles) for i = 1 to numFiles open HelpDir$ + info$(i,0) for input as #file txt$ = INPUT$(#file, lof(#file)) if instr(txt$, term$) >0 then found$(i) = GetTitle$(txt$); chr$(0); info$(i,0) #s.pages "reload" end if close #file next wait [ListPages] #s.pages "selection? FileName$" FileName$ = word$(FileName$, 2, chr$(0)) run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpDir$; FileName$; chr$(34) wait [startBrowser] run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpFileIndex$; chr$(34) #s.term "!setfocus" wait [quit] 'How can I close browser window programmatically? ' notice "Be sure to close browser!" close #s close #atl end 'credit: Alyce's entry. 'extract title from html text function GetTitle$(s$) marker1=instr(upper$(s$), "<A NAME=") marker1=instr(upper$(s$), "<B>",marker1)+3 marker2=instr(upper$(s$), "</B>", marker1) lenTitle=marker2-marker1 GetTitle$=mid$(s$,marker1,lenTitle) end function ''This function is not needed when using browser control function ReservedWordList$(page$) open page$ for input as #file ReservedWordList$ = INPUT$(#file, lof(#file)) close #file end function ''The following routine was copied nearly verbatim from the ATL Tutorial at '' http://lbpe.wikispaces.com/ATL+Tutorial by Alyce Watson. I used the first '' three snippets from the demo - ATL DLL, and Creating the control. I '' refered to the entries by Stefan and Alyce to learn what variables needed '' to be changed to fit my program. I was surprised at how well it worked for '' so little investment of my time and energy. [createBrowseControl] hWndContainer = hWnd(#s.reserved) 'graphicbox handle Open "atl" For DLL As #atl CallDLL #atl, "AtlAxWinInit", Ret As long callDLL #user32, "GetWindowLongA", _ hWndContainer as ulong, _ _GWL_HINSTANCE as long, _ hInst as ulong ResName$ = ReservedWordPage$ style = _WS_CHILD or _WS_VISIBLE or _WS_VSCROLL CallDLL #user32, "CreateWindowExA", _ _WS_EX_STATICEDGE As long, _ 'extended type "AtlAxWin" As ptr, _ 'class name ResName$ As ptr, _ 'URL, or progID or CLSID -file name style As long, _ 'window style 0 As long, _ 'left x pos 0 As long, _ 'top y pos 408 As long, _ 'width 168 As long, _ 'height hWndContainer As ulong, _ 'handle of container 100 As long, _ 'handle to menu or child window ID hInst As ulong, _ 'parent instance handle 0 As long, _ 'window creation data hATL As ulong 'handle of active template library control return [[code]] Initial submission Version 1.0 [[code format="lb"]] ' LB Help Search entry ' Author: jaba ' Date: May 5, 2011 ' ' History: ' v1.0 May 6, 2011 Submitted ' ' ' This code is free for personal use. ' ' Based on a framework provided by Alyce on LB forum. ' ' Some parts taken from entries by others, including ' Alyce, Janet, Stefan, and Gordon. ' ' Thanks to them and others. ' ' This is a basic and minimum interface which uses the default browser ' to display search terms. As I learn more, I may include a browser control ' in the interface, which I think is the best and fastest way to display ' the search terms. But, for now, I'm happy to be making a submission. ' ' To display the Reserved Word List, I edited the .htm file and saved it ' as a .txt file in my /HTML/ sub folder. The user will see the html ' file in the lower textbox, which includes html tags. I have not made a ' parser yet, or included the browser control to display html files. ' At this point, it's an idea only. ' HelpDir$ = StartupDir$ + "lb4help\LibertyBASIC_4_web\HTML\" ReservedWordPage$ = HelpDir$ + "libe6ldg.htm"'"libe6ldg.txt" HelpFileIndex$ = StartupDir$; "lb4help\LibertyBASIC_4.html" nomainwin WindowWidth = 442 WindowHeight = 520 UpperLeftX = DisplayWidth - WindowWidth UpperLeftY = 40 statictext #s.search "Search for: ", 10, 15, 200, 20 textbox #s.term 10, 35, 320, 25 button #s.default "Find", [getIt], UL, 340, 35, 80, 25 listbox #s.pages, found$(), [ListPages], 10, 65, 410, 200 statictext #s.heading "Commands and Reserved Word List", 10, 270, 300, 20 stylebits #s.reserved, _WS_VSCROLL, _ES_AUTOHSCROLL, 0, 0 textbox #s.reserved 10, 290, 410, 170 button #s.content "Contents", [startBrowser], UL, 340, 5, 80, 25 open "Search Me!" for dialog_nf as #s #s "trapclose [quit]" #s.content "!font ms_sans_serif 9 bold" #s.search "!font ms_sans_serif 9 bold" #s.heading "!font ms_sans_serif 9 bold" #s.reserved "!font courier_new 8" #s.reserved ReservedWordList$(ReservedWordPage$) #s.term "!setfocus" dim info$(10,10) files HelpDir$, "*.htm", info$() numFiles = val(info$(0,0)) wait [getIt] #s.term "!contents? term$" dim found$(numFiles) for i = 1 to numFiles open HelpDir$ + info$(i,0) for input as #file txt$ = INPUT$(#file, lof(#file)) if instr(txt$, term$) >0 then found$(i) = GetTitle$(txt$); chr$(0); info$(i,0) #s.pages "reload" end if close #file next wait [ListPages] #s.pages "selection? FileName$" FileName$ = word$(FileName$, 2, chr$(0)) run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpDir$; FileName$; chr$(34) wait [startBrowser] run "rundll32.exe url.dll,FileProtocolHandler "; chr$(34); HelpFileIndex$; chr$(34) #s.term "!setfocus" wait [quit] 'How can I close browser window programmatically? notice "Be sure to close browser!" close #s end 'credit: Alyce's entry. 'extract title from html text function GetTitle$(s$) marker1=instr(upper$(s$), "<A NAME=") marker1=instr(upper$(s$), "<B>",marker1)+3 marker2=instr(upper$(s$), "</B>", marker1) lenTitle=marker2-marker1 GetTitle$=mid$(s$,marker1,lenTitle) end function function ReservedWordList$(page$) open page$ for input as #file ReservedWordList$ = INPUT$(#file, lof(#file)) close #file end function [[code]]