From 65c77335f32209bea0839ae438930776b5926b0f Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 11:02:43 +0100 Subject: [PATCH 01/40] Update the index page. Fix video page navigation and hyperlinks. --- docs/Videos/AccessDevCon.md | 40 ++++++++++++++--------------- docs/Videos/{tb.md => twinBASIC.md} | 36 +++++++++++++++----------- docs/index.md | 33 +++++++++++++++++++++--- 3 files changed, 71 insertions(+), 38 deletions(-) rename docs/Videos/{tb.md => twinBASIC.md} (79%) diff --git a/docs/Videos/AccessDevCon.md b/docs/Videos/AccessDevCon.md index 7204ec65..18fda9cc 100644 --- a/docs/Videos/AccessDevCon.md +++ b/docs/Videos/AccessDevCon.md @@ -1,12 +1,13 @@ --- title: Access DevCon Videos -# nav_order: 2 +parent: Videos permalink: /Videos/AccessDevCon --- # Access DevCon - Videos +To learn more about the conference: [https://www.donkarl.com/devcon][2]. -**Access DevCon 2025 - twinBASIC Update** +### Access DevCon 2025 - twinBASIC Update 26 Apr 2025 @@ -16,11 +17,15 @@ permalink: /Videos/AccessDevCon referrerpolicy="strict-origin-when-cross-origin" allowfullscreen> -Access MVP Mike Wolfe presents a twinBASIC project update. For the slide deck and more information see: https://nolongerset.com/devcon-2025 . To learn more about the conference: https://www.donkarl.com/devcon +Access MVP Mike Wolfe presents a twinBASIC project update. +- For the slide deck and more information see: [https://nolongerset.com/devcon-2025][1]. + +[1]: https://nolongerset.com/devcon-2025 +[2]: https://www.donkarl.com/devcon --- -**Access DevCon 2024 - twinBASIC** +### Access DevCon 2024 - twinBASIC Add-In creation with twinBASIC @@ -32,13 +37,14 @@ Add-In creation with twinBASIC referrerpolicy="strict-origin-when-cross-origin" allowfullscreen> -Mike Wolfe presents a twinBASIC project update and how to create add-ins for Access with twinBASIC. For more information see: https://nolongerset.com/tag/twinbasic-weekly-update/ +Mike Wolfe presents a twinBASIC project update and how to create add-ins for Access with twinBASIC. +- For more information see: [https://nolongerset.com/tag/twinbasic-weekly-update/][3]. -To learn more about the conference: https://www.donkarl.com/devcon +[3]: https://nolongerset.com/tag/twinbasic-weekly-update/ --- -**Access DevCon 2023 - twinBASIC Update** +### Access DevCon 2023 - twinBASIC Update 8 May 2023 @@ -48,16 +54,14 @@ To learn more about the conference: https://www.donkarl.com/devcon referrerpolicy="strict-origin-when-cross-origin" allowfullscreen> -Mike Wolfe presents a session on twinBASIC covering a brief project overwiew, progress, roadmap, demos and Access integration plans. For more information see: - -- https://www.twinbasic.com -- https://nolongerset.com/tag/twinbasic +Mike Wolfe presents a session on twinBASIC covering a brief project overwiew, progress, roadmap, demos and Access integration plans. +- For more information see [https://nolongerset.com/tag/twinbasic][5]. -To learn more about the conference: https://www.donkarl.com/devcon +[5]: https://nolongerset.com/tag/twinbasic --- -**Access DevCon 2022 - twinBASIC Update** +### Access DevCon 2022 - twinBASIC Update 12 May 2022 @@ -67,15 +71,12 @@ To learn more about the conference: https://www.donkarl.com/devcon referrerpolicy="strict-origin-when-cross-origin" allowfullscreen> -Mike Wolfe presents the current state of twinBASIC focussing on the practical use and usefullness for Access developers. For more information: - -- https://www.twinbasic.com -- https://nolongerset.com/tag/twinbasic -- https://www.donkarl.com/devcon +Mike Wolfe presents the current state of twinBASIC focussing on the practical use and usefullness for Access developers. +- For more information, see [https://nolongerset.com/tag/twinbasic][5] --- -**Access DevCon 2021 - twinBasic** +### Access DevCon 2021 - twinBasic 12 May 2021 @@ -86,4 +87,3 @@ Mike Wolfe presents the current state of twinBASIC focussing on the practical us Mike Wolfe presents: The world premier of twinBasic, a new flavour of VB(A). -For more information go to https://www.donkarl.com/devcon diff --git a/docs/Videos/tb.md b/docs/Videos/twinBASIC.md similarity index 79% rename from docs/Videos/tb.md rename to docs/Videos/twinBASIC.md index 474c88cd..4935c819 100644 --- a/docs/Videos/tb.md +++ b/docs/Videos/twinBASIC.md @@ -1,12 +1,12 @@ --- title: tB Videos -# nav_order: 1 +parent: Videos permalink: /Videos/tB --- # Videos -**twinBASIC For Applications (Proof Of Concept)** +### twinBASIC For Applications (Proof Of Concept) 22 Jul 2024 @@ -20,11 +20,13 @@ Introducing "twinBASIC for applications" – the game-changing drop-in replaceme We posted this video on X last month but forgot to post it also on YT, so here you go :) -For more info: https://www.reddit.com/r/vba/comments/1dg0lse/the_next_evolution_of_vba_might_be_on_the_horizon/ +For more info: [https://www.reddit.com/r/vba/comments/1dg0lse/the_next_evolution_of_vba_might_be_on_the_horizon/][1] + +[1]: https://www.reddit.com/r/vba/comments/1dg0lse/the_next_evolution_of_vba_might_be_on_the_horizon/ ---- -**twinBASIC: CustomControls and form designer sneek peek!** +### twinBASIC: CustomControls and form designer sneek peek! 3 Oct 2021 @@ -38,7 +40,7 @@ A quick look at the twinBASIC form designer coming to twinBASIC very soon. We --- -**twinBASIC Preview - Quick Setup Guide (UPDATED JUNE 2021)** +### twinBASIC Preview - Quick Setup Guide (UPDATED JUNE 2021) 29 Jun 2021 @@ -52,7 +54,7 @@ twinBASIC Preview 1 is out now on the VS Code marketplace. This setup guide wil --- -**twinBASIC Preview - Quick Setup Guide (OLD VERSION)** +### twinBASIC Preview - Quick Setup Guide (OLD VERSION) 10 Apr 2021 @@ -61,14 +63,18 @@ twinBASIC Preview 1 is out now on the VS Code marketplace. This setup guide wil allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen> +> [!WARNING] +> This video is out of date -! This video is out of date ! A lot has changed since the first release of twinBASIC, so please watch the new version of this video instead: https://www.youtube.com/watch?v=ZzpyZWiCnzo +A lot has changed since the first release of twinBASIC, so please watch the new version of this video instead: [https://www.youtube.com/watch?v=ZzpyZWiCnzo][2]. twinBASIC Preview 1 is out now on the VS Code marketplace. This setup guide will show you how to very quickly install it and start using it. Enjoy! +[2]: https://www.youtube.com/watch?v=ZzpyZWiCnzo + --- -**twinBASIC - New Compiler Features (part 3)** +### twinBASIC - New Compiler Features (part 3) 29 Jan 2021 @@ -82,7 +88,7 @@ Today we're looking at some more compiler features; DeclareWide support (for by --- -**twinBASIC - New Compiler Features (part 2)** +### twinBASIC - New Compiler Features (part 2) 14 Jan 2021 @@ -96,7 +102,7 @@ Today we're looking at some more compiler features, in particular: CurrentCompon --- -**twinBASIC - Remote debugging applications (sneak peek)** +### twinBASIC - Remote debugging applications (sneak peek) 30 Dec 2020 @@ -110,7 +116,7 @@ A little teaser video that demonstrates how easy it is to edit and debug twinBAS --- -**twinBASIC - New Compiler Features (part 1)** +### twinBASIC - New Compiler Features (part 1) 22 Dec 2020 @@ -120,11 +126,11 @@ A little teaser video that demonstrates how easy it is to edit and debug twinBAS referrerpolicy="strict-origin-when-cross-origin" allowfullscreen> -Today we're looking at some of the new compiler features offered by twinBASIC. We look at unicode support, 64-bit support, new operators, new datatypes, assignment operators, short-circuiting operators. +Today we're looking at some of the new compiler features offered by twinBASIC. We look at unicode support, 64-bit support, new operators, new datatypes, assignment operators, short-circuiting operators. --- -**twinBASIC - Debugging in action (32-bit and 64-bit)** +### twinBASIC - Debugging in action (32-bit and 64-bit) 20 Dec 2020 @@ -134,11 +140,11 @@ Today we're looking at some of the new compiler features offered by twinBASIC. referrerpolicy="strict-origin-when-cross-origin" allowfullscreen> -Today we show off some of the debugging features available in twinBASIC. We feature the debug console, breakpoints, error breaking, live call stack, variables info panel, and the watch window. We also touch on 64-bit support, showing how to switch seamlessly between them. +Today we show off some of the debugging features available in twinBASIC. We feature the debug console, breakpoints, error breaking, live call stack, variables info panel, and the watch window. We also touch on 64-bit support, showing how to switch seamlessly between them. --- -**twinBASIC - Introduction** +### twinBASIC - Introduction 18 Dec 2020 diff --git a/docs/index.md b/docs/index.md index e0655e1e..2bb59843 100644 --- a/docs/index.md +++ b/docs/index.md @@ -52,9 +52,36 @@ The [twinBASIC wiki](https://github.com/twinbasic/documentation/wiki) supplement 2. [Statements](Reference/Statements), listed alphabetically 3. [Procedures and Functions](Reference/Procedures-and-Functions) of the core language, listed alphabetically 4. [List of available compiler constants](Reference/Compiler-Constants) -5. [Glossary](tB/Gloss) - a glossary of commonly used technical terms -6. [Modules](tB/Modules) - a list of core modules and their contents +5. [List of attributes](tB/Core/Attributes) -- those are things like `[Documentation("...")]`. +6. [List of built-in controls](tB/Controls) +7. [Glossary](tB/Gloss) - a glossary of commonly used technical terms +8. [Modules](tB/Modules) - a list of core modules and their contents + +## Documentation Development + +[Hints about the documentation development process](Documentation/Development) ## twinBASIC IDE -1. [Project Settings](tB/IDE/Project/Settings) +1. [Call Stack](tB/IDE/Project/Call Stack) +2. [Debug Console](tB/IDE/Project/Debug Console) +3. [Diagnostics](tB/IDE/Project/Diagnostics) +4. [Editor](tB/IDE/Project/Editor) +5. [Menu](tB/IDE/Project/Menu) +6. [New Project](tB/IDE/Project/New) +7. [Project Explorer](tB/IDE/Project/Explorer) +8. [Project Settings](tB/IDE/Project/Settings) +9. [Properties Pane](tB/IDE/Project/Properties) +10. [Splash Screen](tB/IDE/Project/Splash) +11. [Status Bar](tB/IDE/Project/Status Bar) +12. [Toolbar](tB/IDE/Project/Toolbar) +13. [Toolbox](tB/IDE/Project/Toolbox) +14. [Variables](tB/IDE/Project/Variables) +15. [tbForm](tB/IDE/Project/Editor/Form) +16. [tbReport](tB/IDE/Project/Editor/Report) + +## twinBASIC Videos + +[Access DevCon Videoes](Videos/AccessDevCon) + +[A series of videos introducing twinBASIC](Videos/tB) From b77c31632bec3346c7b750dc853660c87ed2f110 Mon Sep 17 00:00:00 2001 From: Alex Hedley <1573469+AlexHedley@users.noreply.github.com> Date: Fri, 23 Jan 2026 17:12:54 +0000 Subject: [PATCH 02/40] initial Menu pages --- docs/IDE/Menu/Add-Ins.md | 8 ++++++++ docs/IDE/Menu/Debug.md | 8 ++++++++ docs/IDE/Menu/Edit.md | 8 ++++++++ docs/IDE/Menu/File.md | 4 ++-- docs/IDE/Menu/Format.md | 8 ++++++++ docs/IDE/Menu/Help.md | 2 +- docs/IDE/Menu/Project.md | 8 ++++++++ docs/IDE/Menu/Run.md | 8 ++++++++ docs/IDE/Menu/Tools.md | 8 ++++++++ docs/IDE/Menu/View.md | 8 ++++++++ docs/IDE/Menu/Window.md | 8 ++++++++ docs/IDE/Menu/index.md | 26 +++++++++++--------------- 12 files changed, 86 insertions(+), 18 deletions(-) create mode 100644 docs/IDE/Menu/Add-Ins.md create mode 100644 docs/IDE/Menu/Debug.md create mode 100644 docs/IDE/Menu/Edit.md create mode 100644 docs/IDE/Menu/Format.md create mode 100644 docs/IDE/Menu/Project.md create mode 100644 docs/IDE/Menu/Run.md create mode 100644 docs/IDE/Menu/Tools.md create mode 100644 docs/IDE/Menu/View.md create mode 100644 docs/IDE/Menu/Window.md diff --git a/docs/IDE/Menu/Add-Ins.md b/docs/IDE/Menu/Add-Ins.md new file mode 100644 index 00000000..d36b9fe6 --- /dev/null +++ b/docs/IDE/Menu/Add-Ins.md @@ -0,0 +1,8 @@ +--- +title: Add-Ins +parent: Menu +nav_order: 9 +permalink: /tB/IDE/Project/Menu/AddIns +--- + +# Add-Ins Menu diff --git a/docs/IDE/Menu/Debug.md b/docs/IDE/Menu/Debug.md new file mode 100644 index 00000000..c11f9a99 --- /dev/null +++ b/docs/IDE/Menu/Debug.md @@ -0,0 +1,8 @@ +--- +title: Debug +parent: Menu +nav_order: 6 +permalink: /tB/IDE/Project/Menu/Debug +--- + +# Debug Menu diff --git a/docs/IDE/Menu/Edit.md b/docs/IDE/Menu/Edit.md new file mode 100644 index 00000000..e34c2db4 --- /dev/null +++ b/docs/IDE/Menu/Edit.md @@ -0,0 +1,8 @@ +--- +title: Edit +parent: Menu +nav_order: 2 +permalink: /tB/IDE/Project/Menu/Edit +--- + +# Edit Menu diff --git a/docs/IDE/Menu/File.md b/docs/IDE/Menu/File.md index 6761468c..cb0dd980 100644 --- a/docs/IDE/Menu/File.md +++ b/docs/IDE/Menu/File.md @@ -1,11 +1,11 @@ --- title: File parent: Menu -# nav_order: +nav_order: 1 permalink: /tB/IDE/Project/Menu/File --- -# Help Menu +# File Menu ![File (Menu)](Images/Menu_File.png "File (Menu)") diff --git a/docs/IDE/Menu/Format.md b/docs/IDE/Menu/Format.md new file mode 100644 index 00000000..183b0f3e --- /dev/null +++ b/docs/IDE/Menu/Format.md @@ -0,0 +1,8 @@ +--- +title: Format +parent: Menu +nav_order: 5 +permalink: /tB/IDE/Project/Menu/Format +--- + +# Format Menu diff --git a/docs/IDE/Menu/Help.md b/docs/IDE/Menu/Help.md index ee0ad96b..42f525a9 100644 --- a/docs/IDE/Menu/Help.md +++ b/docs/IDE/Menu/Help.md @@ -1,7 +1,7 @@ --- title: Help parent: Menu -# nav_order: +nav_order: 11 permalink: /tB/IDE/Project/Menu/Help --- diff --git a/docs/IDE/Menu/Project.md b/docs/IDE/Menu/Project.md new file mode 100644 index 00000000..4aa36191 --- /dev/null +++ b/docs/IDE/Menu/Project.md @@ -0,0 +1,8 @@ +--- +title: Project +parent: Menu +nav_order: 4 +permalink: /tB/IDE/Project/Menu/Project +--- + +# Project Menu diff --git a/docs/IDE/Menu/Run.md b/docs/IDE/Menu/Run.md new file mode 100644 index 00000000..50ce4fbf --- /dev/null +++ b/docs/IDE/Menu/Run.md @@ -0,0 +1,8 @@ +--- +title: Run +parent: Menu +nav_order: 7 +permalink: /tB/IDE/Project/Menu/Run +--- + +# Run Menu diff --git a/docs/IDE/Menu/Tools.md b/docs/IDE/Menu/Tools.md new file mode 100644 index 00000000..1037f286 --- /dev/null +++ b/docs/IDE/Menu/Tools.md @@ -0,0 +1,8 @@ +--- +title: Tools +parent: Menu +nav_order: 8 +permalink: /tB/IDE/Project/Menu/Tools +--- + +# Tools Menu diff --git a/docs/IDE/Menu/View.md b/docs/IDE/Menu/View.md new file mode 100644 index 00000000..b6539861 --- /dev/null +++ b/docs/IDE/Menu/View.md @@ -0,0 +1,8 @@ +--- +title: View +parent: Menu +nav_order: 3 +permalink: /tB/IDE/Project/Menu/View +--- + +# View Menu diff --git a/docs/IDE/Menu/Window.md b/docs/IDE/Menu/Window.md new file mode 100644 index 00000000..f160fde6 --- /dev/null +++ b/docs/IDE/Menu/Window.md @@ -0,0 +1,8 @@ +--- +title: Window +parent: Menu +nav_order: 10 +permalink: /tB/IDE/Project/Menu/Window +--- + +# Window Menu diff --git a/docs/IDE/Menu/index.md b/docs/IDE/Menu/index.md index 835f0c09..0651e322 100644 --- a/docs/IDE/Menu/index.md +++ b/docs/IDE/Menu/index.md @@ -9,18 +9,14 @@ permalink: /tB/IDE/Project/Menu ![Menu](Images/Menu.png "Menu") -- [File](/tB/IDE/Project/Menu/File) -- Edit -- View -- Project -- Format -- Debug -- Run -- Tools -- Add-Ins -- Window -- [Help](/tB/IDE/Project/Menu/Help) - -> [!NOTE] -> -> TODO: Add each Menu item. +- [File](File) +- [Edit](Edit) +- [View](View) +- [Project](Project) +- [Format](Format) +- [Debug](Debug) +- [Run](Run) +- [Tools](Tools) +- [Add-Ins](Add-Ins) +- [Window](Window) +- [Help](Help) From a2a8576dfe34a007f19ba48e353b2a3b614b1845 Mon Sep 17 00:00:00 2001 From: Alex Hedley <1573469+AlexHedley@users.noreply.github.com> Date: Fri, 23 Jan 2026 17:36:31 +0000 Subject: [PATCH 03/40] menu screens --- docs/IDE/Menu/Add-Ins.md | 4 ++++ docs/IDE/Menu/Edit.md | 2 ++ docs/IDE/Menu/Format.md | 2 ++ docs/IDE/Menu/Images/Menu_Add-Ins.png | Bin 0 -> 2301 bytes docs/IDE/Menu/Images/Menu_Edit.png | Bin 0 -> 36195 bytes docs/IDE/Menu/Images/Menu_Format.png | Bin 0 -> 11714 bytes docs/IDE/Menu/Images/Menu_Project.png | Bin 0 -> 8716 bytes docs/IDE/Menu/Images/Menu_Run.png | Bin 0 -> 4065 bytes docs/IDE/Menu/Images/Menu_Tools.png | Bin 0 -> 1823 bytes docs/IDE/Menu/Images/Menu_View.png | Bin 0 -> 29695 bytes docs/IDE/Menu/Images/Menu_Window.png | Bin 0 -> 6026 bytes docs/IDE/Menu/Project.md | 2 ++ docs/IDE/Menu/Run.md | 2 ++ docs/IDE/Menu/Tools.md | 2 ++ docs/IDE/Menu/View.md | 2 ++ docs/IDE/Menu/Window.md | 2 ++ 16 files changed, 18 insertions(+) create mode 100644 docs/IDE/Menu/Images/Menu_Add-Ins.png create mode 100644 docs/IDE/Menu/Images/Menu_Edit.png create mode 100644 docs/IDE/Menu/Images/Menu_Format.png create mode 100644 docs/IDE/Menu/Images/Menu_Project.png create mode 100644 docs/IDE/Menu/Images/Menu_Run.png create mode 100644 docs/IDE/Menu/Images/Menu_Tools.png create mode 100644 docs/IDE/Menu/Images/Menu_View.png create mode 100644 docs/IDE/Menu/Images/Menu_Window.png diff --git a/docs/IDE/Menu/Add-Ins.md b/docs/IDE/Menu/Add-Ins.md index d36b9fe6..b21578f5 100644 --- a/docs/IDE/Menu/Add-Ins.md +++ b/docs/IDE/Menu/Add-Ins.md @@ -6,3 +6,7 @@ permalink: /tB/IDE/Project/Menu/AddIns --- # Add-Ins Menu + +![Add-Ins Menu](Images/Menu_Add-Ins.png "Add-Ins Menu") + +{no addins loaded} diff --git a/docs/IDE/Menu/Edit.md b/docs/IDE/Menu/Edit.md index e34c2db4..cc45229a 100644 --- a/docs/IDE/Menu/Edit.md +++ b/docs/IDE/Menu/Edit.md @@ -6,3 +6,5 @@ permalink: /tB/IDE/Project/Menu/Edit --- # Edit Menu + +![Edit Menu](Images/Menu_Edit.png "Edit Menu") diff --git a/docs/IDE/Menu/Format.md b/docs/IDE/Menu/Format.md index 183b0f3e..e7778b82 100644 --- a/docs/IDE/Menu/Format.md +++ b/docs/IDE/Menu/Format.md @@ -6,3 +6,5 @@ permalink: /tB/IDE/Project/Menu/Format --- # Format Menu + +![Format Menu](Images/Menu_Format.png "Format Menu") diff --git a/docs/IDE/Menu/Images/Menu_Add-Ins.png b/docs/IDE/Menu/Images/Menu_Add-Ins.png new file mode 100644 index 0000000000000000000000000000000000000000..db56366fd255452669448320a73ba8faf78d6428 GIT binary patch literal 2301 zcmd^9`(G1R7N10@;A1~^t85h!i|gADE526CmI{Ih0g6altF00OiYN~?!ZKtW6PvIx z+2{n&D2a&;5R4d1FbWdD6oH@+-X8*vMoeg=3D*~PEk)Ujw!iGZu;(*p&i8!pnRCxQ zbMNKH#)QwDHg6h&ATuMjg~mZEgSyFM3VeGX>z@w|5b9`bRD4)Blrl6rS5-^U8ANSaE-gBdsD)%5!AL||iF9!tbW|)FEqd}n%gRs& zjaEj`Sv0!1jEJVuySr<}iF5`W>h2aN(pY8P3>uw5r!$$%iHV8U)>Z&Oad9zlSvyUA z4(N1i2pm(kK-4Hl`T79>26Q4++6;+y6^~V57zCu2kINcCi-Lm_dJDKKM@1EVmI{8e z3>9ff&?LqA($YdUj-niq&f)@Aqk_OuPM);>0RV$WWgdp(LUo%13^gjb7*8&hpnPD_ z72+t4VuW0Z3v?u$4mdi?3wRi+G=Wa7gpZ-T{41S9ptnNEm)x>c5*!waV?t#S->eei z7*|@|SD%j-R@-ovP}}PS&JJ}RDsKXy_X;27YarvYHOSa_-j&|T+&1ela2N`3@hv;B z8S+t1ki3ew7&I6&b;hQH~RaK^s{qB=tgEr~%!u2Ew2qL|irx!^p|rq9V9zS8FL7 z<(*O0_u3qFFuBqUfZe2#inu&B#$j{$T&}vM5ws~euxuBom!QC+5ut>+7~_|e3J;TT{2Ljlgh z2$j;&q>vWF7TquuvU!C{IUj9Sa5?bTb0wuk{CXLelYfh^?g0b0q+B*=QS#Wr)RYvb z(`o7JQ^@7?J$sI`SQlk7G$$uMxAJ!tcB*ay$dZQmS4 zkU#x6sgya(B2PeaE;DQ=b4SKLW;XpuG7?Kakk0gv35#F2-ao)UAmEgTml+0CCGU*b z7ZI@n@qmsyGLPbpP#}tg>is*Oyq14G$Si1gK|PS?_KrUU@ua-Sq99M; z?e&NK-&qj^4xX8cxWU-fYu2u&DBkCtoYP(LKG#`@Cxr?#Q{P3#ZQ2OY?_UM1UOhSb z?FfC$^NG3!X1o*;8XTXpWkiyk`BCuf6Myeocg7w`P~E8&jgf9C9e?&{)EE49oA$BS zvh>E~!((~PXWz+vyx*3rt4|J_?om-Hyl;~O$ zIcF$8MtFuiCoakEU%obJwB*ic=91>q3kA?<%^f?yn+>nl$($2Ju8d+ z>1up(Lqm)y(O}bk)M9wv<43am0>qEn3bqm7|B&=>bYS_1FT{_(NVN#e@9NBs zgaOg{cDE&kj9<{(53M3~m70TXy504Z`)TC${?{u5ExKd(v(7ybl>}yw#8_5CyRgcx&?C>2h>OHz&d2eJMy?^!oKHAQ! zf!POBAMFVh{8p~d%_KH``Z|8y=@}XGFFflQeWGm}vkzA~KJZ{Y?-}hPS{g2&_;-cL zWAC%)TXWw0)R$qK{rs2jzFc#s>9d-ikoUU;?gmO~!Rxo5&3*M@5GyKF9)x>7iwZja mh9|CDEXIp+Jos{P-IUvzfz$84nKeFna3jKELNy@?oc{vl78gbU literal 0 HcmV?d00001 diff --git a/docs/IDE/Menu/Images/Menu_Edit.png b/docs/IDE/Menu/Images/Menu_Edit.png new file mode 100644 index 0000000000000000000000000000000000000000..c64d495d9250717995d11680f6db3fb4148ff58f GIT binary patch literal 36195 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 literal 0 HcmV?d00001 diff --git a/docs/IDE/Menu/Images/Menu_Project.png b/docs/IDE/Menu/Images/Menu_Project.png new file mode 100644 index 0000000000000000000000000000000000000000..07efeece4f55c5ddd62082aa6dc23c2b3e60a87f GIT binary patch literal 8716 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 U(K>Zcr|l_6v121T!ZUXK14Ptg)&Kwi literal 0 HcmV?d00001 diff --git a/docs/IDE/Menu/Images/Menu_View.png b/docs/IDE/Menu/Images/Menu_View.png new file mode 100644 index 0000000000000000000000000000000000000000..a749fa401579e11b93afe68460c03ba23a290987 GIT binary patch literal 29695 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 VU4JXk{PGG*Nl`hGav^=6{|8WZoH_si literal 0 HcmV?d00001 diff --git a/docs/IDE/Menu/Images/Menu_Window.png b/docs/IDE/Menu/Images/Menu_Window.png new file mode 100644 index 0000000000000000000000000000000000000000..e57b20fd984f1031b7f76b24f120b1cc718943f7 GIT binary patch literal 6026 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 Date: Fri, 23 Jan 2026 17:36:36 +0000 Subject: [PATCH 04/40] debug --- docs/IDE/Menu/Debug.md | 24 ++++++++++++++++++ docs/IDE/Menu/Images/Menu_Debug.png | Bin 0 -> 16398 bytes .../Images/Menu_Debug_DebuggerOptions.png | Bin 0 -> 22461 bytes .../Images/Menu_Debug_DebuggerOptions_2.png | Bin 0 -> 3869 bytes 4 files changed, 24 insertions(+) create mode 100644 docs/IDE/Menu/Images/Menu_Debug.png create mode 100644 docs/IDE/Menu/Images/Menu_Debug_DebuggerOptions.png create mode 100644 docs/IDE/Menu/Images/Menu_Debug_DebuggerOptions_2.png diff --git a/docs/IDE/Menu/Debug.md b/docs/IDE/Menu/Debug.md index c11f9a99..bffcd1b7 100644 --- a/docs/IDE/Menu/Debug.md +++ b/docs/IDE/Menu/Debug.md @@ -6,3 +6,27 @@ permalink: /tB/IDE/Project/Menu/Debug --- # Debug Menu + +![Debug Menu](Images/Menu_Debug.png "Debug Menu") + +- Step Into F8 / F11 +- Step Over SHIFT + F8 / F10 +--- +- Add Watch... SHIFT + F9 +- Clear Watches +--- +- Toggle Breakpoint F9 +- Clear Al Breakpoints CTRL + SHIFT + F9 +--- +- Set Next Statement (Jump To Line) CTRL + F9 +--- +- Debugger Options + +## Debugger Options + +![Debugger Options | Debug Menu](Images/Menu_Debug_DebuggerOptions.png "Debugger Options | Debug Menu") + +- Break On All Errors +- ✔ Allow Breakpoints (Debuggable) + +![Debugger Options | Debug Menu](Images/Menu_Debug_DebuggerOptions_2.png "Debugger Options | Debug Menu") \ No newline at end of file diff --git a/docs/IDE/Menu/Images/Menu_Debug.png b/docs/IDE/Menu/Images/Menu_Debug.png new file mode 100644 index 0000000000000000000000000000000000000000..ab8f301dab891a7c00252d569e125bbdd5616130 GIT binary patch literal 16398 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 z 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 Date: Fri, 23 Jan 2026 13:58:56 +0100 Subject: [PATCH 05/40] Document Call and Class. Add Protected and UBound to TODO. --- docs/Reference/Core/Call.md | 68 ++++++++++++++++++++++++++++++++++++ docs/Reference/Core/Class.md | 35 +++++++++++++++++++ docs/Reference/Core/todo.md | 4 +-- docs/Reference/Statements.md | 6 ++-- 4 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 docs/Reference/Core/Call.md create mode 100644 docs/Reference/Core/Class.md diff --git a/docs/Reference/Core/Call.md b/docs/Reference/Core/Call.md new file mode 100644 index 00000000..0674f670 --- /dev/null +++ b/docs/Reference/Core/Call.md @@ -0,0 +1,68 @@ +--- +title: Call +parent: Statements +permalink: /tB/Core/Call +--- + +# Call + +{: no_toc } + +Transfers control to a **Sub** [procedure](../Gloss#procedure), **Function** procedure, or dynamic-link library (DLL) procedure. + +Syntax: + +- **Call** *name* **(** [ *argumentlist* ] **)** + When the **Call** keyword is specified, the *argumentlist* must be enclosed in parentheses. + +- *name* **(** [ *argumentlist* ] **)** + Without the **Call** keyword, the *argumentlist* can be optionally enclosed in parentheses, + +- *name* [ *argumentlist* ] + +*name* +: The name of the procedure to call + +*argumentlist* +: *optional* A comma-delimited list of variables, arrays or expressions to pass to the procedure. Components of *argumentlist* may include the keywords **ByVal** or **ByRef** to describe how the arguments are to be passed to the called procedure. + +You are not required to use the **Call** keyword when calling a procedure. However, if you use the **Call** keyword to call a procedure that requires arguments, *argumentlist* must be enclosed in parentheses. If you omit the **Call** keyword, you also must omit the parentheses around *argumentlist*. If you use either **Call** syntax to call any intrinsic or user-defined function, the function's return value is discarded. + +To pass a whole array to a procedure, use the array name followed by empty parentheses. + +### Example + +This example illustrates how the **Call** statement is used to transfer control to a **Sub** procedure, an intrinsic function, and a dynamic-link library (DLL) procedure. + +``` vb +' Call a Sub procedure. +Call PrintToDebugWindow("Hello World") +' The above statement causes control to be passed to the following +' Sub procedure. +Sub PrintToDebugWindow(AnyString) + Debug.Print AnyString ' Print to the Immediate window. +End Sub + +' Call an intrinsic function. The return value of the function is +' discarded. +Call Shell(AppName, 1) ' AppName contains the path of the + ' executable file. + +' Call a Microsoft Windows DLL procedure. The Declare statement must be +' Private in a Class Module, but not in a standard Module. +Private Declare Sub MessageBeep Lib "User" (ByVal N As Integer) +Sub CallMyDll() + Call MessageBeep(0) ' Call Windows DLL procedure. + MessageBeep 0 ' Call again without Call keyword. +End Sub +``` + +### See Also + +- [**Declare** statement](Declare) +- [**Function** statement](Function) +- [**Sub** statement](Sub) + + + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/Class.md b/docs/Reference/Core/Class.md new file mode 100644 index 00000000..75e943de --- /dev/null +++ b/docs/Reference/Core/Class.md @@ -0,0 +1,35 @@ +--- +title: Class +parent: Statements +permalink: /tB/Core/Class +--- + +# Class + +{: no_toc } + +Used to define a class. Classes are templates from which objects are created -- classes are object types, as opposed to value types. Objects are held by reference and are reference-counted. The memory an object occupies is freed when there are no more references to it -- when no variables in the process refer to them. + +Syntax: + +> [ *attributes* ] +> **Class** *name* +>     [ *classmember* ] +>     [ *classmember* ] ... +> **End Class** + +*attributes* +: *optional* One or more of: +[ArrayBoundsChecks](Attributes#arrayboundschecks), [ClassId](Attributes#classid), [COMCreatable](Attributes#comcreatable), [CustomControl](Attributes#customcontrol), [Description](Attributes#description), [FloatingPointErrorChecks](Attributes#floatingpointerrorchecks), [FormDesignerId](Attributes#formdesignerid), [Hidden](Attributes#hidden), [IntegerOverflowChecks](Attributes#integeroverflowchecks), [PredeclaredID](Attributes#predeclaredid) + +*name* +: The identifier naming the class. + +*classmember* +: *optional* Any of the following: + + - [constant](../Gloss#constant) defined using [**Const**](Const), + - [variable](../Gloss#variable) defined using [**Public**](Public), [**Protected**](Protected), [**Private**](Private), and [**Dim**](Dim), + - [procedure](../Gloss#procedure) defined using [**Sub**](Sub), [**Function**](Function) and [**Property**](Property), + - [user-defined type (UDTs)](../Gloss#user-defined-type) defined using [**Type**](Type). + diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 390e2ac6..6a88ca47 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,10 +5,8 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/AppActivate - /tB/Core/Beep - - /tB/Core/Call - /tB/Core/ChDir - /tB/Core/ChDrive - - /tB/Core/Class - /tB/Core/Close - /tB/Core/CoClass - /tB/Core/Const @@ -58,6 +56,7 @@ redirect_from: - /tB/Core/Print - /tB/Core/Private - /tB/Core/Property + - /tB/Core/Protected - /tB/Core/Public - /tB/Core/Put - /tB/Core/RaiseEvent @@ -78,6 +77,7 @@ redirect_from: - /tB/Core/Stop - /tB/Core/Time - /tB/Core/Type + - /tB/Core/UBound - /tB/Core/Unload - /tB/Core/Unlock - /tB/Core/While-Wend diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index 488baba4..af7299c8 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -14,9 +14,9 @@ These statements are built into the language itself. They are understood by the ## Alphabetical List -* [Call](../tB/Core/Call) +* [Call](../tB/Core/Call) -- transfer control to a procedure -* [Class](../tB/Core/Class) +* [Class](../tB/Core/Class) -- define a class * [Close](../tB/Core/Close) @@ -76,7 +76,7 @@ These statements are built into the language itself. They are understood by the * [Open](../tB/Core/Open) -* [Option](../tB/Core/Option) - configure a compiler option +* [Option](../tB/Core/Option) -- configure a compiler option * [Print](../tB/Core/Print) From c5ce2936181ac441dd5e3e0d2cda7ec3c5ffc5a9 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 13:44:56 +0100 Subject: [PATCH 06/40] Fix typo in Math module. --- docs/Reference/Modules/Math.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Reference/Modules/Math.md b/docs/Reference/Modules/Math.md index 012d2479..5ff52469 100644 --- a/docs/Reference/Modules/Math.md +++ b/docs/Reference/Modules/Math.md @@ -8,8 +8,8 @@ permalink: /tB/Modules/Math * [Atn](#atn), [Cos](#cos), [Sin](#sin), [Tan](#tan) - trigonometric functions * [Sqr](#sqr) - take a square root -* [Exp](#exp) - calculate an exponential with base $e$ -* [Log](#log) - calculate the natural (base $e$) logarithm of a number +* [Exp](#exp) - calculate an exponential with base _e_ +* [Log](#log) - calculate the natural (base _e_) logarithm of a number * [Sgn](#sgn) - return the sign of a number * [Abs](#abs) - returns the absolute value of a number * [Round](#round) - round the number to a given number of decimal places From f9004d9d220b5075e3e4b3c742a0fe7d4f47247b Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 13:46:45 +0100 Subject: [PATCH 07/40] Separate module procedure links to make them easier to construct from the IDE. --- .../Documentation Development.md | 6 +- docs/Reference/Categories.md | 26 ++--- docs/Reference/Modules/Strings.md | 103 +++++++++++++----- 3 files changed, 92 insertions(+), 43 deletions(-) diff --git a/docs/Miscellaneous/Documentation Development.md b/docs/Miscellaneous/Documentation Development.md index ae19fbf0..de3d0beb 100644 --- a/docs/Miscellaneous/Documentation Development.md +++ b/docs/Miscellaneous/Documentation Development.md @@ -30,14 +30,16 @@ The stable, or machine-accessible part of the documentation tree is rooted on th - [Mid-equals](../tB/Core/Mid-equals) for `Mid(...) = ...` , [MidB-equals](../tB/Core/MidB-equals) for `MidB(...) = ...`, [MkDir](../tB/Core/MkDir), [Module](../tB/Core/Module) - [Name](../tB/Core/Name), [New](../tB/Core/New) - [Option](../tB/Core/Option), [On-Error](../tB/Core/On-Error), [On-GoSub](../tB/Core/On-GoSub), [On-GoTo](../tB/Core/On-GoTo), [Open](../tB/Core/Open) -- [ParamArray](../tB/Core/ParamArray), [Print](../tB/Core/Print), [Private](../tB/Core/Private), [Property](../tB/Core/Property), [Public](../tB/Core/Public), [Put](../tB/Core/Put) +- [ParamArray](../tB/Core/ParamArray), [Print](../tB/Core/Print), [Private](../tB/Core/Private), [Property](../tB/Core/Property), [Protected](../tB/Core/Protected), [Public](../tB/Core/Public), [Put](../tB/Core/Put) - [RaiseEvent](../tB/Core/RaiseEvent), [ReDim](../tB/Core/ReDim), [Reset](../tB/Core/Reset), [Resume](../tB/Core/Resume), [RmDir](../tB/Core/RmDir), [RSet](../tB/Core/RSet) - [SavePicture](../tB/Core/SavePicture), [SaveSetting](../tB/Core/SaveSetting), [Seek](../tB/Core/Seek), [Select-Case](../tB/Core/Select-Case), [SendKeys](../tB/Core/SendKeys), [Set](../tB/Core/Set), [SetAttr](../tB/Core/SetAttr), [Static](../tB/Core/Static), [Sub](../tB/Core/Sub), [Stop](../tB/Core/Stop) - [Time](../tB/Core/Time), [Type](../tB/Core/Type) - [Unload](../tB/Core/Unload), [Unlock](../tB/Core/Unlock) - [While-Wend](../tB/Core/While-Wend), [Width](../tB/Core/Width), [With](../tB/Core/With), [Write](../tB/Core/Write) -### /tB/Modules/\ +### /tB/Modules/\#\ + +Within each module, the procedures are internal links, e.g. [**LenB**: /tB/Modules/Strings#lenb](../tB/Modules/Strings#lenb). The `$`-suffixed versions have links ending with `-1`, e.g. [**LenB$**: /tB/Modules/Strings#lenb-1](../tB/Modules/Strings#lenb-1). These are modules within VBA and VBRUN: diff --git a/docs/Reference/Categories.md b/docs/Reference/Categories.md index 6a3f27d9..ba013252 100644 --- a/docs/Reference/Categories.md +++ b/docs/Reference/Categories.md @@ -146,33 +146,33 @@ Statements that modify strings: Procedures that check properties of strings: -* [Len\$, Len, LenB\$, LenB](../tB/Modules/Strings#len-len-lenb-lenb) - the length of a string -* [Asc, AscB, AscW](../tB/Modules/Strings#asc-ascb-ascw) - returns the character code of the first letter in a string +* [Len\$](../tB/Modules/Strings#len-1), [Len](../tB/Modules/Strings#len), [LenB\$](../tB/Modules/Strings#lenb-1), [LenB](../tB/Modules/Strings#lenb) - the length of a string +* [Asc](../tB/Modules/Strings#asc), [AscB](../tB/Modules/Strings#ascb), [AscW](../tB/Modules/Strings#ascw) - returns the character code of the first letter in a string * [StrComp](../tB/Modules/Strings#strcomp) - compares two strings -* [InStr$, InStrB, InStr](../tB/Modules/Strings#instr-instrb-instr) - finds the position of a given substring in a string +* [InStr$](../tB/Modules/Strings#instr-1), [InStrB](../tB/Modules/Strings#instrb), [InStr](../tB/Modules/Strings#instr) - finds the position of a given substring in a string Procedures that create strings: -* [Chr\$, Chr, ChrB\$, ChrB, ChrW\$, ChrW](../tB/Modules/Strings#chr-chr-chrb-chrb-chrw-chrw) - returns the character having a given code -* [Space$, Space](../tB/Modules/Strings#space-space) - return a string of spaces -* [String\$, String](../tB/Modules/Strings#string-string) - return a string of specified characters +* [Chr\$](../tB/Modules/Strings#chr-1), [Chr](../tB/Modules/Strings#chr), [ChrB\$](../tB/Modules/Strings#chrb-1), [ChrB](../tB/Modules/Strings#chrb), [ChrW\$](../tB/Modules/Strings#chrw-1), [ChrW](../tB/Modules/Strings#chrw) - returns the character having a given code +* [Space$](../tB/Modules/Strings#space-1), [Space](../tB/Modules/Strings#space) - return a string of spaces +* [String\$](../tB/Modules/Strings#string-1), [String](../tB/Modules/Strings#string) - return a string of specified characters Procedures that return modified strings: -* [Left\$, Left, LeftB$, LeftB](../tB/Modules/Strings#left-left-leftb-leftb) - extract a left substring of a string -* [Mid$, Mid, MidB\$, MidB](../tB/Modules/Strings#mid-mid-midb-midb)- extract a substring of a string -* [Right\$, Right, RightB\$, RightB](../tB/Modules/Strings#right-right-rightb-rightb) - extract a right substring of a string -* [LTrim\$, LTrim, RTrim\$, RTrim](../tB/Modules/Strings#ltrim-ltrim-rtrim-rtrim) - removes leading/trailing spaces from a string -* [Trim$, Trim](../tB/Modules/Strings#trim-trim) - removes leading and trailing spaces from a string +* [Left\$](../tB/Modules/Strings#left-1), [Left](../tB/Modules/Strings#left), [LeftB$](../tB/Modules/Strings#leftb-1), [LeftB](../tB/Modules/Strings#leftb) - extract a left substring of a string +* [Mid$](../tB/Modules/Strings#mid-1), [Mid](../tB/Modules/Strings#mid), [MidB\$](../tB/Modules/Strings#midb-1), [MidB](../tB/Modules/Strings#midb)- extract a substring of a string +* [Right\$](../tB/Modules/Strings#right-1), [Right](../tB/Modules/Strings#right), [RightB\$](../tB/Modules/Strings#rightb-1), [RightB](../tB/Modules/Strings#rightb) - extract a right substring of a string +* [LTrim\$](../tB/Modules/Strings#ltrim-1), [LTrim](../tB/Modules/Strings#ltrim), [RTrim\$](../tB/Modules/Strings#rtrim-1), [RTrim](../tB/Modules/Strings#rtrim) - removes leading/trailing spaces from a string +* [Trim$](../tB/Modules/Strings#trim-1), [Trim](../tB/Modules/Strings#trim) - removes leading and trailing spaces from a string * [StrReverse](../tB/Modules/Strings#strreverse) - reverses the order of characters of a string -* [LCase\$, LCase, RCase\$, RCase](../tB/Modules/Strings#lcase-lcase-rcase-rcase) - capitalizes or lowercases a string +* [LCase\$](../tB/Modules/Strings#lcase-1), [LCase](../tB/Modules/Strings#lcase), [RCase\$](../tB/Modules/Strings#rcase-1), [RCase](../tB/Modules/Strings#rcase) - capitalizes or lowercases a string * [StrConv](../tB/Modules/Strings#strconv) - converts the string to a specified format * [Join](../tB/Modules/Strings#join) - concatenates a string array using a given delimiter * [Split](../tB/Modules/Strings#split) - splits a string into a string array * [Replace](../tB/Modules/Strings#replace) - replaces substrings in a string * [Filter](../tB/Modules/Strings#filter) - filters a string array into a subset according to criteria * [InStrRev](../tB/Modules/Strings#instrrev) - filters a string array into a subset according to criteria -* [Format\$, Format](../tB/Modules/Strings#format-format) - format a numeric expression in a specific way +* [Format\$](../tB/Modules/Strings#format-1), [Format](../tB/Modules/Strings#format) - format a numeric expression in a specific way * [FormatNumber](../tB/Modules/Strings#formatnumber) - formats an expression as a numeric string * [FormatPercent](../tB/Modules/Strings#formatpercent) - formats an expression as a percent string diff --git a/docs/Reference/Modules/Strings.md b/docs/Reference/Modules/Strings.md index 7291e580..86102c3c 100644 --- a/docs/Reference/Modules/Strings.md +++ b/docs/Reference/Modules/Strings.md @@ -8,33 +8,32 @@ permalink: /tB/Modules/Strings Procedures that check properties of strings: -* [Len\$, Len, LenB\$, LenB](#len-len-lenb-lenb) - returns the length of a string -* [Asc, AscB, AscW](#asc-ascb-ascw) - returns the character code of the first letter in a string +* [Len\$](#len-1), [Len](#len), [LenB\$](#lenb-1), [LenB](#lenb) - returns the length of a string +* [Asc](#asc), [AscB](#ascb), [AscW](#ascw) - returns the character code of the first letter in a string * [StrComp](#strcomp) - compares two strings -* [InStr$, InStrB, InStr](#instr-instrb-instr) - finds the position of a given substring in a string +* [InStr$](#instr-1), [InStrB](#instrb), [InStr](#instr), [InStrRev](#instrrev) - finds the position of a given substring in a string Procedures that create strings: -* [Chr\$, Chr, ChrB\$, ChrB, ChrW\$, ChrW](#chr-chr-chrb-chrb-chrw-chrw) - returns the character having a given code -* [Space$, Space](#space-space) - return a string of spaces -* [String\$, String](#string-string) - return a string of specified characters +* [Chr\$](#chr-1), [Chr](#chr), [ChrB\$](#chrb-1), [ChrB](#chrb), [ChrW\$](#chrw-1), [ChrW](#chrw) - returns the character having a given code +* [Space$](#space-1), [Space](#space) - return a string of spaces +* [String\$](#string-1), [String](#string) - return a string of specified characters Procedures that return modified strings: -* [Left\$, Left, LeftB$, LeftB](#left-left-leftb-leftb) - extract a left substring of a string -* [Mid$, Mid, MidB\$, MidB](#mid-mid-midb-midb)- extract a substring of a string -* [Right\$, Right, RightB\$, RightB](#right-right-rightb-rightb) - extract a right substring of a string -* [LTrim\$, LTrim, RTrim\$, RTrim](#ltrim-ltrim-rtrim-rtrim) - removes leading/trailing spaces from a string -* [Trim$, Trim](#trim-trim) - removes leading and trailing spaces from a string +* [Left\$](#left-1), [Left](#left), [LeftB$](#leftb-1), [LeftB](#leftb) - extract a left substring of a string +* [Mid$](#mid-1), [Mid](#mid), [MidB\$](#midb-1), [MidB](#midb)- extract a substring of a string +* [Right\$](#right-1), [Right](#right), [RightB\$](#rightb-1), [RightB](#rightb) - extract a right substring of a string +* [LTrim\$](#ltrim-1), [LTrim](#ltrim), [RTrim\$](#rtrim-1), [RTrim](#rtrim) - removes leading/trailing spaces from a string +* [Trim$](#trim-1), [Trim](#trim) - removes leading and trailing spaces from a string * [StrReverse](#strreverse) - reverses the order of characters of a string -* [LCase\$, LCase, RCase\$, RCase](#lcase-lcase-rcase-rcase) - capitalizes or lowercases a string +* [LCase\$](#lcase-1), [LCase](#lcase), [RCase\$](#rcase-1), [RCase](#rcase) - capitalizes or lowercases a string * [StrConv](#strconv) - converts the string to a specified format * [Join](#join) - concatenates a string array using a given delimiter * [Split](#split) - splits a string into a string array * [Replace](#replace) - replaces substrings in a string * [Filter](#filter) - filters a string array into a subset according to criteria -* [InStrRev](#instrrev) - filters a string array into a subset according to criteria -* [Format\$, Format](#format-format) - format a numeric expression in a specific way +* [Format\$](#format-1), [Format](#format) - format a numeric expression in a specific way * [FormatCurrency](#formatcurrency) - format an expression as a currency string * [FormatDateTime](#formatdatetime) - formats an expression as a date/time string * [FormatNumber](#formatnumber) - formats an expression as a numeric string @@ -45,30 +44,78 @@ Procedures that return modified strings: > [!WARNING] > Work in Progress Below -## Len\$, Len, LenB\$, LenB -## Asc, AscB, AscW +## Len +## Len\$ +## LenB +## LenB\$ + +## Asc +## AscB +## AscW + ## StrComp -## InStr$, InStrB, InStr -## Chr\$, Chr, ChrB\$, ChrB, ChrW\$, ChrW -## Space$, Space -## String\$, String -## Left\$, Left, LeftB$, LeftB -## Mid$, Mid, MidB\$, MidB -## Right\$, Right, RightB\$, RightB -## LTrim\$, LTrim, RTrim\$, RTrim -## Trim$, Trim + +## InStr +## InStr$ +## InStrB +## InStrRev + +## Chr +## Chr\$ +## ChrB +## ChrB\$ +## ChrW +## ChrW\$ + +## Space +## Space\$ + +## String +## String\$ + +## Left +## Left\$ +## LeftB +## LeftB\$ + +## Mid +## Mid\$ +## MidB +## MidB\$ + +## Right +## Right\$ +## RightB +## RightB\$ + +## LTrim +## LTrim\$ +## RTrim +## RTrim\# + +## Trim +## Trim\$ + ## StrReverse -## LCase\$, LCase, RCase\$, RCase + +## LCase +## LCase\$ +## RCase +## RCase\$ + ## StrConv ## Join ## Split ## Replace ## Filter -## InStrRev -## Format\$, Format + +## Format +## Format\$ + ## FormatCurrency ## FormatDateTime ## FormatNumber ## FormatPercent + ## MonthName ## WeekdayName From 08670c8c39f8840910428f5c3c58f8077d581c1a Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 13:47:59 +0100 Subject: [PATCH 08/40] Update attribute applicability. --- docs/Reference/Attributes.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Reference/Attributes.md b/docs/Reference/Attributes.md index b880b320..f0980ed1 100644 --- a/docs/Reference/Attributes.md +++ b/docs/Reference/Attributes.md @@ -142,7 +142,7 @@ Applicable to: [**Interface**](Interface) Syntax: **[COMCreatable** [ **( True** \| **False )** ] **]** -Applicable to: [**CoClass**](CoClass) +Applicable to: [**Class**](Class), [**CoClass**](CoClass) Indicates that this coclass can be created with the [**New**](New) keyword. @@ -360,9 +360,9 @@ Applicable to: [**Class**](Class) Syntax: **[Hidden** [ **(** **True** \| **False** **)** ] **]** -Applicable to: [**CoClass**](CoClass), [**Interface**](Interface) +Applicable to: [**Class**](Class), [**CoClass**](CoClass), [**Interface**](Interface) -Hides the interface or coclass from certain Intellisense and other lists. +Hides the interface or class from certain Intellisense and other lists. ## IdeButton (String) From bc6826330f2da29d1541d746546c014c9bc2ea8c Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 13:48:18 +0100 Subject: [PATCH 09/40] Add see-also links to Option. --- docs/Reference/Core/Option.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/Reference/Core/Option.md b/docs/Reference/Core/Option.md index d409b6b4..7ca8d376 100644 --- a/docs/Reference/Core/Option.md +++ b/docs/Reference/Core/Option.md @@ -4,7 +4,7 @@ parent: Statements permalink: /tB/Core/Option --- # Option -{: .no_toc} +{: .no_toc } Configures a compiler option. @@ -27,8 +27,14 @@ If used, the statement must appear in a [module](../Gloss#module) or [class](../ The **Option Base** statement only affects the lower bound of arrays in the module where the statement is located. +### See Also +{: .no_toc } + +- [**Dim**](Dim) and [**ReDim**](ReDim) statements +- [**LBound**](LBound) and [**UBound**](UBound) functions + ### Example of use at module level -{: .no_toc} +{: .no_toc } This example uses the **Option Base** statement to override the default base array subscript value of 0. The [**LBound**](LBound) function returns the smallest available subscript for the indicated dimension of an array. The **Option Base** statement is used at the module level only. @@ -89,6 +95,11 @@ If you don't use the **Option Explicit** statement, and when the [**Option Expli > > Use **Option Explicit** to avoid incorrectly typing the name of an existing variable or to avoid confusion in code where the [scope](../Gloss#scope) of the variable is not clear. +### See Also +{: .no_toc } + +- [**Const**](Const), [**Dim**](Dim), and [**Static**](Static) statements + ### Example of use at module level {: .no_toc } @@ -125,6 +136,11 @@ The **Option Compare** statement specifies the [string comparison](../Gloss#stri ``` * **Option Compare Database** has no effect in twinBASIC. When used within Microsoft Access, it results in string comparisons based on the sort order determined by the locale ID of the database where the string comparisons occur. +### See Also +{: .no_toc } + +- [**InStr\$**](../Modules/Strings#instr-1), [**InStr**](../Modules/Strings#instr), [**InStrB**](../Modules/Strings#instrb), and [**InStrRev**](../Modules/Strings#instrrev) functions. + ### Example {: .no_toc } From 4c30f6d9c42bdfbed0668b71341a8d5664db158d Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 15:18:30 +0100 Subject: [PATCH 10/40] Document AppActivate, Beep, Close, ChDir. --- docs/Reference/Core/Close.md | 48 +++++++++++++++ docs/Reference/Core/todo.md | 4 -- docs/Reference/Modules/FileSystem/ChDir.md | 59 +++++++++++++++++++ docs/Reference/Modules/FileSystem/index.md | 19 ++++++ .../Modules/Interaction/AppActivate.md | 57 ++++++++++++++++++ docs/Reference/Modules/Interaction/Beep.md | 28 +++++++++ docs/Reference/Modules/Interaction/index.md | 17 ++++++ docs/Reference/Modules/todo.md | 9 ++- docs/Reference/Statements.md | 2 +- 9 files changed, 236 insertions(+), 7 deletions(-) create mode 100644 docs/Reference/Core/Close.md create mode 100644 docs/Reference/Modules/FileSystem/ChDir.md create mode 100644 docs/Reference/Modules/FileSystem/index.md create mode 100644 docs/Reference/Modules/Interaction/AppActivate.md create mode 100644 docs/Reference/Modules/Interaction/Beep.md create mode 100644 docs/Reference/Modules/Interaction/index.md diff --git a/docs/Reference/Core/Close.md b/docs/Reference/Core/Close.md new file mode 100644 index 00000000..54508a0a --- /dev/null +++ b/docs/Reference/Core/Close.md @@ -0,0 +1,48 @@ +--- +title: Close +parent: Statements +permalink: /tB/Core/Close +--- + +# Close +{: .no_toc } + +Concludes input/output (I/O) to a file opened using the **Open** statement. + +Syntax: + +- **Close** [[ **#** ] *filenumber1* ] [ **,** [ **#** ] *filenumber2* ] *. . .* + The *filenumber* is any valid file number, given as an expression evaluating to an integer. The file numbers do not have to be constant. The **#** prefixes are optional. + +- **Close** + If you omit *filenumber* list, all active files opened by the **Open** statement are closed. + +> [!WARNING] +> +> The parameterless form should be used only when shutting down/exiting the program, since it will close *all* open files that were opened elsewhere in the program. + +When you close files that were opened for **Output** or **Append**, the final buffer of output is written to the operating system buffer for that file. All buffer space associated with the closed file is released. + +When the **Close** statement is executed, the association of a file with its file number ends. + +### Example + +This example uses the **Close** statement to close the three files opened for **Output**. + +```vb +Dim I%, FileName$, FileNumber%(1 To 3) +For I = 1 To 3 ' Loop 3 times + FileName = "TEST" & I ' Create file name + FileNumber(I) = FreeFile() + Open FileName For Output As #FileNumber(I) ' Open file + Print #FileNumber(I), "This is a test." ' Write string to file +Next I +Close #FileNumber(1), #FileNumber(2), #FileNumber(3) ' Close the 3 open files. +``` + +### See Also + +- [Open](Open) statement +- [FreeFile](../Modules/FileSystem) function + +{% include VBA-Attribution.md %} diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 6a88ca47..a2458416 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -3,11 +3,7 @@ title: TODO List for /tb/Core nav_exclude: true redirect_from: - /tB/Core/Topic-Preprocessor - - /tB/Core/AppActivate - - /tB/Core/Beep - - /tB/Core/ChDir - /tB/Core/ChDrive - - /tB/Core/Close - /tB/Core/CoClass - /tB/Core/Const - /tB/Core/Continue diff --git a/docs/Reference/Modules/FileSystem/ChDir.md b/docs/Reference/Modules/FileSystem/ChDir.md new file mode 100644 index 00000000..b184a5b3 --- /dev/null +++ b/docs/Reference/Modules/FileSystem/ChDir.md @@ -0,0 +1,59 @@ +--- +title: ChDir +parent: FileSystem Module +permalink: /tB/Modules/FileSystem/ChDir +redirect_from: +- /tB/Core/ChDir +--- +# ChDir +{: .no_toc } + +Changes the current directory or folder. + +Syntax: **ChDir** *path* + +path +: A string expression that identifies which directory or folder becomes the new default directory or folder. The *path* may include the drive. If no drive is specified, **ChDir** changes the default directory or folder on the current drive. + +The **ChDir** statement changes the default directory but not the default drive. For example, if the default drive is C, the following statement changes the default directory on drive D, but C remains the default drive: + +```vb +ChDir "D:\TMP" ' Make "D:\TMP" the current folder. + +ChDrive "D" ' Make "D" the current drive. +``` + + + +### See Also + +- [ChDrive](ChDrive), [MkDir](MkDir), [RmDir](RmDir) statements +- [CurDir](CurDir), [Dir](Dir) functions + +### Example + +This example uses the **ChDir** statement to change the current directory or folder. + +```vb +' Change current directory or folder to "MYDIR". +ChDir "MYDIR" + +' Assume "C:" is the current drive. The following statement changes +' the default directory on drive "D:". "C:" remains the current drive. +ChDir "D:\WINDOWS\SYSTEM" +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Modules/FileSystem/index.md b/docs/Reference/Modules/FileSystem/index.md new file mode 100644 index 00000000..85ba29a7 --- /dev/null +++ b/docs/Reference/Modules/FileSystem/index.md @@ -0,0 +1,19 @@ +--- +title: FileSystem Module +parent: Modules +permalink: /tB/Modules/FileSystem/ +has_toc: false +--- + +# FileSystem module + +- [ChDir](ChDir) -- changes the current directory or folder + +> [!WARNING] +> Work in Progress Below + +- [ChDrive](ChDrive) +- [CurDir](CurDir) +- [Dir](Dir) +- [MkDir](MkDir) +- [RmDir](RmDir) diff --git a/docs/Reference/Modules/Interaction/AppActivate.md b/docs/Reference/Modules/Interaction/AppActivate.md new file mode 100644 index 00000000..b8cec87b --- /dev/null +++ b/docs/Reference/Modules/Interaction/AppActivate.md @@ -0,0 +1,57 @@ +--- +title: AppActivate +parent: Interaction Module +permalink: /tB/Modules/Interaction/AppActivate +redirect_from: +- /tB/Core/AppActivate +--- +# AppActivate +{: .no_toc } + +Activates an application window. + +Syntax: +- **AppActivate** *title* [ **,** *wait* ] + + title + : *required* A string expression specifying the title in the title bar of the application window you want to activate. + + wait + : *optional* A Boolean value specifying whether the calling application has the focus before activating another. If **False** (default), the specified application is immediately activated, even if the calling application does not have the focus. If **True**, the calling application waits until it has the focus, then activates the specified application. + +- **AppActivate** *taskId* [ **,** *wait ] + + *taskId* + : *required* The task ID returned by the [**Shell**](Shell) function can be used in place of *title* to activate an application. + +The **AppActivate** statement changes the focus to the named application or window but does not affect whether it is maximized or minimized. Focus moves from the activated application window when the user takes some action to change the focus or close the window. Use the [**Shell**](Shell) function to start an application and set the window style. + +In determining which application to activate, *title* is compared to the title string of each running application. If there is no exact match, any application whose title string begins with *title* is activated. If there is more than one instance of the application named by *title*, one instance is arbitrarily activated. + +### See Also + +- [SendKeys](SendKeys) statement +- [Shell](Shell) function + +### Example + +This example illustrates various uses of the **AppActivate** statement to activate an application window. The **Shell** statements assume the applications are in the paths specified. + + +```vb +Dim MyAppID, ReturnValue +AppActivate "Microsoft Word" ' Activate Microsoft + ' Word. + +' AppActivate can also use the return value of the Shell function. +MyAppID = Shell("C:\WORD\WINWORD.EXE", 1) ' Run Microsoft Word. +AppActivate MyAppID ' Activate Microsoft + ' Word. + +' You can also use the return value of the Shell function. +ReturnValue = Shell("c:\EXCEL\EXCEL.EXE",1) ' Run Microsoft Excel. +AppActivate ReturnValue ' Activate Microsoft + ' Excel. +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Modules/Interaction/Beep.md b/docs/Reference/Modules/Interaction/Beep.md new file mode 100644 index 00000000..acec8812 --- /dev/null +++ b/docs/Reference/Modules/Interaction/Beep.md @@ -0,0 +1,28 @@ +--- +title: Beep +parent: Interaction Module +permalink: /tB/Modules/Interaction/Beep +redirect_from: +- /tB/Core/Beep +--- +# Beep +{: .no_toc } + +Sounds a tone through the computer's speaker. + +Syntax: **Beep** + +The frequency and duration of the beep depend on your hardware and system software, and vary among computers. + +### Example + +This example uses the **Beep** statement to sound three consecutive tones through the computer's speaker. + +```vb +Dim I% +For I = 1 To 3 ' Loop 3 times. + Beep ' Sound a tone. +Next I +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Modules/Interaction/index.md b/docs/Reference/Modules/Interaction/index.md new file mode 100644 index 00000000..c1525616 --- /dev/null +++ b/docs/Reference/Modules/Interaction/index.md @@ -0,0 +1,17 @@ +--- +title: Interaction Module +parent: Modules +permalink: /tB/Modules/Interaction/ +has_toc: false +--- + +# Interaction module + +- [AppActivate](AppActivate) -- activates an application window +- [Beep](Beep) -- sounds a tone through the computer's speaker + +> [!WARNING] +> Work in Progress Below + +- [SendKeys](SendKeys) +- [Shell](Shell) diff --git a/docs/Reference/Modules/todo.md b/docs/Reference/Modules/todo.md index 585b5bc5..94ec9fe2 100644 --- a/docs/Reference/Modules/todo.md +++ b/docs/Reference/Modules/todo.md @@ -9,9 +9,14 @@ redirect_from: - /tB/Modules/DateTime - /tB/Modules/ErrObject - /tB/Modules/ExpressionService - - /tB/Modules/FileSystem + - /tB/Modules/FileSystem/ChDrive + - /tB/Modules/FileSystem/CurDir + - /tB/Modules/FileSystem/Dir + - /tB/Modules/FileSystem/MkDir + - /tB/Modules/FileSystem/RmDir - /tB/Modules/Information - - /tB/Modules/Interaction + - /tB/Modules/Interaction/Shell + - /tB/Modules/Interaction/SendKeys - /tB/Modules/TextEncodingConstants - /tB/Modules/_HiddenModule - /tB/Modules/AmbientProperties diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index af7299c8..a2f237db 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -18,7 +18,7 @@ These statements are built into the language itself. They are understood by the * [Class](../tB/Core/Class) -- define a class -* [Close](../tB/Core/Close) +* [Close](../tB/Core/Close) -- concludes input/output (I/O) to a file opened using the **Open** statement * [Const](../tB/Core/Const) From 70f3a32954801d38ee1d2674d742cf06d77efd04 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 15:45:43 +0100 Subject: [PATCH 11/40] Document ChDrive, Const, Continue. --- docs/Reference/Core/Const.md | 72 ++++++++++++++++++++ docs/Reference/Core/Continue.md | 39 +++++++++++ docs/Reference/Core/todo.md | 3 - docs/Reference/Modules/FileSystem/ChDrive.md | 32 +++++++++ docs/Reference/Modules/FileSystem/index.md | 2 +- docs/Reference/Modules/todo.md | 1 - docs/Reference/Statements.md | 4 +- 7 files changed, 146 insertions(+), 7 deletions(-) create mode 100644 docs/Reference/Core/Const.md create mode 100644 docs/Reference/Core/Continue.md create mode 100644 docs/Reference/Modules/FileSystem/ChDrive.md diff --git a/docs/Reference/Core/Const.md b/docs/Reference/Core/Const.md new file mode 100644 index 00000000..fdcd4e51 --- /dev/null +++ b/docs/Reference/Core/Const.md @@ -0,0 +1,72 @@ +--- +title: Const +parent: Statements +permalink: /tB/Core/Const +--- + +# Const + +{: no_toc } + +Declares constants for use in place of literal values. + +Syntax: + +> [ *attributes* ] +> [ **Public** \| **Private** ] **Const** *constname* [ **As** *type* ] **=** *expression* + +*attributes* +: *optional* One or more of: +[Description](Attributes#description) + +**Public** +: *optional* Keyword used at the module level to declare constants that are available to all procedures in all modules. Not allowed in procedures. + +**Private** +: *optional* Keyword used at the class or module level to declare constants that are available only within the class or module where the declaration is made. Not allowed in procedures. + +*constname* + +: Name of the constant; follows standard variable naming conventions. + +*type* + +: *optional* The data type of the constant; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String, or Variant. Use a separate **As** *type* clause for each constant being declared. + +*expression* + +: Required. Literal, other constant, or any combination that includes all arithmetic or logical operators except **Is**. + +Constants are private by default. Within procedures, constants are always private; their visibility can't be changed. In standard modules, the default visibility of module-level constants can be changed by using the **Public** keyword. In class modules, however, constants can only be private and their visibility can't be changed by using the **Public** keyword. + +To combine several constant declarations on the same line, separate each constant assignment with a comma. When constant declarations are combined in this way, the **Public** or **Private** keyword, if used, applies to all of them. + +You can't use variables, user-defined functions, or intrinsic Visual Basic functions (such as **Chr**) in expressions assigned to constants. + +> [!NOTE] +> Constants can make your programs self-documenting and easy to modify. Unlike variables, constants can't be inadvertently changed while your program is running. + +If you don't explicitly declare the constant type by using **As** *type*, the constant has the data type that is most appropriate for *expression*. + +Constants declared in a **Sub**, **Function**, or **Property** procedure are local to that procedure. A constant declared outside a procedure is defined throughout the module in which it is declared. Use constants anywhere you can use an expression. + + +### Example + +This example uses the **Const** statement to declare constants for use in place of literal values. **Public** constants are declared in the General section of a standard module, rather than a class module. **Private** constants are declared in the General section of any type of module. + +```vb +' Constants are Private by default. +Const MyVar = 459 + +' Declare Public constant. +Public Const MyString = "HELP" + +' Declare Private Integer constant. +Private Const MyInt As Integer = 5 + +' Declare multiple constants on same line. +Const MyStr = "Hello", MyDouble As Double = 3.4567 +``` + +{% include VBA-Attribution.md %} diff --git a/docs/Reference/Core/Continue.md b/docs/Reference/Core/Continue.md new file mode 100644 index 00000000..63897829 --- /dev/null +++ b/docs/Reference/Core/Continue.md @@ -0,0 +1,39 @@ +--- +title: Continue +parent: Statements +permalink: /tB/Core/Continue +--- + +# Continue + +{: no_toc } + +Immediately begins the next iteration of the enclosing loop. + +Syntax: **Continue** [ **Do** \| **For** \| **While** ] + +Do + +: Used within a [Do](Do-Loop) loop. + +For + +: Used within a [For](For-Next) loop. + +While + +: Used within a [While](While-Wend) loop + +### Example + +This example uses **Continue For** to skip processing of certain characters of the string. + +```vb +Dim i%, ch$, text$ +For i = 1 To 10 + ch = Mid$(text, i, 1) + If ch = " " Then Continue For + ' Process a non-space character here +Next i +``` + diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index a2458416..d86a0dfd 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -3,10 +3,7 @@ title: TODO List for /tb/Core nav_exclude: true redirect_from: - /tB/Core/Topic-Preprocessor - - /tB/Core/ChDrive - /tB/Core/CoClass - - /tB/Core/Const - - /tB/Core/Continue - /tB/Core/Date - /tB/Core/Declare - /tB/Core/Deftype diff --git a/docs/Reference/Modules/FileSystem/ChDrive.md b/docs/Reference/Modules/FileSystem/ChDrive.md new file mode 100644 index 00000000..699b39b6 --- /dev/null +++ b/docs/Reference/Modules/FileSystem/ChDrive.md @@ -0,0 +1,32 @@ +--- +title: ChDrive +parent: FileSystem Module +permalink: /tB/Modules/FileSystem/ChDrive +redirect_from: +- /tB/Core/ChDrive +--- +# ChDrive +{: .no_toc } + +Changes the current drive. + +Syntax: **ChDrive** *drive* + +drive + +: A string expression that specifies an existing drive. If you supply a zero-length string (""), the current drive doesn't change. If the *drive* argument is a multiple-character string, **ChDrive** uses only the first letter. + +### See Also + +- [ChDir](ChDir), [MkDir](MkDir), and [RmDir](RmDir) statements +- [CurDir](CurDir) function + +### Example + +This example uses the **ChDrive** statement to change the current drive. + +```vb +ChDrive "D" ' Make "D" the current drive. +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Modules/FileSystem/index.md b/docs/Reference/Modules/FileSystem/index.md index 85ba29a7..000d46d0 100644 --- a/docs/Reference/Modules/FileSystem/index.md +++ b/docs/Reference/Modules/FileSystem/index.md @@ -8,11 +8,11 @@ has_toc: false # FileSystem module - [ChDir](ChDir) -- changes the current directory or folder +- [ChDrive](ChDrive) -- changes the current drive > [!WARNING] > Work in Progress Below -- [ChDrive](ChDrive) - [CurDir](CurDir) - [Dir](Dir) - [MkDir](MkDir) diff --git a/docs/Reference/Modules/todo.md b/docs/Reference/Modules/todo.md index 94ec9fe2..6c7ab8cc 100644 --- a/docs/Reference/Modules/todo.md +++ b/docs/Reference/Modules/todo.md @@ -9,7 +9,6 @@ redirect_from: - /tB/Modules/DateTime - /tB/Modules/ErrObject - /tB/Modules/ExpressionService - - /tB/Modules/FileSystem/ChDrive - /tB/Modules/FileSystem/CurDir - /tB/Modules/FileSystem/Dir - /tB/Modules/FileSystem/MkDir diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index a2f237db..4d564ced 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -20,9 +20,9 @@ These statements are built into the language itself. They are understood by the * [Close](../tB/Core/Close) -- concludes input/output (I/O) to a file opened using the **Open** statement -* [Const](../tB/Core/Const) +* [Const](../tB/Core/Const) -- declares constants for use in place of literal values -* [Continue](../tB/Core/Continue) +* [Continue](../tB/Core/Continue) -- immediately begins the next iteration of the enclosing loop * [Declare](../tB/Core/Declare) From 062939d64e48498cf4cefab41785538eec94ee35 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 17:04:37 +0100 Subject: [PATCH 12/40] Document Date. --- .../Documentation Development.md | 4 +- docs/Reference/Core/todo.md | 1 - docs/Reference/Modules/DateTime/Date.md | 114 ++++++++++++++++++ docs/Reference/Modules/DateTime/index.md | 14 +++ docs/Reference/Modules/todo.md | 4 +- 5 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 docs/Reference/Modules/DateTime/Date.md create mode 100644 docs/Reference/Modules/DateTime/index.md diff --git a/docs/Miscellaneous/Documentation Development.md b/docs/Miscellaneous/Documentation Development.md index de3d0beb..f1d0b3e2 100644 --- a/docs/Miscellaneous/Documentation Development.md +++ b/docs/Miscellaneous/Documentation Development.md @@ -39,7 +39,9 @@ The stable, or machine-accessible part of the documentation tree is rooted on th ### /tB/Modules/\#\ -Within each module, the procedures are internal links, e.g. [**LenB**: /tB/Modules/Strings#lenb](../tB/Modules/Strings#lenb). The `$`-suffixed versions have links ending with `-1`, e.g. [**LenB$**: /tB/Modules/Strings#lenb-1](../tB/Modules/Strings#lenb-1). +Within each module, unless indicated otherwise, the procedures and statements are internal links, e.g. [**LenB**: /tB/Modules/Strings#lenb](../tB/Modules/Strings#lenb). The `$`-suffixed versions have reference links ending with `-1`, e.g. [**LenB$**: /tB/Modules/Strings#lenb-1](../tB/Modules/Strings#lenb-1). + +Similarly, when the procedures and statements are stand-alone pages, e.g. [**Date$**: /tB/Modules/DateTime/Date#date-1](../tB/Modules/DateTime/Date#date-1), the `$`-suffixed version has a reference link ending with `-1`. These are modules within VBA and VBRUN: diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index d86a0dfd..f7399953 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -4,7 +4,6 @@ nav_exclude: true redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - - /tB/Core/Date - /tB/Core/Declare - /tB/Core/Deftype - /tB/Core/DeleteSetting diff --git a/docs/Reference/Modules/DateTime/Date.md b/docs/Reference/Modules/DateTime/Date.md new file mode 100644 index 00000000..faa13cd4 --- /dev/null +++ b/docs/Reference/Modules/DateTime/Date.md @@ -0,0 +1,114 @@ +--- +title: Date +parent: DateTime Module +permalink: /tB/Modules/DateTime/Date +redirect_from: +- /tB/Core/Date +--- +# Date +{: .no_toc } +{: #date-top } + +> [!NOTE] +> +> In twinBASIC, **Date** and **Date$** are implemented as module-level properties, not as functions/statements like they were in VBx. This has no impact on their behavior. These properties still have the syntax and semantics of the Date and Date$ functions and statements in VBx. + +## Date Property +{: #date } + +The behavior of the **Date** property is unchanged by the [**Calendar**](Calendar) property setting. + +### Get + +{: #date-get } + +Returns a **Variant** containing the current system date. + +Syntax: **Date** [ **()** ] + +#### Example + +This example uses the **Date** property to return the current system date. + +```vb +Dim MyDate as Variant +MyDate = Date ' MyDate contains the current system date. +``` + +### Let +{: #date-let } + +Sets the current system date from a value with a Variant or Date type. + +Syntax: **Date** **=** *date* + +date + +: For systems running Microsoft Windows 95, the required *date* specification must be a date from January 1, 1980, through December 31, 2099. For systems running Microsoft Windows NT, *date* must be a date from January 1, 1980, through December 31, 2079. For the Macintosh, *date* must be a date from January 1, 1904, through February 5, 2040. + +> [!NOTE] +> +> In some versions of Microsoft Windows, including Windows 10 and 11, setting the system date is a privileged operation that requires the process to have relevant permissions. Without those permissions, assignment to **Date** results in a Permission Denied runtime error. + +#### Example + +This example uses the **Date** property to set the computer system date. In the development environment, the date literal is displayed in short date format by using the locale settings of your code. + +```vb +Dim MyDate As Date +MyDate = #February 12, 1985# ' Assign a date to a variable. +Date= MyDate ' Change system date. +``` + +## Date$ Property +{: #date-1 } + +The behavior of the **Date$** property relies on the [**Calendar**](Calendar) property setting. If the calendar is Hijri, **Date$** returns or accepts a 10-character string of the form *mm-dd-yyyy*, where *mm* (01–12), *dd* (01–30) and *yyyy* (1400–1523) are the Hijri month, day, and year. The equivalent Gregorian range is Jan 1, 1980, through Dec 31, 2099. + +### Get +{: #date-get-1 } + +Returns a **String** containing the current system date. + +Syntax: **Date$** [ **()** ] + +#### Example + +This example uses the **Date** property to return the current system date as a string. + +```vb +Dim MyDate$ +MyDate = Date$ ' MyDate contains the current system date. +``` + +### Let +{: #date-let-1 } + +Sets the current system date from a string. + +Syntax: **Date$** **=** *date* + +date + +: For systems running Microsoft Windows 95, the required *date* specification must be a date from January 1, 1980, through December 31, 2099. For systems running Microsoft Windows NT, *date* must be a date from January 1, 1980, through December 31, 2079. For the Macintosh, *date* must be a date from January 1, 1904, through February 5, 2040. + +> [!NOTE] +> +> In some versions of Microsoft Windows, including Windows 10 and 11, setting the system date is a privileged operation that requires the process to have relevant permissions. Without those permissions, assignment to **Date**$ results in a Permission Denied runtime error. + +#### Example + +This example uses the **Date$** property to set the computer system date. In the development environment, the date literal is displayed in short date format by using the locale settings of your code. + +```vb +Dim MyDate$ +MyDate = "02-12-1985" ' Assign a date to a variable. +Date$ = MyDate ' Change the system date. +``` + +### See Also + +- [Time](Time) property +- [Format](../Strings#format) and [Now](Now) functions + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Modules/DateTime/index.md b/docs/Reference/Modules/DateTime/index.md new file mode 100644 index 00000000..7a60dc23 --- /dev/null +++ b/docs/Reference/Modules/DateTime/index.md @@ -0,0 +1,14 @@ +--- +title: DateTime Module +parent: Modules +permalink: /tB/Modules/DateTime/ +has_toc: false +--- + +# DateTime module + +- [Date](Date) -- + +> [!WARNING] +> Work in Progress Below + diff --git a/docs/Reference/Modules/todo.md b/docs/Reference/Modules/todo.md index 6c7ab8cc..d38fef41 100644 --- a/docs/Reference/Modules/todo.md +++ b/docs/Reference/Modules/todo.md @@ -6,7 +6,9 @@ redirect_from: - /tB/Modules/Compilation - /tB/Modules/Constants - /tB/Modules/Conversion - - /tB/Modules/DateTime + - /tB/Modules/DateTime/Calendar + - /tB/Modules/DateTime/Time + - /tB/Modules/DateTime/Now - /tB/Modules/ErrObject - /tB/Modules/ExpressionService - /tB/Modules/FileSystem/CurDir From 5bb5c2c8b7837471232014cd1c3d58c371ca94f9 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 17:34:34 +0100 Subject: [PATCH 13/40] Document Declare. --- docs/Reference/Core/Declare.md | 133 +++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 +- 3 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/Declare.md diff --git a/docs/Reference/Core/Declare.md b/docs/Reference/Core/Declare.md new file mode 100644 index 00000000..f719a536 --- /dev/null +++ b/docs/Reference/Core/Declare.md @@ -0,0 +1,133 @@ +--- +title: Declare +parent: Statements +permalink: /tB/Core/Declare +--- + +# Declare + +Used at the module level to declare references to external procedures in a dynamic-link library (DLL). + +> [!NOTE] +> +> **Declare** statements with the PtrSafe keyword is the recommended syntax. **Declare** statements that include **PtrSafe** work correctly in twinBASIC and VBA version 7 development environment on both 32-bit and 64-bit platforms only after all data types in the **Declare** statement (parameters and return values) that need to store 64-bit quantities are updated to use LongLong for 64-bit integrals or LongPtr for pointers and handles. To ensure backwards compatibility with VBA version 6 and earlier, use the following construct: + +```vb +#If VBA7 Then +Declare PtrSafe Sub... +#Else +Declare Sub... +#EndIf +``` +> [!NOTE] +> +> For code to run when built for 64-bit targets, all **Declare** statements must include the **PtrSafe** keyword, and all data types in the **Declare** statement (parameters and return values) that need to store 64-bit quantities must be updated to use **LongLong** for 64-bit integrals or **LongPtr** for pointers and handles. + +Syntax: + +- > [ *attributes* ] + > [ **Public** \| **Private** ] **Declare** [ **PtrSafe** ] **Sub** *name* **Lib** "*libname*" [ **(** [ *arglist* ] **)** ] +- > [ *attributes* ] + > [ **Public** \| **Private** ] **Declare** [ **PtrSafe** ] **Sub** *name* **Lib** "*libname*" **Alias** "*aliasname*" [ **(** [ *arglist* ] **)** ] +- > [ *attributes* ] + > [ **Public** \| **Private** ] **Declare** [ **PtrSafe** ] **Function** *name* **Lib** "*libname*" [ **(** [ *arglist* ] **)** ] [ **As** *type* ] +- > [ *attributes* ] + > [ **Public** \| **Private** ] **Declare** [ **PtrSafe** ] **Function** *name* **Lib** "*libname*" **Alias** "*aliasname*" [ **(** [ *arglist* ] **)** ] [ **As** *type* ] + + +*attributes* +: *optional* One or more of: +[Description](Attributes#description), [DLLStackCheck](Attributes#dllstackcheck), [PreserveSig](Attributes#preservesig), [SetDllDirectory](Attributes#setdlldirectory), [UseGetLastError](Attributes#usegetlasterror) + +**Public** +: *optional* Used to declare procedures that are available to all other procedures in all modules. + +**Private** +: *optional* Used to declare procedures that are available only within the module where the declaration is made. + +**PtrSafe** +: *required in 64-bits* The PtrSafe keyword asserts that a Declare statement is safe to run in 64-bit versions of Microsoft Office. + +**Sub / Function** +: Indicates whether the procedure returns a value (**Function**) or not (**Sub**). + +*name* +: Any valid procedure name. Note that DLL entry points are case-sensitive. + +*libname* +: Name of the DLL or code resource that contains the declared procedure. + +**Alias** *aliasname* +: *optional* Indicates that the procedure being called has another name in the DLL. This is useful when the external procedure name is the same as a keyword. You can also use Alias when a DLL procedure has the same name as a public variable, constant, or any other procedure in the same scope. Alias is also useful if any characters in the DLL procedure name aren't allowed by the DLL naming convention. +*aliasname* names the procedure in the DLL or code resource. If the first character is not a number sign (**#**), *aliasname* is the name of the procedure's entry point in the DLL. If (**#**) is the first character, all characters that follow must indicate the ordinal number of the procedure's entry point. + +*arglist* +: *optional* List of variables representing arguments that are passed to the procedure when it is called. + +*type* +: *optional* Data type of the value returned by a **Function** procedure; may be Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (not currently supported), Date, String (variable length only), Variant, a user-defined type (UDT), or an object type. **LongLong** is a valid declared type only on 64-bit platforms. + +### arglist + +The *arglist* argument has the following syntax and parts: + +Syntax: [ **Optional** ] [ **ByVal** \| **ByRef** ] [ **ParamArray** ] *varname* [ **( )** ] [ **As** *type* ] + +**Optional** +: *optional* Indicates that an argument is not required. If used, all subsequent arguments in *arglist* must also be optional and declared by using the **Optional** keyword. **Optional** can't be used for any argument if **ParamArray** is used. + +**ByVal** +: *optional* Indicates that the argument is passed by value. + +**ByRef** +: *optional* Indicates that the argument is passed by reference. **ByRef** is the default unlike in Visual Basic .NET. + +**ParamArray** +: *optional* Used only as the last argument in arglist to indicate that the final argument is an **Optional** array of **Variant** elements. The **ParamArray** keyword allows you to provide an arbitrary number of arguments. The ParamArray keyword can't be used with **ByVal**, **ByRef**, or **Optional**. + +*varname* +: Name of the variable representing the argument being passed to the procedure; follows standard variable naming conventions. + +**( )** +: Required for array variables. Indicates that *varname* is an array. + +*type* +: *optional* Data type of the argument passed to the procedure; may be **Byte**, **Boolean**, **Integer**, **Long**, **LongLong**, **LongPtr**, **Currency**, **Single**, **Double**, **Decimal** (not currently supported), **Date**, **String** (variable length only), **Object**, **Variant**, a user-defined type (UDT), or an object type. (**LongLong** is a valid declared type only on 64-bit platforms.) + +If you include an argument list, the number and type of arguments are checked each time the procedure is called. The First sub in the following example takes one **Long** argument, wherease the Second sub takes no arguments: + +```vb +Declare Sub First Lib "MyLib" (X As Long) +Declare Sub Second Lib "MyLib" () +``` + +> [!NOTE] +> +> - You can't have fixed-length strings in the argument list of a **Declare** statement; only variable-length strings can be passed to procedures. Fixed-length strings can appear as procedure arguments, but they are converted to variable-length strings before being passed. +> - The **vbNullString** constant is used when calling external procedures, where the external procedure requires a string whose value is zero. This is not the same thing as a zero-length string (""). + +### Example + +This example shows how the **Declare** statement is used at the module level of a standard module to declare a reference to an external procedure in a dynamic-link library (DLL). You can place the **Declare** statements in class modules if the **Declare** statements are **Private**. + +```vb +' In 32-bit Microsoft Windows systems, specify the library USER32.DLL. +Declare Sub MessageBeep Lib "User32" (ByVal N As Long) + +' 64-bit Declare statement example: +Declare PtrSafe Function GetActiveWindow Lib "User32" () As LongPtr + +' Conditional Compilation Example +#If Vba7 Then + ' Code is running in 32-bit or 64-bit twinBASIC or VBA7 + #If Win64 Then + ' Code is running in 64-bit twinBASIC or VBA7. + #Else + ' Code is not running in 64-bit twinBASIC or VBA7. + #End If +#Else + ' Code is NOT running in 32-bit or 64-bit twinBASIC or VBA7. +#End If +``` + +{% include VBA-Attribution.md %} diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index f7399953..1180906b 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -4,7 +4,6 @@ nav_exclude: true redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - - /tB/Core/Declare - /tB/Core/Deftype - /tB/Core/DeleteSetting - /tB/Core/Dim diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index 4d564ced..49f6881c 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -24,7 +24,7 @@ These statements are built into the language itself. They are understood by the * [Continue](../tB/Core/Continue) -- immediately begins the next iteration of the enclosing loop -* [Declare](../tB/Core/Declare) +* [Declare](../tB/Core/Declare) -- declares references to external procedures in a dynamic-link library (DLL) * [Dim](../tB/Core/Dim) From a6a92407cc0394e9dcc9618348ce0ed6c7be6f22 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 18:03:14 +0100 Subject: [PATCH 14/40] Document DeleteSetting, GetSetting, SaveSetting. --- docs/Reference/Core/todo.md | 3 -- .../Modules/Interaction/DeleteSetting.md | 44 ++++++++++++++++ .../Modules/Interaction/GetSetting.md | 52 +++++++++++++++++++ .../Modules/Interaction/SaveSetting.md | 49 +++++++++++++++++ docs/Reference/Modules/Interaction/index.md | 3 ++ 5 files changed, 148 insertions(+), 3 deletions(-) create mode 100644 docs/Reference/Modules/Interaction/DeleteSetting.md create mode 100644 docs/Reference/Modules/Interaction/GetSetting.md create mode 100644 docs/Reference/Modules/Interaction/SaveSetting.md diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 1180906b..2074c588 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/DeleteSetting - /tB/Core/Dim - /tB/Core/Do-Loop - /tB/Core/End @@ -18,7 +17,6 @@ redirect_from: - /tB/Core/For-Next - /tB/Core/Function - /tB/Core/Get - - /tB/Core/GetSetting - /tB/Core/GoSub-Return - /tB/Core/GoTo - /tB/Core/If-Then-Else @@ -57,7 +55,6 @@ redirect_from: - /tB/Core/RmDir - /tB/Core/RSet - /tB/Core/SavePicture - - /tB/Core/SaveSetting - /tB/Core/Seek - /tB/Core/Select-Case - /tB/Core/SendKeys diff --git a/docs/Reference/Modules/Interaction/DeleteSetting.md b/docs/Reference/Modules/Interaction/DeleteSetting.md new file mode 100644 index 00000000..6bc4783b --- /dev/null +++ b/docs/Reference/Modules/Interaction/DeleteSetting.md @@ -0,0 +1,44 @@ +--- +title: DeleteSetting +parent: Interaction Module +permalink: /tB/Modules/Interaction/DeleteSetting +redirect_from: +- /tB/Core/DeleteSetting +--- +# DeleteSetting +{: .no_toc } + +Deletes a section or key setting from an application's entry in the Windows registry. + +Syntax: **DeleteSetting** *appname*, *section*, [ *key* ] + +*appname* + +: The name of the application or project whose registry settings are to be deleted. + +*section* + +: *optional* The name of the section within the *appname* entry. If omitted, the entire *appname* section, including all keys within, is deleted. + +*key* + +: *optional* The name of the key to delete within the specified *section*. If omitted, the entire **section** and all keys within are deleted. + +A run-time error occurs if you attempt to use the **DeleteSetting** statement on a non-existent *appname*, *section* or *key*. + +The root of these registry settings is: `Computer\HKEY_CURRENT_USER\Software\VB and VBA Program Settings`. + +## Example + +The following example first uses the [**SaveSetting**](SaveSetting) statement to make entries in the Windows registry for the application, and then uses the **DeleteSetting** statement to remove them. Because no *key* argument is specified, the whole section is deleted, including the section name and all its keys. + +```vb +' Place some settings in the registry. +SaveSetting appname := "MyApp", section := "Startup", _ + key := "Top", setting := 75 +SaveSetting "MyApp", "Startup", "Left", 50 +' Remove section and all its settings from registry. +DeleteSetting "MyApp", "Startup" +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Modules/Interaction/GetSetting.md b/docs/Reference/Modules/Interaction/GetSetting.md new file mode 100644 index 00000000..24021b7d --- /dev/null +++ b/docs/Reference/Modules/Interaction/GetSetting.md @@ -0,0 +1,52 @@ +--- +title: GetSetting +parent: Interaction Module +permalink: /tB/Modules/Interaction/GetSetting +redirect_from: +- /tB/Core/GetSetting +--- + +# GetSetting +{: .no_toc } + +Returns a string key setting value from an application's entry in the Windows registry. + +Syntax: **GetSetting(** *appname* **,** *section* **,** *key* [ **,** *default* ] **)** + +*appname* + +: String expression containing the name of the application or project whose key setting is requested. + +*section* + +: String expression containing the name of the ection where the key setting is found. + +*key* + +: String expression containing the name of the key setting to return. + +*default* + +: *optional* Variant expression containing the value to return if no value is set in the key setting. If omitted, *default* is assumed to be a zero-length string (""). + +If any of the items named in the **GetSetting** arguments don't exist, **GetSetting** returns the value of *default*. + +The root of these registry settings is: `Computer\HKEY_CURRENT_USER\Software\VB and VBA Program Settings`. + +### Example + +This example first uses the [**SaveSetting**](SaveSetting) statement to make entries in the Windows registry for the application specified as *appname*, and then uses the **GetSetting** function to display one of the settings. Because the *default* argument is specified, some value is guaranteed to be returned. Note that *section* names can't be retrieved with **GetSetting**. Finally, the [**DeleteSetting**](DeleteSetting) statement removes all the application's entries. + +```vb +' Variant to hold 2-dimensional array returned by GetSetting. +Dim MySettings As Variant +' Place some settings in the registry. +SaveSetting "MyApp","Startup", "Top", 75 +SaveSetting "MyApp","Startup", "Left", 50 + +Debug.Print GetSetting(appname := "MyApp", section := "Startup", _ + key := "Left", default := "25") + +DeleteSetting "MyApp", "Startup" +``` +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Modules/Interaction/SaveSetting.md b/docs/Reference/Modules/Interaction/SaveSetting.md new file mode 100644 index 00000000..a58b9d18 --- /dev/null +++ b/docs/Reference/Modules/Interaction/SaveSetting.md @@ -0,0 +1,49 @@ +--- +title: SaveSetting +parent: Interaction Module +permalink: /tB/Modules/Interaction/SaveSetting +redirect_from: +- /tB/Core/SaveSetting +--- + +# SaveSetting +{: .no-toc } + +Saves or creates an application entry in the application's entry in the Windows registry. + +Syntax: **SaveSetting** *appname*, *section*, *key*, *setting* + +*appname* + +: String expression containing the name of the application or project to which the setting applies. On the Macintosh, this is the filename of the initialization file in the Preferences folder in the System folder. + +*section* + +: String expression containing the name of the section where the key setting is being saved. + +*key* + +: String expression containing the name of the key setting being saved. + +*setting* + +: String expression containing the value that key is being set to. + +An error occurs if the key setting can't be saved for any reason. + +The root of these registry settings is: `Computer\HKEY_CURRENT_USER\Software\VB and VBA Program Settings`. + +### Example + +The following example first uses the **SaveSetting** statement to make entries in the Windows registry for the application, and then uses the [**DeleteSetting**](DeleteSetting) statement to remove them. + +```vb +' Place some settings in the registry. +SaveSetting appname := "MyApp", section := "Startup", _ + key := "Top", setting := 75 +SaveSetting "MyApp","Startup", "Left", 50 +' Remove section and all its settings from registry. +DeleteSetting "MyApp", "Startup" +``` + +{% include VBA-Attribution.md %} diff --git a/docs/Reference/Modules/Interaction/index.md b/docs/Reference/Modules/Interaction/index.md index c1525616..344b1515 100644 --- a/docs/Reference/Modules/Interaction/index.md +++ b/docs/Reference/Modules/Interaction/index.md @@ -9,6 +9,9 @@ has_toc: false - [AppActivate](AppActivate) -- activates an application window - [Beep](Beep) -- sounds a tone through the computer's speaker +- [DeleteSetting](DeleteSetting) -- deletes a section or key setting from an application's entry in the Windows registry +- [GetSetting](GetSetting) -- returns a key setting value from an application's entry in the Windows registry +- [SaveSetting](SaveSetting) -- saves or creates an application entry in the application's entry in the Windows registry > [!WARNING] > Work in Progress Below From f0cb0b2720333bdfd2cb538e23d6b8316cf52868 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 18:50:18 +0100 Subject: [PATCH 15/40] Document Dim. --- docs/Reference/Core/Dim.md | 93 ++++++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 +- 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/Dim.md diff --git a/docs/Reference/Core/Dim.md b/docs/Reference/Core/Dim.md new file mode 100644 index 00000000..4a404f1b --- /dev/null +++ b/docs/Reference/Core/Dim.md @@ -0,0 +1,93 @@ +--- +title: Dim +parent: Statements +permalink: /tB/Core/Dim +--- + +# Dim +{: no_toc } + +Declares variables and allocates storage space. + +Syntax: **Dim** [ **WithEvents** ] *varname* [ **(** [ *subscripts* ] **)** ] [ **As** [ **New** ] *type* ] [ **,** [ **WithEvents** ] *varname* [ **(** [ *subscripts* ] **)** ] [ **As** [ **New** ] *type* ]] **. . .** + +**WithEvents** + +: *optional* Keyword that specifies that *varname* is an object variable used to respond to events triggered by an ActiveX object. **WithEvents** is valid only in class modules. You can declare as many individual variables as you like by using **WithEvents**, but you can't create arrays with **WithEvents**. You can't use **New** with **WithEvents**. + +*varname* + +: Name of the variable; follows standard variable naming conventions. + +*subscripts* + +: *optional* Dimensions of an array variable; up to 60 multiple dimensions may be declared. The *subscripts* argument uses the following syntax: [ *lower* **To** ] *upper* [ , [ *lower* **To** ] *upper* ] **. . .**. When not explicitly stated in *lower*, the lower bound of an array is controlled by the [**Option Base**](Option#Base) statement. The lower bound is zero if no **Option Base** statement is present. + +**New** + +: *optional* Keyword that enables implicit creation of an object. If you use **New** when declaring the object variable, a new instance of the object is created on first reference to it, so you don't have to use the **Set** statement to assign the object reference. The **New** keyword can't be used to declare variables of any intrinsic data type or to declare instances of dependent objects, and it can't be used with **WithEvents**. + +*type* + +: *optional*. Data type of the variable; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (for variable-length strings), **String** *length* (for fixed-length strings), Object, Variant, a user-defined type (UDT), or an object type. Use a separate **As** *type* clause for each variable you declare. + +Variables declared with **Dim** at the module level are available to all procedures within the module. At the procedure level, variables are available only within the procedure. + +Use the **Dim** statement at the module or procedure level to declare the data type of a variable. For example, the following statement declares a variable as an **Integer**. + +```vb +Dim NumberOfEmployees As Integer +``` + +Also use a **Dim** statement to declare the object type of a variable. The following declares a variable for a new instance of a worksheet. + +```vb +Dim X As New Worksheet +``` + +If the **New** keyword is not used when declaring an object variable, the variable that refers to the object must be assigned an existing object by using the **Set** statement before it can be used. Until it is assigned an object, the declared object variable has the special value **Nothing**, which indicates that it doesn't refer to any particular instance of an object. + +You can also use the **Dim** statement with empty parentheses to declare a dynamic array. After declaring a dynamic array, use the [**ReDim**](ReDim) statement within a procedure to define the number of dimensions and elements in the array. If you try to redeclare a dimension for an array variable whose size was explicitly specified in a [**Private**](Private), [**Public**](Public), or **Dim** statement, an error occurs. + +If you don't specify a data type or object type, and there is no [**Deftype**](Deftype) statement in the module, the variable is **Variant** by default. When variables are initialized, a numeric variable is initialized to 0, a variable-length string is initialized to a zero-length string (""), and a fixed-length string is filled with zeros. **Variant** variables are initialized to Empty. Each element of a user-defined type variable is initialized as if it were a separate variable. + +> [!NOTE] +> +> When you use the **Dim** statement in a procedure, you generally put the **Dim** statement at the beginning of the procedure. + +### Example + +This example shows the **Dim** statement used to declare variables. It also shows the **Dim** statement used to declare arrays. The default lower bound for array subscripts is 0 and can be overridden at the module level by using the **Option Base** statement. + +```vb +' AnyValue and MyValue are declared as Variant by default with values +' set to Empty. +Dim AnyValue, MyValue + +' Explicitly declare a variable of type Integer. +Dim Number As Integer + +' Multiple declarations on a single line. AnotherVar is of type Variant +' because its type is omitted. +Dim AnotherVar, Choice As Boolean, BirthDate As Date + +' DayArray is an array of Variants with 51 elements indexed, from +' 0 thru 50, assuming Option Base is set to 0 (default) for +' the current module. +Dim DayArray(50) + +' Matrix is a two-dimensional array of integers. +Dim Matrix(3, 4)As Integer + +' MyMatrix is a three-dimensional array of doubles with explicit +' bounds. +Dim MyMatrix(1 To 5, 4 To 9, 3 To 5)As Double + +' BirthDay is an array of dates with indexes from 1 to 10. +Dim BirthDay(1 To 10)As Date + +' MyArray is a dynamic array of variants. +Dim MyArray() +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 2074c588..8b12ee09 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/Dim - /tB/Core/Do-Loop - /tB/Core/End - /tB/Core/Enum diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index 49f6881c..a13f8fae 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -26,7 +26,7 @@ These statements are built into the language itself. They are understood by the * [Declare](../tB/Core/Declare) -- declares references to external procedures in a dynamic-link library (DLL) -* [Dim](../tB/Core/Dim) +* [Dim](../tB/Core/Dim) -- declares variables and allocates storage space * [Do ... Loop](../tB/Core/Do-Loop) From 91d2015a9112d0466957b8dce39ec494760f672c Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 19:02:36 +0100 Subject: [PATCH 16/40] Document Do...Loop. --- docs/Reference/Core/Do-Loop.md | 140 +++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 +- 3 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/Do-Loop.md diff --git a/docs/Reference/Core/Do-Loop.md b/docs/Reference/Core/Do-Loop.md new file mode 100644 index 00000000..ee9a0330 --- /dev/null +++ b/docs/Reference/Core/Do-Loop.md @@ -0,0 +1,140 @@ +--- +title: Do...Loop +parent: Statements +permalink: /tB/Core/Do-Loop +--- + +# Do...Loop +{: .no_toc } + +Repeats a block of statements while a condition is **True** or until a condition becomes **True**. + +Syntax: +- > **Do** [{ **While** \| **Until** } *condition* ] + >     [ *statements* ] + >     [ **Exit Do** \| **Continue Do** ] + >     [ *statements* ] ... + > **Loop** +- > **Do** + >     [ *statements* ] + >     [ **Exit Do** \| **Continue Do** ] + >     [ *statements* ] ... + > **Loop** [{ **While** \| **Until** } *condition* ] + +*condition* +: *optional* Numeric expression or string expression that is **True** or **False**. If *condition* is Null, *condition* is treated as **False**. + +*statements* +: One or more statements that are repeated while, or until, *condition* is **True**. + +Any number of [**Exit Do**](Exit) statements may be placed anywhere in the **Do…Loop** as an alternate way to exit a **Do…Loop**. **Exit Do** is often used after evaluating some condition, for example, **If…Then**, in which case the **Exit Do** statement transfers control to the statement immediately following the **Loop**. + +When used within nested **Do…Loop** statements, **Exit Do** transfers control to the loop that is one nested level above the loop where **Exit Do** occurs. + +Any number of [**Continue Do**](Continue) statements may be placed anywhere in the **Do…Loop** to skip the rest of the statements and proceed with a new iteration. + +### Example + +This example shows how **Do...Loop** statements can be used. The inner **Do...Loop** statement loops 10 times, asks the user if it should keep going, sets the value of the flag to **False** when they select **No**, and exits prematurely by using the **Exit Do** statement. The outer loop exits immediately upon checking the value of the flag. + +```vb +Public Sub LoopExample() + Dim Check As Boolean, Counter As Long, Total As Long + Check = True: Counter = 0: Total = 0 ' Initialize variables. + Do ' Outer loop. + Do While Counter < 20 ' Inner Loop + Counter = Counter + 1 ' Increment Counter. + If Counter Mod 10 = 0 Then ' Check in with the user on every multiple of 10. + Check = (MsgBox("Keep going?", vbYesNo) = vbYes) ' Stop when user click's on No + If Not Check Then Exit Do ' Exit inner loop. + End If + Loop + Total = Total + Counter ' Exit Do Lands here. + Counter = 0 + Loop Until Check = False ' Exit outer loop immediately. + MsgBox "Counted to: " & Total +End Sub +``` + +## Using Do...Loop statements + +Use **Do...Loop** statements to run a block of statements an indefinite number of times. The statements are repeated either while a condition is **True** or until a condition becomes **True**. + +### Repeating statements while a condition is True + +There are two ways to use the **While** keyword to check a condition in a **Do...Loop** statement. You can check the condition before you enter the loop, or you can check it after the loop has run at least once. + +In the following `ChkFirstWhile` procedure, you check the condition before you enter the loop. If `myNum` is set to 9 instead of 20, the statements inside the loop will never run. In the `ChkLastWhile` procedure, the statements inside the loop run only once before the condition becomes **False**. + +```vb +Sub ChkFirstWhile() + counter = 0 + myNum = 20 + Do While myNum > 10 + myNum = myNum - 1 + counter = counter + 1 + Loop + MsgBox "The loop made " & counter & " repetitions." +End Sub + +Sub ChkLastWhile() + counter = 0 + myNum = 9 + Do + myNum = myNum - 1 + counter = counter + 1 + Loop While myNum > 10 + MsgBox "The loop made " & counter & " repetitions." +End Sub +``` + +### Repeating statements until a condition becomes True + +There are two ways to use the **Until** keyword to check a condition in a **Do...Loop** statement. You can check the condition before you enter the loop (as shown in the `ChkFirstUntil` procedure), or you can check it after the loop has run at least once (as shown in the `ChkLastUntil` procedure). Looping continues while the condition remains **False**. + +```vb +Sub ChkFirstUntil() + counter = 0 + myNum = 20 + Do Until myNum = 10 + myNum = myNum - 1 + counter = counter + 1 + Loop + MsgBox "The loop made " & counter & " repetitions." +End Sub + +Sub ChkLastUntil() + counter = 0 + myNum = 1 + Do + myNum = myNum + 1 + counter = counter + 1 + Loop Until myNum = 10 + MsgBox "The loop made " & counter & " repetitions." +End Sub +``` + +### Exiting a Do...Loop statement from inside the loop + +You can exit a **Do...Loop** by using the [**Exit Do**](Exit) statement. For example, to exit an endless loop, use the **Exit Do** statement in the **True** statement block of either an [**If...Then...Else**](If-Then-Else) statement or a [**Select Case**](Select-Case) statement. If the condition is **False**, the loop will run as usual. + +In the following example `myNum` is assigned a value that creates an endless loop. The **If...Then...Else** statement checks for this condition, and then exits, preventing endless looping. + +```vb +Sub ExitExample() + counter = 0 + myNum = 9 + Do Until myNum = 10 + myNum = myNum - 1 + counter = counter + 1 + If myNum < 10 Then Exit Do + Loop + MsgBox "The loop made " & counter & " repetitions." +End Sub +``` + +> [!NOTE] +> +> To stop an endless loop, press ESC or CTRL+BREAK. + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 8b12ee09..18168f12 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/Do-Loop - /tB/Core/End - /tB/Core/Enum - /tB/Core/Erase diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index a13f8fae..de1c386e 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -28,7 +28,7 @@ These statements are built into the language itself. They are understood by the * [Dim](../tB/Core/Dim) -- declares variables and allocates storage space -* [Do ... Loop](../tB/Core/Do-Loop) +* [Do ... Loop](../tB/Core/Do-Loop) -- repeats a block of statements while a condition is **True** or until a condition becomes **True** * [End](../tB/Core/End) From 1212ab7933106f46f15edf6e08fd576563bd1aee Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 19:13:40 +0100 Subject: [PATCH 17/40] Document End. --- docs/Reference/Core/End.md | 62 ++++++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 +- 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/End.md diff --git a/docs/Reference/Core/End.md b/docs/Reference/Core/End.md new file mode 100644 index 00000000..13081047 --- /dev/null +++ b/docs/Reference/Core/End.md @@ -0,0 +1,62 @@ +--- +title: End +parent: Statements +permalink: /tB/Core/End +--- + +# End +{: .no_toc } + +Ends a procedure or block. + +Syntax: + +- **End** + Terminates execution immediately. Never required by itself but may be placed anywhere in a procedure to end code execution, close files opened with the [**Open**](Open) statement, and to clear variables. + +- **End Function** + Required to end a [**Function**](Function) statement. + +- **End If** + Required to end a block [**If...Then...Else**](If-Then-Else) statement. + +- **End Property** + Required to end a [**Property Get**](Property), [**Property Let**](Property), and [**Property Set**](Property) procedure. + +- **End Select** + Required to end a [**Select Case**](Select-Case) statement. + +- **End Sub** + Required to end a [**Sub**](Sub) statement. + +- **End Type** + Required to end a user-defined type (UDT) definition ([**Type**](Type) statement). + +- **End With** + Required to end a [**With**](With) statement. + +When executed, the **End** statement resets all module-level variables and all static local variables in all modules. To preserve the value of these variables, use the [**Stop**](Stop) statement instead. You can then resume execution while preserving the value of those variables. + +> [!NOTE] +> +> The **End** statement stops code execution abruptly, without invoking the Unload, QueryUnload, or Terminate event, or any other Visual Basic code. Code you have placed in the Unload, QueryUnload, and Terminate events of forms and class modules is not executed. Objects created from class modules are destroyed, files opened by using the **Open** statement are closed, and memory used by your program is freed. Object references held by other programs are invalidated. + +The **End** statement provides a way to force your program to halt. For normal termination of a Visual Basic program, you should unload all forms. Your program closes as soon as there are no other programs holding references to objects created from your public class modules and no code executing. + +### Example + +This example uses the **End** statement to end code execution if the user enters an invalid password. + +```vb +Sub Form_Load + Dim Password, Pword + PassWord = "Swordfish" + Pword = InputBox("Type in your password") + If Pword <> PassWord Then + MsgBox "Sorry, incorrect password" + End + End If +End Sub +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 18168f12..9dfbeb85 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/End - /tB/Core/Enum - /tB/Core/Erase - /tB/Core/Error diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index de1c386e..005d50b5 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -30,7 +30,7 @@ These statements are built into the language itself. They are understood by the * [Do ... Loop](../tB/Core/Do-Loop) -- repeats a block of statements while a condition is **True** or until a condition becomes **True** -* [End](../tB/Core/End) +* [End](../tB/Core/End) -- ends a procedure or block * [Enum](../tB/Core/Enum) From 8b05fc7adb810ee7b44886868c2fc20a12f1a64d Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 19:29:03 +0100 Subject: [PATCH 18/40] Get rid of redundant anchors in Attributes. --- docs/Reference/Attributes.md | 53 ------------------------------------ 1 file changed, 53 deletions(-) diff --git a/docs/Reference/Attributes.md b/docs/Reference/Attributes.md index f0980ed1..a82a6085 100644 --- a/docs/Reference/Attributes.md +++ b/docs/Reference/Attributes.md @@ -28,7 +28,6 @@ The available attributes are listed below in alphabetic order. Not every attribu --- ## AppObject (optional Bool) - {: #appobject } Syntax: **[AppObject** [ **( True** \| **False )** ] **]** @@ -42,7 +41,6 @@ Indicates the class is part of the global namespace. You should not include this For more details, see [this VBA documentation page](https://learn.microsoft.com/en-us/openspecs/microsoft_general_purpose_programming_languages/ms-vbal/189fb41b-cc3a-4999-a6d2-ba89f72d2870). ## ArrayBoundsChecks (optional Bool) - {: #arrayboundschecks } Syntax: **[ArrayBoundsChecks** [ **( True** \| **False )** ] **]** @@ -52,7 +50,6 @@ Applicable to: [**Class**](Class), [**Module**](Module), [procedure](../Gloss#pr Disables or enables array element access bounds checking within the scope of a class, module, or a single procedure/method. Used on performance-critical routines. ## BindOnlyIfNoArguments (optional Bool) - {: #bindonlyifnoarguments } Syntax: **[BindOnlyIfNoArguments** [ **( True** \| **False )** ] **]** @@ -64,7 +61,6 @@ Only binds this name to a callsite when no arguments are present. Normally false This attribute resolves the cases where compiler's special treatment of certain procedure names conflicts with a procedure of the same name that shouldn't be treated specially. This currently affects procedures named `Left`. Such procedures get an implicit `[BindOnlyIfNoArguments(True)]` assigned by the compiler. If the user wants to have a procedure of this name, it should include `[BindOnlyIfNoArguments(False)]`. ## BindOnlyIfStringSuffix (optional Bool) - {: #bindonlyifstringsuffix } Syntax: **[BindOnlyIfStringSuffix** [ **( True** \| **False )** ] **]** @@ -72,7 +68,6 @@ Syntax: **[BindOnlyIfStringSuffix** [ **( True** \| **False )** ] **]** Applicable to: [procedure](../Gloss#procedure) ## ClassId (String) - {: #classid } Syntax: **[ClassId("** 00000000-0000-0000-0000-000000000000 **")]** @@ -82,7 +77,6 @@ Applicable to: [**Class**](Class) Assigns a COM CLSID to a class. For details, [see this COM documentation page](https://learn.microsoft.com/en-us/windows/win32/com/com-class-objects-and-clsids). ## CoClassCustomConstructor (String) - {: #coclasscustomconstructor } Syntax: **[CoClassCustomConstructor("** fully qualified path to factory method **")]** @@ -105,7 +99,6 @@ End CoClass For an overview of coclasses in tB, see [Defining coclasses](../../Features/Overview#defining-coclasses). ## CoClassId (String) - {: #coclassid } Syntax: **[CoClassId("** 00000000-0000-0000-0000-000000000000 **")]** @@ -129,7 +122,6 @@ The methods are [procedures](../Gloss#procedure). For an overview of coclasses in tB, see [Defining coclasses](../../Features/Overview#defining-coclasses). ## COMControl (optional Bool) - {: #comcontrol } Syntax: **[COMControl** [ **( True** \| **False )** ] **]** @@ -137,7 +129,6 @@ Syntax: **[COMControl** [ **( True** \| **False )** ] **]** Applicable to: [**Interface**](Interface) ## COMCreatable (optional Bool) - {: #comcreatable } Syntax: **[COMCreatable** [ **( True** \| **False )** ] **]** @@ -147,7 +138,6 @@ Applicable to: [**Class**](Class), [**CoClass**](CoClass) Indicates that this coclass can be created with the [**New**](New) keyword. ## COMExtensible (optional Bool) - {: #comextensible } Syntax: **[COMExtensible** [ **( True** \| **False )** ] **]** @@ -157,7 +147,6 @@ Applicable to: [**Interface**](Interface), [procedure in an Interface](../Gloss# Specifies whether new members added at runtime can be called by name through an interface implementing **IDispatch**. This attribute is set to **False** by default. ## ComImport (optional Bool) - {: #comimport } Syntax: **[ComImport** [ **( True** \| **False )** ] **]** @@ -167,7 +156,6 @@ Applicable to: [**Interface**](Interface) Specifies that an interface is an import from an external COM library, for instance, the Windows shell. ## CompileIf (Bool) - {: #compileif } Syntax: **[CompileIf(** condition **)]** @@ -177,7 +165,6 @@ Applicable to: [procedure definitions](../Gloss#procedure) Controls the conditional compilation of a procedure definition. Has no default value. ## CompilerOptions (String) - {: #compileroptions } Syntax: **[CompilerOptions( "** options **" )]** @@ -192,7 +179,6 @@ Typical use would be `[CompilerOptions("+llvm,+optimize,+optimizesize")]` ⁠to - **+optimizespeed** - optimize this procedure for fast speed, potentially at the expense of larger code size post-compilation ## ConstantFoldable (optional Bool) - {: #constantfoldable } Syntax: **[ConstantFoldable** [ **( True** \| **False )** ] **]** @@ -202,7 +188,6 @@ Applicable to: [**Function**](Function) Specify this attribute for functions where when called with non-variable input, will be computed at compile time, rather than runtime. For example, a function to converted string literals to ANSI. The result would never change, so the resulting ANSI string is stored, rather than recomputing every run. Such functions are also called *pure functions*, because their output only depends on the arguments, and not on the state of the program. ## ConstantFoldableNumericsOnly (optional Bool) - {: #constantfoldablenumericsonly } Syntax: **[ConstantFoldableNumericsOnly** [ **( True** \| **False )** ] **]** @@ -212,7 +197,6 @@ Applicable to: [**Function**](Function) A limited case of [constant foldable attribute](#constantfoldable), which applies only if the function was called with a numeric parameter. ## CustomControl (String) - {: #customcontrol } Syntax: **[Description("** image file name **")]** @@ -220,7 +204,6 @@ Syntax: **[Description("** image file name **")]** Applicable to: [**Class**](Class) ## Debuggable (optional Bool) - {: #debuggable } Syntax: **[Debuggable** [ **( True** \| **False )** ] **]** @@ -230,7 +213,6 @@ Applicable to: [**Module**](Module), [procedure in a Class or Module](../Gloss#p When false, turns of breakpoints and stepping for the method or module. The default value is **True**. ## DebugOnly (optional Bool) - {: #debugonly } Syntax: **[DebugOnly** [ **( True** \| **False )** ] **]** @@ -249,7 +231,6 @@ Applicable to: [**Class**](Class), [**CoClass**](CoClass), [**Const**](Const), [ Provides a description in information popups in the IDE, and is exported as a `helpstring` attribute in the type library (if applicable). ## DispId (Integer) - {: #dispid } Syntax: **[DispId(** 123 **)]** @@ -259,7 +240,6 @@ Applicable to: [procedure in an Interface](../Gloss#procedure) Defines a dispatch ID associated with the procedure. ## DllExport (optional Bool) - {: #dllexport } Syntax: **[DllExport** [ **( True** \| **False )** ] **]** @@ -274,7 +254,6 @@ Public Const MyExportedSymbol As Long = &H00000001 ``` ## DLLStackCheck (optional Bool) - {: #dllstackcheck } Syntax: **[DLLStackCheck** [ **( True** \| **False)** ] **]** @@ -284,7 +263,6 @@ Applicable to: [**Declare** (API declaration)](Declare) Gives minor codegen size reduction on 32-bit API calls on the Intel platform. Has no effect on other platforms. ## EnforceErrors (optional Bool) - {: #enforceerrors } Syntax: **[EnforceErrors** [ **( True** \| **False )** ] **]** @@ -292,7 +270,6 @@ Syntax: **[EnforceErrors** [ **( True** \| **False )** ] **]** Applicable to: [procedures](../Gloss#procedure). ## EnforceWarnings (optional Bool) - {: #enforcewarnings } Syntax: **[EnforceWarnings** [ **( True** \| **False )** ] **]** @@ -300,7 +277,6 @@ Syntax: **[EnforceWarnings** [ **( True** \| **False )** ] **]** Applicable to: [procedures](../Gloss#procedure). ## EnumId (String) - {: #enumid } Syntax: **[EnumId("** 00000000-0000-0000-0000-000000000000 **")]** @@ -310,19 +286,16 @@ Applicable to: [**Enum**](Enum) Specifies a GUID to be associated with an enum in type libraries. ## EventInterfaceId (String) - {: #eventinterfaceid } Syntax: **[EventInterfaceId("** 00000000-0000-0000-0000-000000000000 **")]** ## EventsUseDispInterface (optional Bool) - {: #eventsusedispinterface } Syntax: **[EventsUseDispInterface** [ **( True** \| **False )** ] **]** ## Flags (optional Bool) - {: #flags } Syntax: **[Flags** [ **( True** \| **False )** ] **]** @@ -337,7 +310,6 @@ Calculate implicit enum values as a flag set (powers of 2). ![image](Images/flags attribute.png) ## FloatingPointErrorChecks (optional Bool) - {: #floatingpointerrorchecks } Syntax: **[FloatingPointErrorChecks** [ **( True** \| **False)** ] **]** @@ -347,7 +319,6 @@ Applicable to: [**Class**](Class), [**Module**](Module), [procedure](../Gloss#pr Disables floating point error checks. Used on performance-critical routines. The default value is **True**. ## FormDesignerId (String) - {: #formdesignerid } Syntax: **[FormDesignerId("** 00000000-0000-0000-0000-000000000000 **")]** @@ -355,7 +326,6 @@ Syntax: **[FormDesignerId("** 00000000-0000-0000-0000-000000000000 **")]** Applicable to: [**Class**](Class) ## Hidden (optional Bool) - {: #hidden } Syntax: **[Hidden** [ **(** **True** \| **False** **)** ] **]** @@ -365,7 +335,6 @@ Applicable to: [**Class**](Class), [**CoClass**](CoClass), [**Interface**](Inter Hides the interface or class from certain Intellisense and other lists. ## IdeButton (String) - {: #idebutton } Syntax: **[IdeButton("** caption **")]** @@ -373,13 +342,11 @@ Syntax: **[IdeButton("** caption **")]** Applicable to: [procedure](../Gloss#procedure) definition in a module. ## IgnoreWarnings (optional Bool) - {: #ignorewarnings } Syntax: **[IgnoreWarnings** [ **( True** \| **False )** ] **]** ## IntegerOverflowChecks (optional Bool) - {: #integeroverflowchecks } Syntax: **[IntegerOverflowChecks** [ **( True** \| **False )** ] **]** @@ -389,7 +356,6 @@ Applicable to: [**Class**](Class), [**Module**](Module), [procedure](../Gloss#pr Disables integer overflow checks. Used on performance-critical routines. The default value is **True**. ## InterfaceId (String) - {: #interfaceid } Syntax: **[InterfaceId( "**00000000-0000-0000-0000-000000000000**" )]** @@ -415,7 +381,6 @@ The methods are [procedures](../Gloss#procedure). For an overview of interfaces in tB, see [Defining interfaces](../../Features/Overview#defining-interfaces). ## MustBeQualified (optional Bool) - {: #mustbequalified } Syntax: **[MustBeQualified** [ **(True** \| **False )** ] **]** @@ -423,7 +388,6 @@ Syntax: **[MustBeQualified** [ **(True** \| **False )** ] **]** Applicable to: [procedure](../Gloss#procedure) ## OleAutomation (optional Bool) - {: #oleautomation } Syntax: **[OleAutomation** [ **(True** \| **False )** ] **]** @@ -433,7 +397,6 @@ Applicable to: [**Interface**](Interface) Controls whether this attribute is applied in the typelibrary. This attribute is set to **True** by default. ## PackingAlignment (Integer) - {: #packingalignment } Syntax: **[PackingAlignment( 1** \| **2** \| **4** \| **8** \| **16** \| **32** \| **64 )]** @@ -441,7 +404,6 @@ Syntax: **[PackingAlignment( 1** \| **2** \| **4** \| **8** \| **16** \| **32** Applicable to: [**Type** (UDT)](Type) ## PopulateFrom (...) - {: #populatefrom } Syntax: **[PopulateFrom( "json", "**internal path to .json**", "** table field **", "** name field **", "** value field **" )]** @@ -486,7 +448,6 @@ End Enum ``` ## PredeclaredID (optional Bool) - {: #predeclaredid } Syntax: **[PredeclaredId** [ **( True** \| **False )** ] **]** @@ -498,7 +459,6 @@ When set, a global instance of the class is created when the application starts. This attribute is equivalent to the `VB_PredeclaredId` attribute in VBx .cls files. ## PreserveSig (optional Bool) - {: #preservesig } Syntax: **[PreserveSig** [ **(** **True** \| **False** **)** ] **]** @@ -523,7 +483,6 @@ Public Declare PtrSafe Function SHGetDesktopFolder Lib "shell32" () As IShellFol ``` ## Restricted (optional Bool) - {: #restricted } Syntax: **[Restricted** [ **( True** \| **False )** ] **]** @@ -537,7 +496,6 @@ This is attribute has the same function as the [**restricted** MIDL attribute][M [MIDL restricted]: https://learn.microsoft.com/en-us/windows/win32/midl/restricted ## RunAfterBuild (optional Bool) - {: #runafterbuild } Syntax: **[RunAfterBuild** [ **( True** \| **False )** ] **]** @@ -547,7 +505,6 @@ Applicable to: [**Function**](Function), [**Sub**](Sub) Specifies a function that runs after your exe is built. Tthere's `App.LastBuildPath` to know where it is if you're e.g. signing the executable. ## Serialize (optional Bool) - {: #serialize } Syntax: **[Serialize** [ **( True** \| **False )** ] **]** @@ -555,7 +512,6 @@ Syntax: **[Serialize** [ **( True** \| **False )** ] **]** Applicable to: variables in a [**Class**](Class) ## SetDllDirectory (optional Bool) - {: #setdlldirectory } Syntax: **[SetDllDirectory** [ **( True** \| **False )** ] **]** @@ -565,7 +521,6 @@ Applicable to: [**Declare** (API declaration)](Declare), [**Module**](Module) Allows an explicitly loaded DLL to load its own dependencies from it's load path. Also has the effect of allowing searching the app path for the DLLs in the base app's declare statements. It can be used per-declare or within a module. ## SimplerByVals (optional Bool) - {: #simplerbyvals } Syntax: **[SimplerByVals** [ **( True** \| **False )** ] **]** @@ -573,13 +528,11 @@ Syntax: **[SimplerByVals** [ **( True** \| **False )** ] **]** Applicable to: [procedure](../Gloss#procedure) ## SpecialCompilerBinding (optional Bool) - {: #specialcompilerbinding } Syntax: **[SpecialCompilerBinding** [ **( True** \| **False )** ] **]** ## TestCase (optional Bool) - {: #testcase } Syntax: **[TestCase** [ **( True** \| **False )** ] **]** @@ -587,7 +540,6 @@ Syntax: **[TestCase** [ **( True** \| **False )** ] **]** Applicable to: [procedure](../Gloss#procedure) definition in a module. ## TestFixture (optional Bool) - {: #testfixture } Syntax: **[TestFixture **[ **( True** \| **False )** ] **]** @@ -595,7 +547,6 @@ Syntax: **[TestFixture **[ **( True** \| **False )** ] **]** Applicable to: [**Module**](Module) ## TypeHint (EnumType) - {: #typehint } Syntax: **[TypeHint(** an enum type **)]** @@ -605,7 +556,6 @@ Applicable to: [procedure](../Gloss#procedure) parameters Allows populating Intellisense with an enum for types other than **Long**. ## Unimplemented (optional Bool) - {: #unimplemented } Syntax: **[Unimplemented** [ **( True** \| **False )** ] **]** @@ -615,7 +565,6 @@ Applicable to: [procedure](../Gloss#procedure) definitions Makes the compiler issue a warning about the procedure being unimplemented wherever it's called. You can upgrade it to an error too. ## UseGetLastError (optional Bool) - {: #usegetlasterror } Syntax: **[UseGetLastError** [ **( True** \| **False )** ] **]** @@ -625,7 +574,6 @@ Applicable to: [**Declare** (API declaration)](Declare) If the declared function indicates an error condition, the compiler won't automatically call `GetLastError` to retrieve the error code. The default value of this attribute is **True**, i.e. Declare-d functions are assumed to set `LastError` upon error. ## UserDefinedTypeIsAnAlias (optional Bool) - {: #userdefinedtypeisanalias } Syntax: **[UserDefinedTypeIsAnAlias** [ **( True** \| **False )** ] **]** @@ -633,7 +581,6 @@ Syntax: **[UserDefinedTypeIsAnAlias** [ **( True** \| **False )** ] **]** Applicable to: [**Type** (UDT)](Type) ## WindowsControl (optional Bool) - {: #windowscontrol } Syntax: **[WindowsControl** [ **( True** \| **False )** ] **]** From dd7b80575d682b7995efacc180a88a2fb6f23b4e Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 19:32:29 +0100 Subject: [PATCH 19/40] Document Enum. --- docs/Reference/Core/Enum.md | 72 ++++++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 +- 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/Enum.md diff --git a/docs/Reference/Core/Enum.md b/docs/Reference/Core/Enum.md new file mode 100644 index 00000000..af59299b --- /dev/null +++ b/docs/Reference/Core/Enum.md @@ -0,0 +1,72 @@ +--- +title: Enum +parent: Statements +permalink: /tB/Core/Enum +--- + +# Enum +{: .no_toc } + +Declares a type for an enumeration. + +Syntax: + +> [ *attributes* ] +> [ **Public** | **Private** ] **Enum** *name* +>     *membername* [**=** *constantexpression* ] +>     *membername* [**=** *constantexpression* ] . . . +> **End Enum** + +*attributes* +: *optional* One or more of: +[EnumId](Attributes#enumid), [Flags](Attributes#flags), [PopulateFrom](Attributes#populatefrom) + +**Public** +: *optional* Specifies that the **Enum** type is visible throughout the project. **Enum** types are **Public** by default. + +**Private** +: *optional* Specifies that the **Enum** type is visible only within the module in which it appears. + +*name* +: The name of the **Enum** type. The *name* must be a valid Visual Basic identifier and is specified as the type when declaring variables or parameters of the **Enum** type. + +*membername* +: A valid Visual Basic identifier specifying the name by which a constituent element of the **Enum** type will be known. + +*constantexpression* +: *optional* Value of the element (evaluates to a **Long**). If no *constantexpression* is specified, the value assigned is either zero (if it is the first *membername* ), or 1 greater than the value of the immediately preceding *membername*. + +Enumeration variables are variables declared with an **Enum** type. Both variables and parameters can be declared with an **Enum** type. The elements of the **Enum** type are initialized to constant values within the **Enum** statement. The assigned values can't be modified at run time and can include both positive and negative numbers. For example: + +```vb +Enum SecurityLevel + IllegalEntry = -1 + SecurityLevel1 = 0 + SecurityLevel2 = 1 +End Enum +``` + +An **Enum** statement can appear only at the module level. After the **Enum** type is defined, it can be used to declare variables, parameters, or procedures returning its type. You can't qualify an **Enum** type name with a module name. + +**Public Enum** types in a class module are not members of the class; however, they are written to the type library. **Enum** types defined in standard modules aren't written to type libraries. **Public Enum** types of the same name can't be defined in both standard modules and class modules because they share the same name space. When two **Enum** types in different type libraries have the same name, but different elements, a reference to a variable of the type depends on which type library has higher priority in the **References**. + +You can't use an **Enum** type as the target in a **With** block. + +### Example + +The following example shows the **Enum** statement used to define a collection of named constants. In this case, the constants are colors you might choose to design data entry forms for a database. + +```vb +Public Enum InterfaceColors + icMistyRose = &HE1E4FF& + icSlateGray = &H908070& + icDodgerBlue = &HFF901E& + icDeepSkyBlue = &HFFBF00& + icSpringGreen = &H7FFF00& + icForestGreen = &H228B22& + icGoldenrod = &H20A5DA& + icFirebrick = &H2222B2& +End Enum +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 9dfbeb85..acd816ca 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/Enum - /tB/Core/Erase - /tB/Core/Error - /tB/Core/Event diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index 005d50b5..83c2daf4 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -32,7 +32,7 @@ These statements are built into the language itself. They are understood by the * [End](../tB/Core/End) -- ends a procedure or block -* [Enum](../tB/Core/Enum) +* [Enum](../tB/Core/Enum) -- declares a type for an enumeration * [Erase](../tB/Core/Erase) From 9b403e03b9587f3107186638d095e0241505cb2d Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 19:58:56 +0100 Subject: [PATCH 20/40] Document Erase. --- docs/Reference/Core/Erase.md | 49 ++++++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/Erase.md diff --git a/docs/Reference/Core/Erase.md b/docs/Reference/Core/Erase.md new file mode 100644 index 00000000..5c018b97 --- /dev/null +++ b/docs/Reference/Core/Erase.md @@ -0,0 +1,49 @@ +--- +title: Erase +parent: Statements +permalink: /tB/Core/Erase +--- + +# Erase +{: .no_toc } + +Reinitializes the elements of fixed-size arrays, or releases dynamic-array storage space. + +Syntax: **Erase** *arraylist* + +*arraylist* +: one or more comma-delimited array variables to be erased + +**Erase** behaves differently depending on whether an array is fixed-size (ordinary) or dynamic. **Erase** recovers no memory for fixed-size arrays. Erase sets the elements of a fixed array as follows: + +| Type of array | Effect of Erase on fixed-array elements | +|-|-| +| Fixed numeric array | Sets each element to zero. | +| Fixed string array (variable length) | Sets each element to a zero-length string (""). | +| Fixed string array (fixed length) | Sets each element to zero. | +| Fixed Variant array | Sets each element to **Empty**. | +| Array of user-defined types | Sets each element as if it were a separate variable. | +| Array of objects | Sets each element to the special value **Nothing**. | + +**Erase** frees the memory used by dynamic arrays. Before your program can refer to the dynamic array again, it must redeclare the array variable's dimensions by using a ReDim statement. + +### Example +This example uses the **Erase** statement to reinitialize the elements of fixed-size arrays and deallocate dynamic-array storage space. + +```vb +' Declare array variables. +Dim NumArray(10) As Integer ' Integer array. +Dim StrVarArray(10) As String ' Variable-string array. +Dim StrFixArray(10) As String * 10 ' Fixed-string array. +Dim VarArray(10) As Variant ' Variant array. +Dim DynamicArray() As Integer ' Dynamic array. +ReDim DynamicArray(10) ' Allocate storage space. +Erase NumArray ' Each element set to 0. +Erase StrVarArray ' Each element set to zero-length + ' string (""). +Erase StrFixArray ' Each element set to 0. +Erase VarArray ' Each element set to Empty. +Erase DynamicArray ' Free memory used by array. +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index acd816ca..59f733ee 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/Erase - /tB/Core/Error - /tB/Core/Event - /tB/Core/Exit diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index 83c2daf4..1af3c20d 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -34,7 +34,7 @@ These statements are built into the language itself. They are understood by the * [Enum](../tB/Core/Enum) -- declares a type for an enumeration -* [Erase](../tB/Core/Erase) +* [Erase](../tB/Core/Erase) -- reinitializes the elements of fixed-size arrays, or releases dynamic-array storage space * [Event](../tB/Core/Event) From 318416084cd259fb9a9fe1eaf36eba9e1d34318e Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 20:04:33 +0100 Subject: [PATCH 21/40] Document Error. --- docs/Reference/Core/Error.md | 41 ++++++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 ++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 docs/Reference/Core/Error.md diff --git a/docs/Reference/Core/Error.md b/docs/Reference/Core/Error.md new file mode 100644 index 00000000..eba4ec2b --- /dev/null +++ b/docs/Reference/Core/Error.md @@ -0,0 +1,41 @@ +--- +title: Error +parent: Statements +permalink: /tB/Core/Error +--- + +# Error +{: .no_toc } + +Simulates the occurrence of an error. + +Syntax: **Error** *errornumber* + +*errornumber* +: can be any valid error number. + +The **Error** statement is supported for backward compatibility. In new code, especially when creating objects, use the **Err** object's **Raise** method to generate run-time errors. + +If *errornumber* is defined, the **Error** statement calls the error handler after the properties of the **Err** object are assigned the following default values: + +| Property | Value | +| :--------------- | :----------------------------------------------------------- | +| **Number** | Value specified as argument to **Error** statement. Can be any valid error number. | +| **Source** | Name of the current Visual Basic project. | +| **Description** | String expression corresponding to the return value of the **Error** function for the specified **Number**, if this string exists. If the string doesn't exist, **Description** contains a zero-length string (""). | +| **HelpFile** | The fully qualified drive, path, and file name of the appropriate Visual Basic Help file. | +| **HelpContext** | The appropriate Visual Basic Help file context ID for the error corresponding to the **Number** property. | +| **LastDLLError** | Zero. | + +If no error handler exists or if none is enabled, an error message is created and displayed from the **Err** object properties. + +### Example + +This example uses the **Error** statement to simulate error number 11. + +```vb +On Error Resume Next ' Defer error handling. +Error 11 ' Simulate the "Division by zero" error. +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 59f733ee..7fd879e8 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/Error - /tB/Core/Event - /tB/Core/Exit - /tB/Core/FileCopy diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index 1af3c20d..5ddc8ae0 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -36,6 +36,8 @@ These statements are built into the language itself. They are understood by the * [Erase](../tB/Core/Erase) -- reinitializes the elements of fixed-size arrays, or releases dynamic-array storage space +* [Error](../tB/Core/Error) -- simulates the occurrence of an error + * [Event](../tB/Core/Event) * [Exit](../tB/Core/Exit) From 6e22b9d74ac8207a2f9b464ae852dba0e22be4e0 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 20:16:16 +0100 Subject: [PATCH 22/40] Document Event. --- docs/Reference/Core/Event.md | 119 +++++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 +- 3 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/Event.md diff --git a/docs/Reference/Core/Event.md b/docs/Reference/Core/Event.md new file mode 100644 index 00000000..98809288 --- /dev/null +++ b/docs/Reference/Core/Event.md @@ -0,0 +1,119 @@ +--- +title: Event +parent: Statements +permalink: /tB/Core/Event +--- + +Declares a user-defined event. + +Syntax: [ **Public** ] **Event** *procedurename* [ (*arglist*) ] + +**Public** +: *optional*. Specifies that the **Event** is visible throughout the project. **Events** types are **Public** by default. Note that events can only be raised in the module in which they are declared. + +*procedurename* +: Name of the event; follows standard variable naming conventions. + +*arglist* +: [ **ByVal** \| **ByRef** ] *varname* \[ **()** ] [ **As** *type* ] + + **ByVal** + : *optional* Indicates that the argument is passed by value. + + **ByRef** + : *optional* Indicates that the argument is passed by reference. **ByRef** is the default in unlike in Visual Basic .NET. + + *varname* + : Name of the variable representing the argument being passed to the procedure; follows standard variable naming conventions. + + *type* + : *optional* Data type of the argument passed to the procedure; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (variable length only), Object, Variant, a user-defined type (UDT), or an object type. + +After the event has been declared, use the [**RaiseEvent**](RaiseEvent) statement to fire the event. A syntax error occurs if an **Event** declaration appears in a standard module. An event can't be declared to return a value. A typical event might be declared and raised as shown in the following fragments. + +```vb +' Declare an event at module level of a class module + +Event LogonCompleted (UserName as String) + +Sub + RaiseEvent LogonCompleted("AntoineJan") +End Sub +``` + +> [!NOTE] +> +> You can declare event arguments just as you do arguments of procedures, with the following exceptions: events cannot have named arguments, **Optional** arguments, or **ParamArray** arguments. Events don't have return values. + +### Example + +The following example uses events to count off seconds during a demonstration of the fastest 100-meter race. The code illustrates all of the event-related methods, properties, and statements, including the **Event** statement. + +The class that raises an event is the event source, and the classes that implement the event are the sinks. An event source can have multiple sinks for the events it generates. When the class raises the event, that event is fired on every class that has elected to sink events for that instance of the object. + +The example also uses a form (`Form1`) with a button (`Command1`), a label (`Label1`), and two text boxes (`Text1` and `Text2`). When you click the button, the first text box displays "From Now" and the second starts to count seconds. When the full time (9.84 seconds) has elapsed, the first text box displays "Until Now" and the second displays "9.84". + +The code specifies the initial and terminal states of the form. It also contains the code executed when events are raised. + +```vb +Class Form1 + Option Explicit + + Private WithEvents mText As TimerState + + Private Sub Command1_Click() + Text1.Text = "From Now" + Text1.Refresh + Text2.Text = "0" + Text2.Refresh + Call mText.TimerTask(9.84) + End Sub + + Private Sub Form_Load() + Command1.Caption = "Click to Start Timer" + Text1.Text = "" + Text2.Text = "" + Label1.Caption = "The fastest 100 meter run took this long:" + Set mText = New TimerState + End Sub + + Private Sub mText_ChangeText() + Text1.Text = "Until Now" + Text2.Text = "9.84" + End Sub + + Private Sub mText_UpdateTime(ByVal dblJump As Double) + Text2.Text = Str(Format(dblJump, "0")) + DoEvents + End Sub +End Class +``` + +The remaining code is in a class module named TimerState. The **Event** statements declare the procedures initiated when events are raised. + +VB + +```vb +Class TimerState + Option Explicit + Public Event UpdateTime(ByVal dblJump As Double) + Public Event ChangeText() + + Public Sub TimerTask(ByVal Duration As Double) + Dim dblStart As Double + Dim dblSecond As Double + Dim dblSoFar As Double + dblStart = Timer + dblSoFar = dblStart + + Do While Timer < dblStart + Duration + If Timer - dblSoFar >= 1 Then + dblSoFar = dblSoFar + 1 + RaiseEvent UpdateTime(Timer - dblStart) + End If + Loop + + RaiseEvent ChangeText + End Sub +End Class +``` diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 7fd879e8..e3654ee1 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/Event - /tB/Core/Exit - /tB/Core/FileCopy - /tB/Core/For-Next diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index 5ddc8ae0..cf29d655 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -38,7 +38,7 @@ These statements are built into the language itself. They are understood by the * [Error](../tB/Core/Error) -- simulates the occurrence of an error -* [Event](../tB/Core/Event) +* [Event](../tB/Core/Event) -- declares a user-defined event * [Exit](../tB/Core/Exit) From 1fe7ce9765a0d29a27c7539eadb968b7274b423a Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 20:29:34 +0100 Subject: [PATCH 23/40] Document Exit. --- docs/Reference/Core/Exit.md | 49 ++++++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/Exit.md diff --git a/docs/Reference/Core/Exit.md b/docs/Reference/Core/Exit.md new file mode 100644 index 00000000..ca778c8e --- /dev/null +++ b/docs/Reference/Core/Exit.md @@ -0,0 +1,49 @@ +--- +title: Exit +parent: Statements +permalink: /tB/Core/Exit +--- +# Exit +{: .no_toc } + +Exits a block of **Do…Loop**, **For…Next**, **Function**, **Sub**, or **Property** code. + +Syntax: + +- **Exit Do** + Provides a way to exit a **[Do...Loop](Do-Loop)** statement. It can be used only inside a **Do...Loop** statement. **Exit Do** transfers control to the statement following the **Loop** statement. When used within nested **Do...Loop** statements, **Exit Do** transfers control to the loop that is one nested level above the loop where **Exit Do** occurs. + +- **Exit For** + Provides a way to exit a **For** loop. It can be used only in a **[For...Next](For-Next)** or **[For Each...Next](For-Next)** loop. **Exit For** transfers control to the statement following the **Next** statement. When used within nested **For** loops, **Exit For** transfers control to the loop that is one nested level above the loop where **Exit For** occurs. + +- **Exit Function** + Immediately exits the **[Function](Function)** procedure in which it appears. Execution continues with the statement following the statement that called the **Function**. + +- **Exit Property** + Immediately exits the **[Property](Property)** procedure in which it appears. Execution continues with the statement following the statement that called the **Property** procedure. + +- **Exit Sub** + Immediately exits the **[Sub](Sub)** procedure in which it appears. Execution continues with the statement following the statement that called the **Sub** procedure. + +Do not confuse **Exit** statements with **End** statements. **Exit** does not define the end of a structure. + +### Example + +This example uses the **Exit** statement to exit a **For...Next** loop, a **Do...Loop**, and a **Sub** procedure. + +```vb +Sub ExitStatementDemo() + Dim I%, MyNum% + Do ' Set up infinite loop. + For I = 1 To 1000 ' Loop 1000 times. + MyNum = Int(Rnd * 1000) ' Generate random numbers. + Select Case MyNum ' Evaluate random number. + Case 7: Exit For ' If 7, exit For...Next. + Case 29: Exit Do ' If 29, exit Do...Loop. + Case 54: Exit Sub ' If 54, exit Sub procedure. + End Select + Next I + Loop +End Sub +``` +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index e3654ee1..c2dbff61 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/Exit - /tB/Core/FileCopy - /tB/Core/For-Next - /tB/Core/Function diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index cf29d655..2120cc20 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -40,7 +40,7 @@ These statements are built into the language itself. They are understood by the * [Event](../tB/Core/Event) -- declares a user-defined event -* [Exit](../tB/Core/Exit) +* [Exit](../tB/Core/Exit) -- exits a block of **Do…Loop**, **For…Next**, **Function**, **Sub**, or **Property** code * [For ... Next](../tB/Core/For-Next) From e60e7d57b27caa3ceb21b530ac22b06fc6ec819b Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 20:37:03 +0100 Subject: [PATCH 24/40] Document FileCopy. --- docs/Reference/Core/todo.md | 1 - docs/Reference/Modules/FileSystem/FileCopy.md | 33 +++++++++++++++++++ docs/Reference/Modules/FileSystem/index.md | 1 + 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 docs/Reference/Modules/FileSystem/FileCopy.md diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index c2dbff61..124da4e7 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/FileCopy - /tB/Core/For-Next - /tB/Core/Function - /tB/Core/Get diff --git a/docs/Reference/Modules/FileSystem/FileCopy.md b/docs/Reference/Modules/FileSystem/FileCopy.md new file mode 100644 index 00000000..e72980f5 --- /dev/null +++ b/docs/Reference/Modules/FileSystem/FileCopy.md @@ -0,0 +1,33 @@ +--- +title: FileCopy +parent: FileSystem Module +permalink: /tB/Modules/FileSystem/FileCopy +redirect_from: +- /tB/Core/FileCopy +--- + +# FileCopy + +Copies a file. + +Syntax: **FileCopy** *source*, *destination* + +*source* +: String expression that specifies the name of the file to be copied. The *source* may include directory or folder, and drive. + +*destination* +: String expression that specifies the target file name. The *destination* may include directory or folder, and drive. + +If you try to use the **FileCopy** statement on a file that is currently open, an error occurs. + +### Example + +This example uses the **FileCopy** statement to copy one file to another. For the purposes of this example, assume that the file contains some data. + +```vb +Dim SourceFile, DestinationFile +SourceFile = "SRCFILE" ' Define source file name. +DestinationFile = "DESTFILE" ' Define target file name. +FileCopy SourceFile, DestinationFile ' Copy source to target. +``` +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Modules/FileSystem/index.md b/docs/Reference/Modules/FileSystem/index.md index 000d46d0..32a9cd35 100644 --- a/docs/Reference/Modules/FileSystem/index.md +++ b/docs/Reference/Modules/FileSystem/index.md @@ -9,6 +9,7 @@ has_toc: false - [ChDir](ChDir) -- changes the current directory or folder - [ChDrive](ChDrive) -- changes the current drive +- [FileCopy](FileCopy) -- copies a file > [!WARNING] > Work in Progress Below From 0b076069becb5762f0dccbac82a115023d6f04ab Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 20:49:56 +0100 Subject: [PATCH 25/40] Document For...Next. --- docs/Reference/Core/For-Next.md | 90 +++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 1 - docs/Reference/Statements.md | 2 +- 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/For-Next.md diff --git a/docs/Reference/Core/For-Next.md b/docs/Reference/Core/For-Next.md new file mode 100644 index 00000000..d6fa4af0 --- /dev/null +++ b/docs/Reference/Core/For-Next.md @@ -0,0 +1,90 @@ +--- +title: For...Next +parent: Statements +permalink: /tB/Core/For-Next +--- + +# For...Next +{: .no_toc } + +Repeats a group of statements while the loop counter approaches its final value. + +Syntax: + +> **For** *counter* [ **As** *type* ] **=** *start* **To** *end* [ **Step** *step* ] +>      [ *statements* ] +>      [ **Continue For** \| **Exit For** ] +>      [ *statements* ] ... +> **Next** [ *counter* ] + +*counter* +: Numeric variable used as a loop counter. The variable can't be a Boolean or an array element. + +*type* +: *optional* A numeric type used to declare *counter*. + When present it is equivalent to placing `Dim counter As type` immediately before the **For** statement. + +*start* +: Initial value of *counter*. + +*end* +: Final value of *counter*. + +*step* +: *optional* Amount *counter* is changed each time through the loop. If not specified, *step* defaults to one. + +*statements* +: *optional* One or more statements between **For** and **Next** that are executed the specified number of times. + +**Continue For** +: *optional* Immediately skips remaining statements and begins next iteration, or exits the loop if no more iterations remain. + **Continue For** is often used after evaluating some condition, for example **If...Then**. + +**Exit For** +: *optional* Immediately exits the body of the loop. + **Exit For** is often used after evaluating some condition, for example **If...Then**, and transfers control to the statement immediately following **Next**. + +The *step* argument can be either positive or negative. The value of the *step* argument determines loop processing as follows: + +| Value | Loop executes if | +| :------------ | :----------------- | +| Positive or 0 | *counter* <= *end* | +| Negative | *counter* >= *end* | + +After all statements in the loop have executed, *step* is added to *counter*. At this point, either the statements in the loop execute again (based on the same test that caused the loop to execute initially), or the loop is exited and execution continues with the statement following the **Next** statement. + +> [!TIP] +> +> Changing the value of *counter* while inside a loop can make it more difficult to read and debug your code. + +You can nest **For...Next** loops by placing one **For...Next** loop within another. Give each loop a unique variable name as its *counter*. The following construction is correct: + +```vb +For I = 1 To 10 + For J = 1 To 10 + For K = 1 To 10 + ' ... + Next K + Next J +Next I +``` + +> [!NOTE] +> +> If you omit *counter* in a **Next** statement, execution continues as if *counter* is included. If a **Next** statement is encountered before its corresponding **For** statement, an error occurs. + +### Example + +This example uses the **For...Next** statement to create a string that contains 10 instances of the numbers 0 through 9, each string separated from the other by a single space. The outer loop uses a loop counter variable that is decremented each time through the loop. + +```vb +Dim Words, Chars, MyString +For Words = 10 To 1 Step -1 ' Set up 10 repetitions. + For Chars = 0 To 9 ' Set up 10 repetitions. + MyString = MyString & Chars ' Append number to string. + Next Chars ' Increment counter + MyString = MyString & " " ' Append a space. +Next Words +``` + +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 124da4e7..7e31e29f 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/For-Next - /tB/Core/Function - /tB/Core/Get - /tB/Core/GoSub-Return diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index 2120cc20..be0de066 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -42,7 +42,7 @@ These statements are built into the language itself. They are understood by the * [Exit](../tB/Core/Exit) -- exits a block of **Do…Loop**, **For…Next**, **Function**, **Sub**, or **Property** code -* [For ... Next](../tB/Core/For-Next) +* [For ... Next](../tB/Core/For-Next) -- repeats a group of statements while the loop counter approaches its final value * [Function](../tB/Core/Function) From 2b99186170cca6daac7e0bc330936a159d9232e1 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 21:01:56 +0100 Subject: [PATCH 26/40] Document For Each...Next. --- .../Documentation Development.md | 2 +- docs/Reference/Categories.md | 2 +- docs/Reference/Core/For-Each-Next.md | 64 +++++++++++++++++++ docs/Reference/Statements.md | 2 + 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/For-Each-Next.md diff --git a/docs/Miscellaneous/Documentation Development.md b/docs/Miscellaneous/Documentation Development.md index f1d0b3e2..05d979f5 100644 --- a/docs/Miscellaneous/Documentation Development.md +++ b/docs/Miscellaneous/Documentation Development.md @@ -22,7 +22,7 @@ The stable, or machine-accessible part of the documentation tree is rooted on th - [Call](../tB/Core/Call), [ChDir](../tB/Core/ChDir), [ChDrive](../tB/Core/ChDrive), [Class](../tB/Core/Class), [Close](../tB/Core/Close), [CoClass](../tB/Core/CoClass), [Const](../tB/Core/Const), [Continue](../tB/Core/Continue) - [Date](../tB/Core/Date), [Declare](../tB/Core/Declare), [Deftype](../tB/Core/Deftype), [DeleteSetting](../tB/Core/DeleteSetting), [Dim](../tB/Core/Dim), [Do-Loop](../tB/Core/Do-Loop) - [End](../tB/Core/End), [Enum](../tB/Core/Enum), [Erase](../tB/Core/Erase), [Error](../tB/Core/Error), [Event](../tB/Core/Event), [Exit](../tB/Core/Exit) -- [FileCopy](../tB/Core/FileCopy), [For-Next](/tB/Core/For-Next), [Function](../tB/Core/Function) +- [FileCopy](../tB/Core/FileCopy), [For-Next](/tB/Core/For-Next), [For-Each-Next](../tB/Core/For-Each-Next), [Function](../tB/Core/Function) - [Get](../tB/Core/Get), [GetSetting](../tB/Core/GetSetting), [GoSub-Return](../tB/Core/GoSub-Return), [GoTo](../tB/Core/GoTo) - [If-Then-Else](../tB/Core/If-Then-Else), [Implements](../tB/Core/Implements), [Input](../tB/Core/Input), [Interface](../tB/Core/Interface), [Is](../tB/Core/Is) - [Kill](../tB/Core/Kill) diff --git a/docs/Reference/Categories.md b/docs/Reference/Categories.md index ba013252..787689fc 100644 --- a/docs/Reference/Categories.md +++ b/docs/Reference/Categories.md @@ -35,7 +35,7 @@ This chapter lists the global statements and procedures that form the core of th Statements: * [Call](../tB/Core/Call) - invokes a procedure or function -* [Do ... Loop](../tB/Core/Do-Loop), [For ... Next](../tB/Core/For-Next), [While ... Wend](../tB/Core/While-Wend) - loops +* [Do ... Loop](../tB/Core/Do-Loop), [For ... Next](../tB/Core/For-Next), [For Each ... Next](../tB/Core/For-Each-Next), [While ... Wend](../tB/Core/While-Wend) - loops * [If ... Then ... Else](../tB/Core/If-Then-Else) - execute code conditionally * [Continue](../tB/Core/Continue) - skip to the next iteration of the loop * [Exit](../tB/Core/Exit) - exit a loop, procedure, function or property diff --git a/docs/Reference/Core/For-Each-Next.md b/docs/Reference/Core/For-Each-Next.md new file mode 100644 index 00000000..29ce1bc8 --- /dev/null +++ b/docs/Reference/Core/For-Each-Next.md @@ -0,0 +1,64 @@ +--- +title: For Each...Next +parent: Statements +permalink: /tB/Core/For-Each-Next +--- + +# For Each...Next +{: .no_toc } + +Repeats a group of statements for each element in an array or collection. + +Syntax: +> **For Each** *element* [ **As** *type* ] **In** *group* +>      [ *statements* ] +>      [ **Continue For** \| **Exit For** ] +>      [ *statements* ] +> **Next** [ *element* ] + +*element* +: Variable used to iterate through the elements of the collection or array. For collections, *element* can only be a **Variant** variable, a generic object variable, or any specific object variable. For arrays, *element* can only be a **Variant** variable. + +*type* +: *optional* A type used to declare *element*. + When present it is equivalent to placing `Dim element As type` immediately before the **For Each** statement. + +*group* +: Name of an object collection or array (except an array of user-defined types (UDTs)). + +*statements* +: *optional* One or more statements that are executed on each item in *group*. + +**Continue For** +: *optional* Immediately skips remaining statements and begins next iteration, or exits the loop if no more iterations remain. + **Continue For** is often used after evaluating some condition, for example **If...Then**. + +**Exit For** +: *optional* Immediately exits the body of the loop. + **Exit For** is often used after evaluating some condition, for example **If...Then**, and transfers control to the statement immediately following **Next**. + +The **For…Each** block is entered if there is at least one element in *group*. After the loop has been entered, all the statements in the loop are executed for the first element in *group*. If there are more elements in *group*, the statements in the loop continue to execute for each element. When there are no more elements in *group*, the loop is exited and execution continues with the statement following the **Next** statement. + +You can nest **For...Each...Next** loops by placing one **For…Each…Next** loop within another. However, each loop *element* must be unique. + +> [!NOTE] +> +> If you omit *element* in a **Next** statement, execution continues as if *element* is included. If a **Next** statement is encountered before its corresponding **For** statement, an error occurs. + +You can't use the **For...Each...Next** statement with an array of user-defined types because a **Variant** can't contain a user-defined type. + +### Example + +This example uses the **For Each...Next** statement to search the **Text** property of all elements in a collection for the existence of the string "Hello". In the example, *MyObject* is a text-related object and is an element of the collection *MyCollection*. Both are generic names used for illustration purposes only. + +```vb +Dim Found, MyObject, MyCollection +Found = False ' Initialize variable. +For Each MyObject In MyCollection ' Iterate through each element. + If MyObject.Text = "Hello" Then ' If Text equals "Hello". + Found = True ' Set Found to True. + Exit For ' Exit loop. + End If +Next +``` +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index be0de066..d270f441 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -44,6 +44,8 @@ These statements are built into the language itself. They are understood by the * [For ... Next](../tB/Core/For-Next) -- repeats a group of statements while the loop counter approaches its final value +* [For Each...Next](../tB/Core/For-Each-Next) -- repeats a group of statements for each element in an array or collection + * [Function](../tB/Core/Function) * [Get](../tB/Core/Get) From b2b45391a8cb74f4dbfc0bdd19370a7c1bde2569 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Fri, 23 Jan 2026 23:36:08 +0100 Subject: [PATCH 27/40] Document Function. --- docs/Reference/Core/Function.md | 178 ++++++++++++++++++++++++++++++++ docs/Reference/Core/todo.md | 2 +- docs/Reference/Statements.md | 4 +- 3 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 docs/Reference/Core/Function.md diff --git a/docs/Reference/Core/Function.md b/docs/Reference/Core/Function.md new file mode 100644 index 00000000..f1f5e4c3 --- /dev/null +++ b/docs/Reference/Core/Function.md @@ -0,0 +1,178 @@ +--- +title: Function +parent: Statements +permalink: /tB/Core/Function +--- +# Function +{: .no_toc } + +Declares the name, arguments, and code that form the body of a **Function** procedure. + +Syntax: +> [ *attributes* ] +> [ **Public** | **Private** | **Friend** ] [ **Static** ] **Function** *name* [ **(** **Of** *typevars* **)** ] [ **(** *arglist* **)** ] [ **As** *type* ] +>      [ *statements* ] ... +>      [ [ **Let** ] *name* **=** *expression* ] ... +>      [ **Set** *name* **=** *expression* ] ... +>      [ **Return** *expression* ] ... +>      [ **Exit Function** | **Return** ] ... +>      [ *statements* ] ... +> **End Function** + +*attributes* +: One or more of: +[ArrayBoundsChecks](Attributes#arrayboundschecks), [BindOnlyIfNoArguments](Attributes#bindonlyifnoarguments), [BindOnlyIfStringSuffix](Attributes#bindonlyifstringsuffix), [CompileIf](Attributes#compileif), [ConstantFoldable](Attributes#constantfoldable), [ConstantFoldableNumericsOnly](Attributes#constantfoldablenumericsonly), [Debuggable](Attributes#debuggable), [DebugOnly](Attributes#debugonly), [Description](Attributes#description), [EnforceErrors](Attributes#enforceerrors), [EnforceWarnings](Attributes#enforcewarnings), [FloatingPointErrorChecks](Attributes#floatingpointerrorchecks), [IntegerOverflowChecks](Attributes#integeroverflowchecks), [MustBeQualified](Attributes#mustbequalified), [RunAfterBuild](Attributes#runafterbuild), [SimplerByVals](Attributes#simplerbyvals), [TestCase](Attributes#testcase), [Unimplemented](Attributes#unimplemented) + +**Public** +: *optional*. Indicates that the **Function** procedure is accessible to all other procedures in all modules. If used in a module that contains an **Option Private**, the procedure is not available outside the project. + +**Private** +: *optional* Indicates that the **Function** procedure is accessible only to other procedures in the module where it is declared. + +**Friend** +: *optional* Used only in a class module. Indicates that the **Function** procedure is visible throughout the project, but not visible to a controller of an instance of an object. + +**Static** +: *optional* Indicates that the **Function** procedure's local variables are preserved between calls. The **Static** attribute doesn't affect variables that are declared outside the **Function**, even if they are used in the procedure. + +*name* +: Name of the **Function**; follows standard variable naming conventions. + +**Of** *typevars* +: *optional* One or more type variable names; following standard variable naming conventions. The names are separated by commas. Causes the function to be a generic function. + +*arglist* +: *optional* List of variables representing arguments that are passed to the **Function** procedure when it is called. Multiple variables are separated by commas. + +**As** *type* +: *optional* Data type of the value returned by the **Function** procedure; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (except fixed length), Object, Variant, or any user-defined type (UDT). + +*statements* +: *optional* Any group of statements to be executed within the **Function** procedure. + +**[Let](Let)** +: *optional* Assigns a non-object-type return value of the **Function** without exiting the function. The **Let** keyword is optional. + +**[Set](Set)** +: *optional* Assigns an object-type return value of the **Function** without exiting the function. + +**[Return](Return)** +: *optional* Immediately returns from the function. If an *expression* is provided, its value is used as the return value of the **Function**. + +**[Exit Function](Exit)** +: *optional* Immediately returns from the function. + +*expression* +: *optional* Return value of the **Function**. + +### *arglist* + +Syntax: One or more of +[ **Optional** ] [ **ByVal** \| **ByRef** ] [ **ParamArray** ] *varname* [ **()** ] [ **As** *type* ] [ **=** *defaultvalue* ] + +**Optional** +: *optional* Indicates that an argument is not required. If used, all subsequent arguments in *arglist* must also be optional and declared by using the **Optional** keyword. **Optional** can't be used for any argument if **ParamArray** is used. + +**ByVal** +: *optional* Indicates that the argument is passed by value. + +**ByRef** +: *optional* Indicates that the argument is passed by reference. **ByRef** is the default unlike in Visual Basic .NET. + +**ParamArray** +: *optional* Used only as the last argument in *arglist* to indicate that the final argument is an **Optional** array of **Variant** elements. The **ParamArray** keyword allows you to provide an arbitrary number of arguments. It may not be used with **ByVal**, **ByRef**, or **Optional**. + +*varname* +: Name of the variable representing the argument; follows standard variable naming conventions. + +*type* +: *optional* Data type of the argument passed to the procedure; may be **Byte**, **Boolean**, **Integer**, **Long**, **Currency**, **Single**, **Double**, **Decimal** (not currently supported) **Date**, **String** (variable length only), **Object**, **Variant**, a specific object type, or the name of a generic type argument. If the parameter is not **Optional**, a user-defined type may also be specified. +If the name of a generic type parameter is used, it becomes bound to the concrete type of the argument passed to the function. The name binding has the scope of the body of the function. + +*defaultvalue* +: *optional* Any constant or constant expression. Valid for **Optional** parameters only. If the type is an **Object**, an explicit default value can only be **Nothing**. + +If not explicitly specified by using **Public**, **Private**, or **Friend**, **Function** procedures are public by default. + +If **Static** isn't used, the value of local variables is not preserved between calls. + +The **Friend** keyword can only be used in class modules. However, **Friend** procedures can be accessed by procedures in any module of a project. A **Friend** procedure does not appear in the type library of its parent class, nor can a **Friend** procedure be late bound. + +**Function** procedures can be recursive; that is, they can call themselves to perform a given task. However, recursion can lead to stack overflow. The **Static** keyword usually isn't used with recursive **Function** procedures. + +All executable code must be in procedures. You can't define a **Function** procedure inside another **Function**, **[Sub](Sub)**, or **[Property](Property)** procedure. + +The **[Exit Function](Exit)** and **[Return](Return)** statements cause an immediate exit from a **Function** procedure. Program execution continues with the statement following the statement that called the **Function** procedure. Any number of **Exit Function** and **Return** statements can appear anywhere in a **Function** procedure. + +Like a **Sub** procedure, a **Function** procedure is a separate procedure that can take arguments, perform a series of statements, and change the values of its arguments. However, unlike a **Sub** procedure, you can use a **Function** procedure on the right side of an expression in the same way you use any intrinsic function, such as **Sqr**, **Cos**, or **Chr**, when you want to use the value returned by the function. + +You call a **Function** procedure by using the function name, followed by the argument list in parentheses, in an expression. See the **[Call](Call)** statement for specific information about how to call **Function** procedures. + +To return a value from a function, assign the value to the function name, or provide it as an argument to the **Return** statement. Any number of such assignments and **Return** statements can appear anywhere within the procedure. If no value is assigned to *name*, the procedure returns a default value: a numeric function returns 0, a string function returns a zero-length string (""), and a **Variant** function returns **Empty**. A function that returns an object reference returns **Nothing** if no object reference is assigned to *name* (using **Set** or **Return**) within the **Function**. + +The following example shows how to assign a return value to a function. In this case, **False** is assigned to the name to indicate that some value was not found. + +```vb +Function BinarySearch(...) As Boolean + '... + ' Value not found. Return a value of False. + If lower > upper Then + BinarySearch = False + Exit Function + End If + '... +End Function +``` + +Variables used in **Function** procedures fall into two categories: those that are explicitly declared within the procedure and those that are not. + +Variables that are explicitly declared in a procedure (using **Dim** or the equivalent) are always local to the procedure. Variables that are used but not explicitly declared in a procedure are also local unless they are explicitly declared at some higher level outside the procedure. + +A procedure can use a variable that is not explicitly declared in the procedure, but a naming conflict can occur if anything you defined at the module level has the same name. If your procedure refers to an undeclared variable that has the same name as another procedure, constant, or variable, it is assumed that your procedure refers to that module-level name. Explicitly declare variables to avoid this kind of conflict. Use an **[Option Explicit](Option#Explicit)** statement to force explicit declaration of variables. + +Visual Basic may rearrange arithmetic expressions to increase internal efficiency. Avoid using a **Function** procedure in an arithmetic expression when the function changes the value of variables in the same expression. For more information about arithmetic operators, see Operators. + +### Example + +This example uses the **Function** statement to declare the name, arguments, and code that form the body of a **Function** procedure. The last example uses hard-typed, initialized **Optional** arguments. + +```vb +' The following user-defined function returns the square root of the +' argument passed to it. +Function CalculateSquareRoot(NumberArg As Double) As Double + If NumberArg < 0 Then ' Evaluate argument. + Exit Function ' Exit to calling procedure. + Else + CalculateSquareRoot = Sqr(NumberArg) ' Return square root. + End If +End Function +``` + +Using the **ParamArray** keyword enables a function to accept a variable number of arguments. In the following definition, it is passed by value. + +```vb +Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs()) + Dim ReturnValue + ' If the function is invoked as follows: + ReturnValue = CalcSum(4, 3, 2, 1) + ' Local variables are assigned the following values: FirstArg = 4, + ' OtherArgs(1) = 3, OtherArgs(2) = 2, and so on, assuming default + ' lower bound for arrays = 1. +End Function +``` + +**Optional** arguments can have default values and types other than **Variant**. + +```vb +' If a function's arguments are defined as follows: +Function MyFunc(MyStr As String,Optional MyArg1 As _ + Integer = 5,Optional MyArg2 = "Dolly") + Dim RetVal + ' The function can be invoked as follows: + RetVal = MyFunc("Hello", 2, "World") ' All 3 arguments supplied. + RetVal = MyFunc("Test", , 5) ' Second argument omitted. + ' Arguments one and three using named-arguments. + RetVal = MyFunc(MyStr:="Hello ", MyArg1:=7) +End Function +``` +{% include VBA-Attribution.md %} \ No newline at end of file diff --git a/docs/Reference/Core/todo.md b/docs/Reference/Core/todo.md index 7e31e29f..119ef220 100644 --- a/docs/Reference/Core/todo.md +++ b/docs/Reference/Core/todo.md @@ -5,7 +5,6 @@ redirect_from: - /tB/Core/Topic-Preprocessor - /tB/Core/CoClass - /tB/Core/Deftype - - /tB/Core/Function - /tB/Core/Get - /tB/Core/GoSub-Return - /tB/Core/GoTo @@ -42,6 +41,7 @@ redirect_from: - /tB/Core/ReDim - /tB/Core/Reset - /tB/Core/Resume + - /tB/Core/Return - /tB/Core/RmDir - /tB/Core/RSet - /tB/Core/SavePicture diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index d270f441..902d380c 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -46,7 +46,7 @@ These statements are built into the language itself. They are understood by the * [For Each...Next](../tB/Core/For-Each-Next) -- repeats a group of statements for each element in an array or collection -* [Function](../tB/Core/Function) +* [Function](../tB/Core/Function) -- declares the name, arguments, and code that form the body of a **Function** procedure * [Get](../tB/Core/Get) @@ -98,6 +98,8 @@ These statements are built into the language itself. They are understood by the * [Resume](../tB/Core/Resume) +* [Return](../tB/Core/Return) + * [RSet](../tB/Core/RSet) * [Seek](../tB/Core/Seek) From 6bb626704623252ce2a61c72a3f6405aa9d2500d Mon Sep 17 00:00:00 2001 From: Alex Hedley <1573469+AlexHedley@users.noreply.github.com> Date: Fri, 23 Jan 2026 17:01:40 +0000 Subject: [PATCH 28/40] Document IDE addins. --- docs/AddIns/Community/Images/.keep | 0 docs/AddIns/Community/index.md | 14 +++++++ docs/AddIns/GlobalSearch.md | 40 ++++++++++++++++++++ docs/AddIns/Images/GlobalSearch.png | Bin 0 -> 7118 bytes docs/AddIns/Images/GlobalSearch_2.png | Bin 0 -> 42031 bytes docs/AddIns/Images/Toolbar_GlobalSearch.png | Bin 0 -> 1297 bytes docs/AddIns/index.md | 13 +++++++ 7 files changed, 67 insertions(+) create mode 100644 docs/AddIns/Community/Images/.keep create mode 100644 docs/AddIns/Community/index.md create mode 100644 docs/AddIns/GlobalSearch.md create mode 100644 docs/AddIns/Images/GlobalSearch.png create mode 100644 docs/AddIns/Images/GlobalSearch_2.png create mode 100644 docs/AddIns/Images/Toolbar_GlobalSearch.png create mode 100644 docs/AddIns/index.md diff --git a/docs/AddIns/Community/Images/.keep b/docs/AddIns/Community/Images/.keep new file mode 100644 index 00000000..e69de29b diff --git a/docs/AddIns/Community/index.md b/docs/AddIns/Community/index.md new file mode 100644 index 00000000..ed2a1090 --- /dev/null +++ b/docs/AddIns/Community/index.md @@ -0,0 +1,14 @@ +--- +title: Community Add Ins +parent: Add Ins +# nav_order: 1 +permalink: /tB/IDE/AddIns/Community +--- + +> [!WARNING] +> AddIns are a compiled executable and therefore should be treated with the same security measures you would with any application you haven't written yourself. +> Be sure to take the necessary precautions needed. + +See **Sample 10. twinBASIC IDE Addin** to get started writing your own, then be sure to add it back here. + + diff --git a/docs/AddIns/GlobalSearch.md b/docs/AddIns/GlobalSearch.md new file mode 100644 index 00000000..dfcf75eb --- /dev/null +++ b/docs/AddIns/GlobalSearch.md @@ -0,0 +1,40 @@ +--- +title: Global Search +parent: AddIns +nav_order: 1 +permalink: /tB/IDE/AddIns/GlobalSearch +--- + +## Global Search + +This AddIn is supplied with the twinBASIC IDE. + +> Latest Release: v1.0.0.0 + +Developer: twinBASIC + +The global search add in will contain a [Toolbar](/tB/IDE/Project/Toolbar) item. + +![Global Search (Toolbar)](Images/Toolbar_GlobalSearch.png "Global Search (Toolbar)") + +![Global Search](Images/GlobalSearch.png "Global Search") + +Options + +- In packages +- Match case +- Whole word +- Exclude comments + +Type a search term i.e. Button1 into the text field and a list of matches will be returned. + +![Global Search](Images/GlobalSearch_2.png "Global Search") + + +## Download + +- https://github.com/twinbasic/twinbasic/releases + +## Links + +- https://github.com/twinbasic/twinbasic diff --git a/docs/AddIns/Images/GlobalSearch.png b/docs/AddIns/Images/GlobalSearch.png new file mode 100644 index 0000000000000000000000000000000000000000..66e69a1e28854f252c5e126440576c10cfed42cd GIT binary patch literal 7118 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 UR>p~0X#kbvrBxthlE#7m1&jzQt^fc4 literal 0 HcmV?d00001 diff --git a/docs/AddIns/Images/GlobalSearch_2.png b/docs/AddIns/Images/GlobalSearch_2.png new file mode 100644 index 0000000000000000000000000000000000000000..35b6e10e84e772b84833b655c57c3f0e700f1e69 GIT binary patch literal 42031 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 Date: Fri, 23 Jan 2026 17:45:20 +0000 Subject: [PATCH 29/40] Changes per feedback. --- docs/AddIns/Images/GlobalSearch.png | Bin 7118 -> 6464 bytes docs/AddIns/Images/GlobalSearch_2.png | Bin 42031 -> 31752 bytes docs/AddIns/index.md | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AddIns/Images/GlobalSearch.png b/docs/AddIns/Images/GlobalSearch.png index 66e69a1e28854f252c5e126440576c10cfed42cd..d35d18c1f0eea024785423d9eb98a17a77c5f62f 100644 GIT binary patch literal 6464 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 literal 7118 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 UR>p~0X#kbvrBxthlE#7m1&jzQt^fc4 diff --git a/docs/AddIns/Images/GlobalSearch_2.png b/docs/AddIns/Images/GlobalSearch_2.png index 35b6e10e84e772b84833b655c57c3f0e700f1e69..3bc5df2e097c2874783bcb4afaa69304a2e7f1c3 100644 GIT binary patch literal 31752 zcmb4q1ymeOwC3RM1P>5GfB?bWAxQ8b!QI`1yE_Cza1Rhd@Zjzi+}+*XVJrXt&e?a~ z+uifF56tw`boW$O-+Sx3-*+qQqnrd9G7&Na0zs4fAgTy~KXZ_y7kXf`WrUfjuekPy8SI zpgRy6D42iR|8|HO3L1h1-Zj9#c?j%3?N(s_?>6fU1=)f5-|zqRS0NDaWh?>&797jO z!pa1d_3w56{w7@3zt{Q(_Wy3s;L6bd9I4371@`{qEM_LAzu&6A^)4GeaGiia+BI+KLMihz?Kpl#ubjg9RFHs@+Pv+fH4 z>J|spT{N#d+*(6v^IEqdQ__4=pUd*%$Vlrtyde{T42Bvxc>P!=q{oz$rRUeG$0Xba z?boK~?||eN+qa3;5yGnbIvB&$r%R8ihT{PVhpN}8BBH8lfx!1dGTxinbm&K?s6Y80 zqfX=gl1G7&5tD9RAv3|BcY&{{@+&JV1yMw305GR8SDR&l4|~RV%VLfF1E&8T4sm@$XvUV;sz!>?KCYbT^!F z@P89&yIth=S(?MSQqv#Ro;WQYKyha6Q;XF8n&_x%P+O|9-J)@~UGou-KfcrXVR4!N zn(*$I`dzzpODO!nm+4HJhar4HkIOBwu(*r~?fiA!CZ(04;?hY4S|o^XLD5s|{BUFb ziRGCgEzKBlq7k&UYcU=$_Yu zSUB>TEZZ$QS^_DO`n>0}`=w3w>#01eCvQ>6e9AcY8IR?@(;pUNCftPPbN(hf>c1a6 zz>V5}m_BZKn!DFk;dHqa|C~O1xd%?XyR$59zFp1EXdOLQ%+W5!!+*hgTe9>W0*QK2 z+H$qGKYyKZZGmlS%s2`KiFEsQA}?Ja`sLd?0tV=aADNtnQ2tITT0oufcluuMhcCLz zFS^iK7cS?;VzwV>gI;#$3Hp7=WP58mTajiwFh(s4?b~qFl=#R_Q!jSTn%fnHpz}Qb z(?81gVCHFPpE%QJ>y+KrejExSbms4Y{ifuuiTHWh=Xt$KRoAEZBw4V@qfwfG`8NAL znN4oMWtrsWqN=H&L5OCQrR{tyCn&1NC5=s3d9Kljs+LULf~G9}>A;86=V6hP%vQVQ zr|&0f(|Nz+X6}5R|AZU_lUZP-+h6K5}QU&jJ&>tqR3E0z?B z5T}?wnI-rswEuRrwE1bS=-Jg~l6Aj4%9oHxx#|4KRCaDQhCZD_0;=L|i#i)`<87sj z)X!S;*$ZmSfV6<5RH8Rd>9BhzLeslVwj{jT@@rHu`E^K0_rjduA85R zWA=g{&ss8{@|st3RT&D=6EQ=9qa81l8*WFxG($Hy#@9VqC|{3r#QcOu?8`;}5(0_# zeAoiE?_JhocD>%CLJY}E9;asdf(uovmEK$m&e^AyNVBi>x!?Xo2!Z5ockTO;c?}20 z<;1lt}f4bK>H1 zddAwbj%6esm-5_7y;YB~C8Fd*AvQ&ibO95mtHX6Ba&$6$*SY_U@EUI zDJufA%TlBCkZ_WP#k?>!=jSi*5TcmJ6JVgRVwj;BoiP{aTlKS!@$7os*RNTLc;791 zIj#&G2I*!TK}!*%K*lSvKYwhQp3c+tv9@jMu}vZ8%3sfH%4pdQQ9+DIb(fbXXGO5T zFopPrPv6v6_xUVQ6~sF}>bi27_~b}>K`5;n4aGF6WrZNQpdAyX|7N#KWm;+S zuRlh!bBDKS38K0@UiInj5ewYy*Z+ME4sT3{SjZodI(q|QFILaC$eZ6X6jdYUnzY

&+$#L%nPQ`j0E|Dm|xI*BikPv-OTT-#l%Sl4dR`CNiy+6mT@fUN^jGd0Y%%E`8_8?BkqyLGUN4!*1FZe-PdFW+x#BW-1!y z`EFa{^W5yhXEdKXoY0|Y^s8y8Az?_;)8m>?OY?nbSfpI0zEo;#D=;A>3x?z$vbwh-ryR1!o| zWDUb$BBH{xPSnD4O1*lgw*m3$-t%o+2%LGG1T%;5gx@OmUua=t`rpxpKOA&G8!Q|O zEPMbGG9I`J4(@W4qF~dr04F@aG~Jzo7bAJLU)uo)Vg0`$mjA;w=rIXUsb~^is5cKJ zNRw|ObP3khU`1YWq6f60>Mt-Po?h%83qC(ox-6}B!>yeieV-sgeLi3EKv6A;l$7cG z+j}R(!1koh&LBF~r(us{b2NAxCro%+OuDJk7)hCpU}(=K+vDaY-Gt_r$D%X-!9m#t zGcX37p^`FM<=*_9Y>5AXnZ6nJ)H2hX2%hy`+}}5*Vne)n?AM~6J-l4hXS0u61XYwC zAKL0?D?X8AV;;gPm8U2 zs!ApgWw(6hv-PePFPb!~l9cSTeb_JFU^bKrukk+39Om8y2rjn0MG3)32)Zpf!OGnH zcDFMO!RNAwwNd}T4szr3oKS#ztV{Ow|gDYvHS^|JYZ10mL1O;OAU zX9pbA*a|I!D-|1Z_yB!Y0>3Q3e5eVF%dfqV_%Exgb9UBToK9Ir?=+yPf6Chhl(HB{ zAR1hKNlT-&0mk$9gpY+2u&wff>1O2(#Jt*RGkdube&k$!F!=|I#j)|}a1gt#O;L)| zP1a^RBlQ!3+j$ooJm(G+UutP;sFOAu>F>Vg z7iAI;c=qTq`4L14$)t10=BfBRtcEzEX2oBf8vQJa;b3Q9^kBSCpG(Z&@HT-5{kjxv z;Z02SePuFvI{Xbne;c_}aey(Ixe3|ulxpF{hxFrhJu)9ErR48sPIr*4<6VZfg<-pf z<(uDKNF#xvxp}Rw-i86Zh5-IGCWOiQ?&90GZ!rQ3`Yg#wttoqZrkQR;kZ96k3k$1* z_-tJ@M@&J%`pxLJKT1cQHLwnNgK&^g^-D$cuZ{cT{(*^4X>brGidV(9=&10HlJIXa zG5Br<%*P9SDs7J)pU)GYZwGvA-7m>nybd@mGri!=z{OQQH7To&xN;MXzW+m})9Y7! ztWzSAcE5{A86~>{l87WagIH)NNQ>LSDX^+vqh_-CTfiZ3g!mrph9W(V#L6X#ej=kx zv2$?PRcaF(tc_=Fom6Gack0=2!ZTt*Vq=qPuZEu=V|<#go}y!PJPgnMLmZ!$`y0Wz zM8c|{NY$U$BBIa|^RTvcbd;c_@r-ZN{Bdl(ozOi=MO*%8chyR@KfA2h`G*Y*^3T5n4LIbx2}fi%B# zocb(x*=LR~4`KsWl9)3_O|6R-`Lz(I4=}|RlU-S*lD~0Y3|<%TD9<_VgtlM*BbxS($uzXfp?HK&S{>A0{6> zZOky?Hw+*`iIaDe(J$pf-ecoY<7L#tUq5Z5m01l(pD|_E2SIlrIglHp<0E_ z;MQc*u}Mbr9mf2OU{Y7i)onPE)JO(5?#z?xpYObs&!1z0iT#kmi#3z`Zg)+GBvE#8 z?1;;%@+CPe*c?f7Uc4eF6)2Q|E!Z!Nj_)bCPx54?Sb;|+eA*{H1gAqzLaz5~?dfCj z?J&1w!l5Davpx<{<$wIG&EGXJM5p1p{6LTk|r;3wb4#IM< z=E>+jhER{M^r-4GERb=nUrhSAvb=+Z@I;gFvD2b0iBy|``;kK7KS(4 zv%V3qBspGv(CMoJ)RpVK1p_D+wGz9jTMrByRktBp{NcmtnK(FTCuk5M6Gf--+c~?> zY^~mq4=HT4omx6Du}H!x-9LSfgAB16x2$6HPIKqCd`oX5$QHjj*{qIl{>l_R#?ZUl z6XYwby~*WpP9sQX$bUE@bI~?R@O~uB!RrKLMRz<2-AX3CkN&jK6}5%QPMvSEih_dg zefPR^s{(a^RHWOu{aX+tz1B^;>0r5h$p9=Qi9^HdY&-}>SFQGB<#tE1mtGeK>>I=&sPcqK%h1{Kfatie&j8`!Z&SboPxt8ib?DHFp&|28~$^pa0`vso^+`Hll zXXntoUhz5=+)Q4w^sW0zhUl=L{Ov>#OXSQW?icK`GG>h9;xU1hn(jnuJNK<=t!F73 zANTI1?0o5=q7~<-uE%6F?M$74QAmvb9!Oi=oMm&{$6kQB=NJeQwhuq>amt<^TAZR&R# zkTft+@Q~78Gvv%XNW0l(39MzSsOX9LPMNtZnj||_6PCvAJ^`C!ro7e zf=)3m!&TN4@48H#AirJy+aufilg6Jb=^T9cEL zMh~wg*Hh`_%#_J|zM6eL77hV|DKPKiF!d+;YCN58E7g|K*^GVsm1M!8P2u6>&Kt?q zm)1=~uVISJy-G~1HEVPi?}~1xQmB$eP{0UV38>y2iV0( zAR={6d@f+9<_@6~jX#RjvT|g&X>nY@RrMo%@i!2rTl0S-b!3OuEWl{RR(h z3VX$r^XXm-)mLMq?B>aH$l^2=1;4q>4*yTH3C`{^E(vpitX75VTCGX-Eu`#b)H*p` z0Krt190eNkJ7u8c1+{c+u9a7PskSxmzI5eD&|g%OnPO z%a8Nl)v~4}mqAW;<(}DXZORo~OcdW$?TCB??*fv0jwO0XMK(LfTZca>c&6?|0SMam;VqNj6u zzS?X^$=Uif+eid$9B7NI^Ym+WTXv%zYneners5{j+K7><`Z|2IAjvJtvK6=kuN6Nl zIX^HsH+h(8N+{Oq#A6=lbrtgU7SGG}fUV#6VAia(o~L9t-9SaC2#9tFj}Oj2;GXzP?e` z@(CU(o|?W;kKBKU*<3YNR2CRUCZzWlU$6$kuBABe!}@>Ll`Yc@V@gVmm=^<#_#bit z5e!Rxrlf47f3wm558Trne@5h=N#459xT0BH$~}EbDEeDs0Fnt+r(dekx*+;bYvLmZ z!c{Yp@D))jL`JiWFf(}{7B4ir$L%-PmB=z_4J)CdYEfc@L+gNL+G3u+o?_s}pUOS8zBPl9zYrCe1w6=^(8g4QUj#Nr}KR+Wr zs9yOl?DoJB&%e>i|8fcWcbh2)3cCFBP_mitJoVj#qn`IUm{ecTW4@1}F(Hr#wg$1`A$6ao>;jz(mVTC>1eJu8B9B*Nk7#hSD z?wBPuC*Ip;`(5SQ!5`OX)?^d=3es&@8sHCQ1md~K5d;3z$unp*<@*kna0SVV zUU|-m6?kPP7w8tUm|(w~D60j1V5vo1CWOlGzD-{Js6YApkN=DEEp1yHxS2brVczEO zWv$u)7MrdV>-j0G)Ypfs!Nk;X>vH`)9m?Y$!WdnWv`$hb5R2#Vx9w_mJPAn_ zg)kYi=J}5t8KxBq)<4t~Pp<3Z`-9%%rt!YbQ+%5_d>jwmx_;{9?3^?FmyKdmY^O#% zd9*i#f&iH{Q0T{vzx{VE)%=?XMHkf{${%25qQKb%W;Sue$SZ=H+#mfgh4j=Q>jL2DsR5%v)iSZ!0K1d6T#Gp$EDT|eRy&dyuL#of>tZ=t@@fD$s_8pJmq#0&3& zxfp=KBD6L28r01ku&Vmi07V$ zQD^iH4J}m|qi~`-<`!~oES>r}_8<%$qu0)^+P`)?AoEtl)}^BU*nh^)P($2lV4%hG zJpXv~l8lQn?OHD7pvA^Do_WN02xG}DgcujGzH;Ead)}!s4Cxf2%yYv{6xAy)RlyR#v;t;Y|g75-b?32zToV=+S}WA zcFZ7lby^&fg1qD~nAu61&f4Piu}ZzQ zi-%5!anT}QQ)Aa8{=U*@+#1hW9RHAiqpbYBfA;t;B&)8jj_fn2R#0nn*zBK}P`>y? z@x{osqi9JlzY6Ws!WPEzH*01@K7Ne%wAGu72NRnl`hki_2fMzD4 zfOaF6Z1KGOe2Xd#r=Zvb{c<%x>kmpEFJsC<|G5+(n$A_h z5qY(c{7RGo{)~6SA*Vws7gmn?(7~^zfrPM&S7USb)bG4k|2iIED;G`T$G#ppO7Td2MWw@JHg!xQDVY@dAB9&3H?6mQJwwtz-wS=!*YA5R z5iKht>I2?sJKDL-fqx#gJdQtJPkZ{LF6Y0ae_>a*kjl~UT-^uSR(cie>XHaBMyyHY z^E#GNZ_bjr9rM-bONxsJhlYj*23V7249Z>qBr(&d(BR_X;{$g5oFi4123K5EG|O(I zU}IyW@wA)Ra=L^)S%x8T|FC9Rr^@0JFjF}>bR{CdX#Ub|c>=A@bz0bA8}qg;Vwno& zy56^Mq$(Y^hYk*`x;-Jj{ryry3KkX?S`3Nexxzv7RvclX*e_qc`|_c_zMhDfIJq%Y z53Nm0e!+%jd0j*&U{Nk6lU&H8>wBL+YXLt;YU%mwcOPjywY`>gTtp~z>8Xs)mLw5s zh!3uoE>KN}Z>+-a+)F#4EZ9fKL|}YBh(dh5xk`^HYHF745r!@D6d1lHk+<3uZ2sy% zgZ6Ue@`!s+gSpeuasQp5R>*e%?I=Sq24M!RV0X#RnMtU!=dtDrugFE{S}8}MBXX5w z#Mg?A=*wmFA2djr8vW$tWN~q^wzf9ShT!vU%%I7*85=Q&6%8%z8RI)nPW*RYtY*rD zb4SZ^V;>cDb&n1DNZuP8Zn2YsN7ySQ*tb_~zyj($mpi(FJxR96VY z4(n)G`12w#7~6mui)`4|=1ixy^{{4eP(Z%Z;Iv*VOXWHRD}{DYbp6@EkDCZ-iNAt6CJk-^w1Dw)-^!VnF< zazEP_&rST8Umkg_pF-iP(lEd6kO0v$sj#eIw0d4uHtow7M056+6Y!D=M}xu*?bXS8)Ca>MQTnDjY2QV;#jJ%{3cI0#(Kb)Z%q zz06y*3xYzyKQ|;VUq*@Fm}Yu$(9@%;!_r_z-BQKx7J*`zt>agMf|=GYnG`8-krUr( zUQH;;fByVAdw5vj{s5Aw{DuFlNAL-2G1t$8p`pH>jYw8O0n5W2CqYY1E%X;@xmqM` zcMiPad1xqHTxV5Y}uQL5WQiZ+BA6%_@Z(R_`qsg-wp-^E%4 zBTHDW7XB(!*X+=|^*5v%QYHAr%!B_4Pb9G`@o-9_vw@GqcRfjs@n*__*)z!|v2|Wv#YdD@Y91w_Ua(vXFIN9A&JckOCZ8Oc=-4?6!Fc_U~a0f0W8v=2f7n6>tsh?A&ujhSF z?)!(Z`BniUL`OdD@5kWSj87Uy+5-(ij7K89^hl}XEu#~L;W9twRXNw;buMO3%E~GX zw49!NOyusNqN-@2KqnK77SLK^F(orwZUOTJB9cyU?XdeRpaQ+d!vW?#EQoNzXhR=> zjaXVU><<@%pg5I2?Trb67tXvdWhOxF*m&!&t}ZgfvWKbv5qj0ZW6-)u7Y=&q4`G&~ zh#CPu57dt`9aGp=Q_->(fDrJOU)mktwC=V<^57Dr3Dst0V}S#2-qRKo3pKZ!mX{ z$=x3)iKe??zVY-{RE(RnI6S}5(gpr0A|j%sgmbt(y5m$2)VXSosfoV44{~zf`ive; zg{wq{WwRCqW4Gvlu{GO#{(Q{u+RFtf=bi}T3u?j+? zIBHsMEM;;=#?tI;UkQd(t}<`G9_>S*e=kjavzRP?0&9bU`KC!#I zJ3JhDNS%NUIF9LX#%Ayp+~Tj<(b2X8*z8d=Q3@>gwRlR&n)#O}<0ptmfzEpPiiz)Qgvwm#=q6ty_KV z-98UNBc7U@Lx%LkkTEhc3fip*IXSV3DI6G0RZ>(WAp9nkXHb3< z&3hCY6JrXSs$fYPGd(pW9=FjMhO@r5HiC&yNGORJ*s-eD{+fc~mx`r^1`%tDn3$M$ zqwAsr(IlJJoqxgaHzrX=B)pm+)GMI+S)Q+K~$>&kt#^U?-%?<5q6j;m~mgddgb2q)EBQ? z_H8(TsuAJgWBZqfhldnjel#_uzf~%l9AjG?8(VX309l`?XeWUEB&4K6GXj6?LYznR zrbGH7zIGY0faE0Gu&bx1G72t^a?^qP9M`jK3Q9;s1X@gi#uixYsF`x1vQ-2XJ-rOY z7lJ79JjGpyIv!r$MH?42H8n7HT3RIcDHU|X>!%0Kygviv3Wzyvv^+c-bV?=4|0J7^ zN#`kE?2DKX-6wW@*N1m&(y`@8tAPB;XVye5s=29s-8SXhC4rZX1_ zZ9;esO+*((;(!8lf>c-YtCXJgFwvZ|Gl%dT0|SF3GUHF561oh+z?2aYQB+bQJ}i22 z`_S1b8b=8pCa})|H`K`CZE9+2)>TSLplv!mj?DLu7&|sBie$%9N|sK~&&~ZDH3LXZ zGVWJVQKcIF{ng?77bE+ZRaI3)QNfgw6PUT9AL1y*6a=4catAhvSWQs(&S?{VHa3#X ze!~?bM1^-=l%c|@AX29NWN2t;WJEbv-)>ULO%lDaVN^M*rJx`jXJlbPOJu(3a0{>! zJst|{pYE?F$QB7%>Hwj1uEk*5FB*aq(FM@L52PJ?@9*~1 z@)^HMN~U(5?CtGCFvv`%lVvR}>D*CBV|s{ro$2oeb2I6bxHyMDuOe$j5+m%9Qc7~L zv5}i^oVr?#Ub;8!xP?SVqi?wlf?Q979?yvx78)vZxPXTC_22D%p>iChIZLv56j2wm zk}*s2{Gkb-WJrgCf`VUk-t@jKReaC7zPIO2NJKQnmk*r=%u>l|X=%yH$w^5xcoF=h z0F>s^gcmb{=ZzlHv3{B~XfgrS-qFGO&(_h=@wmTb$F=IQ=;U|`@&(8A12tGY$JqVt~h{WIbWfI>n zBF(}vB%-KC?$m>@10e54Aeg+qf9yr9n6+waJU!nYel3A}o0C@mN?jQ3+LdpoPBD&> zdwp+HB<{Oh!Fz2`y{^EJcztegLzn$LWv_G{3=Hntx zz>IPq9vzu%72Qb`D(8@8w&|5=6pLhI4w3^B%j#W-Cm{$6pvBvZ!p7*=T{YcS)4&?X=^3DxE12K207Djk-TFr>@%?4}*m+oQJ$)Po6` zi^RQ&bW$aE6!u{=yHJVEY`}_q}$Ob+JY?w1hit6eLF4?J5rXzqoZxi&6$&BaK%2mxXd3qrw($sUzo8Cm~o_j zqW$FPSgBKLYhhu)z%4u85sU^x+K--`-Lc?c_>hiOCmsdol>9F>{&RpkWYntlU5cZ@ z4jYLi;xPjV<^!daoSey2E1(uS1MHA9!dwn(xyfeO#4kbMk5-4 z08>$W2DzwdVR3PkxvH8P0nd*%J*H%tKVw9)<2>nqsUYMa3gAOjRNW?(by_7;Q!3Am zk*t4-OA=`?AELC%yadzEy>0sZAt|>5uu4NJu4EJuUe z{-I2(>}C=-X2$01>>LfSSW(fy`Y9##-@J}(ab{+w_q!>PB}eM$t!U5)Ta-yUh_-$4 z)T51D_ur#P`8604HH%e%+X9=#$M4xbk0Irk8fWu}!+t@4gVV8nPDe`{i@obqkM&wS z%Z@aL8UUVlH$EL#S1xRnAd%6DiNKBA=TFwbZL*5!7xuQO#Njy??)-C0CU&3?sWSQA zS6%I}MgY~BEhQ4$qY?D7i^vTEhYhF;S8bns_rN1?4oroWwenf}oT*JH z;`PEv5kktkD9#U#)Wf)G#Nt$~1oVSp_IIAXdVaM_Y#bcl5);?8w}Yw7WQk=jrepvEKmFBGZFaMq&$*~!ZOF?{L(2694>XNi~LobBL;g~CSo6> zCBVUUL7HskFUq1t<4I0$Rj+K}(4fhmfzaOWEv7J@H-?1W=T^WfLi6xK3`z)EattD# zX!%pLLai{3AwfJsbkOFSCJy)9wIz0-Kst{`IP<3-6X&add5pFEa`H4b?S-kU;^nIl zD*+4J=lV+4K=M895}zcQLsEG@N$6JU!$U?6_Qwt*2iK-##a-@#^Y;;O5P{!n&4+s_ zv|kq9CU~2bH_l8bFHCLan?soD78yA?iPML^j(mK3oX;&y@Mm&!>UNj6QKzV9e9aj~ zC}RHbyLnO1>-AGnSSX0no4935HmF6MDxs01(}_!VoR3H^m*|!&$O7uZ>OR9#5Mciu zSsro9yO2JkgN9sm2YI6zp;kSAyZvi4!WfA&*X=YpNbJ2jrd*1^wo~xw?Vb0vRF|HO zyp5M1lLy}*!*sghuAv2crH%d2E*npJOU{o%?7kXp?Vgv>x(XAltE&+&kfC%ITlL&q zQ>P4=YT#VQH9(D1!oO=>{<}Q!b>84b?(=mUI@Z&+Pk|kPSUykVP&OmhsP3{`@8EU1 zz(N_-({z{`y6a z3!tB-#y=aN9z;OaE(JDeX-@08&f6$L)L_|Ej?JyDoYEf~V`GZST>U$l`|u8_$bo{D zCWC;{r3HO?`*yb0-cV4L=Jo3ilgiDF4SL1Ut*uQKsd931I=)sTxdSzL zb*UrE(HPNoxuqP=4VHr`F_qi40*>9+uE#5S8*#6FY6u1g2LS_E{Oi}B;bGl62V+xH zYGh6VR1mj#|8B%#K$l74b~FKS2=GE}0SIK?H~RUp3kwVW{?OIwEoP%R{2o_Erlz(4 zc|ASc8XFt$PnRC=U4Pl!|6~0M6Y%q3d&)RQ0_j^V0*Tai}cURy+Y!uT!KCRTjVOTf&9Ob`Xo`!A(LqMJ_ zJgZQ_ZYl7$5xiB;Yl9K#2xcVnBxk3fh*YW>*aT~@egXEhukRL6F2Ec%muEC1FZZVz zwd=oPA?A*PlK1DAUL46XG@Y9cg_9Pzz21U1-`;70RCRBEKN&N=@B8>}(y+|U$Z9oa zC=Rt8Dlx|&Ai$so>vsf${0{o^{O3P`e#bHyjb#--db94U)vFk_bK3Z%@WYBhBZ4UyL18`wMhI_vm8%w!Kr7Q&! z655N)J{U}F3fI*jgz1t&5gx_6wll2PY;@-)R<3V6*1jhl9y2~WZR6ljiDz;f-t8K# zUtK5K`uNlp=D|pI`@skb-U#i1CTYr7pFe*a`M6p+JVb7`)+J;4)j~{(e0|9bQNkxZ1NWE`Xfk}X&`I?Ymzs`VT zL}caTbBnK=QQKbVM_2Ikr^W5r=8wZiHbFKvr;Xk(MXIGw59h=Dq!{zw&9c4y{Tk&4 zU4ZTk_l5uf1^KA09Tl7t8XBr+qiSLCQVAn4F$1OI~eJ(Y(#ItQR3_I2lH!1P&URkD@sfP14uIE+P8RpFe+2O-;QIK_`sr zj*LVtSF_?stqZd;S5#6u1|rtqxCaK5=6iFq4sAkCrYzue1~!p7$g8TWp<9!f4U?V~ zdSlm|vA~6B>wt(bko*~;SVi;W-)&@Mq|D>m#`%M_^bHdYNV_9S>FQrK?{4 zR#m7^HOp`7%o}`KTtf9Q|U;^5-jQ>X~LjLnlz`Ij#uIv9a|1Rp= z9M}if;ubh^r(=hX9KdJL8K%I))TOWT<6PLPy zg=!YGp@%?(A-*H({=vVOBJZ`R@Uk7y>w{Tf@DRhHX;B}s6yG9xje}*%d;)<% zP%q#e2v2SgWMG95g=Jnbu4@PUJIn8A_vPi~-QM0V;MV+Ix&Y*G@EPcp3tWGS2LLzy z{kwpdQ79`A|M{9_PG(rz&Lm)C-mPzMVY0lXi)K`-Rs)Ssw%@Q>S;$2@hkB_)6=15# zM+T(34466B!r#)UA) zSj=!i91nOx_?x5U0iN(tGtad!Y7jJQtY+ImwSgHedYy~s$^y_w8(?glT^Bx(-iKs< z?M&=L`dZ-`GjIrBo-#9vEI{Ebu4yNj&4=~JPA70647sP@#J)LmZxi7coBI& zf9_>?96|YlLvx-~K!OG&B%Sd_m*XW60a;WeL0kbv<^x~19O?kwIMCleGHPjQDN8ke zbGoijt5KZ6>%yQE1FFSA$LxJ>(&*0i+K=CF)*S`1A z#QcL1rMzHTh>;jQRsQnZn^Odgh97-Ou;{!rUjs#iYZp%ry(p* zN0qV@7VQ>!bhHaV7qzy&04m)V0_I>z*(%d9BVjWdX7h@y{JF|?m~HS4V04(j}KZj30z`C*ePUj>r|QNpec+o6NseYU2Ai5 za|Z_pjg5TqeUx|+J&}X~20P&g%j!><4m;1|LWklk@n=c=lAFnho2otV06LoXgcwLVE3=Nt5 zL4f@D^=pF!R48-eb?mcc`qvjzTaMKs=e^W#NRh8kB<>wgw1}K!J^Ye%KZSMF+W~ zfQ`-m@uRop_rikKZ_x^XvU=FaksiNnhUy3kH@I-8!-rALxHE8^&Qr|KKKBrI*g~+On-I%u{>!) zO~b7}$p>lyZA|84lx#z}t0^x%BthLxW_o&))liV6U_(v;Zga?=Y7 zV2#XMP?zF)V+R4W=xTm9Du1Ve2u&@q%u#+8sBzy)(BPh6NmHJvwT2^;$&^ zP(p3%{I66QP?V(HV0e&O1^&uHSWmO2nP?~|@A06JMGc$#jP8JtTzl)$J3MTvi4ge} zF{s^m;2S>xxu6na=e%-QfVcI{C!?5$(-||L~bHJK8ehO+`syXV{VjJ?i$HzqI zaAEh7!83^q{Dyb8o!R8Tovm`t^qFlOdTLlqQ+Yaq=E2<9W#8NbW@-Oj}%`#gVF=v9tVM|+Hr zfJdNePb1_UAJ)8Y(*{Z+Ky5_Zv1bIi4X2Zuxj5qpDjXzho$s zWH1IAq5)Nhhw7Ak-gNTef(s8Klq7TVV|hGn(N7zRs8!Nqxjf~1uG}&TEU=Y*qt#I2 zZJo${FZ92PJL{;Z`*z(ADIJ1{bcZ6{QX(}-i-aN#l0&C-h%^$?Qc@xyB2p59l(c|= zfQqyr9RdR99-sF;>)Cns-sh}!et)2A7=~Yb^ZH!Z&G9KQHm01)rr>-3PlQ0jX{*wP z9_|F3N(2SESX@e$^KSB|;_;SBc(wj^KNP`_cQhRciyUeWO>*cAu1~Zh@Bpl*PT8YY zPcD;fS`Q#n&Vwm!7+)@YPm&cO!y0lzANua)uk|39q&3d0M)O*~VYlHB$F@$Jf0)}! zqQHqiyR-Sepe-T*`HU?zcd(6zcu1X8!uGu>f2t+m_`Q#}MP5%5snsrR;nm0B5wgn5 z|4Ql{`7SfaGmN-DJ+npz0?sXdu3$uNzvI(*&yUtZ;`f>agNrz^F&U~`G32ns-#&G{ ztL#Jr?@MaU;WrCW<0vaFo$cJUYJR=ZhpB#}aqO;t)*DaE3%F7t&h<9MNhpW?wMoLI z0oHTxZ;s3eH+2o~S?PCOIHLBGk%gs{UCq9aZv`JHk<83_rKOSkJ2t@2y}iBf(%S!+ z*8xeh*YeeAb?%+KB@R$%CH_A#b4mOY0Q3$HYwS(|m*~LR170lOCK)!iXVuk0->S?l zEVOx!vtZAerpDpEodic>;_tg*1P3iFSjsGqy^myw1YT^o;XZo!l%T7l!^6{)8-c;0DW{Q!|=>_q!>^0O`X&zDAJH8ahi!0PGh zIuEqvmR3~AJlN+Ed(F3O-4B$@niDTpi51jyiX1j%!_0b6yoV7!NyH5%vfLZpmV#9V zeRTJDs7wwE0AoT!A+ik3!f=Jh0;Ie>f)utvDXFO@pG3eCKo5A;%Zu@1%HR?yt>}xI znhS_HMp)%>~!5$fvKhaacNvR0vGcK<8WwLfZkfFh+($`$RE9m-Ejz9RdX+}9P zjV<-4t&$2>&hrFJ-qMYC4o>}@nwu|D`Sn_aILSv>cF^ZudV z=|q*q1p*Mcme<$gVEAgM7wRt93M;Y|7L5bdyi~X7*)x7Y9$>HLTl8Mj4aplJP`o6amNCGjjv5H-{%fbpF=H; z>?H~iB|$i*A@Q<4`}xQ_ckkYim*4e02`9X0lcAxh84oc3)h$Yp_Ag$z03dN{YD$qs z8!WN6iuB3~Z5s*;JAQfsn*qHbC-784N-C?$KW&!eXYRWS(xi*r(LI&~Fe7wD!N<@N zvLQb#xGr-4GA+jn3Jb%I%Gde=M5lCuO5MO9O@T##CRVlZE|@Yz;BgbREF&CgXVXbfLj#kc3|z5APG+=ZiqL6K(r8eQ^-A zulZb3!Ue4;MYUY7%!n866cUL9=?^v-BoU#d{5u$vPceh#%Jo3iw6D1nI7NIRARJRb zoX|Y?ct&bktCzST&Rgm!v?opuj;AvIpJ$zcltkt8P(>T@D&qqqK7MEeIOBZehu&Ur z6+}jw1tfz5mnxcFR8*9gw*p*>(iHEOb|@$)kclzT(bu4bFA4C=J2Z|x>d z2jULEqWt_2wjMCK3V-~tux-&52jJE^4H&<@gM$>Dp`!NI))to*M-nh8u%$SQb4A%X zI6UK0Ef}T~cSfX4YZ~J&8o);_>%O$$j{4E!VO*)t@_5&xxm5S^C>L&2zNKJ#`|LNP zTT%JRste8j$684?CQ#q@u$gd0Lld3je4Vj zSMh}cnfsipK-qG~g@*yu^XT7o0_#JEx{U5z0=;&3aEkykPb96Zq-Tvi~- zT3cJ2o97$wKqnK;jLqkIgC5Bw=}3U9ie_q`!y_df>_Z!vk)6VH&o6HN5=7LL4NnBrVpY-6IzPbQ5#Mx$^tS`4&M~ zhdEp)bU_DE&>Cy*{M_^9J0N07nmyiV0k4rVm8*rt-08_Nm_Rz?83#8SrE6tX#?yHt z8Yo^78u4CyMLp~RJhx`jp&S3ew@D>0fgHRVAwF|UgE`7^T-%Bg9yeZv(5yq_cPnH= zx^|BBhO;5FH6j{};HE;)`tCZm(&8~a>OY$$Hs4dQJ|C!#1w>W55j<(~@@;TE(BB4g zWCzv9Lq}GmoWCKSI|2*=r;wszc#q|WzCMNH#9w!XQwh&|p}1OabN^PY1))c5NWr_k%qE?)&iv+IhliQT@Y4LPR1)cA1Egp& zCK}=bvTZne=C%yV^@{ZR-sh zTI;3N7Xh9%<$tMITu?9v^9OWAHY5R9n&iGYi~sU#)+tr+Ae=C8mzjhX#~>SE#PT?I zr}fPMHEfUVioioO9-fJb==TMeUQn$0#et=rk&hp_fSF&udNp=%sSCz~&Q8}IquaQW zNT2pR+dCXd?3|ncx?kJLktx82Y3e5!RJs+Ei=1GD7a9Q{NJ1X-V}RyJFfP#yK9&GS z&v^<8Fd4Pag0I;o;EJRqdJ3=<)TSJpnQ^S0f`|faafW#cCLQ!jbz$1^ZEA*PQ2o5H zI!wTQ=2f{2(M30DX=vz3B1TpeCT%m6z7W_E<_xwt&tf7}3UwZQr2&?<0Q(THJ{YzFjXN)a6~io!Jw-Jg$Fzt9 zs;8XP4*c|tr<2er9uc6(>cfF8O;V3#ca1{+pxPdDYLuHgoE(h*&!vQrF!2J+>WZZu z9~)cP@=i=jBF4qaK!FR$@}p3!NM`@CU%tFehEnx_YyI!}o+KONEdP&6@eEf}dtq8q z2@W)Mlj^_@t!hBE#kL zZ0zjhw};Q3i?)B`;68U$C-#t7Q5(D(j!r`2a1KBgWRK0wFa^=>g^k|WI$WZ88s_3f zP@mozbzGVKK@~vHc+mW_%77LpY(=VLc9&~>XdmIX=!}p)kLqeT;ipaA)^w#cUh!A3VKCuvlzb6)ksw>P|UZkeL#tf@_B30y)aU! zlbox08}#XfcR$a$j2HlF=0({be{wp$A<9@&8#pt0NuF$vcU)Gj$TObvDI3POr2YMi znHi^Mf)a1PsFm(!jU486U?Ldr@O<_3P)|`=Pga$EZD8zRcNt~xHX@8jn_f@N%#78z zuWD10>@||bPPF*Lb@lfyy>aE(oUKbEMlLM2KE58Cd%We%5`qW#w*T_;Z+TD%@SC%?SuRcbsdehAM(M6VO@?8u_>wzK_5hG_U5IQ{ zRLqfdRdW4E-`wmV2uD<+O!=k1soM*rO<}&Zy$Xr54}Y%{`F9lX!Lcf8`0Us;0`F|6 zN=-fH>^+FI8$TY-!-`-mLoCu;H{T4ziZFqmb)<^kpjDcK-}We zQl(Kn2;LOo;KPA&3kIg_?AZ6pm*n2>00DQ@RO9h2OUB8YoHDL1EW*EGW zXr0{Yt4!eOZ@{_0nZ5RoySF_SfgQg^A5v$7n$mlecS#_+r(bEDoseA|3cmIx^~XG-}mhNLRkhGCs8kf&XAdP z-_ygHt~ikwhC5qsgDL)dV?D=9D0%;5co5rqPXYorrvZ$8mGv6Q+pxzlgA)R3?FjoV>GiYGHdmNfQX*;{3edR>wtX4%<#^S35!E1XBG0 zFKpQ6_wm=WIGIc}4$AMY^`mwo1ePs~ejvgC)dt?H_Nd45 z6|{Re1Wcf@9>8i)#-`?u=h4xTZ}Esv7roc=-VyuFC(zWHA}Bl{(D-W>jojf5y)?s` z`e2&%@p`CQ=-ZUSgD**BG?LvZsn0(|Zxy%$G6&WlO8Sf@))A4AAu8n)BO|QKMRFni z?m5eMft^3xg_fkU$PB^xbBJ>~Aw* zAdtueUnFF5GBXs-%*;GIL|m1gf&m1zOZM#z88|5>hK3Rn5^{A)X=rFB+CAi0SXdew z8)2%QK>?VT!)+VUlaz2;0*3a|mSw_nY>5fP(gp``TCfJZd5e_Ekd7$6n^;sY4>#^Hui zLdc9SMRjm(V=8zAlKKgUkAwJ!2`*Cy?0B~p@tV%Y!zR%0b9sooSl$=b<5T&D!!?&bjN>+_jy86JOA3$D%ew{SLagP|qE zSEuGf>z4!0W#`Gs^Tt=j941;{xTBNCCwt>CNL;ykm0sF+7bsmOoVatvXB*-5&o!&y zEP(Gcfy2NPqOI7249!WdB|#g{=p>!jpQ%CS76#bPSlV;r!PT!`6{)4a0v>}>V5-%MUxq|Pi*FFJ(ZJ*@ z1ph1P`G4^%u$q##xA@0|by(y~+U7&PO3B;!^NF8}Xy5zZ`)wIF#2I5|-6hAZK2DNe zxxulVfwU1VvKG|6@zT*?W%mm~d}S1)LIg1(k;Pho>kB2tgx=RZ%uZD%W4mto_#=6Ku2Ws7DgTXh z$mJ_yTzGhjS4tVyyaFYh85rBzf(WqciGKNca{QH1$MPLFg-jYa-eJfCtq10J3S%(C z8E0o@W=?Tp5hioMz(G6QoiSUU$o-ZIi=6C)pv+ z&W&Fff|rEV_+5%2FBe`Y9^2&9WTPbTRLZp_7Z@r)KxEIY-U#SkNqfvCAtfFvH;Th5 zyRqlM8(~f0#(E@J*H+0*PEL*$SnK@P3PP8$`*xh z;71^#T)zRgQzrfa?UV-1T?_j-Scvzr^8!uRc{n-?cUopPApgG8=Cc7gT-q<~l?lDe z4One+7?r8?auf=oOWR*k9I6b!#I2!$iyk;L`>ml&p@HQrYg+I{9|Ev8#Q5Z7W=8uF z#PJOU&LYs&29gK&4TqRvL_sIe@g%9{p614!qDbaue(7_FiFr-FvI1NA9}+mr7kGFR z=4m_1sZ6;XLPEmfbICzl?n5q>;mU6IBOkv@`+Te=GVvOwrBTJhW+DsH!V|rllWZ=) zoCNt-gXcpx0GD%xy%DAHzg>o3mV&a~!fYLseGo36`+IRYT%N`4q4O8NVR%5Jb_`t` zWYLi()0}j&#{2;xa(PVDQ}4g>lSfCsnDqYuwB@x?Lt%<&&9BqXJm1W-c`8#;A|qGJ z-K%>}CR|$y0Q}gCm=>itG zuSnq1CwB->E5uD(5@3a!az$UzQ`O!5bxR08WZxQ$ zctO|JDNRgF41+tw74ztkR@s<*-phuDj7$uuap36!dyI27lpmD!cyxp9|ecc(1ElcZH-LvaOmj zp2l_GtY|qz#-1XRaPsorL*vM>8;m2(%JExMNOZqST_RU^wy$~c)nwwU@1uMakw0DR!0O&r$u@9XR8 z@*DE@^rZ_ySjf@w>MgU*cNjt7Hq4bv>Pb#bJ@|N&Pee?NReQ)rSTvIu`e}_uG4wCk zK1_ea7{WKx2nS_I$%0qWl8sL=>R@Nk7~$NQ=NBJ6=heLc(dN~$$%&(GSlzrZRFfp#qZ@d5~@6ZM~f9d#W)z=CmXD;KwmE*pS^`%G8 zRW)t6g4Yfgt@(cBP(_a~VAf4 z<^yI5?E)niNhLi!&~BCIuF}l%r3Mfv=VD}~x2^s7@nd<}G(u?q5%>w#@d*IiX5~{S z-~@YvuP8=|70jF9K;ccj!oh*d4L*ZZbcdk?P<=ArMid8*8IOxieQIpys?y|qQC1!g z!c?#yYroar@)O3%)gqhY{Iy8_CyxHRSZLzq(lw2o?T4%0b|PlABd0nz2+qK5rpAX` z+zC}XP_V&KJbuf!LUR1M5khOzTeCZ*w=G%cixnfz9>r+Q1U(jUijArhggpGWiPB8N zVWY}$%~OqwlK1YL7q4GarUY(&d&k%O3)AqFD@z&~%##dZh}0)f1d~!7hN|F-z`~@s z6TMcbKAI1nh*7yFV^T!1M)q^)GcY0&67F0S?7I*md7%qitIVfB=@56m?y*!^%A3jM zCscRxn6!=_;V~fP{iW~irw>v9_rHIa_MS`ky<2mKhxaRuG;+CbyfJCz5R8g=k@(BI zSx(M?N2XnYDQKDc%gU|kUBu9Yin8Js=70i=(ER5^ntz=}&lR&fhQ%_JD~Ty?4Lag? z#opieDl6V7X)xQJqdY?O2)ZL`@)Zu^i~qqrVOG=XN%;OC+podE)6g~$wpwM3U=?R% zG_5HOzAAXEX=ooPY~*7$f~GHZHoh}boOcbWnwqr7*urlBR8C`@^GV+RXDA($*Dp0TrMW1ha#!Wz{6KTe?UU8OrGUp&Ij#wIKxG917V zt5HlyO6p{9p`L9N1?z`&wNHUmx>wvI&;f&D5;kN}VPSgzV!#h6JXmC?sKCf2tPXq< zYG+iAN5?VH(w6C7KCTo})SjK41s14=w=}IoDFQ$dxN}7NFz5Z;k?#2mc-Wu{LxT8} zQx<3*jPXV1YVOc)(g--m$tPNZ900$qQHBem$~odL=0-+FYHCFBU8^m#`s9$GwXnFy zn|c-rYa9|%Qf0B~m$OFPB&YR9^#q|e{sGT3H z1Tw(mhT~kKqMp-rE;BR!M!GUNvf#4)fgO_AtB)zZlOm&Ncmk#> zn?jv*h%kVRUpocUd7)0J0Z;Q>+_mp>bKn?-IO>O|$;t1DWZ01Tvv|ZV0DZBqL*|e} ziiM@kt_B*2K!KsI?r2B!#h;#y8pVL(q!=_oJNO9!KKQ&nUwK>37PX6sFd}aR~fNo*?2cVZ$Rzl21uPjBHLr75|)wp;B3A#0|bU8c?H_?oY3<&jV zTMhMW6r*Cy0K5<6$TFTkAEIR4`3qQtt2iC@bzmmoix{8zLqT4Zl|iELD2EYji8Xh) zqvVyykcpDn0}xy+|3qtlok%yI0kzzOad_C1?hhcEEL#?wrU5 zL4^iuHsrRq)Gk-*)K4k`0EWQ$fdj`XjZ93aBw9k^y2BjgI>zTg#+Bfo7_$+EXa5ia z_=#-XQAb-{jQ4oQArqjLqhG2EUgKpkb?xMLrl#Zl5K}HgXDmcTm6VhOQG)_WQ@mzob~u>jR6lB3i3-jJC&mHg=zYOvCe7roXlI9 z#)UH|E@bIMrSL%hAFW^8UNOU7Rkk}n0r{Hclc1|{ZH`_0%q6Zcu6 zt=FKKJZ{)Jh|>OWfC_V97OWi4fjB!GvdX~7#3Y{K%bbyyr`zwrcrC8icgpXSzp1Dg zn03zOJRi~4eysn^d|F)VfC>33FAoFB3P_r;e0)_=)6B!&J@-C4;u}=;T3-72`SWEm zykCAYirOHQz@b_QT@_6CcB5QHXG}owAwJGP>m^PHBKNYv@@2^P@7}%MQV#droib7Z zv`6g^5I6z83<26IgS9PhIA29=2Y*`!2X}Eg$h13%7LbrJFg%5Xd3yRK28MMLv50nN zs5a1kl`4A7PO+Wll~)3Po+U>T{-p}4=WP=O-5X&5)<`}58 z;pqwSYj8dE8I!Uh!TR)+4f%SG!tKIUDneu;l)r$K%YPAVV@;NnyrGHZ_@+s$o}C}8 z&5^_$5uVRgHuhni0U&Q#S+s-)g#G)jIrC0RdWxSr!^l#HS<c1bKKW#PE{=FOXYTg8ZWm}-JG?!A1A zwUk&6@o@NwT#6ZO?fTt$FpQ|D@H*>TlR-ELG~JdHN0l`>$e5Cgvk z42l@FIc=s7Y5v=S;opB?+7caYeyUYgtjdNUW2RiRtr-l9C}@!?7tR058Gft`f4<{F z6eO1G$fdP4OU6RI)g{28=_YjYy->=yLg&(_9X#iz-kQAn!;Ye&zgTE>@0cr2rgAi% z{Q7~j0Ipl6(2%;lllZ?OzF_|3K(alMl*};16!=4MJCo-5=C^_I^5<>J)c@u!)nzBk zT3e4JBSsxK#%EXbbrpnx0yIc%lpjw{tB){aZ$0mEpPn5e4A)_ZuaaqAUsGd4Hfhy$ zIG_%^=ZG+ z`fP=&HgkR};Yx6k&^pnsu`496)ko+$T)dm~;)~l?6*n%$a`upg7(CZKH7>xP+p&@| z&g=@6SK3>X41YJhHoc2U&Uzk0PHrcUu}GDzW!z@p-QADc=74;!)!5*p`bf92cU5U= zUHQ+|0S(>Hm0XvaOc!?G}yQC3+k651IWaAvF~=Bs7jj zDYO9DLP1n$dZ?F^o!ttu-m9O=E#%R`?!oag_}`9YzTn?nT7-O7PZ_zvh}S$LO1?37d^dC=sYCI zTwqQIwGYDHP(6pkv&03!=L^GXSlEGj3I|a1iNQUv;%vNMdk8x}X>^?8{XF`FeI_?SqI72sp*pP@$mJZxW7i#7VucQag z{%Xm|xO&l|u}PNC6iEDu$#O58rVk_vVQUU24*4k%oh|c$r30PZ+1~y~kSk2{sg%!O zSP#<3kmR+zEM)b8((*@YN=ms&OLOlA#safq5GOeb38)%epEklY4QUN&vR(^m8!DXQL!T?-QXzWQ$D+&Nv z7Y_k2G&dg+G`Qq6U8h~HXHw^kfsC9%DPK@xUs_mTF0=?Ve(Nnj^InS==p~SB@COzh zLcJAsgIAV4iR?GE1dCKpgs~ByD*7|{1;FlKb4^ydLC~oag63-3G}j<3nl4oIb1Kk# z^WA96?}LhU)VRJ$Hg?dn`A4_Qtf{C@i;Ef<5Y0zFEL9$Dc6gA+QRn$swKF7JuYBy; zSuCap8$>txT;7cuj$2(bUh#L*#jq~aeLwK>KlKT$)YC*Fp@Z;ezsZB;WB1k z>$|Fe6JLb)di~OnKBx|!YZLbxJr7e4pF(XG$nk#mEZX_x#qyH!qnm&(qLA zsZ%#sSIFu@=@BjE%UoP9r+#u_d{*Fu&qcs%fMFqB3*a3b}?dT=8o58FUSNydFy3xZB>9H-#1ope=!HW}Xqb>85icf}lb`=P<}kUj+Fp%5c9 zt$TIO%$%GNRrU~7g#<4l0l|B77r6(s0Q&(@3c-^KHG{^k;tPF3?~l-~*_N|3a!{ao6%0R91HGqW|%c^a-HTk{bJJbh!XR zKB*F|M<(90@8E^?<_Dw2*K)Z2kbRo@AV0wQUQthgG1^+j_#G~24!)@00INjN6O!tB z`}cVL5PTvs0nU_0j&fPuvcc10-Bx-UIgUC zGSoN|O|W=BJ4zCWZ|tzM7`R zgDc%}n-Hv5P*!F=aD`^a{O;f(wSYMkVT0m*i%PpUA+rrP4nPt3Cn0F2(*T%Th!?lO zUga~eG_aCEZ7J;?^cM+OX`(B5y-Cq4TVTLNEcAc)AaAWAD|KKrdEzDpA(!cFi9}j4 zQ;43ejh0p+a&=YL-wF*(f5t)FDw>90$|0=F_Bbr9UlawkZIqPs^w9@cuS4Hy-M(#A zjdt%>4DUwC=lz0U^J7B@D6?odKw)U50(9|EJG&o{1N`E%lnu)_jf}j$pDbi(S36!4 z4=H18CtyE@c%W{83(*5wG+#6L6U-j^1_J&c7M~tWV5frm9*R(kN3V<>33Bz*O!HRQ z@e51w{#E5-SR_R?`~}0jVeS#^Y$z{Ybb}R#i;IAuB#fI!>EVh+?}Y5vAN;JTJkFu1 zBY}z?V8?x7+~m9WV+zAOWvK>CqDxY!~NX zEedsJ(Y+?b@Y1P*(&gArQK)h8=`Q%s4&Qva5xi!pn)2S-OEBd8rPAN~Q`HDlQ7?aJ zy@jf68dA>i{58QR^DM!IL3dY^5c(HcXrX&O>Kh*;|nsF1*5)_Af~9g+V4q(u1IIrI@a>*z|c5YDRK2YI%7X>Yt!~FeF58 z^^Gv{86+^!TvkKUH#<&|LNY%qjbDvr%g2Cg6Dpjf;ovnr1%Vli2iC8D3pfSPAf~~s z1W|pes~P;}3PC5j{fiaKflYh$OCRi>uU?dTonDQKg8qf=ihBvmxijXHOZJlf)mBr07xx0B5063#WRbNlk*!`j=D357uAElT4e}MEhkU87Nio6nb*o6tu+j6X7zEW1n+zKZpPHpLze@6ZzAB=1K?TQ>jxZNB!Lt1)MfB(*#C@N79@`J3Oy9QqTgZ!?-m$TJKK6aA{NfAOVd*ROYraP*Y-VpW#e0KHG0;U@-OKCx3BhC%q*#6v+XN z6oMq78-Ri!0ZlnGrk3*cZKIV@77LV#$$ylBu0MouoAndK%Q`ogMAQezy_zVzH-5O| z92;XJEWNln52f@lm4+dlC#I1}#N9&7+}(9_GK6s2HRwJ+u52BS4Ej^|`b0N|E1P`I zqw-wGh4ltIZM8g{41kFgG6j>MC+8^!`uuJ&X^o6Vt(xa|cXfu9aXmDhR=j^$a2|Ls zolZ2Th6~2{TJ;}p-7G!Ka30Nv*6>vyU@!=0?Np|aa;k=VIuzE6k%2*lelToN=exJo zv~Mu^R!H}^Nvczxjg29jHkw+z079h}W`Z1^tM+*f|hdYu=%SU+F0h25Gnp*CNx9*T^P zM$zolMtB1JlIC{cq#v22$jsRAIvDOfD-6_3f8S ztlo#s6|Hv(P{)%ihpX9A7vk2tXqN$tpktR5xz>lf>PK$_&$nAosLeJJOk-`mO=fM9 ze%f!Z*Y>nLUVKlcz~g&#%g~6)b0lW>JHF7F7kl^-!spn%N|e)7v#a9txvL>VfsXA) zV75$^Px#|;Y0s+ZruDM-)rAg~uiDtCueHkU2IBm(ul4P`-Fv^wMEu3@wd`<}vaZlX(<5A*Z-e&=21kA|DHK~TKLKP#5G^%uME9}im}Zl*43 zm-~IralD3WP6LWKyfgbJif$b#&kJ1J@%xL{EmqZ<8l0#MMiahWSr`|a@3^2LH_r;Wk0XIb%FO9%6m<3(NAj<9(B3H^YAT0!lB02 zkN@;v3>yr552D40p_MvbsIHcDpBt}z{KjiB4^}ewFs)#1uoxhUz{SJl=Ql!he$tbz zBiez3C&lesb5{8&gky<=&0@1)ZCL!w3DekLFv_Ck?*8J?t_z_&jgoTEE1Q?FJZ=>&-{r3bcP(>i20?$=-|Ug#aA+rTN=T;J%W5FI|QS(}fx{mk;Od#fV(SlsG? z|6n<}yS5a$Nusfk;eAbwh!Nl-*!&jOt!l~uGHc@M^>=`s> zB@;ju(0+=6ar!Qg1>(r~_qmoIw76G`AGI%4d!zkq_a_B`GGosas(oCGz4W`|jFRxa z-$=O?d#Ib{40Fu#hx$L#!5}n6Vm_B;`*u`^u5%Pum3`u2n!K$t#yrcB(CYfKUB)Ph zy@x$#i*=LMhqXB*7=+| z|FGD{Hd?~_=m||wTv4GEdU)$i@L$pqt=_*HiI179NU^YaY?)$%WRO3RPc3tmazk59 zIcycVxUWrVz9If(_B)=INceOxz#==ho0?GgRKCIlI@e#4Aw?|UR2&6WcDwki z6HsG+k}Rg>G@d`#5dJ}}F72%0m!I98)$n(=$(Dr*_8R<3;Q%O?kbt&?RqMgdxLxbH zOWCAR>dzN*P6ka`^=qd1$FZ5$_HIvKpg3$=z#v*&^a({mw+y+Q~Y^Rt=>M_xrV0mVtQ?$1Nq%v)z;&^!nowF|)^N z^G+3OVw2=I4i?nXGB4Yxe8>W?etfEf^6b8`86i}_G5K|$p|O+@!}PB@V)(e!*}dH_nk=UBrBU&!f1ob} zQ#Q(zF{%g?y+|Oo8W277-Sg8|H=)L+rEu{Qy?OiEbcdd`C*E$ELv(r=!`Jd0OyOI- zGYwWVA6=ipO|=_OC2>I6AL`o-1fJ}1A>B`Y*>msE@75yvj&susO9pJDRsb90t(f8zvbRMszj@DFM#@(iCr|nC|##+{Y*xUC$L#_2;2m@oa=5g-q=D@CW z@Uugr`ADj$kiL28wdmt{CSvVpytXere@6~vhY{@zKkOdX%k(DV#5}=&zkjUL;Xk)F zsofr%`JFrfZsp6h(nE?z^NgF3E7&HDH6`l%Mic|5-ZGhDdum;9|b|YUIasbQ`w}Scqz#sntOPm!x-fVZ^r0Ib9x})^!zFmeZ1IS}B zDozbq#p8iO0_u>kkOHXLB@q3o!(RVO^9^s}N##~{#!aLF6D@7MFr^b&0JS7>1A`}{-plLhu?u+)>A<;GI=iIabDQ$u|$*<&F(|#paZd9xo=?) zK@qF7P;ob5)YGkD1-BHJEe*{$w)$-$PQKxN6U!b>-4@nv> z5{V#EuW1&;L_rnTCJO1e!`j^3obU;C;lt;iP-irn=;-JSgJtK3h1sGUpNk5=`QzH! zheO2--oEvdb`j*zmYall5{bCn5R)R;2pJR@2}z&qbPo+MCd)Xxg1+og}FUGFzfdli?|BDco9+$F98+2=Y;zED-+U) z-8;98Sr%J!bN^7!6p++plm6U8a5$@=tdf96vwmXmS!>L%ejy2axP5ZrPme2p)h(y` zjhA1z&)2xP_MXP9umQjDg9zn@%Z9rYOZBtyvjbD@qpCBf#%ALQq#eEh>ft}J{;2}i z>Yr3^wi$Bp`ckGOgp)0XrL6T3+6>RK0R%u z{4>J8@gNdR=dz6egP8Kv=NB`-LNx%6T*zi~fPf%nX%jBC;`sD^|Pwghj6#E1L2L=k!kb zFk=QA-i_2Q&DLAK+IiGTJU*f|q}|&vE2_0w z(sj#IUluUJ&8!EAooVjH!3aSZ|_dM6D9hHhbf@sJU92P1uf8<%DN(MwqE88+>^+Z!Nfsv zuFVfeJydS#@-RQYc+J60`&0oisvVqJ6S3ble)^pyc9*MHVPWeE2g8hAGNy)bE&S=w z!9Vf^3x#(&Y<|I&;Z-lct08LLOqTvszuP=n_&`;`6Q{B|2-GvqcMuD}tnuYw?j zlO&(N@$va#i}jdgD%pY1k?MknVdYfZb7&FO@_x4<+*1ynyRCuL;z0SqIX_|cXCAbr zAL>_PppEXwd!dx+2igO>w}-8d7rPa#7YAmx#7cNh7u|fekFO8jZiWc;QfEboz9>^n zLyggjbbUzJyV+>5OCv+cp!uFY5$!T_Y3$yg4;Lz2O}Ky8^Lh4r&}}?J*04efb&!0H zX!Dlji~Z|nuj#G)F=Yr%(BQDA+2PWbp3ZbP_R7B!MU%*6 zp{jl0!;Q+EdXHog8m7aM*}OKg?uEzS?v@1Nu)41EA%W13KR6*yLeNadA5ie6|zgTL0dHR zblKIby}EjpzNkVs@^b%S*2h`-v1`@MZAAOKlUh(%+&8t|%i++Q1uMhd?GcSlC=Bw} z#mvby#4B@fY9gm%u-KHcz#`ikmDQ5y#(gYtyO|Kc5*SH$QMXdUFy?!dR*I zuT$1s4A>q3S8WL;eBUylbh@{TT-I#5iq@lR8Ssuvt$9q9#%`)~KPHQ;HK1zVxi%AV z!ftW_`|;j3+;;V@^B^bubgi%J@Cyf9k37a7!5bnqiC8nnguGjIc2VDG=es(J9sKGG zs@T{A+uvQ~&0p}{@6xG_MY)3<7P?lLg4hNMPn^%0wEG>n{C=8bhDb{)$xlzB;gmL{ zt7%aYPPlB#VC=9qde&4Iy67Eb6UBryrc;S{#XHxtR7=X1N_E^r?O+yzdJaf+<45OlMb`&T6PGD^OsE{I9hBNqeX0zMseTw;>?69 zJ69F_p=-`-_&o>jF0Dq{I!c2c$IX`*L-jazZaU-hTdtJFn}lZlPs`U#IpB5CC#l6f z&`cBQI!yFfM}fWK+>=@pE-@|FfPMUaxYdsb@Xf0X!FXK(IKI`f zYN8eWVk_$>R{^nHngqJdg%O7h))Va=C2uAuKP1)fHYmO{6G`%n)LN5HWNmC9OPxPQ zbwPN|QW{2=Uxemb6`7c)T65OKQ%xxHrQ~sQD(x&8`{-4%ux~CR8%$&CtJQA98H>T& z$;tB4?fiF~*7$)9hfJ`TgWJNA`BAv$UrklzZC+=C#4zK+Xc{68=#>slMFrcR2Kt7P zC$m1k(Q{X+ceu`(TDdN%G_;GW4iO}K#qSP`W_#f(d^k!Ts-6cy9q+a-mWk>y*fWpb zM-N;Y>XA?Kx;@qdnOth#y*${DVK(oh3;9vbu1L!!8j$(Gx7cTTAPb?Ph>r2XgCXH^ z90m`@DiXNARtq9utUZDAusQUs%?qi0)#pEtiNgKGMqdthdk}6p)12-uwBTMvI=3=N@IE^W_xw%2p(zpQEPwP3v_T6V$kq?I~+&yrk?~#+uD*V0`%unQ% zhg6rk?EgI8yy_{|Kpb|XJL?J4oqJ*oRYrz?J>6PvSo3?a3&@lA2Vq`I#O>wHOxu{8 z2DbM*ohS{r;<7;e@#h;5G7*P`A+RvrsV!|zR|kiWi@TmTlOe2n9)zub1&_5crxX#z z{q`MTi`|~s07VJu5qZ^KA$H%b2ThSo1ho%tP6{J;2iE%b=jkloY5leJRY721O50P4 zz0qDU$cbsNXTK6TkWAtTAto@S^`uDMV_jP0^cb8okdDK!Xr<>w7uasu3Fowb5tH3) z`3F4}EnF+(rN|$-svidNgQ3%*!>&knKW-P>_P$<~(|iditwmubCt1+U%dcYjQ+W-& zTrzeIOZ5zR7U{4l0T`R%Q?~=&v>?f-!%rikOPTG6zw`d_{%HwU{MGs>o1dzjA3i6b zQ!!)4j6?UW#~n;&=FaxfcIq>#+OH4DG11R_U@vC{`JrEArBnQMlL?2liR&hAr&EPFynYXm?Ri4t}$(v@Mp{FKJZx%cQZ~q(<4#-`az7u!Xr2H z;T=*PFp?`tgN-FrnB!+{Ubw?t3VHn^NL(C2Hx#9s-$HlA@Cyc|8Jep|M;evuLQz=qa&;@As1=m2)fy0J+=Jq zUWc+??qdaCANsR+D)3EC>!$d$f_?6b4^S@au{XlpZV(=*WUMuHP;=euHDVBaAU4K) z+7>ICo`|@dWdBNCU46gx!DaWdYVVvg=}hsNb9g_nu|bL~&?~6qB+%^O=yRH?}raG-OUna2V&)MSH%P3`&B#c zwJyXS4nkkrJv+NBT#*~nh%cGGr-)gBs!I(8K|PlnHeqUoHrqo2>N~! zU5;b4r$;4u?^7y&7!I!?(ame~aMR5BYgw-?ATm~Av_%IVAqV-8eaW{V>6c&SRdkX- zQcTXgI10gE;yjn@#`ByW^J#n&Nj0d=Bc_j7+BbBl8_Q=E?RMhk18XrC>I@t*dV>+Hx!+jdk|3l^N1tl|9 z^rArwDP+ONru~{xAk)tlkwkn{d;w!{I3h)L@-@>l*VX*Tvw%p&XQL=mS<&Hw=%<&m z@vrT+Uo7(;i1DtF{=J<)61bhk)aNtzMZVpo`@)i4Co~`lFOOUQJk%|Hrd$rm7kw_% zTeWu(+t~n~@StBu67G%t-#sND#?Ngra`QTSs0`QtscB*_j>vgd_X4HzGO4B-&q@6y z50$$cA5G)5i{Dx)(6gw{_!?!)jc)f#*DWI1D>9cpDw7+fJ*t$gQ%O6kDj3LzOE++x zOXt{%hCMjJqbgIa4{+Mi6=}yr4KyGGS(+_Qco3YEg z#1HiTi}#s=sbx9-#Wnc9Z62@D+zrGLHMEt0u8YDL5?x$fxm5HLGc%(iYd}s5^}olI z;*79T1~we)2Y=auHS~T98QD6$_BOZT1CEU8)$0EK(26}jc}#6BpA#9)KW**i)y&KO zBU{z8Z@&5`(gCLjQB+ja))(P#FaIh(?{?~VXxc}P8`R-djK+(L%e99cfn?penjupz zy9W$T7bxL?{2pIfa;f=g+M9`OY{|q)ISwR=xJG0XhJuO;j?j+n_&{jsLUC$C+q(CTPEHsY z7>S7>jp&JpITb@8^ihu9DFg9d6rIaCRW$H+uv-7f?k0*d??##VHk`2;CTVw`o=S|p zE}uCN$Ojj8sZUKXnk=ZNL>ti7w5i;9Z+`0?X32tRBNWej@z$P}xh z2m2fu|3N}UJ#`m0FX6s%CWw|k9e>SHke|OdR}%>+G5<09oA=$@tsW{DU%x?^Vl4Sk z;qnzHCwV*-hGQ~0mkyg0wV^_0=k>vtjkQ?8(u&za1vhUy_t=$f>*3fXznrvnOfQ|r z^Q_A~ENzx9Ia#fu1y!PWJ; zQyZ_RcC0eQe@3V{$th~G@sQz>_G6Rup;SMGelr*Ay+6)R(*JcvqMI0xB&!Jz&lVZ% z?e=SY#xg@RaK5BgLtVSLIXz=9*GMmRavVPyOr_eNEf6`dftNS-aBdXYW=I6l#2H$- zxmsY^QWweOtP9}0=w@jAQMqdn8I$_XqRYIR@5MY>2B7Nz(PLHZpFcwB`#>8L<{|9RX)Eiq1O_w+CRR#Ur>+?Xpu~KYmws`!1 z)ztUx1#teC3oqVTR7|xo%^_P+oxmU0HdV5E$Y7qPl z@2-x&CH1U5As}daxY|`!3EFEaQeIhW)wL!LQC#gzaZ&i8_s zC-kLlqm$Qdgh)uvF6XocI-fraAi%#~ce5UCGp3PVE4w4mV0XJFsHx#i43{nV+AS?a z(>W0N5`sq3S6)B7w~r(Ib82`08+AdawwS!z-rhcnpyS|BWJnz2^M6#<(XlQ}6Nsp)s;aga z!GjU9X^!ra5i&_J5xhy~L9=2fjAWEg{ke9`!oreTpY;N%zVTykLVQq$dr2ERuuc-~MubgKwP}1)(@$e0KgBRpl7+QQ7*`*>Z}eE)dpF~>IY<)NMh%4|v+JQV zTh-ij5g7!v<}$J-$w8>dbAA#49W{``QRE%%ak@EH%aYXpZlbWwiIQ^qtgQL(#slSg ze|w1!1N^aN>BH3D-%mk&Y(6vNAr6jKmXy#6}r=b@dI_ zF=Nv0nC&sO3k(1Pf@Wfoy@@fuXZo{Gk^;E;`e0C9eQTXA%&g9Nj4COmn-Gq4ztrO3@5VM#*IJ|g3_ zIl8<=jfKNoNvoK&!l4o!TxiW09F%Wx6HmhfTEMs~VzN}Dwzjro`R~}HB$g}M*2nup zqZpJZ-5<5J1Ey7XciuOp3QPigd_+x@{^D>?P)>`Ki+`#ZQo@mt$`Mj>Dv*p`MWz!W#$ZAqER#~ zlaAeyN)rKH_SZ$bClYnKpV2K08hQs6A;qQDp~028nkc_R7RD*K-v#PGU?T-Pk^E-ESc@&oPa7Ggw(!i)V66O8Ptc zY2AV=-|DH5L1?0;Go3L}Zo{d*9^=;mc6x$8;LnGF5_o?nz#8SyA2?IMn7LOzIY*V= z;j^h#0TkZxVWWP4CR@ImUC|zLloAwXIQP;d58S>~Gc~JiBcZciZ!Iqf>W;`o?0%De z8u&>`GX_Mi9-bbYVwVaCWrpIp!UXq!T%HdZka2#OhNk>fYX9xx(lecj|2c14%wJ_| z804V6hGr4Hrv0*iJ`L(IW`uY)aY#XfV#I$YpjP@l%)at=aNADt|2FH{^v$q3oa6mw z4TubVT%bIyz(vXhNF?Lqph=T7#nZC^@ziHOHj{P4>UA%g>gkkVclY~ipTlMz)t|#; zQ}87oqp2a$hp}3s4__vZU+gG-@sM3T?Y`<35gEcgS4S1QQhtl+THH!8qiRj_>gMVR{b@syvlsQASP0OJ#U-O!Dy|y8 z$tBMWPL$A&@bK`l-E$H3k#nhBC8?J$C#R?9DV~xB!*B@*evQM(1h=DSW;Ekv*L{h; zJo%adSEJ}japmpn?d|R4RGlGsiCC#g{^SWj9s90Ap&e;F?-GX01M_60q-5#vE?o#C zyCfte&Rou-oLGT^dy_dcH)q9_=DD}M$D@4fSikV)%a_7J1`x2u#l@wfqFRbpWpVM0 zW+IkZIlWF~P_VML&YMO(0dtj@=8egsl{diH2*KoMg4YFpQDl6>HoT!hLGE5&wKX*Y zBI;67NHzsIiNAjvmZ@Vfit+ODGB9*kzErAPdvZ*kt7N%fPi!nT;)3!s`T$)lh)RKO?M!rX z_1$tOoNoiG$+0ckgV5mN;pGad^714Ll-t%~JbOD%J8f$_svQ>U9Pq;F*x6&aI$By< z5d44pqf!zJxw4skW40bLuh!AlzVd$fRjfiwOS^(gL`vFkTq)0hpF~Mc{&jkHZEdZ% zNJ~?5=6rWLS~?Gw3m}ILuMR^ZNwjq1;?mR+O@m2e{?LfepEW@sJRddfkIRjS?%h@2GFKB%Tx5)f@LkvzU)lbXwJ9 z3%alf3f_ztykpT z<16o$A#-ahtAsvNfaknLTMG-NizX-p9FbU{czDWcYV?VHSKgvLQh8%X*WQ(ycWbd? z=|h{xYdw-VIGC7h%*^o1%4~!Hcz7;;*M8=X*DL1qCCoKKxi;nqg)p^vdg3=CRi$7*0g%oSum^56nHhD%eYdL zA(2AJ6;sZ&ngiM8E6{BGPtMAWD`$LmZFn=3n4H&IkWo-zc}$%ksZ7U}CLd+ZLKsPp z*B4JK^T|$pzRUO+l;_4!idfZXy9iQ{L#z-)sq+A%#WXu_<7NJ(T6#JuAa02~e_9lP*7kGsve+a>ee;d#ThuZy8IDf5fG#}ZlD}FIXMLdwW*<+ zW$FO_5k_ub6qJ__0}NX>wYh2j2M(xiU>?8$PGVfR)8qmFkJ@LwDVp8|++b)(eI;a= zN}Zuz8Z4w(G$GLi=lKIHlI3~sO*UwQL%&0?gk+*>+$t;eIFjyP&Iw+EP4^cUPa>zF z$VyEmCL+3=P!#ijn`fYsCSN#a`A6|hyeyCF-puLNh~(3pksJXh1~vSm=wO!{un2qx zc_;))Ixl`;LwaJ9dBBwG`H(95=*$d+0dY8lQCU(o%wfG3cV<9s#Vy2ZT>Ou-puaeE zyli?##<^#+Dof3*jgLs+Z!S=igF{bG|C?rda*{&ClZT7T@npU4jTkEobx&||UT2U{3GL>|4?cMEE zQvn_>7zVG$E+{xRGBPq0x?+cVS!S|%fVS2oL5H*0cbqO5+_54K(lu{XRe#M^TfCN& zE7xo69-LONu-F1j^yvrKFA53@@K?JG><+H;D{_(a7KHAsG`Zdn1inHGi6{u3)R_}8 zG1yj3{UX4o*oqb?7fq=Zackl z5EM^WI$1KkTde&SF%*c_5&Q-i$D6TVI0rm1;5v^9Y`d6{2lzSz#lw{bIP237uC&4J zEL6#&qfx?eDd;y~cAE7S4;yG`Xuu`EiUUu7I~$B_*SMTHqmX0EFeKKW)E2)r+DQiz zQlR{bPY@_Ti;-*~bZj{zTgUFY?9--P4*cZdQV1?ibDI1)&O19h!&yR%1n4Wmqs`pt z@v=xmm}qGJyX}J#kSI?k0`#Kj&qTv3_N!}aphQEHEhaX0%bp+L1#k@dpb#jcG9L=M zHtNygb#-@>MoYU}|1_=yz~LETBrF$>h(dQ6=vrl35gT4Ia;#jy{pf!Uln3^~7kP%r zn3&{&4Ti*5MH6jT$#Ml&Ha5SkYK$xE^71+?c}Ous9M-zqm`s4iF*G!kl#~Rj*~dr3 zrElN$7U%(IL5ed?V)kZ-wU9p3oxQ!FMF4`NSVsx5Lsj(junbzf;8 zjt|9x-)m~>?XtRzNklxq!*V~N@E2q393FDug;Re=%2UKTmyqqMD+J|6fEAQHtm2gO z#=sQ{nf#T_&5Kqw-QC?RNpi%tUrS5#PE?}b+uDYlq6N?FyAr!xfD$D86@;kB3B|cO zhqb%AyED&bSvqtKjL4{{b$fn`;mpeU{WA$Ursu-KnH?)2&J;ke%tVkU9Ub7zoAC?^ z`O-dXZW0=3zo@c zyTDI;3FJhIG-0}B8cehl)5bO2xI-d0pWJ} z{eklhvG@yO%w~OBcRMa>ikWzcXA6=bX8#T_9x!`KF1D5khxta3?jf(K6~zA@XZ}CE zQt>Yl?FAE*_LL#tS1ehxJ?C99NT=>3j@QI?cAF@$Zg;O%QUd4OQ1Q6i4_py zc;S9_0Z+53jjNlzd>=3*pfU#}A`lM3U6M*oyJ|FnOwwvC$;5~Y|qXu24%=hzzUPhsgy{jeq{@r_v+D~>X zhtJM;Vrp~9crty+Z_>(6yUgU;8`f*VXJ=bp@mQ*ET{Vm6<5S`4>ic;D7bZHk-C}K* z!%QIhXZJSzO>KQk%cp`a<63;!cftV!Qc|9*EC*51mOZacHk#g_j*kmB3>gY`HN4tv zL2=TN1rxT@I%Q9J=OeqG1`QIR`>`epU@7M79w?O76c%N`(SM(_HK+oWxkd+6h%4wc z8TSdQqz4=48fEGeDsNHS@o@zqkkx?OR=cnn8_^7(n(9R8>eg=w=ed0iA)$MLOlYk( zC|VS*f5eiio}4q}6$7gbP?c-0t(%)I-rn;Dv|}dlonG=CHucnI^L@d@^o;sLq#YkL zpNydFWt3CDi@#o2j$|0AMbUHj8=fwTU%XC&B%&RPFB~{OwGy3`S?+a-rT~X zsG#7ycMG1;_sd+mTUfT^b=AfBG!AL><%*(kMH`cg*Xfjw3p_^n4J2a`(2U%+zwt&Vq;|;7#!5CHdoNmAIcFO zf<+)6_?%F#z!5-M5Nig+>4~K>s4_)UllAoUeDel-am1j(c{^7!R9RX1Vt@W}uX==# zh{$fXs$g+HVMA!}+jA(%KSzvTg?@9oEj9=@fxw!wiV7A=#{fsGJS03aa=zY)u|q3v zVB@SDdkMZdRH@vbRSY@mt)(TCFy|L^5JTTQz2|7oX}#-FnNH7`XSQgwzrbnePzB`xte^5;U?N**aN5lp`r3~CdI_s!=9b0csx5s z76Ko?EP2SHH=CL&vb|vx=MlU6icHoUJ3lx6e%sJy4k^+3$Erlv+ULcLUtiQw0=>dmN;CUF>mMzO@4 zuwq~)`f+KcGsXNUZ#+Ca1X2Tof{;8PXk}u;x>oDz>WZ>GcM=svUnwYvIIj05(7*m< zqL|JDyrNgZ!NG=>e`|GBRB}U~_d9g81)`>K80Z7P_MdoegXg(bw6x^=_qM!{;3ZK} zeUS^A&iRbnZZbvNg;Y$}{6Bd~dD4ATrh`NC>0B<_S1mXizAcXh%qnUr9M*mfO0|a_ zNw=c9#qVv96CL(uMifPJmo8W2az`5rrMK2P=D*RrQ_aV3juXWtB4UI>uqg!dRauJU z(}01ejh9VL3qkz{J7ftsg+Qy`&;J0y#wSmn0ONiD5;JK@-5}ltFzVa4V|Ul5V%O{V zo0~L00Y`jFd4m7-bjDg~8Cz zF;pZ%qMbdVj7P^-wkN%T1#`%z78cx2&fH!XdzqP;+!n(iE(`(?o0~=-w9E8stS0>t zQ9(fTqud5-MU&(2pZ0yQQ z9F-`bqo-d45MZ?{^4Ga54(6*5UN8_li>c*avH3aXWJHZdKpK@LomYPq*1rX)@X|WTp@P9tq9`LaUh_+ySs}~s~|5Q1)#*axRsUF)1W9SvFsbMd`#w$NPi{{ zj>~@(W!{od@5Tw(9dH1pL@w+emkoT;q?DARF-vSp;j3QSSaF=(5MB~hb@g^l6Km_z zKGOi2SRh8=ikq7oKz(A8p}s!<55c4fK{f!_KsX7XEeNN?uoczgBGscF{SvnicdGskiTpMbbfn3KmXUbCn8tzU<@vXYnmBOA zW0s9Dr%P`0Hs-|fI@lUCa#4~&DpSMmSEvT2Q;r%!XhCuD5Y5Ab)SlvGV2if@luk8FpUM!{q$b~NuY1kWRw&`7yUj{$PJX1~XP5BYs zp%>rnV}!h=F`(syA684`BZD3JqT2)qK~$dw3P~li%~)7iXm4*{UpL(hS%M3!G3mkX z8L1T-Kg^?+4Bh7b8`(#GEFAeH0zr$Hn^hFvenRS5I^Ef6Pi?WPOPS)uI>J5TNiWuo z4-t+U$bypg7xp(rf?5I11h{0n4^NnkULj~c_y*}a@Mb)rHh+aM<49t0qpB_r=ObfW z>s2W%7@=JJS8K)gOjy+bD-O(m1u(lq8GLEiH!;e^dzVCsfq{V{cNca!F`vgQ^*y%> z0AkQ*r zd2ez4VjkpA8<#rl@D&Z5e9sKDeGOWNmHpos%~>q)KhYhCRjQI-#avjsf~@^;hONJ|V_XNKiEQ9eW(*k9021-=&J~XQ{;{*4l%#G|vB}_NsX1*@a~4zprb?=^ z7+!U(@3j2x=QCscdHE=)o`v$U93*dlL!>4ahTtQU|LVQeX7oc7R!~ybc!X zt!f0hx$(aSvi^AkAKRnz-4a(VU6(zy)kAm*82Oh^aeZX!bz4BL9)|)Qg!ZGs&N$YS zmqXo21hWo6WHah62Fu7)`~XvzopptVUBv2xuMkUuitEi(6J_zouC;hne0Qj^_`=Fo zkJaQnjig1YFXxc1yzk;!3~_0SF!+pF3%VjL>#< zyk^82+r!GlRuCTBaqDUwn zSAw2X*6ci$`-igWc_WVAL1Wy!u>%>Q1?rVze`<4#O6SLFZM5bU*V{5@Pc9lP^?}DF zn_u(7>56DRA)X=JA5g2L^WYCD7O-GpZ;DERR|8DFon7e1$Ga^tlt2lF#0_w4Z3!hO zXJ=zq$O717%0=RXf5idtvw3=29uq4oh!L~Vn1YI!<`yG=SP*O_|5f6rP2);;kna$t ztoZynAZ=btGOqEpN7`ghC_VIBcgzOQulbVFwEG{qxvY3&+cxIh@p5+cIEL!p-U}{< z{Q<<7u6bkZNmYOdv5G0phEVcB6b*XjG)BBiBn0(sv`FEwdr;&Qc%$8Ef;i@;Z8O#U zp06UqD@eqa-)S?d%@9O0U#GAK6VzzmuSRmTFOMdIoe08-Q8fHpC9pA&qSDgc%(Cc~nSjW*D!@Rpi{SU3_r<#+;V=ciO0I91>h(c!aJ;wl zVtwd-;T-dMc}gP|psq;q3X6>Q>h?BJ1}^+)5agmm!N06HSXKaKH;Y1_Tl-f zI3F;v@|7=AIrVVXd&g{=mzI8+vOauf{d2W9F`P{31tiw2pr&$+68bYBn}mFD^YoQT z-u+h2dtYC+;*UdN7=MC7Dp$_8W-7_qQwkxoqf2TvX{4q!F4ql2V_gM)$s7IzXfuU+-lo^$T=IQRKI?%(h6yZ&ex*Z6$iXI-#5GHfFgl5@CzaaK8k!i z^u73QX~Q*vv;6nF96ij2R?D`iTtJWr{T_N#L+<|GB!yzPwJ{nY;#FLUw5DG~3gvNV zIIc1N8cR)X-0l|V#YRXhXriN&PF#9pWqPo7r)u*zv2}K3#v3Rojx@`^xX{f@d`2Je z-r|B|<$TQR^X-X8$@Vl34IL7`5whk)xhufsz?Qiof?vnd?|71$j?*k-Gv$gkPs?XD z&h)JKhwqc#*-VE$`&=_8?=+&HUtv`L?T5u%ZH?gTFB8-#l-)DUsG#tSGyIU4NYnG} zz5SikkT2ice=dw_CE9PFGb%mD|M_92e~KUc%F55+vs@TunNnQrOH4eHy?iIZXM{#L z?pXCOPos87v(CBK?UiyiM36hs`SK9mYBe5k+wYgXHu5(w|Zhi%J@ zp9}y5=R0;6l-BS#u~ zpx}et+~yyjL7F!^B z%VLcoDO2=5I|i5|!^7<_T$swHR<2bWKmDyK@^tyP;?MR{V>PyI@9nPtIs-LCtNEj? zZ){7;-W5FQb2(g4Rp(yb7gJSL_2!Me)WMpKwHP5T72Ww{fHF3^I2akmgI0jpPLLa?* z>k$(Zj`Km_gi#NWGsug&el>b!uK)IKt5x}=CX{stXGC@7{eMgn?Zd^Z`;kcalYd zW(9q)gPna?jGzv-d540#%eiy+aiPj=VQ$x+Ith-Fk#U15dH)GqiDSo(4Gs>1`045C zaeZ1f7mO4myzCTT9>fzkO>30(or>$_o%W6TP=huSq95NV2DIrVX_C*cgiULgJAM zx)ZX0{#se7AE0z(Uu#SMsmrj8UK*G}r3n`c3tvn#EcqY^fxZ&cLqbDoHf^fDHk;La z?w+95+Qu6GxYrOOV0VRBrPIy7-llplnq8KXl0p&u^5!mG62kT1fnb8xi?P{sUiJv6;xS9Oy;nQ!rK7kNxmG;E zVjVd`vvdbMTCTyHsjMEmx(ft)dN4e6n>JBS(E8V5K4CpdOiVm_^e9v;#sxwA1*xe+ zU@Jj8&&NlEhvSEzT>5guNQeuZ-tHT!I}=;c7-{jv7zq{TT}ban8Th=pSCW24^iNb#r>k9jO>SbS;DaFHJ`IE(Fdz{QzMe&0NHi&4-i7C zhqGRs8$S-JvTI^kNtbD6BU=Or#II1_4tGNy18jO}dHMMH`Vk5;W$dYv8}H2eM}Uwb z9zKj=9}*ree`Ru8b(_oGyLX{B=&u5G?Bl`ZX!yW+^pIOXA3s zNk5raR$0j=r-V(w;?F}@H`;Ol7cn)JThb)EYhvCVn*b{-;rC`%zL&U9BW+z1F1lhq zDFt|wv|2ee*#L}v$ewLrCmXBlsoBgw2fUOa!kHrJ(N z-aX!Hz!zgH$-WY!zk4e#<^tNP=$B)&0Mw53G}>C8P4=>|_=u&6g3Pzm=JTb>&PUf? zi6_u&NyL&#N=y4S`;?A^b~7?ta6rqkaOuQS@<@s#qg=8!52MEJTbNAMrXsPL7?@`5 zJQehct1~JXXIEdMN>Y#F!k|f#zb2lYEnmLNyf;^vdVpq?tn@uS*DjM@Y$^VA8_&@woH z`ra63B=mM_ey(r_6_d zP@5A>On3eu;68#%1yH{b=;)72OIJ4sGm+@^Ep`3YNJn_Z{AO+}=LF(1CeB7qe#8Er}RC%~l zuE7H+u7EzXgdLQV3s=jiGe?cV5iTw*BSTF^B`ql#5D?Ja+p8bf?^sS^IUp*D3LJR@ z%r;&ttF2A@-GF1c$|Eudn0v4X1u&YKnTd#qupamKhnfY_E-W^B-)jMjj$heDQU&5k zO{?8|NUDK5wY5r#tyG%}OpAhfbu#s?O}xp(n_1bwo0JLJ{ev^uT%2_wrs%QDHM{^h zLAtID<*SnHq~A!c5q>RjiF3vb0EvXCDqFf7Hkf^&WQkmoGIo2a{CWPX@HP z?+1`!7eBzEjg`n~C)8zj-2xg|YRPBH+(dlk-1 zM|7aR!IsVA)TM|OAG-b>XM`H}qNDV`Xf_(8TpI)UvbFN^m`UJ`@`hR#FX}iC1`ilh zo)!2L(>1iTT#D`nSCE-Tit1BuX8jbf(ZIj1V@k?zk&pb1FDF}fy#icr$ytSkh4=4M zoEQt@o6%+uGVgzC&3Wj*fP?@0FE=Y#@p!)f8h8Iq!gUj~uNtCJalCO+KNhSUdCrBG zFXkyLmwOW^Dj6!`=mSI&lZ9_CE%FI`qyfGBWNhpiY-FEPI{jxXN>a9j%}XanH{^;X zN=fG0h_GBZqEy@9<;CRb$;A?yMF`w=?J582n)R<0yZv|g^5$v0*R!901Zl1xP=6sg zxlVqt%R-EI_l@>)rh8(E*0h1PTbu38%wppV{hx~mwQnze|7>P9@!J#~o4Wy}^0e|w zHuc5!tBlF69?C~wyKVj%?D88*dKm|YL7|fc?^g{A7P5Ne?zHmJWF+^^wYou%q^ zjcH}!--iBvZ^+0hmR!k|tCTy9DcD%jZ1(%{kpCCCQO(6y!$y946srWR|4wCVxqt8_ z_qua%bV`nNaod{t@JscYzjz$|tXpblM@KOTApBZOON-Qnw-E0rSLx-_ z69^jkkVlSev`jY;9BWN9L~((O1A7k$L*2mp+1X>CKX@QyY0dn=jfbglB2Jn3->+u*_S_D=zF`Aa1&I@0FloTqNr(m)JqQQ?PA9NE>qO3I0 z{ysU(+2KL>!d~%Hzm_#HD5##v|3Pii0n0-}>u-K7zxI~DQczi$e2E30WvYl<-echf zK9b`H1J9+Iz^3hAeQK(uzU#iYdyhNP>!_WMc34}{;WjI_ z#9t9=rJXiyuYXN8^LN+P{SL31kBu|)szm84B{ff?|1~u)*?+xGB8u;bm}#>SVC@@C zbgCah*Q(cIRcas@sJgOP=l1PG?A^P@r%xZvv?((NM!j|{lYtYomaO;hRmi(;YhpX# z5VL56FDyMZE-udh0GPS7F~v)tL(nCMg?UWoW*=Jq9D{lkyt~k;hZJ%P=&8}88yFc8 zg0di+kdk6{CuDFKf^&2R-;Z7E`Sa&s_VWyjK-YD@9kue;9sl;}Q;#J#@o9CX)6*ZH zUqm#UtKT?ee8BFu{jnGQPYd?yX9s@&<@{yrm)TwM6IUPx$)>vkg1r)4?}ryBMcJAn z*H%9>Oxs(RK<1Z2+lfkkzqt^bUy{rC?4JI zK|w+I(6!u`Dw9&4p*t@vorNBpKtprtvHdADgA_>}B|0hc*PyM$^#OHR6{k#@xkhE; zA1-w`N}l7(r>=GxkuT?an<9@dEzNj(UWHEJt&K5(cXH`w$tM+jfs7lJM3lVIgELC5 zuF?|fGH_0{H8&$WH(Wa#xHzT;RZh?3iM*4Xvd(Gw`Ovx4{Cu?!Bq+vzr(Ib>LPATw zBo>8zK;T$UVLQJ(%V=)Iit%t6`y3{6ZEY=ziw^EyZJN!Sr^m-TrsmZ$#Q6ECIRdUs zy%n3?g7CzL=bAA9^!4?_!om{zRtObTxc19m49A=<+YB%46%jG3ytL=hz_Houo}Ow^ zT*)~mAACR8VIU}l^}=Pw`?t~7O_0!F zU4a1Q4&LXGF$6@b1aJPayxP&xp%U!=lq`*!(?C;C?+r=-VbiA?XPg#mqbVx*ZyzQ5 za`hln8x@DbcB)%S>2>dbIfgyU5juE1`R3JqiK-oggJ&gOH(lQwyHPQvii&(ws@KUZ z11jAEzXJHVR3RDB*Y5&eB*}gZYmpLU+$8uIh!r9TU$;$*eIiEulX$>!!tEJ_fSOzb^z0=lzn z>=C2Gb^cNEKM8Y;b~Z7}=g;p6m->TK@v;642@8AO+?-of^nHBX=VoV85(mL3hxf=! zHPkhXBvRe7NkA>)R$xF#U*AD+?#o?)a#vP0WI19rs(qq00>pF2E59s@Y8*KK!0ux} zG2}VI#ub*;;9U!{2b4rrD4cr0>FaePq(4#y(g?I z%rF9gbu~i`GU#$AHum~#tIWQW`2vE1>=0z6D0n~^+EoH&%w=de)VZ%e%E=k;ROeOz zLB}ZX0e(Hl2Soek@Pyki^P;%Kq?$6L*4EZe5wm;&V_d?Hq>G77m&n`ht47xmh2xw) zJj(U9q|nRVR^MZKL|eP9rDfaZ%qZz}YB2*P28(eYWG*sTV6ajs0|ymt{NKhq|Mw-+ zkzRuf49^Y0UaMn9ti{_!To7YCXM|@*IGFiAG3fsXd5iMNN0#q-55w3_r?|RS@ytDP z&-azu17Zm+iR(ly&Vc9QOuvrheR=TSGpoy`s-fdt*&7HOKRb$5NbI%#5y-(3=CWq# zi0E0CFvj{_`AVDJcA7;C(_TGx@9N8@xTZ^YkvQ$KL1z<1oU9C8WHBM^7$NHUt>Oa{ zUbmKamSi_UO&1~-k{s7+@#9qfxti|+B5`IFYK-RuK9%?~hK0W4{$1jEou=r5tRExs z9mmJ-I*q>@byQ_JRhb2CuepvgZvHMc*ADjIDoQThg;-ZLZ3JVSOeb!@F zW+H4oTCs_$Y{qNDoePlaMWzO;Qzic8;O7DPhhDzcKdsIci$F)yF6(}G#utsw91=`K z&>u`X?twwBSN1F|<9p3fKPbo;K3(Dm=gUT2weNqx#w*bBHj;W9D-buFRwxnBHY7Cr zmR;!0x_=+LKwxD$|JpuJUCfS!)xP?_yBEx$B4837RaQa_UO75G^!{s;XOCED)^{9u zlgTd>{d-M}?mk2Vs$N1GLI=)0cG<&3)c9;8-Lr#&>}}(br0^ z`4R4_LUp5pMym||cc=1qysf#u?^JeI=<|;-X%IEgCe@k4GSq!?W@h7L9o(Q_gq%a_>%nPK?sXOtl=tQ2Y~T>Ax|px!?!Iz^dEZs} z6fM5juU~t7E9=DwNIyPjL-xC^wKY(Yhn#t$_9FGJdzH^@?H`?~=$L1(8Let<3V!}& zt8m=R)kgF2oBBNFp{quj{5B`k6FYRJqtuO!zs~6Yp^9Iq?cn_kl1ZLx%fax@*{k`D zl}|y-xPLq%LL!|G;!}%oeL0rWk}My%gR%CWCzE;;@&ooLzRgIgtL?f3=G@i6viBJa zr&yQvomML+yT>xp?{_@9Bl7#aQ)j1}WS;}SmO{ImlSzg1MzW2Bji?kq^!4QyK()UD z8&v^xkSj;5QST0O<`@XBEcyMamynPkN!->*;ET%=hITQXJQqWFSTHtCl#9AvH&7Ei z;@Rfl;9ymHN?;om71fKz#+j?~Tv6LOID}#~ugRMpK1_L;n)vzBfpGPiKMr}zq&JFi zu5Ox_o}v4P1zvzR_Tg3epXOu?M0&xyj0B^Mod?cmI~`m2F>6^i`6T@CU%H*k?!Thj zWhk_?Y;!ZAJIH+g8?M=&9_cDey;EnCrIV*VHQbd>K7H!!8WbPxhrUt7NU~yh3$6c> zd7bEVWvy>H<&1hMnN{ieChgbj)5TAhSq@weig#M3J89umV*Fa`#pwivw9HIO;942# z2VKMWpMHG*&*LfV>K(}(9+Xi{V2AA?1wV0uxgo1!uSvnls6W=iXZQ(}?!Okl2Me!3 zBL>4^B;&(Be)ij-DD2`)|J6nhu$WRdAR5%4^1YLJtuJ3L&8DvRcXVt}13k?~Pelwd z5QK~qTpujZr{s8@i8=aPSXp28htH|m2pp6QUz=^0CW5@v+?>F6F*ucbA5U7IA@}l! zt<0@ZB_M}EI@x3SR*(7kLqY)K&7lHi>aal8h;r%UCYAPqzfDeGkVwE>w6lN2M11`L+nLh_Qe3depFKE20AaOP_mz)9hXdY5}`~A;&IH!y6u{ zTO$4h{tgR&iU}NvkPj0;_=ugYCXQ z#q**V=vJ45sCLZh{58AZmU0!!P9HpZW*|dCf0~>(;PswEhoz7C z@pV)7Yg19eW-I^oTen-7LgAdxn+rJ1)#wE?vhwx)A4`145AK(q8ho7C+p1vY=1zn( z6!Hrt9#&ww8J3Vk!b@5^%aSs4{rRzx4f3_Qye$h03vkF_sfmIegrLKNqFC(4y$uXx zS0^&#B-uBiD2j=Ff_DwKl2?V+K;!Utt| z+A26{Z>W)nmsRAhN0Z6lhA3$}GxKr(IG16gVdV|j@%XT$Zm8eLaD zs^pa^N(PfCdfeGhL#NHpbzATjxF0+(VjkefNaiHQzQci;`ONeBuW;?v<}v12pFclz z?`r!G7pXC7<@92XFh=6);r=nslb2m(8TNb)aQWcyeJb&p^q~7GA07gEh%Qx89>cU< z8`rxhzh@~}c;#6RD)U%4LVdZz*JlsIq%C*vPDLv$nRUf-poD?)G7IBK~vrocIqH6=K`-a`xc6cSds>y)zsA1$&t^X+`9CX z*Umf76kqoxN;o_`(_wkNJUROHoz3ouDq5si6K4!~mv}mVz26BxojiKliY$n~!bE!B z&!6!iFJEF=V~6`b2K*!;X|H}(i0aNJwvF^D^WP3UG%t@ybU*$4z>}JYkTsgb=i-Uq zl9LyzsHW13ntLuV`n>zPu=&YabnaT-!rQ)ZF<9-uz?c?&cfa_R{=etnMH?ReKjGgy zpk2(}_M#Fb7Zbm>y@P{Pf|kO9iz|EXb%5Un1_og3J~cv=ts6%>U-CY6_vq4XIaW`2GitoijSH4q87E?>vTx7@oV zn*`T_q?FWQH8tW0zFlpazfm>UKw3&_3sLUi!3nz0pxIJW&7$%Lj0)ajmo=oj1`-9{ z!P#X4O_=6%8DsumVBAfvUajb~fnZ^Fex8{?!5}|V3l0-9RP^XyxnL?#@C1`6A36Mg z&DcJZkA2g54v-+$D1;F}X0Df*1sB94M=-kZ;Liww{|;dMziDkZ*%05LNwT*0cl|r! zeM2%eU-lDQPTt*uf|^1s4K<+p*(3NwMWcTU%`Yx)rwzm?1sYb=+m+gEaJ)OyP+%Ky zfoSTJQy`rt?ZMfAW>7vq{P{`ljxVgJBTb*Uw)XYyNNKq}3l!E$JOK<0ys}}>=cXJ> zi~y5>51WR5|Ed?X5bzEf2~qKf{2});I&*rbz86xD)(9tAsCrMsb>268C?@3YML3) z7Sz3PwtF7pW``~r;}j16A5Gk?RuTR?}rxyK$F))!XKavP0&(1 zqd94z{M^Om3>o`eX}Vr++Le^n z<^=Z8SINB07!Fs2Ui8J`mcW=?W(;{kIynU;7uk`!(Jc_e|t0paq+`&XuYy$E|$_$65( z8KJQ#iT5f2(}mv{u+3KKi5`^GnS4PaU)k1dv6$~-Bn-RWqo-DSHf?Y(Z`M*g;cjB$ za|^NHhAjk&Lajc|(f@)QR}gb%^I94SzIAKsOf=-S2ohjtV>@u|=Q(YiYmVxyhFhwb zmME=C6G*WRdRJ2*+QO|O)H_J;FcNU~V_jrQCfUzz&cGLEXxNmqBc9o&qQ}kwV%Q9o zp=p`n_iF0u4G!PN#>O7_5AaQ&ZfY4|YMOOL$OuHSGcz-$i}MtVSI8N{yh`ha&^ex! zKD{6UCg;RdZJtm)fh$5;5c?pE(b~DB7~v=5yLkQmk@;)EOGP{d^81r()jSeG${n*2yVbn=^?z z`yprHTr>8(G@xxnv3#PY8l4`W9b`4t`2w{ z&hA2zq~5Ny4T!pliVA)OmDFX~By7caaCvNI=j!ng*pRXu&L#oTh6}?u%?!QU2WnO< zSBU4w_^OwHuNdquhOu2V2M0;9?%p1(w06>xEH)xOP2sYub8IfvQu(OFhE zL@mR208*ymBV-QXo(uamt~$5Ii;-`BH8#sR^>%O&O1_-YMEK92lc_&*nYi_bP)!oE zR6{?~mC?~h(nHCTizkFn&tYe*E56r!PE$j}M}N%jkJlc$i*#MtdA@N5=gq+q7(N8* zj~_o4npS`4>{LD>BrH6go$7VZFCS9~RB^RwyMS(X7bJu^TEJ0$Rn^U~R5*nbaevr? z8h%uH5HVxndFndqYB=LkDMM5jVnHY5BYt>2Bq9PZRiUXnZ{Z)N{+GB+|CXIQcLI6% z-kIn6ZNxHPrvg{x;^WZu6s;`k!Hq|Mb(Jxg;2Ckn5#4 zp_LxZxV7ce`Ildcs3_~6(O1g9`=)tz@oI^Y?Z%BdOTQ#!T%6pG2!3m_ezoOu%BX48 zr|a*(x`Z}9^Pq7qc%RhUQCwN`TV&HFaFSG|l|Q5#GqCX}20wpJ5O4Wm@MxhB2?Gkd zSf(7Ld4u&Wr7zg%b!I%R&ZY?rHa@+>hRWiPn>zfX1rJjjzdc zU}U5@ms6&}N_5e8d$S=W;qn*uR9(A1U4n8>@rq0M&jl}K!DQI92b;!->PHSKuw zGueMNeS4VHDV`1&SJQ8mZ#iY1#J|YMxV`%}DD>8~U?Hh_Tm7fyhwpDM{(#s(GL^gj z(>FWE8r!lIi3D0>R-E$g?Q7_|%uM_;Y7~>=o{QQGJ2c0xj2^vUw)!$z6Kwhm78wE%$$h zTM482m&C`?0^e*)-c6YE`}JS$@1v>@drrIfbFyjX{_WS*wqwd)qt=}ANPUj!yIIew^PAurR z2_K#9A|oq=-@WVYLR!&x$P7S`6Rn+OL|j~SuiZJi+cZFaNENj zmD~RZ)V9X6<-h*%(!c(3@{OLh^M}ZXNN04^rumL5L-2`8K~Hb%W&hI;OG}Xu8lQWe zUs%|2tS$Nd`}YQ##>RIOQ^~{ha$8zkzg_54ICo(%ok`K4Q(t>kw@m6gqr&-@z@`3^ zZ(QsA%a#^IQs9A>KYJ^j1|YG46#yHZNB}-gvWudyhX)X32{d>Dv6^;Mx|T2^14BdX z1HOs}xc16QE;I@Nh83^Q@LX>2xrHpN4;PA#D@urq*Ve$(S%l(ipz4akr6-j3w2}^Z z<6tIRIQ(1QK2?bldG}+gzQ@0ea@!z{ZqH^gZ|VER_D%X-IdI(uD%Yj zKYS+O)v@pwZ=ZL=3xe$>@J8>KmA(4o<8yf~5x6g4y)P*dlaYyIeCYbkIM+Zkwk3ZP zFE-a)13O7}VhF^Ppc7&IKUrW5-wi0z1o%)51k)Lb8lX+L9VS5C1o9|GGZSpFxn{W9 zE(2E0wwEtA993UGxPSj9E{ozgy|D(B^fiTi`wJPPFy%&xv;V9o~>ibY)BNYa7^>6@arm6(hEt)?~gf`1hKVTk6TE zu&}PFd8pb@k+q5TcvdJyzf*i{{~qt>kuB3I4C|0#$~q7GSSG+i$GdtQ#QP>Yh!Nae zT{mCMP_j0<%BcP0#}90zAjom0!AE!8M5ZvVz_|@uNP$5_4Fu#u=R$qe-$CcS=cJ`94^UyB67A0^BmMNARWwhE%Tg zp$Y~7Md5mxh)BxW909It)bY**ZC1}^#dm>86LNh@???Wx>i76E!B*ZnTF@C{wC zna2S4yL*?mI*@TEBLTf(&#IrFUw(c*s@Q=iZg>lR6C~;w!BOMtZvJXrTiFHAW^Mgh zOaA6w)XBC439C;pKDRGEn}e;Mih?kB^;2`ij+n6)w%O(1aevu=da`KJ4|x6l=~Pom z(e~2NY;A6GMSZBX1c1wmx$SLvFCJj8`p!{rn%zaKeuMOCOul4IkLrf{4Dg9_nm zB2p|ILv~0z2zq(eMSlGF>Og2lLZAHTlkbHsNo>l5n;HQOhgjeDcWV<8#6BT3>Kycn z#B{gIrM{I>bVL;uko8J|tggQu*-d)1-$NaN&pNmCkLPM+n1y z0ReNC5sVNrXF05`1L5_47iLH|(|u~kq6)d2541F>&oO@R07BvuYf|nw0NOa_)-5W_ z_^j&cH3U`!M3eFb=G|BL1P3V;k&^E4u9z1QvzdAYr%GSsJ`w9?6{fo94Y5gaX6E67 zlK||AI#cMP?Ci*7d|#<~6Odk;*F)P@un!%}CMp$O-H!4huc@)Iri=UU^mTVPjyQAp zZ(HP$b3rqX+vFDp?Z$4FFpqDnx|e4XCO&`pk}QAiO>EqVhE0xYhOHQT>-tg?lwD`u zctmTo^ZhaV-&UsC6zjP-z)VDr-7lFTlUo$D6A23Z($XZ=u{mw-@D}5^#KgR=iP~@M zq_9|2lL!FOA+RZWc~T#<6P1uCg-YUukon9`boF@b+C|E){u`EEPRsrv&9~w(6kI1y z-Z2nt#RwbZJBfDa`STM72D-{kSPG>bJ{Xvp>3kzxJT!mfGc5H8RPd9bD;(6Mr69Yh zVPI-n*gI8SU5!SP_bNgw;bn-)F)YB8hQr~&fdh`FHR42i*0z~HJEs55*BI5NPp@wI zS+O_x#@-w|YinzjePDEsAKxP3Cc|j)v}(HRa2Vh6(#*&1U5nESl{O=7<2hT1XAJ`= zL$SLlSNjlXwv?B<2^m)~nR?65+RO8PhQbT(f0X~Xk7p!}=Ss_zE3UsDNR(zaJlPEq zL(GrCZLCsu+bH~RlglFi@oFdbWAcrVt$jdpjA4Os+2ygeM~@!i20k&Ing~+xSZGN; zSPpyShex*Do-@7(dT(uoMp!(-9>&L+m6#t{vs`4>dOO#w<6G_<}}c9Hm=`XPV-MHh31&!|h~_)0k;I(Bz!sE>UP)DUS?%Kg5lrFZQjkGzr?oWUnv zWkxG@71+*PmELQn9Hx(6T>SpNc8AW0XXr4esZ1y<@kd2OWcFV%bcdRTv?k8k8AaYq zNlA%`QTcXNXIz;+Oe~~{+nb}CgTM(M`mi$vK{Z)U*I1 zF9)6ANyzR{1wnuB{j(XYNLlgr6WS0ml_@a^IwPr0Q^W5~_&B$VElq97^6hT29>%I$ zlm()~-U z;cw85$n))T^Q{K|Go!dZs~A29RUi-((LE5S*zn%eKr~pgaIy>O`lCO_cIdGBEPB;n%t1wJ(0~H2Oia>4=5~ zPXI|l2zd~8+sNxwT+hvIP)w%X!se<0B34tA9ouaebGgARXQC^AA_J-f_?3lntl+_&VEbNgQXXnXbQ=Z_!h)@kIz*R{1H^Y+BM6!p!@zOyVgDumr* zDPAkKI$5?1%19tdo5QBM{Egy~8(pQzU`I#vojZJt1n4!#Um4OvuL>M=)7$7tLwW%n zii%{>bIrH*6hCEOr3_U?O%b0!*efhNSnVM*-~%1q*2vA5PRx9UQu7xCWgK62r!S{S zw#LY>S+yk{fQ}p0H=?UiWfs+}Jka91oI$-2%)_Hcb4HV13}Pnq6#giEoSd9ORd3z7 zqefX0=|>2^jW5A;!0-k#Zz7do=?=kt`w+xK9GGiuZA~*#BH&iRr5ye72G$uAnlrMX zd(|>RF}vgm5B3}Ue)|?lk)x>0N{l@7wz03x@|Z|*ukha2KL)X!e~AA_j1!=HTj4Q7 z>6B59W*G0^RaDYoXZ3RAu_^W0U#%a?E}ZT7G2d%egzNgydc91z<&&ZmM(b-M>Guj(7t)NckU) zOi)YCG1W(}2cAT`BXa6tK&Pi}tGQ%B@2LK#x`1c|i0h6YL$r&C2ukIHNM%B>!=U?A zffscO!h--ewfa%gJu?1=Gb(Z~HbLbmWK_Ii`Vpp7RaK)((%By@Z=iDIb(V$Uy+|3U(p%6X1#O9n1SEXolyA&0gxGatBd@SK%Z zeYkj)JVpLj_mRNu(}i3x^iD{fuV5u;-WqnTX|s{M+xs^P3lU+Tmd&Oe9l7RWSCM1p zj+(CET1%M@IaW#I)VVECRXuj-b6l5Ppb^~^{yh}tkJ{UptLD^TBuvdWN_EbpRxWsn z(+O~m6_8vm^#%50XJ^rtXTtmTov!gb@VWn)_d4ipQYyleJnG~6W;*2rtFX+Vg=$%I zBdxNmlc&4J@{SX!L__0OD*rY}m3n%NwAHhZv%=Z;{94NB3O*`)Xx4re*FwTtO)KF+ zmFKA^PD9Q7sRqv$%&6t$TF?sd1T;2MiJXy(z4Dp>INN?VfH1@X}o=(ka~3Yi_MuKF;b8R5mm&W?}G&dhveW?1>f?Q=_# zC6=_FaZ8vUs8X?y?-vot&XeBF$M<{bQxsavf9fTFfQSme4VhZ>h|dX8(Z&Abo5=-5 z&%e42;bPpWc}D?WnyRM+i9l3buxcP-I2m_<^RMwL5DYHQlv~ zMKI9P`3ITrIt|*_T#HHg5Oa1!8SwA&(o)BBb}ZoVqM2Xk?^lYPWKg)_oK{tJDwp2; zpW7CynrmxlSt57H_}%>Yso}Nv`cjxk+i%bHqZfJ){fzSVq)yFSoy_n) z0RRaEAR#X7JeRqT&)7QZm3@Cqm1ttod??=|v-h>6A6h9yD%%}^yc)J0pBmy1hPHaU*2(AZd8O~RHIf{gg*p@a_o$&plO8&rm2S|hV)8l;)vQfqr)D+2hVKPB6l7|V;Er3W)o@(h zEXf*2VfHAZ02<`@M1_pXN@SeK3F@g4LOHp2#@q;hp-p@l&c=WtH2dSnR$A1Mn_32v zkm0AcSfUU$YiVf-Unbrbyn*1JRd-^?nfo;;7RZQWiK;OUp-%Hv8h&>~9{xNkmpw?7 z5ixyAm^#n-MHDitbF&;x`{?p2#l^+t8L~`93>e7zsi9^Is~N~J5X2D?9ldIB6$JXG zy%n)KfBsm4IHmjXD_5lUgwzr)4s76k0hPG>Pn!8Yr|ZD-o6;$gS3X2z5o9$dxqGoA zU=9U0q+2^{r4z$Z+=G}UZN=dQ{>qA~W*kLdtFBB*Bj@e*ZI?t9{z!L5(HdE=)g_#9 zp_4>r^oikU?{^yPY#SumBkIh3(o}?4B&M0w6$mQVsSfAo_-c6x8Y(6VzO!C)J2pRcWYW7^?PIgw!6)uksWxYK+HvlMDto^dWBJ z(Kw>1`Ey|*i(k$vV?7{51ZWo`%nI*h9=y}FPrFFS1UW_~;2IG4&4l;KsE-UY_jhBK z78VG9RR~oLBA_Jgz%g)F(8`nWnf!dApf_SUJ1RPL@!8jr85yT26T!GOo2%08doz^7 zYU&Y;v`^d#yGaRua3|C+ktqZ+{`@th_|toRasTaE{0kv<=LCDdy#8?8+HG{q+Z*l$ z{L8c^|NQ895%rcGJNh8{D&Jf21ONrBk7odYAmjLqu`%tT?YjcGERbkc>(l=i0m4=@ zIW@Jna+`*bkkEatt-C0xwkaR{j$tmUIjI5WQYEF-5aT*Cl2rL0*ZSX8{yM?tX$FFj zSy@`{T18Focy0;d8Bk$KTp{4Nu3sD4?mwOF2rT~2+Mvo%uOJ(yh1Jfo-~P{bvHso+X)i5KDQMFViFa=F_M0 zO9s0yHz=vBFAaR_e1S zp{BG$#DX!5y?diAdfpNN*0pm!Z#JI4E^wCFP$8h^7LFs2y-PWq?|a8XS7`} z>K^Jorh4QIKMeMt^~Hs9^obi;kU=^2<@!AA9K+_`R(q<_WxoA&wCD-O7F92N2->t` z_^GnUG1SN)gszws3O(GBT7SHR>J2ZBBhk{*LWX*}j*k4L&l;$D6RjJ3$XP}d*OwV~ zanA8@bOrM@JXey%AkOHWf~5h=RK~q~!v|E>?WBeDe54MeqKDcYA%rL=JM!976&2m4 z`>|%q-QfIBV4BRHe71}!{R)WLx#h2l?%NmEFd|zfwN1^^+QTDQ_2cK)AFvmWIvh)o z+wX~sqX;L^?c4_t=EFd7;EJ(qzSfx-F(?DS_qkodUYh#dd+&h*eCunUaFDJg&ih#g z6viTwVqoez&=g#LR%L6xp4(x3M0IuQdh1s zwCbsTj@M5XnjD!>1>vkgtxp$hE|i<)Ew|*#df?LMzlyjVky5#=3hH^Dpq(>6OpWp> z%Wrnt$Rp!$^?qZ>II0<#Ly+{p_g|tmQ@9Fh$F6ard&03Y95(>D9;f4A%RgOSh>oo{ znwn*MrJ0qn>&gmp{!&k;C|)GStG;Q!_5==nqJ~CDJfk@OMM>VqbK-P?gLGU#JdO*J zucX^$cG?K6FT)bb9+3qws$m2uyP> z(wJUsPs*y;h<7hw5Yn0LLqb>3KoRKZN{vZSMsdzEhK`HiLsjKazKS?eGV9NH8W6}= zEO)t662k#58k`xBzwdGp2?vRRROLg48#6kAB)$}AJu$LYtXb%6GW0F}BVkgxpJZVA zH%v(pW{rQvlqBoAxGY$7@P9vLp~;E6w{F!}JOjQBCwZ`2tm;l1r|+Wd2X$6;DFx%_ zR0R{G7<7g|_4Ieo2gGSmY??0^R_73|)F6z^{*t(MAJJ5hjmR&9W<{@(t%I`s75sMD zPTc)UB1vt*++I0)xjAAQlUm{r!S`2gO&Q+@5i<~vxxl{2z1qqOAs+ExzkbD9pKEY8 zHumr)+P~0{@>oEcB_K-}ogQRQtcy2pCYeC+)T}X=mt|jR1c#Yq42TxKYa<@)2E0Kf&%$KRvK4hHFev4j@?0DwO*lhgNUw!GJo&9gVjlEbP51> zs5ZQ?-s^Z-yJ>?SUi8EXO7dV`Sh}bf3jFm+T}6n;);S(3a+5G$cSeHvQ|JI|8OfCy z8g@2TL^bh5*KKI}<4n2lCaa&NwIx)w{DAMdkWWiA2jb@*BDNJv#;aGF)us%4 zy_XueD@>*V(Q|qaZU)c-@xhO8FYw;rvqJT$=C4s~5dcmeRu z^v93y96C59jZ?~&zBzgS8qbKr9c3^t@#$Jv*wHk4(DW{j_XFwEaP4(l8<(QjDj1+R zp;N>&{fEw$z8_aasv_Jq`Z@}L8>G(G2ap0p!?ug007`{^dCvX1qvJH4$kSryk$PMw z60b7Hnf?H85%?{RqTuJZhMEROYzXg1FvGrFT1JqoH~=|;;F3>1yS5>aZl6St6r7UK z(KpolUxl?GCo>v%2+si-M@DBpi1}9I&_3RS2X~B8R-6i>Py;{nEkw(#E@Im60OBnA-A!U^np%YHDZJOY3va7=Q`xxBQIM8Q4KbIySW6C{j5ixD~^h0SEi0UmY%0*|M z0F&37x8_P@jORFm6Gh@)W3fql5ZRh7%p|2XY_R4V`HALY)zw}m)Tr<6gMt`|tT9<| z+p}rMAkL&Hr;ACM!2%~I&NcGBE}r2rw^c!FCe_Z+PhIs}2MIMm!4N7U)JTyx^6lIH zt)b(0w^Wl|XgC`ot)L(vU;~u&HV+v`+uFzaM~@_9HL=ouS;_(JX^sumz+juaJPyGB6!u@oSrJDJ|B#E1C9)5_37?&`{hPV`j1J; zbX2p$4XFqq%gU379eOOqV|r$!VMghml0pdY4HIER<1!JFG#*s=>2c4PXe#ZziNJ*3 zw{OMYumKq=(8e(v#oI5F^WN^sxNR@V-U_c^+AX{>2>9`)30xIg90NgS!ddME@#mLg>e4DJ6RNJC*%;JwovSvt;RIG?6BDgWiEVi( z(3C>?k@1|HyH{HJZOO8M<-{#ENBOvo*$Cn2?cLs{gg*1VeU|+8XhOQ$p4tK*-e$ZE zLPk~O{Seu^4I*SwR&Zl@VN%%Bw3fCuRUPGIgc6*X0k@~u&MvNEWo05zOb=NARtGWY z)3o^-#}@{YX&?#OKFtY=2XWES8!Q8g?ct8aBO7PKoe22OY9ZPvGOkBgm@F?kF?OXYfE4%9fy^|*wNSqzn7bId~F;NM9pTX6rK#yML*+m2IieuQK0EI0w(9Z|g zZJ6ijK<6Utyq{`Pndjxqy?-A`OdrNbj;-nth={+POAa;mv>fWX#t5!Pz>R2jH4MF- zyZtq^wXJN_I*uO2Zt?2XgTlg-0^8j5c**8@OmG!*s4ph!x-&wT+nw!x_8O%M1F_(w zBEogj*g6LXH(xNFfFg|CWX*#}`VC!%dvx9YSZ-sl~cSVb0|K%F2hIZd7cer#?^K`4-olWYkPKFxnsKvj_$;{t||lFcJr99L*DDx zUu=I7TtRGf7Q?5(H6Z^tb8?%mU;30X4!)&RV?pN3;Q{;E(N;(;fhfOx{TjK8$ielE zJe4| zm8yz=E`$n^2u&hJ7#^@_bI$XaOOnW|hM-MDp0mfG)=(&5^p)6q(<6m9lX~POP!<_xhv1*ex_or9Upo;DhPMj=owUq^`q%L-PTGfVhN2@+e*>ee<8!@filxT{tl; z$uOx*e+I+GP#1k^|CF*;qI3ZcV>*GZob?TAwn=4O`ZO*`5c*3jsn0Ofi;;feiZkDr zwM~=CSIJP)1?|O}boGC9RT_Hzbp>P55dBqer&C(R zqBo5PH1=n~%)i^R@+>Mf=w#NXpM0;nyJvvGJbibWKuqQGg7b$#uTSqhn~su~J|2F0 z-rBk$TrXC$=UMZX$XTAZ`KMF}?*T4BD!pCEXv5S&93TtMAF;}61Lioo3Ih(#^YpRw z?UXvBkSn-DZW9nqvMGl7!^nf`cdC1@?wQFB)``;*o}(zsPGpzii}4$OGlfccMgaeVv0pUY{B zWo4d+N`;|5cfa#pQd=neccS>|7X;&sGMo>p|G3tcbW5r*j*D3QU|$CP;%H(>_Q$TESCi>TaRB6mb089$JEqbps*ex-B)DEd9BP%0BBAZc1$gPZ$FocycB-^vE1ww zv>illnizo?J8l@`xw?MkR9F$@1OY)lw%D#w4!pBNTC zewJ{bv_@bU=rUL+ncFCI^l*S@gSTXY?^fYY(h{-#UshE0f?!Z`h_#aCN5}?*;6KlU zC_(sd&T*Q5w-Bhp+lNyC$aifc~MDo%OpQhM}$;w0%wD&!+fs>z@$)b4CHIvQ)lvG#vh2ffr_7d=pZ@8Z|(!`J_Hrfw3 zVMmY&z`14s6uK8!6_~D}eb9q7Tl*xv8#;1LXenPg{+JTr#{J8mEEC*k; z$b0f|j>W>gYiCRG`JV_Az*>WFzu*eP{?AF9a3&ep*u=vwCZ-ac65rIX)Xma`tt(N0 zw1`W0TQL&_u*)>d<#6Y4_d>et#s;H#Vl){%e*3 zhcQb4fXd5{%dK=XRLMuI7W6fFwGCkbKAp?TO4fqBQ0)Ud7B&x&8fB9X*cE{4(O$8x zPAhoZH7jd2vpTPM7c=4~{Y)>y!=gaG7;tT)V=sFN_skFPOe|2wk?Y-@ojE}04v7jD zz)IQ!Ci~-RtX<@ZWi*iIQ$f8H6c~`dicdm4+3r z@VRWw$-E;qg~EXud0rycb>vaz@A%uEnE~gTq;av9N5iWlSmNhJ$$R!5>w(nC{f@;h zMK5~?2#p*RprJmW1*yFdCV{Z%vlE_EBpc{JwZ+8bOywYS@ifoT0BoHwJA7Rf-s?et zgKo8-EG0pv*jXRRW9L_l<~HoZc+s zXC|3AiHO6!Pi<>tF`ROqr6x|MX3mTfkZaBcSUH31cRJ)D`7>f_Xu zz8@(9{JrOIsnbiM0gg^jOV)1?;MExto*kvGTEgoyc1y_cp;NZA^-0Pcbn8Gf55@8Y zBP)W%p8Pc=gDjUn$LuZ$&+euX2I$lFlsb_m2W4bMRy=$-<2gvb*>Pn5{mHqxIc`;q zKeL4jFWYD)z~2#C6U6qt%@7`8SsZsvH6^8lwa=}19=lB0K!tvY;HNRi)RdF7@?y;(S=B1{+Ucc-rj$4+VrIaCTqx)-MF0|6 zH(ggELWTJ1d{3c@nlkkn3uAyPO*mDrp%ROZnY`)Z32HP{khs;pem2(D#8I!YT;SYg zof0tbgkA)y&qOY_AOr_gkuur7O*wHKPQPAQ?GHEY^J}E@9iuVu#dT!71T!sdqR_;*)ZqN{e5w7kD` za1X?!fh4v2sJ!;i^H4TBRSO-?V6JwRm{Y!0tGx>((KL6z_Ovv-y;F5>wOIU&1}(Ip z-bgMF;l^KY+XAt+Gma0JLfJleLBgg&&$Uk;(A?W-rCqF{x13s2;8UFO>h{reU~^kt zi+uy2af>T)D*gmbZyqp0g7j2#`Yx*(NP>{gBjUEeU-A7E zLtDppZ>M+9%y|SO1m55`lOrRS{qu#w<+F`(+d`PE;8;}bUauxoqJE$9*uCjoh&F$~ z8%bYRcIvSO0YUKHRDOv%l5U~+-&BO4&Y4CVL(y?11pQ*XX+sz)uGMk%a??WQPtb?1 zy{4_q;~j$|;u$v5=`-Fn%2{^beG>)wBS6qK+D1jF%}=OEO`Dv8+q)>Kb1tJQ Date: Fri, 23 Jan 2026 23:50:34 +0100 Subject: [PATCH 30/40] Fix navigation, clean up formatting. --- docs/{ => IDE}/AddIns/Community/Images/.keep | 0 docs/{ => IDE}/AddIns/Community/index.md | 0 docs/{ => IDE}/AddIns/GlobalSearch.md | 17 ++++++++--------- docs/{ => IDE}/AddIns/Images/GlobalSearch.png | Bin .../{ => IDE}/AddIns/Images/GlobalSearch_2.png | Bin .../AddIns/Images/Toolbar_GlobalSearch.png | Bin docs/{ => IDE}/AddIns/index.md | 2 +- 7 files changed, 9 insertions(+), 10 deletions(-) rename docs/{ => IDE}/AddIns/Community/Images/.keep (100%) rename docs/{ => IDE}/AddIns/Community/index.md (100%) rename docs/{ => IDE}/AddIns/GlobalSearch.md (63%) rename docs/{ => IDE}/AddIns/Images/GlobalSearch.png (100%) rename docs/{ => IDE}/AddIns/Images/GlobalSearch_2.png (100%) rename docs/{ => IDE}/AddIns/Images/Toolbar_GlobalSearch.png (100%) rename docs/{ => IDE}/AddIns/index.md (94%) diff --git a/docs/AddIns/Community/Images/.keep b/docs/IDE/AddIns/Community/Images/.keep similarity index 100% rename from docs/AddIns/Community/Images/.keep rename to docs/IDE/AddIns/Community/Images/.keep diff --git a/docs/AddIns/Community/index.md b/docs/IDE/AddIns/Community/index.md similarity index 100% rename from docs/AddIns/Community/index.md rename to docs/IDE/AddIns/Community/index.md diff --git a/docs/AddIns/GlobalSearch.md b/docs/IDE/AddIns/GlobalSearch.md similarity index 63% rename from docs/AddIns/GlobalSearch.md rename to docs/IDE/AddIns/GlobalSearch.md index dfcf75eb..73a54c7a 100644 --- a/docs/AddIns/GlobalSearch.md +++ b/docs/IDE/AddIns/GlobalSearch.md @@ -1,6 +1,6 @@ --- title: Global Search -parent: AddIns +parent: Add Ins nav_order: 1 permalink: /tB/IDE/AddIns/GlobalSearch --- @@ -9,11 +9,13 @@ permalink: /tB/IDE/AddIns/GlobalSearch This AddIn is supplied with the twinBASIC IDE. -> Latest Release: v1.0.0.0 +Latest Release +: v1.0.0.0 -Developer: twinBASIC +Developer +: twinBASIC -The global search add in will contain a [Toolbar](/tB/IDE/Project/Toolbar) item. +The global search add in will contain a [Toolbar](../Project/Toolbar) item. ![Global Search (Toolbar)](Images/Toolbar_GlobalSearch.png "Global Search (Toolbar)") @@ -30,11 +32,8 @@ Type a search term i.e. Button1 into the text field and a list of matches will b ![Global Search](Images/GlobalSearch_2.png "Global Search") - ## Download -- https://github.com/twinbasic/twinbasic/releases - -## Links +This add-in is bundled with twinBASIC. You can download it from [https://github.com/twinbasic/twinbasic/releases][tB] -- https://github.com/twinbasic/twinbasic +[tB]: https://github.com/twinbasic/twinbasic/releases \ No newline at end of file diff --git a/docs/AddIns/Images/GlobalSearch.png b/docs/IDE/AddIns/Images/GlobalSearch.png similarity index 100% rename from docs/AddIns/Images/GlobalSearch.png rename to docs/IDE/AddIns/Images/GlobalSearch.png diff --git a/docs/AddIns/Images/GlobalSearch_2.png b/docs/IDE/AddIns/Images/GlobalSearch_2.png similarity index 100% rename from docs/AddIns/Images/GlobalSearch_2.png rename to docs/IDE/AddIns/Images/GlobalSearch_2.png diff --git a/docs/AddIns/Images/Toolbar_GlobalSearch.png b/docs/IDE/AddIns/Images/Toolbar_GlobalSearch.png similarity index 100% rename from docs/AddIns/Images/Toolbar_GlobalSearch.png rename to docs/IDE/AddIns/Images/Toolbar_GlobalSearch.png diff --git a/docs/AddIns/index.md b/docs/IDE/AddIns/index.md similarity index 94% rename from docs/AddIns/index.md rename to docs/IDE/AddIns/index.md index 87409626..419d8f44 100644 --- a/docs/AddIns/index.md +++ b/docs/IDE/AddIns/index.md @@ -1,6 +1,6 @@ --- title: Add Ins -# nav_order: +parent: IDE permalink: /tB/IDE/AddIns/ --- From f07add456ee66570ac6adb3d4e014dd31799ad1f Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Sat, 24 Jan 2026 00:32:07 +0100 Subject: [PATCH 31/40] Update the procedure and statement list and links. --- docs/Reference/Modules/DateTime/index.md | 4 +- docs/Reference/Modules/todo.md | 9 ++ docs/Reference/Procedures and Functions.md | 123 +++++++++------------ docs/Reference/Statements.md | 1 + 4 files changed, 63 insertions(+), 74 deletions(-) diff --git a/docs/Reference/Modules/DateTime/index.md b/docs/Reference/Modules/DateTime/index.md index 7a60dc23..a67a29a1 100644 --- a/docs/Reference/Modules/DateTime/index.md +++ b/docs/Reference/Modules/DateTime/index.md @@ -7,8 +7,10 @@ has_toc: false # DateTime module -- [Date](Date) -- +- [Date](Date) -- sets or returns the current system date > [!WARNING] > Work in Progress Below +- [Calendar](Calendar) +- [Now](Now) diff --git a/docs/Reference/Modules/todo.md b/docs/Reference/Modules/todo.md index d38fef41..6990dcf2 100644 --- a/docs/Reference/Modules/todo.md +++ b/docs/Reference/Modules/todo.md @@ -6,16 +6,25 @@ redirect_from: - /tB/Modules/Compilation - /tB/Modules/Constants - /tB/Modules/Conversion + - /tB/Core/Calendar + - /tB/Core/Time + - /tB/Core/Now - /tB/Modules/DateTime/Calendar - /tB/Modules/DateTime/Time - /tB/Modules/DateTime/Now - /tB/Modules/ErrObject - /tB/Modules/ExpressionService + - /tB/Core/CurDir + - /tB/Core/Dir + - /tB/Core/MkDir + - /tB/Core/RmDir - /tB/Modules/FileSystem/CurDir - /tB/Modules/FileSystem/Dir - /tB/Modules/FileSystem/MkDir - /tB/Modules/FileSystem/RmDir - /tB/Modules/Information + - /tB/Core/Shell + - /tB/Core/SendKeys - /tB/Modules/Interaction/Shell - /tB/Modules/Interaction/SendKeys - /tB/Modules/TextEncodingConstants diff --git a/docs/Reference/Procedures and Functions.md b/docs/Reference/Procedures and Functions.md index 6ccdaed0..179c5a15 100644 --- a/docs/Reference/Procedures and Functions.md +++ b/docs/Reference/Procedures and Functions.md @@ -12,85 +12,74 @@ permalink: /Reference/Procedures-and-Functions ## A -### AppActivate - -### Asc, AscB, AscW +- [AppActivate](../tB/Core/AppActivate) -- activates an application window +- Asc, AscB, AscW ## B -### Beep +- [Beep](../tB/Core/Beep) -- sounds a tone through the computer’s speaker ## C -### ChDir - -### ChDrive - -### Chr\$, Chr, ChrB\$, ChrB, ChrW\$, ChrW +- [Calendar](../tB/Core/Calendar) +- [ChDir](../tB/Core/ChDir) -- changes the current directory or folder +- [ChDrive](../tB/Core/ChDrive) -- changes the current drive +- [CurDir](../tB/Core/CurDir) +- Chr\$, Chr, ChrB\$, ChrB, ChrW\$, ChrW ## D -### Date - -### DeleteSetting +- [Date](../tB/Core/Date) -- sets or returns the current system date +- [DeleteSetting](../tB/Core/DeleteSetting) -- deletes a section or key setting from an application’s entry in the Windows registry +- [Dir](../tB/Core/Dir) ## E ## F -### FileCopy - -### Filter - -### Format$, Format - -### FormatCurrency - -### FormatDateTime - -### FormatNumber - -### FormatPercent +- [FileCopy](../tB/Core/FileCopy) -- copies a file +- Filter +- Format$, Format +- FormatCurrency +- FormatDateTime +- FormatNumber +- FormatPercent ## G -### GetSetting +- [GetSetting](../tB/Core/GetSetting) -- returns a string key setting value from an application’s entry in the Windows registry ## H ## I -### InStr$, InStrB, InStr - -### InStrRev +- InStr$, InStrB, InStr +- InStrRev ## J -### Join +- Join ## K -### Kill +- Kill ## L -### LCase\$, LCase, UCase\$, UCase - -### Left\$, Left, LeftB$, LeftB - -### Load - -### LTrim\$, LTrim, RTrim\$, RTrim +- LCase\$, LCase, UCase\$, UCase +- Left\$, Left, LeftB$, LeftB +- Load +- LTrim\$, LTrim, RTrim\$, RTrim ## M -### Mid$, Mid, MidB\$, MidB - -### MkDir +- Mid$, Mid, MidB\$, MidB +- [MkDir](../tB/Core/MkDir) ## N -### Name +- Name +- [Now](../tB/Core/Now) ## P @@ -98,51 +87,39 @@ permalink: /Reference/Procedures-and-Functions ## R -### Randomize - -### Reset - -### Right\$, Right, RightB\$, RightB - -### RmDir - -### Rnd +- Randomize +- Reset +- Right\$, Right, RightB\$, RightB +- [RmDir](../tB/Core/RmDir) +- Rnd ## S -### SavePicture - -### SaveSetting - -### SendKeys - -### SetAttr - -### Space\$, Space - -### StrComp - -### StrConv - -### String\$, String - -### StrReverse +- SavePicture +- [SaveSetting](../tB/Core/SaveSetting) -- saves or creates an application entry in the application’s entry in the Windows registry +- [SendKeys](../tB/Core/SendKeys) +- SetAttr +- [Shell](../tB/Core/Shell) +- Space\$, Space +- StrComp +- StrConv +- String\$, String +- StrReverse ## T -### Time - -### Trim\$, Trim +- [Time](../tB/Core/Time) +- Trim\$, Trim ## U -### Unload +- Unload ## V ## W -### Width +- Width ## X diff --git a/docs/Reference/Statements.md b/docs/Reference/Statements.md index 902d380c..9d8b8396 100644 --- a/docs/Reference/Statements.md +++ b/docs/Reference/Statements.md @@ -2,6 +2,7 @@ title: Statements parent: Reference Section nav_order: 2 +has_toc: false permalink: /Reference/Statements --- From 703a3fa83cdfc62b80348f85ed72565f34895679 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Sat, 24 Jan 2026 17:53:56 +0100 Subject: [PATCH 32/40] Bring in aux_nav.html and head.html from JTD theme to enable local modifications. --- docs/_includes/components/aux_nav.html | 15 ++++++++++ docs/_includes/head.html | 41 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 docs/_includes/components/aux_nav.html create mode 100644 docs/_includes/head.html diff --git a/docs/_includes/components/aux_nav.html b/docs/_includes/components/aux_nav.html new file mode 100644 index 00000000..5e915199 --- /dev/null +++ b/docs/_includes/components/aux_nav.html @@ -0,0 +1,15 @@ +

\ No newline at end of file diff --git a/docs/_includes/head.html b/docs/_includes/head.html new file mode 100644 index 00000000..df032111 --- /dev/null +++ b/docs/_includes/head.html @@ -0,0 +1,41 @@ + + + + + + + + + + + {% if site.ga_tracking != nil %} + {% assign ga_tracking_ids = site.ga_tracking | split: "," %} + + + {% endif %} + + {% if site.search_enabled != false %} + + {% endif %} + + + + + + {% include_cached favicon.html %} + + {% seo %} + + {% include head_custom.html %} + + \ No newline at end of file From ff191c24e30aa70853369124adab94a948b36f15 Mon Sep 17 00:00:00 2001 From: Kuba Sunderland-Ober Date: Sat, 24 Jan 2026 19:40:24 +0100 Subject: [PATCH 33/40] Bring in light/dark switcher from https://github.com/mmcesim/mmcesim.org/blob/master/ --- docs/_config.yml | 4 + docs/_includes/components/aux_nav.html | 29 + docs/_includes/head.html | 10 + .../css/just-the-docs-switchable-src.css | 17217 ++++++++++++++++ docs/assets/css/just-the-docs-switchable.css | 3 + docs/assets/js/theme-switch.js | 35 + 6 files changed, 17298 insertions(+) create mode 100644 docs/assets/css/just-the-docs-switchable-src.css create mode 100644 docs/assets/css/just-the-docs-switchable.css create mode 100644 docs/assets/js/theme-switch.js diff --git a/docs/_config.yml b/docs/_config.yml index 7cd03f12..0a4deb46 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -19,6 +19,10 @@ defaults: path: "*/Images" values: image: true + - scope: + path: "assets/css" + values: + render_with_liquid: true # GitHub-style admonitions are supported, but we may wish to add custom # callouts below. diff --git a/docs/_includes/components/aux_nav.html b/docs/_includes/components/aux_nav.html index 5e915199..381c0ef0 100644 --- a/docs/_includes/components/aux_nav.html +++ b/docs/_includes/components/aux_nav.html @@ -1,5 +1,34 @@