Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch FreshLibDev Excluding Merge-Ins
This is equivalent to a diff from 3a7315a438 to b0efd8fbfc
2025-04-02
| ||
14:21 | Short branch for implementation BlendLine graphic procedure. Leaf check-in: e58da8c3f5 user: johnfound tags: BlendLine | |
09:17 | At the end DrawHLine and DrawVLine implemented. Some test code added about lines. Leaf check-in: b0efd8fbfc user: johnfound tags: FreshLibDev | |
2025-03-04
| ||
07:01 | Fixed some of the Win32 structures, especially for the serial interfaces control. check-in: 93f0aade05 user: johnfound tags: FreshLibDev | |
2011-03-01
| ||
09:15 | Cleanup of FreshLib branch. It becomes now "trunk" of FreshLib project and should be kept up to date and stable. For development purposes is to be used FreshLibDev branch. check-in: d97e5cbbee user: lhmnai0 tags: FreshLib | |
08:53 | Create new branch named "FreshLibDev". This branch have to be used for every development purposes. It may contains unstable and not working versions of the library. check-in: 8457878f01 user: lhmnai0 tags: FreshLibDev | |
08:28 | Fixes in simpledebug - OS independent code was moved to the root directory. Some labels was renamed in order to separate internal code from user procedures. check-in: 3a7315a438 user: lhmnai0 tags: FreshLib | |
2011-02-28
| ||
20:46 | Changed %OS% environment variable to %TargetOS% to avoid possible conflicts in Windows that have defined this variable. check-in: 7bde8f89b7 user: johnfound tags: FreshLib | |
Deleted freshlib/GUI/GUI.asm.
|
| < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/Linux/Main.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/Linux/TApplication.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/Linux/TWindow.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/Main.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/ObjTemplates.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/TApplication.asm.
|
| < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/TButton.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/TEdit.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/TForm.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/TLabel.asm.
|
| < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/TObject.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/TWindow.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/Win32/Main.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/Win32/SysEvents.asm.
Deleted freshlib/GUI/Win32/TApplication.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/Win32/TLabel.asm.
Deleted freshlib/GUI/Win32/TWindow.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/objects.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/progutils.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/GUI/sysevents.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added freshlib/License.txt.
> > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | FreshLib library project is (c) 2003..2013, John Found, Fresh development team; All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
Changes to freshlib/TestFreshLib.fpr.
cannot compute difference between binary files
Deleted freshlib/TestLib.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added freshlib/_doc/CheckListFresh3.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Legend: [+] - Fully implemented (more or less). [?] - Partially implemented/work in progress. [ ] - Not even started. Needed GUI controls in order to start work on Fresh IDE 3.0: [+] TForm [+] TSplitGrid [+] TAction (and Action lists) [+] TButton [+] TCheckbox [?] TTreeView [ ] TabControl [?] TSourceEditor [ ] TToolbar [?] TMenu [ ] TMenuBar [ ] TStatusbar [+] TProgressbar [ ] TListView, TListbox or other kind of table/grid control with columns. [+] TEdit - line editor [ ] THint [+] General message dialog. [ ] Open/Save dialogs. [ ] Color selection dialog. (not so important). [ ] Font select dialog. (not so important). |
Changes to freshlib/_doc/FreshLibRefMan.odt.
cannot compute difference between binary files
Added freshlib/_doc/Fresh_IDE.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <table class="index" align="right"> <tr><td class="index"> <b>Index</b><br> [http://fresh.flatassembler.net | Fresh home]<br> [FreshLib reference | FreshLib reference]<br> [Fresh user guide | Fresh tips&tricks]<br> </td></tr> </table> Fresh is a visual assembly language IDE with built-in FASM assembler. The main goal of Fresh is to make programming in assembly as fast and efficient as in other visual languages, without sacrificing the small application size and the raw power of assembly language. Because Fresh is the logical continuation of the FASM project in the area of visual programming, it is perfectly compatible with FASM and you can use all your knowledge about FASM to program in Fresh. Of course, you can use Fresh not only for Windows programming, but also to create programs for any OS that FASM supports - DOS, Linux, FreeBSD, BeOS, MenuetOS - the same way as you do this in FASM. Now, the main direction of Fresh development is towards creating FreshLib - freely portable library, that to provide portability for Fresh and programs created with Fresh to number of different OSes. Initially for Win32 and Linux. This site is [http://www.fossil-scm.org|fossil] repository of Fresh sources. You can clone the repository with following fossil command: <pre><b>fossil clone http://chiselapp.com/user/johnfound/repository/FreshIDE/ Fresh.fossil</b></pre> In order to use more functionality in this site, please [/login|login] as "anonimous" user. Particularly you will be able to follow the links in the source tree, to download code and to fill bug reports and feature requests. If you want to contribute to the project, please contact me (johnfound) on [http://board.flatassembler.net|FASM message board] In order to download compiled FreshIDE, visit [http://fresh.flatassembler.net|Fresh IDE home page.] You can report bugs, or make some feature requests here, in the [/reportlist|Tickets system] |
Added freshlib/_doc/Fresh_and_Linux.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | <h4>Running and debugging Linux applications in Windows with Fresh IDE</h4> Fresh can compile applications for Linux. But how to run and debug these applications? There are different approaches, including virtual machines, second computer, running Linux, or rebooting every time you want to test compiled project. Fresh provides one very simple way of testing Linux applications. This method is to use [http://andlinux.org|andLinux]. andLinux is complete Ubuntu distribution, that uses coLinux kernel in order to allow running of Linux inside Windows OS. How to setup andLinux to work with Fresh? <b>Step 1.</b> Download andLinux package from [http://andlinux.org/downloads.php|andLinux download page]. There are two packages: "KDE version" and "minimal/XFCE version" available. For using with Fresh IDE, it is not important what version you will choose. KDE package is very big and very slow distribution that contains many bundled programs and tools, but in general you will not need them. The size of KDE package is 500MB download and 5GB installed. The XFCE package is relatively smaller and faster. Relatively means 200MB downloaded file and 2GB installed on the disk. It is obvious that the right choice is to use XFCE package. <b>Step 2.</b> Run the downloaded setup file and answer to the different questions of the setup wizard. The important features that we need are: * coLinux version - choose the stable version (0.7.4 in my case) instead of latest (0.8.0) - we shall work with andLinux, not to play. * Memory size - 256MB RAM (or maybe more - if you can afford it). * Install XMing server on your primary screen. * Sound - you can enable or disable sound in Linux option - it is harmless although it is one more running server. * Startup type + Panel - select "run andLinux automatically as a NT service + use Windows shortcuts"; It is not very important, but can save you a little manual work and troubles later. * andLinux login - just select your user name and password for Linux root. * Windows File Access - it is important! - select "using CoFS", no matter it is not recommended. * File Access Using CoFS - important! - create one new directory somewhere and select it to be mount via CoFS. This will be the shared directory, visible from Windows and from Linux in the same time. All other features you can choose freely or simply leave them to default state. When you start installation, the installer will try to install network driver. It is possible Windows will protest and will atempt to mislead you by asking to not install not certified driver. You must ignore these attempts and firmly click "install". After installation of andLinux you have to restart Windows and probably andLinux will not run. :D It is because of the Windows firewall. All new network adapters are firewalled by default. As long as installed adapter (named TAP-Colinux) is virtual and local, you will not need any firewall so, go to control panel/Windows firewall/Advanced and uncheck "TAP-Colinux" adapter from the list of adapters. Then you can run some Linux program - in the Windows tray, there is a andLinux menu icon that have shortcuts to several Linux programs. <b>Step 3.</b> Install several additional Linux tools. You will need additionally debugger and come decent terminal emulator. I choose xterm for terminal, because it is small and white by default. ;) You can choose to use the built-in terminal named in the simple Linux manner: "xfce4-terminal" and console debugger "gdb". In this case you have skip this step. Start "Synaptic" - package manager for Ubuntu from the tray menu. You have to enter root password you choose on install. When Synaptic is started, click "Reload" to refresh the package list from the network and then use search to locate needed programs. I personally recommend "xterm" as terminal and "ddd" as a GUI front end to "gdb". Well, I recommend "ddd" only because it is only Linux debugger that I was able to run under andLinux and able to show disassembled code of the program. Mark selected programs for install, click on Apply button and wait until downloading and installation. Here you can encounter only one problem - your computer is behind a proxy server. If the proxy is normal proxy, you simply have to set its address and port in the Synaptic preferences and it should work. Completely another story is when the proxy is MS ISA server configured with NTLM user authorization. Most Linux programs can't work with such authorization and Synaptic is not an exception. Fortunately, there is a workaround of this situation. You need [http://ntlmaps.sourceforge.net/|ntlmaps] authorization proxy server. Setting up of this server is out of the scope of this article. On the ntlmaps home page you can read complete documentation and explanations. OK, we are ready with andLinux. Now you have working copy of Ubuntu inside your Windows box. It's time to configure Fresh to run Linux applications inside andLinux. Continue with: <b>Step 4.</b> Fresh IDE configuration. Run Fresh and open "Options|IDE options" dialog. Select "Debuggers and Emulators" page. Then select following directories and commands: * "andLinux directory" - the directory where you installed andLinux. * "andLinux shared directory" - shared directory you selected during andLinux installation. * "Linux debugger" - Enter "ddd" (or whatever debugger you choose). * "Linux terminal" - Enter "xterm -hold +mesg -e" - note the options. <h4>And voila! You finished the configuration!</h4> Now you can load the source of some Linux program (look at Fresh examples) and run it with shift+F9 or load it in the debugger with shift+F8. Fresh will detect when you compiled ELF executable and will run it in andLinux instead of Windows. |
Added freshlib/_doc/GUI.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 | <nowiki> <a name="GUI"><h1>FreshLib directory: GUI</h1></a> <p>GUI library defines many data structures and procedures that together form something that conditionally can be called "OOP". It is object oriented, as long as it deals with GUI "objects" - forms, controls, menus etc. All these objects are in fact structures of data. For every created object, the library allocates some memory and fills this memory with object parameters data.</p> <p>There are two types of data structures that describe GUI objects - classes and instances.</p> <p>The class is a structure that contains data commonly used by all objects of given type - for example all buttons use one class structure CButton.</p> <p>The instance is data structure that describes the properties and behavior of particular GUI object - for example button with icon "open file" that opens a file when the user click on it.</p> <a name="Classes"><h2>Classes</h2></a> <p>"Class" in FreshLib is a data structure, that have the following definition:</p> <pre class="fasm-code"> struct TObjectClass .ptrParent dd 0 .dataSize dd 0 .procCreate dd 0 .procDestroy dd 0 .procGetParam dd 0 .procSetParam dd 0 .procExecCmd dd 0 .procSysEventHandler dd 0 ends </pre> <p><span class="variable">.ptrParent</span> is a pointer to other TObjectClass structure, that appears as a parent class for the given class.</p> <p><span class="variable">.dataSize</span> contains the size of the object instance structure.</p> <p>The following fields are the pointers to procedures that provides the "work" of the object. All of these pointers as a rule can be <span class="constant">NULL</span>, if there is no need for such processing.</p> <a name="Create"><h4>Create</h4></a> <p><span class="variable">.procCreate</span> is a procedure that creates instance object of the given class. This field can be <span class="constant">NULL</span>. It has the following definition:</p> <pre class="fasm-code"> proc Create, .obj </pre> <p>This procedure sets needed values in the object instance data structure.</p> <a name="Destroy"><h4>Destroy</h4></a> <p><span class="variable">.procDestroy</span> is a procedure that destroys an instance of the given class.</p> <pre class="fasm-code"> proc Destroy, .obj </pre> <p>Destroys the object passed in <span class="variable">[.obj]</span> and frees all memory allocated for this object.</p> <a name="GetParam"><h4>GetParam</h4></a> <p><span class="variable">.procGetParam</span> is a pointer to the procedure that retrieves and returns the properties of the object.</p> <pre class="fasm-code"> proc GetParam, .obj, .paramID </pre> <p>Returns the value of the object <span class="variable">[.obj]</span> parameter with ID=<span class="variable">[.paramID]</span></p> <a name="Set"><h4>Set</h4></a> <p><span class="variable">.procSetParam</span> is a pointer to the procedure that set the properties of the object.</p> <pre class="fasm-code"> proc Set, .obj, .paramID, .value </pre> <p>For object <span class="variable">[.obj]</span>, set the value of the parameter with ID=<span class="variable">[.paramID]</span></p> <h4>ExecCmd</h4> <p><span class="variable">.procExecCmd</span> is a pointer to the procedure that executes object method.</p> <pre class="fasm-code"> proc ExecCmd, .obj, .method </pre> <p>For the object [.obj] this procedure executes the method with method ID in [.method].</p> <p>The methods can have arbitrary number of arguments, that are defined in the "object" definition (see below). When the method is executed, the procedure <span class="procedure">[.procExecCmd]</span> accepts pointer to the arguments array in <span class="register">[ebx]</span></p> <p>The user is supposed to call methods of the object with the macro "execute" The macro is defined following way:</p> <pre class="fasm-code"> macro execute obj*, meth*, [arg] </pre> <a name="SysEventHandler"><h4>SysEventHandler</h4></a> <p><span class="variable">.procSysEventHandler</span> is a pointer to the procedure that process the system events that are send to the object, i.e. mouse events, keyboard events etc.</p> <pre class="fasm-code"> proc SysEventHandler, .obj, .pEvent </pre> <p>Process one system event for object <span class="variable">[.obj]</span>. <span class="variable">[.pEvent]</span> contains pointer to the system event.</p> <p>All of these procedures are called internally and should not be used by the user of the library. How these procedure are called will be described later.</p> <p>TObjectClass structure is defined statically in memory in compile time, only once for every object class. Its definition is located in the library for the respective GUI element. For example CButton class structure is defined in the file TButton.asm that contains the code and data of the object class Button.</p> <p>In order to make construction of such structures easy, macro with name ObjectClass is defined in objects.asm</p> <a name="ObjectClass"><h3>ObjectClass Macro</h3></a> <pre class="fasm-code"> macro ObjectClass name*, parent*, procCreate*, procDestroy*, procGetParam*, procSetParam*, procExecCmd*, procSysEvents* </pre> <p>Every defined ObjectClass have a label that points to the begin of the structure. The name of this label is the name of the class, prefixed with "C".</p> <p>One example of ObjectClass definition is the definition of Window object class:</p> <pre class="fasm-code"> ObjectClass Window, \ Object, \ TWindow.Create, \ TWindow.Destroy, \ TWindow.Get, \ TWindow.Set, \ TWindow.ExecCmd, \ TWindow.SysEventHandler </pre> <p>This definition creates following data structure:</p> <pre class="fasm-code"> CWindow: dd CObject dd sizeof.TWindow dd TWindow.Create dd TWindow.Destroy dd TWindow.Get dd TWindow.Set, dd TWindow.ExecCmd dd TWindow.SysEventHandler </pre> <a name="Object structure"><h3>Object structure</h3></a> <p>Object instance is data structure that contains different fields. By that it is very similar to the normal FASM structures. As structures, the object is only description of the data but not the data itself. </p> <p>Objects can inherit field definitions by its parent objects. The memory instance of the object is allocated dynamically in runtime, when the object is created by call to the respective FreshLib functions.</p> <p>The definition of the object looks like following:</p> <pre class="fasm-code"> object TObject .ptrClass dd ? .OnCreate dd ? .OnDestroy dd ? method .AddChild, .objchild endobj object TWindow, TObject .handle dd ? .Fcaption dd ? .Fcursor dd ? param .x param .y param .width param .height param .visible param .caption param .parent param .cursor method .Refresh endobj object TButton, TWindow .state dd ? .Ficon dd ? .FiconAlign dd ? .Ftextalign dd ? .OnClick dd ? param .TextAlign param .Icon param .IconPosition endobj </pre> <p>By convention the names of the objects begin with "T".</p> <p>You can see that the object TWindow contains data fields, parameters and methods. The parameters defined by "param" macro are compile time constants which values are assigned automatically. There constants are local labels for the object structure. They are also inherited from the parent structure.</p> <p>The methods are very similar to parameters, in that they are constants, defined in compile time. But besides the constant, the method also have list of arguments, passed to the method, when executed.</p> <p>In the above example, <span class="variable">TButton.width</span> parameter is inherited from <span class="variable">TWindow</span> and have the same value as <span class="variable">TWindow.width</span> parameter.</p> <p>Also, <span class="variable">TWindow</span> have all fields of TObject defined as well.</p> <p>If we have to translate TWindow definition in plain FASM syntax it will looks like this:</p> <pre class="fasm-code"> struc TWindow { .ptrClass dd ? .OnCreate dd ? .OnDestroy dd ? .handle dd ? .Fcaption dd ? .Fcursor dd ? .x = $80000000 .y = $80000001 .width = $80000002 .height = $80000003 .visible = $80000004 .caption = $80000005 .parent = $80000006 .cursor = $80000007 } virtual at 0 TWindow TWindow sizeof.TWindow = $ end virtual </pre> <p>This directory contains the libraries providing portable GUI for assembly programming.</p> <p class="note">Note that this libraries are in very early stage of development, so the description in this chapter is preliminary and probably will be changed in one or another way in the near future.</p> <p>Later in this text, the whole GUI subsystem of FreshLib will be called FreshGUI</p> <h2>FreshGUI structure</h2> <p>The main idea behind the FreshGUI is to make one small OS dependent layer of functions, that to serve as an interface between the OS and the OS independent layer of the library.</p> <p>The first will translate OS events, such as mouse, keyboard, timers etc to one common standard of OS independent event handlers of the user interface objects – windows, buttons and other widgets.</p> <p>The biggest advantage of this approach is that the portability of the library is very easy – most of the code is OS independent and only little part of it have to be write in order to port the whole library to a new OS.</p> <p>The biggest drawback of this approach is the bigger size of the library, because, with this architecture, all controls in the library have to be created from scratch. It is impossible to use graphic controls that the OS provides – particularly Win32 controls - buttons, simple text editors, labels, combo boxes list and tree view controls etc.</p> <p>FreshGUI is not aimed to use all complex GUI system of the target OS. At first time, the goal of FreshGUI is to provide minimal but decent functionality that will do the job – writing portable applications in assembly language.</p> <h3>Graphics library</h3> <p>The graphics library provides procedures that draw graphics images and text on the screen. The library is OS dependent and is placed in the directory "graphics" in the root directory of FreshLib. The main conception of this library is ".raster" - represented by handle, object where the drawing happens. The exact meaning for this object is different for the different OS – in Win32 it is named "device context", in Linux it is "drawable" - window or pixmap.</p> <h3>Event translation layer</h3> <h4>Library "sysevents.asm"</h4> <p>This library contains event codes and data structures for FreshGUI OS independent events. For now only several events are defined:</p> <pre class="fasm-code"> seMouseMove seMouseEnter seMouseLeave seMouseBtnPress seMouseBtnRelease seMouseBtnClick seMouseBtnDblClick seTimer seKbdKeyPress seKbdKeyRelease seKbdStatusChanged seKbdChar sePaint </pre> <p>These events cover mouse, keyboard, timers and paint events.</p> <p>Every event have some arguments that have to be sent to the recipient event handler. The event code and the event arguments are contained in data structure, defined for every kind of events.</p> <p>The first dword of the event structure is the field <span class="variable">.event</span> that contains the event code.</p> <p>Here are the structures defined in sysevents.asm</p> <pre class="fasm-code"> struct TSysEvent .event dd ? ends </pre> <p>The base event structure.</p> <pre class="fasm-code"> struct TMouseMoveEvent . TSysEvent .x dd ? .y dd ? ends </pre> <p>The event is generated when the mouse cursor moves over some window or control. <span class="variable">.x</span> and <span class="variable">.y</span> contains the coordinates of the mouse cursor relative to the control this message is sent to.</p> <pre class="fasm-code"> struct TMouseButtonEvent . TSysEvent .Button dd ? .kbdStatus dd ? ends </pre> <p>This event is generated when some of the mouse buttons changes its state. The button that changes its state is specified in the field <span class="variable">.Button</span></p> <p>This field can accept following values:</p> <table style="margin-left: 40px;"> <tr><td><span class="constant">mbLeft</span> </td> <td align="right">= 0</td></tr> <tr><td><span class="constant">mbMiddle</span></td> <td align="right">= 1</td></tr> <tr><td><span class="constant">mbRight</span> </td> <td align="right">= 2</td></tr> </table> <p>The field <span class="variable">.kbdStatus</span> contains the status of remaining mouse buttons and keyboard modifying buttons. These buttons are represented by bits in the field:</p> <table style="margin-left: 40px;"> <tr><td><span class="constant">maskBtnLeft</span> </td> <td align="right">= $01</td></tr> <tr><td><span class="constant">maskBtnMiddle</span> </td> <td align="right">= $02</td></tr> <tr><td><span class="constant">maskBtnRight</span> </td> <td align="right">= $04</td></tr> <tr><td><span class="constant">maskCtrl</span> </td> <td align="right">= $08</td></tr> <tr><td><span class="constant">maskShift</span> </td> <td align="right">= $10</td></tr> </table> <pre class="fasm-code"> struct TMouseEnterEvent . TSysEvent ends </pre> <p>This event is generated when the mouse cursor enters or leaves some control. There is no additional parameters besides the event code.</p> <pre class="fasm-code"> struct TKeyboardEvent . TSysEvent .key dd ? .kbdStatus dd ? ends </pre> <p>This event is generated on keyboard button press/release. The field <span class="variable">.key</span> contains the code of the pressed button. <span class="variable">.kbdStatus</span> have the same meaning and the same values as in TMouseButtonEvent.</p> <pre class="fasm-code"> struct TTimerEvent . TSysEvent ends </pre> <p>TTimerEvent is generated on timer events. :)</p> <pre class="fasm-code"> struct TPaintEvent . TSysEvent .raster dd ? ; ID of the raster where you should paint. .rect RECT ends </pre> <p>TPaintEvent is generated when given control have to be repainted. The field <span class="variable">.raster</span> contains the handle to the graphic surface where the program have to draw. This handle have different meanings in the different target OS, but it simply need to be understandable by the graphics procedures from the OS dependent library graphics.asm.</p> <p>The field <span class="variable">.rect</span> is the rectangle of the control that needs to be repainted.</p> <h3>Library "main.asm"</h3> <a name="Run"><h4>proc Run</h4></a> <p>This procedure is the main program loop of the GUI application.</p> <p>The procedure Run process all pending system events, then calls once the OnIdle event handler of the application object and then sleeps until new events are sent by the OS.</p> <p>When the OS terminates the application – the procedure returns an exit code.</p> <p>The user uses this procedure following way:</p> <pre class="fasm-code"> stdcall Run jmp ExitApplication </pre> <a name="ProcessSystemEvents"><h4>proc ProcessSystemEvents</h4></a> <p>This procedure process the events generated by the OS. If there are waiting events in the queue, the procedure reads them, translates them to FreshGUI event data structures and calls the event handlers of the respective controls.</p> <p>If there is no pending events in the queue, ProcessSystemEvents ends with <span class="flag">CF=0</span></p> <p>The second task this procedure serves is to detect the end of the application. In this case it ends with <span class="flag">CF=1</span>.</p> <p>This procedure is call from the main event loop of the application. Also, the user can periodically call this procedure in order to not allow hanging of the user interface during long processing of some data.</p> <a name="WaitForSystemEvent"><h4>proc WaitForSystemEvent</h4></a> <p>This procedure waits until some system message is posted to the application event queue. Then it exits. During the wait, very low CPU power is consumed by the application.</p> <a name="Terminate"><h4>proc Terminate</h4></a> <p>It provides all finalization tasks and ends the application. The exit code is provided in <span class="register">EAX</span>.</p> <a name="Template engine"><h3>Template engine</h3></a> <p>The template engine provides creation of complex window structures with tree layout from memory data structure, called template. The templates makes creation of dialog windows containing children windows and non visual objects.</p> <p>Templates can be visually created and edited. The template format used by FreshLib is flexible and allows all parameters and fields of the objects to be set to needed values during creation of the window.</p> <p>The template engine is located in the file ObjTemplates.asm</p> <a name="Template data structure"><h4>Template data structure</h4></a> <p>The template is consisted from one or more data structures of type TObjTemplate, defined following way:</p> <pre class="fasm-code"> struct TObjTemplate .flags dd ? .class dd ? .ptrVar dd ? .paramsize dd ? .params: ends </pre> <p><span class="variable">.flags</span> – controls what is the place of the object in the whole tree structure.</p> <p>Can accept one or both of the following values, combined with OR:</p> <table style="margin-left: 40px;"> <tr><td><span class="constant">tfChild</span> </td><td>=0</td> <td>means the object is child of the last object with tfParent set.</td></tr> <tr><td><span class="constant">tfParent</span> </td><td>=1</td> <td>means the given object is parent and there will be next TObjTemplate structure that will be a child object.</td></tr> <tr style="vertical-align: top;"><td><span class="constant">tfEnd</span> </td><td> =2</td> <td>means the given object is the last child of its parent. Note, that one object can be parent and child in the same time. If the current template is at root level – the processing of template stops, after creating the current element and all its children.</td></tr> </table> <p><span class="variable">.class</span> – pointer to TObjectClass data structure for the created object.</p> <p><span class="variable">.ptrVar</span> – pointer to dword variable that to accept the pointer to the created object.</p> <p><span class="variable">.paramsize</span> – the size of the additional data to the end of the template. Note, that TObjTemplate is variable length structure, not fixed. sizeof.TObjTemplate contains the size of the header part of the structure.</p> <p><span class="variable">.params</span>: after the header fields there can be arbitrary count of dword pairs: (<span class="variable">paramID</span>, <span class="variable">Value</span>) that to be set the the object during creation. This sequence ends with dword <span class="constant">$FFFFFF</span> (<span class="constant">-1</span>) value for paramID. </p> <p>Easy creation of templates is provided with macro ObjTemplate:</p> <pre class="fasm-code"> macro ObjTemplate flags, class, name, [id, param] </pre> <p>This macro allows use of string values for params and computes automatically the values for <span class="variable">TObjTemplate.paramsize</span></p> <p><span class="variable">flags</span> – set of (<span class="constant">tfParent</span>, <span class="constant">tfEnd</span>) constants.</p> <p><span class="variable">class</span> – the base name of the object class (without prefix C) – i.e. Form, Window, Button, etc.</p> <p><span class="variable">name</span> – label of the variable to receive the pointer to the created object.</p> <p><span class="variable">id</span> – parameter ID or offset in the object structure.</p> <p><span class="variable">param</span> – value of the parameter. Can be dword number or string constant. In the case the parameter value is string, it will be automatically created in the memory and the pointer to this string will be placed as a param value.</p> <p>One simple example of template structure:</p> <pre class="fasm-code"> ObjTemplate tfParent or tfEnd, Form, frmMain, \ visible, TRUE, \ x, 100, \ y, 50, \ width, 640, \ height, 480, \ caption, 'Fresh portable Win32/Linux application test.' ObjTemplate tfChild, Button, btnChild1, \ visible, TRUE, \ x, 64, \ y, 48, \ width, 64, \ height, 24, \ caption, 'Button1', \ OnClick, Button1Click ObjTemplate tfChild or tfEnd, Button, btnChild2, \ x, 136, \ y, 48, \ width, 64, \ height, 24, \ caption, 'Button2' ,\ visible, TRUE </pre> <a name="Template engine procedures"><h4>Template engine procedures</h4></a> <p>Actually the procedure is one:</p> <pre class="fasm-code"> proc CreateFromTemplate, .ptrTemplate, .parent </pre> <p>This procedure creates all objects from the template, pointed by <span class="variable">[.ptrTemplate]</span> as a parent of <span class="variable">[.parent]</span> argument.</p> <p><span class="variable">.ptrTemplate</span> points to TObjTemplate structure.</p> <p><span class="variable">.parent</span> points to TObject descendant structure. In most cases it will be actually descendant of TWindow or <span class="constant">NULL</span> if the created object is not a child of any window.</p> <p>Returns: <span class="register">EBX</span> contains a pointer to the topmost of the created object (it is first of the created objects)</p> <p>All pointers of the objects are stored in the specified in the template variables ( i.e. <span class="variable">[TObjTemplate.ptrVar]</span>)</p> </nowiki> |
Added freshlib/_doc/RFC/rfc1950.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 | Network Working Group P. Deutsch Request for Comments: 1950 Aladdin Enterprises Category: Informational J-L. Gailly Info-ZIP May 1996 ZLIB Compressed Data Format Specification version 3.3 Status of This Memo This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind. Distribution of this memo is unlimited. IESG Note: The IESG takes no position on the validity of any Intellectual Property Rights statements contained in this document. Notices Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly Permission is granted to copy and distribute this document for any purpose and without charge, including translations into other languages and incorporation into compilations, provided that the copyright notice and this notice are preserved, and that any substantive changes or deletions from the original are clearly marked. A pointer to the latest version of this and related documentation in HTML format can be found at the URL <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>. Abstract This specification defines a lossless compressed data format. The data can be produced or consumed, even for an arbitrarily long sequentially presented input data stream, using only an a priori bounded amount of intermediate storage. The format presently uses the DEFLATE compression method but can be easily extended to use other compression methods. It can be implemented readily in a manner not covered by patents. This specification also defines the ADLER-32 checksum (an extension and improvement of the Fletcher checksum), used for detection of data corruption, and provides an algorithm for computing it. Deutsch & Gailly Informational [Page 1] RFC 1950 ZLIB Compressed Data Format Specification May 1996 Table of Contents 1. Introduction ................................................... 2 1.1. Purpose ................................................... 2 1.2. Intended audience ......................................... 3 1.3. Scope ..................................................... 3 1.4. Compliance ................................................ 3 1.5. Definitions of terms and conventions used ................ 3 1.6. Changes from previous versions ............................ 3 2. Detailed specification ......................................... 3 2.1. Overall conventions ....................................... 3 2.2. Data format ............................................... 4 2.3. Compliance ................................................ 7 3. References ..................................................... 7 4. Source code .................................................... 8 5. Security Considerations ........................................ 8 6. Acknowledgements ............................................... 8 7. Authors' Addresses ............................................. 8 8. Appendix: Rationale ............................................ 9 9. Appendix: Sample code ..........................................10 1. Introduction 1.1. Purpose The purpose of this specification is to define a lossless compressed data format that: * Is independent of CPU type, operating system, file system, and character set, and hence can be used for interchange; * Can be produced or consumed, even for an arbitrarily long sequentially presented input data stream, using only an a priori bounded amount of intermediate storage, and hence can be used in data communications or similar structures such as Unix filters; * Can use a number of different compression methods; * Can be implemented readily in a manner not covered by patents, and hence can be practiced freely. The data format defined by this specification does not attempt to allow random access to compressed data. Deutsch & Gailly Informational [Page 2] RFC 1950 ZLIB Compressed Data Format Specification May 1996 1.2. Intended audience This specification is intended for use by implementors of software to compress data into zlib format and/or decompress data from zlib format. The text of the specification assumes a basic background in programming at the level of bits and other primitive data representations. 1.3. Scope The specification specifies a compressed data format that can be used for in-memory compression of a sequence of arbitrary bytes. 1.4. Compliance Unless otherwise indicated below, a compliant decompressor must be able to accept and decompress any data set that conforms to all the specifications presented here; a compliant compressor must produce data sets that conform to all the specifications presented here. 1.5. Definitions of terms and conventions used byte: 8 bits stored or transmitted as a unit (same as an octet). (For this specification, a byte is exactly 8 bits, even on machines which store a character on a number of bits different from 8.) See below, for the numbering of bits within a byte. 1.6. Changes from previous versions Version 3.1 was the first public release of this specification. In version 3.2, some terminology was changed and the Adler-32 sample code was rewritten for clarity. In version 3.3, the support for a preset dictionary was introduced, and the specification was converted to RFC style. 2. Detailed specification 2.1. Overall conventions In the diagrams below, a box like this: +---+ | | <-- the vertical bars might be missing +---+ Deutsch & Gailly Informational [Page 3] RFC 1950 ZLIB Compressed Data Format Specification May 1996 represents one byte; a box like this: +==============+ | | +==============+ represents a variable number of bytes. Bytes stored within a computer do not have a "bit order", since they are always treated as a unit. However, a byte considered as an integer between 0 and 255 does have a most- and least- significant bit, and since we write numbers with the most- significant digit on the left, we also write bytes with the most- significant bit on the left. In the diagrams below, we number the bits of a byte so that bit 0 is the least-significant bit, i.e., the bits are numbered: +--------+ |76543210| +--------+ Within a computer, a number may occupy multiple bytes. All multi-byte numbers in the format described here are stored with the MOST-significant byte first (at the lower memory address). For example, the decimal number 520 is stored as: 0 1 +--------+--------+ |00000010|00001000| +--------+--------+ ^ ^ | | | + less significant byte = 8 + more significant byte = 2 x 256 2.2. Data format A zlib stream has the following structure: 0 1 +---+---+ |CMF|FLG| (more-->) +---+---+ Deutsch & Gailly Informational [Page 4] RFC 1950 ZLIB Compressed Data Format Specification May 1996 (if FLG.FDICT set) 0 1 2 3 +---+---+---+---+ | DICTID | (more-->) +---+---+---+---+ +=====================+---+---+---+---+ |...compressed data...| ADLER32 | +=====================+---+---+---+---+ Any data which may appear after ADLER32 are not part of the zlib stream. CMF (Compression Method and flags) This byte is divided into a 4-bit compression method and a 4- bit information field depending on the compression method. bits 0 to 3 CM Compression method bits 4 to 7 CINFO Compression info CM (Compression method) This identifies the compression method used in the file. CM = 8 denotes the "deflate" compression method with a window size up to 32K. This is the method used by gzip and PNG (see references [1] and [2] in Chapter 3, below, for the reference documents). CM = 15 is reserved. It might be used in a future version of this specification to indicate the presence of an extra field before the compressed data. CINFO (Compression info) For CM = 8, CINFO is the base-2 logarithm of the LZ77 window size, minus eight (CINFO=7 indicates a 32K window size). Values of CINFO above 7 are not allowed in this version of the specification. CINFO is not defined in this specification for CM not equal to 8. FLG (FLaGs) This flag byte is divided as follows: bits 0 to 4 FCHECK (check bits for CMF and FLG) bit 5 FDICT (preset dictionary) bits 6 to 7 FLEVEL (compression level) The FCHECK value must be such that CMF and FLG, when viewed as a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG), is a multiple of 31. Deutsch & Gailly Informational [Page 5] RFC 1950 ZLIB Compressed Data Format Specification May 1996 FDICT (Preset dictionary) If FDICT is set, a DICT dictionary identifier is present immediately after the FLG byte. The dictionary is a sequence of bytes which are initially fed to the compressor without producing any compressed output. DICT is the Adler-32 checksum of this sequence of bytes (see the definition of ADLER32 below). The decompressor can use this identifier to determine which dictionary has been used by the compressor. FLEVEL (Compression level) These flags are available for use by specific compression methods. The "deflate" method (CM = 8) sets these flags as follows: 0 - compressor used fastest algorithm 1 - compressor used fast algorithm 2 - compressor used default algorithm 3 - compressor used maximum compression, slowest algorithm The information in FLEVEL is not needed for decompression; it is there to indicate if recompression might be worthwhile. compressed data For compression method 8, the compressed data is stored in the deflate compressed data format as described in the document "DEFLATE Compressed Data Format Specification" by L. Peter Deutsch. (See reference [3] in Chapter 3, below) Other compressed data formats are not specified in this version of the zlib specification. ADLER32 (Adler-32 checksum) This contains a checksum value of the uncompressed data (excluding any dictionary data) computed according to Adler-32 algorithm. This algorithm is a 32-bit extension and improvement of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 standard. See references [4] and [5] in Chapter 3, below) Adler-32 is composed of two sums accumulated per byte: s1 is the sum of all bytes, s2 is the sum of all s1 values. Both sums are done modulo 65521. s1 is initialized to 1, s2 to zero. The Adler-32 checksum is stored as s2*65536 + s1 in most- significant-byte first (network) order. Deutsch & Gailly Informational [Page 6] RFC 1950 ZLIB Compressed Data Format Specification May 1996 2.3. Compliance A compliant compressor must produce streams with correct CMF, FLG and ADLER32, but need not support preset dictionaries. When the zlib data format is used as part of another standard data format, the compressor may use only preset dictionaries that are specified by this other data format. If this other format does not use the preset dictionary feature, the compressor must not set the FDICT flag. A compliant decompressor must check CMF, FLG, and ADLER32, and provide an error indication if any of these have incorrect values. A compliant decompressor must give an error indication if CM is not one of the values defined in this specification (only the value 8 is permitted in this version), since another value could indicate the presence of new features that would cause subsequent data to be interpreted incorrectly. A compliant decompressor must give an error indication if FDICT is set and DICTID is not the identifier of a known preset dictionary. A decompressor may ignore FLEVEL and still be compliant. When the zlib data format is being used as a part of another standard format, a compliant decompressor must support all the preset dictionaries specified by the other format. When the other format does not use the preset dictionary feature, a compliant decompressor must reject any stream in which the FDICT flag is set. 3. References [1] Deutsch, L.P.,"GZIP Compressed Data Format Specification", available in ftp://ftp.uu.net/pub/archiving/zip/doc/ [2] Thomas Boutell, "PNG (Portable Network Graphics) specification", available in ftp://ftp.uu.net/graphics/png/documents/ [3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", available in ftp://ftp.uu.net/pub/archiving/zip/doc/ [4] Fletcher, J. G., "An Arithmetic Checksum for Serial Transmissions," IEEE Transactions on Communications, Vol. COM-30, No. 1, January 1982, pp. 247-252. [5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms," November, 1993, pp. 144, 145. (Available from gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073. Deutsch & Gailly Informational [Page 7] RFC 1950 ZLIB Compressed Data Format Specification May 1996 4. Source code Source code for a C language implementation of a "zlib" compliant library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/. 5. Security Considerations A decoder that fails to check the ADLER32 checksum value may be subject to undetected data corruption. 6. Acknowledgements Trademarks cited in this document are the property of their respective owners. Jean-Loup Gailly and Mark Adler designed the zlib format and wrote the related software described in this specification. Glenn Randers-Pehrson converted this document to RFC and HTML format. 7. Authors' Addresses L. Peter Deutsch Aladdin Enterprises 203 Santa Margarita Ave. Menlo Park, CA 94025 Phone: (415) 322-0103 (AM only) FAX: (415) 322-1734 EMail: <ghost@aladdin.com> Jean-Loup Gailly EMail: <gzip@prep.ai.mit.edu> Questions about the technical content of this specification can be sent by email to Jean-Loup Gailly <gzip@prep.ai.mit.edu> and Mark Adler <madler@alumni.caltech.edu> Editorial comments on this specification can be sent by email to L. Peter Deutsch <ghost@aladdin.com> and Glenn Randers-Pehrson <randeg@alumni.rpi.edu> Deutsch & Gailly Informational [Page 8] RFC 1950 ZLIB Compressed Data Format Specification May 1996 8. Appendix: Rationale 8.1. Preset dictionaries A preset dictionary is specially useful to compress short input sequences. The compressor can take advantage of the dictionary context to encode the input in a more compact manner. The decompressor can be initialized with the appropriate context by virtually decompressing a compressed version of the dictionary without producing any output. However for certain compression algorithms such as the deflate algorithm this operation can be achieved without actually performing any decompression. The compressor and the decompressor must use exactly the same dictionary. The dictionary may be fixed or may be chosen among a certain number of predefined dictionaries, according to the kind of input data. The decompressor can determine which dictionary has been chosen by the compressor by checking the dictionary identifier. This document does not specify the contents of predefined dictionaries, since the optimal dictionaries are application specific. Standard data formats using this feature of the zlib specification must precisely define the allowed dictionaries. 8.2. The Adler-32 algorithm The Adler-32 algorithm is much faster than the CRC32 algorithm yet still provides an extremely low probability of undetected errors. The modulo on unsigned long accumulators can be delayed for 5552 bytes, so the modulo operation time is negligible. If the bytes are a, b, c, the second sum is 3a + 2b + c + 3, and so is position and order sensitive, unlike the first sum, which is just a checksum. That 65521 is prime is important to avoid a possible large class of two-byte errors that leave the check unchanged. (The Fletcher checksum uses 255, which is not prime and which also makes the Fletcher check insensitive to single byte changes 0 <-> 255.) The sum s1 is initialized to 1 instead of zero to make the length of the sequence part of s2, so that the length does not have to be checked separately. (Any sequence of zeroes has a Fletcher checksum of zero.) Deutsch & Gailly Informational [Page 9] RFC 1950 ZLIB Compressed Data Format Specification May 1996 9. Appendix: Sample code The following C code computes the Adler-32 checksum of a data buffer. It is written for clarity, not for speed. The sample code is in the ANSI C programming language. Non C users may find it easier to read with these hints: & Bitwise AND operator. >> Bitwise right shift operator. When applied to an unsigned quantity, as here, right shift inserts zero bit(s) at the left. << Bitwise left shift operator. Left shift inserts zero bit(s) at the right. ++ "n++" increments the variable n. % modulo operator: a % b is the remainder of a divided by b. #define BASE 65521 /* largest prime smaller than 65536 */ /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and return the updated checksum. The Adler-32 checksum should be initialized to 1. Usage example: unsigned long adler = 1L; while (read_buffer(buffer, length) != EOF) { adler = update_adler32(adler, buffer, length); } if (adler != original_adler) error(); */ unsigned long update_adler32(unsigned long adler, unsigned char *buf, int len) { unsigned long s1 = adler & 0xffff; unsigned long s2 = (adler >> 16) & 0xffff; int n; for (n = 0; n < len; n++) { s1 = (s1 + buf[n]) % BASE; s2 = (s2 + s1) % BASE; } return (s2 << 16) + s1; } /* Return the adler32 of the bytes buf[0..len-1] */ Deutsch & Gailly Informational [Page 10] RFC 1950 ZLIB Compressed Data Format Specification May 1996 unsigned long adler32(unsigned char *buf, int len) { return update_adler32(1L, buf, len); } Deutsch & Gailly Informational [Page 11] |
Added freshlib/_doc/RFC/rfc1951.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 | Network Working Group P. Deutsch Request for Comments: 1951 Aladdin Enterprises Category: Informational May 1996 DEFLATE Compressed Data Format Specification version 1.3 Status of This Memo This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind. Distribution of this memo is unlimited. IESG Note: The IESG takes no position on the validity of any Intellectual Property Rights statements contained in this document. Notices Copyright (c) 1996 L. Peter Deutsch Permission is granted to copy and distribute this document for any purpose and without charge, including translations into other languages and incorporation into compilations, provided that the copyright notice and this notice are preserved, and that any substantive changes or deletions from the original are clearly marked. A pointer to the latest version of this and related documentation in HTML format can be found at the URL <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>. Abstract This specification defines a lossless compressed data format that compresses data using a combination of the LZ77 algorithm and Huffman coding, with efficiency comparable to the best currently available general-purpose compression methods. The data can be produced or consumed, even for an arbitrarily long sequentially presented input data stream, using only an a priori bounded amount of intermediate storage. The format can be implemented readily in a manner not covered by patents. Deutsch Informational [Page 1] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 Table of Contents 1. Introduction ................................................... 2 1.1. Purpose ................................................... 2 1.2. Intended audience ......................................... 3 1.3. Scope ..................................................... 3 1.4. Compliance ................................................ 3 1.5. Definitions of terms and conventions used ................ 3 1.6. Changes from previous versions ............................ 4 2. Compressed representation overview ............................. 4 3. Detailed specification ......................................... 5 3.1. Overall conventions ....................................... 5 3.1.1. Packing into bytes .................................. 5 3.2. Compressed block format ................................... 6 3.2.1. Synopsis of prefix and Huffman coding ............... 6 3.2.2. Use of Huffman coding in the "deflate" format ....... 7 3.2.3. Details of block format ............................. 9 3.2.4. Non-compressed blocks (BTYPE=00) ................... 11 3.2.5. Compressed blocks (length and distance codes) ...... 11 3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13 3.3. Compliance ............................................... 14 4. Compression algorithm details ................................. 14 5. References .................................................... 16 6. Security Considerations ....................................... 16 7. Source code ................................................... 16 8. Acknowledgements .............................................. 16 9. Author's Address .............................................. 17 1. Introduction 1.1. Purpose The purpose of this specification is to define a lossless compressed data format that: * Is independent of CPU type, operating system, file system, and character set, and hence can be used for interchange; * Can be produced or consumed, even for an arbitrarily long sequentially presented input data stream, using only an a priori bounded amount of intermediate storage, and hence can be used in data communications or similar structures such as Unix filters; * Compresses data with efficiency comparable to the best currently available general-purpose compression methods, and in particular considerably better than the "compress" program; * Can be implemented readily in a manner not covered by patents, and hence can be practiced freely; Deutsch Informational [Page 2] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 * Is compatible with the file format produced by the current widely used gzip utility, in that conforming decompressors will be able to read data produced by the existing gzip compressor. The data format defined by this specification does not attempt to: * Allow random access to compressed data; * Compress specialized data (e.g., raster graphics) as well as the best currently available specialized algorithms. A simple counting argument shows that no lossless compression algorithm can compress every possible input data set. For the format defined here, the worst case expansion is 5 bytes per 32K- byte block, i.e., a size increase of 0.015% for large data sets. English text usually compresses by a factor of 2.5 to 3; executable files usually compress somewhat less; graphical data such as raster images may compress much more. 1.2. Intended audience This specification is intended for use by implementors of software to compress data into "deflate" format and/or decompress data from "deflate" format. The text of the specification assumes a basic background in programming at the level of bits and other primitive data representations. Familiarity with the technique of Huffman coding is helpful but not required. 1.3. Scope The specification specifies a method for representing a sequence of bytes as a (usually shorter) sequence of bits, and a method for packing the latter bit sequence into bytes. 1.4. Compliance Unless otherwise indicated below, a compliant decompressor must be able to accept and decompress any data set that conforms to all the specifications presented here; a compliant compressor must produce data sets that conform to all the specifications presented here. 1.5. Definitions of terms and conventions used Byte: 8 bits stored or transmitted as a unit (same as an octet). For this specification, a byte is exactly 8 bits, even on machines Deutsch Informational [Page 3] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 which store a character on a number of bits different from eight. See below, for the numbering of bits within a byte. String: a sequence of arbitrary bytes. 1.6. Changes from previous versions There have been no technical changes to the deflate format since version 1.1 of this specification. In version 1.2, some terminology was changed. Version 1.3 is a conversion of the specification to RFC style. 2. Compressed representation overview A compressed data set consists of a series of blocks, corresponding to successive blocks of input data. The block sizes are arbitrary, except that non-compressible blocks are limited to 65,535 bytes. Each block is compressed using a combination of the LZ77 algorithm and Huffman coding. The Huffman trees for each block are independent of those for previous or subsequent blocks; the LZ77 algorithm may use a reference to a duplicated string occurring in a previous block, up to 32K input bytes before. Each block consists of two parts: a pair of Huffman code trees that describe the representation of the compressed data part, and a compressed data part. (The Huffman trees themselves are compressed using Huffman encoding.) The compressed data consists of a series of elements of two types: literal bytes (of strings that have not been detected as duplicated within the previous 32K input bytes), and pointers to duplicated strings, where a pointer is represented as a pair <length, backward distance>. The representation used in the "deflate" format limits distances to 32K bytes and lengths to 258 bytes, but does not limit the size of a block, except for uncompressible blocks, which are limited as noted above. Each type of value (literals, distances, and lengths) in the compressed data is represented using a Huffman code, using one code tree for literals and lengths and a separate code tree for distances. The code trees for each block appear in a compact form just before the compressed data for that block. Deutsch Informational [Page 4] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 3. Detailed specification 3.1. Overall conventions In the diagrams below, a box like this: +---+ | | <-- the vertical bars might be missing +---+ represents one byte; a box like this: +==============+ | | +==============+ represents a variable number of bytes. Bytes stored within a computer do not have a "bit order", since they are always treated as a unit. However, a byte considered as an integer between 0 and 255 does have a most- and least- significant bit, and since we write numbers with the most- significant digit on the left, we also write bytes with the most- significant bit on the left. In the diagrams below, we number the bits of a byte so that bit 0 is the least-significant bit, i.e., the bits are numbered: +--------+ |76543210| +--------+ Within a computer, a number may occupy multiple bytes. All multi-byte numbers in the format described here are stored with the least-significant byte first (at the lower memory address). For example, the decimal number 520 is stored as: 0 1 +--------+--------+ |00001000|00000010| +--------+--------+ ^ ^ | | | + more significant byte = 2 x 256 + less significant byte = 8 3.1.1. Packing into bytes This document does not address the issue of the order in which bits of a byte are transmitted on a bit-sequential medium, since the final data format described here is byte- rather than Deutsch Informational [Page 5] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 bit-oriented. However, we describe the compressed block format in below, as a sequence of data elements of various bit lengths, not a sequence of bytes. We must therefore specify how to pack these data elements into bytes to form the final compressed byte sequence: * Data elements are packed into bytes in order of increasing bit number within the byte, i.e., starting with the least-significant bit of the byte. * Data elements other than Huffman codes are packed starting with the least-significant bit of the data element. * Huffman codes are packed starting with the most- significant bit of the code. In other words, if one were to print out the compressed data as a sequence of bytes, starting with the first byte at the *right* margin and proceeding to the *left*, with the most- significant bit of each byte on the left as usual, one would be able to parse the result from right to left, with fixed-width elements in the correct MSB-to-LSB order and Huffman codes in bit-reversed order (i.e., with the first bit of the code in the relative LSB position). 3.2. Compressed block format 3.2.1. Synopsis of prefix and Huffman coding Prefix coding represents symbols from an a priori known alphabet by bit sequences (codes), one code for each symbol, in a manner such that different symbols may be represented by bit sequences of different lengths, but a parser can always parse an encoded string unambiguously symbol-by-symbol. We define a prefix code in terms of a binary tree in which the two edges descending from each non-leaf node are labeled 0 and 1 and in which the leaf nodes correspond one-for-one with (are labeled with) the symbols of the alphabet; then the code for a symbol is the sequence of 0's and 1's on the edges leading from the root to the leaf labeled with that symbol. For example: Deutsch Informational [Page 6] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 /\ Symbol Code 0 1 ------ ---- / \ A 00 /\ B B 1 0 1 C 011 / \ D 010 A /\ 0 1 / \ D C A parser can decode the next symbol from an encoded input stream by walking down the tree from the root, at each step choosing the edge corresponding to the next input bit. Given an alphabet with known symbol frequencies, the Huffman algorithm allows the construction of an optimal prefix code (one which represents strings with those symbol frequencies using the fewest bits of any possible prefix codes for that alphabet). Such a code is called a Huffman code. (See reference [1] in Chapter 5, references for additional information on Huffman codes.) Note that in the "deflate" format, the Huffman codes for the various alphabets must not exceed certain maximum code lengths. This constraint complicates the algorithm for computing code lengths from symbol frequencies. Again, see Chapter 5, references for details. 3.2.2. Use of Huffman coding in the "deflate" format The Huffman codes used for each alphabet in the "deflate" format have two additional rules: * All codes of a given bit length have lexicographically consecutive values, in the same order as the symbols they represent; * Shorter codes lexicographically precede longer codes. Deutsch Informational [Page 7] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 We could recode the example above to follow this rule as follows, assuming that the order of the alphabet is ABCD: Symbol Code ------ ---- A 10 B 0 C 110 D 111 I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are lexicographically consecutive. Given this rule, we can define the Huffman code for an alphabet just by giving the bit lengths of the codes for each symbol of the alphabet in order; this is sufficient to determine the actual codes. In our example, the code is completely defined by the sequence of bit lengths (2, 1, 3, 3). The following algorithm generates the codes as integers, intended to be read from most- to least-significant bit. The code lengths are initially in tree[I].Len; the codes are produced in tree[I].Code. 1) Count the number of codes for each code length. Let bl_count[N] be the number of codes of length N, N >= 1. 2) Find the numerical value of the smallest code for each code length: code = 0; bl_count[0] = 0; for (bits = 1; bits <= MAX_BITS; bits++) { code = (code + bl_count[bits-1]) << 1; next_code[bits] = code; } 3) Assign numerical values to all codes, using consecutive values for all codes of the same length with the base values determined at step 2. Codes that are never used (which have a bit length of zero) must not be assigned a value. for (n = 0; n <= max_code; n++) { len = tree[n].Len; if (len != 0) { tree[n].Code = next_code[len]; next_code[len]++; } Deutsch Informational [Page 8] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 } Example: Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3, 3, 2, 4, 4). After step 1, we have: N bl_count[N] - ----------- 2 1 3 5 4 2 Step 2 computes the following next_code values: N next_code[N] - ------------ 1 0 2 0 3 2 4 14 Step 3 produces the following code values: Symbol Length Code ------ ------ ---- A 3 010 B 3 011 C 3 100 D 3 101 E 3 110 F 2 00 G 4 1110 H 4 1111 3.2.3. Details of block format Each block of compressed data begins with 3 header bits containing the following data: first bit BFINAL next 2 bits BTYPE Note that the header bits do not necessarily begin on a byte boundary, since a block does not necessarily occupy an integral number of bytes. Deutsch Informational [Page 9] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 BFINAL is set if and only if this is the last block of the data set. BTYPE specifies how the data are compressed, as follows: 00 - no compression 01 - compressed with fixed Huffman codes 10 - compressed with dynamic Huffman codes 11 - reserved (error) The only difference between the two compressed cases is how the Huffman codes for the literal/length and distance alphabets are defined. In all cases, the decoding algorithm for the actual data is as follows: do read block header from input stream. if stored with no compression skip any remaining bits in current partially processed byte read LEN and NLEN (see next section) copy LEN bytes of data to output otherwise if compressed with dynamic Huffman codes read representation of code trees (see subsection below) loop (until end of block code recognized) decode literal/length value from input stream if value < 256 copy value (literal byte) to output stream otherwise if value = end of block (256) break from loop otherwise (value = 257..285) decode distance from input stream move backwards distance bytes in the output stream, and copy length bytes from this position to the output stream. end loop while not last block Note that a duplicated string reference may refer to a string in a previous block; i.e., the backward distance may cross one or more block boundaries. However a distance cannot refer past the beginning of the output stream. (An application using a Deutsch Informational [Page 10] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 preset dictionary might discard part of the output stream; a distance can refer to that part of the output stream anyway) Note also that the referenced string may overlap the current position; for example, if the last 2 bytes decoded have values X and Y, a string reference with <length = 5, distance = 2> adds X,Y,X,Y,X to the output stream. We now specify each compression method in turn. 3.2.4. Non-compressed blocks (BTYPE=00) Any bits of input up to the next byte boundary are ignored. The rest of the block consists of the following information: 0 1 2 3 4... +---+---+---+---+================================+ | LEN | NLEN |... LEN bytes of literal data...| +---+---+---+---+================================+ LEN is the number of data bytes in the block. NLEN is the one's complement of LEN. 3.2.5. Compressed blocks (length and distance codes) As noted above, encoded data blocks in the "deflate" format consist of sequences of symbols drawn from three conceptually distinct alphabets: either literal bytes, from the alphabet of byte values (0..255), or <length, backward distance> pairs, where the length is drawn from (3..258) and the distance is drawn from (1..32,768). In fact, the literal and length alphabets are merged into a single alphabet (0..285), where values 0..255 represent literal bytes, the value 256 indicates end-of-block, and values 257..285 represent length codes (possibly in conjunction with extra bits following the symbol code) as follows: Deutsch Informational [Page 11] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 Extra Extra Extra Code Bits Length(s) Code Bits Lengths Code Bits Length(s) ---- ---- ------ ---- ---- ------- ---- ---- ------- 257 0 3 267 1 15,16 277 4 67-82 258 0 4 268 1 17,18 278 4 83-98 259 0 5 269 2 19-22 279 4 99-114 260 0 6 270 2 23-26 280 4 115-130 261 0 7 271 2 27-30 281 5 131-162 262 0 8 272 2 31-34 282 5 163-194 263 0 9 273 3 35-42 283 5 195-226 264 0 10 274 3 43-50 284 5 227-257 265 1 11,12 275 3 51-58 285 0 258 266 1 13,14 276 3 59-66 The extra bits should be interpreted as a machine integer stored with the most-significant bit first, e.g., bits 1110 represent the value 14. Extra Extra Extra Code Bits Dist Code Bits Dist Code Bits Distance ---- ---- ---- ---- ---- ------ ---- ---- -------- 0 0 1 10 4 33-48 20 9 1025-1536 1 0 2 11 4 49-64 21 9 1537-2048 2 0 3 12 5 65-96 22 10 2049-3072 3 0 4 13 5 97-128 23 10 3073-4096 4 1 5,6 14 6 129-192 24 11 4097-6144 5 1 7,8 15 6 193-256 25 11 6145-8192 6 2 9-12 16 7 257-384 26 12 8193-12288 7 2 13-16 17 7 385-512 27 12 12289-16384 8 3 17-24 18 8 513-768 28 13 16385-24576 9 3 25-32 19 8 769-1024 29 13 24577-32768 3.2.6. Compression with fixed Huffman codes (BTYPE=01) The Huffman codes for the two alphabets are fixed, and are not represented explicitly in the data. The Huffman code lengths for the literal/length alphabet are: Lit Value Bits Codes --------- ---- ----- 0 - 143 8 00110000 through 10111111 144 - 255 9 110010000 through 111111111 256 - 279 7 0000000 through 0010111 280 - 287 8 11000000 through 11000111 Deutsch Informational [Page 12] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 The code lengths are sufficient to generate the actual codes, as described above; we show the codes in the table for added clarity. Literal/length values 286-287 will never actually occur in the compressed data, but participate in the code construction. Distance codes 0-31 are represented by (fixed-length) 5-bit codes, with possible additional bits as shown in the table shown in Paragraph 3.2.5, above. Note that distance codes 30- 31 will never actually occur in the compressed data. 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) The Huffman codes for the two alphabets appear in the block immediately after the header bits and before the actual compressed data, first the literal/length code and then the distance code. Each code is defined by a sequence of code lengths, as discussed in Paragraph 3.2.2, above. For even greater compactness, the code length sequences themselves are compressed using a Huffman code. The alphabet for code lengths is as follows: 0 - 15: Represent code lengths of 0 - 15 16: Copy the previous code length 3 - 6 times. The next 2 bits indicate repeat length (0 = 3, ... , 3 = 6) Example: Codes 8, 16 (+2 bits 11), 16 (+2 bits 10) will expand to 12 code lengths of 8 (1 + 6 + 5) 17: Repeat a code length of 0 for 3 - 10 times. (3 bits of length) 18: Repeat a code length of 0 for 11 - 138 times (7 bits of length) A code length of 0 indicates that the corresponding symbol in the literal/length or distance alphabet will not occur in the block, and should not participate in the Huffman code construction algorithm given earlier. If only one distance code is used, it is encoded using one bit, not zero bits; in this case there is a single code length of one, with one unused code. One distance code of zero bits means that there are no distance codes used at all (the data is all literals). We can now define the format of the block: 5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286) 5 Bits: HDIST, # of Distance codes - 1 (1 - 32) 4 Bits: HCLEN, # of Code Length codes - 4 (4 - 19) Deutsch Informational [Page 13] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 (HCLEN + 4) x 3 bits: code lengths for the code length alphabet given just above, in the order: 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 These code lengths are interpreted as 3-bit integers (0-7); as above, a code length of 0 means the corresponding symbol (literal/length or distance code length) is not used. HLIT + 257 code lengths for the literal/length alphabet, encoded using the code length Huffman code HDIST + 1 code lengths for the distance alphabet, encoded using the code length Huffman code The actual compressed data of the block, encoded using the literal/length and distance Huffman codes The literal/length symbol 256 (end of data), encoded using the literal/length Huffman code The code length repeat codes can cross from HLIT + 257 to the HDIST + 1 code lengths. In other words, all code lengths form a single sequence of HLIT + HDIST + 258 values. 3.3. Compliance A compressor may limit further the ranges of values specified in the previous section and still be compliant; for example, it may limit the range of backward pointers to some value smaller than 32K. Similarly, a compressor may limit the size of blocks so that a compressible block fits in memory. A compliant decompressor must accept the full range of possible values defined in the previous section, and must accept blocks of arbitrary size. 4. Compression algorithm details While it is the intent of this document to define the "deflate" compressed data format without reference to any particular compression algorithm, the format is related to the compressed formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below); since many variations of LZ77 are patented, it is strongly recommended that the implementor of a compressor follow the general algorithm presented here, which is known not to be patented per se. The material in this section is not part of the definition of the Deutsch Informational [Page 14] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 specification per se, and a compressor need not follow it in order to be compliant. The compressor terminates a block when it determines that starting a new block with fresh trees would be useful, or when the block size fills up the compressor's block buffer. The compressor uses a chained hash table to find duplicated strings, using a hash function that operates on 3-byte sequences. At any given point during compression, let XYZ be the next 3 input bytes to be examined (not necessarily all different, of course). First, the compressor examines the hash chain for XYZ. If the chain is empty, the compressor simply writes out X as a literal byte and advances one byte in the input. If the hash chain is not empty, indicating that the sequence XYZ (or, if we are unlucky, some other 3 bytes with the same hash function value) has occurred recently, the compressor compares all strings on the XYZ hash chain with the actual input data sequence starting at the current point, and selects the longest match. The compressor searches the hash chains starting with the most recent strings, to favor small distances and thus take advantage of the Huffman encoding. The hash chains are singly linked. There are no deletions from the hash chains; the algorithm simply discards matches that are too old. To avoid a worst-case situation, very long hash chains are arbitrarily truncated at a certain length, determined by a run-time parameter. To improve overall compression, the compressor optionally defers the selection of matches ("lazy matching"): after a match of length N has been found, the compressor searches for a longer match starting at the next input byte. If it finds a longer match, it truncates the previous match to a length of one (thus producing a single literal byte) and then emits the longer match. Otherwise, it emits the original match, and, as described above, advances N bytes before continuing. Run-time parameters also control this "lazy match" procedure. If compression ratio is most important, the compressor attempts a complete second search regardless of the length of the first match. In the normal case, if the current match is "long enough", the compressor reduces the search for a longer match, thus speeding up the process. If speed is most important, the compressor inserts new strings in the hash table only when no match was found, or when the match is not "too long". This degrades the compression ratio but saves time since there are both fewer insertions and fewer searches. Deutsch Informational [Page 15] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 5. References [1] Huffman, D. A., "A Method for the Construction of Minimum Redundancy Codes", Proceedings of the Institute of Radio Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101. [2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data Compression", IEEE Transactions on Information Theory, Vol. 23, No. 3, pp. 337-343. [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources, available in ftp://ftp.uu.net/pub/archiving/zip/doc/ [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources, available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/ [5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169. [6] Hirschberg and Lelewer, "Efficient decoding of prefix codes," Comm. ACM, 33,4, April 1990, pp. 449-459. 6. Security Considerations Any data compression method involves the reduction of redundancy in the data. Consequently, any corruption of the data is likely to have severe effects and be difficult to correct. Uncompressed text, on the other hand, will probably still be readable despite the presence of some corrupted bytes. It is recommended that systems using this data format provide some means of validating the integrity of the compressed data. See reference [3], for example. 7. Source code Source code for a C language implementation of a "deflate" compliant compressor and decompressor is available within the zlib package at ftp://ftp.uu.net/pub/archiving/zip/zlib/. 8. Acknowledgements Trademarks cited in this document are the property of their respective owners. Phil Katz designed the deflate format. Jean-Loup Gailly and Mark Adler wrote the related software described in this specification. Glenn Randers-Pehrson converted this document to RFC and HTML format. Deutsch Informational [Page 16] RFC 1951 DEFLATE Compressed Data Format Specification May 1996 9. Author's Address L. Peter Deutsch Aladdin Enterprises 203 Santa Margarita Ave. Menlo Park, CA 94025 Phone: (415) 322-0103 (AM only) FAX: (415) 322-1734 EMail: <ghost@aladdin.com> Questions about the technical content of this specification can be sent by email to: Jean-Loup Gailly <gzip@prep.ai.mit.edu> and Mark Adler <madler@alumni.caltech.edu> Editorial comments on this specification can be sent by email to: L. Peter Deutsch <ghost@aladdin.com> and Glenn Randers-Pehrson <randeg@alumni.rpi.edu> Deutsch Informational [Page 17] |
Added freshlib/_doc/RFC/rfc2083.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 | Network Working Group T. Boutell, et. al. Request for Comments: 2083 Boutell.Com, Inc. Category: Informational March 1997 PNG (Portable Network Graphics) Specification Version 1.0 Status of this Memo This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind. Distribution of this memo is unlimited. IESG Note: The IESG takes no position on the validity of any Intellectual Property Rights statements contained in this document. Abstract This document describes PNG (Portable Network Graphics), an extensible file format for the lossless, portable, well-compressed storage of raster images. PNG provides a patent-free replacement for GIF and can also replace many common uses of TIFF. Indexed-color, grayscale, and truecolor images are supported, plus an optional alpha channel. Sample depths range from 1 to 16 bits. PNG is designed to work well in online viewing applications, such as the World Wide Web, so it is fully streamable with a progressive display option. PNG is robust, providing both full file integrity checking and simple detection of common transmission errors. Also, PNG can store gamma and chromaticity data for improved color matching on heterogeneous platforms. This specification defines the Internet Media Type image/png. Table of Contents 1. Introduction .................................................. 4 2. Data Representation ........................................... 5 2.1. Integers and byte order .................................. 5 2.2. Color values ............................................. 6 2.3. Image layout ............................................. 6 2.4. Alpha channel ............................................ 7 2.5. Filtering ................................................ 8 2.6. Interlaced data order .................................... 8 2.7. Gamma correction ......................................... 10 Boutell, et. al. Informational [Page 1] RFC 2083 PNG: Portable Network Graphics March 1997 2.8. Text strings ............................................. 10 3. File Structure ................................................ 11 3.1. PNG file signature ....................................... 11 3.2. Chunk layout ............................................. 11 3.3. Chunk naming conventions ................................. 12 3.4. CRC algorithm ............................................ 15 4. Chunk Specifications .......................................... 15 4.1. Critical chunks .......................................... 15 4.1.1. IHDR Image header .................................. 15 4.1.2. PLTE Palette ....................................... 17 4.1.3. IDAT Image data .................................... 18 4.1.4. IEND Image trailer ................................. 19 4.2. Ancillary chunks ......................................... 19 4.2.1. bKGD Background color .............................. 19 4.2.2. cHRM Primary chromaticities and white point ........ 20 4.2.3. gAMA Image gamma ................................... 21 4.2.4. hIST Image histogram ............................... 21 4.2.5. pHYs Physical pixel dimensions ..................... 22 4.2.6. sBIT Significant bits .............................. 22 4.2.7. tEXt Textual data .................................. 24 4.2.8. tIME Image last-modification time .................. 25 4.2.9. tRNS Transparency .................................. 26 4.2.10. zTXt Compressed textual data ...................... 27 4.3. Summary of standard chunks ............................... 28 4.4. Additional chunk types ................................... 29 5. Deflate/Inflate Compression ................................... 29 6. Filter Algorithms ............................................. 31 6.1. Filter types ............................................. 31 6.2. Filter type 0: None ...................................... 32 6.3. Filter type 1: Sub ....................................... 33 6.4. Filter type 2: Up ........................................ 33 6.5. Filter type 3: Average ................................... 34 6.6. Filter type 4: Paeth...................................... 35 7. Chunk Ordering Rules .......................................... 36 7.1. Behavior of PNG editors .................................. 37 7.2. Ordering of ancillary chunks ............................. 38 7.3. Ordering of critical chunks .............................. 38 8. Miscellaneous Topics .......................................... 39 8.1. File name extension ...................................... 39 8.2. Internet media type ...................................... 39 8.3. Macintosh file layout .................................... 39 8.4. Multiple-image extension ................................. 39 8.5. Security considerations .................................. 40 9. Recommendations for Encoders .................................. 41 9.1. Sample depth scaling ..................................... 41 9.2. Encoder gamma handling ................................... 42 9.3. Encoder color handling ................................... 45 9.4. Alpha channel creation ................................... 47 Boutell, et. al. Informational [Page 2] RFC 2083 PNG: Portable Network Graphics March 1997 9.5. Suggested palettes ....................................... 48 9.6. Filter selection ......................................... 49 9.7. Text chunk processing .................................... 49 9.8. Use of private chunks .................................... 50 9.9. Private type and method codes ............................ 51 10. Recommendations for Decoders ................................. 51 10.1. Error checking .......................................... 52 10.2. Pixel dimensions ........................................ 52 10.3. Truecolor image handling ................................ 52 10.4. Sample depth rescaling .................................. 53 10.5. Decoder gamma handling .................................. 54 10.6. Decoder color handling .................................. 56 10.7. Background color ........................................ 57 10.8. Alpha channel processing ................................ 58 10.9. Progressive display ..................................... 62 10.10. Suggested-palette and histogram usage .................. 63 10.11. Text chunk processing .................................. 64 11. Glossary ..................................................... 65 12. Appendix: Rationale .......................................... 69 12.1. Why a new file format? .................................. 69 12.2. Why these features? ..................................... 70 12.3. Why not these features? ................................. 70 12.4. Why not use format X? ................................... 72 12.5. Byte order .............................................. 73 12.6. Interlacing ............................................. 73 12.7. Why gamma? .............................................. 73 12.8. Non-premultiplied alpha ................................. 75 12.9. Filtering ............................................... 75 12.10. Text strings ........................................... 76 12.11. PNG file signature ..................................... 77 12.12. Chunk layout ........................................... 77 12.13. Chunk naming conventions ............................... 78 12.14. Palette histograms ..................................... 80 13. Appendix: Gamma Tutorial ..................................... 81 14. Appendix: Color Tutorial ..................................... 89 15. Appendix: Sample CRC Code .................................... 94 16. Appendix: Online Resources ................................... 96 17. Appendix: Revision History ................................... 96 18. References ................................................... 97 19. Credits ......................................................100 Boutell, et. al. Informational [Page 3] RFC 2083 PNG: Portable Network Graphics March 1997 1. Introduction The PNG format provides a portable, legally unencumbered, well- compressed, well-specified standard for lossless bitmapped image files. Although the initial motivation for developing PNG was to replace GIF, the design provides some useful new features not available in GIF, with minimal cost to developers. GIF features retained in PNG include: * Indexed-color images of up to 256 colors. * Streamability: files can be read and written serially, thus allowing the file format to be used as a communications protocol for on-the-fly generation and display of images. * Progressive display: a suitably prepared image file can be displayed as it is received over a communications link, yielding a low-resolution image very quickly followed by gradual improvement of detail. * Transparency: portions of the image can be marked as transparent, creating the effect of a non-rectangular image. * Ancillary information: textual comments and other data can be stored within the image file. * Complete hardware and platform independence. * Effective, 100% lossless compression. Important new features of PNG, not available in GIF, include: * Truecolor images of up to 48 bits per pixel. * Grayscale images of up to 16 bits per pixel. * Full alpha channel (general transparency masks). * Image gamma information, which supports automatic display of images with correct brightness/contrast regardless of the machines used to originate and display the image. * Reliable, straightforward detection of file corruption. * Faster initial presentation in progressive display mode. PNG is designed to be: * Simple and portable: developers should be able to implement PNG easily. * Legally unencumbered: to the best knowledge of the PNG authors, no algorithms under legal challenge are used. (Some considerable effort has been spent to verify this.) * Well compressed: both indexed-color and truecolor images are compressed as effectively as in any other widely used lossless format, and in most cases more effectively. Boutell, et. al. Informational [Page 4] RFC 2083 PNG: Portable Network Graphics March 1997 * Interchangeable: any standard-conforming PNG decoder must read all conforming PNG files. * Flexible: the format allows for future extensions and private add-ons, without compromising interchangeability of basic PNG. * Robust: the design supports full file integrity checking as well as simple, quick detection of common transmission errors. The main part of this specification gives the definition of the file format and recommendations for encoder and decoder behavior. An appendix gives the rationale for many design decisions. Although the rationale is not part of the formal specification, reading it can help implementors understand the design. Cross-references in the main text point to relevant parts of the rationale. Additional appendixes, also not part of the formal specification, provide tutorials on gamma and color theory as well as other supporting material. In this specification, the word "must" indicates a mandatory requirement, while "should" indicates recommended behavior. See Rationale: Why a new file format? (Section 12.1), Why these features? (Section 12.2), Why not these features? (Section 12.3), Why not use format X? (Section 12.4). Pronunciation PNG is pronounced "ping". 2. Data Representation This chapter discusses basic data representations used in PNG files, as well as the expected representation of the image data. 2.1. Integers and byte order All integers that require more than one byte must be in network byte order: the most significant byte comes first, then the less significant bytes in descending order of significance (MSB LSB for two-byte integers, B3 B2 B1 B0 for four-byte integers). The highest bit (value 128) of a byte is numbered bit 7; the lowest bit (value 1) is numbered bit 0. Values are unsigned unless otherwise noted. Values explicitly noted as signed are represented in two's complement notation. See Rationale: Byte order (Section 12.5). Boutell, et. al. Informational [Page 5] RFC 2083 PNG: Portable Network Graphics March 1997 2.2. Color values Colors can be represented by either grayscale or RGB (red, green, blue) sample data. Grayscale data represents luminance; RGB data represents calibrated color information (if the cHRM chunk is present) or uncalibrated device-dependent color (if cHRM is absent). All color values range from zero (representing black) to most intense at the maximum value for the sample depth. Note that the maximum value at a given sample depth is (2^sampledepth)-1, not 2^sampledepth. Sample values are not necessarily linear; the gAMA chunk specifies the gamma characteristic of the source device, and viewers are strongly encouraged to compensate properly. See Gamma correction (Section 2.7). Source data with a precision not directly supported in PNG (for example, 5 bit/sample truecolor) must be scaled up to the next higher supported bit depth. This scaling is reversible with no loss of data, and it reduces the number of cases that decoders have to cope with. See Recommendations for Encoders: Sample depth scaling (Section 9.1) and Recommendations for Decoders: Sample depth rescaling (Section 10.4). 2.3. Image layout Conceptually, a PNG image is a rectangular pixel array, with pixels appearing left-to-right within each scanline, and scanlines appearing top-to-bottom. (For progressive display purposes, the data may actually be transmitted in a different order; see Interlaced data order, Section 2.6.) The size of each pixel is determined by the bit depth, which is the number of bits per sample in the image data. Three types of pixel are supported: * An indexed-color pixel is represented by a single sample that is an index into a supplied palette. The image bit depth determines the maximum number of palette entries, but not the color precision within the palette. * A grayscale pixel is represented by a single sample that is a grayscale level, where zero is black and the largest value for the bit depth is white. * A truecolor pixel is represented by three samples: red (zero = black, max = red) appears first, then green (zero = black, max = green), then blue (zero = black, max = blue). The bit depth specifies the size of each sample, not the total pixel size. Boutell, et. al. Informational [Page 6] RFC 2083 PNG: Portable Network Graphics March 1997 Optionally, grayscale and truecolor pixels can also include an alpha sample, as described in the next section. Pixels are always packed into scanlines with no wasted bits between pixels. Pixels smaller than a byte never cross byte boundaries; they are packed into bytes with the leftmost pixel in the high-order bits of a byte, the rightmost in the low-order bits. Permitted bit depths and pixel types are restricted so that in all cases the packing is simple and efficient. PNG permits multi-sample pixels only with 8- and 16-bit samples, so multiple samples of a single pixel are never packed into one byte. 16-bit samples are stored in network byte order (MSB first). Scanlines always begin on byte boundaries. When pixels have fewer than 8 bits and the scanline width is not evenly divisible by the number of pixels per byte, the low-order bits in the last byte of each scanline are wasted. The contents of these wasted bits are unspecified. An additional "filter type" byte is added to the beginning of every scanline (see Filtering, Section 2.5). The filter type byte is not considered part of the image data, but it is included in the datastream sent to the compression step. 2.4. Alpha channel An alpha channel, representing transparency information on a per- pixel basis, can be included in grayscale and truecolor PNG images. An alpha value of zero represents full transparency, and a value of (2^bitdepth)-1 represents a fully opaque pixel. Intermediate values indicate partially transparent pixels that can be combined with a background image to yield a composite image. (Thus, alpha is really the degree of opacity of the pixel. But most people refer to alpha as providing transparency information, not opacity information, and we continue that custom here.) Alpha channels can be included with images that have either 8 or 16 bits per sample, but not with images that have fewer than 8 bits per sample. Alpha samples are represented with the same bit depth used for the image samples. The alpha sample for each pixel is stored immediately following the grayscale or RGB samples of the pixel. Boutell, et. al. Informational [Page 7] RFC 2083 PNG: Portable Network Graphics March 1997 The color values stored for a pixel are not affected by the alpha value assigned to the pixel. This rule is sometimes called "unassociated" or "non-premultiplied" alpha. (Another common technique is to store sample values premultiplied by the alpha fraction; in effect, such an image is already composited against a black background. PNG does not use premultiplied alpha.) Transparency control is also possible without the storage cost of a full alpha channel. In an indexed-color image, an alpha value can be defined for each palette entry. In grayscale and truecolor images, a single pixel value can be identified as being "transparent". These techniques are controlled by the tRNS ancillary chunk type. If no alpha channel nor tRNS chunk is present, all pixels in the image are to be treated as fully opaque. Viewers can support transparency control partially, or not at all. See Rationale: Non-premultiplied alpha (Section 12.8), Recommendations for Encoders: Alpha channel creation (Section 9.4), and Recommendations for Decoders: Alpha channel processing (Section 10.8). 2.5. Filtering PNG allows the image data to be filtered before it is compressed. Filtering can improve the compressibility of the data. The filter step itself does not reduce the size of the data. All PNG filters are strictly lossless. PNG defines several different filter algorithms, including "None" which indicates no filtering. The filter algorithm is specified for each scanline by a filter type byte that precedes the filtered scanline in the precompression datastream. An intelligent encoder can switch filters from one scanline to the next. The method for choosing which filter to employ is up to the encoder. See Filter Algorithms (Chapter 6) and Rationale: Filtering (Section 12.9). 2.6. Interlaced data order A PNG image can be stored in interlaced order to allow progressive display. The purpose of this feature is to allow images to "fade in" when they are being displayed on-the-fly. Interlacing slightly expands the file size on average, but it gives the user a meaningful display much more rapidly. Note that decoders are Boutell, et. al. Informational [Page 8] RFC 2083 PNG: Portable Network Graphics March 1997 required to be able to read interlaced images, whether or not they actually perform progressive display. With interlace method 0, pixels are stored sequentially from left to right, and scanlines sequentially from top to bottom (no interlacing). Interlace method 1, known as Adam7 after its author, Adam M. Costello, consists of seven distinct passes over the image. Each pass transmits a subset of the pixels in the image. The pass in which each pixel is transmitted is defined by replicating the following 8-by-8 pattern over the entire image, starting at the upper left corner: 1 6 4 6 2 6 4 6 7 7 7 7 7 7 7 7 5 6 5 6 5 6 5 6 7 7 7 7 7 7 7 7 3 6 4 6 3 6 4 6 7 7 7 7 7 7 7 7 5 6 5 6 5 6 5 6 7 7 7 7 7 7 7 7 Within each pass, the selected pixels are transmitted left to right within a scanline, and selected scanlines sequentially from top to bottom. For example, pass 2 contains pixels 4, 12, 20, etc. of scanlines 0, 8, 16, etc. (numbering from 0,0 at the upper left corner). The last pass contains the entirety of scanlines 1, 3, 5, etc. The data within each pass is laid out as though it were a complete image of the appropriate dimensions. For example, if the complete image is 16 by 16 pixels, then pass 3 will contain two scanlines, each containing four pixels. When pixels have fewer than 8 bits, each such scanline is padded as needed to fill an integral number of bytes (see Image layout, Section 2.3). Filtering is done on this reduced image in the usual way, and a filter type byte is transmitted before each of its scanlines (see Filter Algorithms, Chapter 6). Notice that the transmission order is defined so that all the scanlines transmitted in a pass will have the same number of pixels; this is necessary for proper application of some of the filters. Caution: If the image contains fewer than five columns or fewer than five rows, some passes will be entirely empty. Encoders and decoders must handle this case correctly. In particular, filter type bytes are only associated with nonempty scanlines; no filter type bytes are present in an empty pass. Boutell, et. al. Informational [Page 9] RFC 2083 PNG: Portable Network Graphics March 1997 See Rationale: Interlacing (Section 12.6) and Recommendations for Decoders: Progressive display (Section 10.9). 2.7. Gamma correction PNG images can specify, via the gAMA chunk, the gamma characteristic of the image with respect to the original scene. Display programs are strongly encouraged to use this information, plus information about the display device they are using and room lighting, to present the image to the viewer in a way that reproduces what the image's original author saw as closely as possible. See Gamma Tutorial (Chapter 13) if you aren't already familiar with gamma issues. Gamma correction is not applied to the alpha channel, if any. Alpha samples always represent a linear fraction of full opacity. For high-precision applications, the exact chromaticity of the RGB data in a PNG image can be specified via the cHRM chunk, allowing more accurate color matching than gamma correction alone will provide. See Color Tutorial (Chapter 14) if you aren't already familiar with color representation issues. See Rationale: Why gamma? (Section 12.7), Recommendations for Encoders: Encoder gamma handling (Section 9.2), and Recommendations for Decoders: Decoder gamma handling (Section 10.5). 2.8. Text strings A PNG file can store text associated with the image, such as an image description or copyright notice. Keywords are used to indicate what each text string represents. ISO 8859-1 (Latin-1) is the character set recommended for use in text strings [ISO-8859]. This character set is a superset of 7- bit ASCII. Character codes not defined in Latin-1 should not be used, because they have no platform-independent meaning. If a non-Latin-1 code does appear in a PNG text string, its interpretation will vary across platforms and decoders. Some systems might not even be able to display all the characters in Latin-1, but most modern systems can. Provision is also made for the storage of compressed text. See Rationale: Text strings (Section 12.10). Boutell, et. al. Informational [Page 10] RFC 2083 PNG: Portable Network Graphics March 1997 3. File Structure A PNG file consists of a PNG signature followed by a series of chunks. This chapter defines the signature and the basic properties of chunks. Individual chunk types are discussed in the next chapter. 3.1. PNG file signature The first eight bytes of a PNG file always contain the following (decimal) values: 137 80 78 71 13 10 26 10 This signature indicates that the remainder of the file contains a single PNG image, consisting of a series of chunks beginning with an IHDR chunk and ending with an IEND chunk. See Rationale: PNG file signature (Section 12.11). 3.2. Chunk layout Each chunk consists of four parts: Length A 4-byte unsigned integer giving the number of bytes in the chunk's data field. The length counts only the data field, not itself, the chunk type code, or the CRC. Zero is a valid length. Although encoders and decoders should treat the length as unsigned, its value must not exceed (2^31)-1 bytes. Chunk Type A 4-byte chunk type code. For convenience in description and in examining PNG files, type codes are restricted to consist of uppercase and lowercase ASCII letters (A-Z and a-z, or 65-90 and 97-122 decimal). However, encoders and decoders must treat the codes as fixed binary values, not character strings. For example, it would not be correct to represent the type code IDAT by the EBCDIC equivalents of those letters. Additional naming conventions for chunk types are discussed in the next section. Chunk Data The data bytes appropriate to the chunk type, if any. This field can be of zero length. Boutell, et. al. Informational [Page 11] RFC 2083 PNG: Portable Network Graphics March 1997 CRC A 4-byte CRC (Cyclic Redundancy Check) calculated on the preceding bytes in the chunk, including the chunk type code and chunk data fields, but not including the length field. The CRC is always present, even for chunks containing no data. See CRC algorithm (Section 3.4). The chunk data length can be any number of bytes up to the maximum; therefore, implementors cannot assume that chunks are aligned on any boundaries larger than bytes. Chunks can appear in any order, subject to the restrictions placed on each chunk type. (One notable restriction is that IHDR must appear first and IEND must appear last; thus the IEND chunk serves as an end-of-file marker.) Multiple chunks of the same type can appear, but only if specifically permitted for that type. See Rationale: Chunk layout (Section 12.12). 3.3. Chunk naming conventions Chunk type codes are assigned so that a decoder can determine some properties of a chunk even when it does not recognize the type code. These rules are intended to allow safe, flexible extension of the PNG format, by allowing a decoder to decide what to do when it encounters an unknown chunk. The naming rules are not normally of interest when the decoder does recognize the chunk's type. Four bits of the type code, namely bit 5 (value 32) of each byte, are used to convey chunk properties. This choice means that a human can read off the assigned properties according to whether each letter of the type code is uppercase (bit 5 is 0) or lowercase (bit 5 is 1). However, decoders should test the properties of an unknown chunk by numerically testing the specified bits; testing whether a character is uppercase or lowercase is inefficient, and even incorrect if a locale-specific case definition is used. It is worth noting that the property bits are an inherent part of the chunk name, and hence are fixed for any chunk type. Thus, TEXT and Text would be unrelated chunk type codes, not the same chunk with different properties. Decoders must recognize type codes by a simple four-byte literal comparison; it is incorrect to perform case conversion on type codes. Boutell, et. al. Informational [Page 12] RFC 2083 PNG: Portable Network Graphics March 1997 The semantics of the property bits are: Ancillary bit: bit 5 of first byte 0 (uppercase) = critical, 1 (lowercase) = ancillary. Chunks that are not strictly necessary in order to meaningfully display the contents of the file are known as "ancillary" chunks. A decoder encountering an unknown chunk in which the ancillary bit is 1 can safely ignore the chunk and proceed to display the image. The time chunk (tIME) is an example of an ancillary chunk. Chunks that are necessary for successful display of the file's contents are called "critical" chunks. A decoder encountering an unknown chunk in which the ancillary bit is 0 must indicate to the user that the image contains information it cannot safely interpret. The image header chunk (IHDR) is an example of a critical chunk. Private bit: bit 5 of second byte 0 (uppercase) = public, 1 (lowercase) = private. A public chunk is one that is part of the PNG specification or is registered in the list of PNG special-purpose public chunk types. Applications can also define private (unregistered) chunks for their own purposes. The names of private chunks must have a lowercase second letter, while public chunks will always be assigned names with uppercase second letters. Note that decoders do not need to test the private-chunk property bit, since it has no functional significance; it is simply an administrative convenience to ensure that public and private chunk names will not conflict. See Additional chunk types (Section 4.4) and Recommendations for Encoders: Use of private chunks (Section 9.8). Reserved bit: bit 5 of third byte Must be 0 (uppercase) in files conforming to this version of PNG. The significance of the case of the third letter of the chunk name is reserved for possible future expansion. At the present time all chunk names must have uppercase third letters. (Decoders should not complain about a lowercase third letter, however, as some future version of the PNG specification could define a meaning for this bit. It is sufficient to treat a chunk with a lowercase third letter in the same way as any other unknown chunk type.) Boutell, et. al. Informational [Page 13] RFC 2083 PNG: Portable Network Graphics March 1997 Safe-to-copy bit: bit 5 of fourth byte 0 (uppercase) = unsafe to copy, 1 (lowercase) = safe to copy. This property bit is not of interest to pure decoders, but it is needed by PNG editors (programs that modify PNG files). This bit defines the proper handling of unrecognized chunks in a file that is being modified. If a chunk's safe-to-copy bit is 1, the chunk may be copied to a modified PNG file whether or not the software recognizes the chunk type, and regardless of the extent of the file modifications. If a chunk's safe-to-copy bit is 0, it indicates that the chunk depends on the image data. If the program has made any changes to critical chunks, including addition, modification, deletion, or reordering of critical chunks, then unrecognized unsafe chunks must not be copied to the output PNG file. (Of course, if the program does recognize the chunk, it can choose to output an appropriately modified version.) A PNG editor is always allowed to copy all unrecognized chunks if it has only added, deleted, modified, or reordered ancillary chunks. This implies that it is not permissible for ancillary chunks to depend on other ancillary chunks. PNG editors that do not recognize a critical chunk must report an error and refuse to process that PNG file at all. The safe/unsafe mechanism is intended for use with ancillary chunks. The safe-to-copy bit will always be 0 for critical chunks. Rules for PNG editors are discussed further in Chunk Ordering Rules (Chapter 7). For example, the hypothetical chunk type name "bLOb" has the property bits: bLOb <-- 32 bit chunk type code represented in text form |||| |||+- Safe-to-copy bit is 1 (lower case letter; bit 5 is 1) ||+-- Reserved bit is 0 (upper case letter; bit 5 is 0) |+--- Private bit is 0 (upper case letter; bit 5 is 0) +---- Ancillary bit is 1 (lower case letter; bit 5 is 1) Therefore, this name represents an ancillary, public, safe-to-copy chunk. Boutell, et. al. Informational [Page 14] RFC 2083 PNG: Portable Network Graphics March 1997 See Rationale: Chunk naming conventions (Section 12.13). 3.4. CRC algorithm Chunk CRCs are calculated using standard CRC methods with pre and post conditioning, as defined by ISO 3309 [ISO-3309] or ITU-T V.42 [ITU-V42]. The CRC polynomial employed is x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1 The 32-bit CRC register is initialized to all 1's, and then the data from each byte is processed from the least significant bit (1) to the most significant bit (128). After all the data bytes are processed, the CRC register is inverted (its ones complement is taken). This value is transmitted (stored in the file) MSB first. For the purpose of separating into bytes and ordering, the least significant bit of the 32-bit CRC is defined to be the coefficient of the x^31 term. Practical calculation of the CRC always employs a precalculated table to greatly accelerate the computation. See Sample CRC Code (Chapter 15). 4. Chunk Specifications This chapter defines the standard types of PNG chunks. 4.1. Critical chunks All implementations must understand and successfully render the standard critical chunks. A valid PNG image must contain an IHDR chunk, one or more IDAT chunks, and an IEND chunk. 4.1.1. IHDR Image header The IHDR chunk must appear FIRST. It contains: Width: 4 bytes Height: 4 bytes Bit depth: 1 byte Color type: 1 byte Compression method: 1 byte Filter method: 1 byte Interlace method: 1 byte Boutell, et. al. Informational [Page 15] RFC 2083 PNG: Portable Network Graphics March 1997 Width and height give the image dimensions in pixels. They are 4-byte integers. Zero is an invalid value. The maximum for each is (2^31)-1 in order to accommodate languages that have difficulty with unsigned 4-byte values. Bit depth is a single-byte integer giving the number of bits per sample or per palette index (not per pixel). Valid values are 1, 2, 4, 8, and 16, although not all values are allowed for all color types. Color type is a single-byte integer that describes the interpretation of the image data. Color type codes represent sums of the following values: 1 (palette used), 2 (color used), and 4 (alpha channel used). Valid values are 0, 2, 3, 4, and 6. Bit depth restrictions for each color type are imposed to simplify implementations and to prohibit combinations that do not compress well. Decoders must support all legal combinations of bit depth and color type. The allowed combinations are: Color Allowed Interpretation Type Bit Depths 0 1,2,4,8,16 Each pixel is a grayscale sample. 2 8,16 Each pixel is an R,G,B triple. 3 1,2,4,8 Each pixel is a palette index; a PLTE chunk must appear. 4 8,16 Each pixel is a grayscale sample, followed by an alpha sample. 6 8,16 Each pixel is an R,G,B triple, followed by an alpha sample. The sample depth is the same as the bit depth except in the case of color type 3, in which the sample depth is always 8 bits. Compression method is a single-byte integer that indicates the method used to compress the image data. At present, only compression method 0 (deflate/inflate compression with a 32K sliding window) is defined. All standard PNG images must be compressed with this scheme. The compression method field is provided for possible future expansion or proprietary variants. Decoders must check this byte and report an error if it holds Boutell, et. al. Informational [Page 16] RFC 2083 PNG: Portable Network Graphics March 1997 an unrecognized code. See Deflate/Inflate Compression (Chapter 5) for details. Filter method is a single-byte integer that indicates the preprocessing method applied to the image data before compression. At present, only filter method 0 (adaptive filtering with five basic filter types) is defined. As with the compression method field, decoders must check this byte and report an error if it holds an unrecognized code. See Filter Algorithms (Chapter 6) for details. Interlace method is a single-byte integer that indicates the transmission order of the image data. Two values are currently defined: 0 (no interlace) or 1 (Adam7 interlace). See Interlaced data order (Section 2.6) for details. 4.1.2. PLTE Palette The PLTE chunk contains from 1 to 256 palette entries, each a three-byte series of the form: Red: 1 byte (0 = black, 255 = red) Green: 1 byte (0 = black, 255 = green) Blue: 1 byte (0 = black, 255 = blue) The number of entries is determined from the chunk length. A chunk length not divisible by 3 is an error. This chunk must appear for color type 3, and can appear for color types 2 and 6; it must not appear for color types 0 and 4. If this chunk does appear, it must precede the first IDAT chunk. There must not be more than one PLTE chunk. For color type 3 (indexed color), the PLTE chunk is required. The first entry in PLTE is referenced by pixel value 0, the second by pixel value 1, etc. The number of palette entries must not exceed the range that can be represented in the image bit depth (for example, 2^4 = 16 for a bit depth of 4). It is permissible to have fewer entries than the bit depth would allow. In that case, any out-of-range pixel value found in the image data is an error. For color types 2 and 6 (truecolor and truecolor with alpha), the PLTE chunk is optional. If present, it provides a suggested set of from 1 to 256 colors to which the truecolor image can be quantized if the viewer cannot display truecolor directly. If PLTE is not present, such a viewer will need to select colors on its own, but it is often preferable for this Boutell, et. al. Informational [Page 17] RFC 2083 PNG: Portable Network Graphics March 1997 to be done once by the encoder. (See Recommendations for Encoders: Suggested palettes, Section 9.5.) Note that the palette uses 8 bits (1 byte) per sample regardless of the image bit depth specification. In particular, the palette is 8 bits deep even when it is a suggested quantization of a 16-bit truecolor image. There is no requirement that the palette entries all be used by the image, nor that they all be different. 4.1.3. IDAT Image data The IDAT chunk contains the actual image data. To create this data: * Begin with image scanlines represented as described in Image layout (Section 2.3); the layout and total size of this raw data are determined by the fields of IHDR. * Filter the image data according to the filtering method specified by the IHDR chunk. (Note that with filter method 0, the only one currently defined, this implies prepending a filter type byte to each scanline.) * Compress the filtered data using the compression method specified by the IHDR chunk. The IDAT chunk contains the output datastream of the compression algorithm. To read the image data, reverse this process. There can be multiple IDAT chunks; if so, they must appear consecutively with no other intervening chunks. The compressed datastream is then the concatenation of the contents of all the IDAT chunks. The encoder can divide the compressed datastream into IDAT chunks however it wishes. (Multiple IDAT chunks are allowed so that encoders can work in a fixed amount of memory; typically the chunk size will correspond to the encoder's buffer size.) It is important to emphasize that IDAT chunk boundaries have no semantic significance and can occur at any point in the compressed datastream. A PNG file in which each IDAT chunk contains only one data byte is legal, though remarkably wasteful of space. (For that matter, zero-length IDAT chunks are legal, though even more wasteful.) See Filter Algorithms (Chapter 6) and Deflate/Inflate Compression (Chapter 5) for details. Boutell, et. al. Informational [Page 18] RFC 2083 PNG: Portable Network Graphics March 1997 4.1.4. IEND Image trailer The IEND chunk must appear LAST. It marks the end of the PNG datastream. The chunk's data field is empty. 4.2. Ancillary chunks All ancillary chunks are optional, in the sense that encoders need not write them and decoders can ignore them. However, encoders are encouraged to write the standard ancillary chunks when the information is available, and decoders are encouraged to interpret these chunks when appropriate and feasible. The standard ancillary chunks are listed in alphabetical order. This is not necessarily the order in which they would appear in a file. 4.2.1. bKGD Background color The bKGD chunk specifies a default background color to present the image against. Note that viewers are not bound to honor this chunk; a viewer can choose to use a different background. For color type 3 (indexed color), the bKGD chunk contains: Palette index: 1 byte The value is the palette index of the color to be used as background. For color types 0 and 4 (grayscale, with or without alpha), bKGD contains: Gray: 2 bytes, range 0 .. (2^bitdepth)-1 (For consistency, 2 bytes are used regardless of the image bit depth.) The value is the gray level to be used as background. For color types 2 and 6 (truecolor, with or without alpha), bKGD contains: Red: 2 bytes, range 0 .. (2^bitdepth)-1 Green: 2 bytes, range 0 .. (2^bitdepth)-1 Blue: 2 bytes, range 0 .. (2^bitdepth)-1 (For consistency, 2 bytes per sample are used regardless of the image bit depth.) This is the RGB color to be used as background. Boutell, et. al. Informational [Page 19] RFC 2083 PNG: Portable Network Graphics March 1997 When present, the bKGD chunk must precede the first IDAT chunk, and must follow the PLTE chunk, if any. See Recommendations for Decoders: Background color (Section 10.7). 4.2.2. cHRM Primary chromaticities and white point Applications that need device-independent specification of colors in a PNG file can use the cHRM chunk to specify the 1931 CIE x,y chromaticities of the red, green, and blue primaries used in the image, and the referenced white point. See Color Tutorial (Chapter 14) for more information. The cHRM chunk contains: White Point x: 4 bytes White Point y: 4 bytes Red x: 4 bytes Red y: 4 bytes Green x: 4 bytes Green y: 4 bytes Blue x: 4 bytes Blue y: 4 bytes Each value is encoded as a 4-byte unsigned integer, representing the x or y value times 100000. For example, a value of 0.3127 would be stored as the integer 31270. cHRM is allowed in all PNG files, although it is of little value for grayscale images. If the encoder does not know the chromaticity values, it should not write a cHRM chunk; the absence of a cHRM chunk indicates that the image's primary colors are device-dependent. If the cHRM chunk appears, it must precede the first IDAT chunk, and it must also precede the PLTE chunk if present. See Recommendations for Encoders: Encoder color handling (Section 9.3), and Recommendations for Decoders: Decoder color handling (Section 10.6). Boutell, et. al. Informational [Page 20] RFC 2083 PNG: Portable Network Graphics March 1997 4.2.3. gAMA Image gamma The gAMA chunk specifies the gamma of the camera (or simulated camera) that produced the image, and thus the gamma of the image with respect to the original scene. More precisely, the gAMA chunk encodes the file_gamma value, as defined in Gamma Tutorial (Chapter 13). The gAMA chunk contains: Image gamma: 4 bytes The value is encoded as a 4-byte unsigned integer, representing gamma times 100000. For example, a gamma of 0.45 would be stored as the integer 45000. If the encoder does not know the image's gamma value, it should not write a gAMA chunk; the absence of a gAMA chunk indicates that the gamma is unknown. If the gAMA chunk appears, it must precede the first IDAT chunk, and it must also precede the PLTE chunk if present. See Gamma correction (Section 2.7), Recommendations for Encoders: Encoder gamma handling (Section 9.2), and Recommendations for Decoders: Decoder gamma handling (Section 10.5). 4.2.4. hIST Image histogram The hIST chunk gives the approximate usage frequency of each color in the color palette. A histogram chunk can appear only when a palette chunk appears. If a viewer is unable to provide all the colors listed in the palette, the histogram may help it decide how to choose a subset of the colors for display. The hIST chunk contains a series of 2-byte (16 bit) unsigned integers. There must be exactly one entry for each entry in the PLTE chunk. Each entry is proportional to the fraction of pixels in the image that have that palette index; the exact scale factor is chosen by the encoder. Histogram entries are approximate, with the exception that a zero entry specifies that the corresponding palette entry is not used at all in the image. It is required that a histogram entry be nonzero if there are any pixels of that color. Boutell, et. al. Informational [Page 21] RFC 2083 PNG: Portable Network Graphics March 1997 When the palette is a suggested quantization of a truecolor image, the histogram is necessarily approximate, since a decoder may map pixels to palette entries differently than the encoder did. In this situation, zero entries should not appear. The hIST chunk, if it appears, must follow the PLTE chunk, and must precede the first IDAT chunk. See Rationale: Palette histograms (Section 12.14), and Recommendations for Decoders: Suggested-palette and histogram usage (Section 10.10). 4.2.5. pHYs Physical pixel dimensions The pHYs chunk specifies the intended pixel size or aspect ratio for display of the image. It contains: Pixels per unit, X axis: 4 bytes (unsigned integer) Pixels per unit, Y axis: 4 bytes (unsigned integer) Unit specifier: 1 byte The following values are legal for the unit specifier: 0: unit is unknown 1: unit is the meter When the unit specifier is 0, the pHYs chunk defines pixel aspect ratio only; the actual size of the pixels remains unspecified. Conversion note: one inch is equal to exactly 0.0254 meters. If this ancillary chunk is not present, pixels are assumed to be square, and the physical size of each pixel is unknown. If present, this chunk must precede the first IDAT chunk. See Recommendations for Decoders: Pixel dimensions (Section 10.2). 4.2.6. sBIT Significant bits To simplify decoders, PNG specifies that only certain sample depths can be used, and further specifies that sample values should be scaled to the full range of possible values at the sample depth. However, the sBIT chunk is provided in order to store the original number of significant bits. This allows Boutell, et. al. Informational [Page 22] RFC 2083 PNG: Portable Network Graphics March 1997 decoders to recover the original data losslessly even if the data had a sample depth not directly supported by PNG. We recommend that an encoder emit an sBIT chunk if it has converted the data from a lower sample depth. For color type 0 (grayscale), the sBIT chunk contains a single byte, indicating the number of bits that were significant in the source data. For color type 2 (truecolor), the sBIT chunk contains three bytes, indicating the number of bits that were significant in the source data for the red, green, and blue channels, respectively. For color type 3 (indexed color), the sBIT chunk contains three bytes, indicating the number of bits that were significant in the source data for the red, green, and blue components of the palette entries, respectively. For color type 4 (grayscale with alpha channel), the sBIT chunk contains two bytes, indicating the number of bits that were significant in the source grayscale data and the source alpha data, respectively. For color type 6 (truecolor with alpha channel), the sBIT chunk contains four bytes, indicating the number of bits that were significant in the source data for the red, green, blue and alpha channels, respectively. Each depth specified in sBIT must be greater than zero and less than or equal to the sample depth (which is 8 for indexed-color images, and the bit depth given in IHDR for other color types). A decoder need not pay attention to sBIT: the stored image is a valid PNG file of the sample depth indicated by IHDR. However, if the decoder wishes to recover the original data at its original precision, this can be done by right-shifting the stored samples (the stored palette entries, for an indexed- color image). The encoder must scale the data in such a way that the high-order bits match the original data. If the sBIT chunk appears, it must precede the first IDAT chunk, and it must also precede the PLTE chunk if present. See Recommendations for Encoders: Sample depth scaling (Section 9.1) and Recommendations for Decoders: Sample depth rescaling (Section 10.4). Boutell, et. al. Informational [Page 23] RFC 2083 PNG: Portable Network Graphics March 1997 4.2.7. tEXt Textual data Textual information that the encoder wishes to record with the image can be stored in tEXt chunks. Each tEXt chunk contains a keyword and a text string, in the format: Keyword: 1-79 bytes (character string) Null separator: 1 byte Text: n bytes (character string) The keyword and text string are separated by a zero byte (null character). Neither the keyword nor the text string can contain a null character. Note that the text string is not null-terminated (the length of the chunk is sufficient information to locate the ending). The keyword must be at least one character and less than 80 characters long. The text string can be of any length from zero bytes up to the maximum permissible chunk size less the length of the keyword and separator. Any number of tEXt chunks can appear, and more than one with the same keyword is permissible. The keyword indicates the type of information represented by the text string. The following keywords are predefined and should be used where appropriate: Title Short (one line) title or caption for image Author Name of image's creator Description Description of image (possibly long) Copyright Copyright notice Creation Time Time of original image creation Software Software used to create the image Disclaimer Legal disclaimer Warning Warning of nature of content Source Device used to create the image Comment Miscellaneous comment; conversion from GIF comment For the Creation Time keyword, the date format defined in section 5.2.14 of RFC 1123 is suggested, but not required [RFC-1123]. Decoders should allow for free-format text associated with this or any other keyword. Other keywords may be invented for other purposes. Keywords of general interest can be registered with the maintainers of the PNG specification. However, it is also permitted to use private unregistered keywords. (Private keywords should be Boutell, et. al. Informational [Page 24] RFC 2083 PNG: Portable Network Graphics March 1997 reasonably self-explanatory, in order to minimize the chance that the same keyword will be used for incompatible purposes by different people.) Both keyword and text are interpreted according to the ISO 8859-1 (Latin-1) character set [ISO-8859]. The text string can contain any Latin-1 character. Newlines in the text string should be represented by a single linefeed character (decimal 10); use of other control characters in the text is discouraged. Keywords must contain only printable Latin-1 characters and spaces; that is, only character codes 32-126 and 161-255 decimal are allowed. To reduce the chances for human misreading of a keyword, leading and trailing spaces are forbidden, as are consecutive spaces. Note also that the non- breaking space (code 160) is not permitted in keywords, since it is visually indistinguishable from an ordinary space. Keywords must be spelled exactly as registered, so that decoders can use simple literal comparisons when looking for particular keywords. In particular, keywords are considered case-sensitive. See Recommendations for Encoders: Text chunk processing (Section 9.7) and Recommendations for Decoders: Text chunk processing (Section 10.11). 4.2.8. tIME Image last-modification time The tIME chunk gives the time of the last image modification (not the time of initial image creation). It contains: Year: 2 bytes (complete; for example, 1995, not 95) Month: 1 byte (1-12) Day: 1 byte (1-31) Hour: 1 byte (0-23) Minute: 1 byte (0-59) Second: 1 byte (0-60) (yes, 60, for leap seconds; not 61, a common error) Universal Time (UTC, also called GMT) should be specified rather than local time. Boutell, et. al. Informational [Page 25] RFC 2083 PNG: Portable Network Graphics March 1997 The tIME chunk is intended for use as an automatically-applied time stamp that is updated whenever the image data is changed. It is recommended that tIME not be changed by PNG editors that do not change the image data. See also the Creation Time tEXt keyword, which can be used for a user-supplied time. 4.2.9. tRNS Transparency The tRNS chunk specifies that the image uses simple transparency: either alpha values associated with palette entries (for indexed-color images) or a single transparent color (for grayscale and truecolor images). Although simple transparency is not as elegant as the full alpha channel, it requires less storage space and is sufficient for many common cases. For color type 3 (indexed color), the tRNS chunk contains a series of one-byte alpha values, corresponding to entries in the PLTE chunk: Alpha for palette index 0: 1 byte Alpha for palette index 1: 1 byte ... etc ... Each entry indicates that pixels of the corresponding palette index must be treated as having the specified alpha value. Alpha values have the same interpretation as in an 8-bit full alpha channel: 0 is fully transparent, 255 is fully opaque, regardless of image bit depth. The tRNS chunk must not contain more alpha values than there are palette entries, but tRNS can contain fewer values than there are palette entries. In this case, the alpha value for all remaining palette entries is assumed to be 255. In the common case in which only palette index 0 need be made transparent, only a one-byte tRNS chunk is needed. For color type 0 (grayscale), the tRNS chunk contains a single gray level value, stored in the format: Gray: 2 bytes, range 0 .. (2^bitdepth)-1 (For consistency, 2 bytes are used regardless of the image bit depth.) Pixels of the specified gray level are to be treated as transparent (equivalent to alpha value 0); all other pixels are to be treated as fully opaque (alpha value (2^bitdepth)-1). Boutell, et. al. Informational [Page 26] RFC 2083 PNG: Portable Network Graphics March 1997 For color type 2 (truecolor), the tRNS chunk contains a single RGB color value, stored in the format: Red: 2 bytes, range 0 .. (2^bitdepth)-1 Green: 2 bytes, range 0 .. (2^bitdepth)-1 Blue: 2 bytes, range 0 .. (2^bitdepth)-1 (For consistency, 2 bytes per sample are used regardless of the image bit depth.) Pixels of the specified color value are to be treated as transparent (equivalent to alpha value 0); all other pixels are to be treated as fully opaque (alpha value (2^bitdepth)-1). tRNS is prohibited for color types 4 and 6, since a full alpha channel is already present in those cases. Note: when dealing with 16-bit grayscale or truecolor data, it is important to compare both bytes of the sample values to determine whether a pixel is transparent. Although decoders may drop the low-order byte of the samples for display, this must not occur until after the data has been tested for transparency. For example, if the grayscale level 0x0001 is specified to be transparent, it would be incorrect to compare only the high-order byte and decide that 0x0002 is also transparent. When present, the tRNS chunk must precede the first IDAT chunk, and must follow the PLTE chunk, if any. 4.2.10. zTXt Compressed textual data The zTXt chunk contains textual data, just as tEXt does; however, zTXt takes advantage of compression. zTXt and tEXt chunks are semantically equivalent, but zTXt is recommended for storing large blocks of text. A zTXt chunk contains: Keyword: 1-79 bytes (character string) Null separator: 1 byte Compression method: 1 byte Compressed text: n bytes The keyword and null separator are exactly the same as in the tEXt chunk. Note that the keyword is not compressed. The compression method byte identifies the compression method used in this zTXt chunk. The only value presently defined for it is 0 (deflate/inflate compression). The compression method byte is Boutell, et. al. Informational [Page 27] RFC 2083 PNG: Portable Network Graphics March 1997 followed by a compressed datastream that makes up the remainder of the chunk. For compression method 0, this datastream adheres to the zlib datastream format (see Deflate/Inflate Compression, Chapter 5). Decompression of this datastream yields Latin-1 text that is identical to the text that would be stored in an equivalent tEXt chunk. Any number of zTXt and tEXt chunks can appear in the same file. See the preceding definition of the tEXt chunk for the predefined keywords and the recommended format of the text. See Recommendations for Encoders: Text chunk processing (Section 9.7), and Recommendations for Decoders: Text chunk processing (Section 10.11). 4.3. Summary of standard chunks This table summarizes some properties of the standard chunk types. Critical chunks (must appear in this order, except PLTE is optional): Name Multiple Ordering constraints OK? IHDR No Must be first PLTE No Before IDAT IDAT Yes Multiple IDATs must be consecutive IEND No Must be last Ancillary chunks (need not appear in this order): Name Multiple Ordering constraints OK? cHRM No Before PLTE and IDAT gAMA No Before PLTE and IDAT sBIT No Before PLTE and IDAT bKGD No After PLTE; before IDAT hIST No After PLTE; before IDAT tRNS No After PLTE; before IDAT pHYs No Before IDAT tIME No None tEXt Yes None zTXt Yes None Boutell, et. al. Informational [Page 28] RFC 2083 PNG: Portable Network Graphics March 1997 Standard keywords for tEXt and zTXt chunks: Title Short (one line) title or caption for image Author Name of image's creator Description Description of image (possibly long) Copyright Copyright notice Creation Time Time of original image creation Software Software used to create the image Disclaimer Legal disclaimer Warning Warning of nature of content Source Device used to create the image Comment Miscellaneous comment; conversion from GIF comment 4.4. Additional chunk types Additional public PNG chunk types are defined in the document "PNG Special-Purpose Public Chunks" [PNG-EXTENSIONS]. Chunks described there are expected to be less widely supported than those defined in this specification. However, application authors are encouraged to use those chunk types whenever appropriate for their applications. Additional chunk types can be proposed for inclusion in that list by contacting the PNG specification maintainers at png-info@uunet.uu.net or at png-group@w3.org. New public chunks will only be registered if they are of use to others and do not violate the design philosophy of PNG. Chunk registration is not automatic, although it is the intent of the authors that it be straightforward when a new chunk of potentially wide application is needed. Note that the creation of new critical chunk types is discouraged unless absolutely necessary. Applications can also use private chunk types to carry data that is not of interest to other applications. See Recommendations for Encoders: Use of private chunks (Section 9.8). Decoders must be prepared to encounter unrecognized public or private chunk type codes. Unrecognized chunk types must be handled as described in Chunk naming conventions (Section 3.3). 5. Deflate/Inflate Compression PNG compression method 0 (the only compression method presently defined for PNG) specifies deflate/inflate compression with a 32K sliding window. Deflate compression is an LZ77 derivative used in zip, gzip, pkzip and related programs. Extensive research has been done supporting its patent-free status. Portable C implementations are freely available. Boutell, et. al. Informational [Page 29] RFC 2083 PNG: Portable Network Graphics March 1997 Deflate-compressed datastreams within PNG are stored in the "zlib" format, which has the structure: Compression method/flags code: 1 byte Additional flags/check bits: 1 byte Compressed data blocks: n bytes Check value: 4 bytes Further details on this format are given in the zlib specification [RFC-1950]. For PNG compression method 0, the zlib compression method/flags code must specify method code 8 ("deflate" compression) and an LZ77 window size of not more than 32K. Note that the zlib compression method number is not the same as the PNG compression method number. The additional flags must not specify a preset dictionary. The compressed data within the zlib datastream is stored as a series of blocks, each of which can represent raw (uncompressed) data, LZ77-compressed data encoded with fixed Huffman codes, or LZ77- compressed data encoded with custom Huffman codes. A marker bit in the final block identifies it as the last block, allowing the decoder to recognize the end of the compressed datastream. Further details on the compression algorithm and the encoding are given in the deflate specification [RFC-1951]. The check value stored at the end of the zlib datastream is calculated on the uncompressed data represented by the datastream. Note that the algorithm used is not the same as the CRC calculation used for PNG chunk check values. The zlib check value is useful mainly as a cross-check that the deflate and inflate algorithms are implemented correctly. Verifying the chunk CRCs provides adequate confidence that the PNG file has been transmitted undamaged. In a PNG file, the concatenation of the contents of all the IDAT chunks makes up a zlib datastream as specified above. This datastream decompresses to filtered image data as described elsewhere in this document. It is important to emphasize that the boundaries between IDAT chunks are arbitrary and can fall anywhere in the zlib datastream. There is not necessarily any correlation between IDAT chunk boundaries and deflate block boundaries or any other feature of the zlib data. For example, it is entirely possible for the terminating zlib check value to be split across IDAT chunks. Boutell, et. al. Informational [Page 30] RFC 2083 PNG: Portable Network Graphics March 1997 In the same vein, there is no required correlation between the structure of the image data (i.e., scanline boundaries) and deflate block boundaries or IDAT chunk boundaries. The complete image data is represented by a single zlib datastream that is stored in some number of IDAT chunks; a decoder that assumes any more than this is incorrect. (Of course, some encoder implementations may emit files in which some of these structures are indeed related. But decoders cannot rely on this.) PNG also uses zlib datastreams in zTXt chunks. In a zTXt chunk, the remainder of the chunk following the compression method byte is a zlib datastream as specified above. This datastream decompresses to the user-readable text described by the chunk's keyword. Unlike the image data, such datastreams are not split across chunks; each zTXt chunk contains an independent zlib datastream. Additional documentation and portable C code for deflate and inflate are available from the Info-ZIP archives at <URL:ftp://ftp.uu.net/pub/archiving/zip/>. 6. Filter Algorithms This chapter describes the filter algorithms that can be applied before compression. The purpose of these filters is to prepare the image data for optimum compression. 6.1. Filter types PNG filter method 0 defines five basic filter types: Type Name 0 None 1 Sub 2 Up 3 Average 4 Paeth (Note that filter method 0 in IHDR specifies exactly this set of five filter types. If the set of filter types is ever extended, a different filter method number will be assigned to the extended set, so that decoders need not decompress the data to discover that it contains unsupported filter types.) The encoder can choose which of these filter algorithms to apply on a scanline-by-scanline basis. In the image data sent to the compression step, each scanline is preceded by a filter type byte that specifies the filter algorithm used for that scanline. Boutell, et. al. Informational [Page 31] RFC 2083 PNG: Portable Network Graphics March 1997 Filtering algorithms are applied to bytes, not to pixels, regardless of the bit depth or color type of the image. The filtering algorithms work on the byte sequence formed by a scanline that has been represented as described in Image layout (Section 2.3). If the image includes an alpha channel, the alpha data is filtered in the same way as the image data. When the image is interlaced, each pass of the interlace pattern is treated as an independent image for filtering purposes. The filters work on the byte sequences formed by the pixels actually transmitted during a pass, and the "previous scanline" is the one previously transmitted in the same pass, not the one adjacent in the complete image. Note that the subimage transmitted in any one pass is always rectangular, but is of smaller width and/or height than the complete image. Filtering is not applied when this subimage is empty. For all filters, the bytes "to the left of" the first pixel in a scanline must be treated as being zero. For filters that refer to the prior scanline, the entire prior scanline must be treated as being zeroes for the first scanline of an image (or of a pass of an interlaced image). To reverse the effect of a filter, the decoder must use the decoded values of the prior pixel on the same line, the pixel immediately above the current pixel on the prior line, and the pixel just to the left of the pixel above. This implies that at least one scanline's worth of image data will have to be stored by the decoder at all times. Even though some filter types do not refer to the prior scanline, the decoder will always need to store each scanline as it is decoded, since the next scanline might use a filter that refers to it. PNG imposes no restriction on which filter types can be applied to an image. However, the filters are not equally effective on all types of data. See Recommendations for Encoders: Filter selection (Section 9.6). See also Rationale: Filtering (Section 12.9). 6.2. Filter type 0: None With the None filter, the scanline is transmitted unmodified; it is only necessary to insert a filter type byte before the data. Boutell, et. al. Informational [Page 32] RFC 2083 PNG: Portable Network Graphics March 1997 6.3. Filter type 1: Sub The Sub filter transmits the difference between each byte and the value of the corresponding byte of the prior pixel. To compute the Sub filter, apply the following formula to each byte of the scanline: Sub(x) = Raw(x) - Raw(x-bpp) where x ranges from zero to the number of bytes representing the scanline minus one, Raw(x) refers to the raw data byte at that byte position in the scanline, and bpp is defined as the number of bytes per complete pixel, rounding up to one. For example, for color type 2 with a bit depth of 16, bpp is equal to 6 (three samples, two bytes per sample); for color type 0 with a bit depth of 2, bpp is equal to 1 (rounding up); for color type 4 with a bit depth of 16, bpp is equal to 4 (two-byte grayscale sample, plus two-byte alpha sample). Note this computation is done for each byte, regardless of bit depth. In a 16-bit image, each MSB is predicted from the preceding MSB and each LSB from the preceding LSB, because of the way that bpp is defined. Unsigned arithmetic modulo 256 is used, so that both the inputs and outputs fit into bytes. The sequence of Sub values is transmitted as the filtered scanline. For all x < 0, assume Raw(x) = 0. To reverse the effect of the Sub filter after decompression, output the following value: Sub(x) + Raw(x-bpp) (computed mod 256), where Raw refers to the bytes already decoded. 6.4. Filter type 2: Up The Up filter is just like the Sub filter except that the pixel immediately above the current pixel, rather than just to its left, is used as the predictor. To compute the Up filter, apply the following formula to each byte of the scanline: Up(x) = Raw(x) - Prior(x) Boutell, et. al. Informational [Page 33] RFC 2083 PNG: Portable Network Graphics March 1997 where x ranges from zero to the number of bytes representing the scanline minus one, Raw(x) refers to the raw data byte at that byte position in the scanline, and Prior(x) refers to the unfiltered bytes of the prior scanline. Note this is done for each byte, regardless of bit depth. Unsigned arithmetic modulo 256 is used, so that both the inputs and outputs fit into bytes. The sequence of Up values is transmitted as the filtered scanline. On the first scanline of an image (or of a pass of an interlaced image), assume Prior(x) = 0 for all x. To reverse the effect of the Up filter after decompression, output the following value: Up(x) + Prior(x) (computed mod 256), where Prior refers to the decoded bytes of the prior scanline. 6.5. Filter type 3: Average The Average filter uses the average of the two neighboring pixels (left and above) to predict the value of a pixel. To compute the Average filter, apply the following formula to each byte of the scanline: Average(x) = Raw(x) - floor((Raw(x-bpp)+Prior(x))/2) where x ranges from zero to the number of bytes representing the scanline minus one, Raw(x) refers to the raw data byte at that byte position in the scanline, Prior(x) refers to the unfiltered bytes of the prior scanline, and bpp is defined as for the Sub filter. Note this is done for each byte, regardless of bit depth. The sequence of Average values is transmitted as the filtered scanline. The subtraction of the predicted value from the raw byte must be done modulo 256, so that both the inputs and outputs fit into bytes. However, the sum Raw(x-bpp)+Prior(x) must be formed without overflow (using at least nine-bit arithmetic). floor() indicates that the result of the division is rounded to the next lower integer if fractional; in other words, it is an integer division or right shift operation. Boutell, et. al. Informational [Page 34] RFC 2083 PNG: Portable Network Graphics March 1997 For all x < 0, assume Raw(x) = 0. On the first scanline of an image (or of a pass of an interlaced image), assume Prior(x) = 0 for all x. To reverse the effect of the Average filter after decompression, output the following value: Average(x) + floor((Raw(x-bpp)+Prior(x))/2) where the result is computed mod 256, but the prediction is calculated in the same way as for encoding. Raw refers to the bytes already decoded, and Prior refers to the decoded bytes of the prior scanline. 6.6. Filter type 4: Paeth The Paeth filter computes a simple linear function of the three neighboring pixels (left, above, upper left), then chooses as predictor the neighboring pixel closest to the computed value. This technique is due to Alan W. Paeth [PAETH]. To compute the Paeth filter, apply the following formula to each byte of the scanline: Paeth(x) = Raw(x) - PaethPredictor(Raw(x-bpp), Prior(x), Prior(x-bpp)) where x ranges from zero to the number of bytes representing the scanline minus one, Raw(x) refers to the raw data byte at that byte position in the scanline, Prior(x) refers to the unfiltered bytes of the prior scanline, and bpp is defined as for the Sub filter. Note this is done for each byte, regardless of bit depth. Unsigned arithmetic modulo 256 is used, so that both the inputs and outputs fit into bytes. The sequence of Paeth values is transmitted as the filtered scanline. Boutell, et. al. Informational [Page 35] RFC 2083 PNG: Portable Network Graphics March 1997 The PaethPredictor function is defined by the following pseudocode: function PaethPredictor (a, b, c) begin ; a = left, b = above, c = upper left p := a + b - c ; initial estimate pa := abs(p - a) ; distances to a, b, c pb := abs(p - b) pc := abs(p - c) ; return nearest of a,b,c, ; breaking ties in order a,b,c. if pa <= pb AND pa <= pc then return a else if pb <= pc then return b else return c end The calculations within the PaethPredictor function must be performed exactly, without overflow. Arithmetic modulo 256 is to be used only for the final step of subtracting the function result from the target byte value. Note that the order in which ties are broken is critical and must not be altered. The tie break order is: pixel to the left, pixel above, pixel to the upper left. (This order differs from that given in Paeth's article.) For all x < 0, assume Raw(x) = 0 and Prior(x) = 0. On the first scanline of an image (or of a pass of an interlaced image), assume Prior(x) = 0 for all x. To reverse the effect of the Paeth filter after decompression, output the following value: Paeth(x) + PaethPredictor(Raw(x-bpp), Prior(x), Prior(x-bpp)) (computed mod 256), where Raw and Prior refer to bytes already decoded. Exactly the same PaethPredictor function is used by both encoder and decoder. 7. Chunk Ordering Rules To allow new chunk types to be added to PNG, it is necessary to establish rules about the ordering requirements for all chunk types. Otherwise a PNG editing program cannot know what to do when it encounters an unknown chunk. Boutell, et. al. Informational [Page 36] RFC 2083 PNG: Portable Network Graphics March 1997 We define a "PNG editor" as a program that modifies a PNG file and wishes to preserve as much as possible of the ancillary information in the file. Two examples of PNG editors are a program that adds or modifies text chunks, and a program that adds a suggested palette to a truecolor PNG file. Ordinary image editors are not PNG editors in this sense, because they usually discard all unrecognized information while reading in an image. (Note: we strongly encourage programs handling PNG files to preserve ancillary information whenever possible.) As an example of possible problems, consider a hypothetical new ancillary chunk type that is safe-to-copy and is required to appear after PLTE if PLTE is present. If our program to add a suggested PLTE does not recognize this new chunk, it may insert PLTE in the wrong place, namely after the new chunk. We could prevent such problems by requiring PNG editors to discard all unknown chunks, but that is a very unattractive solution. Instead, PNG requires ancillary chunks not to have ordering restrictions like this. To prevent this type of problem while allowing for future extension, we put some constraints on both the behavior of PNG editors and the allowed ordering requirements for chunks. 7.1. Behavior of PNG editors The rules for PNG editors are: * When copying an unknown unsafe-to-copy ancillary chunk, a PNG editor must not move the chunk relative to any critical chunk. It can relocate the chunk freely relative to other ancillary chunks that occur between the same pair of critical chunks. (This is well defined since the editor must not add, delete, modify, or reorder critical chunks if it is preserving unknown unsafe-to-copy chunks.) * When copying an unknown safe-to-copy ancillary chunk, a PNG editor must not move the chunk from before IDAT to after IDAT or vice versa. (This is well defined because IDAT is always present.) Any other reordering is permitted. * When copying a known ancillary chunk type, an editor need only honor the specific chunk ordering rules that exist for that chunk type. However, it can always choose to apply the above general rules instead. * PNG editors must give up on encountering an unknown critical chunk type, because there is no way to be certain that a valid file will result from modifying a file containing such a chunk. (Note that simply discarding the chunk is not good enough, because it might have unknown implications for the interpretation of other chunks.) Boutell, et. al. Informational [Page 37] RFC 2083 PNG: Portable Network Graphics March 1997 These rules are expressed in terms of copying chunks from an input file to an output file, but they apply in the obvious way if a PNG file is modified in place. See also Chunk naming conventions (Section 3.3). 7.2. Ordering of ancillary chunks The ordering rules for an ancillary chunk type cannot be any stricter than this: * Unsafe-to-copy chunks can have ordering requirements relative to critical chunks. * Safe-to-copy chunks can have ordering requirements relative to IDAT. The actual ordering rules for any particular ancillary chunk type may be weaker. See for example the ordering rules for the standard ancillary chunk types (Summary of standard chunks, Section 4.3). Decoders must not assume more about the positioning of any ancillary chunk than is specified by the chunk ordering rules. In particular, it is never valid to assume that a specific ancillary chunk type occurs with any particular positioning relative to other ancillary chunks. (For example, it is unsafe to assume that your private ancillary chunk occurs immediately before IEND. Even if your application always writes it there, a PNG editor might have inserted some other ancillary chunk after it. But you can safely assume that your chunk will remain somewhere between IDAT and IEND.) 7.3. Ordering of critical chunks Critical chunks can have arbitrary ordering requirements, because PNG editors are required to give up if they encounter unknown critical chunks. For example, IHDR has the special ordering rule that it must always appear first. A PNG editor, or indeed any PNG-writing program, must know and follow the ordering rules for any critical chunk type that it can emit. Boutell, et. al. Informational [Page 38] RFC 2083 PNG: Portable Network Graphics March 1997 8. Miscellaneous Topics 8.1. File name extension On systems where file names customarily include an extension signifying file type, the extension ".png" is recommended for PNG files. Lower case ".png" is preferred if file names are case- sensitive. 8.2. Internet media type The Internet Assigned Numbers Authority (IANA) has registered "image/png" as the Internet Media Type for PNG [RFC-2045, RFC- 2048]. For robustness, decoders may choose to also support the interim media type "image/x-png" which was in use before registration was complete. 8.3. Macintosh file layout In the Apple Macintosh system, the following conventions are recommended: * The four-byte file type code for PNG files is "PNGf". (This code has been registered with Apple for PNG files.) The creator code will vary depending on the creating application. * The contents of the data fork must be a PNG file exactly as described in the rest of this specification. * The contents of the resource fork are unspecified. It may be empty or may contain application-dependent resources. * When transferring a Macintosh PNG file to a non-Macintosh system, only the data fork should be transferred. 8.4. Multiple-image extension PNG itself is strictly a single-image format. However, it may be necessary to store multiple images within one file; for example, this is needed to convert some GIF files. In the future, a multiple-image format based on PNG may be defined. Such a format will be considered a separate file format and will have a different signature. PNG-supporting applications may or may not choose to support the multiple-image format. See Rationale: Why not these features? (Section 12.3). Boutell, et. al. Informational [Page 39] RFC 2083 PNG: Portable Network Graphics March 1997 8.5. Security considerations A PNG file or datastream is composed of a collection of explicitly typed "chunks". Chunks whose contents are defined by the specification could actually contain anything, including malicious code. But there is no known risk that such malicious code could be executed on the recipient's computer as a result of decoding the PNG image. The possible security risks associated with future chunk types cannot be specified at this time. Security issues will be considered when evaluating chunks proposed for registration as public chunks. There is no additional security risk associated with unknown or unimplemented chunk types, because such chunks will be ignored, or at most be copied into another PNG file. The tEXt and zTXt chunks contain data that is meant to be displayed as plain text. It is possible that if the decoder displays such text without filtering out control characters, especially the ESC (escape) character, certain systems or terminals could behave in undesirable and insecure ways. We recommend that decoders filter out control characters to avoid this risk; see Recommendations for Decoders: Text chunk processing (Section 10.11). Because every chunk's length is available at its beginning, and because every chunk has a CRC trailer, there is a very robust defense against corrupted data and against fraudulent chunks that attempt to overflow the decoder's buffers. Also, the PNG signature bytes provide early detection of common file transmission errors. A decoder that fails to check CRCs could be subject to data corruption. The only likely consequence of such corruption is incorrectly displayed pixels within the image. Worse things might happen if the CRC of the IHDR chunk is not checked and the width or height fields are corrupted. See Recommendations for Decoders: Error checking (Section 10.1). A poorly written decoder might be subject to buffer overflow, because chunks can be extremely large, up to (2^31)-1 bytes long. But properly written decoders will handle large chunks without difficulty. Boutell, et. al. Informational [Page 40] RFC 2083 PNG: Portable Network Graphics March 1997 9. Recommendations for Encoders This chapter gives some recommendations for encoder behavior. The only absolute requirement on a PNG encoder is that it produce files that conform to the format specified in the preceding chapters. However, best results will usually be achieved by following these recommendations. 9.1. Sample depth scaling When encoding input samples that have a sample depth that cannot be directly represented in PNG, the encoder must scale the samples up to a sample depth that is allowed by PNG. The most accurate scaling method is the linear equation output = ROUND(input * MAXOUTSAMPLE / MAXINSAMPLE) where the input samples range from 0 to MAXINSAMPLE and the outputs range from 0 to MAXOUTSAMPLE (which is (2^sampledepth)-1). A close approximation to the linear scaling method can be achieved by "left bit replication", which is shifting the valid bits to begin in the most significant bit and repeating the most significant bits into the open bits. This method is often faster to compute than linear scaling. As an example, assume that 5-bit samples are being scaled up to 8 bits. If the source sample value is 27 (in the range from 0-31), then the original bits are: 4 3 2 1 0 --------- 1 1 0 1 1 Left bit replication gives a value of 222: 7 6 5 4 3 2 1 0 ---------------- 1 1 0 1 1 1 1 0 |=======| |===| | Leftmost Bits Repeated to Fill Open Bits | Original Bits which matches the value computed by the linear equation. Left bit replication usually gives the same value as linear scaling, and is never off by more than one. Boutell, et. al. Informational [Page 41] RFC 2083 PNG: Portable Network Graphics March 1997 A distinctly less accurate approximation is obtained by simply left-shifting the input value and filling the low order bits with zeroes. This scheme cannot reproduce white exactly, since it does not generate an all-ones maximum value; the net effect is to darken the image slightly. This method is not recommended in general, but it does have the effect of improving compression, particularly when dealing with greater-than-eight-bit sample depths. Since the relative error introduced by zero-fill scaling is small at high sample depths, some encoders may choose to use it. Zero-fill must not be used for alpha channel data, however, since many decoders will special-case alpha values of all zeroes and all ones. It is important to represent both those values exactly in the scaled data. When the encoder writes an sBIT chunk, it is required to do the scaling in such a way that the high-order bits of the stored samples match the original data. That is, if the sBIT chunk specifies a sample depth of S, the high-order S bits of the stored data must agree with the original S-bit data values. This allows decoders to recover the original data by shifting right. The added low-order bits are not constrained. Note that all the above scaling methods meet this restriction. When scaling up source data, it is recommended that the low-order bits be filled consistently for all samples; that is, the same source value should generate the same sample value at any pixel position. This improves compression by reducing the number of distinct sample values. However, this is not a requirement, and some encoders may choose not to follow it. For example, an encoder might instead dither the low-order bits, improving displayed image quality at the price of increasing file size. In some applications the original source data may have a range that is not a power of 2. The linear scaling equation still works for this case, although the shifting methods do not. It is recommended that an sBIT chunk not be written for such images, since sBIT suggests that the original data range was exactly 0..2^S-1. 9.2. Encoder gamma handling See Gamma Tutorial (Chapter 13) if you aren't already familiar with gamma issues. Proper handling of gamma encoding and the gAMA chunk in an encoder depends on the prior history of the sample values and on whether these values have already been quantized to integers. Boutell, et. al. Informational [Page 42] RFC 2083 PNG: Portable Network Graphics March 1997 If the encoder has access to sample intensity values in floating- point or high-precision integer form (perhaps from a computer image renderer), then it is recommended that the encoder perform its own gamma encoding before quantizing the data to integer values for storage in the file. Applying gamma encoding at this stage results in images with fewer banding artifacts at a given sample depth, or allows smaller samples while retaining the same visual quality. A linear intensity level, expressed as a floating-point value in the range 0 to 1, can be converted to a gamma-encoded sample value by sample = ROUND((intensity ^ encoder_gamma) * MAXSAMPLE) The file_gamma value to be written in the PNG gAMA chunk is the same as encoder_gamma in this equation, since we are assuming the initial intensity value is linear (in effect, camera_gamma is 1.0). If the image is being written to a file only, the encoder_gamma value can be selected somewhat arbitrarily. Values of 0.45 or 0.5 are generally good choices because they are common in video systems, and so most PNG decoders should do a good job displaying such images. Some image renderers may simultaneously write the image to a PNG file and display it on-screen. The displayed pixels should be gamma corrected for the display system and viewing conditions in use, so that the user sees a proper representation of the intended scene. An appropriate gamma correction value is screen_gc = viewing_gamma / display_gamma If the renderer wants to write the same gamma-corrected sample values to the PNG file, avoiding a separate gamma-encoding step for file output, then this screen_gc value should be written in the gAMA chunk. This will allow a PNG decoder to reproduce what the file's originator saw on screen during rendering (provided the decoder properly supports arbitrary values in a gAMA chunk). However, it is equally reasonable for a renderer to apply gamma correction for screen display using a gamma appropriate to the viewing conditions, and to separately gamma-encode the sample values for file storage using a standard value of gamma such as 0.5. In fact, this is preferable, since some PNG decoders may not accurately display images with unusual gAMA values. Boutell, et. al. Informational [Page 43] RFC 2083 PNG: Portable Network Graphics March 1997 Computer graphics renderers often do not perform gamma encoding, instead making sample values directly proportional to scene light intensity. If the PNG encoder receives sample values that have already been quantized into linear-light integer values, there is no point in doing gamma encoding on them; that would just result in further loss of information. The encoder should just write the sample values to the PNG file. This "linear" sample encoding is equivalent to gamma encoding with a gamma of 1.0, so graphics programs that produce linear samples should always emit a gAMA chunk specifying a gamma of 1.0. When the sample values come directly from a piece of hardware, the correct gAMA value is determined by the gamma characteristic of the hardware. In the case of video digitizers ("frame grabbers"), gAMA should be 0.45 or 0.5 for NTSC (possibly less for PAL or SECAM) since video camera transfer functions are standardized. Image scanners are less predictable. Their output samples may be linear (gamma 1.0) since CCD sensors themselves are linear, or the scanner hardware may have already applied gamma correction designed to compensate for dot gain in subsequent printing (gamma of about 0.57), or the scanner may have corrected the samples for display on a CRT (gamma of 0.4-0.5). You will need to refer to the scanner's manual, or even scan a calibrated gray wedge, to determine what a particular scanner does. File format converters generally should not attempt to convert supplied images to a different gamma. Store the data in the PNG file without conversion, and record the source gamma if it is known. Gamma alteration at file conversion time causes re- quantization of the set of intensity levels that are represented, introducing further roundoff error with little benefit. It's almost always better to just copy the sample values intact from the input to the output file. In some cases, the supplied image may be in an image format (e.g., TIFF) that can describe the gamma characteristic of the image. In such cases, a file format converter is strongly encouraged to write a PNG gAMA chunk that corresponds to the known gamma of the source image. Note that some file formats specify the gamma of the display system, not the camera. If the input file's gamma value is greater than 1.0, it is almost certainly a display system gamma, and you should use its reciprocal for the PNG gAMA. Boutell, et. al. Informational [Page 44] RFC 2083 PNG: Portable Network Graphics March 1997 If the encoder or file format converter does not know how an image was originally created, but does know that the image has been displayed satisfactorily on a display with gamma display_gamma under lighting conditions where a particular viewing_gamma is appropriate, then the image can be marked as having the file_gamma: file_gamma = viewing_gamma / display_gamma This will allow viewers of the PNG file to see the same image that the person running the file format converter saw. Although this may not be precisely the correct value of the image gamma, it's better to write a gAMA chunk with an approximately right value than to omit the chunk and force PNG decoders to guess at an appropriate gamma. On the other hand, if the image file is being converted as part of a "bulk" conversion, with no one looking at each image, then it is better to omit the gAMA chunk entirely. If the image gamma has to be guessed at, leave it to the decoder to do the guessing. Gamma does not apply to alpha samples; alpha is always represented linearly. See also Recommendations for Decoders: Decoder gamma handling (Section 10.5). 9.3. Encoder color handling See Color Tutorial (Chapter 14) if you aren't already familiar with color issues. If it is possible for the encoder to determine the chromaticities of the source display primaries, or to make a strong guess based on the origin of the image or the hardware running it, then the encoder is strongly encouraged to output the cHRM chunk. If it does so, the gAMA chunk should also be written; decoders can do little with cHRM if gAMA is missing. Boutell, et. al. Informational [Page 45] RFC 2083 PNG: Portable Network Graphics March 1997 Video created with recent video equipment probably uses the CCIR 709 primaries and D65 white point [ITU-BT709], which are: R G B White x 0.640 0.300 0.150 0.3127 y 0.330 0.600 0.060 0.3290 An older but still very popular video standard is SMPTE-C [SMPTE- 170M]: R G B White x 0.630 0.310 0.155 0.3127 y 0.340 0.595 0.070 0.3290 The original NTSC color primaries have not been used in decades. Although you may still find the NTSC numbers listed in standards documents, you won't find any images that actually use them. Scanners that produce PNG files as output should insert the filter chromaticities into a cHRM chunk and the camera_gamma into a gAMA chunk. In the case of hand-drawn or digitally edited images, you have to determine what monitor they were viewed on when being produced. Many image editing programs allow you to specify what type of monitor you are using. This is often because they are working in some device-independent space internally. Such programs have enough information to write valid cHRM and gAMA chunks, and should do so automatically. If the encoder is compiled as a portion of a computer image renderer that performs full-spectral rendering, the monitor values that were used to convert from the internal device-independent color space to RGB should be written into the cHRM chunk. Any colors that are outside the gamut of the chosen RGB device should be clipped or otherwise constrained to be within the gamut; PNG does not store out of gamut colors. If the computer image renderer performs calculations directly in device-dependent RGB space, a cHRM chunk should not be written unless the scene description and rendering parameters have been adjusted to look good on a particular monitor. In that case, the data for that monitor (if known) should be used to construct a cHRM chunk. Boutell, et. al. Informational [Page 46] RFC 2083 PNG: Portable Network Graphics March 1997 There are often cases where an image's exact origins are unknown, particularly if it began life in some other format. A few image formats store calibration information, which can be used to fill in the cHRM chunk. For example, all PhotoCD images use the CCIR 709 primaries and D65 whitepoint, so these values can be written into the cHRM chunk when converting a PhotoCD file. PhotoCD also uses the SMPTE-170M transfer function, which is closely approximated by a gAMA of 0.5. (PhotoCD can store colors outside the RGB gamut, so the image data will require gamut mapping before writing to PNG format.) TIFF 6.0 files can optionally store calibration information, which if present should be used to construct the cHRM chunk. GIF and most other formats do not store any calibration information. It is not recommended that file format converters attempt to convert supplied images to a different RGB color space. Store the data in the PNG file without conversion, and record the source primary chromaticities if they are known. Color space transformation at file conversion time is a bad idea because of gamut mismatches and rounding errors. As with gamma conversions, it's better to store the data losslessly and incur at most one conversion when the image is finally displayed. See also Recommendations for Decoders: Decoder color handling (Section 10.6). 9.4. Alpha channel creation The alpha channel can be regarded either as a mask that temporarily hides transparent parts of the image, or as a means for constructing a non-rectangular image. In the first case, the color values of fully transparent pixels should be preserved for future use. In the second case, the transparent pixels carry no useful data and are simply there to fill out the rectangular image area required by PNG. In this case, fully transparent pixels should all be assigned the same color value for best compression. Image authors should keep in mind the possibility that a decoder will ignore transparency control. Hence, the colors assigned to transparent pixels should be reasonable background colors whenever feasible. For applications that do not require a full alpha channel, or cannot afford the price in compression efficiency, the tRNS transparency chunk is also available. Boutell, et. al. Informational [Page 47] RFC 2083 PNG: Portable Network Graphics March 1997 If the image has a known background color, this color should be written in the bKGD chunk. Even decoders that ignore transparency may use the bKGD color to fill unused screen area. If the original image has premultiplied (also called "associated") alpha data, convert it to PNG's non-premultiplied format by dividing each sample value by the corresponding alpha value, then multiplying by the maximum value for the image bit depth, and rounding to the nearest integer. In valid premultiplied data, the sample values never exceed their corresponding alpha values, so the result of the division should always be in the range 0 to 1. If the alpha value is zero, output black (zeroes). 9.5. Suggested palettes A PLTE chunk can appear in truecolor PNG files. In such files, the chunk is not an essential part of the image data, but simply represents a suggested palette that viewers may use to present the image on indexed-color display hardware. A suggested palette is of no interest to viewers running on truecolor hardware. If an encoder chooses to provide a suggested palette, it is recommended that a hIST chunk also be written to indicate the relative importance of the palette entries. The histogram values are most easily computed as "nearest neighbor" counts, that is, the approximate usage of each palette entry if no dithering is applied. (These counts will often be available for free as a consequence of developing the suggested palette.) For images of color type 2 (truecolor without alpha channel), it is recommended that the palette and histogram be computed with reference to the RGB data only, ignoring any transparent-color specification. If the file uses transparency (has a tRNS chunk), viewers can easily adapt the resulting palette for use with their intended background color. They need only replace the palette entry closest to the tRNS color with their background color (which may or may not match the file's bKGD color, if any). For images of color type 6 (truecolor with alpha channel), it is recommended that a bKGD chunk appear and that the palette and histogram be computed with reference to the image as it would appear after compositing against the specified background color. This definition is necessary to ensure that useful palette entries are generated for pixels having fractional alpha values. The resulting palette will probably only be useful to viewers that present the image against the same background color. It is recommended that PNG editors delete or recompute the palette if they alter or remove the bKGD chunk in an image of color type 6. Boutell, et. al. Informational [Page 48] RFC 2083 PNG: Portable Network Graphics March 1997 If PLTE appears without bKGD in an image of color type 6, the circumstances under which the palette was computed are unspecified. 9.6. Filter selection For images of color type 3 (indexed color), filter type 0 (None) is usually the most effective. Note that color images with 256 or fewer colors should almost always be stored in indexed color format; truecolor format is likely to be much larger. Filter type 0 is also recommended for images of bit depths less than 8. For low-bit-depth grayscale images, it may be a net win to expand the image to 8-bit representation and apply filtering, but this is rare. For truecolor and grayscale images, any of the five filters may prove the most effective. If an encoder uses a fixed filter, the Paeth filter is most likely to be the best. For best compression of truecolor and grayscale images, we recommend an adaptive filtering approach in which a filter is chosen for each scanline. The following simple heuristic has performed well in early tests: compute the output scanline using all five filters, and select the filter that gives the smallest sum of absolute values of outputs. (Consider the output bytes as signed differences for this test.) This method usually outperforms any single fixed filter choice. However, it is likely that much better heuristics will be found as more experience is gained with PNG. Filtering according to these recommendations is effective on interlaced as well as noninterlaced images. 9.7. Text chunk processing A nonempty keyword must be provided for each text chunk. The generic keyword "Comment" can be used if no better description of the text is available. If a user-supplied keyword is used, be sure to check that it meets the restrictions on keywords. PNG text strings are expected to use the Latin-1 character set. Encoders should avoid storing characters that are not defined in Latin-1, and should provide character code remapping if the local system's character set is not Latin-1. Encoders should discourage the creation of single lines of text longer than 79 characters, in order to facilitate easy reading. Boutell, et. al. Informational [Page 49] RFC 2083 PNG: Portable Network Graphics March 1997 It is recommended that text items less than 1K (1024 bytes) in size should be output using uncompressed tEXt chunks. In particular, it is recommended that the basic title and author keywords should always be output using uncompressed tEXt chunks. Lengthy disclaimers, on the other hand, are ideal candidates for zTXt. Placing large tEXt and zTXt chunks after the image data (after IDAT) can speed up image display in some situations, since the decoder won't have to read over the text to get to the image data. But it is recommended that small text chunks, such as the image title, appear before IDAT. 9.8. Use of private chunks Applications can use PNG private chunks to carry information that need not be understood by other applications. Such chunks must be given names with lowercase second letters, to ensure that they can never conflict with any future public chunk definition. Note, however, that there is no guarantee that some other application will not use the same private chunk name. If you use a private chunk type, it is prudent to store additional identifying information at the beginning of the chunk data. Use an ancillary chunk type (lowercase first letter), not a critical chunk type, for all private chunks that store information that is not absolutely essential to view the image. Creation of private critical chunks is discouraged because they render PNG files unportable. Such chunks should not be used in publicly available software or files. If private critical chunks are essential for your application, it is recommended that one appear near the start of the file, so that a standard decoder need not read very far before discovering that it cannot handle the file. If you want others outside your organization to understand a chunk type that you invent, contact the maintainers of the PNG specification to submit a proposed chunk name and definition for addition to the list of special-purpose public chunks (see Additional chunk types, Section 4.4). Note that a proposed public chunk name (with uppercase second letter) must not be used in publicly available software or files until registration has been approved. If an ancillary chunk contains textual information that might be of interest to a human user, you should not create a special chunk type for it. Instead use a tEXt chunk and define a suitable keyword. That way, the information will be available to users not using your software. Boutell, et. al. Informational [Page 50] RFC 2083 PNG: Portable Network Graphics March 1997 Keywords in tEXt chunks should be reasonably self-explanatory, since the idea is to let other users figure out what the chunk contains. If of general usefulness, new keywords can be registered with the maintainers of the PNG specification. But it is permissible to use keywords without registering them first. 9.9. Private type and method codes This specification defines the meaning of only some of the possible values of some fields. For example, only compression method 0 and filter types 0 through 4 are defined. Numbers greater than 127 must be used when inventing experimental or private definitions of values for any of these fields. Numbers below 128 are reserved for possible future public extensions of this specification. Note that use of private type codes may render a file unreadable by standard decoders. Such codes are strongly discouraged except for experimental purposes, and should not appear in publicly available software or files. 10. Recommendations for Decoders This chapter gives some recommendations for decoder behavior. The only absolute requirement on a PNG decoder is that it successfully read any file conforming to the format specified in the preceding chapters. However, best results will usually be achieved by following these recommendations. 10.1. Error checking To ensure early detection of common file-transfer problems, decoders should verify that all eight bytes of the PNG file signature are correct. (See Rationale: PNG file signature, Section 12.11.) A decoder can have additional confidence in the file's integrity if the next eight bytes are an IHDR chunk header with the correct chunk length. Unknown chunk types must be handled as described in Chunk naming conventions (Section 3.3). An unknown chunk type is not to be treated as an error unless it is a critical chunk. It is strongly recommended that decoders should verify the CRC on each chunk. In some situations it is desirable to check chunk headers (length and type code) before reading the chunk data and CRC. The chunk type can be checked for plausibility by seeing whether all four bytes are ASCII letters (codes 65-90 and 97-122); note that this need only be done for unrecognized type codes. If the total file Boutell, et. al. Informational [Page 51] RFC 2083 PNG: Portable Network Graphics March 1997 size is known (from file system information, HTTP protocol, etc), the chunk length can be checked for plausibility as well. If CRCs are not checked, dropped/added data bytes or an erroneous chunk length can cause the decoder to get out of step and misinterpret subsequent data as a chunk header. Verifying that the chunk type contains letters is an inexpensive way of providing early error detection in this situation. For known-length chunks such as IHDR, decoders should treat an unexpected chunk length as an error. Future extensions to this specification will not add new fields to existing chunks; instead, new chunk types will be added to carry new information. Unexpected values in fields of known chunks (for example, an unexpected compression method in the IHDR chunk) must be checked for and treated as errors. However, it is recommended that unexpected field values be treated as fatal errors only in critical chunks. An unexpected value in an ancillary chunk can be handled by ignoring the whole chunk as though it were an unknown chunk type. (This recommendation assumes that the chunk's CRC has been verified. In decoders that do not check CRCs, it is safer to treat any unexpected value as indicating a corrupted file.) 10.2. Pixel dimensions Non-square pixels can be represented (see the pHYs chunk), but viewers are not required to account for them; a viewer can present any PNG file as though its pixels are square. Conversely, viewers running on display hardware with non-square pixels are strongly encouraged to rescale images for proper display. 10.3. Truecolor image handling To achieve PNG's goal of universal interchangeability, decoders are required to accept all types of PNG image: indexed-color, truecolor, and grayscale. Viewers running on indexed-color display hardware need to be able to reduce truecolor images to indexed format for viewing. This process is usually called "color quantization". Boutell, et. al. Informational [Page 52] RFC 2083 PNG: Portable Network Graphics March 1997 A simple, fast way of doing this is to reduce the image to a fixed palette. Palettes with uniform color spacing ("color cubes") are usually used to minimize the per-pixel computation. For photograph-like images, dithering is recommended to avoid ugly contours in what should be smooth gradients; however, dithering introduces graininess that can be objectionable. The quality of rendering can be improved substantially by using a palette chosen specifically for the image, since a color cube usually has numerous entries that are unused in any particular image. This approach requires more work, first in choosing the palette, and second in mapping individual pixels to the closest available color. PNG allows the encoder to supply a suggested palette in a PLTE chunk, but not all encoders will do so, and the suggested palette may be unsuitable in any case (it may have too many or too few colors). High-quality viewers will therefore need to have a palette selection routine at hand. A large lookup table is usually the most feasible way of mapping individual pixels to palette entries with adequate speed. Numerous implementations of color quantization are available. The PNG reference implementation, libpng, includes code for the purpose. 10.4. Sample depth rescaling Decoders may wish to scale PNG data to a lesser sample depth (data precision) for display. For example, 16-bit data will need to be reduced to 8-bit depth for use on most present-day display hardware. Reduction of 8-bit data to 5-bit depth is also common. The most accurate scaling is achieved by the linear equation output = ROUND(input * MAXOUTSAMPLE / MAXINSAMPLE) where MAXINSAMPLE = (2^sampledepth)-1 MAXOUTSAMPLE = (2^desired_sampledepth)-1 A slightly less accurate conversion is achieved by simply shifting right by sampledepth-desired_sampledepth places. For example, to reduce 16-bit samples to 8-bit, one need only discard the low- order byte. In many situations the shift method is sufficiently accurate for display purposes, and it is certainly much faster. (But if gamma correction is being done, sample rescaling can be merged into the gamma correction lookup table, as is illustrated in Decoder gamma handling, Section 10.5.) Boutell, et. al. Informational [Page 53] RFC 2083 PNG: Portable Network Graphics March 1997 When an sBIT chunk is present, the original pre-PNG data can be recovered by shifting right to the sample depth specified by sBIT. Note that linear scaling will not necessarily reproduce the original data, because the encoder is not required to have used linear scaling to scale the data up. However, the encoder is required to have used a method that preserves the high-order bits, so shifting always works. This is the only case in which shifting might be said to be more accurate than linear scaling. When comparing pixel values to tRNS chunk values to detect transparent pixels, it is necessary to do the comparison exactly. Therefore, transparent pixel detection must be done before reducing sample precision. 10.5. Decoder gamma handling See Gamma Tutorial (Chapter 13) if you aren't already familiar with gamma issues. To produce correct tone reproduction, a good image display program should take into account the gammas of the image file and the display device, as well as the viewing_gamma appropriate to the lighting conditions near the display. This can be done by calculating gbright = insample / MAXINSAMPLE bright = gbright ^ (1.0 / file_gamma) vbright = bright ^ viewing_gamma gcvideo = vbright ^ (1.0 / display_gamma) fbval = ROUND(gcvideo * MAXFBVAL) where MAXINSAMPLE is the maximum sample value in the file (255 for 8-bit, 65535 for 16-bit, etc), MAXFBVAL is the maximum value of a frame buffer sample (255 for 8-bit, 31 for 5-bit, etc), insample is the value of the sample in the PNG file, and fbval is the value to write into the frame buffer. The first line converts from integer samples into a normalized 0 to 1 floating point value, the second undoes the gamma encoding of the image file to produce a linear intensity value, the third adjusts for the viewing conditions, the fourth corrects for the display system's gamma value, and the fifth converts to an integer frame buffer sample. In practice, the second through fourth lines can be merged into gcvideo = gbright^(viewing_gamma / (file_gamma*display_gamma)) so as to perform only one power calculation. For color images, the entire calculation is performed separately for R, G, and B values. Boutell, et. al. Informational [Page 54] RFC 2083 PNG: Portable Network Graphics March 1997 It is not necessary to perform transcendental math for every pixel. Instead, compute a lookup table that gives the correct output value for every possible sample value. This requires only 256 calculations per image (for 8-bit accuracy), not one or three calculations per pixel. For an indexed-color image, a one-time correction of the palette is sufficient, unless the image uses transparency and is being displayed against a nonuniform background. In some cases even the cost of computing a gamma lookup table may be a concern. In these cases, viewers are encouraged to have precomputed gamma correction tables for file_gamma values of 1.0 and 0.5 with some reasonable choice of viewing_gamma and display_gamma, and to use the table closest to the gamma indicated in the file. This will produce acceptable results for the majority of real files. When the incoming image has unknown gamma (no gAMA chunk), choose a likely default file_gamma value, but allow the user to select a new one if the result proves too dark or too light. In practice, it is often difficult to determine what value of display_gamma should be used. In systems with no built-in gamma correction, the display_gamma is determined entirely by the CRT. Assuming a CRT_gamma of 2.5 is recommended, unless you have detailed calibration measurements of this particular CRT available. However, many modern frame buffers have lookup tables that are used to perform gamma correction, and on these systems the display_gamma value should be the gamma of the lookup table and CRT combined. You may not be able to find out what the lookup table contains from within an image viewer application, so you may have to ask the user what the system's gamma value is. Unfortunately, different manufacturers use different ways of specifying what should go into the lookup table, so interpretation of the system gamma value is system-dependent. Gamma Tutorial (Chapter 13) gives some examples. The response of real displays is actually more complex than can be described by a single number (display_gamma). If actual measurements of the monitor's light output as a function of voltage input are available, the fourth and fifth lines of the computation above can be replaced by a lookup in these measurements, to find the actual frame buffer value that most nearly gives the desired brightness. Boutell, et. al. Informational [Page 55] RFC 2083 PNG: Portable Network Graphics March 1997 The value of viewing_gamma depends on lighting conditions; see Gamma Tutorial (Chapter 13) for more detail. Ideally, a viewer would allow the user to specify viewing_gamma, either directly numerically, or via selecting from "bright surround", "dim surround", and "dark surround" conditions. Viewers that don't want to do this should just assume a value for viewing_gamma of 1.0, since most computer displays live in brightly-lit rooms. When viewing images that are digitized from video, or that are destined to become video frames, the user might want to set the viewing_gamma to about 1.25 regardless of the actual level of room lighting. This value of viewing_gamma is "built into" NTSC video practice, and displaying an image with that viewing_gamma allows the user to see what a TV set would show under the current room lighting conditions. (This is not the same thing as trying to obtain the most accurate rendition of the content of the scene, which would require adjusting viewing_gamma to correspond to the room lighting level.) This is another reason viewers might want to allow users to adjust viewing_gamma directly. 10.6. Decoder color handling See Color Tutorial (Chapter 14) if you aren't already familiar with color issues. In many cases, decoders will treat image data in PNG files as device-dependent RGB data and display it without modification (except for appropriate gamma correction). This provides the fastest display of PNG images. But unless the viewer uses exactly the same display hardware as the original image author used, the colors will not be exactly the same as the original author saw, particularly for darker or near-neutral colors. The cHRM chunk provides information that allows closer color matching than that provided by gamma correction alone. Decoders can use the cHRM data to transform the image data from RGB to XYZ and thence into a perceptually linear color space such as CIE LAB. They can then partition the colors to generate an optimal palette, because the geometric distance between two colors in CIE LAB is strongly related to how different those colors appear (unlike, for example, RGB or XYZ spaces). The resulting palette of colors, once transformed back into RGB color space, could be used for display or written into a PLTE chunk. Decoders that are part of image processing applications might also transform image data into CIE LAB space for analysis. Boutell, et. al. Informational [Page 56] RFC 2083 PNG: Portable Network Graphics March 1997 In applications where color fidelity is critical, such as product design, scientific visualization, medicine, architecture, or advertising, decoders can transform the image data from source_RGB to the display_RGB space of the monitor used to view the image. This involves calculating the matrix to go from source_RGB to XYZ and the matrix to go from XYZ to display_RGB, then combining them to produce the overall transformation. The decoder is responsible for implementing gamut mapping. Decoders running on platforms that have a Color Management System (CMS) can pass the image data, gAMA and cHRM values to the CMS for display or further processing. Decoders that provide color printing facilities can use the facilities in Level 2 PostScript to specify image data in calibrated RGB space or in a device-independent color space such as XYZ. This will provide better color fidelity than a simple RGB to CMYK conversion. The PostScript Language Reference manual gives examples of this process [POSTSCRIPT]. Such decoders are responsible for implementing gamut mapping between source_RGB (specified in the cHRM chunk) and the target printer. The PostScript interpreter is then responsible for producing the required colors. Decoders can use the cHRM data to calculate an accurate grayscale representation of a color image. Conversion from RGB to gray is simply a case of calculating the Y (luminance) component of XYZ, which is a weighted sum of the R G and B values. The weights depend on the monitor type, i.e., the values in the cHRM chunk. Decoders may wish to do this for PNG files with no cHRM chunk. In that case, a reasonable default would be the CCIR 709 primaries [ITU-BT709]. Do not use the original NTSC primaries, unless you really do have an image color-balanced for such a monitor. Few monitors ever used the NTSC primaries, so such images are probably nonexistent these days. 10.7. Background color The background color given by bKGD will typically be used to fill unused screen space around the image, as well as any transparent pixels within the image. (Thus, bKGD is valid and useful even when the image does not use transparency.) If no bKGD chunk is present, the viewer will need to make its own decision about a suitable background color. Boutell, et. al. Informational [Page 57] RFC 2083 PNG: Portable Network Graphics March 1997 Viewers that have a specific background against which to present the image (such as Web browsers) should ignore the bKGD chunk, in effect overriding bKGD with their preferred background color or background image. The background color given by bKGD is not to be considered transparent, even if it happens to match the color given by tRNS (or, in the case of an indexed-color image, refers to a palette index that is marked as transparent by tRNS). Otherwise one would have to imagine something "behind the background" to composite against. The background color is either used as background or ignored; it is not an intermediate layer between the PNG image and some other background. Indeed, it will be common that bKGD and tRNS specify the same color, since then a decoder that does not implement transparency processing will give the intended display, at least when no partially-transparent pixels are present. 10.8. Alpha channel processing In the most general case, the alpha channel can be used to composite a foreground image against a background image; the PNG file defines the foreground image and the transparency mask, but not the background image. Decoders are not required to support this most general case. It is expected that most will be able to support compositing against a single background color, however. The equation for computing a composited sample value is output = alpha * foreground + (1-alpha) * background where alpha and the input and output sample values are expressed as fractions in the range 0 to 1. This computation should be performed with linear (non-gamma-encoded) sample values. For color images, the computation is done separately for R, G, and B samples. The following code illustrates the general case of compositing a foreground image over a background image. It assumes that you have the original pixel data available for the background image, and that output is to a frame buffer for display. Other variants are possible; see the comments below the code. The code allows the sample depths and gamma values of foreground image, background image, and frame buffer/CRT all to be different. Don't assume they are the same without checking. Boutell, et. al. Informational [Page 58] RFC 2083 PNG: Portable Network Graphics March 1997 This code is standard C, with line numbers added for reference in the comments below. 01 int foreground[4]; /* image pixel: R, G, B, A */ 02 int background[3]; /* background pixel: R, G, B */ 03 int fbpix[3]; /* frame buffer pixel */ 04 int fg_maxsample; /* foreground max sample */ 05 int bg_maxsample; /* background max sample */ 06 int fb_maxsample; /* frame buffer max sample */ 07 int ialpha; 08 float alpha, compalpha; 09 float gamfg, linfg, gambg, linbg, comppix, gcvideo; /* Get max sample values in data and frame buffer */ 10 fg_maxsample = (1 << fg_sample_depth) - 1; 11 bg_maxsample = (1 << bg_sample_depth) - 1; 12 fb_maxsample = (1 << frame_buffer_sample_depth) - 1; /* * Get integer version of alpha. * Check for opaque and transparent special cases; * no compositing needed if so. * * We show the whole gamma decode/correct process in * floating point, but it would more likely be done * with lookup tables. */ 13 ialpha = foreground[3]; 14 if (ialpha == 0) { /* * Foreground image is transparent here. * If the background image is already in the frame * buffer, there is nothing to do. */ 15 ; 16 } else if (ialpha == fg_maxsample) { /* * Copy foreground pixel to frame buffer. */ 17 for (i = 0; i < 3; i++) { 18 gamfg = (float) foreground[i] / fg_maxsample; 19 linfg = pow(gamfg, 1.0/fg_gamma); 20 comppix = linfg; 21 gcvideo = pow(comppix,viewing_gamma/display_gamma); 22 fbpix[i] = (int) (gcvideo * fb_maxsample + 0.5); 23 } Boutell, et. al. Informational [Page 59] RFC 2083 PNG: Portable Network Graphics March 1997 24 } else { /* * Compositing is necessary. * Get floating-point alpha and its complement. * Note: alpha is always linear; gamma does not * affect it. */ 25 alpha = (float) ialpha / fg_maxsample; 26 compalpha = 1.0 - alpha; 27 for (i = 0; i < 3; i++) { /* * Convert foreground and background to floating * point, then linearize (undo gamma encoding). */ 28 gamfg = (float) foreground[i] / fg_maxsample; 29 linfg = pow(gamfg, 1.0/fg_gamma); 30 gambg = (float) background[i] / bg_maxsample; 31 linbg = pow(gambg, 1.0/bg_gamma); /* * Composite. */ 32 comppix = linfg * alpha + linbg * compalpha; /* * Gamma correct for display. * Convert to integer frame buffer pixel. */ 33 gcvideo = pow(comppix,viewing_gamma/display_gamma); 34 fbpix[i] = (int) (gcvideo * fb_maxsample + 0.5); 35 } 36 } Variations: * If output is to another PNG image file instead of a frame buffer, lines 21, 22, 33, and 34 should be changed to be something like /* * Gamma encode for storage in output file. * Convert to integer sample value. */ gamout = pow(comppix, outfile_gamma); outpix[i] = (int) (gamout * out_maxsample + 0.5); Also, it becomes necessary to process background pixels when alpha is zero, rather than just skipping pixels. Thus, line 15 will need to be replaced by copies of lines 17-23, but processing background instead of foreground pixel values. Boutell, et. al. Informational [Page 60] RFC 2083 PNG: Portable Network Graphics March 1997 * If the sample depths of the output file, foreground file, and background file are all the same, and the three gamma values also match, then the no-compositing code in lines 14-23 reduces to nothing more than copying pixel values from the input file to the output file if alpha is one, or copying pixel values from background to output file if alpha is zero. Since alpha is typically either zero or one for the vast majority of pixels in an image, this is a great savings. No gamma computations are needed for most pixels. * When the sample depths and gamma values all match, it may appear attractive to skip the gamma decoding and encoding (lines 28-31, 33-34) and just perform line 32 using gamma- encoded sample values. Although this doesn't hurt image quality too badly, the time savings are small if alpha values of zero and one are special-cased as recommended here. * If the original pixel values of the background image are no longer available, only processed frame buffer pixels left by display of the background image, then lines 30 and 31 need to extract intensity from the frame buffer pixel values using code like /* * Decode frame buffer value back into linear space. */ gcvideo = (float) fbpix[i] / fb_maxsample; linbg = pow(gcvideo, display_gamma / viewing_gamma); However, some roundoff error can result, so it is better to have the original background pixels available if at all possible. * Note that lines 18-22 are performing exactly the same gamma computation that is done when no alpha channel is present. So, if you handle the no-alpha case with a lookup table, you can use the same lookup table here. Lines 28-31 and 33-34 can also be done with (different) lookup tables. * Of course, everything here can be done in integer arithmetic. Just be careful to maintain sufficient precision all the way through. Note: in floating point, no overflow or underflow checks are needed, because the input sample values are guaranteed to be between 0 and 1, and compositing always yields a result that is in between the input values (inclusive). With integer arithmetic, some roundoff-error analysis might be needed to guarantee no overflow or underflow. Boutell, et. al. Informational [Page 61] RFC 2083 PNG: Portable Network Graphics March 1997 When displaying a PNG image with full alpha channel, it is important to be able to composite the image against some background, even if it's only black. Ignoring the alpha channel will cause PNG images that have been converted from an associated-alpha representation to look wrong. (Of course, if the alpha channel is a separate transparency mask, then ignoring alpha is a useful option: it allows the hidden parts of the image to be recovered.) Even if the decoder author does not wish to implement true compositing logic, it is simple to deal with images that contain only zero and one alpha values. (This is implicitly true for grayscale and truecolor PNG files that use a tRNS chunk; for indexed-color PNG files, it is easy to check whether tRNS contains any values other than 0 and 255.) In this simple case, transparent pixels are replaced by the background color, while others are unchanged. If a decoder contains only this much transparency capability, it should deal with a full alpha channel by treating all nonzero alpha values as fully opaque; that is, do not replace partially transparent pixels by the background. This approach will not yield very good results for images converted from associated-alpha formats, but it's better than doing nothing. 10.9. Progressive display When receiving images over slow transmission links, decoders can improve perceived performance by displaying interlaced images progressively. This means that as each pass is received, an approximation to the complete image is displayed based on the data received so far. One simple yet pleasing effect can be obtained by expanding each received pixel to fill a rectangle covering the yet-to-be-transmitted pixel positions below and to the right of the received pixel. This process can be described by the following pseudocode: Starting_Row [1..7] = { 0, 0, 4, 0, 2, 0, 1 } Starting_Col [1..7] = { 0, 4, 0, 2, 0, 1, 0 } Row_Increment [1..7] = { 8, 8, 8, 4, 4, 2, 2 } Col_Increment [1..7] = { 8, 8, 4, 4, 2, 2, 1 } Block_Height [1..7] = { 8, 8, 4, 4, 2, 2, 1 } Block_Width [1..7] = { 8, 4, 4, 2, 2, 1, 1 } pass := 1 while pass <= 7 begin row := Starting_Row[pass] while row < height Boutell, et. al. Informational [Page 62] RFC 2083 PNG: Portable Network Graphics March 1997 begin col := Starting_Col[pass] while col < width begin visit (row, col, min (Block_Height[pass], height - row), min (Block_Width[pass], width - col)) col := col + Col_Increment[pass] end row := row + Row_Increment[pass] end pass := pass + 1 end Here, the function "visit(row,column,height,width)" obtains the next transmitted pixel and paints a rectangle of the specified height and width, whose upper-left corner is at the specified row and column, using the color indicated by the pixel. Note that row and column are measured from 0,0 at the upper left corner. If the decoder is merging the received image with a background image, it may be more convenient just to paint the received pixel positions; that is, the "visit()" function sets only the pixel at the specified row and column, not the whole rectangle. This produces a "fade-in" effect as the new image gradually replaces the old. An advantage of this approach is that proper alpha or transparency processing can be done as each pixel is replaced. Painting a rectangle as described above will overwrite background-image pixels that may be needed later, if the pixels eventually received for those positions turn out to be wholly or partially transparent. Of course, this is only a problem if the background image is not stored anywhere offscreen. 10.10. Suggested-palette and histogram usage In truecolor PNG files, the encoder may have provided a suggested PLTE chunk for use by viewers running on indexed-color hardware. If the image has a tRNS chunk, the viewer will need to adapt the suggested palette for use with its desired background color. To do this, replace the palette entry closest to the tRNS color with the desired background color; or just add a palette entry for the background color, if the viewer can handle more colors than there are PLTE entries. Boutell, et. al. Informational [Page 63] RFC 2083 PNG: Portable Network Graphics March 1997 For images of color type 6 (truecolor with alpha channel), any suggested palette should have been designed for display of the image against a uniform background of the color specified by bKGD. Viewers should probably ignore the palette if they intend to use a different background, or if the bKGD chunk is missing. Viewers can use a suggested palette for display against a different background than it was intended for, but the results may not be very good. If the viewer presents a transparent truecolor image against a background that is more complex than a single color, it is unlikely that the suggested palette will be optimal for the composite image. In this case it is best to perform a truecolor compositing step on the truecolor PNG image and background image, then color-quantize the resulting image. The histogram chunk is useful when the viewer cannot provide as many colors as are used in the image's palette. If the viewer is only short a few colors, it is usually adequate to drop the least-used colors from the palette. To reduce the number of colors substantially, it's best to choose entirely new representative colors, rather than trying to use a subset of the existing palette. This amounts to performing a new color quantization step; however, the existing palette and histogram can be used as the input data, thus avoiding a scan of the image data. If no palette or histogram chunk is provided, a decoder can develop its own, at the cost of an extra pass over the image data. Alternatively, a default palette (probably a color cube) can be used. See also Recommendations for Encoders: Suggested palettes (Section 9.5). 10.11. Text chunk processing If practical, decoders should have a way to display to the user all tEXt and zTXt chunks found in the file. Even if the decoder does not recognize a particular text keyword, the user might be able to understand it. PNG text is not supposed to contain any characters outside the ISO 8859-1 "Latin-1" character set (that is, no codes 0-31 or 127- 159), except for the newline character (decimal 10). But decoders might encounter such characters anyway. Some of these characters can be safely displayed (e.g., TAB, FF, and CR, decimal 9, 12, and 13, respectively), but others, especially the ESC character (decimal 27), could pose a security hazard because unexpected Boutell, et. al. Informational [Page 64] RFC 2083 PNG: Portable Network Graphics March 1997 actions may be taken by display hardware or software. To prevent such hazards, decoders should not attempt to directly display any non-Latin-1 characters (except for newline and perhaps TAB, FF, CR) encountered in a tEXt or zTXt chunk. Instead, ignore them or display them in a visible notation such as "\nnn". See Security considerations (Section 8.5). Even though encoders are supposed to represent newlines as LF, it is recommended that decoders not rely on this; it's best to recognize all the common newline combinations (CR, LF, and CR-LF) and display each as a single newline. TAB can be expanded to the proper number of spaces needed to arrive at a column multiple of 8. Decoders running on systems with non-Latin-1 character set encoding should provide character code remapping so that Latin-1 characters are displayed correctly. Some systems may not provide all the characters defined in Latin-1. Mapping unavailable characters to a visible notation such as "\nnn" is a good fallback. In particular, character codes 127-255 should be displayed only if they are printable characters on the decoding system. Some systems may interpret such codes as control characters; for security, decoders running on such systems should not display such characters literally. Decoders should be prepared to display text chunks that contain any number of printing characters between newline characters, even though encoders are encouraged to avoid creating lines in excess of 79 characters. 11. Glossary a^b Exponentiation; a raised to the power b. C programmers should be careful not to misread this notation as exclusive-or. Note that in gamma-related calculations, zero raised to any power is valid and must give a zero result. Alpha A value representing a pixel's degree of transparency. The more transparent a pixel, the less it hides the background against which the image is presented. In PNG, alpha is really the degree of opacity: zero alpha represents a completely transparent pixel, maximum alpha represents a completely opaque pixel. But most people refer to alpha as providing transparency information, not opacity information, and we continue that custom here. Boutell, et. al. Informational [Page 65] RFC 2083 PNG: Portable Network Graphics March 1997 Ancillary chunk A chunk that provides additional information. A decoder can still produce a meaningful image, though not necessarily the best possible image, without processing the chunk. Bit depth The number of bits per palette index (in indexed-color PNGs) or per sample (in other color types). This is the same value that appears in IHDR. Byte Eight bits; also called an octet. Channel The set of all samples of the same kind within an image; for example, all the blue samples in a truecolor image. (The term "component" is also used, but not in this specification.) A sample is the intersection of a channel and a pixel. Chromaticity A pair of values x,y that precisely specify the hue, though not the absolute brightness, of a perceived color. Chunk A section of a PNG file. Each chunk has a type indicated by its chunk type name. Most types of chunks also include some data. The format and meaning of the data within the chunk are determined by the type name. Composite As a verb, to form an image by merging a foreground image and a background image, using transparency information to determine where the background should be visible. The foreground image is said to be "composited against" the background. CRC Cyclic Redundancy Check. A CRC is a type of check value designed to catch most transmission errors. A decoder calculates the CRC for the received data and compares it to the CRC that the encoder calculated, which is appended to the data. A mismatch indicates that the data was corrupted in transit. Critical chunk A chunk that must be understood and processed by the decoder in order to produce a meaningful image from a PNG file. CRT Cathode Ray Tube: a common type of computer display hardware. Boutell, et. al. Informational [Page 66] RFC 2083 PNG: Portable Network Graphics March 1997 Datastream A sequence of bytes. This term is used rather than "file" to describe a byte sequence that is only a portion of a file. We also use it to emphasize that a PNG image might be generated and consumed "on the fly", never appearing in a stored file at all. Deflate The name of the compression algorithm used in standard PNG files, as well as in zip, gzip, pkzip, and other compression programs. Deflate is a member of the LZ77 family of compression methods. Filter A transformation applied to image data in hopes of improving its compressibility. PNG uses only lossless (reversible) filter algorithms. Frame buffer The final digital storage area for the image shown by a computer display. Software causes an image to appear onscreen by loading it into the frame buffer. Gamma The brightness of mid-level tones in an image. More precisely, a parameter that describes the shape of the transfer function for one or more stages in an imaging pipeline. The transfer function is given by the expression output = input ^ gamma where both input and output are scaled to the range 0 to 1. Grayscale An image representation in which each pixel is represented by a single sample value representing overall luminance (on a scale from black to white). PNG also permits an alpha sample to be stored for each pixel of a grayscale image. Indexed color An image representation in which each pixel is represented by a single sample that is an index into a palette or lookup table. The selected palette entry defines the actual color of the pixel. Lossless compression Any method of data compression that guarantees the original data can be reconstructed exactly, bit-for-bit. Boutell, et. al. Informational [Page 67] RFC 2083 PNG: Portable Network Graphics March 1997 Lossy compression Any method of data compression that reconstructs the original data approximately, rather than exactly. LSB Least Significant Byte of a multi-byte value. Luminance Perceived brightness, or grayscale level, of a color. Luminance and chromaticity together fully define a perceived color. LUT Look Up Table. In general, a table used to transform data. In frame buffer hardware, a LUT can be used to map indexed-color pixels into a selected set of truecolor values, or to perform gamma correction. In software, a LUT can be used as a fast way of implementing any one-variable mathematical function. MSB Most Significant Byte of a multi-byte value. Palette The set of colors available in an indexed-color image. In PNG, a palette is an array of colors defined by red, green, and blue samples. (Alpha values can also be defined for palette entries, via the tRNS chunk.) Pixel The information stored for a single grid point in the image. The complete image is a rectangular array of pixels. PNG editor A program that modifies a PNG file and preserves ancillary information, including chunks that it does not recognize. Such a program must obey the rules given in Chunk Ordering Rules (Chapter 7). Sample A single number in the image data; for example, the red value of a pixel. A pixel is composed of one or more samples. When discussing physical data layout (in particular, in Image layout, Section 2.3), we use "sample" to mean a number stored in the image array. It would be more precise but much less readable to say "sample or palette index" in that context. Elsewhere in the specification, "sample" means a color value or alpha value. In the indexed-color case, these are palette entries not palette indexes. Boutell, et. al. Informational [Page 68] RFC 2083 PNG: Portable Network Graphics March 1997 Sample depth The precision, in bits, of color values and alpha values. In indexed-color PNGs the sample depth is always 8 by definition of the PLTE chunk. In other color types it is the same as the bit depth. Scanline One horizontal row of pixels within an image. Truecolor An image representation in which pixel colors are defined by storing three samples for each pixel, representing red, green, and blue intensities respectively. PNG also permits an alpha sample to be stored for each pixel of a truecolor image. White point The chromaticity of a computer display's nominal white value. zlib A particular format for data that has been compressed using deflate-style compression. Also the name of a library implementing this method. PNG implementations need not use the zlib library, but they must conform to its format for compressed data. 12. Appendix: Rationale (This appendix is not part of the formal PNG specification.) This appendix gives the reasoning behind some of the design decisions in PNG. Many of these decisions were the subject of considerable debate. The authors freely admit that another group might have made different decisions; however, we believe that our choices are defensible and consistent. 12.1. Why a new file format? Does the world really need yet another graphics format? We believe so. GIF is no longer freely usable, but no other commonly used format can directly replace it, as is discussed in more detail below. We might have used an adaptation of an existing format, for example GIF with an unpatented compression scheme. But this would require new code anyway; it would not be all that much easier to implement than a whole new file format. (PNG is designed to be simple to implement, with the exception of the compression engine, which would be needed in any case.) We feel that this is an excellent opportunity to design a new format that fixes some of the known limitations of GIF. Boutell, et. al. Informational [Page 69] RFC 2083 PNG: Portable Network Graphics March 1997 12.2. Why these features? The features chosen for PNG are intended to address the needs of applications that previously used the special strengths of GIF. In particular, GIF is well adapted for online communications because of its streamability and progressive display capability. PNG shares those attributes. We have also addressed some of the widely known shortcomings of GIF. In particular, PNG supports truecolor images. We know of no widely used image format that losslessly compresses truecolor images as effectively as PNG does. We hope that PNG will make use of truecolor images more practical and widespread. Some form of transparency control is desirable for applications in which images are displayed against a background or together with other images. GIF provided a simple transparent-color specification for this purpose. PNG supports a full alpha channel as well as transparent-color specifications. This allows both highly flexible transparency and compression efficiency. Robustness against transmission errors has been an important consideration. For example, images transferred across Internet are often mistakenly processed as text, leading to file corruption. PNG is designed so that such errors can be detected quickly and reliably. PNG has been expressly designed not to be completely dependent on a single compression technique. Although deflate/inflate compression is mentioned in this document, PNG would still exist without it. 12.3. Why not these features? Some features have been deliberately omitted from PNG. These choices were made to simplify implementation of PNG, promote portability and interchangeability, and make the format as simple and foolproof as possible for users. In particular: Boutell, et. al. Informational [Page 70] RFC 2083 PNG: Portable Network Graphics March 1997 * There is no uncompressed variant of PNG. It is possible to store uncompressed data by using only uncompressed deflate blocks (a feature normally used to guarantee that deflate does not make incompressible data much larger). However, PNG software must support full deflate/inflate; any software that does not is not compliant with the PNG standard. The two most important features of PNG---portability and compression---are absolute requirements for online applications, and users demand them. Failure to support full deflate/inflate compromises both of these objectives. * There is no lossy compression in PNG. Existing formats such as JFIF already handle lossy compression well. Furthermore, available lossy compression methods (e.g., JPEG) are far from foolproof --- a poor choice of quality level can ruin an image. To avoid user confusion and unintentional loss of information, we feel it is best to keep lossy and lossless formats strictly separate. Also, lossy compression is complex to implement. Adding JPEG support to a PNG decoder might increase its size by an order of magnitude. This would certainly cause some decoders to omit support for the feature, which would destroy our goal of interchangeability. * There is no support for CMYK or other unusual color spaces. Again, this is in the name of promoting portability. CMYK, in particular, is far too device-dependent to be useful as a portable image representation. * There is no standard chunk for thumbnail views of images. In discussions with software vendors who use thumbnails in their products, it has become clear that most would not use a "standard" thumbnail chunk. For one thing, every vendor has a different idea of what the dimensions and characteristics of a thumbnail ought to be. Also, some vendors keep thumbnails in separate files to accommodate varied image formats; they are not going to stop doing that simply because of a thumbnail chunk in one new format. Proprietary chunks containing vendor-specific thumbnails appear to be more practical than a common thumbnail format. It is worth noting that private extensions to PNG could easily add these features. We will not, however, include them as part of the basic PNG standard. Boutell, et. al. Informational [Page 71] RFC 2083 PNG: Portable Network Graphics March 1997 PNG also does not support multiple images in one file. This restriction is a reflection of the reality that many applications do not need and will not support multiple images per file. In any case, single images are a fundamentally different sort of object from sequences of images. Rather than make false promises of interchangeability, we have drawn a clear distinction between single-image and multi-image formats. PNG is a single-image format. (But see Multiple-image extension, Section 8.4.) 12.4. Why not use format X? Numerous existing formats were considered before deciding to develop PNG. None could meet the requirements we felt were important for PNG. GIF is no longer suitable as a universal standard because of legal entanglements. Although just replacing GIF's compression method would avoid that problem, GIF does not support truecolor images, alpha channels, or gamma correction. The spec has more subtle problems too. Only a small subset of the GIF89 spec is actually portable across a variety of implementations, but there is no codification of the most portable part of the spec. TIFF is far too complex to meet our goals of simplicity and interchangeability. Defining a TIFF subset would meet that objection, but would frustrate users making the reasonable assumption that a file saved as TIFF from their existing software would load into a program supporting our flavor of TIFF. Furthermore, TIFF is not designed for stream processing, has no provision for progressive display, and does not currently provide any good, legally unencumbered, lossless compression method. IFF has also been suggested, but is not suitable in detail: available image representations are too machine-specific or not adequately compressed. The overall chunk structure of IFF is a useful concept that PNG has liberally borrowed from, but we did not attempt to be bit-for-bit compatible with IFF chunk structure. Again this is due to detailed issues, notably the fact that IFF FORMs are not designed to be serially writable. Lossless JPEG is not suitable because it does not provide for the storage of indexed-color images. Furthermore, its lossless truecolor compression is often inferior to that of PNG. Boutell, et. al. Informational [Page 72] RFC 2083 PNG: Portable Network Graphics March 1997 12.5. Byte order It has been asked why PNG uses network byte order. We have selected one byte ordering and used it consistently. Which order in particular is of little relevance, but network byte order has the advantage that routines to convert to and from it are already available on any platform that supports TCP/IP networking, including all PC platforms. The functions are trivial and will be included in the reference implementation. 12.6. Interlacing PNG's two-dimensional interlacing scheme is more complex to implement than GIF's line-wise interlacing. It also costs a little more in file size. However, it yields an initial image eight times faster than GIF (the first pass transmits only 1/64th of the pixels, compared to 1/8th for GIF). Although this initial image is coarse, it is useful in many situations. For example, if the image is a World Wide Web imagemap that the user has seen before, PNG's first pass is often enough to determine where to click. The PNG scheme also looks better than GIF's, because horizontal and vertical resolution never differ by more than a factor of two; this avoids the odd "stretched" look seen when interlaced GIFs are filled in by replicating scanlines. Preliminary results show that small text in an interlaced PNG image is typically readable about twice as fast as in an equivalent GIF, i.e., after PNG's fifth pass or 25% of the image data, instead of after GIF's third pass or 50%. This is again due to PNG's more balanced increase in resolution. 12.7. Why gamma? It might seem natural to standardize on storing sample values that are linearly proportional to light intensity (that is, have gamma of 1.0). But in fact, it is common for images to have a gamma of less than 1. There are three good reasons for this: * For reasons detailed in Gamma Tutorial (Chapter 13), all video cameras apply a "gamma correction" function to the intensity information. This causes the video signal to have a gamma of about 0.5 relative to the light intensity in the original scene. Thus, images obtained by frame-grabbing video already have a gamma of about 0.5. * The human eye has a nonlinear response to intensity, so linear encoding of samples either wastes sample codes in bright areas of the image, or provides too few sample codes to avoid banding artifacts in dark areas of the image, or both. At least 12 bits per sample are needed to avoid Boutell, et. al. Informational [Page 73] RFC 2083 PNG: Portable Network Graphics March 1997 visible artifacts in linear encoding with a 100:1 image intensity range. An image gamma in the range 0.3 to 0.5 allocates sample values in a way that roughly corresponds to the eye's response, so that 8 bits/sample are enough to avoid artifacts caused by insufficient sample precision in almost all images. This makes "gamma encoding" a much better way of storing digital images than the simpler linear encoding. * Many images are created on PCs or workstations with no gamma correction hardware and no software willing to provide gamma correction either. In these cases, the images have had their lighting and color chosen to look best on this platform --- they can be thought of as having "manual" gamma correction built in. To see what the image author intended, it is necessary to treat such images as having a file_gamma value in the range 0.4-0.6, depending on the room lighting level that the author was working in. In practice, image gamma values around 1.0 and around 0.5 are both widely found. Older image standards such as GIF often do not account for this fact. The JFIF standard specifies that images in that format should use linear samples, but many JFIF images found on the Internet actually have a gamma somewhere near 0.4 or 0.5. The variety of images found and the variety of systems that people display them on have led to widespread problems with images appearing "too dark" or "too light". PNG expects viewers to compensate for image gamma at the time that the image is displayed. Another possible approach is to expect encoders to convert all images to a uniform gamma at encoding time. While that method would speed viewers slightly, it has fundamental flaws: * Gamma correction is inherently lossy due to quantization and roundoff error. Requiring conversion at encoding time thus causes irreversible loss. Since PNG is intended to be a lossless storage format, this is undesirable; we should store unmodified source data. * The encoder might not know the source gamma value. If the decoder does gamma correction at viewing time, it can adjust the gamma (change the displayed brightness) in response to feedback from a human user. The encoder has no such recourse. * Whatever "standard" gamma we settled on would be wrong for some displays. Hence viewers would still need gamma correction capability. Boutell, et. al. Informational [Page 74] RFC 2083 PNG: Portable Network Graphics March 1997 Since there will always be images with no gamma or an incorrect recorded gamma, good viewers will need to incorporate gamma adjustment code anyway. Gamma correction at viewing time is thus the right way to go. See Gamma Tutorial (Chapter 13) for more information. 12.8. Non-premultiplied alpha PNG uses "unassociated" or "non-premultiplied" alpha so that images with separate transparency masks can be stored losslessly. Another common technique, "premultiplied alpha", stores pixel values premultiplied by the alpha fraction; in effect, the image is already composited against a black background. Any image data hidden by the transparency mask is irretrievably lost by that method, since multiplying by a zero alpha value always produces zero. Some image rendering techniques generate images with premultiplied alpha (the alpha value actually represents how much of the pixel is covered by the image). This representation can be converted to PNG by dividing the sample values by alpha, except where alpha is zero. The result will look good if displayed by a viewer that handles alpha properly, but will not look very good if the viewer ignores the alpha channel. Although each form of alpha storage has its advantages, we did not want to require all PNG viewers to handle both forms. We standardized on non-premultiplied alpha as being the lossless and more general case. 12.9. Filtering PNG includes filtering capability because filtering can significantly reduce the compressed size of truecolor and grayscale images. Filtering is also sometimes of value on indexed-color images, although this is less common. The filter algorithms are defined to operate on bytes, rather than pixels; this gains simplicity and speed with very little cost in compression performance. Tests have shown that filtering is usually ineffective for images with fewer than 8 bits per sample, so providing pixelwise filtering for such images would be pointless. For 16 bit/sample data, bytewise filtering is nearly as effective as pixelwise filtering, because MSBs are predicted from adjacent MSBs, and LSBs are predicted from adjacent LSBs. Boutell, et. al. Informational [Page 75] RFC 2083 PNG: Portable Network Graphics March 1997 The encoder is allowed to change filters for each new scanline. This creates no additional complexity for decoders, since a decoder is required to contain defiltering logic for every filter type anyway. The only cost is an extra byte per scanline in the pre-compression datastream. Our tests showed that when the same filter is selected for all scanlines, this extra byte compresses away to almost nothing, so there is little storage cost compared to a fixed filter specified for the whole image. And the potential benefits of adaptive filtering are too great to ignore. Even with the simplistic filter-choice heuristics so far discovered, adaptive filtering usually outperforms fixed filters. In particular, an adaptive filter can change behavior for successive passes of an interlaced image; a fixed filter cannot. 12.10. Text strings Most graphics file formats include the ability to store some textual information along with the image. But many applications need more than that: they want to be able to store several identifiable pieces of text. For example, a database using PNG files to store medical X-rays would likely want to include patient's name, doctor's name, etc. A simple way to do this in PNG would be to invent new private chunks holding text. The disadvantage of such an approach is that other applications would have no idea what was in those chunks, and would simply ignore them. Instead, we recommend that textual information be stored in standard tEXt chunks with suitable keywords. Use of tEXt tells any PNG viewer that the chunk contains text that might be of interest to a human user. Thus, a person looking at the file with another viewer will still be able to see the text, and even understand what it is if the keywords are reasonably self- explanatory. (To this end, we recommend spelled-out keywords, not abbreviations that will be hard for a person to understand. Saving a few bytes on a keyword is false economy.) The ISO 8859-1 (Latin-1) character set was chosen as a compromise between functionality and portability. Some platforms cannot display anything more than 7-bit ASCII characters, while others can handle characters beyond the Latin-1 set. We felt that Latin-1 represents a widely useful and reasonably portable character set. Latin-1 is a direct subset of character sets commonly used on popular platforms such as Microsoft Windows and X Windows. It can also be handled on Macintosh systems with a simple remapping of characters. There is presently no provision for text employing character sets other than Latin-1. We recognize that the need for other character sets will increase. However, PNG already requires that Boutell, et. al. Informational [Page 76] RFC 2083 PNG: Portable Network Graphics March 1997 programmers implement a number of new and unfamiliar features, and text representation is not PNG's primary purpose. Since PNG provides for the creation and public registration of new ancillary chunks of general interest, we expect that text chunks for other character sets, such as Unicode, eventually will be registered and increase gradually in popularity. 12.11. PNG file signature The first eight bytes of a PNG file always contain the following values: (decimal) 137 80 78 71 13 10 26 10 (hexadecimal) 89 50 4e 47 0d 0a 1a 0a (ASCII C notation) \211 P N G \r \n \032 \n This signature both identifies the file as a PNG file and provides for immediate detection of common file-transfer problems. The first two bytes distinguish PNG files on systems that expect the first two bytes to identify the file type uniquely. The first byte is chosen as a non-ASCII value to reduce the probability that a text file may be misrecognized as a PNG file; also, it catches bad file transfers that clear bit 7. Bytes two through four name the format. The CR-LF sequence catches bad file transfers that alter newline sequences. The control-Z character stops file display under MS-DOS. The final line feed checks for the inverse of the CR-LF translation problem. A decoder may further verify that the next eight bytes contain an IHDR chunk header with the correct chunk length; this will catch bad transfers that drop or alter null (zero) bytes. Note that there is no version number in the signature, nor indeed anywhere in the file. This is intentional: the chunk mechanism provides a better, more flexible way to handle format extensions, as explained in Chunk naming conventions (Section 12.13). 12.12. Chunk layout The chunk design allows decoders to skip unrecognized or uninteresting chunks: it is simply necessary to skip the appropriate number of bytes, as determined from the length field. Limiting chunk length to (2^31)-1 bytes avoids possible problems for implementations that cannot conveniently handle 4-byte unsigned values. In practice, chunks will usually be much shorter than that anyway. Boutell, et. al. Informational [Page 77] RFC 2083 PNG: Portable Network Graphics March 1997 A separate CRC is provided for each chunk in order to detect badly-transferred images as quickly as possible. In particular, critical data such as the image dimensions can be validated before being used. The chunk length is excluded from the CRC so that the CRC can be calculated as the data is generated; this avoids a second pass over the data in cases where the chunk length is not known in advance. Excluding the length from the CRC does not create any extra risk of failing to discover file corruption, since if the length is wrong, the CRC check will fail: the CRC will be computed on the wrong set of bytes and then be tested against the wrong value from the file. 12.13. Chunk naming conventions The chunk naming conventions allow safe, flexible extension of the PNG format. This mechanism is much better than a format version number, because it works on a feature-by-feature basis rather than being an overall indicator. Decoders can process newer files if and only if the files use no unknown critical features (as indicated by finding unknown critical chunks). Unknown ancillary chunks can be safely ignored. We decided against having an overall format version number because experience has shown that format version numbers hurt portability as much as they help. Version numbers tend to be set unnecessarily high, leading to older decoders rejecting files that they could have processed (this was a serious problem for several years after the GIF89 spec came out, for example). Furthermore, private extensions can be made either critical or ancillary, and standard decoders should react appropriately; overall version numbers are no help for private extensions. A hypothetical chunk for vector graphics would be a critical chunk, since if ignored, important parts of the intended image would be missing. A chunk carrying the Mandelbrot set coordinates for a fractal image would be ancillary, since other applications could display the image without understanding what the image represents. In general, a chunk type should be made critical only if it is impossible to display a reasonable representation of the intended image without interpreting that chunk. Boutell, et. al. Informational [Page 78] RFC 2083 PNG: Portable Network Graphics March 1997 The public/private property bit ensures that any newly defined public chunk type name cannot conflict with proprietary chunks that could be in use somewhere. However, this does not protect users of private chunk names from the possibility that someone else may use the same chunk name for a different purpose. It is a good idea to put additional identifying information at the start of the data for any private chunk type. When a PNG file is modified, certain ancillary chunks may need to be changed to reflect changes in other chunks. For example, a histogram chunk needs to be changed if the image data changes. If the file editor does not recognize histogram chunks, copying them blindly to a new output file is incorrect; such chunks should be dropped. The safe/unsafe property bit allows ancillary chunks to be marked appropriately. Not all possible modification scenarios are covered by the safe/unsafe semantics. In particular, chunks that are dependent on the total file contents are not supported. (An example of such a chunk is an index of IDAT chunk locations within the file: adding a comment chunk would inadvertently break the index.) Definition of such chunks is discouraged. If absolutely necessary for a particular application, such chunks can be made critical chunks, with consequent loss of portability to other applications. In general, ancillary chunks can depend on critical chunks but not on other ancillary chunks. It is expected that mutually dependent information should be put into a single chunk. In some situations it may be unavoidable to make one ancillary chunk dependent on another. Although the chunk property bits are insufficient to represent this case, a simple solution is available: in the dependent chunk, record the CRC of the chunk depended on. It can then be determined whether that chunk has been changed by some other program. The same technique can be useful for other purposes. For example, if a program relies on the palette being in a particular order, it can store a private chunk containing the CRC of the PLTE chunk. If this value matches when the file is again read in, then it provides high confidence that the palette has not been tampered with. Note that it is not necessary to mark the private chunk unsafe-to-copy when this technique is used; thus, such a private chunk can survive other editing of the file. Boutell, et. al. Informational [Page 79] RFC 2083 PNG: Portable Network Graphics March 1997 12.14. Palette histograms A viewer may not be able to provide as many colors as are listed in the image's palette. (For example, some colors could be reserved by a window system.) To produce the best results in this situation, it is helpful to have information about the frequency with which each palette index actually appears, in order to choose the best palette for dithering or to drop the least-used colors. Since images are often created once and viewed many times, it makes sense to calculate this information in the encoder, although it is not mandatory for the encoder to provide it. Other image formats have usually addressed this problem by specifying that the palette entries should appear in order of frequency of use. That is an inferior solution, because it doesn't give the viewer nearly as much information: the viewer can't determine how much damage will be done by dropping the last few colors. Nor does a sorted palette give enough information to choose a target palette for dithering, in the case that the viewer needs to reduce the number of colors substantially. A palette histogram provides the information needed to choose such a target palette without making a pass over the image data. Boutell, et. al. Informational [Page 80] RFC 2083 PNG: Portable Network Graphics March 1997 13. Appendix: Gamma Tutorial (This appendix is not part of the formal PNG specification.) It would be convenient for graphics programmers if all of the components of an imaging system were linear. The voltage coming from an electronic camera would be directly proportional to the intensity (power) of light in the scene, the light emitted by a CRT would be directly proportional to its input voltage, and so on. However, real-world devices do not behave in this way. All CRT displays, almost all photographic film, and many electronic cameras have nonlinear signal-to-light-intensity or intensity-to-signal characteristics. Fortunately, all of these nonlinear devices have a transfer function that is approximated fairly well by a single type of mathematical function: a power function. This power function has the general equation output = input ^ gamma where ^ denotes exponentiation, and "gamma" (often printed using the Greek letter gamma, thus the name) is simply the exponent of the power function. By convention, "input" and "output" are both scaled to the range 0..1, with 0 representing black and 1 representing maximum white (or red, etc). Normalized in this way, the power function is completely described by a single number, the exponent "gamma". So, given a particular device, we can measure its output as a function of its input, fit a power function to this measured transfer function, extract the exponent, and call it gamma. We often say "this device has a gamma of 2.5" as a shorthand for "this device has a power-law response with an exponent of 2.5". We can also talk about the gamma of a mathematical transform, or of a lookup table in a frame buffer, so long as the input and output of the thing are related by the power-law expression above. How do gammas combine? Real imaging systems will have several components, and more than one of these can be nonlinear. If all of the components have transfer characteristics that are power functions, then the transfer function of the entire system is also a power function. The exponent (gamma) of the whole system's transfer function is just the product of all of the individual exponents (gammas) of the separate stages in the system. Boutell, et. al. Informational [Page 81] RFC 2083 PNG: Portable Network Graphics March 1997 Also, stages that are linear pose no problem, since a power function with an exponent of 1.0 is really a linear function. So a linear transfer function is just a special case of a power function, with a gamma of 1.0. Thus, as long as our imaging system contains only stages with linear and power-law transfer functions, we can meaningfully talk about the gamma of the entire system. This is indeed the case with most real imaging systems. What should overall gamma be? If the overall gamma of an imaging system is 1.0, its output is linearly proportional to its input. This means that the ratio between the intensities of any two areas in the reproduced image will be the same as it was in the original scene. It might seem that this should always be the goal of an imaging system: to accurately reproduce the tones of the original scene. Alas, that is not the case. When the reproduced image is to be viewed in "bright surround" conditions, where other white objects nearby in the room have about the same brightness as white in the image, then an overall gamma of 1.0 does indeed give real-looking reproduction of a natural scene. Photographic prints viewed under room light and computer displays in bright room light are typical "bright surround" viewing conditions. However, sometimes images are intended to be viewed in "dark surround" conditions, where the room is substantially black except for the image. This is typical of the way movies and slides (transparencies) are viewed by projection. Under these circumstances, an accurate reproduction of the original scene results in an image that human viewers judge as "flat" and lacking in contrast. It turns out that the projected image needs to have a gamma of about 1.5 relative to the original scene for viewers to judge it "natural". Thus, slide film is designed to have a gamma of about 1.5, not 1.0. There is also an intermediate condition called "dim surround", where the rest of the room is still visible to the viewer, but is noticeably darker than the reproduced image itself. This is typical of television viewing, at least in the evening, as well as subdued-light computer work areas. In dim surround conditions, the reproduced image needs to have a gamma of about 1.25 relative to the original scene in order to look natural. Boutell, et. al. Informational [Page 82] RFC 2083 PNG: Portable Network Graphics March 1997 The requirement for boosted contrast (gamma) in dark surround conditions is due to the way the human visual system works, and applies equally well to computer monitors. Thus, a PNG viewer trying to achieve the maximum realism for the images it displays really needs to know what the room lighting conditions are, and adjust the gamma of the displayed image accordingly. If asking the user about room lighting conditions is inappropriate or too difficult, just assume that the overall gamma (viewing_gamma as defined below) should be 1.0 or 1.25. That's all that most systems that implement gamma correction do. What is a CRT's gamma? All CRT displays have a power-law transfer characteristic with a gamma of about 2.5. This is due to the physical processes involved in controlling the electron beam in the electron gun, and has nothing to do with the phosphor. An exception to this rule is fancy "calibrated" CRTs that have internal electronics to alter their transfer function. If you have one of these, you probably should believe what the manufacturer tells you its gamma is. But in all other cases, assuming 2.5 is likely to be pretty accurate. There are various images around that purport to measure gamma, usually by comparing the intensity of an area containing alternating white and black with a series of areas of continuous gray of different intensity. These are usually not reliable. Test images that use a "checkerboard" pattern of black and white are the worst, because a single white pixel will be reproduced considerably darker than a large area of white. An image that uses alternating black and white horizontal lines (such as the "gamma.png" test image at ftp://ftp.uu.net/graphics/png/images/suite/gamma.png) is much better, but even it may be inaccurate at high "picture" settings on some CRTs. If you have a good photometer, you can measure the actual light output of a CRT as a function of input voltage and fit a power function to the measurements. However, note that this procedure is very sensitive to the CRT's black level adjustment, somewhat sensitive to its picture adjustment, and also affected by ambient light. Furthermore, CRTs spread some light from bright areas of an image into nearby darker areas; a single bright spot against a black background may be seen to have a "halo". Your measuring technique will need to minimize the effects of this. Boutell, et. al. Informational [Page 83] RFC 2083 PNG: Portable Network Graphics March 1997 Because of the difficulty of measuring gamma, using either test images or measuring equipment, you're usually better off just assuming gamma is 2.5 rather than trying to measure it. What is gamma correction? A CRT has a gamma of 2.5, and we can't change that. To get an overall gamma of 1.0 (or somewhere near that) for an imaging system, we need to have at least one other component of the "image pipeline" that is nonlinear. If, in fact, there is only one nonlinear stage in addition to the CRT, then it's traditional to say that the CRT has a certain gamma, and that the other nonlinear stage provides "gamma correction" to compensate for the CRT. However, exactly where the "correction" is done depends on circumstance. In all broadcast video systems, gamma correction is done in the camera. This choice was made in the days when television electronics were all analog, and a good gamma-correction circuit was expensive to build. The original NTSC video standard required cameras to have a transfer function with a gamma of 1/2.2, or about 0.45. Recently, a more complex two-part transfer function has been adopted [SMPTE-170M], but its behavior can be well approximated by a power function with a gamma of 0.5. When the resulting image is displayed on a CRT with a gamma of 2.5, the image on screen ends up with a gamma of about 1.25 relative to the original scene, which is appropriate for "dim surround" viewing. These days, video signals are often digitized and stored in computer frame buffers. This works fine, but remember that gamma correction is "built into" the video signal, and so the digitized video has a gamma of about 0.5 relative to the original scene. Computer rendering programs often produce linear samples. To display these correctly, intensity on the CRT needs to be directly proportional to the sample values in the frame buffer. This can be done with a special hardware lookup table between the frame buffer and the CRT hardware. The lookup table (often called LUT) is loaded with a mapping that implements a power function with a gamma of 0.4, thus providing "gamma correction" for the CRT gamma. Thus, gamma correction sometimes happens before the frame buffer, sometimes after. As long as images created in a particular environment are always displayed in that environment, everything is fine. But when people try to exchange images, differences in gamma correction conventions often result in images that seem far too bright and washed out, or far too dark and contrasty. Boutell, et. al. Informational [Page 84] RFC 2083 PNG: Portable Network Graphics March 1997 Gamma-encoded samples are good So, is it better to do gamma correction before or after the frame buffer? In an ideal world, sample values would be stored in floating point, there would be lots of precision, and it wouldn't really matter much. But in reality, we're always trying to store images in as few bits as we can. If we decide to use samples that are linearly proportional to intensity, and do the gamma correction in the frame buffer LUT, it turns out that we need to use at least 12 bits for each of red, green, and blue to have enough precision in intensity. With any less than that, we will sometimes see "contour bands" or "Mach bands" in the darker areas of the image, where two adjacent sample values are still far enough apart in intensity for the difference to be visible. However, through an interesting coincidence, the human eye's subjective perception of brightness is related to the physical stimulation of light intensity in a manner that is very much like the power function used for gamma correction. If we apply gamma correction to measured (or calculated) light intensity before quantizing to an integer for storage in a frame buffer, we can get away with using many fewer bits to store the image. In fact, 8 bits per color is almost always sufficient to avoid contouring artifacts. This is because, since gamma correction is so closely related to human perception, we are assigning our 256 available sample codes to intensity values in a manner that approximates how visible those intensity changes are to the eye. Compared to a linear-sample image, we allocate fewer sample values to brighter parts of the tonal range and more sample values to the darker portions of the tonal range. Thus, for the same apparent image quality, images using gamma- encoded sample values need only about two-thirds as many bits of storage as images using linear samples. Boutell, et. al. Informational [Page 85] RFC 2083 PNG: Portable Network Graphics March 1997 General gamma handling When more than two nonlinear transfer functions are involved in the image pipeline, the term "gamma correction" becomes too vague. If we consider a pipeline that involves capturing (or calculating) an image, storing it in an image file, reading the file, and displaying the image on some sort of display screen, there are at least 5 places in the pipeline that could have nonlinear transfer functions. Let's give each a specific name for their characteristic gamma: camera_gamma the characteristic of the image sensor encoding_gamma the gamma of any transformation performed by the software writing the image file decoding_gamma the gamma of any transformation performed by the software reading the image file LUT_gamma the gamma of the frame buffer LUT, if present CRT_gamma the gamma of the CRT, generally 2.5 In addition, let's add a few other names: file_gamma the gamma of the image in the file, relative to the original scene. This is file_gamma = camera_gamma * encoding_gamma display_gamma the gamma of the "display system" downstream of the frame buffer. This is display_gamma = LUT_gamma * CRT_gamma viewing_gamma the overall gamma that we want to obtain to produce pleasing images --- generally 1.0 to 1.5. Boutell, et. al. Informational [Page 86] RFC 2083 PNG: Portable Network Graphics March 1997 The file_gamma value, as defined above, is what goes in the gAMA chunk in a PNG file. If file_gamma is not 1.0, we know that gamma correction has been done on the sample values in the file, and we could call them "gamma corrected" samples. However, since there can be so many different values of gamma in the image display chain, and some of them are not known at the time the image is written, the samples are not really being "corrected" for a specific display condition. We are really using a power function in the process of encoding an intensity range into a small integer field, and so it is more correct to say "gamma encoded" samples instead of "gamma corrected" samples. When displaying an image file, the image decoding program is responsible for making the overall gamma of the system equal to the desired viewing_gamma, by selecting the decoding_gamma appropriately. When displaying a PNG file, the gAMA chunk provides the file_gamma value. The display_gamma may be known for this machine, or it might be obtained from the system software, or the user might have to be asked what it is. The correct viewing_gamma depends on lighting conditions, and that will generally have to come from the user. Ultimately, you should have file_gamma * decoding_gamma * display_gamma = viewing_gamma Some specific examples In digital video systems, camera_gamma is about 0.5 by declaration of the various video standards documents. CRT_gamma is 2.5 as usual, while encoding_gamma, decoding_gamma, and LUT_gamma are all 1.0. As a result, viewing_gamma ends up being about 1.25. On frame buffers that have hardware gamma correction tables, and that are calibrated to display linear samples correctly, display_gamma is 1.0. Many workstations and X terminals and PC displays lack gamma correction lookup tables. Here, LUT_gamma is always 1.0, so display_gamma is 2.5. Boutell, et. al. Informational [Page 87] RFC 2083 PNG: Portable Network Graphics March 1997 On the Macintosh, there is a LUT. By default, it is loaded with a table whose gamma is about 0.72, giving a display_gamma (LUT and CRT combined) of about 1.8. Some Macs have a "Gamma" control panel that allows gamma to be changed to 1.0, 1.2, 1.4, 1.8, or 2.2. These settings load alternate LUTs that are designed to give a display_gamma that is equal to the label on the selected button. Thus, the "Gamma" control panel setting can be used directly as display_gamma in decoder calculations. On recent SGI systems, there is a hardware gamma-correction table whose contents are controlled by the (privileged) "gamma" program. The gamma of the table is actually the reciprocal of the number that "gamma" prints, and it does not include the CRT gamma. To obtain the display_gamma, you need to find the SGI system gamma (either by looking in a file, or asking the user) and then calculating display_gamma = 2.5 / SGI_system_gamma You will find SGI systems with the system gamma set to 1.0 and 2.2 (or higher), but the default when machines are shipped is 1.7. A note about video gamma The original NTSC video standards specified a simple power-law camera transfer function with a gamma of 1/2.2 or 0.45. This is not possible to implement exactly in analog hardware because the function has infinite slope at x=0, so all cameras deviated to some degree from this ideal. More recently, a new camera transfer function that is physically realizable has been accepted as a standard [SMPTE-170M]. It is Vout = 4.5 * Vin if Vin < 0.018 Vout = 1.099 * (Vin^0.45) - 0.099 if Vin >= 0.018 where Vin and Vout are measured on a scale of 0 to 1. Although the exponent remains 0.45, the multiplication and subtraction change the shape of the transfer function, so it is no longer a pure power function. If you want to perform extremely precise calculations on video signals, you should use the expression above (or its inverse, as required). However, PNG does not provide a way to specify that an image uses this exact transfer function; the gAMA chunk always assumes a pure power-law function. If we plot the two-part transfer function above along with the family of pure power functions, we find that a power function with a gamma of about 0.5 to 0.52 (not 0.45) most closely approximates the transfer function. Thus, when writing a Boutell, et. al. Informational [Page 88] RFC 2083 PNG: Portable Network Graphics March 1997 PNG file with data obtained from digitizing the output of a modern video camera, the gAMA chunk should contain 0.5 or 0.52, not 0.45. The remaining difference between the true transfer function and the power function is insignificant for almost all purposes. (In fact, the alignment errors in most cameras are likely to be larger than the difference between these functions.) The designers of PNG deemed the simplicity and flexibility of a power-law definition of gAMA to be more important than being able to describe the SMPTE-170M transfer curve exactly. The PAL and SECAM video standards specify a power-law camera transfer function with a gamma of 1/2.8 or 0.36 --- not the 1/2.2 of NTSC. However, this is too low in practice, so real cameras are likely to have their gamma set close to NTSC practice. Just guessing 0.45 or 0.5 is likely to give you viewable results, but if you want precise values you'll probably have to measure the particular camera. Further reading If you have access to the World Wide Web, read Charles Poynton's excellent "Gamma FAQ" [GAMMA-FAQ] for more information about gamma. 14. Appendix: Color Tutorial (This appendix is not part of the formal PNG specification.) About chromaticity The cHRM chunk is used, together with the gAMA chunk, to convey precise color information so that a PNG image can be displayed or printed with better color fidelity than is possible without this information. The preceding chapters state how this information is encoded in a PNG image. This tutorial briefly outlines the underlying color theory for those who might not be familiar with it. Note that displaying an image with incorrect gamma will produce much larger color errors than failing to use the chromaticity data. First be sure the monitor set-up and gamma correction are right, then worry about chromaticity. The problem The color of an object depends not only on the precise spectrum of light emitted or reflected from it, but also on the observer --- their species, what else they can see at the same time, even what Boutell, et. al. Informational [Page 89] RFC 2083 PNG: Portable Network Graphics March 1997 they have recently looked at! Furthermore, two very different spectra can produce exactly the same color sensation. Color is not an objective property of real-world objects; it is a subjective, biological sensation. However, by making some simplifying assumptions (such as: we are talking about human vision) it is possible to produce a mathematical model of color and thereby obtain good color accuracy. Device-dependent color Display the same RGB data on three different monitors, side by side, and you will get a noticeably different color balance on each display. This is because each monitor emits a slightly different shade and intensity of red, green, and blue light. RGB is an example of a device-dependent color model --- the color you get depends on the device. This also means that a particular color --- represented as say RGB 87, 146, 116 on one monitor --- might have to be specified as RGB 98, 123, 104 on another to produce the same color. Device-independent color A full physical description of a color would require specifying the exact spectral power distribution of the light source. Fortunately, the human eye and brain are not so sensitive as to require exact reproduction of a spectrum. Mathematical, device- independent color models exist that describe fairly well how a particular color will be seen by humans. The most important device-independent color model, to which all others can be related, was developed by the International Lighting Committee (CIE, in French) and is called XYZ. In XYZ, X is the sum of a weighted power distribution over the whole visible spectrum. So are Y and Z, each with different weights. Thus any arbitrary spectral power distribution is condensed down to just three floating point numbers. The weights were derived from color matching experiments done on human subjects in the 1920s. CIE XYZ has been an International Standard since 1931, and it has a number of useful properties: * two colors with the same XYZ values will look the same to humans * two colors with different XYZ values will not look the same * the Y value represents all the brightness information (luminance) * the XYZ color of any object can be objectively measured Boutell, et. al. Informational [Page 90] RFC 2083 PNG: Portable Network Graphics March 1997 Color models based on XYZ have been used for many years by people who need accurate control of color --- lighting engineers for film and TV, paint and dyestuffs manufacturers, and so on. They are thus proven in industrial use. Accurate, device-independent color started to spread from high-end, specialized areas into the mainstream during the late 1980s and early 1990s, and PNG takes notice of that trend. Calibrated, device-dependent color Traditionally, image file formats have used uncalibrated, device- dependent color. If the precise details of the original display device are known, it becomes possible to convert the device- dependent colors of a particular image to device-independent ones. Making simplifying assumptions, such as working with CRTs (which are much easier than printers), all we need to know are the XYZ values of each primary color and the CRT_gamma. So why does PNG not store images in XYZ instead of RGB? Well, two reasons. First, storing images in XYZ would require more bits of precision, which would make the files bigger. Second, all programs would have to convert the image data before viewing it. Whether calibrated or not, all variants of RGB are close enough that undemanding viewers can get by with simply displaying the data without color correction. By storing calibrated RGB, PNG retains compatibility with existing programs that expect RGB data, yet provides enough information for conversion to XYZ in applications that need precise colors. Thus, we get the best of both worlds. What are chromaticity and luminance? Chromaticity is an objective measurement of the color of an object, leaving aside the brightness information. Chromaticity uses two parameters x and y, which are readily calculated from XYZ: x = X / (X + Y + Z) y = Y / (X + Y + Z) XYZ colors having the same chromaticity values will appear to have the same hue but can vary in absolute brightness. Notice that x,y are dimensionless ratios, so they have the same values no matter what units we've used for X,Y,Z. Boutell, et. al. Informational [Page 91] RFC 2083 PNG: Portable Network Graphics March 1997 The Y value of an XYZ color is directly proportional to its absolute brightness and is called the luminance of the color. We can describe a color either by XYZ coordinates or by chromaticity x,y plus luminance Y. The XYZ form has the advantage that it is linearly related to (linear, gamma=1.0) RGB color spaces. How are computer monitor colors described? The "white point" of a monitor is the chromaticity x,y of the monitor's nominal white, that is, the color produced when R=G=B=maximum. It's customary to specify monitor colors by giving the chromaticities of the individual phosphors R, G, and B, plus the white point. The white point allows one to infer the relative brightnesses of the three phosphors, which isn't determined by their chromaticities alone. Note that the absolute brightness of the monitor is not specified. For computer graphics work, we generally don't care very much about absolute brightness levels. Instead of dealing with absolute XYZ values (in which X,Y,Z are expressed in physical units of radiated power, such as candelas per square meter), it is convenient to work in "relative XYZ" units, where the monitor's nominal white is taken to have a luminance (Y) of 1.0. Given this assumption, it's simple to compute XYZ coordinates for the monitor's white, red, green, and blue from their chromaticity values. Why does cHRM use x,y rather than XYZ? Simply because that is how manufacturers print the information in their spec sheets! Usually, the first thing a program will do is convert the cHRM chromaticities into relative XYZ space. What can I do with it? If a PNG file has the gAMA and cHRM chunks, the source_RGB values can be converted to XYZ. This lets you: * do accurate grayscale conversion (just use the Y component) * convert to RGB for your own monitor (to see the original colors) * print the image in Level 2 PostScript with better color fidelity than a simple RGB to CMYK conversion could provide * calculate an optimal color palette * pass the image data to a color management system * etc. Boutell, et. al. Informational [Page 92] RFC 2083 PNG: Portable Network Graphics March 1997 How do I convert from source_RGB to XYZ? Make a few simplifying assumptions first, like the monitor really is jet black with no input and the guns don't interfere with one another. Then, given that you know the CIE XYZ values for each of red, green, and blue for a particular monitor, you put them into a matrix m: Xr Xg Xb m = Yr Yg Yb Zr Zg Zb Here we assume we are working with linear RGB floating point data in the range 0..1. If the gamma is not 1.0, make it so on the floating point data. Then convert source_RGB to XYZ by matrix multiplication: X R Y = m G Z B In other words, X = Xr*R + Xg*G + Xb*B, and similarly for Y and Z. You can go the other way too: R X G = im Y B Z where im is the inverse of the matrix m. What is a gamut? The gamut of a device is the subset of visible colors which that device can display. (It has nothing to do with gamma.) The gamut of an RGB device can be visualized as a polyhedron in XYZ space; the vertices correspond to the device's black, blue, red, green, magenta, cyan, yellow and white. Different devices have different gamuts, in other words one device will be able to display certain colors (usually highly saturated ones) that another device cannot. The gamut of a particular RGB device can be determined from its R, G, and B chromaticities and white point (the same values given in the cHRM chunk). The gamut of a color printer is more complex and can only be determined by measurement. However, printer gamuts are typically smaller than monitor gamuts, meaning that there can be many colors in a displayable image that cannot physically be printed. Boutell, et. al. Informational [Page 93] RFC 2083 PNG: Portable Network Graphics March 1997 Converting image data from one device to another generally results in gamut mismatches --- colors that cannot be represented exactly on the destination device. The process of making the colors fit, which can range from a simple clip to elaborate nonlinear scaling transformations, is termed gamut mapping. The aim is to produce a reasonable visual representation of the original image. Further reading References [COLOR-1] through [COLOR-5] provide more detail about color theory. 15. Appendix: Sample CRC Code The following sample code represents a practical implementation of the CRC (Cyclic Redundancy Check) employed in PNG chunks. (See also ISO 3309 [ISO-3309] or ITU-T V.42 [ITU-V42] for a formal specification.) The sample code is in the ANSI C programming language. Non C users may find it easier to read with these hints: & Bitwise AND operator. ^ Bitwise exclusive-OR operator. (Caution: elsewhere in this document, ^ represents exponentiation.) >> Bitwise right shift operator. When applied to an unsigned quantity, as here, right shift inserts zeroes at the left. ! Logical NOT operator. ++ "n++" increments the variable n. 0xNNN 0x introduces a hexadecimal (base 16) constant. Suffix L indicates a long value (at least 32 bits). /* Table of CRCs of all 8-bit messages. */ unsigned long crc_table[256]; /* Flag: has the table been computed? Initially false. */ int crc_table_computed = 0; Boutell, et. al. Informational [Page 94] RFC 2083 PNG: Portable Network Graphics March 1997 /* Make the table for a fast CRC. */ void make_crc_table(void) { unsigned long c; int n, k; for (n = 0; n < 256; n++) { c = (unsigned long) n; for (k = 0; k < 8; k++) { if (c & 1) c = 0xedb88320L ^ (c >> 1); else c = c >> 1; } crc_table[n] = c; } crc_table_computed = 1; } /* Update a running CRC with the bytes buf[0..len-1]--the CRC should be initialized to all 1's, and the transmitted value is the 1's complement of the final running CRC (see the crc() routine below)). */ unsigned long update_crc(unsigned long crc, unsigned char *buf, int len) { unsigned long c = crc; int n; if (!crc_table_computed) make_crc_table(); for (n = 0; n < len; n++) { c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); } return c; } /* Return the CRC of the bytes buf[0..len-1]. */ unsigned long crc(unsigned char *buf, int len) { return update_crc(0xffffffffL, buf, len) ^ 0xffffffffL; } Boutell, et. al. Informational [Page 95] RFC 2083 PNG: Portable Network Graphics March 1997 16. Appendix: Online Resources (This appendix is not part of the formal PNG specification.) This appendix gives the locations of some Internet resources for PNG software developers. By the nature of the Internet, the list is incomplete and subject to change. Archive sites The latest released versions of this document and related information can always be found at the PNG FTP archive site, ftp://ftp.uu.net/graphics/png/. The PNG specification is available in several formats, including HTML, plain text, and PostScript. Reference implementation and test images A reference implementation in portable C is available from the PNG FTP archive site, ftp://ftp.uu.net/graphics/png/src/. The reference implementation is freely usable in all applications, including commercial applications. Test images are available from ftp://ftp.uu.net/graphics/png/images/. Electronic mail The maintainers of the PNG specification can be contacted by e- mail at png-info@uunet.uu.net or at png-group@w3.org. PNG home page There is a World Wide Web home page for PNG at http://quest.jpl.nasa.gov/PNG/. This page is a central location for current information about PNG and PNG-related tools. 17. Appendix: Revision History (This appendix is not part of the formal PNG specification.) The PNG format has been frozen since the Ninth Draft of March 7, 1995, and all future changes are intended to be backwards compatible. The revisions since the Ninth Draft are simply clarifications, improvements in presentation, and additions of supporting material. On 1 October 1996, the PNG specification was approved as a W3C (World Wide Web Consortium) Recommendation. Boutell, et. al. Informational [Page 96] RFC 2083 PNG: Portable Network Graphics March 1997 Changes since the Tenth Draft of 5 May, 1995 * Clarified meaning of a suggested-palette PLTE chunk in a truecolor image that uses transparency * Clarified exact semantics of sBIT and allowed sample depth scaling procedures * Clarified status of spaces in tEXt chunk keywords * Distinguished private and public extension values in type and method fields * Added a "Creation Time" tEXt keyword * Macintosh representation of PNG specified * Added discussion of security issues * Added more extensive discussion of gamma and chromaticity handling, including tutorial appendixes * Clarified terminology, notably sample depth vs. bit depth * Added a glossary * Editing and reformatting 18. References [COLOR-1] Hall, Roy, Illumination and Color in Computer Generated Imagery. Springer-Verlag, New York, 1989. ISBN 0-387-96774-5. [COLOR-2] Kasson, J., and W. Plouffe, "An Analysis of Selected Computer Interchange Color Spaces", ACM Transactions on Graphics, vol 11 no 4 (1992), pp 373-405. [COLOR-3] Lilley, C., F. Lin, W.T. Hewitt, and T.L.J. Howard, Colour in Computer Graphics. CVCP, Sheffield, 1993. ISBN 1-85889-022-5. Also available from <URL:http://info.mcc.ac.uk/CGU/ITTI/Col/colour_announce.html> [COLOR-4] Stone, M.C., W.B. Cowan, and J.C. Beatty, "Color gamut mapping and the printing of digital images", ACM Transactions on Graphics, vol 7 no 3 (1988), pp 249-292. [COLOR-5] Travis, David, Effective Color Displays --- Theory and Practice. Academic Press, London, 1991. ISBN 0-12-697690-2. [GAMMA-FAQ] Poynton, C., "Gamma FAQ". <URL:http://www.inforamp.net/%7Epoynton/Poynton-colour.html> Boutell, et. al. Informational [Page 97] RFC 2083 PNG: Portable Network Graphics March 1997 [ISO-3309] International Organization for Standardization, "Information Processing Systems --- Data Communication High-Level Data Link Control Procedure --- Frame Structure", IS 3309, October 1984, 3rd Edition. [ISO-8859] International Organization for Standardization, "Information Processing --- 8-bit Single-Byte Coded Graphic Character Sets --- Part 1: Latin Alphabet No. 1", IS 8859-1, 1987. Also see sample files at ftp://ftp.uu.net/graphics/png/documents/iso_8859-1.* [ITU-BT709] International Telecommunications Union, "Basic Parameter Values for the HDTV Standard for the Studio and for International Programme Exchange", ITU-R Recommendation BT.709 (formerly CCIR Rec. 709), 1990. [ITU-V42] International Telecommunications Union, "Error-correcting Procedures for DCEs Using Asynchronous-to-Synchronous Conversion", ITU-T Recommendation V.42, 1994, Rev. 1. [PAETH] Paeth, A.W., "Image File Compression Made Easy", in Graphics Gems II, James Arvo, editor. Academic Press, San Diego, 1991. ISBN 0-12-064480-0. [POSTSCRIPT] Adobe Systems Incorporated, PostScript Language Reference Manual, 2nd edition. Addison-Wesley, Reading, 1990. ISBN 0-201-18127-4. [PNG-EXTENSIONS] PNG Group, "PNG Special-Purpose Public Chunks". Available in several formats from ftp://ftp.uu.net/graphics/png/documents/pngextensions.* [RFC-1123] Braden, R., Editor, "Requirements for Internet Hosts --- Application and Support", STD 3, RFC 1123, USC/Information Sciences Institute, October 1989. <URL:ftp://ds.internic.net/rfc/rfc1123.txt> Boutell, et. al. Informational [Page 98] RFC 2083 PNG: Portable Network Graphics March 1997 [RFC-2045] Freed, N., and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, Innosoft, First Virtual, November 1996. <URL:ftp://ds.internic.net/rfc/rfc2045.txt> [RFC-2048] Freed, N., Klensin, J., and J. Postel, "Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures", RFC 2048, Innosoft, MCI, USC/Information Sciences Institute, November 1996. <URL:ftp://ds.internic.net/rfc/rfc2048.txt> [RFC-1950] Deutsch, P. and J-L. Gailly, "ZLIB Compressed Data Format Specification version 3.3", RFC 1950, Aladdin Enterprises, May 1996. <URL:ftp://ds.internic.net/rfc/rfc1950.txt> [RFC-1951] Deutsch, P., "DEFLATE Compressed Data Format Specification version 1.3", RFC 1951, Aladdin Enterprises, May 1996. <URL:ftp://ds.internic.net/rfc/rfc1951.txt> [SMPTE-170M] Society of Motion Picture and Television Engineers, "Television --- Composite Analog Video Signal --- NTSC for Studio Applications", SMPTE-170M, 1994. Boutell, et. al. Informational [Page 99] RFC 2083 PNG: Portable Network Graphics March 1997 19. Credits Editor Thomas Boutell, boutell@boutell.com Contributing Editor Tom Lane, tgl@sss.pgh.pa.us Authors Authors' names are presented in alphabetical order. * Mark Adler, madler@alumni.caltech.edu * Thomas Boutell, boutell@boutell.com * Christian Brunschen, cb@df.lth.se * Adam M. Costello, amc@cs.berkeley.edu * Lee Daniel Crocker, lee@piclab.com * Andreas Dilger, adilger@enel.ucalgary.ca * Oliver Fromme, fromme@rz.tu-clausthal.de * Jean-loup Gailly, gzip@prep.ai.mit.edu * Chris Herborth, chrish@qnx.com * Alex Jakulin, Aleks.Jakulin@snet.fri.uni-lj.si * Neal Kettler, kettler@cs.colostate.edu * Tom Lane, tgl@sss.pgh.pa.us * Alexander Lehmann, alex@hal.rhein-main.de * Chris Lilley, chris@w3.org * Dave Martindale, davem@cs.ubc.ca * Owen Mortensen, 104707.650@compuserve.com * Keith S. Pickens, ksp@swri.edu * Robert P. Poole, lionboy@primenet.com * Glenn Randers-Pehrson, glennrp@arl.mil or randeg@alumni.rpi.edu * Greg Roelofs, newt@pobox.com * Willem van Schaik, willem@gintic.gov.sg * Guy Schalnat * Paul Schmidt, pschmidt@photodex.com * Tim Wegner, 71320.675@compuserve.com * Jeremy Wohl, jeremyw@anders.com The authors wish to acknowledge the contributions of the Portable Network Graphics mailing list, the readers of comp.graphics, and the members of the World Wide Web Consortium (W3C). Boutell, et. al. Informational [Page 100] RFC 2083 PNG: Portable Network Graphics March 1997 The Adam7 interlacing scheme is not patented and it is not the intention of the originator of that scheme to patent it. The scheme may be freely used by all PNG implementations. The name "Adam7" may be freely used to describe interlace method 1 of the PNG specification. Trademarks GIF is a service mark of CompuServe Incorporated. IBM PC is a trademark of International Business Machines Corporation. Macintosh is a trademark of Apple Computer, Inc. Microsoft and MS-DOS are trademarks of Microsoft Corporation. PhotoCD is a trademark of Eastman Kodak Company. PostScript and TIFF are trademarks of Adobe Systems Incorporated. SGI is a trademark of Silicon Graphics, Inc. X Window System is a trademark of the Massachusetts Institute of Technology. COPYRIGHT NOTICE Copyright (c) 1996 by: Massachusetts Institute of Technology (MIT) This W3C specification is being provided by the copyright holders under the following license. By obtaining, using and/or copying this specification, you agree that you have read, understood, and will comply with the following terms and conditions: Permission to use, copy, and distribute this specification for any purpose and without fee or royalty is hereby granted, provided that the full text of this NOTICE appears on ALL copies of the specification or portions thereof, including modifications, that you make. THIS SPECIFICATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SPECIFICATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY USE OF THIS SPECIFICATION. Boutell, et. al. Informational [Page 101] RFC 2083 PNG: Portable Network Graphics March 1997 The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the specification without specific, written prior permission. Title to copyright in this specification and any associated documentation will at all times remain with copyright holders. Security Considerations Security issues are discussed in Security considerations (Section 8.5). Author's Address Thomas Boutell PO Box 20837 Seattle, WA 98102 Phone: (206) 329-4969 EMail: boutell@boutell.com Boutell, et. al. Informational [Page 102] |
Added freshlib/_doc/RectanglesListProcessing.ods.
cannot compute difference between binary files
Added freshlib/_doc/compiler.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <nowiki> <a name="data"><h1>FreshLib directory: compiler</h1></a> <p>This directory contains only one macro library: "executable.inc"</p> <p>This library defines the macros that are going to be used for creating the main structure of the program. These macros are OS dependent as long as the type of the executable file is OS dependent: PE for Win32 and ELF for Linux.</p> <p>Every one of the macros from this library should be used only once in the program.</p> <h3>FreshLib Executable macros</h3> <p>This macro library contains:</p> <a name="_BinaryType"><h4>_BinaryType</h4></a> <pre class="fasm-code">macro _BinaryType type</pre> <p>This macro sets the type of the executable. The argument <span class="variable">type</span> can accept one of the following values: <span class="constant">GUI</span>, <span class="constant">console</span> or <span class="constant">DLL</span>.</p> <p>This macro defines also the entry label of the program. This label is fixed to <span class="constant">start:</span></p> <p>For example, following code will tell the compiler to compile the program as a GUI application:</p> <pre class="fasm-code"> include 'compiler/executable.inc' _BinaryType GUI </pre> <a name="_CodeSection"><h4>_CodeSection</h4></a> <pre class="fasm-code">macro _CodeSection</pre> <p>This macro defines the section where the code of the program to be placed.</p> <p>Actually this section is the main section of the project. Here should be included all used libraries and other project files.</p> <a name="_DataSection"><h4>_DataSection</h4></a> <pre class="fasm-code">macro _DataSection</pre> <p>This macro defines the section where the data of the program to be placed. The common way to use this section is to use inside the macro <span class="procedure">IncludeAllGlobals</span> that will allow you to use data defining macros from every place inside the source and leave the compiler to order this data properly for you.</p> <p>For details on using global data definition macros see: <a href="macros.html#_globals">_globals.inc</a></p> <a name="_ImportSection"><h4>_ImportSection</h4></a> <pre class="fasm-code">macro _ImportSection</pre> <p>This macro defines the section where to be inserted the list with functions dynamically imported from external libraries.</p> <p>Usually you only have to include here the library "allimports.asm" and the compiler will import for you only those functions that are used in the project.</p> </nowiki> |
Added freshlib/_doc/data.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | <nowiki> <table class="index" align="right"> <tr><td class="index"><p></p> <b><a href="freshlib_reference.wiki">FreshLib</a>:Data:</b><br /> <a href="#Arrays">Arrays</a><br /> <a href="#Strings">Strings</a><br /> </p></td></tr> </table> <a name="data"><h1>FreshLib directory: data</h1></a> <p>This directory contains data handling routines and useful data structures. Actually it contains two abstract data structures: Arrays and Strings.</p> <p class="note">Current implementation is fully portable: it does not contain any OS dependent code.</p> <a name="Arrays"><h2>FreshLib Arrays</h2></a> <p>The FreshLib <b>Arrays</b> data structure handles dynamic arrays that contain elements of arbitrary size.</p> <h3>Structure</h3> <p>The following structure represents the header of the array. The actual array will have arbitrary size, depending on the element count and size.</p> <pre class="fasm-code"> struct TArray .count dd ? .capacity dd ? .itemsize dd ? .lparam dd ? label .array dword ends </pre> <p>The first element of the array begins on offset <span class="variable">TArray.array</span> from the begining of the memory block.</p> <p>The field <span class="variable">TArray.count</span> contains the current element count of the array.</p> <p>The field <span class="variable">TArray.capacity</span> contains the current capacity of the array. It is because the library usually allocates more memory than is needed for the array element count. This approach reduces memory allocations and reallocations and thus increases the speed of inserting and deleting elements in the array. How many memory will be allocated depends on the user setting of the variable <span class="variable">ResizeIt</span> (defined in <a href="system.html#memory">memory.asm</a>). This variable contains a pointer to the procedure that simply increases the value of <span class="register">ECX</span> to the next suitable value.</p> <p>The field <span class="variable">TArray.itemsize</span> contains the size in bytes of one array element. Changing of this value is not recommended.</p> <p>The field <span class="variable">TArray.lparam</span> is for user defined parameter, associated with the array.</p> <h3>Procedures</h3> <a name="CreateArray"><h4>CreateArray</h4></a> <pre class="fasm-code"> proc CreateArray, .itemSize </pre> <p>This procedure creates new array with item size <span class="variable">[.ItemSize]</span></p> <p>The procedure returns <span class="flag">CF=0</span> if the array is properly created and pointer to the array is placed in <span class="register">EAX</span>.</p> <p>In case the memory cannot be allocated, the procedure returns <span class="flag">CF=1</span>.</p> <p>The array must be freed after use. There is no special procedure for array free. Use <span class="procedure">FreeMem</span> procedure to free array memory after use.</p> <a name="AddArrayItems"><h4>AddArrayItems</h4></a> <pre class="fasm-code"> proc AddArrayItems, .ptrArray, .count </pre> <p>This procedure adds new array items at the end of the array pointed by <span class="variable">[.ptrArray]</span></p> <p>The procedure returns two values:</p> <p><span class="register">EAX</span> contains pointer to the first of the new appended elements.</p> <p><span class="register">EDX</span> contains pointer to the array (in the process of appending of the new element, it is possible the whole array to be moved to the new address in memory, so the programmer should store the value of <span class="register">EDX</span> for the future reference to the array.</p> <p>In case, the new memory can not be allocated, the procedure returns <span class="flag">CF=1</span> and <span class="register">EDX</span> contains the proper pointer to the original array.</p> <a name="InsertArrayItems"><h4>InsertArrayItems</h4></a> <pre class="fasm-code"> proc InsertArrayItems, .ptrArray, .iElement, .count </pre> <p>This procedure inserts [.count] new elements at the <span class="variable">[.iElement]</span> position of the array pointed by <span class="variable">[.ptrArray]</span></p> <p>If <span class="variable">[.iElement]</span> is larger or equal to <span class="variable">[TArray.count]</span> the elements are appended at the end of the array. (Just like AddArrayItems) Otherwise, all elements are moved to make room for the new elements.</p> <p>The procedure returns exactly the same results as <span class="procedure">AddArrayItems</span> procedure <span class="register">EDX</span> points to the array and <span class="register">EAX</span> points to the first of the new inserted elements.</p> <p><span class="flag">CF</span> is error flag.</p> <a name="DeleteArrayItems"><h4>DeleteArrayItems</h4></a> <pre class="fasm-code"> proc DeleteArrayItems, .ptrArray, .iElement, .count </pre> <p>This procedure deletes [.count] items with begin index <span class="variable">[.iElement]</span> the <span class="variable">[.ptrArray]</span> dynamic array. If the capacity of the array is bigger than the recommended for the new count, then the array is resized. The recommended size is calculated using ResizeIt procedure from memory library.</p> <p>Returns <span class="register">EDX</span> - pointer to the TArray. In the most cases this pointer will not be changed, but this also depends on the current OS memory allocation API, so it is safer to store the pointer for future use, instead of one passed to the procedure.</p> <p>This procedure can not fail, because deleting element is always possible. In some rare cases it can fail to reallocate smaller memory block, but this is not a problem for the array consistency.</p> <a name="VacuumArray"><h4>VacuumArray</h4></a> <pre class="fasm-code"> proc VacuumArray, .ptrArray </pre> <p>This procedure removes the reserved memory from the array in order to make it as small as possible. This operation should be executed only if there will be no more inserts in the array. The memory economized this way depends on reallocation strategy and can be from 25 to 100% in some cases.</p> <a name="ListIndexOf"><h4>ListIndexOf</h4></a> <pre class="fasm-code"> proc ListIndexOf, .ptrList, .Item </pre> <p>The list is a special case of array with item size equal to 4 bytes (dword). This procedure searches the list <span class="variable">[.ptrList]</span> for item equal to <span class="variable">[.Item]</span> and returns the index of the element in <span class="register">EAX</span>. In case of error <span class="flag">CF=1</span>.</p> <a name="ListFree"><h4>ListFree</h4></a> <pre class="fasm-code"> proc ListFree, .ptrList, .FreeProc </pre> <p>Frees all elements of the list <span class="variable">[.ptrList]</span>, calling <span class="variable">[.FreeProc]</span> for every element of the list.</p> <p>FreeProc callback procedure have one argument of type dword that is the value of the current list element. The definition of the callback procedure is similar to following:</p> <pre class="fasm-code"> proc FreeMyListItem, .ptrItem begin ;do something with the item being freed return endp </pre> <a name="Strings"><h2>FreshLib Strings</h2></a> <p>Using strings in assembler was often problematic for programmers - static strings can't be resized, so they had to reserve as many bytes as they thought user could need, and it still could be not enough. Thus we created StrLib - a library that operates on dynamic strings, that are automatically resized when needed. Also, StrLib contains many functions that perform string comparison, inserting one string into another, and more. And most of this functions can operate on static strings too. StrLib uses "memory.asm" library for memory allocations and does not contains any OS dependent code.</p> <p class="note">FreshLib Strings uses FreshLib Arrays to handle the list with pointers to allocated string memory.</p> <h3>StrLib string format</h3> <p>The strings used in StrLib are implemented using a specific structure, compatible but not equal to AsciiZ, used by Windows API. The string structure is defined in the following way:</p> <pre class="fasm-code"> struc string { .capacity dd ? .len dd ? label .data byte } virtual at -(sizeof.string) string string sizeof.string = $-string end virtual </pre> <p>The string data is placed on offset 0 to the pointer of the string. Its label is "string.data". The string data always is terminated by at least one zero byte and the length of the memory buffer is always dword aligned. It is safe to process the string data by dword instructions.</p> <p>On offset [string-4] is located a dword field, that contains the length of the string data, not including the terminating zero bytes.</p> <p>On offset [string-8] is located a dword with the capacity of the memory allocated for the string.</p> <p>These fields are accessible by its symbolic names: string.len and string.capacity; This fields are for internal use only it is not safe for the user to change the values of these fields.</p> <p>Using special field that to keep the length of the string makes some of the string operations extremely fast, because searching for the terminating zero is very slow operation. </p> <p>All procedures in StrLib compute the proper value for <span class="variable">[.len]</span> field and never search for the terminating zeros, except for the AsciiZ strings that are external towards StrLib those returned from the OS API functions or by string constants in memory.</p> <h3>StrLib string handles</h3> <p>The string in StrLib is identified not with its pointer, but by a handle. While the pointer can be changed when the string memory is reallocated, the handle is always a constant for the whole life cycle of the string.</p> <p>There is a procedure that extracts the current pointer of the string by its handle.</p> <p> Because handle values never collides with memory addresses, almost all StrLib procedures can work with handles and with memory pointers at the same time.</p> <p>For the strings passed to the procedures with memory pointer, StrLib assumes they are static strings from memory, or returned from the OS. </p> <p>Because of this assumption, StrLib process these strings safely and slowly scans the string to determine the length, assumes it is byte aligned etc. In other words it process it as a standard AsciiZ string.</p> <h3>StrLib procedures</h3> <a name="StrNew"><h4>StrNew</h4></a> <pre class="fasm-code">proc StrNew</pre> <p>Creates new string and returns handle in <span class="register">EAX</span>.</p> <a name="StrPtr"><h4>StrPtr</h4></a> <pre class="fasm-code">proc StrPtr, .hString</pre> <p>Returns the current pointer to the string with handle <span class="variable">[.hString]</span>.</p> <p>If <span class="variable">[.hString]</span> looks like a valid handle, but it is not found in the strings table, the procedure returns <span class="flag">CF=1</span>.</p> <a name="StrDel"><h4>StrDel</h4></a> <pre class="fasm-code">proc StrDel, .hString</pre> <p>Deletes the string with handle <span class="variable">[.hString]</span> and frees all allocated memory. If <span class="variable">[.hString]</span> is a pointer, it tries to search the strings table for the given handle and deletes it.</p> <p>If a string is not found, the procedure does not return an error.</p> <a name="StrDup"><h4>StrDup</h4></a> <pre class="fasm-code">proc StrDup, .hSource</pre> <p>Creates a duplicate of the string <span class="variable">.hSource</span>. Returns a handle to the new created string in <span class="register">EAX</span>.</p> <a name="StrLen"><h4>StrLen</h4></a> <pre class="fasm-code">proc StrLen, .hString</pre> <p>Returns the length of the string <span class="variable">[.hString]</span>. If the handle is valid, it returns the value of the field <span class="variable">[string.len]</span>. If <span class="variable">[.hString]</span> is a pointer, it computes the length by scanning the string up to the zero terminator.</p> <a name="StrFixLen"><h4>StrFixLen</h4></a> <pre class="fasm-code">proc StrFixLen, .hString</pre> <p>This procedure scans the length of zero terminated string and "fixes" <span class="variable">[string.len]</span> field. StrFixLen should be call when the content of the string is created by an external call, for example a Win32 API function.</p> <a name="StrSetCapacity"><h4>StrSetCapacity</h4></a> <pre class="fasm-code">proc StrSetCapacity, .hString, .capacity</pre> <p>If the capacity of <span class="variable">[.hString]</span> is larger than the requested capacity it does nothing.</p> <p>If the capacity of <span class="variable">[.hString]</span> is smaller than the requested capacity, it sets the capacity of the string to the requested value.</p> <p>Returns a pointer to the string after reallocation in <span class="register">EAX</span>.</p> <p><span class="variable">.hString</span> is a handle to the string that have to be resized. Pointers are not acceptable here.</p> <p><span class="variable">.capacity</span> contains requested capacity for the string.</p> <p>If returns <span class="flag">CF=1</span> the reallocation failed. <span class="register">EAX</span> still contains the pointer to the string, but the string was not resized.</p> <a name="StrCopy"><h4>StrCopy</h4></a> <pre class="fasm-code">proc StrCopy, .dest, .source</pre> <p>Copies the content of <span class="variable">[.source]</span> string to <span class="variable">[.destination]</span> string.</p> <a name="StrCompCase"><h4>StrCompCase</h4></a> <pre class="fasm-code">proc StrCompCase, .str1, .str2</pre> <p>Compares the content of two strings <span class="variable">[.str1]</span> and <span class="variable">[.str2]</span> case sensitive.</p> <p>Returns:</p> <p><span class="flag">CF=1</span> if the strings are EQUAL.</p> <p><span class="flag">CF=0</span> if the strings are NOT equal.</p> <a name="StrCompNoCase"><h4>StrCompNoCase</h4></a> <pre class="fasm-code">proc StrCompNoCase, .str1, .str2</pre> <p>Compares the content of two strings <span class="variable">[.str1]</span> and <span class="variable">[.str2]</span> case NOT sensitive.</p> <p>Returns:</p> <p><span class="flag">CF=1</span> if the strings are EQUAL</p> <p><span class="flag">CF=0</span> if the strings are NOT equal.</p> <a name="SetString"><h4>SetString</h4></a> <pre class="fasm-code">proc SetString, .ptrHString, .ptrSource</pre> <p>Creates string and assigns it to variable. If the variable already contains string handle, the old string will be reused. Copies the content of <span class="variable">[.ptrSource]</span> to the string variable.</p> <p>Arguments:</p> <p><span class="variable">.ptrHString</span> pointer to the variable that contains string handle.</p> <p><span class="variable">.ptrSource</span> pointer to the source for string.</p> <a name="StrCat"><h4>StrCat</h4></a> <pre class="fasm-code">proc StrCat, .dest, .source</pre> <p>Concatenates two strings. The operation is: destination = destination + source.</p> <p>The destination string <span class="variable">[.dest]</span> can be only handle. <span class="variable">[.source]</span> can be handle or pointer.</p> <a name="StrCharPos"><h4>StrCharPos</h4></a> <pre class="fasm-code">proc StrCharPos, .hString, .char</pre> <p>StrCharPos returns a pointer to the first occurrence of a given char in specified string.</p> <p>Arguments:</p> <p><span class="variable">.hString</span> - string to search</p> <p><span class="variable">.char</span> - char to look for</p> <p>Returns:</p> <p>A pointer to the char in source, or <span class="constant">NULL</span> if char doesn't occur in the given string.</p> <a name="StrPos"><h4>StrPos</h4></a> <pre class="fasm-code">proc StrPos, .hString, .hPattern</pre> <p>StrPos returns a pointer to the first occurrence of a <span class="variable">.hPattern</span> string in <span class="variable">.hString</span>. <p>Arguments:</p> <p>hPattern - 'pattern' string</p> <p>hString - string to search</p> <p>Returns:</p> <p>Pointer to the pattern string in source, or <span class="constant">NULL</span> if pattern string doesn't occur in the string to search.</p> <a name="StrCopyPart"><h4>StrCopyPart</h4></a> <pre class="fasm-code">proc StrCopyPart, .dest, .source, .pos, .len</pre> <p>Copies part of the source string to the destination string.</p> <p>Arguments:</p> <p><span class="variable">.dest</span> handle to destination string.</p> <p><span class="variable">.source</span> handle or pointer to the source string.</p> <p><span class="variable">.pos</span> Source part start position.</p> <p><span class="variable">.len</span> length of the copied part.</p> <p>Returns nothing.</p> <a name="StrExtract"><h4>StrExtract</h4></a> <pre class="fasm-code">proc StrExtract, .string, .pos, .len</pre> <p>The same as StrCopyPart, but creates and returns new string with extracted part of the source <span class="variable">[.string]</span></p> <p>Returns the new created string in <span class="register">EAX</span>.</p> <a name="StrSplit"><h4>StrSplit</h4></a> <pre class="fasm-code">proc StrSplit, .hString, .pos</pre> <p>Splits the string on two strings, at position <span class="variable">[.pos]</span></p> <p>Arguments: <p><span class="variable">.hString</span> handle of the string to be split.</p> <p><span class="variable">.pos</span> - position where to split the string.</p> <p>Returns: <p><span class="register">EAX</span> - handle to the new created string with second part of the string. The original string does not reallocate memory and it's capacity and the pointer will remains the same.</p> <a name="StrInsert"><h4>StrInsert</h4></a> <pre class="fasm-code">proc StrInsert, .dest, .source, .pos</pre> <p>Inserts the string <span class="variable">[.source]</span> into the string <span class="variable">[.dest]</span> at position [.pos]</span></p> <a name="StrLCase"><h4>StrLCase</h4></a> <pre class="fasm-code">proc StrLCase, .hString</pre> <p>Converts <span class="variable">[.hString]</span> to lower case.</p> <a name="StrUCase"><h4>StrUCase</h4></a> <pre class="fasm-code">proc StrUCase, .hString</pre> <p>Converts <span class="variable">[.hString]</span> to upper case.</p> <a name="NumToStr"><h4>NumToStr</h4></a> <pre class="fasm-code">proc NumToStr, .num, .flags</pre> <p>Converts the given number to a string representing it.</p> <p><span class="variable">[.flags]</span> controls how the number to be converted.</p> <p>The procedure returns a handle to the string in <span class="register">EAX</span> and direct pointer to the string in <span class="register">EAX</span>.</p> <p>The <span class="variable">[.flags]</span> is a dword with following format:</p> <p>The LSB contains the number of digits, the number must have, if ntsFixedWidth flag is specified.</p> <p>Second byte of <span class="variable">[.flags]</span> contains the radix that to be used for conversion.</p> <p>The third and the fourth bytes are reserved for bit flags.</p> <p>Following constants are predefined in StrLib in order to set the value for <span class="variable">[.flags]</span>:</p> <table style="margin-left: 40px;"> <tr><td><span class="constant">ntsSigned</span></td><td>converts number in signed format.</td><td align="right">$00000</td></tr> <tr><td><span class="constant">ntsUnsigned</span></td><td>converts number in unsigned format.</td><td align="right">$10000</td></tr> <tr><td><span class="constant">ntsFixedWidth</span></td><td>the count of the digits is fixed.</td><td align="right">$20000</td></tr> <tr><td><span class="constant">ntsBin</span></td><td>for binary number</td><td align="right">$0200</td></tr> <tr><td><span class="constant">ntsQuad</span></td><td>for quad number</td><td align="right">$0400</td></tr> <tr><td><span class="constant">ntsOct</span></td><td>for octal number</td><td align="right">$0800</td></tr> <tr><td><span class="constant">ntsDec</span></td><td>for decimal number</td><td align="right">$0a00</td></tr> <tr><td><span class="constant">ntsHex</span></td><td>for hexadecimal number</td><td align="right">$1000</td></tr> </table> <p>Example:</p> <pre class="fasm-code">stdcall NumToStr,<span class="register">EAX</span>, ntsDec or ntsFixedWidth or 8</pre> <p>This example will convert the number in <span class="register">EAX</span> to a signed decimal number with exactly 8 digits. If <span class="register">EAX</span> contains <span class="constant">$00000080</span>, the result string will be <span class="constant">'00000128'</span>.</p> <a name="StrCharCat"><h4>StrCharCat</h4></a> <pre class="fasm-code">proc StrCharCat, .hString, .char</pre> <p>This procedure appends up to 4 characters at the end of the string <span class="variable">[.hString]</span>. The characters are contained in the dword argument <span class="variable">[.char]</span></p> <a name="StrCharInsert"><h4>StrCharInsert</h4></a> <pre class="fasm-code">proc StrCharInsert, .hString, .char, .pos</pre> <p>Inserts up to 4 characters <span class="variable">[.char]</span> at position <span class="variable">[.pos]</span> in the string <span class="variable">[.hString]</span></p> <a name="StrHash"><h4>StrHash</h4></a> <pre class="fasm-code">proc StrHash, .hString</pre> <p>Computes 32 bit hash value from the string <span class="variable">[.hString]</span>. This procedure implements the hash algorithm FNV-1b. Returns the result in <span class="register">EAX</span>.</p> </nowiki> |
Added freshlib/_doc/equates.wiki.
> > > > > | 1 2 3 4 5 | <nowiki> <a name="data"><h1>FreshLib directory: equates</h1></a> <p>This directory contains the equates library "allequates.inc". This library defines all constants and structures needed for OS dependent parts of FreshLib.</p> <p>The user should never use these constants and structures in the portable program.</p> </nowiki> |
Added freshlib/_doc/freshlib.css.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | body { margin: 0px auto 0px auto; padding: 2px; text-align: justify; } p { padding-left: 20px; } td { padding: 2px 8px 2px 8px; } span.register { margin: 0px; padding: 2px; } span.variable { margin: 0px; padding: 2px; } span.flag { margin: 0px; padding: 2px 2px 2px 2px; } span.constant { margin: 0px; padding: 2px 2px 2px 2px; } span.procedure { margin: 0px; padding: 2px 2px 2px 2px; font-weight: bold; } p.note { margin: 0px; padding: 2px 2px 2px 26px; } p.todo { margin: 0px; padding: 2px 2px 2px 26px; } pre.fasm-code { margin: 4px 4px 4px 20px; padding: 2px 6px 2px 6px; } @media screen { body { background-color: #ffffe8; max-width: 1024px; font: "fresh"; font-family: FreeSans, Verdana, sans-serif; font-size: 10pt; } /* The project logo in the upper left-hand corner of each page */ div.logo { display: table-cell; text-align: center; vertical-align: bottom; font-weight: bold; color: #000000; min-width: 100px; } /* The page title centered at the top of each page */ div.title { display: table-cell; font-size: 20px; font-weight: bold; text-align: left; padding: 0 0 0 1em; color: black; vertical-align: middle; width: 100% ; } /* The main menu bar that appears at the top of the page beneath ** the header */ div.mainmenu { padding: 5px 10px 5px 10px; font-size: 12px; font-weight: bold; text-align: center; letter-spacing: 1px; background-color: #ff7000; border: 1px solid red; color: white; } /* The submenu bar that *sometimes* appears below the main menu */ div.submenu { padding: 2px 10px 2px 10px; margin: 3px 0px 3px 0px; font-size: 12px; text-align: center; background-color: #ffff70; color: #000080; border: 1px solid red; } div.mainmenu a, div.mainmenu a:visited { padding: 3px 10px 3px 10px; color: white; text-decoration: none; } div.submenu a, div.submenu a:visited { padding: 1px 10px 1px 10px; color: black; text-decoration: none; } div.mainmenu a:hover { color: #558195; background-color: white; } div.submenu a:hover { color: black; background-color: #40ffa0; } /* All page content from the bottom of the menu or submenu down to ** the footer */ div.content { padding: 8px 8px 8px 8px; font-size: 12px; max-width: 800px; margin: 4px auto 4px auto; background-color: white; border: 1px #a0a0a0 solid; } /* The footer at the very bottom of the page */ div.footer { font-size: 12px; margin-top: 2px; padding: 5px 10px 5px 10px; text-align: right; background-color: #ff7000; border: 1px solid red; color: white; } td { font: "fresh"; font-family: "helvetica"; font-size: 10pt; } span.register { background-color: #FFCCFF; } span.variable { background-color: #CCFFFF; } span.flag { background-color: #FFFFCC; } span.constant { background-color: #CCFFCC; } span.procedure { font-weight: bold; } p.note { background-color: #FFFFCC; border: 1px solid #FFCCCC; } p.todo { background-color: #FFCCCC; border: 1px solid #FF9999; } pre.fasm-code { max-width: 700px; background-color: #F3F3F3; border: 1px dashed #C0C0C0; font-size: 9pt; } } @media print { body { background-color: none; font-family: FreeSans, Verdana, sans-serif; } div.mainmenu { visibility: hidden; } div.submenu { visibility: hidden; } a { text-decoration: none; } } |
Added freshlib/_doc/freshlib_reference.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <nowiki> <table class="index" align="right"> <tr><td class="index"><p></p> <b><a href="/home">Home</a>:FreshLib:</b><br /> <a href="compiler.wiki">compiler</a><br /> <a href="data.wiki">data</a><br /> <a href="equates.wiki">equates</a><br /> <a href="graphics.wiki">graphics</a><br /> <a href="GUI.wiki">GUI</a><br /> <a href="imports.wiki">imports</a><br /> <a href="macros.wiki">macros</a><br /> <a href="simpledebug.wiki">simpledebug</a><br /> <a href="system.wiki">system</a><br /> </p></td></tr> </table> <h3>Overview</h3> <p>FreshLib is an assembly library aimed to ease the development of rapid assembly language applications, freely portable between different platforms, such as Win32 or Linux.</p> <p>The library is coded in flat assembler syntax <a href="http://www.flatassembler.net">(fasm)</a> and is intended to be easily used within <a href="http://fresh.flatassembler.net">Fresh IDE</a> although it could be used for plain fasm development.</p> <p>The library consists of two layers: one that is OS dependent and a second one that is OS independent. The OS dependent layer is very small, in order to help porting it for different OS. This layer only makes interface to the core OS functions, such as memory allocations, file access, drawing functions, simple window management etc.</p> <p>The OS independent layer is responsible for the main application functionality allowing creation of different kind of windows and controls, user interaction with the program and interaction between particular windows and other GUI elements.</p> <p>FreshLib is mainly intended for developing GUI applications, as they are the most challenging to be ported across different platforms. FreshLib is also created with visual programming in mind, so it contains a flexible, event driven and OS independent template engine allowing visual creation of application user interfaces.</p> <p>FreshLib is in early development stage and probably will be changed many times in order to reach their objectives: to be small, fast and easy to use.</p> <p>The main intention is to keep the bloat off the library, but containing all necessary accessories for comfortable programming of a very wide range of applications.</p> <p>The architecture of FreshLib is open and it can be freely expanded with other libraries without increasing the size of applications. In other words, only those parts of the library that are effectively used will be compiled on the final executable.</p> <h3>About this manual</h3> <p class="todo">This manual is a "work in progress". Any part of it can be changed at any time.</p> <p>Of course, some of the libraries described in this document are more stable and finished like the macro, system and data libraries. Therefore, the chapters about these libraries are less likely to be changed. Other libraries (like graphics and GUI), will be heavily modified so the manual will be changed accordingly.</p> <h3>Structure of the library</h3> <p>FreshLib contains many code and macros libraries, structured hierarchically and depending on each other. Here is the directory tree of the library:</p> <ul> <li><a href="compiler.wiki">compiler</a></li> <li><a href="data.wiki">data</a></li> <li><a href="equates.wiki">equates</a></li> <li><a href="graphics.wiki">graphics</a></li> <li><a href="GUI.wiki">GUI</a></li> <li><a href="imports.wiki">imports</a></li> <li><a href="macros.wiki">macros</a></li> <li><a href="simpledebug.wiki">simpledebug</a></li> <li><a href="system.wiki">system</a></li> </ul> <p>The library is structured to support different platforms transparently. The platform dependient code is contained in a subdirectory of each library component. For example, "system" subdirectory contains libraries for accessing system resources such as memory, files, etc. Inside "system" there several subdirectories that contain OS dependent code these directories are named after the platform they serve.</p> <p class="note">Currently, only Win32 and Linux platforms are supported.</p> <h3>Getting started</h3> <p>FreshLib main scope is to provide a fast and easy framework to start programming multiplatform assembly applications. Now, <a href="starting.wiki">what is needed to start writing applications?</a></p> <h3>Tutorials</h3> <ul> <li><a href="starting.wiki#simplest">Simplest Application</a></li> <li><a href="starting.wiki#files">Creating Files</a></li> <li><a href="starting.wiki#console">Basic Console</a></li> <li><a href="starting.wiki#GUI">Basic GUI</a></li> </ul> </nowiki> |
Added freshlib/_doc/imports.wiki.
> > > > > > | 1 2 3 4 5 6 | <nowiki> <a name="data"><h1>FreshLib directory: imports</h1></a> <p>Another directory that contains only OS dependent definitions is "imports" with a library file to be included in the project: "allimports.asm"</p> <p>This file have to be included in the _IncludeSection of the application. Then it will generate the proper import section, depending on the target platform and functions used by the OS dependent parts of FreshLib.</p> <p>The user should never call directly imported functions from inside the portable application.</p> </nowiki> |
Added freshlib/_doc/index.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <nowiki> <table class="index" align="right"> <tr><td class="index"> <p><b>Index</b><br /> <a href="http://fresh.flatassembler.net">Fresh home</a><br /> <a href="/doc/FreshLibDev/freshlib/_doc/freshlib_reference.wiki">FreshLib reference</a><br /> <a href="/doc/trunk/doc/fresh_user_guide.html">Fresh tips&tricks</a><br /> </p></td></tr> </table> <p>Fresh is a visual assembly language IDE with built-in FASM assembler. </p> <p>The main goal of Fresh is to make programming in assembly as fast and efficient as in other visual languages, without sacrificing the small application size and the raw power of assembly language. </p> <p>Because Fresh is the logical continuation of the FASM project in the area of visual programming, it is perfectly compatible with FASM and you can use all your knowledge about FASM to program in Fresh. </p> <p>Of course, you can use Fresh not only for Windows programming, but also to create programs for any OS that FASM supports - DOS, Linux, FreeBSD, BeOS, MenuetOS - the same way as you do this in FASM. </p> <p>This site is <a href="http://www.fossil-scm.org">fossil</a> repository of Fresh sources. You can clone the repository with following fossil command: <pre><b>fossil clone http://chiselapp.com/user/johnfound/repository/FreshIDE/ Fresh.fossil</b></pre> </p> <p>In order to use more functionality in this site, please <a href="/login">login</a> as "anonimous" user. Particularly you will be able to follow the links in the source tree, to download code and to fill bug reports and feature requests. </p> <p>If you want to contribute to the project, please contact me (johnfound) on <a href="http://board.flatassembler.net">FASM message board</a> </p> <p>In order to download compiled FreshIDE, visit <a href="http://fresh.flatassembler.net">Fresh IDE home page.</a> </p> <p>You can report bugs, or make some feature requests here, in the <a href="/reportlist">Tickets system</a> </p> </nowiki> |
Added freshlib/_doc/macros.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | <nowiki> <table class="index" align="right"> <tr><td class="index"><p></p> <b><a href="freshlib_reference.wiki">FreshLib</a>:Macros:</b><br /> <a href="#_stdcall">_stdcall.inc</a><br /> <a href="#_globals">_globals.inc</a><br /> <a href="#_struct">_struct.inc</a><br /> <a href="#_display">_display.inc</a><br /> </p></td></tr> </table> <a name="macros"><h1>FreshLib directory: macros</h1></a> <p>This directory contains several libraries that provides common convenience functions to be used with big assembly projects. All libraries can be included in the project at once from the file "allmacros.inc".</p> <p>There is no overhead at including all those libraries because there is no code to be generated, just macros. There is a little delay in compile time but thanks to fasm's speed, it is barely noticeable.</p> <p>Lets examine each one of these libraries.</p> <a name="_stdcall"><h2>FreshLib _stdcall.inc</h2> <p>In general this library provides ways of definition and invoking of the procedures with argument passing through the stack. It supports STDCALL and CCALL calling conventions.</p> <pre class="fasm-code"> macro proc name, [arg] macro begin macro endp macro return macro cret macro locals macro endl </pre> <p>These macros define a procedure, creates a stack frame for the local variables and defines symbolic names for the arguments. The macro "proc" defines the global label "name" as a name for the procedure. All arguments and local variables are defined as a local labels with regard to the name of the procedure. That is why all arguments and local variables must have names beginning with dot.</p> <p>Between the line with "proc" and "begin", any number of local variables can be defined. The macro "begin" marks the begining of the procedural code.</p> <p>The macro "endp" marks the end of the procedural code.</p> <p>The return from procedure instruction is provided by macros "return" or "cret" depending on the calling convention we want to use: "return" clears the arguments from the stack and "cret" do not.</p> <p>Inside the procedure, a secondary stack frame can be allocated with the pair "locals" and "endl". All data definitions, enclosed between these macros will define a secondary stack frame that is a continuation of the stack frame defined between "proc" and "begin".</p> <p>Any number of "locals" and "endl" pairs can be used, but all of these secondary stack frames will overlap between each other. This feature is specially intended to provide savings of stack space and at the same time, to provide talking variable names for the different parts of more complex procedures.</p> <p>For example (in Win32) if we have complex window procedure that have to process multiple messages: One of the message handlers may need one variable <span class="variable">.rect</span>. Another message handler may need two variables called <span class="variable">.point1</span> and <span class="variable">.point2</span>. But the procedure as a whole is never going to need all those variables at the same time, because it process only one message at a time. On the other hand it may need the variable <span class="variable">.ctrldata</span> for every message processed. The optimal solution is to define the variables in the following way:</p> <pre class="fasm-code"> proc CtrlWinProc,.hwnd,.wmsg,.wparam,.lparam .ctrldata dd ? begin invoke GetWindowLong, [.hwnd], GWL_USERDATA mov [.ctrldata], eax cmp [.wmsg], WM_MESSAGE1 je .message1 cmp [.wmsg], WM_MESSAGE2 je .message2 return .message1: locals .rect RECT endl return .message2: locals .point1 POINT .point2 POINT endl return endp </pre> <p>In the above example, <span class="variable">.ctrldata</span> is defined on <span class="register">[EBP-4]</span>; <span class="variable">.rect</span> is defined on <span class="register">[EBP-20]</span>; <span class="register">.point1</span> is also defined on <span class="register">[EBP-20]</span> and <span class="variable">.point2</span> is defined on <span class="register">[EBP-12]</span>.<p> <table class="stack" style="margin-left: 40px; border: 1px solid black;"> <tr><td>[EBP-04]</td><td colspan=2>.ctrldata</span></td></tr> <tr><td>[EBP-08]</td><td>.rect.bottom</td><td>.point2.y</td></tr> <tr><td>[EBP-12]</td><td>.rect.right</td><td>.point2.x</td></tr> <tr><td>[EBP-16]</td><td>.rect.top</td><td>.point1.y</td></tr> <tr><td>[EBP-20]</td><td>.rect.left</td><td>.point1.x</td></tr> </table> <p>As you can see, <span class="variable">.rect</span> occupies the same memory as <span class="variable">.point1</span> and <span class="variable">.point2</span>, but <span class="variable">.ctrldata</span> is never overlapped and exists independently.<p> <p>As a general rule, you have to use the definitions between "proc" and "begin" for local variables that are used in every call of the procedure and separate locals/endl definitions for variables needed for the particular branches inside the procedure.<p> <p>This approach will always provide the optimal size for the locals stack frame.</p> <pre class="fasm-code"> macro initialize macro finalize </pre> <p>The macros "initialize" and "finalize" defines one special type of procedures that during compilation are registered in a two separate lists - one for "initialize" and one for "finalize" procedures.</p> <p>After that using the macros "InitializeAll" and "FinalizeAll", all these procedures can be call at once. "initialize" procedures are call in the order of their definition and "finalize" procedures in reverse order.</p> <p>These macros provides standard and consistent way to process the initialization and the finalization of the libraries and modules of the application.</p> <p>Procedures defined with "initialize" and "finalize" must have no any arguments.</p> <p>FreshLib uses this mechanism and the user is free to use it also. <pre class="fasm-code"> macro stdcall proc, [arg] macro ccall proc, [arg] macro invoke proc, [arg] macro cinvoke proc, [arg] </pre> <p>This macros call the procedures with STDCALL and CCALL calling convention.</p> <p>"stdcall" macro pushes the arguments to the stack in reverse order and then call the procedure with label "proc". As long as the macro "stdcall" does not provide any stack cleanup (this duty is assigned to the procedure) the arguments can be pushed in free manner using, for example, separate push instructions for part of the arguments and arguments in the stdcall line for the remaining arguments. This can be very convenient in some cases. For example see the following source:</p> <pre class="fasm-code"> stdcall CreateSomeObject push eax stdcall DoSomething stdcall DeleteSomeObject </pre> <p>Here, the procedure DoSomething changes the value of eax, so the handle is saved in the stack. The procedure DeleteSomeObject needs one argument - a handle of the object. But as long as the proper value is already in the stack, it is mindless to pop the value and then to push it again. So the source calls DeleteSomeObject without any arguments. The procedure knows the proper number of arguments (one in this example) and clean the stack properly.</p> <p>The standard (and wrong) approach is to pop the argument from the stack and then to pass it to the procedure explicitly is the stdcall statement:</p> <pre class="fasm-code"> stdcall CreateSomeObject push eax ; save the handle. stdcall DoSomething pop eax ; ??? Why ??? stdcall DeleteSomeObject, eax </pre> <p>This source will generate the meaningless instructions sequence:</p> <pre class="fasm-code"> pop eax push eax </pre> <p>"invoke" macro is the same as "stdcall" with the only difference - it calls the procedure indirectly (call [proc] instead of call proc).</p> <p>This mechanism is used to call the functions imported from external dynamic linked libraries.</p> <p>"ccall" macro calls a procedure with CCALL convention. This means that the procedure returns with simple "retn", without cleaning the parameters from the stack. Then "ccall" macro provides instructions that remove the arguments from the stack.</p> <p>Because ccall have to know the exact count of passed arguments, all arguments have to be passed explicitly as a values in the ccall statement.</p> <p>Tricks as described above will not work properly and leads to stack not properly cleaned after the call.</p> <p>"cinvoke" is the same as ccall, but using indirect call. The reason is the same as with "invoke" macro. </p> <p class="note">About the calling conventions: While all Win32 dynamic linked libraries uses STDCALL convention, most (if not all) of Linux libraries uses CCALL convention.<br /> All code libraries of Fresh use STDCALL calling convention and it is platform independient.</p> <a name="_globals"><h2>FreshLib _globals.inc</h2> <p>This library defines several macros intended to deal with data definitions.</p> <p>Usually all data definitions have to be placed in special section of the executable file. This is not very convenient, because the code that process this data and the data definitions must reside in separate places of the source code, and in most cases even in different files.</p> <p>The idea of globals.inc macro library is to allow the data definition to be described anywhere in the source code, but these definitions to be defined at once, at the place the programmer wants - usually in the data section of the program.</p> <pre class="fasm-code"> macro uglobal macro iglobal macro endg macro IncludeAllGlobals </pre> <p>"uglobal" begins block for undefined data definition. The block ends with "endg" macro. Between "uglobal" and "endg" macro any count of data definitions can be inserted.</p> <p>Note that because uglobal block defines undefined data, it is only the labels and the size of data that have meaning inside this block. Any data defined with data definition directive will not be included in the binary file.</p> <p>The undefined data will be defined later at the place where "IncludeAllGlobals" macro resides.</p> <p>The undefined data is always placed at the end of all data definitions, so it will never increase the size of the executable file.</p> <p>"iglobal" macro, again combined with "endg" defines initialized data. The data defined in the block will be created at "IncludeAllGlobals" statement.</p> <p>This block increases the size of the executable file, because it contains sensible data, that have to be included in the file.</p> <p>Actually, neither uglobal, nor iglobal blocks defines any data immediately.</p> <p>Instead, the data definitions are stored in a list. The real definition occurs later, when IncludeAllGlobals macro is invoked.</p> <p>For this reason, IncludeAllGlobals must be placed in the source after all used global data blocks.</p> <pre class="fasm-code">struc text [val]</pre> <p>The macro "text" is actually a structure. It needs to be preceded by some label name.</p> <p>This macro defines a zero terminated string constant, and also a local label for this string in the "sizeof" global label.</p> <p>The "text" macro, similar to iglobal and uglobal simply stores string data for defer definition.</p> <p>This definition, as for all global data macros, occur in IncludeAllGlobals invocation.</p> <p>Why to define separate macro for the strings and not to use the normal iglobal block? The thing is that the macro "text" was planned to check the strings and to not define any string more than once. In the case of repetitive strings, this macro should return the pointer to the already defined string constant.</p> <p>In that case, it would be very convenient and harmless to use string constants in the function calling macros - stdcall, ccall etc.</p> <p class="todo">Unfortunately, regardless of the power of fasm macro language, this functionality cannot be implemented. Or, more precisely, it can be implemented, but the implementation is too slow for any real project use.<br /> This ineffective implementation is still leaved inside the file _globals.inc - commented block that defines macro with name "InitStringList". If someone have ideas about fixing this problem, please send it to me!</p> <a name="_struct"><h2>FreshLib _struct.inc</h2> <p>This library contains only one simple macro:</p> <a name=""><h4></h4></a> <pre class="fasm-code"> macro struct name ends </pre> <p>This macro is aimed to provide easy creation of data structures. The "struc" directive in FASM is known to not create actual labels, but only the template for the label definitions. So, we need to create an instance of the data structure in order to have addresses and offsets of its fields.</p> <p>But very often we don't have static data structure of the given type, but data structure, pointed by some of the registers. In this case in order to use offsets to the fields of the data structure, we need to define at least one virtual instance of the structure at address 0. Then we can use the values of the fields as an offsets in the instructions - for example: mov eax, [esi+RECT.right].</p> <p>So, this is exactly what "struct" macro does. Besides it defines the "struc" structure with the given fields, it creates a single virtual instance of this structure, in order to be used later for register addressing. In all remaining functionality it behaves exactly as the struc directive.</p> <p>The syntax of struct macro is the following:</p> <pre class="fasm-code"> struct StructureName .field1 dd ? .field2 RECT .fieldN: ends </pre> <p>The definition begins with "struct" followed by the structure name. The definition ends with "ends" directive. Between both, any local label definition becomes a member of the structure.</p> <a name="_display"><h2>FreshLib _display.inc</h2> <p>This library contains macros that enhance the functionality of standard FASM "display" directive.</p> <a name=""><h4></h4></a> <pre class="fasm-code">macro disp [arg]</pre> <p>The macro "disp" displays the strings given in the arguments, just as "display" FASM directive does</p> <pre class="fasm-code">disp <number, radix></pre> <p>The macro here is used to display numbers in any radix.</p> <pre class="fasm-code">macro DispSize Text, Sz</pre> <p>"DispSize" macro is very specialized macro, that displays the text and number in the following form:</p> <pre class="fasm-code">Size of [Text] is: Sz bytes</pre> <p>The size number is automatically scaled to bytes or kbytes, depending on the value of Sz.</p> <p>This macro allows easy display and control of the sizes of particular areas of the program - data structures, subroutines etc.</p> <a name="Fresh display"><h4>How Fresh implements "display" directive</h4></a> <p>There are some specifics in Fresh, concerning message displaying. The "display" directive in Fresh works in a different way than original FASM directive. It outputs text in Fresh message window. Each message can have one of six icons, or it can have no icon at all. And because message window is implemented as a TreeView control, you can organize your messages into groups (directories). Implementation is a bit "tricky" - when you display a character whose code is less than 16, it is interpreted in a special way. Characters from 1 to 6 set an icon of current message. It sounds complicated, but it is quite simple. Try:</p> <pre class="fasm-code"> display 2, "some message" </pre> <p>It will display "some message" with an error icon. Another codes are used for controlling directory structure. Try to type following lines and see what would happen:</p> <pre class="fasm-code"> display 3, "message at root", 0x09 display 3, "child message1", 0x0a display 3, "child message2", 0x0d display 3, "again at root", 0x0a </pre> <p>Of course you don't have to put each message in separate display directive, you can, with the same result write:</p> <pre class="fasm-code"> display 3, "at root",$09,3,"child1",$0a,3,"child2", $0d,3,"again at root",$0a </pre> <p>Here is the complete list of all special characters and their meanings:</p> <table style="margin-left: 40px;"> <tr><td><span class="constant">$01</span></td><td>set current icon to "warning"</td></tr> <tr><td><span class="constant">$02</span></td><td>set current icon to "error"</td></tr> <tr><td><span class="constant">$03</span></td><td>set current icon to "info"</td></tr> <tr><td><span class="constant">$04</span></td><td>set current icon to "find"</td></tr> <tr><td><span class="constant">$05</span></td><td>set current icon to "none"</td></tr> <tr><td><span class="constant">$06</span></td><td>set current icon to "debug"</td></tr> <tr><td><span class="constant">$08</span></td><td>end current row and set one level back.</td></tr> <tr><td><span class="constant">$09</span></td><td>end current row and set it as new directory.</td></tr> <tr><td><span class="constant">$0a</span></td><td>end current row and keep current level</td></tr> <tr><td><span class="constant">$0d</span></td><td>end current row and set current level to root level</td></tr> </table> </nowiki> |
Added freshlib/_doc/porting.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <h3>Porting FreshLib to other platforms.</h3> <h4>Minimal system requirements</h4> * Some kind of heap management. Currently FreshLib uses heap functions in Win32 and libc functions in Linux. Although, if it is impossible for the OS to provide dynamic memory allocation, it can be implemented using some other heap manager - for example vid's one from FASMLIB. In this case, the OS should provide only one big memory block. However, this solution can greatly complicate the porting process. * Some kind of process management. Threads. * Timer - FreshLib needs one timer that to be able to interrupt the main program loop. * Graphics - FreshLib needs basic graphics functions in order to work. Lines, Rectangles and text drawing should be enough. * Graphics Text rendering - FreshLib needs UTF-8 support at least on level of conversion of UTF-8 to the OS internal format (as is with Win32). As long as ASCII (0..$7f) is valid UTF-8 code, if the OS uses only plain ASCII it is possible for text rendering to provide only ASCII text drawing. In Win32 FreshLib uses Windows unicode support with conversion. In Linux it uses XFT library, that supports direct use of UTF-8 strings. * Console text output - FreshLib needs output to the console window - (native or emulated) for debuging purposes. * Windows - FreshLib uses only one base type of window, able to accept the system events and to be displayed on the screen. This window should be able to appear on the screen and to be able to have children of the same type. In Win32 FreshLib uses its own window class "FreshWin". In Linux (XLib) uses usual XLib window. |
Added freshlib/_doc/real_objects.md.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | # Object oriented programming with FreshLib ## Objects definition The objects are defined using macro pair "object" and "endobj". The syntax of these macros is following: object OBJ_NAME [, PARENT_NAME] ; here object members are to be defined. endobj The object can contain three types of members: * Fields. They are simply some local labels with data definition, very similar to the structure fields. The fields are defined the same way as the structure fields: object TAnimal .length dd ? .height dd ? .weight dd ? endobj The fields are aimed to provide storage of private for the object data. Of course, it is assembly language and the fields are not hidden from the user, but a good practice is to not use them as an interface. (There are other members that are to be used as an interface). * Methods. The methods are procedures that provide an object engine - the code that to be executed on the object data. They are defined following way: object TAnimal .length dd ? .height dd ? .weight dd ? method .Jump, .height endobj Here we defined a method TAnimal.Jump that will make our animal to jump. :) The methods can have any number of arguments. Besides the user defined arguments, the method always contain one implicitly defined argument, named .self, containing a pointer to the object itself. The user should not define this argument, neither set it during the method invocation. The object engine itself handle it. Of course the user can use this argument on the method implementation code. Once defined, the method needs to be implemented. The method implementation is similar to the procedures, but uses a macro "method" instead of "proc". Also, no arguments need to be defined in the method implementation, because they are already known from the object type definition: method TAnimal.Jump begin push eax ecx mov eax, [.self] mov ecx, [eax+TAnimal.height] add ecx, [.height] pop ecx eax return endp Sometimes so called "abstract" methods need to be defined. These are methods, that has no implementation. They are used in order to provide a method that to be implemented only in the objects that have a common parent class. The abstract methods are defined the same way as the normal, but by the macro "abstract" instead of "method". And of course they does not need implementation. * Parameters. The parameters are, similar to the fields, data members. But unlike the fields, they can contain a code, that to generate the data value. The definition of the parameter is by the macro "param": param .ParamName, GET_METHOD, SET_METHOD The GET_METHOD and SET_METHOD define how the value of the parameter is to be get or set by the user. These arguments can have one of the following values: * Name of a field - it means that the value of the parameter is to be get and/or set directly from the object field member. * Name of a method - instead of read or write the value of the parameter from the memory, some object method is called. The GET method should have none arguments (but there is always implicitly defined .self argument). It should return the computed value in EAX register. The SET method should have one argument for the value that have to be set in the parameter. (and .self) * NONE keyword - it means the parameter does not support reading or writing. This way, the user can define read-only or write-only parameters. (And also, parameters that can't be neither read nor write). object TAnimal .length dd ? .height dd ? .weight dd ? .speed dd ? param .Energy, .ComputeEnergy, NONE method .GetEnergy abstract .Jump, .height endobj method TAnimal.GetEnergy begin push ecx mov ecx, [.self] mov eax, [ecx+TAnimal.speed] imul eax, eax imul eax, [ecx+TAnimal.weight] sar eax, 1 ; E = m.v^2/2 pop ecx return endp ## Object inheritance All objects can be inherited by other method definition. The child object contains all members of the parent object and allows adding new members as well. The methods of the child object can be inherited in the child object. This happens when the user defines a method with the same name as already existing method: object TCat, TAnimal method .Jump, .height endobj method TCat.Jump begin ; code that makes the cat jump not as other animals. return endp ## Object use Once defined, the object can be created and destroyed, a values can be set or get and methods call. This functionality is provided by several macros. Notice that they are made to have syntax very similar to CPU instructions and this way to not affect the "look&feel" of the assembly language program. ### Creating object instance. Once defined, the user can create any number of object instances using the macro "create": create TARGET, OBJECT_TYPE This macro creates an object of type OBJECT_TYPE and put it into TARGET. TARGET can be register or memory location create eax, TCat ; put in EAX a pointer to the object instance. create [MyCat], TCat ; put the pointer in [MyCat] The macro create allocates memory for the instance, sets the proper pointer to the methods table and (if defined) executes the method .Create of the object. Create does not change any registers, unles one is set as TARGET. ### Destroying objects If the object instance is no longer needed, it have to be destroyed by using "destroy" macro. destroy OBJECT For example: destroy [MyCat] If the object is descendent of TObject, the method .Destroy is to be called. TObject is some special name that is aimed to be the root type for all objects in FreshLib. Hardcoding this name is because "destroy" method can't know the type of the destroyed object and this way can't check existing of the method .Destroy; ### Object method execution The method of a object can be executed by using "exec" macro: exec OBJECT, TYPE:METHOD, [ARGUMENTS] For example: exec [MyCat], TCat:Jump, 100 There is another macro "pexec" that acts exactly as "exec", but calls not the object method, but the same method from the parent object type (of course if defined). pexec [MyCat], TCat:Jump, 100 ; it will call TAnimal.Jump, instead of ; the re-defined TCat.Jump ### Object parameter get and set: The parameter getting or setting values is by the macros "get" and "set": get TARGET, OBJECT, TYPE:PARAMETER set OBJECT, TYPE:PARAMETER, NEW_VALUE The TARGET and NEW_VALUE can be register or memory variable (as in mov instruction): get ecx, [MyCat], TAnimal:Energy This line will compute the current energy (see the definition of .Energy above) of [MyCat] and will return it in ECX register. Notice, that the code, generated by this macro is optimal. For example if the parameter is associated with a field and the object is passed by register, the whole line will generate single "mov" instruction. "get" and "set" macros will preserve all registers, except TARGET of course. ### Check object type The user can check whether the object belongs to some type by using "istype" macro: istype OBJECT, TYPE This macro returns ZF flag set if the object belongs to the type or ZF cleared if not. It will not change any registers. For example, see following code: ; object types definitions object TAnimal endobj object TCat, TAnimal endobj object TDog, TAnimal endobj ; instance creation create eax, TCat istype eax, TCat je .yes_cat ; ZF=1 It is a TCat int3 .yes_cat: istype eax, TAnimal je .yes_animal ; ZF=1 Also, it is TAnimal int3 .yes_animal: istype eax, TDog je .yes_dog ; ZF=0 but is it NOT TDog. int3 ; will stop here .yes_dog: ## Objects polymorphism. Polymorphism is one of the main properties of the OOP. It is the ability of the object to execute different code on the same method call, depending on its type. In the context of our library, as long as the types inherit all the methods of its parents and can redefine it, it means, that in the above example, TCat and TDog both have method .Jump, inherited from TAnimal. (In this mean, they are both of type TAnimal), but the implementation of TCat.Jump and TDog.Jump differs. This way, we can use only one code to process both types. create eax, TCat create ebx, TDog exec eax, TAnimal:Jump, 100 exec ebx, TAnimal:Jump, 100 You can see, that the same code will call in the first case TCat.Jump and in the second case TDog.Jump; |
Added freshlib/_doc/simpledebug.wiki.
> > > > > > | 1 2 3 4 5 6 | <nowiki> <a name="data"><h1>FreshLib directory: simpledebug</h1></a> <p>This directory contains debugging utilities.</p> </nowiki> |
Added freshlib/_doc/starting.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | <nowiki> <a name="setup"><h2>Setting Up</h2></a> <p>The first thing to do is to download <a href="http://www.flatassembler.net">fasm</a> in your platform of choice. Fasm does not require installation nor do you need special administrative privileges or a root account in order to start using it.</p> <p>The second thing is to get a copy of <a href="http://chiselapp.com/user/johnfound/repository/FreshIDE/zip/FreshLib.zip?uuid=FreshLib">FreshLib</a>. FreshLib is just fasm source code, simply save it in a directory of choice.</p> <p>FreshLib needs an environment variable called <span class="variable">TargetOS</span> in order to know the target platform of the generated application. Currently, the allowed values are: <span class="constant">Win32</span> and <span class="constant">Linux</span>.</p> <p>A second environment variable is suggested called <span class="variable">lib</span> having the full path to FreshLib. The library does not need this, but it will make your own sources more portable.</p> <p>From Linux:</p> <pre class="fasm-code"> export TargetOS=Linux export lib=/home/test/freshlib </pre> <p>From Windows:</p> <pre class="fasm-code"> set TargetOS=Win32 set lib=c:\projects\freshlib </pre> <p>That's all. Now it is time to produce the first FreshLib application using just Fasm.</p> <a name="simplest"><h3>Hello World</h3></a> <pre class="fasm-code"> include '%lib%/compiler/executable.inc' include '%lib%/macros/allmacros.inc' include '%lib%/equates/allequates.inc' _BinaryType console include '%lib%/system/process.asm' include '%lib%/simpledebug/debug.asm' _CodeSection start: InitializeAll DebugMsg 'Hello world!' FinalizeAll call Terminate _ImportSection include '%lib%/imports/allimports.asm' _DataSection IncludeAllGlobals </pre> <p>The most important thing to note is that regardless the platform you have chosen, the code is exactly the same. In other words, if you change the value of your environment variable <span class="variable">TargetOS</span>, the same code will produce a different executable file targeting that platform. This is the main characteristic of the FreshLib and this is the first design criteria that you will want to follow to have a truly platform independent application.</p> <p class="note">This is a highly portable development environment, perhaps the most portable among non interpreted languages. The entire development process could run from removable media and the same set of source code files could be used from Win32 and Linux to produce binaries for either of them.</p> <a name="files"><h3>Creating Files</h3></a> <pre class="fasm-code"> include '%lib%/compiler/executable.inc' include '%lib%/macros/allmacros.inc' include '%lib%/equates/allequates.inc' _BinaryType console include '%lib%/simpledebug/debug.asm' include '%lib%/system/files.asm' include '%lib%/system/process.asm' _CodeSection start: InitializeAll DebugMsg 'FreshLib Tutorials - Module: Files' iglobal filename db './tut01.txt',0 sizeof.filename = $-filename endg uglobal hFile dd ? endg stdcall FileCreate, filename jc .error mov [hFile], eax DebugMsg "A new file was created:" stdcall OutputNumber, [hFile], 16, 2 DebugMsg " is the handle of the file" stdcall FileWrite, [hFile], filename, sizeof.filename jc .error stdcall OutputNumber, eax, 10, 2 DebugMsg " bytes were written into the file" stdcall FileClose, [hFile] jc .error DebugMsg "The file was properly closed" stdcall FileDelete, filename jc .error DebugMsg "The file was finally deleted" jmp .exit .error: DebugMsg "Sorry, an error occurred" .exit: FinalizeAll stdcall Terminate, 0 _ImportSection include '%lib%/imports/allimports.asm' _DataSection IncludeAllGlobals </pre> <a name="console"><h3>Simple Console</h3></a> <pre class="fasm-code"> </pre> <a name="GUI"><h3>Basic GUI</h3></a> <pre class="fasm-code"> </pre> </nowiki> |
Added freshlib/_doc/system.wiki.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | <nowiki> <a name="data"><h1>FreshLib directory: system</h1></a> <p>This directory contains two libraries: "memory.asm" and "files.asm". They constitute the interface to the overlaying system for the rest of the FreshLib modules.</p> <a name="memory"><h2>FreshLib Memory</h2></a> <p>This library contains simple but pretty complete functions for dynamic memory allocation, reallocation and release.</p> <p>The Win32 implementation of the library uses the process heap, returned by GetProcessHeap to manage the memory allocations. Linux implementation uses libc functions: "malloc", "free" and "realloc".</p> <a name="GetMem"><h4>GetMem</h4></a> <pre class="fasm-code"> proc GetMem, .size </pre> <p>This procedure allocates dynamic memory block with size in bytes in the argument <span class="variable">[.size]</span></p> <p>If there is no error the procedure returns <span class="flag">CF=0</span> and pointer to the requested memory in <span class="register">EAX</span>. If the memory cannot be allocated, the procedure returns <span class="flag">CF=1</span></p> <a name="FreeMem"><h4>FreeMem</h4></a> <pre class="fasm-code"> proc FreeMem, .ptr </pre> <p>This procedure frees the memory block pointed by <span class="variable">[.ptr]</span> argument.</p> <a name="ResizeMem"><h4>ResizeMem</h4></a> <pre class="fasm-code"> proc ResizeMem, .ptr, .newsize </pre> <p>This procedure tries to resize the memory block pointed by <span class="variable">[.ptr]</span> to the new size, given by <span class="variable">[.newsize]</span> argument.</p> <a name="files"><h2>FreshLib Files</h2></a> <p>This library provides simple file access procedures.</p> <a name="FileOpen"><h4>FileOpen</h4></a> <pre class="fasm-code"> proc FileOpen, .filename </pre> <p>This procedure opens the file with a filename in the string pointed by <span class="variable">[.filename]</span> argument.</p> <p>On success (<span class="flag">CF=0</span>) <span class="procedure">FileOpen</span> returns a handle of the open file. On error (<span class="flag">CF=1</span>) returns error code.</p> <a name="FileCreate"><h4>FileCreate</h4></a> <pre class="fasm-code"> proc FileCreate, .filename </pre> <p>This procedure creates new empty file with a filename in the string pointed by <span class="variable">[.filename]</span> argument.</p> <p>On success (<span class="flag">CF=0</span>) FileCreate returns a handle of the open file. On error (<span class="flag">CF=1</span>) returns error code in <span class="register">EAX</span>.</p> <a name="FileClose"><h4>FileClose</h4></a> <pre class="fasm-code"> proc FileClose, .handle </pre> <p>This procedure closes the open file with a handle in <span class="variable">[.handle]</span> argument.</p> <p>On success (<span class="flag">CF=0</span>) does not return any value and preserves <span class="register">EAX</span>.</p> <p>On error (<span class="flag">CF=1</span>) returns error code in <span class="register">EAX</span>.</p> <a name="FileRead"><h4>FileRead</h4></a> <pre class="fasm-code"> proc FileRead, .handle, .buffer, .count </pre> <p>This procedure reads <span class="variable">[.count]</span> bytes from the file <span class="variable">[.handle]</span> in the buffer pointed by <span class="variable">[.buffer]</span> arguments.</p> <p>On success (<span class="flag">CF=0</span>) returns the count of actually read bytes in <span class="register">EAX</span>.</p> <p>On error (<span class="flag">CF=1</span>) returns error code in <span class="register">EAX</span>.</p> <a name="FileWrite"><h4>FileWrite</h4></a> <pre class="fasm-code"> proc FileWrite, .handle, .buffer, .count </pre> <p>This procedure writes <span class="variable">[.count]</span> bytes from the buffer pointed by <span class="variable">[.buffer]</span> argument to the file [.handle] that have to be open for write.</p> <p>On success (<span class="flag">CF=0</span>) returns the count of actually read bytes in <span class="register">EAX</span>.</p> <p>On error (<span class="flag">CF=1</span>) returns error code in <span class="register">EAX</span>.</p> <a name="FileSeek"><h4>FileSeek</h4></a> <pre class="fasm-code"> proc FileSeek, .handle, .dist, .direction </pre> <p>This procedure moves the file pointer to the some position. The handle of the file is in <span class="variable">[.handle]</span>, the target position is in <span class="variable">[.dist]</span> and the direction of the move is in <span class="variable">[.direction]</span> arguments.</p> <p><span class="variable">[.direction]</span> accept one of the following values: <span class="constant">fsFromBegin</span>, <span class="constant">fsFromEnd</span> and <span class="constant">fsFromCurrent</span>.</p> <p>The exact values of these constants may vary between different OSes, so the programmer have to use the symbolic names, predefined in "files.asm" library.</p> <p>On success (<span class="flag">CF=0</span>) returns the new position of the file in <span class="register">EAX</span>.</p> <p>On error (<span class="flag">CF=1</span>) returns error code in <span class="register">EAX</span>.</p> <a name="FileDelete"><h4>FileDelete</h4></a> <pre class="fasm-code"> proc FileDelete, .filename </pre> <p>This procedure deletes a file with name in pointed by <span class="variable">[.filename]</span> argument.</p> <p>On success (<span class="flag">CF=0</span>) no value.</p> <p>On error (<span class="flag">CF=1</span>) returns error code in <span class="register">EAX</span>.</p> <a name="GetErrorString"><h4>GetErrorString</h4></a> <pre class="fasm-code"> proc GetErrorString, .code </pre> <p>This procedure returns in <span class="register">EAX</span> a pointer to a human readable error string for the error code passed in <span class="variable">[.code]</span>. The string is dynamically allocated by the OS and should be released after use with the procedure <span class="procedure">FreeErrorString</span>.</p> <a name="FreeErrorString"><h4>FreeErrorString</h4></a> <pre class="fasm-code"> proc FreeErrorString, .ptrString </pre> <p>This procedure frees the memory allocated for error string from the procedure <span class="procedure">GetErrorString</span>.</p> <a name="LoadBinaryFile"><h4>LoadBinaryFile</h4></a> <pre class="fasm-code"> proc LoadBinaryFile, .ptrFileName </pre> <p>This procedure allocates needed memory and loads the whole file with filename pointed by <span class="variable">[.ptrFileName]</span> to the allocated buffer.</p> <p>The memory is allocated with the library <a href="system.html#memory">memory.asm</a>, so the user have to free the memory after use with the procedure <span class="procedure">FreeMem</span>. <p>On success (<span class="flag">CF=0</span>) the procedure returns a pointer to the allocated memory in <span class="register">EAX</span> and the count of bytes read in <span class="register">ECX</span>.</p> <p>On error (<span class="flag">CF=1</span>) the procedure returns nothing.</p> <a name="SaveBinaryFile"><h4>SaveBinaryFile</h4></a> <pre class="fasm-code"> proc SaveBinaryFile, .ptrFileName, .aptr, .size </pre> <p>This procedure creates new file with the name pointed by <span class="variable">[.ptrFileName]</span> and saves <span class="variable">[.size]</span> bytes from the buffer pointed by <span class="variable">[.aptr]</span>.</p> <p>The procedure returns error flag in <span class="flag">CF</span>.</p> <a name="FileExists"><h4>FileExists</h4></a> <pre class="fasm-code"> proc FileExists, .ptrFileName </pre> <p>This procedure checks whether the file with name pointed by <span class="variable">[.ptrFileName]</span> exists on disk.</p> <p>The procedure returns <span class="flag">CF=0</span> if the file exists, otherwise it returns<span class="flag">CF=1</span>.</p> </nowiki> |
Added freshlib/_doc/utf8/CaseFolding.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 | # CaseFolding-6.2.0.txt # Date: 2012-08-14, 17:54:49 GMT [MD] # # Unicode Character Database # Copyright (c) 1991-2012 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see http://www.unicode.org/reports/tr44/ # # Case Folding Properties # # This file is a supplement to the UnicodeData file. # It provides a case folding mapping generated from the Unicode Character Database. # If all characters are mapped according to the full mapping below, then # case differences (according to UnicodeData.txt and SpecialCasing.txt) # are eliminated. # # The data supports both implementations that require simple case foldings # (where string lengths don't change), and implementations that allow full case folding # (where string lengths may grow). Note that where they can be supported, the # full case foldings are superior: for example, they allow "MASSE" and "Maße" to match. # # All code points not listed in this file map to themselves. # # NOTE: case folding does not preserve normalization formats! # # For information on case folding, including how to have case folding # preserve normalization formats, see Section 3.13 Default Case Algorithms in # The Unicode Standard, Version 5.0. # # ================================================================================ # Format # ================================================================================ # The entries in this file are in the following machine-readable format: # # <code>; <status>; <mapping>; # <name> # # The status field is: # C: common case folding, common mappings shared by both simple and full mappings. # F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. # S: simple case folding, mappings to single characters where different from F. # T: special case for uppercase I and dotted uppercase I # - For non-Turkic languages, this mapping is normally not used. # - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. # Note that the Turkic mappings do not maintain canonical equivalence without additional processing. # See the discussions of case mapping in the Unicode Standard for more information. # # Usage: # A. To do a simple case folding, use the mappings with status C + S. # B. To do a full case folding, use the mappings with status C + F. # # The mappings with status T can be used or omitted depending on the desired case-folding # behavior. (The default option is to exclude them.) # # ================================================================= # Property: Case_Folding # All code points not explicitly listed for Case_Folding # have the value C for the status field, and the code point itself for the mapping field. # @missing: 0000..10FFFF; C; <code point> # ================================================================= 0041; C; 0061; # LATIN CAPITAL LETTER A 0042; C; 0062; # LATIN CAPITAL LETTER B 0043; C; 0063; # LATIN CAPITAL LETTER C 0044; C; 0064; # LATIN CAPITAL LETTER D 0045; C; 0065; # LATIN CAPITAL LETTER E 0046; C; 0066; # LATIN CAPITAL LETTER F 0047; C; 0067; # LATIN CAPITAL LETTER G 0048; C; 0068; # LATIN CAPITAL LETTER H 0049; C; 0069; # LATIN CAPITAL LETTER I 0049; T; 0131; # LATIN CAPITAL LETTER I 004A; C; 006A; # LATIN CAPITAL LETTER J 004B; C; 006B; # LATIN CAPITAL LETTER K 004C; C; 006C; # LATIN CAPITAL LETTER L 004D; C; 006D; # LATIN CAPITAL LETTER M 004E; C; 006E; # LATIN CAPITAL LETTER N 004F; C; 006F; # LATIN CAPITAL LETTER O 0050; C; 0070; # LATIN CAPITAL LETTER P 0051; C; 0071; # LATIN CAPITAL LETTER Q 0052; C; 0072; # LATIN CAPITAL LETTER R 0053; C; 0073; # LATIN CAPITAL LETTER S 0054; C; 0074; # LATIN CAPITAL LETTER T 0055; C; 0075; # LATIN CAPITAL LETTER U 0056; C; 0076; # LATIN CAPITAL LETTER V 0057; C; 0077; # LATIN CAPITAL LETTER W 0058; C; 0078; # LATIN CAPITAL LETTER X 0059; C; 0079; # LATIN CAPITAL LETTER Y 005A; C; 007A; # LATIN CAPITAL LETTER Z 00B5; C; 03BC; # MICRO SIGN 00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE 00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE 00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE 00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS 00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE 00C6; C; 00E6; # LATIN CAPITAL LETTER AE 00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA 00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE 00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE 00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS 00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE 00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE 00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS 00D0; C; 00F0; # LATIN CAPITAL LETTER ETH 00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE 00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE 00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE 00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE 00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS 00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE 00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE 00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE 00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS 00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE 00DE; C; 00FE; # LATIN CAPITAL LETTER THORN 00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S 0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON 0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE 0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK 0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE 0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX 010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE 010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON 010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON 0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE 0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON 0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE 0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE 0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK 011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON 011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX 011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE 0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE 0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA 0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE 0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE 012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON 012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE 012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK 0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE 0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE 0132; C; 0133; # LATIN CAPITAL LIGATURE IJ 0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX 0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA 0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE 013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA 013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON 013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT 0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE 0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE 0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA 0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON 0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE 014A; C; 014B; # LATIN CAPITAL LETTER ENG 014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON 014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE 0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0152; C; 0153; # LATIN CAPITAL LIGATURE OE 0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE 0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA 0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON 015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE 015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX 015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA 0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON 0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA 0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON 0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE 0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE 016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON 016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE 016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE 0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK 0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX 0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS 0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE 017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE 017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON 017F; C; 0073; # LATIN SMALL LETTER LONG S 0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK 0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR 0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX 0186; C; 0254; # LATIN CAPITAL LETTER OPEN O 0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK 0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D 018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK 018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR 018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E 018F; C; 0259; # LATIN CAPITAL LETTER SCHWA 0190; C; 025B; # LATIN CAPITAL LETTER OPEN E 0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK 0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK 0194; C; 0263; # LATIN CAPITAL LETTER GAMMA 0196; C; 0269; # LATIN CAPITAL LETTER IOTA 0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE 0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK 019C; C; 026F; # LATIN CAPITAL LETTER TURNED M 019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK 019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE 01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN 01A2; C; 01A3; # LATIN CAPITAL LETTER OI 01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK 01A6; C; 0280; # LATIN LETTER YR 01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO 01A9; C; 0283; # LATIN CAPITAL LETTER ESH 01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK 01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK 01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN 01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON 01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK 01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK 01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE 01B7; C; 0292; # LATIN CAPITAL LETTER EZH 01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED 01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE 01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON 01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON 01C7; C; 01C9; # LATIN CAPITAL LETTER LJ 01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J 01CA; C; 01CC; # LATIN CAPITAL LETTER NJ 01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J 01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON 01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON 01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON 01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON 01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON 01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON 01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE 01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON 01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON 01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK 01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON 01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON 01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON 01F1; C; 01F3; # LATIN CAPITAL LETTER DZ 01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z 01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE 01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR 01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN 01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE 01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE 01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE 0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE 0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE 0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE 0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE 020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE 020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE 020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE 0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE 0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE 0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE 0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE 0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW 021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW 021C; C; 021D; # LATIN CAPITAL LETTER YOGH 021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON 0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG 0222; C; 0223; # LATIN CAPITAL LETTER OU 0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK 0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE 0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA 022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON 022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE 0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON 0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON 023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE 023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE 023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR 023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE 0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP 0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE 0244; C; 0289; # LATIN CAPITAL LETTER U BAR 0245; C; 028C; # LATIN CAPITAL LETTER TURNED V 0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE 0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE 024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL 024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE 024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE 0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI 0370; C; 0371; # GREEK CAPITAL LETTER HETA 0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI 0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA 0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS 0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS 0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS 038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS 038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS 038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS 038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS 0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA 0392; C; 03B2; # GREEK CAPITAL LETTER BETA 0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA 0394; C; 03B4; # GREEK CAPITAL LETTER DELTA 0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON 0396; C; 03B6; # GREEK CAPITAL LETTER ZETA 0397; C; 03B7; # GREEK CAPITAL LETTER ETA 0398; C; 03B8; # GREEK CAPITAL LETTER THETA 0399; C; 03B9; # GREEK CAPITAL LETTER IOTA 039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA 039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA 039C; C; 03BC; # GREEK CAPITAL LETTER MU 039D; C; 03BD; # GREEK CAPITAL LETTER NU 039E; C; 03BE; # GREEK CAPITAL LETTER XI 039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON 03A0; C; 03C0; # GREEK CAPITAL LETTER PI 03A1; C; 03C1; # GREEK CAPITAL LETTER RHO 03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA 03A4; C; 03C4; # GREEK CAPITAL LETTER TAU 03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON 03A6; C; 03C6; # GREEK CAPITAL LETTER PHI 03A7; C; 03C7; # GREEK CAPITAL LETTER CHI 03A8; C; 03C8; # GREEK CAPITAL LETTER PSI 03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA 03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA 03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL 03D0; C; 03B2; # GREEK BETA SYMBOL 03D1; C; 03B8; # GREEK THETA SYMBOL 03D5; C; 03C6; # GREEK PHI SYMBOL 03D6; C; 03C0; # GREEK PI SYMBOL 03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA 03DA; C; 03DB; # GREEK LETTER STIGMA 03DC; C; 03DD; # GREEK LETTER DIGAMMA 03DE; C; 03DF; # GREEK LETTER KOPPA 03E0; C; 03E1; # GREEK LETTER SAMPI 03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI 03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI 03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI 03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI 03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA 03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA 03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI 03F0; C; 03BA; # GREEK KAPPA SYMBOL 03F1; C; 03C1; # GREEK RHO SYMBOL 03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL 03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL 03F7; C; 03F8; # GREEK CAPITAL LETTER SHO 03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL 03FA; C; 03FB; # GREEK CAPITAL LETTER SAN 03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL 03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL 03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL 0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE 0401; C; 0451; # CYRILLIC CAPITAL LETTER IO 0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE 0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE 0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE 0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE 0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0407; C; 0457; # CYRILLIC CAPITAL LETTER YI 0408; C; 0458; # CYRILLIC CAPITAL LETTER JE 0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE 040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE 040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE 040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE 040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE 040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U 040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE 0410; C; 0430; # CYRILLIC CAPITAL LETTER A 0411; C; 0431; # CYRILLIC CAPITAL LETTER BE 0412; C; 0432; # CYRILLIC CAPITAL LETTER VE 0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE 0414; C; 0434; # CYRILLIC CAPITAL LETTER DE 0415; C; 0435; # CYRILLIC CAPITAL LETTER IE 0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE 0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE 0418; C; 0438; # CYRILLIC CAPITAL LETTER I 0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I 041A; C; 043A; # CYRILLIC CAPITAL LETTER KA 041B; C; 043B; # CYRILLIC CAPITAL LETTER EL 041C; C; 043C; # CYRILLIC CAPITAL LETTER EM 041D; C; 043D; # CYRILLIC CAPITAL LETTER EN 041E; C; 043E; # CYRILLIC CAPITAL LETTER O 041F; C; 043F; # CYRILLIC CAPITAL LETTER PE 0420; C; 0440; # CYRILLIC CAPITAL LETTER ER 0421; C; 0441; # CYRILLIC CAPITAL LETTER ES 0422; C; 0442; # CYRILLIC CAPITAL LETTER TE 0423; C; 0443; # CYRILLIC CAPITAL LETTER U 0424; C; 0444; # CYRILLIC CAPITAL LETTER EF 0425; C; 0445; # CYRILLIC CAPITAL LETTER HA 0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE 0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE 0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA 0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA 042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN 042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU 042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN 042D; C; 044D; # CYRILLIC CAPITAL LETTER E 042E; C; 044E; # CYRILLIC CAPITAL LETTER YU 042F; C; 044F; # CYRILLIC CAPITAL LETTER YA 0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA 0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT 0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E 0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS 0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS 046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS 046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS 046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI 0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI 0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA 0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA 0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT 0478; C; 0479; # CYRILLIC CAPITAL LETTER UK 047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA 047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO 047E; C; 047F; # CYRILLIC CAPITAL LETTER OT 0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA 048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL 048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN 048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK 0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN 0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE 0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK 0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER 0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER 049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER 049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE 049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE 04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA 04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER 04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE 04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK 04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA 04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER 04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER 04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U 04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE 04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER 04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE 04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER 04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE 04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA 04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE 04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER 04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA 04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE 04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK 04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL 04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK 04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL 04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE 04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL 04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE 04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS 04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE 04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE 04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA 04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS 04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS 04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS 04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE 04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON 04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS 04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS 04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O 04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS 04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS 04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON 04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS 04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE 04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS 04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER 04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS 04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK 04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK 04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE 0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE 0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE 0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE 0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE 0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE 050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE 050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE 050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE 0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE 0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK 0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA 0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA 0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE 051A; C; 051B; # CYRILLIC CAPITAL LETTER QA 051C; C; 051D; # CYRILLIC CAPITAL LETTER WE 051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA 0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK 0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK 0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER 0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER 0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB 0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN 0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM 0534; C; 0564; # ARMENIAN CAPITAL LETTER DA 0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH 0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA 0537; C; 0567; # ARMENIAN CAPITAL LETTER EH 0538; C; 0568; # ARMENIAN CAPITAL LETTER ET 0539; C; 0569; # ARMENIAN CAPITAL LETTER TO 053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE 053B; C; 056B; # ARMENIAN CAPITAL LETTER INI 053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN 053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH 053E; C; 056E; # ARMENIAN CAPITAL LETTER CA 053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN 0540; C; 0570; # ARMENIAN CAPITAL LETTER HO 0541; C; 0571; # ARMENIAN CAPITAL LETTER JA 0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD 0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH 0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN 0545; C; 0575; # ARMENIAN CAPITAL LETTER YI 0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW 0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA 0548; C; 0578; # ARMENIAN CAPITAL LETTER VO 0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA 054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH 054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH 054C; C; 057C; # ARMENIAN CAPITAL LETTER RA 054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH 054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW 054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN 0550; C; 0580; # ARMENIAN CAPITAL LETTER REH 0551; C; 0581; # ARMENIAN CAPITAL LETTER CO 0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN 0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR 0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH 0555; C; 0585; # ARMENIAN CAPITAL LETTER OH 0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH 0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN 10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN 10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN 10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN 10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON 10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN 10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN 10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN 10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN 10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN 10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN 10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS 10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN 10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR 10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON 10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR 10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR 10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE 10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN 10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR 10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN 10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR 10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR 10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN 10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR 10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN 10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN 10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN 10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL 10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL 10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR 10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN 10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN 10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE 10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE 10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE 10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE 10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR 10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE 10C7; C; 2D27; # GEORGIAN CAPITAL LETTER YN 10CD; C; 2D2D; # GEORGIAN CAPITAL LETTER AEN 1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW 1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE 1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW 1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW 1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE 1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE 1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW 1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW 1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA 1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW 1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE 1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE 1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW 1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW 1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE 1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE 1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON 1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE 1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW 1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS 1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA 1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW 1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW 1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE 1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE 1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW 1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW 1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW 1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON 1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW 1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW 1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE 1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE 1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW 1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE 1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW 1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW 1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW 1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE 1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS 1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE 1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE 1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE 1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE 1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE 1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW 1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON 1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW 1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE 1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW 1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE 1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE 1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE 1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE 1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW 1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW 1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW 1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW 1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW 1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW 1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE 1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS 1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE 1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW 1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE 1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE 1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS 1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE 1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW 1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE 1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS 1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE 1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX 1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW 1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW 1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW 1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS 1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE 1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE 1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING 1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE 1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S 1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S 1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW 1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE 1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE 1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE 1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE 1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE 1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE 1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW 1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW 1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE 1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE 1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE 1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW 1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW 1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE 1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE 1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE 1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE 1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE 1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW 1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW 1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE 1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE 1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE 1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE 1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE 1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW 1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE 1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW 1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE 1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE 1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL 1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V 1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP 1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI 1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA 1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA 1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA 1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA 1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA 1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI 1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI 1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI 1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA 1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA 1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA 1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA 1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA 1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI 1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA 1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA 1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA 1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA 1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA 1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI 1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI 1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI 1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA 1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA 1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA 1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA 1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA 1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI 1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI 1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI 1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA 1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA 1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA 1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA 1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA 1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI 1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA 1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA 1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI 1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA 1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA 1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA 1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI 1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI 1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA 1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA 1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA 1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA 1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA 1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI 1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI 1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI 1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI 1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI 1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI 1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI 1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI 1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI 1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI 1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI 1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI 1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI 1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI 1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI 1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI 1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI 1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI 1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI 1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI 1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI 1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI 1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI 1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI 1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI 1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY 1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON 1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA 1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA 1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 1FBE; C; 03B9; # GREEK PROSGEGRAMMENI 1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI 1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI 1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI 1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI 1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI 1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA 1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA 1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA 1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA 1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA 1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI 1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI 1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY 1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON 1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA 1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA 1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA 1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI 1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI 1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI 1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY 1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON 1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA 1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA 1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA 1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI 1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI 1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI 1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI 1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA 1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA 1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA 1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA 1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI 1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI 2126; C; 03C9; # OHM SIGN 212A; C; 006B; # KELVIN SIGN 212B; C; 00E5; # ANGSTROM SIGN 2132; C; 214E; # TURNED CAPITAL F 2160; C; 2170; # ROMAN NUMERAL ONE 2161; C; 2171; # ROMAN NUMERAL TWO 2162; C; 2172; # ROMAN NUMERAL THREE 2163; C; 2173; # ROMAN NUMERAL FOUR 2164; C; 2174; # ROMAN NUMERAL FIVE 2165; C; 2175; # ROMAN NUMERAL SIX 2166; C; 2176; # ROMAN NUMERAL SEVEN 2167; C; 2177; # ROMAN NUMERAL EIGHT 2168; C; 2178; # ROMAN NUMERAL NINE 2169; C; 2179; # ROMAN NUMERAL TEN 216A; C; 217A; # ROMAN NUMERAL ELEVEN 216B; C; 217B; # ROMAN NUMERAL TWELVE 216C; C; 217C; # ROMAN NUMERAL FIFTY 216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED 216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED 216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND 2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED 24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A 24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B 24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C 24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D 24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E 24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F 24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G 24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H 24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I 24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J 24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K 24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L 24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M 24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N 24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O 24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P 24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q 24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R 24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S 24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T 24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U 24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V 24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W 24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X 24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y 24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z 2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU 2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY 2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE 2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI 2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO 2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU 2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE 2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO 2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA 2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE 2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE 2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I 2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI 2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO 2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE 2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE 2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI 2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU 2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI 2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI 2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO 2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO 2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU 2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU 2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU 2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU 2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE 2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA 2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI 2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI 2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA 2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU 2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI 2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI 2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA 2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU 2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS 2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL 2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO 2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS 2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS 2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS 2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA 2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA 2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC 2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A 2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE 2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE 2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE 2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL 2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER 2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER 2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER 2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA 2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK 2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A 2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA 2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK 2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H 2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL 2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL 2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA 2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA 2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA 2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA 2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE 2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU 2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA 2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE 2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE 2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA 2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA 2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA 2C98; C; 2C99; # COPTIC CAPITAL LETTER MI 2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI 2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI 2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O 2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI 2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO 2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA 2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU 2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA 2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI 2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI 2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI 2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU 2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF 2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN 2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE 2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA 2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI 2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI 2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU 2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI 2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI 2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI 2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH 2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI 2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI 2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI 2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA 2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA 2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI 2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT 2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA 2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA 2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA 2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA 2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI 2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI 2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU 2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI 2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA 2CF2; C; 2CF3; # COPTIC CAPITAL LETTER BOHAIRIC KHEI A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O A680; C; A681; # CYRILLIC CAPITAL LETTER DWE A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE A694; C; A695; # CYRILLIC CAPITAL LETTER HWE A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN A726; C; A727; # LATIN CAPITAL LETTER HENG A728; C; A729; # LATIN CAPITAL LETTER TZ A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA A732; C; A733; # LATIN CAPITAL LETTER AA A734; C; A735; # LATIN CAPITAL LETTER AO A736; C; A737; # LATIN CAPITAL LETTER AU A738; C; A739; # LATIN CAPITAL LETTER AV A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR A73C; C; A73D; # LATIN CAPITAL LETTER AY A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE A746; C; A747; # LATIN CAPITAL LETTER BROKEN L A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP A74E; C; A74F; # LATIN CAPITAL LETTER OO A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE A760; C; A761; # LATIN CAPITAL LETTER VY A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER A768; C; A769; # LATIN CAPITAL LETTER VEND A76A; C; A76B; # LATIN CAPITAL LETTER ET A76C; C; A76D; # LATIN CAPITAL LETTER IS A76E; C; A76F; # LATIN CAPITAL LETTER CON A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G A780; C; A781; # LATIN CAPITAL LETTER TURNED L A782; C; A783; # LATIN CAPITAL LETTER INSULAR R A784; C; A785; # LATIN CAPITAL LETTER INSULAR S A786; C; A787; # LATIN CAPITAL LETTER INSULAR T A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER A792; C; A793; # LATIN CAPITAL LETTER C WITH BAR A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE A7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z 10400; C; 10428; # DESERET CAPITAL LETTER LONG I 10401; C; 10429; # DESERET CAPITAL LETTER LONG E 10402; C; 1042A; # DESERET CAPITAL LETTER LONG A 10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH 10404; C; 1042C; # DESERET CAPITAL LETTER LONG O 10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO 10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I 10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E 10408; C; 10430; # DESERET CAPITAL LETTER SHORT A 10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH 1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O 1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO 1040C; C; 10434; # DESERET CAPITAL LETTER AY 1040D; C; 10435; # DESERET CAPITAL LETTER OW 1040E; C; 10436; # DESERET CAPITAL LETTER WU 1040F; C; 10437; # DESERET CAPITAL LETTER YEE 10410; C; 10438; # DESERET CAPITAL LETTER H 10411; C; 10439; # DESERET CAPITAL LETTER PEE 10412; C; 1043A; # DESERET CAPITAL LETTER BEE 10413; C; 1043B; # DESERET CAPITAL LETTER TEE 10414; C; 1043C; # DESERET CAPITAL LETTER DEE 10415; C; 1043D; # DESERET CAPITAL LETTER CHEE 10416; C; 1043E; # DESERET CAPITAL LETTER JEE 10417; C; 1043F; # DESERET CAPITAL LETTER KAY 10418; C; 10440; # DESERET CAPITAL LETTER GAY 10419; C; 10441; # DESERET CAPITAL LETTER EF 1041A; C; 10442; # DESERET CAPITAL LETTER VEE 1041B; C; 10443; # DESERET CAPITAL LETTER ETH 1041C; C; 10444; # DESERET CAPITAL LETTER THEE 1041D; C; 10445; # DESERET CAPITAL LETTER ES 1041E; C; 10446; # DESERET CAPITAL LETTER ZEE 1041F; C; 10447; # DESERET CAPITAL LETTER ESH 10420; C; 10448; # DESERET CAPITAL LETTER ZHEE 10421; C; 10449; # DESERET CAPITAL LETTER ER 10422; C; 1044A; # DESERET CAPITAL LETTER EL 10423; C; 1044B; # DESERET CAPITAL LETTER EM 10424; C; 1044C; # DESERET CAPITAL LETTER EN 10425; C; 1044D; # DESERET CAPITAL LETTER ENG 10426; C; 1044E; # DESERET CAPITAL LETTER OI 10427; C; 1044F; # DESERET CAPITAL LETTER EW # # EOF |
Added freshlib/_doc/utf8/DerivedCoreProperties.txt.
more than 10,000 changes
Added freshlib/_doc/utf8/SpecialCasing.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | # SpecialCasing-6.2.0.txt # Date: 2012-05-23, 20:35:15 GMT [MD] # # Unicode Character Database # Copyright (c) 1991-2012 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see http://www.unicode.org/reports/tr44/ # # Special Casing Properties # # This file is a supplement to the UnicodeData file. # It contains additional information about the casing of Unicode characters. # (For compatibility, the UnicodeData.txt file only contains case mappings for # characters where they are 1-1, and independent of context and language. # For more information, see the discussion of Case Mappings in the Unicode Standard. # # All code points not listed in this file that do not have a simple case mappings # in UnicodeData.txt map to themselves. # ================================================================================ # Format # ================================================================================ # The entries in this file are in the following machine-readable format: # # <code>; <lower> ; <title> ; <upper> ; (<condition_list> ;)? # <comment> # # <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more # than one character, they are separated by spaces. Other than as used to separate # elements, spaces are to be ignored. # # The <condition_list> is optional. Where present, it consists of one or more language IDs # or contexts, separated by spaces. In these conditions: # - A condition list overrides the normal behavior if all of the listed conditions are true. # - The context is always the context of the characters in the original string, # NOT in the resulting string. # - Case distinctions in the condition list are not significant. # - Conditions preceded by "Not_" represent the negation of the condition. # The condition list is not represented in the UCD as a formal property. # # A language ID is defined by BCP 47, with '-' and '_' treated equivalently. # # A context for a character C is defined by Section 3.13 Default Case # Operations, of The Unicode Standard, Version 5.0. # (This is identical to the context defined by Unicode 4.1.0, # as specified in http://www.unicode.org/versions/Unicode4.1.0/) # # Parsers of this file must be prepared to deal with future additions to this format: # * Additional contexts # * Additional fields # ================================================================================ # @missing: 0000..10FFFF; <slc>; <stc>; <suc>; # ================================================================================ # Unconditional mappings # ================================================================================ # The German es-zed is special--the normal mapping is to SS. # Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>)) 00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S # Preserve canonical equivalence for I with dot. Turkic is handled below. 0130; 0069 0307; 0130; 0130; # LATIN CAPITAL LETTER I WITH DOT ABOVE # Ligatures FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST 0587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH # No corresponding uppercase precomposed character 0149; 0149; 02BC 004E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE 0390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 03B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 01F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON 1E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW 1E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS 1E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE 1E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE 1E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING 1F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI 1F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA 1F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA 1F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI 1FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI 1FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI 1FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA 1FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 1FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI 1FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI 1FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA 1FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 1FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI 1FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI 1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI 1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI # IMPORTANT-when iota-subscript (0345) is uppercased or titlecased, # the result will be incorrect unless the iota-subscript is moved to the end # of any sequence of combining marks. Otherwise, the accents will go on the capital iota. # This process can be achieved by first transforming the text to NFC before casing. # E.g. <alpha><iota_subscript><acute> is uppercased to <ALPHA><acute><IOTA> # The following cases are already in the UnicodeData file, so are only commented here. # 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI # All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript) # have special uppercases. # Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase! 1F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI 1F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI 1F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI 1F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI 1F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI 1F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI 1F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI 1F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI 1F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI 1FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI 1FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI 1FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI 1FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI 1FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 1FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI 1FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI 1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI # Some characters with YPOGEGRAMMENI also have no corresponding titlecases 1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI 1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI 1FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI 1FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI 1FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI 1FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 1FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI 1FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI 1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI # ================================================================================ # Conditional Mappings # The remainder of this file provides conditional casing data used to produce # full case mappings. # ================================================================================ # Language-Insensitive Mappings # These are characters whose full case mappings do not depend on language, but do # depend on context (which characters come before or after). For more information # see the header of this file and the Unicode Standard. # ================================================================================ # Special case for final form of sigma 03A3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK CAPITAL LETTER SIGMA # Note: the following cases for non-final are already in the UnicodeData file. # 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA # 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA # 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA # Note: the following cases are not included, since they would case-fold in lowercasing # 03C3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK SMALL LETTER SIGMA # 03C2; 03C3; 03A3; 03A3; Not_Final_Sigma; # GREEK SMALL LETTER FINAL SIGMA # ================================================================================ # Language-Sensitive Mappings # These are characters whose full case mappings depend on language and perhaps also # context (which characters come before or after). For more information # see the header of this file and the Unicode Standard. # ================================================================================ # Lithuanian # Lithuanian retains the dot in a lowercase i when followed by accents. # Remove DOT ABOVE after "i" with upper or titlecase 0307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE # Introduce an explicit dot above when lowercasing capital I's and J's # whenever there are more accents above. # (of the accents used in Lithuanian: grave, acute, tilde above, and ogonek) 0049; 0069 0307; 0049; 0049; lt More_Above; # LATIN CAPITAL LETTER I 004A; 006A 0307; 004A; 004A; lt More_Above; # LATIN CAPITAL LETTER J 012E; 012F 0307; 012E; 012E; lt More_Above; # LATIN CAPITAL LETTER I WITH OGONEK 00CC; 0069 0307 0300; 00CC; 00CC; lt; # LATIN CAPITAL LETTER I WITH GRAVE 00CD; 0069 0307 0301; 00CD; 00CD; lt; # LATIN CAPITAL LETTER I WITH ACUTE 0128; 0069 0307 0303; 0128; 0128; lt; # LATIN CAPITAL LETTER I WITH TILDE # ================================================================================ # Turkish and Azeri # I and i-dotless; I-dot and i are case pairs in Turkish and Azeri # The following rules handle those cases. 0130; 0069; 0130; 0130; tr; # LATIN CAPITAL LETTER I WITH DOT ABOVE 0130; 0069; 0130; 0130; az; # LATIN CAPITAL LETTER I WITH DOT ABOVE # When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i. # This matches the behavior of the canonically equivalent I-dot_above 0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE 0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE # When lowercasing, unless an I is before a dot_above, it turns into a dotless i. 0049; 0131; 0049; 0049; tr Not_Before_Dot; # LATIN CAPITAL LETTER I 0049; 0131; 0049; 0049; az Not_Before_Dot; # LATIN CAPITAL LETTER I # When uppercasing, i turns into a dotted capital I 0069; 0069; 0130; 0130; tr; # LATIN SMALL LETTER I 0069; 0069; 0130; 0130; az; # LATIN SMALL LETTER I # Note: the following case is already in the UnicodeData file. # 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I # EOF |
Added freshlib/_doc/utf8/UnicodeData.txt.
more than 10,000 changes
Deleted freshlib/_pending/lzss/readme.txt.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/_pending/lzss/source/bits.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/_pending/lzss/source/bits.inc.
|
| < < < < < |
Deleted freshlib/_pending/lzss/source/cmdln.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/_pending/lzss/source/lzss.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/_pending/lzss/source/lzss.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/_pending/lzss/source/lzsspack.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/_pending/lzss/source/lzsspack.fpr.
cannot compute difference between binary files
Deleted freshlib/_pending/lzss/source/lzssstat.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/_pending/lzss/source/lzssstat.inc.
Deleted freshlib/_test_images/test.gif.
cannot compute difference between binary files
Changes to freshlib/_trash/Common/header.inc.
|
| | | < < | | < > > > | < > | < < < < < > | < < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: ; ; Target OS: ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ |
Added freshlib/_trash/SurplusSources/ForthScript/ForthLib.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: ForthScript standard word library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ macro ForthBlock blockname { forth@block equ blockname forth@block@size equ blockname#.size label blockname byte macro forthword name \{ \local nnnn macro endfw \\{ \\local ..footer endp label ..footer byte db name db 16-($-..footer) dup 0 dd nnnn - blockname \\purge endfw \\} \proc nnnn \} } macro EndForthBlock { forth@block@size = $ - forth@block restore forth@block, forth@block@size purge forthword } ForthBlock ForthStandardLib ; "->" word. forthword '->' begin or [ebx+TForthContext.Status], forthAssignMode clc retn endfw forthword '+' begin mov eax, [ebx+TForthContext.pAStack] mov ecx, [eax+TArray.count] cmp ecx, 2 jb .error dec ecx imul ecx, [eax+TArray.itemsize] lea ecx, [eax+TArray.array+ecx] mov edx, [ecx+TFStackCell.value] sub ecx, [eax+TArray.itemsize] add [ecx+TFStackCell.value], edx mov [ecx+TFStackCell.type], ftypeNumber mov ecx, [eax+TArray.count] dec ecx stdcall DeleteArrayItem, [ebx+TForthContext.pAStack], ecx mov [ebx+TForthContext.pAStack], edx clc return .error: stc return endfw forthword '-' begin mov eax, [ebx+TForthContext.pAStack] mov ecx, [eax+TArray.count] cmp ecx, 2 jb .error dec ecx imul ecx, [eax+TArray.itemsize] lea ecx, [eax+TArray.array+ecx] mov edx, [ecx+TFStackCell.value] sub ecx, [eax+TArray.itemsize] sub [ecx+TFStackCell.value], edx mov [ecx+TFStackCell.type], ftypeNumber mov ecx, [eax+TArray.count] dec ecx stdcall DeleteArrayItem, [ebx+TForthContext.pAStack], ecx mov [ebx+TForthContext.pAStack], edx clc return .error: stc return endfw forthword '*' begin mov eax, [ebx+TForthContext.pAStack] mov ecx, [eax+TArray.count] cmp ecx, 2 jb .error dec ecx imul ecx, [eax+TArray.itemsize] lea ecx, [eax+TArray.array+ecx] mov edx, [ecx+TFStackCell.value] sub ecx, [eax+TArray.itemsize] imul edx, [ecx+TFStackCell.value] mov [ecx+TFStackCell.value], edx mov [ecx+TFStackCell.type], ftypeNumber mov ecx, [eax+TArray.count] dec ecx stdcall DeleteArrayItem, [ebx+TForthContext.pAStack], ecx mov [ebx+TForthContext.pAStack], edx clc return .error: stc return endfw forthword '/' begin mov eax, [ebx+TForthContext.pAStack] mov ecx, [eax+TArray.count] cmp ecx, 2 jb .error dec ecx imul ecx, [eax+TArray.itemsize] lea ecx, [eax+TArray.array+ecx] mov edx, [ecx+TFStackCell.value] sub ecx, [eax+TArray.itemsize] push eax mov eax, edx cdq idiv [ecx+TFStackCell.value] mov [ecx+TFStackCell.value], eax mov [ecx+TFStackCell.type], ftypeNumber pop eax mov ecx, [eax+TArray.count] dec ecx stdcall DeleteArrayItem, [ebx+TForthContext.pAStack], ecx mov [ebx+TForthContext.pAStack], edx clc return .error: stc return endfw forthword '%' begin mov eax, [ebx+TForthContext.pAStack] mov ecx, [eax+TArray.count] cmp ecx, 2 jb .error dec ecx shl ecx, 3 lea ecx, [eax+TArray.array+ecx] mov edx, [ecx+TFStackCell.value] sub ecx, [eax+TArray.itemsize] push eax mov eax, edx cdq idiv [ecx+TFStackCell.value] mov [ecx+TFStackCell.value], eax mov [ecx+TFStackCell.type], ftypeNumber pop eax mov ecx, [eax+TArray.count] dec ecx stdcall DeleteArrayItem, [ebx+TForthContext.pAStack], ecx mov [ebx+TForthContext.pAStack], edx clc return .error: stc return endfw forthword 'swap' begin mov eax, [ebx+TForthContext.pAStack] mov ecx, [eax+TArray.count] cmp ecx, 2 jb .finish ; jb == jc shl ecx, 3 add ecx, [ebx+TForthContext.pAStack] ; lea ecx, [ecx+TArray.array-2*sizeof.TFStackCell] TArray.array = 2*sizeof.TFStackCell mov eax, [ecx+TFStackCell.value] mov edx, dword [ecx+TFStackCell.type] xchg eax, [ecx+sizeof.TFStackCell+TFStackCell.value] xchg edx, dword [ecx+sizeof.TFStackCell+TFStackCell.type] mov [ecx+TFStackCell.value], ecx mov dword [ecx+TFStackCell.type], edx clc .finish: return endfw forthword 'dup' begin mov eax, [ebx+TForthContext.pAStack] mov ecx, [eax+TArray.count] cmp ecx, 1 jb .finish ; jb == jc shl ecx, 3 add ecx, [ebx+TForthContext.pAStack] lea ecx, [ecx+TArray.array-sizeof.TFStackCell] stdcall AddArrayItem, [ebx+TForthContext.pAStack] mov [ebx+TForthContext.pAStack], edx jc .finish pushd [ecx+TFStackCell.value] dword [ecx+TFStackCell.type] popd dword [eax+TFStackCell.type] [eax+TFStackCell.value] clc .finish: return endfw forthword 'label' begin endfw forthword 'jump' begin endfw forthword '?branch' begin endfw ; : if +1 ?branch ; forthword 'if' begin endfw ; : else label not +1 ?branch ; forthword 'else' begin endfw ; : then label ; forthword 'then' begin endfw ; : do label ; forthword 'do' begin endfw ; : loop -1 ?branch ; forthword 'loop' forthword '.' begin mov eax, [ebx+TForthContext.pAStack] mov ecx, [eax+TArray.count] jecxz .exit dec ecx mov edx, ecx imul ecx, [eax+TArray.itemsize] lea ecx, [eax+TArray.array+ecx] cmp [ecx+TFStackCell.type], ftypeNumber jne .printstring stdcall NumToStr, [ecx+TFStackCell.value], ntsSigned or ntsDec mov [ecx+TFStackCell.value], eax mov [ecx+TFStackCell.type], ftypeStringFree .printstring: stdcall StrPtr, [ecx+TFStackCell.value] stdcall Output, eax cmp [ecx+TFStackCell.type], ftypeStringFree jne .popit stdcall StrDel, [ecx+TFStackCell.value] .popit: stdcall DeleteArrayItem, [ebx+TForthContext.pAStack], edx mov [ebx+TForthContext.pAStack], edx .exit: clc return endfw forthword 'crlf' begin stdcall Output, sCRLF clc return endfw EndForthBlock sCRLF db 13, 10, 0, 0 |
Added freshlib/_trash/SurplusSources/ForthScript/ForthScript.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: ForthScript engine. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ module "Forth script compiler" include 'ForthLib.asm' ; NOTE: E8 is the opcode for relative call ; B8 is the opcode for mov eax, dword const ; BA is the opcode for mov edx, dword const ; FF D0 is the opcode for call eax ; C3 is the opcode for retn ; e9 is the opcode for jmp long offset ftypeNumber = 0 ftypeString = 1 ftypeStringFree = 2 ; this string should be destroyed after use. struct TFStackCell .value dd ? ; number or handle of the string. .type db ? ; number/string align 4 ends struct TFLoopStackCell ends struct TFWordFooter .name rb 16 ; max 12 bytes name paded with 0 .entry dd ? ; offset to the code of the word [.entry]-4 points to the footer of the previous word. ends ; values for the Status flags. forthCompileMode = 1 ; if set the script is compiled instead of interpreted forthNextNewName = 2 ; if set the next extracted word should be interpreted as a new name. forthAssignMode = 4 ; if set the next variable word must pop value from the stack, instead of push. struct TForthContext .pAStack dd ? ; pointer to the aritmetic stack TArray. .pLStack dd ? ; pointer to the loop stack TArray. .pWords dd ? ; pointer to the words memory. .iWords dd ? ; offset to the first free byte in the words memory. .iLastWord dd ? ; offset to the end of the last word defined. .sizeWords dd ? ; size of the words memory. .Status dd ? .pUserWords dd ? ; pointer to the user words memory. .iUserWords dd ? ; offset of the end of the user word memory. .pUser dd ? ; pointer to the user provided object for example TFreshEdit or other. ends ForthInitWordsMemory = 1024 proc ForthCreateContext begin push edi stdcall GetMem, sizeof.TForthContext mov edi, eax stdcall CreateArray, sizeof.TFStackCell mov [edi+TForthContext.pAStack], eax stdcall CreateArray, sizeof.TFLoopStackCell mov [edi+TForthContext.pLStack], eax mov [edi+TForthContext.sizeWords], ForthInitWordsMemory stdcall GetMem, [edi+TForthContext.sizeWords] mov [edi+TForthContext.pWords], eax mov eax, edi pop edi return endp proc ForthFreeContext, .forth_context begin return endp ferrSyntaxError = 1 ferrUnknownWord = 2 ferrOutOfMemory = 3 ferrInvalidNumber = 4 ferrInvalidString = 5 ferrMissingBracket = 6 ferrMaxError = 6 dmsgEndWithoutBegin db 'Syntax error', 0 dmsgUnknownWord db 'Unknown word', 0 dmsgOutOfMemory db 'Out of memory', 0 dmsgInvalidNumber db 'Invalid number', 0 dmsgInvalidString db 'Invalid string', 0 dmsgMissingBracket db 'Missing ")"', 0 dmsgUnknownError db 'Unknown error. Probably bug.', 0 ForthErrorMessages dd 0 dd dmsgEndWithoutBegin dd dmsgUnknownWord dd dmsgOutOfMemory dd dmsgInvalidNumber dd dmsgInvalidString dd dmsgMissingBracket ; this should be last. dd dmsgUnknownError proc GetForthErrorMsg, .errcode begin mov eax, [.errcode] cmp eax, ferrMaxError jbe @f mov eax, ferrMaxError+1 @@: mov eax, [ForthErrorMessages+4*eax] return endp proc ForthExecScript, .pcontext, .psource .word rb 16 .newword rb 16 .entry dd ? ; the entry point of the currently compiled word. .ofs_error dd ? .sign dd ? begin push ebx ecx esi edi mov ebx, [.pcontext] mov esi, [.psource] .script_loop: xor eax, eax mov dword [.word], eax mov dword [.word+4], eax mov dword [.word+8], eax mov dword [.word+12], eax xor ecx, ecx dec esi .start_scan: inc esi mov al, [esi] ; offset for the error message, if any mov edx, esi sub edx, [.psource] mov [.ofs_error], edx test al, al jz .end_of_script cmp al, '+' je .maybe_number cmp al, '-' je .maybe_number cmp al, '0' jb .nan cmp al, '9' jbe .extract_number .nan: cmp al, '"' je .extract_string cmp al, "'" je .extract_string cmp al, ' ' jbe .start_scan cmp al, ':' jne @f test [ebx+TForthContext.Status], forthCompileMode jnz .syntax_error or [ebx+TForthContext.Status], forthCompileMode or forthNextNewName mov eax, [ebx+TForthContext.iWords] mov [.entry], eax jmp .start_scan @@: cmp al, ';' jne @f test [ebx+TForthContext.Status], forthCompileMode jz .syntax_error ; finalize the compilation of a word. mov eax, sizeof.TFWordFooter+1 call .allocate_bytes jc .err_out_of_memory sub eax, sizeof.TFWordFooter mov byte [eax+edx-1], $c3 ; retn pushd dword [.newword] dword [.newword+4] dword [.newword+8] dword [.newword+12] popd [eax+edx+12] [eax+edx+8] [eax+edx+4] [eax+edx] push [.entry] pop [eax+edx+TFWordFooter.entry] push [ebx+TForthContext.iWords] pop [ebx+TForthContext.iLastWord] and [ebx+TForthContext.Status], not forthCompileMode jmp .start_scan @@: cmp al, '(' jne @f ; comment () .comment_loop: inc esi mov al, [esi] test al, al jz .err_missing_bracket cmp al, ')' jne .comment_loop inc esi jmp .script_loop @@: cmp al, '\' jne .extract_word ; one line comment .comment_loop2: inc esi mov al, [esi] cmp al, ' ' jae .comment_loop2 jmp .script_loop .extract_word: mov [.word+ecx], al inc ecx and ecx, $0f inc esi mov al, [esi] cmp al, ' ' ja .extract_word ;.word_ok: test [ebx+TForthContext.Status], forthNextNewName jz .process_word ; copy the word as a new word name to be placed at the end of the word definition. mov eax, dword [.word] mov ecx, dword [.word+4] mov dword [.newword], eax mov dword [.newword+4], ecx mov eax, dword [.word+8] mov ecx, dword [.word+12] mov dword [.newword+8], eax mov dword [.newword+12], ecx and [ebx+TForthContext.Status], not forthNextNewName jmp .script_loop .process_word: call .search_word ; eax offset relative to [TForthContext.pWords] jc .err_unknown_word test [ebx+TForthContext.Status], forthCompileMode jnz .compile_the_word push esi mov esi, [ebx+TForthContext.pUser] add eax, [ebx+TForthContext.pWords] call eax pop esi jmp .script_loop .compile_the_word: mov ecx, eax ; offset of the word entry cmp eax, [ebx+TForthContext.iWords] jb .internal_call ;.external_call: add ecx, [ebx+TForthContext.pWords] ; absolute address mov eax, 7 call .allocate_bytes jc .err_out_of_memory mov byte [edx+eax-7], $b8 ; mov eax, const mov [edx+eax-6], ecx mov word [edx+eax-2], $d0ff jmp .script_loop .internal_call: mov eax, 5 call .allocate_bytes ; return new offset in eax and pointer to the memory block in edx jc .err_out_of_memory ; relative call to the word entry point. sub ecx, eax mov byte [edx+eax-5], $e8 ; call instruction opcode. mov [edx+eax-4], ecx jmp .script_loop .maybe_number: cmp byte [esi+1], '0' jb .extract_word cmp byte [esi+1], '9' ja .extract_word .extract_number: xor edx, edx movzx eax, al mov byte [.sign], al cmp al, '-' je .next cmp al, '+' je .next .num_loop: cmp al, ' ' jbe .number_ok cmp al, '0' jb .err_invalid_number cmp al, '9' ja .err_invalid_number sub al, '0' imul edx, 10 add edx, eax .next: inc esi mov al, [esi] jmp .num_loop .number_ok: cmp byte [.sign], '-' jne @f neg edx @@: test [ebx+TForthContext.Status], forthCompileMode jnz .compile_number call forth_push_number jmp .script_loop .compile_number: ; $b8 forth_push_number $ba number $ff $d0 mov ecx, edx mov eax, 12 call .allocate_bytes jc .err_out_of_memory mov byte [edx+eax-12], $b8 ; mov eax, const mov dword [edx+eax-11], forth_push_number mov byte [edx+eax-7], $ba ; mov edx, const mov dword [edx+eax-6], ecx mov word [edx+eax-2], $d0ff jmp .script_loop .extract_string: mov ah, al ; end character. xor ecx, ecx ; length of the string lea edi, [esi+1] .str_loop: inc esi mov al, [esi] test al, al jz .err_invalid_string cmp al, ah je .string_ok inc ecx jmp .str_loop .string_ok: mov ecx, esi sub ecx, edi inc esi test [ebx+TForthContext.Status], forthCompileMode jnz .compile_string stdcall StrNew mov edx, eax stdcall StrCopyPart, edx, edi, 0, ecx push edx stdcall AddArrayItem, [ebx+TForthContext.pAStack] mov [ebx+TForthContext.pAStack], edx mov [eax+TFStackCell.type], ftypeStringFree pop [eax+TFStackCell.value] jmp .script_loop .compile_string: push esi mov esi, edi mov edi, [ebx+TForthContext.iWords] lea eax, [ecx+1+17] stdcall .allocate_bytes jc .err_out_of_memory lea eax, [edi+17] add edi, [ebx+TForthContext.pWords] mov byte [edi], $ba ; mov edx, offset of string mov dword [edi+1], eax ; offset of string mov byte [edi+5], $b8 ; mov eax, forth_push_string mov dword [edi+6], forth_push_string mov word [edi+10], $d0ff ; call eax lea eax, [ecx+1] mov byte [edi+12], $e9 ; jmp end mov dword [edi+13], eax ; add edi, 17 rep movsb mov al, 0 stosb pop esi jmp .script_loop .end_of_script: mov ecx, [ebx+TForthContext.pAStack] mov eax, [ecx+TArray.count] test eax, eax jz @f lea eax, [ecx+TArray.array+8*eax-8] mov eax, [eax+TFStackCell.value] dec [ecx+TArray.count] @@: clc jmp .finish ; error handlers .err_missing_bracket: mov eax, ferrMissingBracket jmp .error .err_invalid_string: mov eax, ferrInvalidString jmp .error .err_invalid_number: mov eax, ferrInvalidNumber jmp .error .err_out_of_memory: mov eax, ferrOutOfMemory jmp .error .err_unknown_word: mov eax, ferrUnknownWord jmp .error .syntax_error: mov eax, ferrSyntaxError .error: mov edx, [.ofs_error] stc .finish: pop edi esi ecx ebx return ; internal subroutines ; returns: ; CF=0 - word found. ; eax - offset of word entry point in pWords memory. ; ; CF=1 - word not found. .search_word: push edx esi ; search in the compiled words mov edx, [ebx+TForthContext.pWords] mov esi, [ebx+TForthContext.iLastWord] call .search_list jnc .word_found ; if not found, search in the user provided words, if any. mov edx, [ebx+TForthContext.pUserWords] test edx, edx jz .check_std mov esi, [ebx+TForthContext.iUserWords] call .search_list jnc .word_found .check_std: mov edx, ForthStandardLib mov esi, ForthStandardLib.size call .search_list jnc .word_found stc pop esi edx retn .word_found: clc pop esi edx retn ; arguments: ; esi - offset of the end of the word area. ; edx - pointer to the begin of the word area. ; returns: ; CF=0; eax=offset of the word entry in the word area. ; CF=1 - not found .search_list: add esi, edx .search_loop: sub esi, sizeof.TFWordFooter cmp esi, edx jb .notfound mov eax, dword [esi+TFWordFooter.name] cmp eax, dword [.word] jne .prev_word mov eax, dword [esi+TFWordFooter.name+4] cmp eax, dword [.word+4] jne .prev_word mov eax, dword [esi+TFWordFooter.name+8] cmp eax, dword [.word+8] jne .prev_word mov eax, dword [esi+TFWordFooter.name+12] cmp eax, dword [.word+12] je .found .prev_word: mov esi, [esi+TFWordFooter.entry] add esi, edx jmp .search_loop .found: mov eax, [esi+TFWordFooter.entry] add eax, edx sub eax, [ebx+TForthContext.pWords] ; relatively to TForthContext.pWords clc retn .notfound: stc retn ; argument: eax - count of bytes to allocate. ; returns: ; eax - offset in pWords of the new end ( iWords ) ; edx - pointer of pWords memory. .allocate_bytes: push ecx mov edx, [ebx+TForthContext.iWords] add edx, eax cmp edx, [ebx+TForthContext.sizeWords] jb .sizeok mov ecx, [ebx+TForthContext.sizeWords] call [ResizeIt] mov [ebx+TForthContext.sizeWords], ecx stdcall ResizeMem, [ebx+TForthContext.pWords], ecx jc .end_alloc mov [ebx+TForthContext.pWords], eax .sizeok: mov [ebx+TForthContext.iWords], edx mov eax, edx mov edx, [ebx+TForthContext.pWords] clc .end_alloc: pop ecx retn endp ; arguments: ; ebx - TForthContext ; edx - number to be pushed ; returns ; forth_push_number: push edx stdcall AddArrayItem, [ebx+TForthContext.pAStack] mov [ebx+TForthContext.pAStack], edx mov [eax+TFStackCell.type], ftypeNumber pop [eax+TFStackCell.value] retn ; arguments: ; ebx - TForthContext ; returns ; eax - value from the top of the stack proc forth_pop_number begin mov edx, [ebx+TForthContext.pAStack] mov eax, [edx+TArray.count] dec eax js .empty_stack push eax imul eax, [edx+TArray.itemsize] mov eax, [edx+TArray.array+edx+TFStackCell.value] stdcall DeleteArrayItem, edx ; from the stack clc return .empty_stack: xor eax, eax stc return endp ; arguments: ; ebx - TForthContext ; edx - offset to the string related to pWords memory. ; returns ; proc forth_push_string begin add edx, [ebx+TForthContext.pWords] push edx stdcall AddArrayItem, [ebx+TForthContext.pAStack] mov [ebx+TForthContext.pAStack], edx mov [eax+TFStackCell.type], ftypeString pop [eax+TFStackCell.value] return endp endmodule |
Added freshlib/_trash/SurplusSources/FreshEdit/forth_link.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 | iglobal FreshEditKeyScript file 'keyboard.forth' dd 0 endg ForthBlock __FreshEditForthWords forthword 'Left' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: push ecx mov ecx, [esi+TFreshEdit._xCaret] jecxz .exit dec ecx mov [esi+TFreshEdit._xCaret], ecx mov ecx, [esi+TFreshEdit._LeftColumn] cmp [esi+TFreshEdit._xCaret], ecx ja .exit mov ecx, [esi+TFreshEdit._cols] shr ecx, 2 test ecx, ecx jnz @f inc ecx @@: sub [esi+TFreshEdit._LeftColumn], ecx jns @f mov [esi+TFreshEdit._LeftColumn], 0 @@: .exit: clc pop ecx return endfw forthword 'Right' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: push ecx edx mov ecx, [esi+TFreshEdit._xCaret] inc ecx mov [esi+TFreshEdit._xCaret], ecx mov edx, [esi+TFreshEdit._cols] add edx, [esi+TFreshEdit._LeftColumn] cmp ecx, edx jae .scroll_left .finish: clc pop edx ecx return .scroll_left: mov ecx, [esi+TFreshEdit._cols] shr ecx, 2 test ecx, ecx jnz @f inc ecx @@: add [esi+TFreshEdit._LeftColumn], ecx jmp .finish endfw forthword 'Up' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: push ecx cmp [esi+TFreshEdit._yCaret], 0 je .exit dec [esi+TFreshEdit._yCaret] mov ecx, [esi+TFreshEdit._TopLine] cmp [esi+TFreshEdit._yCaret], ecx jl .scrollup .exit: clc pop ecx return .scrollup: mov ecx, [esi+TFreshEdit._TopLine] jecxz .exit dec [esi+TFreshEdit._TopLine] jmp .exit endfw TFreshEdit.__CommandScrollLockUp: forthword 'ScrLockUp' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: push ecx cmp [esi+TFreshEdit._yCaret], 0 je .exit dec [esi+TFreshEdit._yCaret] mov ecx, [esi+TFreshEdit._TopLine] jecxz .exit dec [esi+TFreshEdit._TopLine] .exit: clc pop ecx return endfw forthword 'ScrollUp' begin push ecx cmp [esi+TFreshEdit._TopLine], 0 je .finish dec [esi+TFreshEdit._TopLine] .finish: clc pop ecx return endfw TFreshEdit.__CommandDown: forthword 'Down' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: push ecx edx mov edx, [esi+TFreshEdit._pIndex] mov ecx, [esi+TFreshEdit._yCaret] inc ecx cmp ecx, [edx+TArray.count] jae .exit mov [esi+TFreshEdit._yCaret], ecx mov ecx, [esi+TFreshEdit._TopLine] add ecx, [esi+TFreshEdit._rows] cmp [esi+TFreshEdit._yCaret], ecx jae .scrolldn .exit: clc pop edx ecx return .scrolldn: mov ecx, [esi+TFreshEdit._TopLine] inc ecx cmp ecx, [edx+TArray.count] jae .exit mov [esi+TFreshEdit._TopLine], ecx jmp .exit endfw TFreshEdit.__CommandScrollLockDown: forthword 'ScrLockDown' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: push ecx edx mov edx, [esi+TFreshEdit._pIndex] mov ecx, [esi+TFreshEdit._yCaret] inc ecx cmp ecx, [edx+TArray.count] jae .exit mov [esi+TFreshEdit._yCaret], ecx mov ecx, [esi+TFreshEdit._TopLine] inc ecx add ecx, [esi+TFreshEdit._rows] cmp ecx, [edx+TArray.count] ja .exit inc [esi+TFreshEdit._TopLine] .exit: clc pop edx ecx return endfw forthword 'ScrollDown' begin push ecx edx mov edx, [esi+TFreshEdit._pIndex] mov ecx, [esi+TFreshEdit._TopLine] inc ecx add ecx, [esi+TFreshEdit._rows] cmp ecx, [edx+TArray.count] ja .finish inc [esi+TFreshEdit._TopLine] .finish: clc pop edx ecx return endfw forthword 'PgDown' begin push ecx mov ecx, [esi+TFreshEdit._rows] @@: call TFreshEdit.__CommandScrollLockDown jc .finish loop @b .finish: pop ecx return endfw forthword 'PgUp' begin push ecx mov ecx, [esi+TFreshEdit._rows] @@: call TFreshEdit.__CommandScrollLockUp jc .finish loop @b .finish: pop ecx return endfw forthword 'LineBegin' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: cmp [esi+TFreshEdit._xCaret], 0 je .end mov [esi+TFreshEdit._xCaret], 0 cmp [esi+TFreshEdit._LeftColumn], 0 je .end mov [esi+TFreshEdit._LeftColumn], 0 .end: clc return endfw forthword 'LineEnd' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: push ebx ecx mov ecx, [esi+TFreshEdit._yCaret] mov ebx, [esi+TFreshEdit._pIndex] cmp ecx, [ebx+TArray.count] jae .end mov ecx, [ebx+TArray.array+4*ecx] shl ecx, TEditorLine.shift add ecx, [esi+TFreshEdit._pLines] add ecx, TArray.array stdcall StrLenUtf8, [ecx+TEditorLine.Data], -1 cmp [esi+TFreshEdit._xCaret], eax je .end mov [esi+TFreshEdit._xCaret], eax mov ecx, [esi+TFreshEdit._cols] lea ecx, [ecx*3] shr ecx, 2 cmp eax, [esi+TFreshEdit._LeftColumn] jg .leftok sub eax, ecx jns @f xor eax, eax @@: mov [esi+TFreshEdit._LeftColumn], eax jmp .end .leftok: add ecx, [esi+TFreshEdit._LeftColumn] sub ecx, [esi+TFreshEdit._xCaret] jge .end sub [esi+TFreshEdit._LeftColumn], ecx .end: clc pop ecx ebx return endfw TFreshEdit.__CommandBeginOfScreen: forthword 'ScreenBegin' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: mov eax, [esi+TFreshEdit._TopLine] cmp eax, [esi+TFreshEdit._yCaret] je .end mov [esi+TFreshEdit._yCaret], eax .end: return endfw forthword 'ScreenEnd' begin call TFreshEdit.__FitCaretInWindow jz @f stc return @@: call TFreshEdit.__CommandBeginOfScreen mov ecx, [esi+TFreshEdit._rows] jecxz .end dec ecx jecxz .end @@: call TFreshEdit.__CommandDown jc .end loop @b .end: return endfw forthword 'FileBegin' begin return endfw forthword 'FileEnd' begin return endfw forthword 'WordPrev' begin return endfw forthword 'WordNext' begin return endfw forthword 'GetSelMode' begin return endfw forthword 'SetSelMode' begin return endfw forthword 'GetInsMode' begin return endfw forthword 'SetInsMode' begin return endfw forthword 'GetRowCount' begin return endfw forthword 'ToggleSelMode' begin mov eax, [esi+TFreshEdit._SelMode] inc eax cmp eax, 2 jbe @f xor eax, eax @@: mov [esi+TFreshEdit._SelMode], eax return endfw EndForthBlock ;_________________________________________________________________________________________ |
Added freshlib/_trash/SurplusSources/FreshEdit/keyboard.forth.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ( This file contains ForthScript definitions for navigation and control keys in FreshEdit. The name of the words is actually the name of the pressed key, as returned by CreateKeyName procedure defined in the library SysEvents.asm The words can return a value through the stack top value. It is 1 - means the ) : keyUp Up 0 ; : keyShift+Up Up 1 ; : keyDown Down 0 ; : keyShift+Down Down 1 ; : keyLeft Left 0 ; : keyShift+Left Left 1 ; : keyRight Right 0 ; : keyShift+Right Right 1 ; : keyPgUp PgUp 0 ; : keyShift+PgUp PgUp 1 ; : keyPgDn PgDown 0 ; : keyShift+PgDn PgDown 1 ; : keyHome LineBegin 0 ; : keyShift+Home LineBegin 1 ; : keyEnd LineEnd 0 ; : keyShift+End LineEnd 1 ; : keyCtrl+Alt+Ins ToggleSelMode 1 ; |
Added freshlib/_trash/SurplusSources/command_tables.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 | ; This file is not needed anymore, but it contains very tiny implementation of Forth-like script engine. ; maybe it worths to keep it some time...... __ScriptEngine: struct TCommandItem .name dd ? .proc dd ? ends macro CommandList lbl, [name, proc] { common label lbl dword forward local len dd name, proc common dd 0 } CommandList ScriptCommands, \ 'l' , TFreshEdit.__CommandLeft, \ ; left 'r' , TFreshEdit.__CommandRight, \ ; right 'u' , TFreshEdit.__CommandUp, \ ; up 'd' , TFreshEdit.__CommandDown, \ ; down 'ul', TFreshEdit.__CommandScrollLockUp, \ ; up scroll lock 'dl', TFreshEdit.__CommandScrollLockDown, \ ; down scroll lock 'su', TFreshEdit.__CommandScrollUp, \ ; scroll up 'sd', TFreshEdit.__CommandScrollDown, \ ; scroll down 'pu', TFreshEdit.__CommandPgUp, \ ; page up 'pd', TFreshEdit.__CommandPgDown, \ ; page down 'lb', TFreshEdit.__CommandHome, \ ; line begin 'le', TFreshEdit.__CommandEnd, \ ; line end 'sb', TFreshEdit.__CommandBeginOfScreen, \ ; begin of screen 'se', TFreshEdit.__CommandEndOfScreen, \ ; 'fb', TFreshEdit.__CommandFileBegin, \ ; file begin 'fe', TFreshEdit.__CommandFileEnd, \ ; file end 'wp', TFreshEdit.__CommandWordPrev, \ ; word previous 'wn', TFreshEdit.__CommandWordNext, \ ; word next 'gsm', TFreshEdit.__CommandGetSelectionMode, \ ; get selection mode (0..2) 'ssm', TFreshEdit.__CommandSetSelectionMode, \ ; set selection mode (0..2) 'gim', TFreshEdit.__CommandGetInsertMode, \ ; get insert mode. 'sim', TFreshEdit.__CommandSetInsertMode, \ ; set insert mode. 'grc', TFreshEdit.__CommandGetRowCount, \ ; get row count. \ \ ; Aritmerics \ '+', __ScriptPlus, \ '-', __ScriptMinus, \ '*', __ScriptMul, \ '/', __ScriptDiv, \ '%', __ScriptMod, \ 'neg', __ScriptNeg, \ \ \ ; Output \ '.', __ScriptOutNumber, \ '?', __ScriptOutString, \ \ \ ; Stack operations and variables \ 'swap', __ScriptSwap, \ 'pop', __ScriptPop, \ '->', ExecScript.__assign, \ \ \ ; word logic \ 'and', __ScriptAnd, \ 'or', __ScriptOr, \ 'xor', __ScriptXor, \ 'not', __ScriptNot, \ \ \ ; Loop \ 'rep', __ScriptRepeat, \ 'loop', __ScriptLoop, \ \ \ ; conditional \ 'if', ExecScript.__if, \ 'else', ExecScript.__else, \ 'then', ExecScript.__then macro KeyScripts [scancode, modkeys, script] { forward local ptrscr dd scancode, modkeys if script eqtype 'A' dd ptrscr else dd script end if common dd 0 forward if script eqtype 'A' ptrscr db script, 0 align 4 end if } struc script text { db text, 0 align 4 } KeyScripts \ keyUp, 0, scrUp, \ keyUpNumpad, 0, scrUp, \ keyDown, 0, scrDown, \ keyDownNumpad, 0, scrDown, \ keyLeft, 0, scrLeft, \ keyLeftNumpad, 0, scrLeft, \ keyRight, 0, scrRight, \ keyRightNumpad,0, scrRight, \ keyPgUp, 0, scrPgUp, \ keyPgUpNumpad, 0, scrPgUp, \ keyPgDown, 0, scrPgDn, \ keyPgDnNumpad, 0, scrPgDn, \ keyHome, 0, scrHome, \ keyHomeNumpad, 0, scrHome, \ keyEnd, 0, scrEnd, \ keyEndNumpad, 0, scrEnd, \ keyPgDown, maskCtrl, scrEndOfFile, \ keyPgDnNumpad, maskCtrl, scrEndOfFile, \ keyPgUp, maskCtrl, scrBegOfFile, \ keyPgUpNumpad, maskCtrl, scrBegOfFile, \ keyHome, maskCtrl, scrBegOfScreen, \ keyHomeNumpad, maskCtrl, scrBegOfScreen, \ keyEnd, maskCtrl, scrEndOfScreen, \ keyEndNumpad, maskCtrl, scrEndOfScreen, \ keyInsert, 0, scrToggleInsMode, \ keyInsNumpad, 0, scrToggleInsMode, \ keyInsert, maskAlt, scrToggleSelectionMode scrUp script 'u' scrDown script 'd' scrLeft script 'l' scrRight script 'r' scrPgUp script 'pu' scrPgDn script 'pd' scrHome script 'lb' scrEnd script 'le' scrEndOfFile script 'fe' scrBegOfFile script 'fb' scrBegOfScreen script 'sb' scrEndOfScreen script 'se' scrToggleInsMode script 'gim 1 xor sim' scrToggleSelectionMode script 'gsm 1 + 3 % ssm' proc ExecScript, .editor, .pScript .stack rd 16 .pvar dd ? .fassign dd ? .changes dd ? .errInvalidCommand = -1 .errInvalidNumber = -2 .errStackOverflow = -3 .errMissingQuote = -4 .errInvalidVar = -5 .errIfThenElse = -6 begin push ebx ecx edx esi edi stdcall GetMem, 65536 mov [.pvar], eax mov ecx, 16 lea edi, [.stack] xor eax, eax rep stosd mov [.changes], eax mov [.fassign], eax mov edi, 15 ; intex to the stack bottom mov esi, [.pScript] .scriptloop: xor ebx, ebx xor ecx, ecx xor eax, eax .wordloop: movzx eax, byte [esi] cmp al, ' ' jbe .endofword cmp al, '@' je .variable cmp al, "'" je .string cmp al, '"' je .string cmp al, '0' jb .word cmp al, '9' jbe .digit .word: inc esi shl eax, cl or ebx, eax ; command add cl, 8 cmp cl, 32 jbe .wordloop jmp .invalid_command .variable: test ecx, ecx jnz .invalid_command mov eax, $811C9DC5 ; 2166136261 ; FNV offset basis .hashloop: inc esi movzx edx, byte [esi] cmp edx, ' ' jbe .endofvar xor eax, edx imul eax, $01000193 ; 16777619 ; FNV prime jmp .hashloop .endofvar: mov ebx, eax and eax, $ffff shr ebx, 16 xor ebx, eax and ebx, $fffc add ebx, [.pvar] cmp [.fassign], 0 je .pushvar ; pop var mov [.fassign], 0 cmp edi, 15 jae .stack_overflow inc edi mov eax, [.stack+4*edi] mov [ebx], eax jmp .nextchar .pushvar: test edi, edi js .stack_overflow mov eax, [ebx] mov [.stack+4*edi], eax dec edi jmp .nextchar .string: test ecx, ecx jnz .invalid_command inc esi mov ebx, esi xor ecx, ecx .lenloop: cmp byte [esi], 0 je .missing_quote cmp byte [esi], al je .endofstring inc esi inc ecx jmp .lenloop .endofstring: test edi, edi js .stack_overflow stdcall StrNew mov [.stack+4*edi], eax stdcall StrCopyPart, eax, ebx, 0, ecx stdcall StrPtr, eax dec edi inc esi jmp .scriptloop .digit: test ecx, ecx jnz .invalid_command .numberloop: mov al, [esi] cmp al, ' ' jbe .endofnumber inc esi cmp al, '0' jb .invalid_number cmp al, '9' ja .invalid_number and eax, $0f imul ebx, 10 add ebx, eax jmp .numberloop .endofnumber: test edi, edi js .stack_overflow mov [.stack+4*edi], ebx dec edi test eax, eax jz .endofscript inc esi jmp .scriptloop .endofword: jecxz .nextchar mov eax, ScriptCommands - sizeof.TCommandItem .search_command: add eax, sizeof.TCommandItem cmp dword [eax], 0 je .invalid_command cmp [eax], ebx jne .search_command ;.found: push esi lea ebx, [.stack] mov esi, [.editor] call [eax+TCommandItem.proc] pop esi jc .stack_overflow or [.changes], eax cmp edi, 15 ja .stack_overflow .nextchar: inc esi cmp byte [esi-1], 0 jne .scriptloop .endofscript: clc mov eax, [.changes] .finish: stdcall FreeMem, [.pvar] pop edi esi edx ecx ebx return ; Context dependent control commands ; "->" (assign) command .__assign: mov [.fassign], 1 xor eax, eax clc retn .__if: cmp edi, 15 jae .ifok inc edi cmp [.stack+4*edi], 0 jne .ifok ; search for else of then mov eax, [esp+4] ; stored pointer to the script text xor ecx, ecx .ifloop: inc eax mov edx, [eax] cmp edx, 'else' je .else cmp edx, 'then' je .then test edx, $ff000000 jz .iferror and edx, $ffff cmp edx, 'if' jne .ifloop inc ecx jmp .ifloop .else: jecxz .elsehere dec ecx jmp .ifloop .elsehere: add eax, 4 cmp byte [eax], ' ' ja .iferror mov [esp+4], eax jmp .ifok .then: jecxz .thenhere dec ecx jmp .ifloop .thenhere: add eax, 4 cmp byte [eax], ' ' ja .iferror mov [esp+4], eax .ifok: xor eax, eax clc retn .iferror: stc mov eax, .errIfThenElse retn .__else: ; search for "then" mov eax, [esp+4] ; stored pointer to the script text xor ecx, ecx .elseloop: inc eax mov edx, [eax] cmp edx, 'else' je .else2 cmp edx, 'then' je .then2 test edx, $ff000000 jz .iferror and edx, $ffff cmp edx, 'if' jne .elseloop inc ecx jmp .elseloop .else2: jecxz .iferror dec ecx jmp .elseloop .then2: jecxz .thenhere2 dec ecx jmp .elseloop .thenhere2: add eax, 4 cmp byte [eax], ' ' ja .iferror mov [esp+4], eax jmp .ifok .__then: xor eax, eax clc retn ; errors .invalid_command: stc mov eax, .errInvalidCommand jmp .finish .invalid_number: stc mov eax, .errInvalidNumber jmp .finish .stack_overflow: stc mov eax, .errStackOverflow jmp .finish .missing_quote: stc mov eax, .errMissingQuote jmp .finish endp call ExecScript proc __ScriptPlus begin cmp edi, 14 jae .end mov eax, [ebx+4*edi+4] inc edi add [ebx+4*edi+4], eax .end: xor eax, eax return endp proc __ScriptMinus begin cmp edi, 14 jae .end mov eax, [ebx+4*edi+4] inc edi sub [ebx+4*edi+4], eax .end: xor eax, eax clc return endp proc __ScriptMul begin cmp edi, 14 jae .end mov eax, [ebx+4*edi+4] inc edi imul eax, [ebx+4*edi+4] mov [ebx+4*edi+4], eax .end: xor eax, eax clc return endp proc __ScriptDiv begin cmp edi, 14 jae .end cmp dword [ebx+4*edi+4], 0 je .err inc edi mov eax, [ebx+4*edi+4] cdq div dword [ebx+4*edi] mov [ebx+4*edi+4], eax .end: xor eax, eax clc return .err: stc return endp proc __ScriptMod begin cmp edi, 14 jae .end cmp dword [ebx+4*edi+4], 0 je .err inc edi mov eax, [ebx+4*edi+4] cdq div dword [ebx+4*edi] mov [ebx+4*edi+4], edx .end: xor eax, eax clc return .err: stc return endp proc __ScriptOutNumber begin cmp edi, 15 jae .end inc edi mov eax, [ebx+4*edi] stdcall NumToStr, eax, ntsSigned or ntsDec push eax stdcall StrPtr, eax stdcall Output, eax stdcall StrDel ; from the stack. .end: xor eax, eax clc return endp proc __ScriptOutString begin cmp edi, 15 jae .end inc edi cmp dword [ebx+4*edi], 0 je .crlf stdcall StrPtr, [ebx+4*edi] stdcall Output, eax stdcall StrDel, [ebx+4*edi] .end: xor eax, eax clc return .crlf: stdcall Output, .scrlf jmp .end .scrlf db 13, 10, 0 endp proc __ScriptSwap begin cmp edi, 14 jae .end pushd [ebx+4*edi+4] pushd [ebx+4*edi+8] popd [ebx+4*edi+4] popd [ebx+4*edi+8] .end: xor eax, eax clc return endp proc __ScriptPop begin cmp edi, 15 jae .end inc edi .end: xor eax, eax clc return endp proc __ScriptAnd begin cmp edi, 14 jae .end mov eax, [ebx+4*edi+4] inc edi and [ebx+4*edi+4], eax .end: xor eax, eax clc return endp proc __ScriptOr begin cmp edi, 14 jae .end mov eax, [ebx+4*edi+4] inc edi or [ebx+4*edi+4], eax .end: xor eax, eax clc return endp proc __ScriptXor begin cmp edi, 14 jae .end mov eax, [ebx+4*edi+4] inc edi xor [ebx+4*edi+4], eax .end: xor eax, eax clc return endp proc __ScriptNot begin cmp edi, 15 jae .end not dword [ebx+4*edi+4] .end: xor eax, eax clc return endp proc __ScriptNeg begin cmp edi, 15 jae .end neg dword [ebx+4*edi+4] .end: xor eax, eax clc return endp proc __ScriptRepeat begin cmp edi, 14 jae .end .end: xor eax, eax clc return endp proc __ScriptLoop begin cmp edi, 14 jae .end .end: xor eax, eax clc return endp DispSize 'Script engine', $ - __ScriptEngine |
Deleted freshlib/compiler/Linux/executable.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/compiler/Win32/executable.inc.
|
| < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/compiler/executable.inc.
|
| < |
Added freshlib/data/Dummy/utf8.asm.
Added freshlib/data/KolibriOS/random.asm.
> > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS dependent part of different random number generators. ; ; Target OS: Linux ; ; Dependencies: memory.asm ; ; Notes: ; ;_________________________________________________________________________________________ body GetRandomBytes begin return endp |
Added freshlib/data/KolibriOS/utf8.asm.
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | proc WideCharToUtf8, .ptrWideChar begin push edx esi edi mov esi, [.ptrWideChar] stdcall StrNew mov edi, eax .loop: stdcall DecodeUtf16, [esi] test eax, eax jz .end_string stdcall EncodeUtf8, eax stdcall StrCharCat, edi, eax jmp .loop .end_string: mov eax, edi pop edi esi edx return endp |
Added freshlib/data/Linux/random.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS dependent part of different random number generators. ; ; Target OS: Linux ; ; Dependencies: memory.asm ; ; Notes: ; ;_________________________________________________________________________________________ body GetRandomBytes begin pushad stdcall GetMem, [.count] mov esi, eax mov edi, eax mov eax, sys_open mov ebx, cRandomFile mov ecx, O_RDONLY int $80 test eax, eax js .error mov ebx, eax .loop: mov eax, sys_read mov ecx, esi mov edx, [.count] int $80 test eax, eax js .error2 add esi, eax sub [.count], eax jnz .loop mov eax, sys_close int $80 clc mov [esp+4*regEAX], edi clc popad return .error2: mov eax, sys_close int $80 .error: stdcall FreeMem, edi stc popad return endp cRandomFile text "/dev/urandom" ; we will use /dev/urandom, because don't want to block. |
Added freshlib/data/Linux/utf8.asm.
Deleted freshlib/data/ToBeRemoved/StrLibOS.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added freshlib/data/Win32/random.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS dependent part of different random number generators. ; ; Target OS: Win32 ; ; Dependencies: memory.asm ; ; Notes: ; ;_________________________________________________________________________________________ uses advapi32 ; Provider Types PROV_RSA_FULL = 1 PROV_RSA_SIG = 2 PROV_DSS = 3 PROV_FORTEZZA = 4 PROV_MS_EXCHANGE = 5 PROV_SSL = 6 PROV_RSA_SCHANNEL = 12 PROV_DSS_DH = 13 PROV_EC_ECDSA_SIG = 14 PROV_EC_ECNRA_SIG = 15 PROV_EC_ECDSA_FULL = 16 PROV_EC_ECNRA_FULL = 17 PROV_DH_SCHANNEL = 18 PROV_SPYRUS_LYNKS = 20 PROV_RNG = 21 PROV_INTEL_SEC = 22 PROV_REPLACE_OWF = 23 PROV_RSA_AES = 24 ; CryptAcquireContext CRYPT_VERIFYCONTEXT = 0xF0000000 CRYPT_NEWKEYSET = 0x00000008 CRYPT_DELETEKEYSET = 0x00000010 CRYPT_MACHINE_KEYSET = 0x00000020 CRYPT_SILENT = 0x00000040 body GetRandomBytes .prov dd ? begin pushad stdcall GetMem, [.count] mov esi, eax lea eax, [.prov] invoke CryptAcquireContextW, eax, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT or CRYPT_SILENT test eax, eax jz .error invoke CryptGenRandom, [.prov], [.count], esi test eax, eax jz .error2 invoke CryptReleaseContext, [.prov], 0 clc mov [esp+4*regEAX], esi popad return .error2: invoke CryptReleaseContext, [.prov], 0 .error: stc popad return endp |
Added freshlib/data/Win32/utf8.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Library for converting UTF8 to and from WideChar ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ;----------------------------------------------------------- ; Returns: ; eax - pointer to the widechar string. ; ecx - length of the widechar string in characters. ;----------------------------------------------------------- proc utf8ToWideChar, .hString begin push edx edi stdcall StrPtr, [.hString] invoke MultiByteToWideChar, CP_UTF8, 0, eax, -1, 0, 0 lea edx, [2*eax+8] stdcall GetMem, edx mov edi, eax stdcall StrPtr, [.hString] sar edx, 1 invoke MultiByteToWideChar, CP_UTF8, 0, eax, -1, edi, edx mov ecx, eax mov eax, edi pop edi edx return endp proc WideCharToUtf8, .ptrWideChar begin push ebx ecx edx edi invoke WideCharToMultiByte, CP_UTF8, 0, [.ptrWideChar], -1, 0, 0, 0, 0 test eax, eax jz .error lea ebx, [eax+8] stdcall GetMem, ebx mov edi, eax invoke WideCharToMultiByte, CP_UTF8, 0, [.ptrWideChar], -1, edi, ebx, 0, 0 test eax, eax jz .error stdcall StrDup, edi stdcall FreeMem, edi clc .finish: pop edi edx ecx ebx return .error: stc jmp .finish endp |
Added freshlib/data/_encodings/8859-1.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-10.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-11.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-13.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-14.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-15.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-16.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-2.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-3.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-4.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-5.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-6.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-7.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-8.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/8859-9.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP037.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1006.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1026.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1250.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1251.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1252.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1253.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1254.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1255.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1256.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1257.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP1258.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP424.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP437.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP500.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP737.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP775.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP850.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP852.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP855.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP856.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP857.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP860.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP861.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP862.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP863.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP864.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP865.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP866.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP869.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP874.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP875.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/CP932.tbl.
> | 1 | ýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿaÿbÿcÿdÿeÿfÿgÿhÿiÿjÿkÿlÿmÿnÿoÿpÿqÿrÿsÿtÿuÿvÿwÿxÿyÿzÿ{ÿ|ÿ}ÿ~ÿÿ€ÿÿ‚ÿƒÿ„ÿ…ÿ†ÿ‡ÿˆÿ‰ÿŠÿ‹ÿŒÿÿŽÿÿÿ‘ÿ’ÿ“ÿ”ÿ•ÿ–ÿ—ÿ˜ÿ™ÿšÿ›ÿœÿÿžÿŸÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáà Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€ |
Added freshlib/data/_encodings/CP936.tbl.
> | 1 | ¬ ýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿ€ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚ |
Added freshlib/data/_encodings/CP949.tbl.
> | 1 | ýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€ |
Added freshlib/data/_encodings/KOI8-R.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/KOI8-U.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/KPS9566.tbl.
> | 1 | ýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€ |
Added freshlib/data/_encodings/NEXTSTEP.tbl.
cannot compute difference between binary files
Added freshlib/data/_encodings/_sources/8859-1.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | # 8859-1.TXT # Date: 2015-12-02 20:19:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-1:1998 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-1:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-1 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-1 order. # # Version history # 1.0 version: updates 0.1 version by adding mappings for all # control characters. # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x00A1 # INVERTED EXCLAMATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x00A6 # BROKEN BAR 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x00AA # FEMININE ORDINAL INDICATOR 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x00AF # MACRON 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x00B4 # ACUTE ACCENT 0xB5 0x00B5 # MICRO SIGN 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x00B8 # CEDILLA 0xB9 0x00B9 # SUPERSCRIPT ONE 0xBA 0x00BA # MASCULINE ORDINAL INDICATOR 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC # VULGAR FRACTION ONE QUARTER 0xBD 0x00BD # VULGAR FRACTION ONE HALF 0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS 0xBF 0x00BF # INVERTED QUESTION MARK 0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic) 0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 # MULTIPLICATION SIGN 0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic) 0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) 0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic) 0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE 0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 # DIVISION SIGN 0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic) 0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS |
Added freshlib/data/_encodings/_sources/8859-10.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | # 8859-10.TXT # Date: 2015-12-02 21:53:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-10:1998 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 October 11 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-10:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-10 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-10 order. # # Version history # 1.0 version new. # 1.1 corrected mistake in mapping of 0xA4 # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x0112 # LATIN CAPITAL LETTER E WITH MACRON 0xA3 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA 0xA4 0x012A # LATIN CAPITAL LETTER I WITH MACRON 0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE 0xA6 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA 0xA7 0x00A7 # SECTION SIGN 0xA8 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA 0xA9 0x0110 # LATIN CAPITAL LETTER D WITH STROKE 0xAA 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xAB 0x0166 # LATIN CAPITAL LETTER T WITH STROKE 0xAC 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x016A # LATIN CAPITAL LETTER U WITH MACRON 0xAF 0x014A # LATIN CAPITAL LETTER ENG 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK 0xB2 0x0113 # LATIN SMALL LETTER E WITH MACRON 0xB3 0x0123 # LATIN SMALL LETTER G WITH CEDILLA 0xB4 0x012B # LATIN SMALL LETTER I WITH MACRON 0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE 0xB6 0x0137 # LATIN SMALL LETTER K WITH CEDILLA 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x013C # LATIN SMALL LETTER L WITH CEDILLA 0xB9 0x0111 # LATIN SMALL LETTER D WITH STROKE 0xBA 0x0161 # LATIN SMALL LETTER S WITH CARON 0xBB 0x0167 # LATIN SMALL LETTER T WITH STROKE 0xBC 0x017E # LATIN SMALL LETTER Z WITH CARON 0xBD 0x2015 # HORIZONTAL BAR 0xBE 0x016B # LATIN SMALL LETTER U WITH MACRON 0xBF 0x014B # LATIN SMALL LETTER ENG 0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK 0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic) 0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA 0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x0168 # LATIN CAPITAL LETTER U WITH TILDE 0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic) 0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) 0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK 0xE8 0x010D # LATIN SMALL LETTER C WITH CARON 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic) 0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA 0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x0169 # LATIN SMALL LETTER U WITH TILDE 0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic) 0xFF 0x0138 # LATIN SMALL LETTER KRA |
Added freshlib/data/_encodings/_sources/8859-11.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | # 8859-11.TXT # Date: 2015-12-02 21:55:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-11:2001 to Unicode # Unicode version: 3.2 # Table version: 2.0 # Table format: Format A # Date: 2002 October 7 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-11:2001 characters map into Unicode. # # ISO/IEC 8859-11:2001 is equivalent to TIS 620-2533 (1990) with # the addition of 0xA0 NO-BREAK SPACE. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-11 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-11 order. # # Version history: # 2002 October 7 Created # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0E01 # THAI CHARACTER KO KAI 0xA2 0x0E02 # THAI CHARACTER KHO KHAI 0xA3 0x0E03 # THAI CHARACTER KHO KHUAT 0xA4 0x0E04 # THAI CHARACTER KHO KHWAI 0xA5 0x0E05 # THAI CHARACTER KHO KHON 0xA6 0x0E06 # THAI CHARACTER KHO RAKHANG 0xA7 0x0E07 # THAI CHARACTER NGO NGU 0xA8 0x0E08 # THAI CHARACTER CHO CHAN 0xA9 0x0E09 # THAI CHARACTER CHO CHING 0xAA 0x0E0A # THAI CHARACTER CHO CHANG 0xAB 0x0E0B # THAI CHARACTER SO SO 0xAC 0x0E0C # THAI CHARACTER CHO CHOE 0xAD 0x0E0D # THAI CHARACTER YO YING 0xAE 0x0E0E # THAI CHARACTER DO CHADA 0xAF 0x0E0F # THAI CHARACTER TO PATAK 0xB0 0x0E10 # THAI CHARACTER THO THAN 0xB1 0x0E11 # THAI CHARACTER THO NANGMONTHO 0xB2 0x0E12 # THAI CHARACTER THO PHUTHAO 0xB3 0x0E13 # THAI CHARACTER NO NEN 0xB4 0x0E14 # THAI CHARACTER DO DEK 0xB5 0x0E15 # THAI CHARACTER TO TAO 0xB6 0x0E16 # THAI CHARACTER THO THUNG 0xB7 0x0E17 # THAI CHARACTER THO THAHAN 0xB8 0x0E18 # THAI CHARACTER THO THONG 0xB9 0x0E19 # THAI CHARACTER NO NU 0xBA 0x0E1A # THAI CHARACTER BO BAIMAI 0xBB 0x0E1B # THAI CHARACTER PO PLA 0xBC 0x0E1C # THAI CHARACTER PHO PHUNG 0xBD 0x0E1D # THAI CHARACTER FO FA 0xBE 0x0E1E # THAI CHARACTER PHO PHAN 0xBF 0x0E1F # THAI CHARACTER FO FAN 0xC0 0x0E20 # THAI CHARACTER PHO SAMPHAO 0xC1 0x0E21 # THAI CHARACTER MO MA 0xC2 0x0E22 # THAI CHARACTER YO YAK 0xC3 0x0E23 # THAI CHARACTER RO RUA 0xC4 0x0E24 # THAI CHARACTER RU 0xC5 0x0E25 # THAI CHARACTER LO LING 0xC6 0x0E26 # THAI CHARACTER LU 0xC7 0x0E27 # THAI CHARACTER WO WAEN 0xC8 0x0E28 # THAI CHARACTER SO SALA 0xC9 0x0E29 # THAI CHARACTER SO RUSI 0xCA 0x0E2A # THAI CHARACTER SO SUA 0xCB 0x0E2B # THAI CHARACTER HO HIP 0xCC 0x0E2C # THAI CHARACTER LO CHULA 0xCD 0x0E2D # THAI CHARACTER O ANG 0xCE 0x0E2E # THAI CHARACTER HO NOKHUK 0xCF 0x0E2F # THAI CHARACTER PAIYANNOI 0xD0 0x0E30 # THAI CHARACTER SARA A 0xD1 0x0E31 # THAI CHARACTER MAI HAN-AKAT 0xD2 0x0E32 # THAI CHARACTER SARA AA 0xD3 0x0E33 # THAI CHARACTER SARA AM 0xD4 0x0E34 # THAI CHARACTER SARA I 0xD5 0x0E35 # THAI CHARACTER SARA II 0xD6 0x0E36 # THAI CHARACTER SARA UE 0xD7 0x0E37 # THAI CHARACTER SARA UEE 0xD8 0x0E38 # THAI CHARACTER SARA U 0xD9 0x0E39 # THAI CHARACTER SARA UU 0xDA 0x0E3A # THAI CHARACTER PHINTHU 0xDF 0x0E3F # THAI CURRENCY SYMBOL BAHT 0xE0 0x0E40 # THAI CHARACTER SARA E 0xE1 0x0E41 # THAI CHARACTER SARA AE 0xE2 0x0E42 # THAI CHARACTER SARA O 0xE3 0x0E43 # THAI CHARACTER SARA AI MAIMUAN 0xE4 0x0E44 # THAI CHARACTER SARA AI MAIMALAI 0xE5 0x0E45 # THAI CHARACTER LAKKHANGYAO 0xE6 0x0E46 # THAI CHARACTER MAIYAMOK 0xE7 0x0E47 # THAI CHARACTER MAITAIKHU 0xE8 0x0E48 # THAI CHARACTER MAI EK 0xE9 0x0E49 # THAI CHARACTER MAI THO 0xEA 0x0E4A # THAI CHARACTER MAI TRI 0xEB 0x0E4B # THAI CHARACTER MAI CHATTAWA 0xEC 0x0E4C # THAI CHARACTER THANTHAKHAT 0xED 0x0E4D # THAI CHARACTER NIKHAHIT 0xEE 0x0E4E # THAI CHARACTER YAMAKKAN 0xEF 0x0E4F # THAI CHARACTER FONGMAN 0xF0 0x0E50 # THAI DIGIT ZERO 0xF1 0x0E51 # THAI DIGIT ONE 0xF2 0x0E52 # THAI DIGIT TWO 0xF3 0x0E53 # THAI DIGIT THREE 0xF4 0x0E54 # THAI DIGIT FOUR 0xF5 0x0E55 # THAI DIGIT FIVE 0xF6 0x0E56 # THAI DIGIT SIX 0xF7 0x0E57 # THAI DIGIT SEVEN 0xF8 0x0E58 # THAI DIGIT EIGHT 0xF9 0x0E59 # THAI DIGIT NINE 0xFA 0x0E5A # THAI CHARACTER ANGKHANKHU 0xFB 0x0E5B # THAI CHARACTER KHOMUT |
Added freshlib/data/_encodings/_sources/8859-13.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 | # 8859-13.TXT # Date: 2015-12-02 22:03:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-13:1998 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-13:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-13 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-13 order. # # Version history # 1.0 version: created # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x201D # RIGHT DOUBLE QUOTATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK 0xA6 0x00A6 # BROKEN BAR 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x00C6 # LATIN CAPITAL LETTER AE 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x201C # LEFT DOUBLE QUOTATION MARK 0xB5 0x00B5 # MICRO SIGN 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xB9 0x00B9 # SUPERSCRIPT ONE 0xBA 0x0157 # LATIN SMALL LETTER R WITH CEDILLA 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC # VULGAR FRACTION ONE QUARTER 0xBD 0x00BD # VULGAR FRACTION ONE HALF 0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS 0xBF 0x00E6 # LATIN SMALL LETTER AE 0xC0 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xC1 0x012E # LATIN CAPITAL LETTER I WITH OGONEK 0xC2 0x0100 # LATIN CAPITAL LETTER A WITH MACRON 0xC3 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK 0xC7 0x0112 # LATIN CAPITAL LETTER E WITH MACRON 0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE 0xCB 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE 0xCC 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA 0xCD 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA 0xCE 0x012A # LATIN CAPITAL LETTER I WITH MACRON 0xCF 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA 0xD0 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE 0xD2 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x014C # LATIN CAPITAL LETTER O WITH MACRON 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 # MULTIPLICATION SIGN 0xD8 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK 0xD9 0x0141 # LATIN CAPITAL LETTER L WITH STROKE 0xDA 0x015A # LATIN CAPITAL LETTER S WITH ACUTE 0xDB 0x016A # LATIN CAPITAL LETTER U WITH MACRON 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xDE 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) 0xE0 0x0105 # LATIN SMALL LETTER A WITH OGONEK 0xE1 0x012F # LATIN SMALL LETTER I WITH OGONEK 0xE2 0x0101 # LATIN SMALL LETTER A WITH MACRON 0xE3 0x0107 # LATIN SMALL LETTER C WITH ACUTE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x0119 # LATIN SMALL LETTER E WITH OGONEK 0xE7 0x0113 # LATIN SMALL LETTER E WITH MACRON 0xE8 0x010D # LATIN SMALL LETTER C WITH CARON 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x017A # LATIN SMALL LETTER Z WITH ACUTE 0xEB 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE 0xEC 0x0123 # LATIN SMALL LETTER G WITH CEDILLA 0xED 0x0137 # LATIN SMALL LETTER K WITH CEDILLA 0xEE 0x012B # LATIN SMALL LETTER I WITH MACRON 0xEF 0x013C # LATIN SMALL LETTER L WITH CEDILLA 0xF0 0x0161 # LATIN SMALL LETTER S WITH CARON 0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE 0xF2 0x0146 # LATIN SMALL LETTER N WITH CEDILLA 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x014D # LATIN SMALL LETTER O WITH MACRON 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 # DIVISION SIGN 0xF8 0x0173 # LATIN SMALL LETTER U WITH OGONEK 0xF9 0x0142 # LATIN SMALL LETTER L WITH STROKE 0xFA 0x015B # LATIN SMALL LETTER S WITH ACUTE 0xFB 0x016B # LATIN SMALL LETTER U WITH MACRON 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE 0xFE 0x017E # LATIN SMALL LETTER Z WITH CARON 0xFF 0x2019 # RIGHT SINGLE QUOTATION MARK |
Added freshlib/data/_encodings/_sources/8859-14.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | # 8859-14.TXT # Date: 2015-12-02 22:05:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-14:1998 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> # Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-14:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-14 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-14 order. # # Version history # 1.0 version: created # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE 0xA2 0x1E03 # LATIN SMALL LETTER B WITH DOT ABOVE 0xA3 0x00A3 # POUND SIGN 0xA4 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE 0xA5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE 0xA6 0x1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE 0xA7 0x00A7 # SECTION SIGN 0xA8 0x1E80 # LATIN CAPITAL LETTER W WITH GRAVE 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x1E82 # LATIN CAPITAL LETTER W WITH ACUTE 0xAB 0x1E0B # LATIN SMALL LETTER D WITH DOT ABOVE 0xAC 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xB0 0x1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE 0xB1 0x1E1F # LATIN SMALL LETTER F WITH DOT ABOVE 0xB2 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE 0xB3 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE 0xB4 0x1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE 0xB5 0x1E41 # LATIN SMALL LETTER M WITH DOT ABOVE 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE 0xB8 0x1E81 # LATIN SMALL LETTER W WITH GRAVE 0xB9 0x1E57 # LATIN SMALL LETTER P WITH DOT ABOVE 0xBA 0x1E83 # LATIN SMALL LETTER W WITH ACUTE 0xBB 0x1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE 0xBC 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE 0xBD 0x1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS 0xBE 0x1E85 # LATIN SMALL LETTER W WITH DIAERESIS 0xBF 0x1E61 # LATIN SMALL LETTER S WITH DOT ABOVE 0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX 0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE 0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX 0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE 0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x1E6B # LATIN SMALL LETTER T WITH DOT ABOVE 0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX 0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS |
Added freshlib/data/_encodings/_sources/8859-15.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | # 8859-15.TXT # Date: 2015-12-02 22:06:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-15:1999 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> # Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-15:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-15 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-15 order. # # Version history # # Version history # 1.0 version: created # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x00A1 # INVERTED EXCLAMATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x20AC # EURO SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xA7 0x00A7 # SECTION SIGN 0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x00AA # FEMININE ORDINAL INDICATOR 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x00AF # MACRON 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xB5 0x00B5 # MICRO SIGN 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON 0xB9 0x00B9 # SUPERSCRIPT ONE 0xBA 0x00BA # MASCULINE ORDINAL INDICATOR 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x0152 # LATIN CAPITAL LIGATURE OE 0xBD 0x0153 # LATIN SMALL LIGATURE OE 0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xBF 0x00BF # INVERTED QUESTION MARK 0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x00D0 # LATIN CAPITAL LETTER ETH 0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 # MULTIPLICATION SIGN 0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x00DE # LATIN CAPITAL LETTER THORN 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x00F0 # LATIN SMALL LETTER ETH 0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE 0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 # DIVISION SIGN 0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x00FE # LATIN SMALL LETTER THORN 0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS |
Added freshlib/data/_encodings/_sources/8859-16.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | # 8859-16.TXT # Date: 2015-12-02 22:08:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-16:2001 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 2001 July 26 (header updated: 2015 December 02) # Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> # # Copyright (c) 1999-2001 Unicode, Inc. All Rights reserved. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-16:2001 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-16 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-16 order. # # Version history # 1.0 version: created # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x0105 # LATIN SMALL LETTER A WITH OGONEK 0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE 0xA4 0x20AC # EURO SIGN 0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK 0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xA7 0x00A7 # SECTION SIGN 0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x017A # LATIN SMALL LETTER Z WITH ACUTE 0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x010C # LATIN CAPITAL LETTER C WITH CARON 0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE 0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xB5 0x201D # RIGHT DOUBLE QUOTATION MARK 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON 0xB9 0x010D # LATIN SMALL LETTER C WITH CARON 0xBA 0x0219 # LATIN SMALL LETTER S WITH COMMA BELOW 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x0152 # LATIN CAPITAL LIGATURE OE 0xBD 0x0153 # LATIN SMALL LIGATURE OE 0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE 0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE 0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE 0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x015A # LATIN CAPITAL LETTER S WITH ACUTE 0xD8 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK 0xDE 0x021A # LATIN CAPITAL LETTER T WITH COMMA BELOW 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x0107 # LATIN SMALL LETTER C WITH ACUTE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE 0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE 0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x015B # LATIN SMALL LETTER S WITH ACUTE 0xF8 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x0119 # LATIN SMALL LETTER E WITH OGONEK 0xFE 0x021B # LATIN SMALL LETTER T WITH COMMA BELOW 0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS |
Added freshlib/data/_encodings/_sources/8859-2.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | # 8859-2.TXT # Date: 2015-12-02 21:34:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO 8859-2:1999 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-2:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-2 order. # # Version history # 1.0 version: updates 0.1 version by adding mappings for all # control characters. # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x02D8 # BREVE 0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON 0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA 0xAB 0x0164 # LATIN CAPITAL LETTER T WITH CARON 0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK 0xB2 0x02DB # OGONEK 0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE 0xB4 0x00B4 # ACUTE ACCENT 0xB5 0x013E # LATIN SMALL LETTER L WITH CARON 0xB6 0x015B # LATIN SMALL LETTER S WITH ACUTE 0xB7 0x02C7 # CARON 0xB8 0x00B8 # CEDILLA 0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON 0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA 0xBB 0x0165 # LATIN SMALL LETTER T WITH CARON 0xBC 0x017A # LATIN SMALL LETTER Z WITH ACUTE 0xBD 0x02DD # DOUBLE ACUTE ACCENT 0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON 0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE 0xC0 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE 0xC6 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x011A # LATIN CAPITAL LETTER E WITH CARON 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x010E # LATIN CAPITAL LETTER D WITH CARON 0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE 0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE 0xD2 0x0147 # LATIN CAPITAL LETTER N WITH CARON 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 # MULTIPLICATION SIGN 0xD8 0x0158 # LATIN CAPITAL LETTER R WITH CARON 0xD9 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x0162 # LATIN CAPITAL LETTER T WITH CEDILLA 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x0155 # LATIN SMALL LETTER R WITH ACUTE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x013A # LATIN SMALL LETTER L WITH ACUTE 0xE6 0x0107 # LATIN SMALL LETTER C WITH ACUTE 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x010D # LATIN SMALL LETTER C WITH CARON 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x011B # LATIN SMALL LETTER E WITH CARON 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x010F # LATIN SMALL LETTER D WITH CARON 0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE 0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE 0xF2 0x0148 # LATIN SMALL LETTER N WITH CARON 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 # DIVISION SIGN 0xF8 0x0159 # LATIN SMALL LETTER R WITH CARON 0xF9 0x016F # LATIN SMALL LETTER U WITH RING ABOVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x0163 # LATIN SMALL LETTER T WITH CEDILLA 0xFF 0x02D9 # DOT ABOVE |
Added freshlib/data/_encodings/_sources/8859-3.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | # 8859-3.TXT # Date: 2015-12-02 21:39:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-3:1999 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-3:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-3 order. # # Version history # 1.0 version: updates 0.1 version by adding mappings for all # control characters. # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE 0xA2 0x02D8 # BREVE 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE 0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA 0xAB 0x011E # LATIN CAPITAL LETTER G WITH BREVE 0xAC 0x0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX 0xAD 0x00AD # SOFT HYPHEN 0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x0127 # LATIN SMALL LETTER H WITH STROKE 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x00B4 # ACUTE ACCENT 0xB5 0x00B5 # MICRO SIGN 0xB6 0x0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x00B8 # CEDILLA 0xB9 0x0131 # LATIN SMALL LETTER DOTLESS I 0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA 0xBB 0x011F # LATIN SMALL LETTER G WITH BREVE 0xBC 0x0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX 0xBD 0x00BD # VULGAR FRACTION ONE HALF 0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE 0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE 0xC6 0x0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 # MULTIPLICATION SIGN 0xD8 0x011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX 0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x016C # LATIN CAPITAL LETTER U WITH BREVE 0xDE 0x015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE 0xE6 0x0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE 0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 # DIVISION SIGN 0xF8 0x011D # LATIN SMALL LETTER G WITH CIRCUMFLEX 0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x016D # LATIN SMALL LETTER U WITH BREVE 0xFE 0x015D # LATIN SMALL LETTER S WITH CIRCUMFLEX 0xFF 0x02D9 # DOT ABOVE |
Added freshlib/data/_encodings/_sources/8859-4.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | # 8859-4.TXT # Date: 2015-12-02 21:41:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-4:1998 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-4:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-4 order. # # Version history # 1.0 version: updates 0.1 version by adding mappings for all # control characters. # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x0138 # LATIN SMALL LETTER KRA 0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE 0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xAA 0x0112 # LATIN CAPITAL LETTER E WITH MACRON 0xAB 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA 0xAC 0x0166 # LATIN CAPITAL LETTER T WITH STROKE 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xAF 0x00AF # MACRON 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK 0xB2 0x02DB # OGONEK 0xB3 0x0157 # LATIN SMALL LETTER R WITH CEDILLA 0xB4 0x00B4 # ACUTE ACCENT 0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE 0xB6 0x013C # LATIN SMALL LETTER L WITH CEDILLA 0xB7 0x02C7 # CARON 0xB8 0x00B8 # CEDILLA 0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON 0xBA 0x0113 # LATIN SMALL LETTER E WITH MACRON 0xBB 0x0123 # LATIN SMALL LETTER G WITH CEDILLA 0xBC 0x0167 # LATIN SMALL LETTER T WITH STROKE 0xBD 0x014A # LATIN CAPITAL LETTER ENG 0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON 0xBF 0x014B # LATIN SMALL LETTER ENG 0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK 0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x012A # LATIN CAPITAL LETTER I WITH MACRON 0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE 0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA 0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON 0xD3 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 # MULTIPLICATION SIGN 0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x0168 # LATIN CAPITAL LETTER U WITH TILDE 0xDE 0x016A # LATIN CAPITAL LETTER U WITH MACRON 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK 0xE8 0x010D # LATIN SMALL LETTER C WITH CARON 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x012B # LATIN SMALL LETTER I WITH MACRON 0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE 0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA 0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON 0xF3 0x0137 # LATIN SMALL LETTER K WITH CEDILLA 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 # DIVISION SIGN 0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x0169 # LATIN SMALL LETTER U WITH TILDE 0xFE 0x016B # LATIN SMALL LETTER U WITH MACRON 0xFF 0x02D9 # DOT ABOVE |
Added freshlib/data/_encodings/_sources/8859-5.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | # 8859-5.TXT # Date: 2015-12-02 21:43:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO 8859-5:1999 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-5:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-5 order. # # Version history # 1.0 version: updates 0.1 version by adding mappings for all # control characters. # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO 0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE 0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE 0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE 0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE 0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0xA7 0x0407 # CYRILLIC CAPITAL LETTER YI 0xA8 0x0408 # CYRILLIC CAPITAL LETTER JE 0xA9 0x0409 # CYRILLIC CAPITAL LETTER LJE 0xAA 0x040A # CYRILLIC CAPITAL LETTER NJE 0xAB 0x040B # CYRILLIC CAPITAL LETTER TSHE 0xAC 0x040C # CYRILLIC CAPITAL LETTER KJE 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x040E # CYRILLIC CAPITAL LETTER SHORT U 0xAF 0x040F # CYRILLIC CAPITAL LETTER DZHE 0xB0 0x0410 # CYRILLIC CAPITAL LETTER A 0xB1 0x0411 # CYRILLIC CAPITAL LETTER BE 0xB2 0x0412 # CYRILLIC CAPITAL LETTER VE 0xB3 0x0413 # CYRILLIC CAPITAL LETTER GHE 0xB4 0x0414 # CYRILLIC CAPITAL LETTER DE 0xB5 0x0415 # CYRILLIC CAPITAL LETTER IE 0xB6 0x0416 # CYRILLIC CAPITAL LETTER ZHE 0xB7 0x0417 # CYRILLIC CAPITAL LETTER ZE 0xB8 0x0418 # CYRILLIC CAPITAL LETTER I 0xB9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I 0xBA 0x041A # CYRILLIC CAPITAL LETTER KA 0xBB 0x041B # CYRILLIC CAPITAL LETTER EL 0xBC 0x041C # CYRILLIC CAPITAL LETTER EM 0xBD 0x041D # CYRILLIC CAPITAL LETTER EN 0xBE 0x041E # CYRILLIC CAPITAL LETTER O 0xBF 0x041F # CYRILLIC CAPITAL LETTER PE 0xC0 0x0420 # CYRILLIC CAPITAL LETTER ER 0xC1 0x0421 # CYRILLIC CAPITAL LETTER ES 0xC2 0x0422 # CYRILLIC CAPITAL LETTER TE 0xC3 0x0423 # CYRILLIC CAPITAL LETTER U 0xC4 0x0424 # CYRILLIC CAPITAL LETTER EF 0xC5 0x0425 # CYRILLIC CAPITAL LETTER HA 0xC6 0x0426 # CYRILLIC CAPITAL LETTER TSE 0xC7 0x0427 # CYRILLIC CAPITAL LETTER CHE 0xC8 0x0428 # CYRILLIC CAPITAL LETTER SHA 0xC9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA 0xCA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN 0xCB 0x042B # CYRILLIC CAPITAL LETTER YERU 0xCC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN 0xCD 0x042D # CYRILLIC CAPITAL LETTER E 0xCE 0x042E # CYRILLIC CAPITAL LETTER YU 0xCF 0x042F # CYRILLIC CAPITAL LETTER YA 0xD0 0x0430 # CYRILLIC SMALL LETTER A 0xD1 0x0431 # CYRILLIC SMALL LETTER BE 0xD2 0x0432 # CYRILLIC SMALL LETTER VE 0xD3 0x0433 # CYRILLIC SMALL LETTER GHE 0xD4 0x0434 # CYRILLIC SMALL LETTER DE 0xD5 0x0435 # CYRILLIC SMALL LETTER IE 0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE 0xD7 0x0437 # CYRILLIC SMALL LETTER ZE 0xD8 0x0438 # CYRILLIC SMALL LETTER I 0xD9 0x0439 # CYRILLIC SMALL LETTER SHORT I 0xDA 0x043A # CYRILLIC SMALL LETTER KA 0xDB 0x043B # CYRILLIC SMALL LETTER EL 0xDC 0x043C # CYRILLIC SMALL LETTER EM 0xDD 0x043D # CYRILLIC SMALL LETTER EN 0xDE 0x043E # CYRILLIC SMALL LETTER O 0xDF 0x043F # CYRILLIC SMALL LETTER PE 0xE0 0x0440 # CYRILLIC SMALL LETTER ER 0xE1 0x0441 # CYRILLIC SMALL LETTER ES 0xE2 0x0442 # CYRILLIC SMALL LETTER TE 0xE3 0x0443 # CYRILLIC SMALL LETTER U 0xE4 0x0444 # CYRILLIC SMALL LETTER EF 0xE5 0x0445 # CYRILLIC SMALL LETTER HA 0xE6 0x0446 # CYRILLIC SMALL LETTER TSE 0xE7 0x0447 # CYRILLIC SMALL LETTER CHE 0xE8 0x0448 # CYRILLIC SMALL LETTER SHA 0xE9 0x0449 # CYRILLIC SMALL LETTER SHCHA 0xEA 0x044A # CYRILLIC SMALL LETTER HARD SIGN 0xEB 0x044B # CYRILLIC SMALL LETTER YERU 0xEC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN 0xED 0x044D # CYRILLIC SMALL LETTER E 0xEE 0x044E # CYRILLIC SMALL LETTER YU 0xEF 0x044F # CYRILLIC SMALL LETTER YA 0xF0 0x2116 # NUMERO SIGN 0xF1 0x0451 # CYRILLIC SMALL LETTER IO 0xF2 0x0452 # CYRILLIC SMALL LETTER DJE 0xF3 0x0453 # CYRILLIC SMALL LETTER GJE 0xF4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE 0xF5 0x0455 # CYRILLIC SMALL LETTER DZE 0xF6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 0xF7 0x0457 # CYRILLIC SMALL LETTER YI 0xF8 0x0458 # CYRILLIC SMALL LETTER JE 0xF9 0x0459 # CYRILLIC SMALL LETTER LJE 0xFA 0x045A # CYRILLIC SMALL LETTER NJE 0xFB 0x045B # CYRILLIC SMALL LETTER TSHE 0xFC 0x045C # CYRILLIC SMALL LETTER KJE 0xFD 0x00A7 # SECTION SIGN 0xFE 0x045E # CYRILLIC SMALL LETTER SHORT U 0xFF 0x045F # CYRILLIC SMALL LETTER DZHE |
Added freshlib/data/_encodings/_sources/8859-6.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | # 8859-6.TXT # Date: 2015-12-02 21:44:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO 8859-6:1999 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-6:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-6 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-6 order. # # Version history # 1.0 version: updates 0.1 version by adding mappings for all # control characters. # 0x30..0x39 remapped to the ASCII digits (U+0030..U+0039) instead # of the Arabic digits (U+0660..U+0669). # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA4 0x00A4 # CURRENCY SIGN 0xAC 0x060C # ARABIC COMMA 0xAD 0x00AD # SOFT HYPHEN 0xBB 0x061B # ARABIC SEMICOLON 0xBF 0x061F # ARABIC QUESTION MARK 0xC1 0x0621 # ARABIC LETTER HAMZA 0xC2 0x0622 # ARABIC LETTER ALEF WITH MADDA ABOVE 0xC3 0x0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE 0xC4 0x0624 # ARABIC LETTER WAW WITH HAMZA ABOVE 0xC5 0x0625 # ARABIC LETTER ALEF WITH HAMZA BELOW 0xC6 0x0626 # ARABIC LETTER YEH WITH HAMZA ABOVE 0xC7 0x0627 # ARABIC LETTER ALEF 0xC8 0x0628 # ARABIC LETTER BEH 0xC9 0x0629 # ARABIC LETTER TEH MARBUTA 0xCA 0x062A # ARABIC LETTER TEH 0xCB 0x062B # ARABIC LETTER THEH 0xCC 0x062C # ARABIC LETTER JEEM 0xCD 0x062D # ARABIC LETTER HAH 0xCE 0x062E # ARABIC LETTER KHAH 0xCF 0x062F # ARABIC LETTER DAL 0xD0 0x0630 # ARABIC LETTER THAL 0xD1 0x0631 # ARABIC LETTER REH 0xD2 0x0632 # ARABIC LETTER ZAIN 0xD3 0x0633 # ARABIC LETTER SEEN 0xD4 0x0634 # ARABIC LETTER SHEEN 0xD5 0x0635 # ARABIC LETTER SAD 0xD6 0x0636 # ARABIC LETTER DAD 0xD7 0x0637 # ARABIC LETTER TAH 0xD8 0x0638 # ARABIC LETTER ZAH 0xD9 0x0639 # ARABIC LETTER AIN 0xDA 0x063A # ARABIC LETTER GHAIN 0xE0 0x0640 # ARABIC TATWEEL 0xE1 0x0641 # ARABIC LETTER FEH 0xE2 0x0642 # ARABIC LETTER QAF 0xE3 0x0643 # ARABIC LETTER KAF 0xE4 0x0644 # ARABIC LETTER LAM 0xE5 0x0645 # ARABIC LETTER MEEM 0xE6 0x0646 # ARABIC LETTER NOON 0xE7 0x0647 # ARABIC LETTER HEH 0xE8 0x0648 # ARABIC LETTER WAW 0xE9 0x0649 # ARABIC LETTER ALEF MAKSURA 0xEA 0x064A # ARABIC LETTER YEH 0xEB 0x064B # ARABIC FATHATAN 0xEC 0x064C # ARABIC DAMMATAN 0xED 0x064D # ARABIC KASRATAN 0xEE 0x064E # ARABIC FATHA 0xEF 0x064F # ARABIC DAMMA 0xF0 0x0650 # ARABIC KASRA 0xF1 0x0651 # ARABIC SHADDA 0xF2 0x0652 # ARABIC SUKUN |
Added freshlib/data/_encodings/_sources/8859-7.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 | # 8859-7.TXT # Date: 2015-12-02 21:47:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO 8859-7:2003 to Unicode # Unicode version: 4.0 # Table version: 3.0 # Table format: Format A # Date: 2003-Nov-12 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO 8859-7:2003 characters map into Unicode. # # ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928, # and ECMA 118. ISO 8859-7:2003 adds two currency signs # and one other character not in the earlier standard. # # Format: Three tab-separated columns # Column #1 is the ISO 8859-7 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO 8859-7 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7 # Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7 # # 2.0 version updates 1.0 version by adding mappings for the # three newly added characters 0xA4, 0xA5, 0xAA. # # 3.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x2018 # LEFT SINGLE QUOTATION MARK 0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK 0xA3 0x00A3 # POUND SIGN 0xA4 0x20AC # EURO SIGN 0xA5 0x20AF # DRACHMA SIGN 0xA6 0x00A6 # BROKEN BAR 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x037A # GREEK YPOGEGRAMMENI 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAF 0x2015 # HORIZONTAL BAR 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x0384 # GREEK TONOS 0xB5 0x0385 # GREEK DIALYTIKA TONOS 0xB6 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS 0xB9 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS 0xBA 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS 0xBD 0x00BD # VULGAR FRACTION ONE HALF 0xBE 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS 0xBF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS 0xC0 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 0xC1 0x0391 # GREEK CAPITAL LETTER ALPHA 0xC2 0x0392 # GREEK CAPITAL LETTER BETA 0xC3 0x0393 # GREEK CAPITAL LETTER GAMMA 0xC4 0x0394 # GREEK CAPITAL LETTER DELTA 0xC5 0x0395 # GREEK CAPITAL LETTER EPSILON 0xC6 0x0396 # GREEK CAPITAL LETTER ZETA 0xC7 0x0397 # GREEK CAPITAL LETTER ETA 0xC8 0x0398 # GREEK CAPITAL LETTER THETA 0xC9 0x0399 # GREEK CAPITAL LETTER IOTA 0xCA 0x039A # GREEK CAPITAL LETTER KAPPA 0xCB 0x039B # GREEK CAPITAL LETTER LAMDA 0xCC 0x039C # GREEK CAPITAL LETTER MU 0xCD 0x039D # GREEK CAPITAL LETTER NU 0xCE 0x039E # GREEK CAPITAL LETTER XI 0xCF 0x039F # GREEK CAPITAL LETTER OMICRON 0xD0 0x03A0 # GREEK CAPITAL LETTER PI 0xD1 0x03A1 # GREEK CAPITAL LETTER RHO 0xD3 0x03A3 # GREEK CAPITAL LETTER SIGMA 0xD4 0x03A4 # GREEK CAPITAL LETTER TAU 0xD5 0x03A5 # GREEK CAPITAL LETTER UPSILON 0xD6 0x03A6 # GREEK CAPITAL LETTER PHI 0xD7 0x03A7 # GREEK CAPITAL LETTER CHI 0xD8 0x03A8 # GREEK CAPITAL LETTER PSI 0xD9 0x03A9 # GREEK CAPITAL LETTER OMEGA 0xDA 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 0xDB 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 0xDC 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS 0xDD 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS 0xDE 0x03AE # GREEK SMALL LETTER ETA WITH TONOS 0xDF 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS 0xE0 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 0xE1 0x03B1 # GREEK SMALL LETTER ALPHA 0xE2 0x03B2 # GREEK SMALL LETTER BETA 0xE3 0x03B3 # GREEK SMALL LETTER GAMMA 0xE4 0x03B4 # GREEK SMALL LETTER DELTA 0xE5 0x03B5 # GREEK SMALL LETTER EPSILON 0xE6 0x03B6 # GREEK SMALL LETTER ZETA 0xE7 0x03B7 # GREEK SMALL LETTER ETA 0xE8 0x03B8 # GREEK SMALL LETTER THETA 0xE9 0x03B9 # GREEK SMALL LETTER IOTA 0xEA 0x03BA # GREEK SMALL LETTER KAPPA 0xEB 0x03BB # GREEK SMALL LETTER LAMDA 0xEC 0x03BC # GREEK SMALL LETTER MU 0xED 0x03BD # GREEK SMALL LETTER NU 0xEE 0x03BE # GREEK SMALL LETTER XI 0xEF 0x03BF # GREEK SMALL LETTER OMICRON 0xF0 0x03C0 # GREEK SMALL LETTER PI 0xF1 0x03C1 # GREEK SMALL LETTER RHO 0xF2 0x03C2 # GREEK SMALL LETTER FINAL SIGMA 0xF3 0x03C3 # GREEK SMALL LETTER SIGMA 0xF4 0x03C4 # GREEK SMALL LETTER TAU 0xF5 0x03C5 # GREEK SMALL LETTER UPSILON 0xF6 0x03C6 # GREEK SMALL LETTER PHI 0xF7 0x03C7 # GREEK SMALL LETTER CHI 0xF8 0x03C8 # GREEK SMALL LETTER PSI 0xF9 0x03C9 # GREEK SMALL LETTER OMEGA 0xFA 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA 0xFB 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA 0xFC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS 0xFD 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS 0xFE 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS |
Added freshlib/data/_encodings/_sources/8859-8.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 | # 8859-8.TXT # Date: 2015-12-02 21:50:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-8:1999 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 2000-Jan-03 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-8:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-8 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # 1.1 version updates to the published 8859-8:1999, correcting # the mapping of 0xAF and adding mappings for LRM and RLM. # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x00A6 # BROKEN BAR 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x00D7 # MULTIPLICATION SIGN 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x00AF # MACRON 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x00B4 # ACUTE ACCENT 0xB5 0x00B5 # MICRO SIGN 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x00B8 # CEDILLA 0xB9 0x00B9 # SUPERSCRIPT ONE 0xBA 0x00F7 # DIVISION SIGN 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC # VULGAR FRACTION ONE QUARTER 0xBD 0x00BD # VULGAR FRACTION ONE HALF 0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS 0xDF 0x2017 # DOUBLE LOW LINE 0xE0 0x05D0 # HEBREW LETTER ALEF 0xE1 0x05D1 # HEBREW LETTER BET 0xE2 0x05D2 # HEBREW LETTER GIMEL 0xE3 0x05D3 # HEBREW LETTER DALET 0xE4 0x05D4 # HEBREW LETTER HE 0xE5 0x05D5 # HEBREW LETTER VAV 0xE6 0x05D6 # HEBREW LETTER ZAYIN 0xE7 0x05D7 # HEBREW LETTER HET 0xE8 0x05D8 # HEBREW LETTER TET 0xE9 0x05D9 # HEBREW LETTER YOD 0xEA 0x05DA # HEBREW LETTER FINAL KAF 0xEB 0x05DB # HEBREW LETTER KAF 0xEC 0x05DC # HEBREW LETTER LAMED 0xED 0x05DD # HEBREW LETTER FINAL MEM 0xEE 0x05DE # HEBREW LETTER MEM 0xEF 0x05DF # HEBREW LETTER FINAL NUN 0xF0 0x05E0 # HEBREW LETTER NUN 0xF1 0x05E1 # HEBREW LETTER SAMEKH 0xF2 0x05E2 # HEBREW LETTER AYIN 0xF3 0x05E3 # HEBREW LETTER FINAL PE 0xF4 0x05E4 # HEBREW LETTER PE 0xF5 0x05E5 # HEBREW LETTER FINAL TSADI 0xF6 0x05E6 # HEBREW LETTER TSADI 0xF7 0x05E7 # HEBREW LETTER QOF 0xF8 0x05E8 # HEBREW LETTER RESH 0xF9 0x05E9 # HEBREW LETTER SHIN 0xFA 0x05EA # HEBREW LETTER TAV 0xFD 0x200E # LEFT-TO-RIGHT MARK 0xFE 0x200F # RIGHT-TO-LEFT MARK |
Added freshlib/data/_encodings/_sources/8859-9.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 | # 8859-9.TXT # Date: 2015-12-02 21:51:00 GMT [KW] # © 2015 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: ISO/IEC 8859-9:1999 to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 1999 July 27 (header updated: 2015 December 02) # Authors: Ken Whistler <ken@unicode.org> # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-9:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-9 order. # # ISO/IEC 8859-9 is also equivalent to ISO-IR-148. # # Version history # 1.0 version: updates 0.1 version by adding mappings for all # control characters. # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x00A1 # INVERTED EXCLAMATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x00A6 # BROKEN BAR 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x00AA # FEMININE ORDINAL INDICATOR 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x00AF # MACRON 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x00B4 # ACUTE ACCENT 0xB5 0x00B5 # MICRO SIGN 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x00B8 # CEDILLA 0xB9 0x00B9 # SUPERSCRIPT ONE 0xBA 0x00BA # MASCULINE ORDINAL INDICATOR 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC # VULGAR FRACTION ONE QUARTER 0xBD 0x00BD # VULGAR FRACTION ONE HALF 0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS 0xBF 0x00BF # INVERTED QUESTION MARK 0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x011E # LATIN CAPITAL LETTER G WITH BREVE 0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 # MULTIPLICATION SIGN 0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE 0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x011F # LATIN SMALL LETTER G WITH BREVE 0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE 0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 # DIVISION SIGN 0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x0131 # LATIN SMALL LETTER DOTLESS I 0xFE 0x015F # LATIN SMALL LETTER S WITH CEDILLA 0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS |
Added freshlib/data/_encodings/_sources/CP037.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp037_IBMUSCanada to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp037_IBMUSCanada code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp037_IBMUSCanada order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x009C #CONTROL 0x05 0x0009 #HORIZONTAL TABULATION 0x06 0x0086 #CONTROL 0x07 0x007F #DELETE 0x08 0x0097 #CONTROL 0x09 0x008D #CONTROL 0x0A 0x008E #CONTROL 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x009D #CONTROL 0x15 0x0085 #CONTROL 0x16 0x0008 #BACKSPACE 0x17 0x0087 #CONTROL 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x0092 #CONTROL 0x1B 0x008F #CONTROL 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0080 #CONTROL 0x21 0x0081 #CONTROL 0x22 0x0082 #CONTROL 0x23 0x0083 #CONTROL 0x24 0x0084 #CONTROL 0x25 0x000A #LINE FEED 0x26 0x0017 #END OF TRANSMISSION BLOCK 0x27 0x001B #ESCAPE 0x28 0x0088 #CONTROL 0x29 0x0089 #CONTROL 0x2A 0x008A #CONTROL 0x2B 0x008B #CONTROL 0x2C 0x008C #CONTROL 0x2D 0x0005 #ENQUIRY 0x2E 0x0006 #ACKNOWLEDGE 0x2F 0x0007 #BELL 0x30 0x0090 #CONTROL 0x31 0x0091 #CONTROL 0x32 0x0016 #SYNCHRONOUS IDLE 0x33 0x0093 #CONTROL 0x34 0x0094 #CONTROL 0x35 0x0095 #CONTROL 0x36 0x0096 #CONTROL 0x37 0x0004 #END OF TRANSMISSION 0x38 0x0098 #CONTROL 0x39 0x0099 #CONTROL 0x3A 0x009A #CONTROL 0x3B 0x009B #CONTROL 0x3C 0x0014 #DEVICE CONTROL FOUR 0x3D 0x0015 #NEGATIVE ACKNOWLEDGE 0x3E 0x009E #CONTROL 0x3F 0x001A #SUBSTITUTE 0x40 0x0020 #SPACE 0x41 0x00A0 #NO-BREAK SPACE 0x42 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x43 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0x44 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0x45 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0x46 0x00E3 #LATIN SMALL LETTER A WITH TILDE 0x47 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0x48 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0x49 0x00F1 #LATIN SMALL LETTER N WITH TILDE 0x4A 0x00A2 #CENT SIGN 0x4B 0x002E #FULL STOP 0x4C 0x003C #LESS-THAN SIGN 0x4D 0x0028 #LEFT PARENTHESIS 0x4E 0x002B #PLUS SIGN 0x4F 0x007C #VERTICAL LINE 0x50 0x0026 #AMPERSAND 0x51 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0x52 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x53 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0x54 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0x55 0x00ED #LATIN SMALL LETTER I WITH ACUTE 0x56 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0x57 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 0x58 0x00EC #LATIN SMALL LETTER I WITH GRAVE 0x59 0x00DF #LATIN SMALL LETTER SHARP S (GERMAN) 0x5A 0x0021 #EXCLAMATION MARK 0x5B 0x0024 #DOLLAR SIGN 0x5C 0x002A #ASTERISK 0x5D 0x0029 #RIGHT PARENTHESIS 0x5E 0x003B #SEMICOLON 0x5F 0x00AC #NOT SIGN 0x60 0x002D #HYPHEN-MINUS 0x61 0x002F #SOLIDUS 0x62 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0x63 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x64 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0x65 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0x66 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE 0x67 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0x68 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x69 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE 0x6A 0x00A6 #BROKEN BAR 0x6B 0x002C #COMMA 0x6C 0x0025 #PERCENT SIGN 0x6D 0x005F #LOW LINE 0x6E 0x003E #GREATER-THAN SIGN 0x6F 0x003F #QUESTION MARK 0x70 0x00F8 #LATIN SMALL LETTER O WITH STROKE 0x71 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0x72 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0x73 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0x74 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 0x75 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE 0x76 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0x77 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS 0x78 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE 0x79 0x0060 #GRAVE ACCENT 0x7A 0x003A #COLON 0x7B 0x0023 #NUMBER SIGN 0x7C 0x0040 #COMMERCIAL AT 0x7D 0x0027 #APOSTROPHE 0x7E 0x003D #EQUALS SIGN 0x7F 0x0022 #QUOTATION MARK 0x80 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE 0x81 0x0061 #LATIN SMALL LETTER A 0x82 0x0062 #LATIN SMALL LETTER B 0x83 0x0063 #LATIN SMALL LETTER C 0x84 0x0064 #LATIN SMALL LETTER D 0x85 0x0065 #LATIN SMALL LETTER E 0x86 0x0066 #LATIN SMALL LETTER F 0x87 0x0067 #LATIN SMALL LETTER G 0x88 0x0068 #LATIN SMALL LETTER H 0x89 0x0069 #LATIN SMALL LETTER I 0x8A 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0x8B 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0x8C 0x00F0 #LATIN SMALL LETTER ETH (ICELANDIC) 0x8D 0x00FD #LATIN SMALL LETTER Y WITH ACUTE 0x8E 0x00FE #LATIN SMALL LETTER THORN (ICELANDIC) 0x8F 0x00B1 #PLUS-MINUS SIGN 0x90 0x00B0 #DEGREE SIGN 0x91 0x006A #LATIN SMALL LETTER J 0x92 0x006B #LATIN SMALL LETTER K 0x93 0x006C #LATIN SMALL LETTER L 0x94 0x006D #LATIN SMALL LETTER M 0x95 0x006E #LATIN SMALL LETTER N 0x96 0x006F #LATIN SMALL LETTER O 0x97 0x0070 #LATIN SMALL LETTER P 0x98 0x0071 #LATIN SMALL LETTER Q 0x99 0x0072 #LATIN SMALL LETTER R 0x9A 0x00AA #FEMININE ORDINAL INDICATOR 0x9B 0x00BA #MASCULINE ORDINAL INDICATOR 0x9C 0x00E6 #LATIN SMALL LIGATURE AE 0x9D 0x00B8 #CEDILLA 0x9E 0x00C6 #LATIN CAPITAL LIGATURE AE 0x9F 0x00A4 #CURRENCY SIGN 0xA0 0x00B5 #MICRO SIGN 0xA1 0x007E #TILDE 0xA2 0x0073 #LATIN SMALL LETTER S 0xA3 0x0074 #LATIN SMALL LETTER T 0xA4 0x0075 #LATIN SMALL LETTER U 0xA5 0x0076 #LATIN SMALL LETTER V 0xA6 0x0077 #LATIN SMALL LETTER W 0xA7 0x0078 #LATIN SMALL LETTER X 0xA8 0x0079 #LATIN SMALL LETTER Y 0xA9 0x007A #LATIN SMALL LETTER Z 0xAA 0x00A1 #INVERTED EXCLAMATION MARK 0xAB 0x00BF #INVERTED QUESTION MARK 0xAC 0x00D0 #LATIN CAPITAL LETTER ETH (ICELANDIC) 0xAD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE 0xAE 0x00DE #LATIN CAPITAL LETTER THORN (ICELANDIC) 0xAF 0x00AE #REGISTERED SIGN 0xB0 0x005E #CIRCUMFLEX ACCENT 0xB1 0x00A3 #POUND SIGN 0xB2 0x00A5 #YEN SIGN 0xB3 0x00B7 #MIDDLE DOT 0xB4 0x00A9 #COPYRIGHT SIGN 0xB5 0x00A7 #SECTION SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00BC #VULGAR FRACTION ONE QUARTER 0xB8 0x00BD #VULGAR FRACTION ONE HALF 0xB9 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBA 0x005B #LEFT SQUARE BRACKET 0xBB 0x005D #RIGHT SQUARE BRACKET 0xBC 0x00AF #MACRON 0xBD 0x00A8 #DIAERESIS 0xBE 0x00B4 #ACUTE ACCENT 0xBF 0x00D7 #MULTIPLICATION SIGN 0xC0 0x007B #LEFT CURLY BRACKET 0xC1 0x0041 #LATIN CAPITAL LETTER A 0xC2 0x0042 #LATIN CAPITAL LETTER B 0xC3 0x0043 #LATIN CAPITAL LETTER C 0xC4 0x0044 #LATIN CAPITAL LETTER D 0xC5 0x0045 #LATIN CAPITAL LETTER E 0xC6 0x0046 #LATIN CAPITAL LETTER F 0xC7 0x0047 #LATIN CAPITAL LETTER G 0xC8 0x0048 #LATIN CAPITAL LETTER H 0xC9 0x0049 #LATIN CAPITAL LETTER I 0xCA 0x00AD #SOFT HYPHEN 0xCB 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xCC 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xCD 0x00F2 #LATIN SMALL LETTER O WITH GRAVE 0xCE 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xCF 0x00F5 #LATIN SMALL LETTER O WITH TILDE 0xD0 0x007D #RIGHT CURLY BRACKET 0xD1 0x004A #LATIN CAPITAL LETTER J 0xD2 0x004B #LATIN CAPITAL LETTER K 0xD3 0x004C #LATIN CAPITAL LETTER L 0xD4 0x004D #LATIN CAPITAL LETTER M 0xD5 0x004E #LATIN CAPITAL LETTER N 0xD6 0x004F #LATIN CAPITAL LETTER O 0xD7 0x0050 #LATIN CAPITAL LETTER P 0xD8 0x0051 #LATIN CAPITAL LETTER Q 0xD9 0x0052 #LATIN CAPITAL LETTER R 0xDA 0x00B9 #SUPERSCRIPT ONE 0xDB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xDC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xDD 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xDE 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xDF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS 0xE0 0x005C #REVERSE SOLIDUS 0xE1 0x00F7 #DIVISION SIGN 0xE2 0x0053 #LATIN CAPITAL LETTER S 0xE3 0x0054 #LATIN CAPITAL LETTER T 0xE4 0x0055 #LATIN CAPITAL LETTER U 0xE5 0x0056 #LATIN CAPITAL LETTER V 0xE6 0x0057 #LATIN CAPITAL LETTER W 0xE7 0x0058 #LATIN CAPITAL LETTER X 0xE8 0x0059 #LATIN CAPITAL LETTER Y 0xE9 0x005A #LATIN CAPITAL LETTER Z 0xEA 0x00B2 #SUPERSCRIPT TWO 0xEB 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xEC 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0xED 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE 0xEE 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xEF 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE 0xF0 0x0030 #DIGIT ZERO 0xF1 0x0031 #DIGIT ONE 0xF2 0x0032 #DIGIT TWO 0xF3 0x0033 #DIGIT THREE 0xF4 0x0034 #DIGIT FOUR 0xF5 0x0035 #DIGIT FIVE 0xF6 0x0036 #DIGIT SIX 0xF7 0x0037 #DIGIT SEVEN 0xF8 0x0038 #DIGIT EIGHT 0xF9 0x0039 #DIGIT NINE 0xFA 0x00B3 #SUPERSCRIPT THREE 0xFB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xFC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 0xFD 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE 0xFE 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE 0xFF 0x009F #CONTROL |
Added freshlib/data/_encodings/_sources/CP1006.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 | # # Name: IBM CP1006 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # IBM CP1006 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the CP1006 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in IBM CP1006 order. # # Version history # 1.0 version new. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x06F0 # EXTENDED ARABIC-INDIC DIGIT ZERO 0xA2 0x06F1 # EXTENDED ARABIC-INDIC DIGIT ONE 0xA3 0x06F2 # EXTENDED ARABIC-INDIC DIGIT TWO 0xA4 0x06F3 # EXTENDED ARABIC-INDIC DIGIT THREE 0xA5 0x06F4 # EXTENDED ARABIC-INDIC DIGIT FOUR 0xA6 0x06F5 # EXTENDED ARABIC-INDIC DIGIT FIVE 0xA7 0x06F6 # EXTENDED ARABIC-INDIC DIGIT SIX 0xA8 0x06F7 # EXTENDED ARABIC-INDIC DIGIT SEVEN 0xA9 0x06F8 # EXTENDED ARABIC-INDIC DIGIT EIGHT 0xAA 0x06F9 # EXTENDED ARABIC-INDIC DIGIT NINE 0xAB 0x060C # ARABIC COMMA 0xAC 0x061B # ARABIC SEMICOLON 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x061F # ARABIC QUESTION MARK 0xAF 0xFE81 # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM 0xB0 0xFE8D # ARABIC LETTER ALEF ISOLATED FORM 0xB1 0xFE8E # ARABIC LETTER ALEF FINAL FORM 0xB2 0xFE8E # ARABIC LETTER ALEF FINAL FORM 0xB3 0xFE8F # ARABIC LETTER BEH ISOLATED FORM 0xB4 0xFE91 # ARABIC LETTER BEH INITIAL FORM 0xB5 0xFB56 # ARABIC LETTER PEH ISOLATED FORM 0xB6 0xFB58 # ARABIC LETTER PEH INITIAL FORM 0xB7 0xFE93 # ARABIC LETTER TEH MARBUTA ISOLATED FORM 0xB8 0xFE95 # ARABIC LETTER TEH ISOLATED FORM 0xB9 0xFE97 # ARABIC LETTER TEH INITIAL FORM 0xBA 0xFB66 # ARABIC LETTER TTEH ISOLATED FORM 0xBB 0xFB68 # ARABIC LETTER TTEH INITIAL FORM 0xBC 0xFE99 # ARABIC LETTER THEH ISOLATED FORM 0xBD 0xFE9B # ARABIC LETTER THEH INITIAL FORM 0xBE 0xFE9D # ARABIC LETTER JEEM ISOLATED FORM 0xBF 0xFE9F # ARABIC LETTER JEEM INITIAL FORM 0xC0 0xFB7A # ARABIC LETTER TCHEH ISOLATED FORM 0xC1 0xFB7C # ARABIC LETTER TCHEH INITIAL FORM 0xC2 0xFEA1 # ARABIC LETTER HAH ISOLATED FORM 0xC3 0xFEA3 # ARABIC LETTER HAH INITIAL FORM 0xC4 0xFEA5 # ARABIC LETTER KHAH ISOLATED FORM 0xC5 0xFEA7 # ARABIC LETTER KHAH INITIAL FORM 0xC6 0xFEA9 # ARABIC LETTER DAL ISOLATED FORM 0xC7 0xFB84 # ARABIC LETTER DAHAL ISOLATED FORMN 0xC8 0xFEAB # ARABIC LETTER THAL ISOLATED FORM 0xC9 0xFEAD # ARABIC LETTER REH ISOLATED FORM 0xCA 0xFB8C # ARABIC LETTER RREH ISOLATED FORM 0xCB 0xFEAF # ARABIC LETTER ZAIN ISOLATED FORM 0xCC 0xFB8A # ARABIC LETTER JEH ISOLATED FORM 0xCD 0xFEB1 # ARABIC LETTER SEEN ISOLATED FORM 0xCE 0xFEB3 # ARABIC LETTER SEEN INITIAL FORM 0xCF 0xFEB5 # ARABIC LETTER SHEEN ISOLATED FORM 0xD0 0xFEB7 # ARABIC LETTER SHEEN INITIAL FORM 0xD1 0xFEB9 # ARABIC LETTER SAD ISOLATED FORM 0xD2 0xFEBB # ARABIC LETTER SAD INITIAL FORM 0xD3 0xFEBD # ARABIC LETTER DAD ISOLATED FORM 0xD4 0xFEBF # ARABIC LETTER DAD INITIAL FORM 0xD5 0xFEC1 # ARABIC LETTER TAH ISOLATED FORM 0xD6 0xFEC5 # ARABIC LETTER ZAH ISOLATED FORM 0xD7 0xFEC9 # ARABIC LETTER AIN ISOLATED FORM 0xD8 0xFECA # ARABIC LETTER AIN FINAL FORM 0xD9 0xFECB # ARABIC LETTER AIN INITIAL FORM 0xDA 0xFECC # ARABIC LETTER AIN MEDIAL FORM 0xDB 0xFECD # ARABIC LETTER GHAIN ISOLATED FORM 0xDC 0xFECE # ARABIC LETTER GHAIN FINAL FORM 0xDD 0xFECF # ARABIC LETTER GHAIN INITIAL FORM 0xDE 0xFED0 # ARABIC LETTER GHAIN MEDIAL FORM 0xDF 0xFED1 # ARABIC LETTER FEH ISOLATED FORM 0xE0 0xFED3 # ARABIC LETTER FEH INITIAL FORM 0xE1 0xFED5 # ARABIC LETTER QAF ISOLATED FORM 0xE2 0xFED7 # ARABIC LETTER QAF INITIAL FORM 0xE3 0xFED9 # ARABIC LETTER KAF ISOLATED FORM 0xE4 0xFEDB # ARABIC LETTER KAF INITIAL FORM 0xE5 0xFB92 # ARABIC LETTER GAF ISOLATED FORM 0xE6 0xFB94 # ARABIC LETTER GAF INITIAL FORM 0xE7 0xFEDD # ARABIC LETTER LAM ISOLATED FORM 0xE8 0xFEDF # ARABIC LETTER LAM INITIAL FORM 0xE9 0xFEE0 # ARABIC LETTER LAM MEDIAL FORM 0xEA 0xFEE1 # ARABIC LETTER MEEM ISOLATED FORM 0xEB 0xFEE3 # ARABIC LETTER MEEM INITIAL FORM 0xEC 0xFB9E # ARABIC LETTER NOON GHUNNA ISOLATED FORM 0xED 0xFEE5 # ARABIC LETTER NOON ISOLATED FORM 0xEE 0xFEE7 # ARABIC LETTER NOON INITIAL FORM 0xEF 0xFE85 # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM 0xF0 0xFEED # ARABIC LETTER WAW ISOLATED FORM 0xF1 0xFBA6 # ARABIC LETTER HEH GOAL ISOLATED FORM 0xF2 0xFBA8 # ARABIC LETTER HEH GOAL INITIAL FORM 0xF3 0xFBA9 # ARABIC LETTER HEH GOAL MEDIAL FORM 0xF4 0xFBAA # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM 0xF5 0xFE80 # ARABIC LETTER HAMZA ISOLATED FORM 0xF6 0xFE89 # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM 0xF7 0xFE8A # ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM 0xF8 0xFE8B # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM 0xF9 0xFEF1 # ARABIC LETTER YEH ISOLATED FORM 0xFA 0xFEF2 # ARABIC LETTER YEH FINAL FORM 0xFB 0xFEF3 # ARABIC LETTER YEH INITIAL FORM 0xFC 0xFBB0 # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM 0xFD 0xFBAE # ARABIC LETTER YEH BARREE ISOLATED FORM 0xFE 0xFE7C # ARABIC SHADDA ISOLATED FORM 0xFF 0xFE7D # ARABIC SHADDA MEDIAL FORM |
Added freshlib/data/_encodings/_sources/CP1026.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp1026_IBMLatin5Turkish to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1026_IBMLatin5Turkish code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1026_IBMLatin5Turkish order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x009C #CONTROL 0x05 0x0009 #HORIZONTAL TABULATION 0x06 0x0086 #CONTROL 0x07 0x007F #DELETE 0x08 0x0097 #CONTROL 0x09 0x008D #CONTROL 0x0A 0x008E #CONTROL 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x009D #CONTROL 0x15 0x0085 #CONTROL 0x16 0x0008 #BACKSPACE 0x17 0x0087 #CONTROL 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x0092 #CONTROL 0x1B 0x008F #CONTROL 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0080 #CONTROL 0x21 0x0081 #CONTROL 0x22 0x0082 #CONTROL 0x23 0x0083 #CONTROL 0x24 0x0084 #CONTROL 0x25 0x000A #LINE FEED 0x26 0x0017 #END OF TRANSMISSION BLOCK 0x27 0x001B #ESCAPE 0x28 0x0088 #CONTROL 0x29 0x0089 #CONTROL 0x2A 0x008A #CONTROL 0x2B 0x008B #CONTROL 0x2C 0x008C #CONTROL 0x2D 0x0005 #ENQUIRY 0x2E 0x0006 #ACKNOWLEDGE 0x2F 0x0007 #BELL 0x30 0x0090 #CONTROL 0x31 0x0091 #CONTROL 0x32 0x0016 #SYNCHRONOUS IDLE 0x33 0x0093 #CONTROL 0x34 0x0094 #CONTROL 0x35 0x0095 #CONTROL 0x36 0x0096 #CONTROL 0x37 0x0004 #END OF TRANSMISSION 0x38 0x0098 #CONTROL 0x39 0x0099 #CONTROL 0x3A 0x009A #CONTROL 0x3B 0x009B #CONTROL 0x3C 0x0014 #DEVICE CONTROL FOUR 0x3D 0x0015 #NEGATIVE ACKNOWLEDGE 0x3E 0x009E #CONTROL 0x3F 0x001A #SUBSTITUTE 0x40 0x0020 #SPACE 0x41 0x00A0 #NO-BREAK SPACE 0x42 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x43 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0x44 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0x45 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0x46 0x00E3 #LATIN SMALL LETTER A WITH TILDE 0x47 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0x48 0x007B #LEFT CURLY BRACKET 0x49 0x00F1 #LATIN SMALL LETTER N WITH TILDE 0x4A 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x4B 0x002E #FULL STOP 0x4C 0x003C #LESS-THAN SIGN 0x4D 0x0028 #LEFT PARENTHESIS 0x4E 0x002B #PLUS SIGN 0x4F 0x0021 #EXCLAMATION MARK 0x50 0x0026 #AMPERSAND 0x51 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0x52 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x53 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0x54 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0x55 0x00ED #LATIN SMALL LETTER I WITH ACUTE 0x56 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0x57 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 0x58 0x00EC #LATIN SMALL LETTER I WITH GRAVE 0x59 0x00DF #LATIN SMALL LETTER SHARP S (GERMAN) 0x5A 0x011E #LATIN CAPITAL LETTER G WITH BREVE 0x5B 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE 0x5C 0x002A #ASTERISK 0x5D 0x0029 #RIGHT PARENTHESIS 0x5E 0x003B #SEMICOLON 0x5F 0x005E #CIRCUMFLEX ACCENT 0x60 0x002D #HYPHEN-MINUS 0x61 0x002F #SOLIDUS 0x62 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0x63 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x64 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0x65 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0x66 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE 0x67 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0x68 0x005B #LEFT SQUARE BRACKET 0x69 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE 0x6A 0x015F #LATIN SMALL LETTER S WITH CEDILLA 0x6B 0x002C #COMMA 0x6C 0x0025 #PERCENT SIGN 0x6D 0x005F #LOW LINE 0x6E 0x003E #GREATER-THAN SIGN 0x6F 0x003F #QUESTION MARK 0x70 0x00F8 #LATIN SMALL LETTER O WITH STROKE 0x71 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0x72 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0x73 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0x74 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 0x75 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE 0x76 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0x77 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS 0x78 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE 0x79 0x0131 #LATIN SMALL LETTER DOTLESS I 0x7A 0x003A #COLON 0x7B 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0x7C 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA 0x7D 0x0027 #APOSTROPHE 0x7E 0x003D #EQUALS SIGN 0x7F 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 0x80 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE 0x81 0x0061 #LATIN SMALL LETTER A 0x82 0x0062 #LATIN SMALL LETTER B 0x83 0x0063 #LATIN SMALL LETTER C 0x84 0x0064 #LATIN SMALL LETTER D 0x85 0x0065 #LATIN SMALL LETTER E 0x86 0x0066 #LATIN SMALL LETTER F 0x87 0x0067 #LATIN SMALL LETTER G 0x88 0x0068 #LATIN SMALL LETTER H 0x89 0x0069 #LATIN SMALL LETTER I 0x8A 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0x8B 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0x8C 0x007D #RIGHT CURLY BRACKET 0x8D 0x0060 #GRAVE ACCENT 0x8E 0x00A6 #BROKEN BAR 0x8F 0x00B1 #PLUS-MINUS SIGN 0x90 0x00B0 #DEGREE SIGN 0x91 0x006A #LATIN SMALL LETTER J 0x92 0x006B #LATIN SMALL LETTER K 0x93 0x006C #LATIN SMALL LETTER L 0x94 0x006D #LATIN SMALL LETTER M 0x95 0x006E #LATIN SMALL LETTER N 0x96 0x006F #LATIN SMALL LETTER O 0x97 0x0070 #LATIN SMALL LETTER P 0x98 0x0071 #LATIN SMALL LETTER Q 0x99 0x0072 #LATIN SMALL LETTER R 0x9A 0x00AA #FEMININE ORDINAL INDICATOR 0x9B 0x00BA #MASCULINE ORDINAL INDICATOR 0x9C 0x00E6 #LATIN SMALL LIGATURE AE 0x9D 0x00B8 #CEDILLA 0x9E 0x00C6 #LATIN CAPITAL LIGATURE AE 0x9F 0x00A4 #CURRENCY SIGN 0xA0 0x00B5 #MICRO SIGN 0xA1 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xA2 0x0073 #LATIN SMALL LETTER S 0xA3 0x0074 #LATIN SMALL LETTER T 0xA4 0x0075 #LATIN SMALL LETTER U 0xA5 0x0076 #LATIN SMALL LETTER V 0xA6 0x0077 #LATIN SMALL LETTER W 0xA7 0x0078 #LATIN SMALL LETTER X 0xA8 0x0079 #LATIN SMALL LETTER Y 0xA9 0x007A #LATIN SMALL LETTER Z 0xAA 0x00A1 #INVERTED EXCLAMATION MARK 0xAB 0x00BF #INVERTED QUESTION MARK 0xAC 0x005D #RIGHT SQUARE BRACKET 0xAD 0x0024 #DOLLAR SIGN 0xAE 0x0040 #COMMERCIAL AT 0xAF 0x00AE #REGISTERED SIGN 0xB0 0x00A2 #CENT SIGN 0xB1 0x00A3 #POUND SIGN 0xB2 0x00A5 #YEN SIGN 0xB3 0x00B7 #MIDDLE DOT 0xB4 0x00A9 #COPYRIGHT SIGN 0xB5 0x00A7 #SECTION SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00BC #VULGAR FRACTION ONE QUARTER 0xB8 0x00BD #VULGAR FRACTION ONE HALF 0xB9 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBA 0x00AC #NOT SIGN 0xBB 0x007C #VERTICAL LINE 0xBC 0x00AF #MACRON 0xBD 0x00A8 #DIAERESIS 0xBE 0x00B4 #ACUTE ACCENT 0xBF 0x00D7 #MULTIPLICATION SIGN 0xC0 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xC1 0x0041 #LATIN CAPITAL LETTER A 0xC2 0x0042 #LATIN CAPITAL LETTER B 0xC3 0x0043 #LATIN CAPITAL LETTER C 0xC4 0x0044 #LATIN CAPITAL LETTER D 0xC5 0x0045 #LATIN CAPITAL LETTER E 0xC6 0x0046 #LATIN CAPITAL LETTER F 0xC7 0x0047 #LATIN CAPITAL LETTER G 0xC8 0x0048 #LATIN CAPITAL LETTER H 0xC9 0x0049 #LATIN CAPITAL LETTER I 0xCA 0x00AD #SOFT HYPHEN 0xCB 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xCC 0x007E #TILDE 0xCD 0x00F2 #LATIN SMALL LETTER O WITH GRAVE 0xCE 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xCF 0x00F5 #LATIN SMALL LETTER O WITH TILDE 0xD0 0x011F #LATIN SMALL LETTER G WITH BREVE 0xD1 0x004A #LATIN CAPITAL LETTER J 0xD2 0x004B #LATIN CAPITAL LETTER K 0xD3 0x004C #LATIN CAPITAL LETTER L 0xD4 0x004D #LATIN CAPITAL LETTER M 0xD5 0x004E #LATIN CAPITAL LETTER N 0xD6 0x004F #LATIN CAPITAL LETTER O 0xD7 0x0050 #LATIN CAPITAL LETTER P 0xD8 0x0051 #LATIN CAPITAL LETTER Q 0xD9 0x0052 #LATIN CAPITAL LETTER R 0xDA 0x00B9 #SUPERSCRIPT ONE 0xDB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xDC 0x005C #REVERSE SOLIDUS 0xDD 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xDE 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xDF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS 0xE0 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xE1 0x00F7 #DIVISION SIGN 0xE2 0x0053 #LATIN CAPITAL LETTER S 0xE3 0x0054 #LATIN CAPITAL LETTER T 0xE4 0x0055 #LATIN CAPITAL LETTER U 0xE5 0x0056 #LATIN CAPITAL LETTER V 0xE6 0x0057 #LATIN CAPITAL LETTER W 0xE7 0x0058 #LATIN CAPITAL LETTER X 0xE8 0x0059 #LATIN CAPITAL LETTER Y 0xE9 0x005A #LATIN CAPITAL LETTER Z 0xEA 0x00B2 #SUPERSCRIPT TWO 0xEB 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xEC 0x0023 #NUMBER SIGN 0xED 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE 0xEE 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xEF 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE 0xF0 0x0030 #DIGIT ZERO 0xF1 0x0031 #DIGIT ONE 0xF2 0x0032 #DIGIT TWO 0xF3 0x0033 #DIGIT THREE 0xF4 0x0034 #DIGIT FOUR 0xF5 0x0035 #DIGIT FIVE 0xF6 0x0036 #DIGIT SIX 0xF7 0x0037 #DIGIT SEVEN 0xF8 0x0038 #DIGIT EIGHT 0xF9 0x0039 #DIGIT NINE 0xFA 0x00B3 #SUPERSCRIPT THREE 0xFB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xFC 0x0022 #QUOTATION MARK 0xFD 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE 0xFE 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE 0xFF 0x009F #CONTROL |
Added freshlib/data/_encodings/_sources/CP1250.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp1250 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1250 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1250 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 #UNDEFINED 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 #UNDEFINED 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x015A #LATIN CAPITAL LETTER S WITH ACUTE 0x8D 0x0164 #LATIN CAPITAL LETTER T WITH CARON 0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON 0x8F 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x015B #LATIN SMALL LETTER S WITH ACUTE 0x9D 0x0165 #LATIN SMALL LETTER T WITH CARON 0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON 0x9F 0x017A #LATIN SMALL LETTER Z WITH ACUTE 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x02C7 #CARON 0xA2 0x02D8 #BREVE 0xA3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x02DB #OGONEK 0xB3 0x0142 #LATIN SMALL LETTER L WITH STROKE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00B8 #CEDILLA 0xB9 0x0105 #LATIN SMALL LETTER A WITH OGONEK 0xBA 0x015F #LATIN SMALL LETTER S WITH CEDILLA 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x013D #LATIN CAPITAL LETTER L WITH CARON 0xBD 0x02DD #DOUBLE ACUTE ACCENT 0xBE 0x013E #LATIN SMALL LETTER L WITH CARON 0xBF 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE 0xC0 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE 0xC6 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE 0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK 0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x011A #LATIN CAPITAL LETTER E WITH CARON 0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x010E #LATIN CAPITAL LETTER D WITH CARON 0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE 0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE 0xD2 0x0147 #LATIN CAPITAL LETTER N WITH CARON 0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 #MULTIPLICATION SIGN 0xD8 0x0158 #LATIN CAPITAL LETTER R WITH CARON 0xD9 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE 0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x0155 #LATIN SMALL LETTER R WITH ACUTE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x013A #LATIN SMALL LETTER L WITH ACUTE 0xE6 0x0107 #LATIN SMALL LETTER C WITH ACUTE 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x010D #LATIN SMALL LETTER C WITH CARON 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x0119 #LATIN SMALL LETTER E WITH OGONEK 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x011B #LATIN SMALL LETTER E WITH CARON 0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x010F #LATIN SMALL LETTER D WITH CARON 0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE 0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE 0xF2 0x0148 #LATIN SMALL LETTER N WITH CARON 0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE 0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 #DIVISION SIGN 0xF8 0x0159 #LATIN SMALL LETTER R WITH CARON 0xF9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA 0xFF 0x02D9 #DOT ABOVE |
Added freshlib/data/_encodings/_sources/CP1251.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp1251 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1251 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1251 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x0402 #CYRILLIC CAPITAL LETTER DJE 0x81 0x0403 #CYRILLIC CAPITAL LETTER GJE 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0453 #CYRILLIC SMALL LETTER GJE 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x20AC #EURO SIGN 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0409 #CYRILLIC CAPITAL LETTER LJE 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x040A #CYRILLIC CAPITAL LETTER NJE 0x8D 0x040C #CYRILLIC CAPITAL LETTER KJE 0x8E 0x040B #CYRILLIC CAPITAL LETTER TSHE 0x8F 0x040F #CYRILLIC CAPITAL LETTER DZHE 0x90 0x0452 #CYRILLIC SMALL LETTER DJE 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0459 #CYRILLIC SMALL LETTER LJE 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x045A #CYRILLIC SMALL LETTER NJE 0x9D 0x045C #CYRILLIC SMALL LETTER KJE 0x9E 0x045B #CYRILLIC SMALL LETTER TSHE 0x9F 0x045F #CYRILLIC SMALL LETTER DZHE 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x040E #CYRILLIC CAPITAL LETTER SHORT U 0xA2 0x045E #CYRILLIC SMALL LETTER SHORT U 0xA3 0x0408 #CYRILLIC CAPITAL LETTER JE 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x0490 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x0401 #CYRILLIC CAPITAL LETTER IO 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x0407 #CYRILLIC CAPITAL LETTER YI 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0xB3 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 0xB4 0x0491 #CYRILLIC SMALL LETTER GHE WITH UPTURN 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x0451 #CYRILLIC SMALL LETTER IO 0xB9 0x2116 #NUMERO SIGN 0xBA 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x0458 #CYRILLIC SMALL LETTER JE 0xBD 0x0405 #CYRILLIC CAPITAL LETTER DZE 0xBE 0x0455 #CYRILLIC SMALL LETTER DZE 0xBF 0x0457 #CYRILLIC SMALL LETTER YI 0xC0 0x0410 #CYRILLIC CAPITAL LETTER A 0xC1 0x0411 #CYRILLIC CAPITAL LETTER BE 0xC2 0x0412 #CYRILLIC CAPITAL LETTER VE 0xC3 0x0413 #CYRILLIC CAPITAL LETTER GHE 0xC4 0x0414 #CYRILLIC CAPITAL LETTER DE 0xC5 0x0415 #CYRILLIC CAPITAL LETTER IE 0xC6 0x0416 #CYRILLIC CAPITAL LETTER ZHE 0xC7 0x0417 #CYRILLIC CAPITAL LETTER ZE 0xC8 0x0418 #CYRILLIC CAPITAL LETTER I 0xC9 0x0419 #CYRILLIC CAPITAL LETTER SHORT I 0xCA 0x041A #CYRILLIC CAPITAL LETTER KA 0xCB 0x041B #CYRILLIC CAPITAL LETTER EL 0xCC 0x041C #CYRILLIC CAPITAL LETTER EM 0xCD 0x041D #CYRILLIC CAPITAL LETTER EN 0xCE 0x041E #CYRILLIC CAPITAL LETTER O 0xCF 0x041F #CYRILLIC CAPITAL LETTER PE 0xD0 0x0420 #CYRILLIC CAPITAL LETTER ER 0xD1 0x0421 #CYRILLIC CAPITAL LETTER ES 0xD2 0x0422 #CYRILLIC CAPITAL LETTER TE 0xD3 0x0423 #CYRILLIC CAPITAL LETTER U 0xD4 0x0424 #CYRILLIC CAPITAL LETTER EF 0xD5 0x0425 #CYRILLIC CAPITAL LETTER HA 0xD6 0x0426 #CYRILLIC CAPITAL LETTER TSE 0xD7 0x0427 #CYRILLIC CAPITAL LETTER CHE 0xD8 0x0428 #CYRILLIC CAPITAL LETTER SHA 0xD9 0x0429 #CYRILLIC CAPITAL LETTER SHCHA 0xDA 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN 0xDB 0x042B #CYRILLIC CAPITAL LETTER YERU 0xDC 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN 0xDD 0x042D #CYRILLIC CAPITAL LETTER E 0xDE 0x042E #CYRILLIC CAPITAL LETTER YU 0xDF 0x042F #CYRILLIC CAPITAL LETTER YA 0xE0 0x0430 #CYRILLIC SMALL LETTER A 0xE1 0x0431 #CYRILLIC SMALL LETTER BE 0xE2 0x0432 #CYRILLIC SMALL LETTER VE 0xE3 0x0433 #CYRILLIC SMALL LETTER GHE 0xE4 0x0434 #CYRILLIC SMALL LETTER DE 0xE5 0x0435 #CYRILLIC SMALL LETTER IE 0xE6 0x0436 #CYRILLIC SMALL LETTER ZHE 0xE7 0x0437 #CYRILLIC SMALL LETTER ZE 0xE8 0x0438 #CYRILLIC SMALL LETTER I 0xE9 0x0439 #CYRILLIC SMALL LETTER SHORT I 0xEA 0x043A #CYRILLIC SMALL LETTER KA 0xEB 0x043B #CYRILLIC SMALL LETTER EL 0xEC 0x043C #CYRILLIC SMALL LETTER EM 0xED 0x043D #CYRILLIC SMALL LETTER EN 0xEE 0x043E #CYRILLIC SMALL LETTER O 0xEF 0x043F #CYRILLIC SMALL LETTER PE 0xF0 0x0440 #CYRILLIC SMALL LETTER ER 0xF1 0x0441 #CYRILLIC SMALL LETTER ES 0xF2 0x0442 #CYRILLIC SMALL LETTER TE 0xF3 0x0443 #CYRILLIC SMALL LETTER U 0xF4 0x0444 #CYRILLIC SMALL LETTER EF 0xF5 0x0445 #CYRILLIC SMALL LETTER HA 0xF6 0x0446 #CYRILLIC SMALL LETTER TSE 0xF7 0x0447 #CYRILLIC SMALL LETTER CHE 0xF8 0x0448 #CYRILLIC SMALL LETTER SHA 0xF9 0x0449 #CYRILLIC SMALL LETTER SHCHA 0xFA 0x044A #CYRILLIC SMALL LETTER HARD SIGN 0xFB 0x044B #CYRILLIC SMALL LETTER YERU 0xFC 0x044C #CYRILLIC SMALL LETTER SOFT SIGN 0xFD 0x044D #CYRILLIC SMALL LETTER E 0xFE 0x044E #CYRILLIC SMALL LETTER YU 0xFF 0x044F #CYRILLIC SMALL LETTER YA |
Added freshlib/data/_encodings/_sources/CP1252.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp1252 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1252 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1252 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x0152 #LATIN CAPITAL LIGATURE OE 0x8D #UNDEFINED 0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x02DC #SMALL TILDE 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x0153 #LATIN SMALL LIGATURE OE 0x9D #UNDEFINED 0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON 0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x00A1 #INVERTED EXCLAMATION MARK 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x00AA #FEMININE ORDINAL INDICATOR 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x00AF #MACRON 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00B8 #CEDILLA 0xB9 0x00B9 #SUPERSCRIPT ONE 0xBA 0x00BA #MASCULINE ORDINAL INDICATOR 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 #LATIN CAPITAL LETTER AE 0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x00D0 #LATIN CAPITAL LETTER ETH 0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 #MULTIPLICATION SIGN 0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x00DE #LATIN CAPITAL LETTER THORN 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 #LATIN SMALL LETTER AE 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x00F0 #LATIN SMALL LETTER ETH 0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE 0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 #DIVISION SIGN 0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x00FE #LATIN SMALL LETTER THORN 0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS |
Added freshlib/data/_encodings/_sources/CP1253.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp1253 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1253 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1253 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 #UNDEFINED 0x89 0x2030 #PER MILLE SIGN 0x8A #UNDEFINED 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C #UNDEFINED 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 0x2122 #TRADE MARK SIGN 0x9A #UNDEFINED 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C #UNDEFINED 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F #UNDEFINED 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x0385 #GREEK DIALYTIKA TONOS 0xA2 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA #UNDEFINED 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x2015 #HORIZONTAL BAR 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x0384 #GREEK TONOS 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS 0xB9 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS 0xBA 0x038A #GREEK CAPITAL LETTER IOTA WITH TONOS 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x038C #GREEK CAPITAL LETTER OMICRON WITH TONOS 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x038E #GREEK CAPITAL LETTER UPSILON WITH TONOS 0xBF 0x038F #GREEK CAPITAL LETTER OMEGA WITH TONOS 0xC0 0x0390 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 0xC1 0x0391 #GREEK CAPITAL LETTER ALPHA 0xC2 0x0392 #GREEK CAPITAL LETTER BETA 0xC3 0x0393 #GREEK CAPITAL LETTER GAMMA 0xC4 0x0394 #GREEK CAPITAL LETTER DELTA 0xC5 0x0395 #GREEK CAPITAL LETTER EPSILON 0xC6 0x0396 #GREEK CAPITAL LETTER ZETA 0xC7 0x0397 #GREEK CAPITAL LETTER ETA 0xC8 0x0398 #GREEK CAPITAL LETTER THETA 0xC9 0x0399 #GREEK CAPITAL LETTER IOTA 0xCA 0x039A #GREEK CAPITAL LETTER KAPPA 0xCB 0x039B #GREEK CAPITAL LETTER LAMDA 0xCC 0x039C #GREEK CAPITAL LETTER MU 0xCD 0x039D #GREEK CAPITAL LETTER NU 0xCE 0x039E #GREEK CAPITAL LETTER XI 0xCF 0x039F #GREEK CAPITAL LETTER OMICRON 0xD0 0x03A0 #GREEK CAPITAL LETTER PI 0xD1 0x03A1 #GREEK CAPITAL LETTER RHO 0xD2 #UNDEFINED 0xD3 0x03A3 #GREEK CAPITAL LETTER SIGMA 0xD4 0x03A4 #GREEK CAPITAL LETTER TAU 0xD5 0x03A5 #GREEK CAPITAL LETTER UPSILON 0xD6 0x03A6 #GREEK CAPITAL LETTER PHI 0xD7 0x03A7 #GREEK CAPITAL LETTER CHI 0xD8 0x03A8 #GREEK CAPITAL LETTER PSI 0xD9 0x03A9 #GREEK CAPITAL LETTER OMEGA 0xDA 0x03AA #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 0xDB 0x03AB #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 0xDC 0x03AC #GREEK SMALL LETTER ALPHA WITH TONOS 0xDD 0x03AD #GREEK SMALL LETTER EPSILON WITH TONOS 0xDE 0x03AE #GREEK SMALL LETTER ETA WITH TONOS 0xDF 0x03AF #GREEK SMALL LETTER IOTA WITH TONOS 0xE0 0x03B0 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 0xE1 0x03B1 #GREEK SMALL LETTER ALPHA 0xE2 0x03B2 #GREEK SMALL LETTER BETA 0xE3 0x03B3 #GREEK SMALL LETTER GAMMA 0xE4 0x03B4 #GREEK SMALL LETTER DELTA 0xE5 0x03B5 #GREEK SMALL LETTER EPSILON 0xE6 0x03B6 #GREEK SMALL LETTER ZETA 0xE7 0x03B7 #GREEK SMALL LETTER ETA 0xE8 0x03B8 #GREEK SMALL LETTER THETA 0xE9 0x03B9 #GREEK SMALL LETTER IOTA 0xEA 0x03BA #GREEK SMALL LETTER KAPPA 0xEB 0x03BB #GREEK SMALL LETTER LAMDA 0xEC 0x03BC #GREEK SMALL LETTER MU 0xED 0x03BD #GREEK SMALL LETTER NU 0xEE 0x03BE #GREEK SMALL LETTER XI 0xEF 0x03BF #GREEK SMALL LETTER OMICRON 0xF0 0x03C0 #GREEK SMALL LETTER PI 0xF1 0x03C1 #GREEK SMALL LETTER RHO 0xF2 0x03C2 #GREEK SMALL LETTER FINAL SIGMA 0xF3 0x03C3 #GREEK SMALL LETTER SIGMA 0xF4 0x03C4 #GREEK SMALL LETTER TAU 0xF5 0x03C5 #GREEK SMALL LETTER UPSILON 0xF6 0x03C6 #GREEK SMALL LETTER PHI 0xF7 0x03C7 #GREEK SMALL LETTER CHI 0xF8 0x03C8 #GREEK SMALL LETTER PSI 0xF9 0x03C9 #GREEK SMALL LETTER OMEGA 0xFA 0x03CA #GREEK SMALL LETTER IOTA WITH DIALYTIKA 0xFB 0x03CB #GREEK SMALL LETTER UPSILON WITH DIALYTIKA 0xFC 0x03CC #GREEK SMALL LETTER OMICRON WITH TONOS 0xFD 0x03CD #GREEK SMALL LETTER UPSILON WITH TONOS 0xFE 0x03CE #GREEK SMALL LETTER OMEGA WITH TONOS 0xFF #UNDEFINED |
Added freshlib/data/_encodings/_sources/CP1254.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp1254 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1254 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1254 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x0152 #LATIN CAPITAL LIGATURE OE 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x02DC #SMALL TILDE 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x0153 #LATIN SMALL LIGATURE OE 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x00A1 #INVERTED EXCLAMATION MARK 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x00AA #FEMININE ORDINAL INDICATOR 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x00AF #MACRON 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00B8 #CEDILLA 0xB9 0x00B9 #SUPERSCRIPT ONE 0xBA 0x00BA #MASCULINE ORDINAL INDICATOR 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 #LATIN CAPITAL LETTER AE 0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x011E #LATIN CAPITAL LETTER G WITH BREVE 0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 #MULTIPLICATION SIGN 0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE 0xDE 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 #LATIN SMALL LETTER AE 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x011F #LATIN SMALL LETTER G WITH BREVE 0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE 0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 #DIVISION SIGN 0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x0131 #LATIN SMALL LETTER DOTLESS I 0xFE 0x015F #LATIN SMALL LETTER S WITH CEDILLA 0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS |
Added freshlib/data/_encodings/_sources/CP1255.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp1255 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 1/7/2000 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1255 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1255 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A #UNDEFINED 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C #UNDEFINED 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x02DC #SMALL TILDE 0x99 0x2122 #TRADE MARK SIGN 0x9A #UNDEFINED 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C #UNDEFINED 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F #UNDEFINED 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x00A1 #INVERTED EXCLAMATION MARK 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x20AA #NEW SHEQEL SIGN 0xA5 0x00A5 #YEN SIGN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x00D7 #MULTIPLICATION SIGN 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x00AF #MACRON 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00B8 #CEDILLA 0xB9 0x00B9 #SUPERSCRIPT ONE 0xBA 0x00F7 #DIVISION SIGN 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x05B0 #HEBREW POINT SHEVA 0xC1 0x05B1 #HEBREW POINT HATAF SEGOL 0xC2 0x05B2 #HEBREW POINT HATAF PATAH 0xC3 0x05B3 #HEBREW POINT HATAF QAMATS 0xC4 0x05B4 #HEBREW POINT HIRIQ 0xC5 0x05B5 #HEBREW POINT TSERE 0xC6 0x05B6 #HEBREW POINT SEGOL 0xC7 0x05B7 #HEBREW POINT PATAH 0xC8 0x05B8 #HEBREW POINT QAMATS 0xC9 0x05B9 #HEBREW POINT HOLAM 0xCA #UNDEFINED 0xCB 0x05BB #HEBREW POINT QUBUTS 0xCC 0x05BC #HEBREW POINT DAGESH OR MAPIQ 0xCD 0x05BD #HEBREW POINT METEG 0xCE 0x05BE #HEBREW PUNCTUATION MAQAF 0xCF 0x05BF #HEBREW POINT RAFE 0xD0 0x05C0 #HEBREW PUNCTUATION PASEQ 0xD1 0x05C1 #HEBREW POINT SHIN DOT 0xD2 0x05C2 #HEBREW POINT SIN DOT 0xD3 0x05C3 #HEBREW PUNCTUATION SOF PASUQ 0xD4 0x05F0 #HEBREW LIGATURE YIDDISH DOUBLE VAV 0xD5 0x05F1 #HEBREW LIGATURE YIDDISH VAV YOD 0xD6 0x05F2 #HEBREW LIGATURE YIDDISH DOUBLE YOD 0xD7 0x05F3 #HEBREW PUNCTUATION GERESH 0xD8 0x05F4 #HEBREW PUNCTUATION GERSHAYIM 0xD9 #UNDEFINED 0xDA #UNDEFINED 0xDB #UNDEFINED 0xDC #UNDEFINED 0xDD #UNDEFINED 0xDE #UNDEFINED 0xDF #UNDEFINED 0xE0 0x05D0 #HEBREW LETTER ALEF 0xE1 0x05D1 #HEBREW LETTER BET 0xE2 0x05D2 #HEBREW LETTER GIMEL 0xE3 0x05D3 #HEBREW LETTER DALET 0xE4 0x05D4 #HEBREW LETTER HE 0xE5 0x05D5 #HEBREW LETTER VAV 0xE6 0x05D6 #HEBREW LETTER ZAYIN 0xE7 0x05D7 #HEBREW LETTER HET 0xE8 0x05D8 #HEBREW LETTER TET 0xE9 0x05D9 #HEBREW LETTER YOD 0xEA 0x05DA #HEBREW LETTER FINAL KAF 0xEB 0x05DB #HEBREW LETTER KAF 0xEC 0x05DC #HEBREW LETTER LAMED 0xED 0x05DD #HEBREW LETTER FINAL MEM 0xEE 0x05DE #HEBREW LETTER MEM 0xEF 0x05DF #HEBREW LETTER FINAL NUN 0xF0 0x05E0 #HEBREW LETTER NUN 0xF1 0x05E1 #HEBREW LETTER SAMEKH 0xF2 0x05E2 #HEBREW LETTER AYIN 0xF3 0x05E3 #HEBREW LETTER FINAL PE 0xF4 0x05E4 #HEBREW LETTER PE 0xF5 0x05E5 #HEBREW LETTER FINAL TSADI 0xF6 0x05E6 #HEBREW LETTER TSADI 0xF7 0x05E7 #HEBREW LETTER QOF 0xF8 0x05E8 #HEBREW LETTER RESH 0xF9 0x05E9 #HEBREW LETTER SHIN 0xFA 0x05EA #HEBREW LETTER TAV 0xFB #UNDEFINED 0xFC #UNDEFINED 0xFD 0x200E #LEFT-TO-RIGHT MARK 0xFE 0x200F #RIGHT-TO-LEFT MARK 0xFF #UNDEFINED |
Added freshlib/data/_encodings/_sources/CP1256.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp1256 to Unicode table # Unicode version: 2.1 # Table version: 2.01 # Table format: Format A # Date: 01/5/99 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1256 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1256 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 0x067E #ARABIC LETTER PEH 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0679 #ARABIC LETTER TTEH 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x0152 #LATIN CAPITAL LIGATURE OE 0x8D 0x0686 #ARABIC LETTER TCHEH 0x8E 0x0698 #ARABIC LETTER JEH 0x8F 0x0688 #ARABIC LETTER DDAL 0x90 0x06AF #ARABIC LETTER GAF 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x06A9 #ARABIC LETTER KEHEH 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0691 #ARABIC LETTER RREH 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x0153 #LATIN SMALL LIGATURE OE 0x9D 0x200C #ZERO WIDTH NON-JOINER 0x9E 0x200D #ZERO WIDTH JOINER 0x9F 0x06BA #ARABIC LETTER NOON GHUNNA 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x060C #ARABIC COMMA 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x06BE #ARABIC LETTER HEH DOACHASHMEE 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x00AF #MACRON 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00B8 #CEDILLA 0xB9 0x00B9 #SUPERSCRIPT ONE 0xBA 0x061B #ARABIC SEMICOLON 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBF 0x061F #ARABIC QUESTION MARK 0xC0 0x06C1 #ARABIC LETTER HEH GOAL 0xC1 0x0621 #ARABIC LETTER HAMZA 0xC2 0x0622 #ARABIC LETTER ALEF WITH MADDA ABOVE 0xC3 0x0623 #ARABIC LETTER ALEF WITH HAMZA ABOVE 0xC4 0x0624 #ARABIC LETTER WAW WITH HAMZA ABOVE 0xC5 0x0625 #ARABIC LETTER ALEF WITH HAMZA BELOW 0xC6 0x0626 #ARABIC LETTER YEH WITH HAMZA ABOVE 0xC7 0x0627 #ARABIC LETTER ALEF 0xC8 0x0628 #ARABIC LETTER BEH 0xC9 0x0629 #ARABIC LETTER TEH MARBUTA 0xCA 0x062A #ARABIC LETTER TEH 0xCB 0x062B #ARABIC LETTER THEH 0xCC 0x062C #ARABIC LETTER JEEM 0xCD 0x062D #ARABIC LETTER HAH 0xCE 0x062E #ARABIC LETTER KHAH 0xCF 0x062F #ARABIC LETTER DAL 0xD0 0x0630 #ARABIC LETTER THAL 0xD1 0x0631 #ARABIC LETTER REH 0xD2 0x0632 #ARABIC LETTER ZAIN 0xD3 0x0633 #ARABIC LETTER SEEN 0xD4 0x0634 #ARABIC LETTER SHEEN 0xD5 0x0635 #ARABIC LETTER SAD 0xD6 0x0636 #ARABIC LETTER DAD 0xD7 0x00D7 #MULTIPLICATION SIGN 0xD8 0x0637 #ARABIC LETTER TAH 0xD9 0x0638 #ARABIC LETTER ZAH 0xDA 0x0639 #ARABIC LETTER AIN 0xDB 0x063A #ARABIC LETTER GHAIN 0xDC 0x0640 #ARABIC TATWEEL 0xDD 0x0641 #ARABIC LETTER FEH 0xDE 0x0642 #ARABIC LETTER QAF 0xDF 0x0643 #ARABIC LETTER KAF 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x0644 #ARABIC LETTER LAM 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x0645 #ARABIC LETTER MEEM 0xE4 0x0646 #ARABIC LETTER NOON 0xE5 0x0647 #ARABIC LETTER HEH 0xE6 0x0648 #ARABIC LETTER WAW 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x0649 #ARABIC LETTER ALEF MAKSURA 0xED 0x064A #ARABIC LETTER YEH 0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x064B #ARABIC FATHATAN 0xF1 0x064C #ARABIC DAMMATAN 0xF2 0x064D #ARABIC KASRATAN 0xF3 0x064E #ARABIC FATHA 0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x064F #ARABIC DAMMA 0xF6 0x0650 #ARABIC KASRA 0xF7 0x00F7 #DIVISION SIGN 0xF8 0x0651 #ARABIC SHADDA 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x0652 #ARABIC SUKUN 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x200E #LEFT-TO-RIGHT MARK 0xFE 0x200F #RIGHT-TO-LEFT MARK 0xFF 0x06D2 #ARABIC LETTER YEH BARREE |
Added freshlib/data/_encodings/_sources/CP1257.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp1257 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1257 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1257 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 #UNDEFINED 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 #UNDEFINED 0x89 0x2030 #PER MILLE SIGN 0x8A #UNDEFINED 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C #UNDEFINED 0x8D 0x00A8 #DIAERESIS 0x8E 0x02C7 #CARON 0x8F 0x00B8 #CEDILLA 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 0x2122 #TRADE MARK SIGN 0x9A #UNDEFINED 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C #UNDEFINED 0x9D 0x00AF #MACRON 0x9E 0x02DB #OGONEK 0x9F #UNDEFINED 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 #UNDEFINED 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 #UNDEFINED 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x00C6 #LATIN CAPITAL LETTER AE 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00F8 #LATIN SMALL LETTER O WITH STROKE 0xB9 0x00B9 #SUPERSCRIPT ONE 0xBA 0x0157 #LATIN SMALL LETTER R WITH CEDILLA 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBF 0x00E6 #LATIN SMALL LETTER AE 0xC0 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK 0xC1 0x012E #LATIN CAPITAL LETTER I WITH OGONEK 0xC2 0x0100 #LATIN CAPITAL LETTER A WITH MACRON 0xC3 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK 0xC7 0x0112 #LATIN CAPITAL LETTER E WITH MACRON 0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE 0xCB 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE 0xCC 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA 0xCD 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA 0xCE 0x012A #LATIN CAPITAL LETTER I WITH MACRON 0xCF 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA 0xD0 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE 0xD2 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA 0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x014C #LATIN CAPITAL LETTER O WITH MACRON 0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 #MULTIPLICATION SIGN 0xD8 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK 0xD9 0x0141 #LATIN CAPITAL LETTER L WITH STROKE 0xDA 0x015A #LATIN CAPITAL LETTER S WITH ACUTE 0xDB 0x016A #LATIN CAPITAL LETTER U WITH MACRON 0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xDE 0x017D #LATIN CAPITAL LETTER Z WITH CARON 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x0105 #LATIN SMALL LETTER A WITH OGONEK 0xE1 0x012F #LATIN SMALL LETTER I WITH OGONEK 0xE2 0x0101 #LATIN SMALL LETTER A WITH MACRON 0xE3 0x0107 #LATIN SMALL LETTER C WITH ACUTE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x0119 #LATIN SMALL LETTER E WITH OGONEK 0xE7 0x0113 #LATIN SMALL LETTER E WITH MACRON 0xE8 0x010D #LATIN SMALL LETTER C WITH CARON 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x017A #LATIN SMALL LETTER Z WITH ACUTE 0xEB 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE 0xEC 0x0123 #LATIN SMALL LETTER G WITH CEDILLA 0xED 0x0137 #LATIN SMALL LETTER K WITH CEDILLA 0xEE 0x012B #LATIN SMALL LETTER I WITH MACRON 0xEF 0x013C #LATIN SMALL LETTER L WITH CEDILLA 0xF0 0x0161 #LATIN SMALL LETTER S WITH CARON 0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE 0xF2 0x0146 #LATIN SMALL LETTER N WITH CEDILLA 0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xF4 0x014D #LATIN SMALL LETTER O WITH MACRON 0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 #DIVISION SIGN 0xF8 0x0173 #LATIN SMALL LETTER U WITH OGONEK 0xF9 0x0142 #LATIN SMALL LETTER L WITH STROKE 0xFA 0x015B #LATIN SMALL LETTER S WITH ACUTE 0xFB 0x016B #LATIN SMALL LETTER U WITH MACRON 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE 0xFE 0x017E #LATIN SMALL LETTER Z WITH CARON 0xFF 0x02D9 #DOT ABOVE |
Added freshlib/data/_encodings/_sources/CP1258.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp1258 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1258 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1258 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A #UNDEFINED 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x0152 #LATIN CAPITAL LIGATURE OE 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x02DC #SMALL TILDE 0x99 0x2122 #TRADE MARK SIGN 0x9A #UNDEFINED 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x0153 #LATIN SMALL LIGATURE OE 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x00A1 #INVERTED EXCLAMATION MARK 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x00AA #FEMININE ORDINAL INDICATOR 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x00AF #MACRON 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00B8 #CEDILLA 0xB9 0x00B9 #SUPERSCRIPT ONE 0xBA 0x00BA #MASCULINE ORDINAL INDICATOR 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 #LATIN CAPITAL LETTER AE 0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x0300 #COMBINING GRAVE ACCENT 0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE 0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x0309 #COMBINING HOOK ABOVE 0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x01A0 #LATIN CAPITAL LETTER O WITH HORN 0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 #MULTIPLICATION SIGN 0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x01AF #LATIN CAPITAL LETTER U WITH HORN 0xDE 0x0303 #COMBINING TILDE 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 #LATIN SMALL LETTER AE 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x0301 #COMBINING ACUTE ACCENT 0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE 0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE 0xF2 0x0323 #COMBINING DOT BELOW 0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x01A1 #LATIN SMALL LETTER O WITH HORN 0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 #DIVISION SIGN 0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x01B0 #LATIN SMALL LETTER U WITH HORN 0xFE 0x20AB #DONG SIGN 0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS |
Added freshlib/data/_encodings/_sources/CP424.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 | # # Name: IBM EBCDIC CP424 (Hebrew) to Unicode table # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # CP424 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the CP424 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # (or for EBCDIC controls, the EBCDIC name in C1 space) # # The entries are in CP424 order # # Version history # 1.0 version new. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x009C #SELECT 0x05 0x0009 #HORIZONTAL TABULATION 0x06 0x0086 #REQUIRED NEW LINE 0x07 0x007F #DELETE 0x08 0x0097 #GRAPHIC ESCAPE 0x09 0x008D #SUPERSCRIPT 0x0A 0x008E #REPEAT 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x009D #RESTORE/ENABLE PRESENTATION 0x15 0x0085 #NEW LINE 0x16 0x0008 #BACKSPACE 0x17 0x0087 #PROGRAM OPERATOR COMMUNICATION 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x0092 #UNIT BACK SPACE 0x1B 0x008F #CUSTOMER USE ONE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0080 #DIGIT SELECT 0x21 0x0081 #START OF SIGNIFICANCE 0x22 0x0082 #FIELD SEPARATOR 0x23 0x0083 #WORD UNDERSCORE 0x24 0x0084 #BYPASS OR INHIBIT PRESENTATION 0x25 0x000A #LINE FEED 0x26 0x0017 #END OF TRANSMISSION BLOCK 0x27 0x001B #ESCAPE 0x28 0x0088 #SET ATTRIBUTE 0x29 0x0089 #START FIELD EXTENDED 0x2A 0x008A #SET MODE OR SWITCH 0x2B 0x008B #CONTROL SEQUENCE PREFIX 0x2C 0x008C #MODIFY FIELD ATTRIBUTE 0x2D 0x0005 #ENQUIRY 0x2E 0x0006 #ACKNOWLEDGE 0x2F 0x0007 #BELL 0x30 0x0090 #<reserved> 0x31 0x0091 #<reserved> 0x32 0x0016 #SYNCHRONOUS IDLE 0x33 0x0093 #INDEX RETURN 0x34 0x0094 #PRESENTATION POSITION 0x35 0x0095 #TRANSPARENT 0x36 0x0096 #NUMERIC BACKSPACE 0x37 0x0004 #END OF TRANSMISSION 0x38 0x0098 #SUBSCRIPT 0x39 0x0099 #INDENT TABULATION 0x3A 0x009A #REVERSE FORM FEED 0x3B 0x009B #CUSTOMER USE THREE 0x3C 0x0014 #DEVICE CONTROL FOUR 0x3D 0x0015 #NEGATIVE ACKNOWLEDGE 0x3E 0x009E #<reserved> 0x3F 0x001A #SUBSTITUTE 0x40 0x0020 #SPACE 0x41 0x05D0 #HEBREW LETTER ALEF 0x42 0x05D1 #HEBREW LETTER BET 0x43 0x05D2 #HEBREW LETTER GIMEL 0x44 0x05D3 #HEBREW LETTER DALET 0x45 0x05D4 #HEBREW LETTER HE 0x46 0x05D5 #HEBREW LETTER VAV 0x47 0x05D6 #HEBREW LETTER ZAYIN 0x48 0x05D7 #HEBREW LETTER HET 0x49 0x05D8 #HEBREW LETTER TET 0x4A 0x00A2 #CENT SIGN 0x4B 0x002E #FULL STOP 0x4C 0x003C #LESS-THAN SIGN 0x4D 0x0028 #LEFT PARENTHESIS 0x4E 0x002B #PLUS SIGN 0x4F 0x007C #VERTICAL LINE 0x50 0x0026 #AMPERSAND 0x51 0x05D9 #HEBREW LETTER YOD 0x52 0x05DA #HEBREW LETTER FINAL KAF 0x53 0x05DB #HEBREW LETTER KAF 0x54 0x05DC #HEBREW LETTER LAMED 0x55 0x05DD #HEBREW LETTER FINAL MEM 0x56 0x05DE #HEBREW LETTER MEM 0x57 0x05DF #HEBREW LETTER FINAL NUN 0x58 0x05E0 #HEBREW LETTER NUN 0x59 0x05E1 #HEBREW LETTER SAMEKH 0x5A 0x0021 #EXCLAMATION MARK 0x5B 0x0024 #DOLLAR SIGN 0x5C 0x002A #ASTERISK 0x5D 0x0029 #RIGHT PARENTHESIS 0x5E 0x003B #SEMICOLON 0x5F 0x00AC #NOT SIGN 0x60 0x002D #HYPHEN-MINUS 0x61 0x002F #SOLIDUS 0x62 0x05E2 #HEBREW LETTER AYIN 0x63 0x05E3 #HEBREW LETTER FINAL PE 0x64 0x05E4 #HEBREW LETTER PE 0x65 0x05E5 #HEBREW LETTER FINAL TSADI 0x66 0x05E6 #HEBREW LETTER TSADI 0x67 0x05E7 #HEBREW LETTER QOF 0x68 0x05E8 #HEBREW LETTER RESH 0x69 0x05E9 #HEBREW LETTER SHIN 0x6A 0x00A6 #BROKEN BAR 0x6B 0x002C #COMMA 0x6C 0x0025 #PERCENT SIGN 0x6D 0x005F #LOW LINE 0x6E 0x003E #GREATER-THAN SIGN 0x6F 0x003F #QUESTION MARK 0x70 #UNDEFINED 0x71 0x05EA #HEBREW LETTER TAV 0x72 #UNDEFINED 0x73 #UNDEFINED 0x74 0x00A0 #NO-BREAK SPACE 0x75 #UNDEFINED 0x76 #UNDEFINED 0x77 #UNDEFINED 0x78 0x2017 #DOUBLE LOW LINE 0x79 0x0060 #GRAVE ACCENT 0x7A 0x003A #COLON 0x7B 0x0023 #NUMBER SIGN 0x7C 0x0040 #COMMERCIAL AT 0x7D 0x0027 #APOSTROPHE 0x7E 0x003D #EQUALS SIGN 0x7F 0x0022 #QUOTATION MARK 0x80 #UNDEFINED 0x81 0x0061 #LATIN SMALL LETTER A 0x82 0x0062 #LATIN SMALL LETTER B 0x83 0x0063 #LATIN SMALL LETTER C 0x84 0x0064 #LATIN SMALL LETTER D 0x85 0x0065 #LATIN SMALL LETTER E 0x86 0x0066 #LATIN SMALL LETTER F 0x87 0x0067 #LATIN SMALL LETTER G 0x88 0x0068 #LATIN SMALL LETTER H 0x89 0x0069 #LATIN SMALL LETTER I 0x8A 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0x8B 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0x8C #UNDEFINED 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F 0x00B1 #PLUS-MINUS SIGN 0x90 0x00B0 #DEGREE SIGN 0x91 0x006A #LATIN SMALL LETTER J 0x92 0x006B #LATIN SMALL LETTER K 0x93 0x006C #LATIN SMALL LETTER L 0x94 0x006D #LATIN SMALL LETTER M 0x95 0x006E #LATIN SMALL LETTER N 0x96 0x006F #LATIN SMALL LETTER O 0x97 0x0070 #LATIN SMALL LETTER P 0x98 0x0071 #LATIN SMALL LETTER Q 0x99 0x0072 #LATIN SMALL LETTER R 0x9A #UNDEFINED 0x9B #UNDEFINED 0x9C #UNDEFINED 0x9D 0x00B8 #CEDILLA 0x9E #UNDEFINED 0x9F 0x00A4 #CURRENCY SIGN 0xA0 0x00B5 #MICRO SIGN 0xA1 0x007E #TILDE 0xA2 0x0073 #LATIN SMALL LETTER S 0xA3 0x0074 #LATIN SMALL LETTER T 0xA4 0x0075 #LATIN SMALL LETTER U 0xA5 0x0076 #LATIN SMALL LETTER V 0xA6 0x0077 #LATIN SMALL LETTER W 0xA7 0x0078 #LATIN SMALL LETTER X 0xA8 0x0079 #LATIN SMALL LETTER Y 0xA9 0x007A #LATIN SMALL LETTER Z 0xAA #UNDEFINED 0xAB #UNDEFINED 0xAC #UNDEFINED 0xAD #UNDEFINED 0xAE #UNDEFINED 0xAF 0x00AE #REGISTERED SIGN 0xB0 0x005E #CIRCUMFLEX ACCENT 0xB1 0x00A3 #POUND SIGN 0xB2 0x00A5 #YEN SIGN 0xB3 0x00B7 #MIDDLE DOT 0xB4 0x00A9 #COPYRIGHT SIGN 0xB5 0x00A7 #SECTION SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00BC #VULGAR FRACTION ONE QUARTER 0xB8 0x00BD #VULGAR FRACTION ONE HALF 0xB9 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBA 0x005B #LEFT SQUARE BRACKET 0xBB 0x005D #RIGHT SQUARE BRACKET 0xBC 0x00AF #MACRON 0xBD 0x00A8 #DIAERESIS 0xBE 0x00B4 #ACUTE ACCENT 0xBF 0x00D7 #MULTIPLICATION SIGN 0xC0 0x007B #LEFT CURLY BRACKET 0xC1 0x0041 #LATIN CAPITAL LETTER A 0xC2 0x0042 #LATIN CAPITAL LETTER B 0xC3 0x0043 #LATIN CAPITAL LETTER C 0xC4 0x0044 #LATIN CAPITAL LETTER D 0xC5 0x0045 #LATIN CAPITAL LETTER E 0xC6 0x0046 #LATIN CAPITAL LETTER F 0xC7 0x0047 #LATIN CAPITAL LETTER G 0xC8 0x0048 #LATIN CAPITAL LETTER H 0xC9 0x0049 #LATIN CAPITAL LETTER I 0xCA 0x00AD #SOFT HYPHEN 0xCB #UNDEFINED 0xCC #UNDEFINED 0xCD #UNDEFINED 0xCE #UNDEFINED 0xCF #UNDEFINED 0xD0 0x007D #RIGHT CURLY BRACKET 0xD1 0x004A #LATIN CAPITAL LETTER J 0xD2 0x004B #LATIN CAPITAL LETTER K 0xD3 0x004C #LATIN CAPITAL LETTER L 0xD4 0x004D #LATIN CAPITAL LETTER M 0xD5 0x004E #LATIN CAPITAL LETTER N 0xD6 0x004F #LATIN CAPITAL LETTER O 0xD7 0x0050 #LATIN CAPITAL LETTER P 0xD8 0x0051 #LATIN CAPITAL LETTER Q 0xD9 0x0052 #LATIN CAPITAL LETTER R 0xDA 0x00B9 #SUPERSCRIPT ONE 0xDB #UNDEFINED 0xDC #UNDEFINED 0xDD #UNDEFINED 0xDE #UNDEFINED 0xDF #UNDEFINED 0xE0 0x005C #REVERSE SOLIDUS 0xE1 0x00F7 #DIVISION SIGN 0xE2 0x0053 #LATIN CAPITAL LETTER S 0xE3 0x0054 #LATIN CAPITAL LETTER T 0xE4 0x0055 #LATIN CAPITAL LETTER U 0xE5 0x0056 #LATIN CAPITAL LETTER V 0xE6 0x0057 #LATIN CAPITAL LETTER W 0xE7 0x0058 #LATIN CAPITAL LETTER X 0xE8 0x0059 #LATIN CAPITAL LETTER Y 0xE9 0x005A #LATIN CAPITAL LETTER Z 0xEA 0x00B2 #SUPERSCRIPT TWO 0xEB #UNDEFINED 0xEC #UNDEFINED 0xED #UNDEFINED 0xEE #UNDEFINED 0xEF #UNDEFINED 0xF0 0x0030 #DIGIT ZERO 0xF1 0x0031 #DIGIT ONE 0xF2 0x0032 #DIGIT TWO 0xF3 0x0033 #DIGIT THREE 0xF4 0x0034 #DIGIT FOUR 0xF5 0x0035 #DIGIT FIVE 0xF6 0x0036 #DIGIT SIX 0xF7 0x0037 #DIGIT SEVEN 0xF8 0x0038 #DIGIT EIGHT 0xF9 0x0039 #DIGIT NINE 0xFA 0x00B3 #SUPERSCRIPT THREE 0xFB #UNDEFINED 0xFC #UNDEFINED 0xFD #UNDEFINED 0xFE #UNDEFINED 0xFF 0x009F #EIGHT ONES |
Added freshlib/data/_encodings/_sources/CP437.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp437_DOSLatinUS to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp437_DOSLatinUS code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp437_DOSLatinUS order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS 0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE 0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS 0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE 0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS 0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX 0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE 0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 0x91 0x00e6 #LATIN SMALL LIGATURE AE 0x92 0x00c6 #LATIN CAPITAL LIGATURE AE 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS 0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE 0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX 0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE 0x98 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS 0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x00a2 #CENT SIGN 0x9c 0x00a3 #POUND SIGN 0x9d 0x00a5 #YEN SIGN 0x9e 0x20a7 #PESETA SIGN 0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE 0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE 0xa6 0x00aa #FEMININE ORDINAL INDICATOR 0xa7 0x00ba #MASCULINE ORDINAL INDICATOR 0xa8 0x00bf #INVERTED QUESTION MARK 0xa9 0x2310 #REVERSED NOT SIGN 0xaa 0x00ac #NOT SIGN 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 0xad 0x00a1 #INVERTED EXCLAMATION MARK 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x258c #LEFT HALF BLOCK 0xde 0x2590 #RIGHT HALF BLOCK 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x03b1 #GREEK SMALL LETTER ALPHA 0xe1 0x00df #LATIN SMALL LETTER SHARP S 0xe2 0x0393 #GREEK CAPITAL LETTER GAMMA 0xe3 0x03c0 #GREEK SMALL LETTER PI 0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA 0xe5 0x03c3 #GREEK SMALL LETTER SIGMA 0xe6 0x00b5 #MICRO SIGN 0xe7 0x03c4 #GREEK SMALL LETTER TAU 0xe8 0x03a6 #GREEK CAPITAL LETTER PHI 0xe9 0x0398 #GREEK CAPITAL LETTER THETA 0xea 0x03a9 #GREEK CAPITAL LETTER OMEGA 0xeb 0x03b4 #GREEK SMALL LETTER DELTA 0xec 0x221e #INFINITY 0xed 0x03c6 #GREEK SMALL LETTER PHI 0xee 0x03b5 #GREEK SMALL LETTER EPSILON 0xef 0x2229 #INTERSECTION 0xf0 0x2261 #IDENTICAL TO 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x2265 #GREATER-THAN OR EQUAL TO 0xf3 0x2264 #LESS-THAN OR EQUAL TO 0xf4 0x2320 #TOP HALF INTEGRAL 0xf5 0x2321 #BOTTOM HALF INTEGRAL 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x2248 #ALMOST EQUAL TO 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x2219 #BULLET OPERATOR 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x221a #SQUARE ROOT 0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP500.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp500_IBMInternational to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp500_IBMInternational code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp500_IBMInternational order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x009C #CONTROL 0x05 0x0009 #HORIZONTAL TABULATION 0x06 0x0086 #CONTROL 0x07 0x007F #DELETE 0x08 0x0097 #CONTROL 0x09 0x008D #CONTROL 0x0A 0x008E #CONTROL 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x009D #CONTROL 0x15 0x0085 #CONTROL 0x16 0x0008 #BACKSPACE 0x17 0x0087 #CONTROL 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x0092 #CONTROL 0x1B 0x008F #CONTROL 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0080 #CONTROL 0x21 0x0081 #CONTROL 0x22 0x0082 #CONTROL 0x23 0x0083 #CONTROL 0x24 0x0084 #CONTROL 0x25 0x000A #LINE FEED 0x26 0x0017 #END OF TRANSMISSION BLOCK 0x27 0x001B #ESCAPE 0x28 0x0088 #CONTROL 0x29 0x0089 #CONTROL 0x2A 0x008A #CONTROL 0x2B 0x008B #CONTROL 0x2C 0x008C #CONTROL 0x2D 0x0005 #ENQUIRY 0x2E 0x0006 #ACKNOWLEDGE 0x2F 0x0007 #BELL 0x30 0x0090 #CONTROL 0x31 0x0091 #CONTROL 0x32 0x0016 #SYNCHRONOUS IDLE 0x33 0x0093 #CONTROL 0x34 0x0094 #CONTROL 0x35 0x0095 #CONTROL 0x36 0x0096 #CONTROL 0x37 0x0004 #END OF TRANSMISSION 0x38 0x0098 #CONTROL 0x39 0x0099 #CONTROL 0x3A 0x009A #CONTROL 0x3B 0x009B #CONTROL 0x3C 0x0014 #DEVICE CONTROL FOUR 0x3D 0x0015 #NEGATIVE ACKNOWLEDGE 0x3E 0x009E #CONTROL 0x3F 0x001A #SUBSTITUTE 0x40 0x0020 #SPACE 0x41 0x00A0 #NO-BREAK SPACE 0x42 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x43 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0x44 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0x45 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0x46 0x00E3 #LATIN SMALL LETTER A WITH TILDE 0x47 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0x48 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0x49 0x00F1 #LATIN SMALL LETTER N WITH TILDE 0x4A 0x005B #LEFT SQUARE BRACKET 0x4B 0x002E #FULL STOP 0x4C 0x003C #LESS-THAN SIGN 0x4D 0x0028 #LEFT PARENTHESIS 0x4E 0x002B #PLUS SIGN 0x4F 0x0021 #EXCLAMATION MARK 0x50 0x0026 #AMPERSAND 0x51 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0x52 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x53 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0x54 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0x55 0x00ED #LATIN SMALL LETTER I WITH ACUTE 0x56 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0x57 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 0x58 0x00EC #LATIN SMALL LETTER I WITH GRAVE 0x59 0x00DF #LATIN SMALL LETTER SHARP S (GERMAN) 0x5A 0x005D #RIGHT SQUARE BRACKET 0x5B 0x0024 #DOLLAR SIGN 0x5C 0x002A #ASTERISK 0x5D 0x0029 #RIGHT PARENTHESIS 0x5E 0x003B #SEMICOLON 0x5F 0x005E #CIRCUMFLEX ACCENT 0x60 0x002D #HYPHEN-MINUS 0x61 0x002F #SOLIDUS 0x62 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0x63 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x64 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0x65 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0x66 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE 0x67 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0x68 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x69 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE 0x6A 0x00A6 #BROKEN BAR 0x6B 0x002C #COMMA 0x6C 0x0025 #PERCENT SIGN 0x6D 0x005F #LOW LINE 0x6E 0x003E #GREATER-THAN SIGN 0x6F 0x003F #QUESTION MARK 0x70 0x00F8 #LATIN SMALL LETTER O WITH STROKE 0x71 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0x72 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0x73 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0x74 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 0x75 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE 0x76 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0x77 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS 0x78 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE 0x79 0x0060 #GRAVE ACCENT 0x7A 0x003A #COLON 0x7B 0x0023 #NUMBER SIGN 0x7C 0x0040 #COMMERCIAL AT 0x7D 0x0027 #APOSTROPHE 0x7E 0x003D #EQUALS SIGN 0x7F 0x0022 #QUOTATION MARK 0x80 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE 0x81 0x0061 #LATIN SMALL LETTER A 0x82 0x0062 #LATIN SMALL LETTER B 0x83 0x0063 #LATIN SMALL LETTER C 0x84 0x0064 #LATIN SMALL LETTER D 0x85 0x0065 #LATIN SMALL LETTER E 0x86 0x0066 #LATIN SMALL LETTER F 0x87 0x0067 #LATIN SMALL LETTER G 0x88 0x0068 #LATIN SMALL LETTER H 0x89 0x0069 #LATIN SMALL LETTER I 0x8A 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0x8B 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0x8C 0x00F0 #LATIN SMALL LETTER ETH (ICELANDIC) 0x8D 0x00FD #LATIN SMALL LETTER Y WITH ACUTE 0x8E 0x00FE #LATIN SMALL LETTER THORN (ICELANDIC) 0x8F 0x00B1 #PLUS-MINUS SIGN 0x90 0x00B0 #DEGREE SIGN 0x91 0x006A #LATIN SMALL LETTER J 0x92 0x006B #LATIN SMALL LETTER K 0x93 0x006C #LATIN SMALL LETTER L 0x94 0x006D #LATIN SMALL LETTER M 0x95 0x006E #LATIN SMALL LETTER N 0x96 0x006F #LATIN SMALL LETTER O 0x97 0x0070 #LATIN SMALL LETTER P 0x98 0x0071 #LATIN SMALL LETTER Q 0x99 0x0072 #LATIN SMALL LETTER R 0x9A 0x00AA #FEMININE ORDINAL INDICATOR 0x9B 0x00BA #MASCULINE ORDINAL INDICATOR 0x9C 0x00E6 #LATIN SMALL LIGATURE AE 0x9D 0x00B8 #CEDILLA 0x9E 0x00C6 #LATIN CAPITAL LIGATURE AE 0x9F 0x00A4 #CURRENCY SIGN 0xA0 0x00B5 #MICRO SIGN 0xA1 0x007E #TILDE 0xA2 0x0073 #LATIN SMALL LETTER S 0xA3 0x0074 #LATIN SMALL LETTER T 0xA4 0x0075 #LATIN SMALL LETTER U 0xA5 0x0076 #LATIN SMALL LETTER V 0xA6 0x0077 #LATIN SMALL LETTER W 0xA7 0x0078 #LATIN SMALL LETTER X 0xA8 0x0079 #LATIN SMALL LETTER Y 0xA9 0x007A #LATIN SMALL LETTER Z 0xAA 0x00A1 #INVERTED EXCLAMATION MARK 0xAB 0x00BF #INVERTED QUESTION MARK 0xAC 0x00D0 #LATIN CAPITAL LETTER ETH (ICELANDIC) 0xAD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE 0xAE 0x00DE #LATIN CAPITAL LETTER THORN (ICELANDIC) 0xAF 0x00AE #REGISTERED SIGN 0xB0 0x00A2 #CENT SIGN 0xB1 0x00A3 #POUND SIGN 0xB2 0x00A5 #YEN SIGN 0xB3 0x00B7 #MIDDLE DOT 0xB4 0x00A9 #COPYRIGHT SIGN 0xB5 0x00A7 #SECTION SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00BC #VULGAR FRACTION ONE QUARTER 0xB8 0x00BD #VULGAR FRACTION ONE HALF 0xB9 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBA 0x00AC #NOT SIGN 0xBB 0x007C #VERTICAL LINE 0xBC 0x00AF #MACRON 0xBD 0x00A8 #DIAERESIS 0xBE 0x00B4 #ACUTE ACCENT 0xBF 0x00D7 #MULTIPLICATION SIGN 0xC0 0x007B #LEFT CURLY BRACKET 0xC1 0x0041 #LATIN CAPITAL LETTER A 0xC2 0x0042 #LATIN CAPITAL LETTER B 0xC3 0x0043 #LATIN CAPITAL LETTER C 0xC4 0x0044 #LATIN CAPITAL LETTER D 0xC5 0x0045 #LATIN CAPITAL LETTER E 0xC6 0x0046 #LATIN CAPITAL LETTER F 0xC7 0x0047 #LATIN CAPITAL LETTER G 0xC8 0x0048 #LATIN CAPITAL LETTER H 0xC9 0x0049 #LATIN CAPITAL LETTER I 0xCA 0x00AD #SOFT HYPHEN 0xCB 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xCC 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xCD 0x00F2 #LATIN SMALL LETTER O WITH GRAVE 0xCE 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xCF 0x00F5 #LATIN SMALL LETTER O WITH TILDE 0xD0 0x007D #RIGHT CURLY BRACKET 0xD1 0x004A #LATIN CAPITAL LETTER J 0xD2 0x004B #LATIN CAPITAL LETTER K 0xD3 0x004C #LATIN CAPITAL LETTER L 0xD4 0x004D #LATIN CAPITAL LETTER M 0xD5 0x004E #LATIN CAPITAL LETTER N 0xD6 0x004F #LATIN CAPITAL LETTER O 0xD7 0x0050 #LATIN CAPITAL LETTER P 0xD8 0x0051 #LATIN CAPITAL LETTER Q 0xD9 0x0052 #LATIN CAPITAL LETTER R 0xDA 0x00B9 #SUPERSCRIPT ONE 0xDB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xDC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xDD 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xDE 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xDF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS 0xE0 0x005C #REVERSE SOLIDUS 0xE1 0x00F7 #DIVISION SIGN 0xE2 0x0053 #LATIN CAPITAL LETTER S 0xE3 0x0054 #LATIN CAPITAL LETTER T 0xE4 0x0055 #LATIN CAPITAL LETTER U 0xE5 0x0056 #LATIN CAPITAL LETTER V 0xE6 0x0057 #LATIN CAPITAL LETTER W 0xE7 0x0058 #LATIN CAPITAL LETTER X 0xE8 0x0059 #LATIN CAPITAL LETTER Y 0xE9 0x005A #LATIN CAPITAL LETTER Z 0xEA 0x00B2 #SUPERSCRIPT TWO 0xEB 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xEC 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0xED 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE 0xEE 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xEF 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE 0xF0 0x0030 #DIGIT ZERO 0xF1 0x0031 #DIGIT ONE 0xF2 0x0032 #DIGIT TWO 0xF3 0x0033 #DIGIT THREE 0xF4 0x0034 #DIGIT FOUR 0xF5 0x0035 #DIGIT FIVE 0xF6 0x0036 #DIGIT SIX 0xF7 0x0037 #DIGIT SEVEN 0xF8 0x0038 #DIGIT EIGHT 0xF9 0x0039 #DIGIT NINE 0xFA 0x00B3 #SUPERSCRIPT THREE 0xFB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xFC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 0xFD 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE 0xFE 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE 0xFF 0x009F #CONTROL |
Added freshlib/data/_encodings/_sources/CP737.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp737_DOSGreek to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp737_DOSGreek code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp737_DOSGreek order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x0391 #GREEK CAPITAL LETTER ALPHA 0x81 0x0392 #GREEK CAPITAL LETTER BETA 0x82 0x0393 #GREEK CAPITAL LETTER GAMMA 0x83 0x0394 #GREEK CAPITAL LETTER DELTA 0x84 0x0395 #GREEK CAPITAL LETTER EPSILON 0x85 0x0396 #GREEK CAPITAL LETTER ZETA 0x86 0x0397 #GREEK CAPITAL LETTER ETA 0x87 0x0398 #GREEK CAPITAL LETTER THETA 0x88 0x0399 #GREEK CAPITAL LETTER IOTA 0x89 0x039a #GREEK CAPITAL LETTER KAPPA 0x8a 0x039b #GREEK CAPITAL LETTER LAMDA 0x8b 0x039c #GREEK CAPITAL LETTER MU 0x8c 0x039d #GREEK CAPITAL LETTER NU 0x8d 0x039e #GREEK CAPITAL LETTER XI 0x8e 0x039f #GREEK CAPITAL LETTER OMICRON 0x8f 0x03a0 #GREEK CAPITAL LETTER PI 0x90 0x03a1 #GREEK CAPITAL LETTER RHO 0x91 0x03a3 #GREEK CAPITAL LETTER SIGMA 0x92 0x03a4 #GREEK CAPITAL LETTER TAU 0x93 0x03a5 #GREEK CAPITAL LETTER UPSILON 0x94 0x03a6 #GREEK CAPITAL LETTER PHI 0x95 0x03a7 #GREEK CAPITAL LETTER CHI 0x96 0x03a8 #GREEK CAPITAL LETTER PSI 0x97 0x03a9 #GREEK CAPITAL LETTER OMEGA 0x98 0x03b1 #GREEK SMALL LETTER ALPHA 0x99 0x03b2 #GREEK SMALL LETTER BETA 0x9a 0x03b3 #GREEK SMALL LETTER GAMMA 0x9b 0x03b4 #GREEK SMALL LETTER DELTA 0x9c 0x03b5 #GREEK SMALL LETTER EPSILON 0x9d 0x03b6 #GREEK SMALL LETTER ZETA 0x9e 0x03b7 #GREEK SMALL LETTER ETA 0x9f 0x03b8 #GREEK SMALL LETTER THETA 0xa0 0x03b9 #GREEK SMALL LETTER IOTA 0xa1 0x03ba #GREEK SMALL LETTER KAPPA 0xa2 0x03bb #GREEK SMALL LETTER LAMDA 0xa3 0x03bc #GREEK SMALL LETTER MU 0xa4 0x03bd #GREEK SMALL LETTER NU 0xa5 0x03be #GREEK SMALL LETTER XI 0xa6 0x03bf #GREEK SMALL LETTER OMICRON 0xa7 0x03c0 #GREEK SMALL LETTER PI 0xa8 0x03c1 #GREEK SMALL LETTER RHO 0xa9 0x03c3 #GREEK SMALL LETTER SIGMA 0xaa 0x03c2 #GREEK SMALL LETTER FINAL SIGMA 0xab 0x03c4 #GREEK SMALL LETTER TAU 0xac 0x03c5 #GREEK SMALL LETTER UPSILON 0xad 0x03c6 #GREEK SMALL LETTER PHI 0xae 0x03c7 #GREEK SMALL LETTER CHI 0xaf 0x03c8 #GREEK SMALL LETTER PSI 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x258c #LEFT HALF BLOCK 0xde 0x2590 #RIGHT HALF BLOCK 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x03c9 #GREEK SMALL LETTER OMEGA 0xe1 0x03ac #GREEK SMALL LETTER ALPHA WITH TONOS 0xe2 0x03ad #GREEK SMALL LETTER EPSILON WITH TONOS 0xe3 0x03ae #GREEK SMALL LETTER ETA WITH TONOS 0xe4 0x03ca #GREEK SMALL LETTER IOTA WITH DIALYTIKA 0xe5 0x03af #GREEK SMALL LETTER IOTA WITH TONOS 0xe6 0x03cc #GREEK SMALL LETTER OMICRON WITH TONOS 0xe7 0x03cd #GREEK SMALL LETTER UPSILON WITH TONOS 0xe8 0x03cb #GREEK SMALL LETTER UPSILON WITH DIALYTIKA 0xe9 0x03ce #GREEK SMALL LETTER OMEGA WITH TONOS 0xea 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS 0xeb 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS 0xec 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS 0xed 0x038a #GREEK CAPITAL LETTER IOTA WITH TONOS 0xee 0x038c #GREEK CAPITAL LETTER OMICRON WITH TONOS 0xef 0x038e #GREEK CAPITAL LETTER UPSILON WITH TONOS 0xf0 0x038f #GREEK CAPITAL LETTER OMEGA WITH TONOS 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x2265 #GREATER-THAN OR EQUAL TO 0xf3 0x2264 #LESS-THAN OR EQUAL TO 0xf4 0x03aa #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 0xf5 0x03ab #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x2248 #ALMOST EQUAL TO 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x2219 #BULLET OPERATOR 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x221a #SQUARE ROOT 0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP775.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp775_DOSBaltRim to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp775_DOSBaltRim code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp775_DOSBaltRim order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 0x83 0x0101 #LATIN SMALL LETTER A WITH MACRON 0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS 0x85 0x0123 #LATIN SMALL LETTER G WITH CEDILLA 0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE 0x87 0x0107 #LATIN SMALL LETTER C WITH ACUTE 0x88 0x0142 #LATIN SMALL LETTER L WITH STROKE 0x89 0x0113 #LATIN SMALL LETTER E WITH MACRON 0x8a 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA 0x8b 0x0157 #LATIN SMALL LETTER R WITH CEDILLA 0x8c 0x012b #LATIN SMALL LETTER I WITH MACRON 0x8d 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE 0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 0x91 0x00e6 #LATIN SMALL LIGATURE AE 0x92 0x00c6 #LATIN CAPITAL LIGATURE AE 0x93 0x014d #LATIN SMALL LETTER O WITH MACRON 0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS 0x95 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA 0x96 0x00a2 #CENT SIGN 0x97 0x015a #LATIN CAPITAL LETTER S WITH ACUTE 0x98 0x015b #LATIN SMALL LETTER S WITH ACUTE 0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE 0x9c 0x00a3 #POUND SIGN 0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE 0x9e 0x00d7 #MULTIPLICATION SIGN 0x9f 0x00a4 #CURRENCY SIGN 0xa0 0x0100 #LATIN CAPITAL LETTER A WITH MACRON 0xa1 0x012a #LATIN CAPITAL LETTER I WITH MACRON 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x017b #LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xa4 0x017c #LATIN SMALL LETTER Z WITH DOT ABOVE 0xa5 0x017a #LATIN SMALL LETTER Z WITH ACUTE 0xa6 0x201d #RIGHT DOUBLE QUOTATION MARK 0xa7 0x00a6 #BROKEN BAR 0xa8 0x00a9 #COPYRIGHT SIGN 0xa9 0x00ae #REGISTERED SIGN 0xaa 0x00ac #NOT SIGN 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 0xad 0x0141 #LATIN CAPITAL LETTER L WITH STROKE 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK 0xb6 0x010c #LATIN CAPITAL LETTER C WITH CARON 0xb7 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK 0xb8 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x012e #LATIN CAPITAL LETTER I WITH OGONEK 0xbe 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK 0xc7 0x016a #LATIN CAPITAL LETTER U WITH MACRON 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x017d #LATIN CAPITAL LETTER Z WITH CARON 0xd0 0x0105 #LATIN SMALL LETTER A WITH OGONEK 0xd1 0x010d #LATIN SMALL LETTER C WITH CARON 0xd2 0x0119 #LATIN SMALL LETTER E WITH OGONEK 0xd3 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE 0xd4 0x012f #LATIN SMALL LETTER I WITH OGONEK 0xd5 0x0161 #LATIN SMALL LETTER S WITH CARON 0xd6 0x0173 #LATIN SMALL LETTER U WITH OGONEK 0xd7 0x016b #LATIN SMALL LETTER U WITH MACRON 0xd8 0x017e #LATIN SMALL LETTER Z WITH CARON 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x258c #LEFT HALF BLOCK 0xde 0x2590 #RIGHT HALF BLOCK 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE 0xe1 0x00df #LATIN SMALL LETTER SHARP S (GERMAN) 0xe2 0x014c #LATIN CAPITAL LETTER O WITH MACRON 0xe3 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE 0xe4 0x00f5 #LATIN SMALL LETTER O WITH TILDE 0xe5 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE 0xe6 0x00b5 #MICRO SIGN 0xe7 0x0144 #LATIN SMALL LETTER N WITH ACUTE 0xe8 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA 0xe9 0x0137 #LATIN SMALL LETTER K WITH CEDILLA 0xea 0x013b #LATIN CAPITAL LETTER L WITH CEDILLA 0xeb 0x013c #LATIN SMALL LETTER L WITH CEDILLA 0xec 0x0146 #LATIN SMALL LETTER N WITH CEDILLA 0xed 0x0112 #LATIN CAPITAL LETTER E WITH MACRON 0xee 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA 0xef 0x2019 #RIGHT SINGLE QUOTATION MARK 0xf0 0x00ad #SOFT HYPHEN 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x201c #LEFT DOUBLE QUOTATION MARK 0xf3 0x00be #VULGAR FRACTION THREE QUARTERS 0xf4 0x00b6 #PILCROW SIGN 0xf5 0x00a7 #SECTION SIGN 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x201e #DOUBLE LOW-9 QUOTATION MARK 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x2219 #BULLET OPERATOR 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x00b9 #SUPERSCRIPT ONE 0xfc 0x00b3 #SUPERSCRIPT THREE 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP850.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp850_DOSLatin1 to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp850_DOSLatin1 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp850_DOSLatin1 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS 0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE 0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS 0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE 0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS 0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX 0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE 0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 0x91 0x00e6 #LATIN SMALL LIGATURE AE 0x92 0x00c6 #LATIN CAPITAL LIGATURE AE 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS 0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE 0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX 0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE 0x98 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS 0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE 0x9c 0x00a3 #POUND SIGN 0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE 0x9e 0x00d7 #MULTIPLICATION SIGN 0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE 0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE 0xa6 0x00aa #FEMININE ORDINAL INDICATOR 0xa7 0x00ba #MASCULINE ORDINAL INDICATOR 0xa8 0x00bf #INVERTED QUESTION MARK 0xa9 0x00ae #REGISTERED SIGN 0xaa 0x00ac #NOT SIGN 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 0xad 0x00a1 #INVERTED EXCLAMATION MARK 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE 0xb6 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xb7 0x00c0 #LATIN CAPITAL LETTER A WITH GRAVE 0xb8 0x00a9 #COPYRIGHT SIGN 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x00a2 #CENT SIGN 0xbe 0x00a5 #YEN SIGN 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x00e3 #LATIN SMALL LETTER A WITH TILDE 0xc7 0x00c3 #LATIN CAPITAL LETTER A WITH TILDE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x00a4 #CURRENCY SIGN 0xd0 0x00f0 #LATIN SMALL LETTER ETH 0xd1 0x00d0 #LATIN CAPITAL LETTER ETH 0xd2 0x00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xd3 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS 0xd4 0x00c8 #LATIN CAPITAL LETTER E WITH GRAVE 0xd5 0x0131 #LATIN SMALL LETTER DOTLESS I 0xd6 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE 0xd7 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xd8 0x00cf #LATIN CAPITAL LETTER I WITH DIAERESIS 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x00a6 #BROKEN BAR 0xde 0x00cc #LATIN CAPITAL LETTER I WITH GRAVE 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE 0xe1 0x00df #LATIN SMALL LETTER SHARP S 0xe2 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xe3 0x00d2 #LATIN CAPITAL LETTER O WITH GRAVE 0xe4 0x00f5 #LATIN SMALL LETTER O WITH TILDE 0xe5 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE 0xe6 0x00b5 #MICRO SIGN 0xe7 0x00fe #LATIN SMALL LETTER THORN 0xe8 0x00de #LATIN CAPITAL LETTER THORN 0xe9 0x00da #LATIN CAPITAL LETTER U WITH ACUTE 0xea 0x00db #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xeb 0x00d9 #LATIN CAPITAL LETTER U WITH GRAVE 0xec 0x00fd #LATIN SMALL LETTER Y WITH ACUTE 0xed 0x00dd #LATIN CAPITAL LETTER Y WITH ACUTE 0xee 0x00af #MACRON 0xef 0x00b4 #ACUTE ACCENT 0xf0 0x00ad #SOFT HYPHEN 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x2017 #DOUBLE LOW LINE 0xf3 0x00be #VULGAR FRACTION THREE QUARTERS 0xf4 0x00b6 #PILCROW SIGN 0xf5 0x00a7 #SECTION SIGN 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x00b8 #CEDILLA 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x00a8 #DIAERESIS 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x00b9 #SUPERSCRIPT ONE 0xfc 0x00b3 #SUPERSCRIPT THREE 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP852.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp852_DOSLatin2 to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp852_DOSLatin2 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp852_DOSLatin2 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS 0x85 0x016f #LATIN SMALL LETTER U WITH RING ABOVE 0x86 0x0107 #LATIN SMALL LETTER C WITH ACUTE 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 0x88 0x0142 #LATIN SMALL LETTER L WITH STROKE 0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS 0x8a 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0x8b 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE 0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX 0x8d 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE 0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x8f 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 0x91 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE 0x92 0x013a #LATIN SMALL LETTER L WITH ACUTE 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS 0x95 0x013d #LATIN CAPITAL LETTER L WITH CARON 0x96 0x013e #LATIN SMALL LETTER L WITH CARON 0x97 0x015a #LATIN CAPITAL LETTER S WITH ACUTE 0x98 0x015b #LATIN SMALL LETTER S WITH ACUTE 0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x0164 #LATIN CAPITAL LETTER T WITH CARON 0x9c 0x0165 #LATIN SMALL LETTER T WITH CARON 0x9d 0x0141 #LATIN CAPITAL LETTER L WITH STROKE 0x9e 0x00d7 #MULTIPLICATION SIGN 0x9f 0x010d #LATIN SMALL LETTER C WITH CARON 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 0xa4 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK 0xa5 0x0105 #LATIN SMALL LETTER A WITH OGONEK 0xa6 0x017d #LATIN CAPITAL LETTER Z WITH CARON 0xa7 0x017e #LATIN SMALL LETTER Z WITH CARON 0xa8 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK 0xa9 0x0119 #LATIN SMALL LETTER E WITH OGONEK 0xaa 0x00ac #NOT SIGN 0xab 0x017a #LATIN SMALL LETTER Z WITH ACUTE 0xac 0x010c #LATIN CAPITAL LETTER C WITH CARON 0xad 0x015f #LATIN SMALL LETTER S WITH CEDILLA 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE 0xb6 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xb7 0x011a #LATIN CAPITAL LETTER E WITH CARON 0xb8 0x015e #LATIN CAPITAL LETTER S WITH CEDILLA 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x017b #LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xbe 0x017c #LATIN SMALL LETTER Z WITH DOT ABOVE 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x0102 #LATIN CAPITAL LETTER A WITH BREVE 0xc7 0x0103 #LATIN SMALL LETTER A WITH BREVE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x00a4 #CURRENCY SIGN 0xd0 0x0111 #LATIN SMALL LETTER D WITH STROKE 0xd1 0x0110 #LATIN CAPITAL LETTER D WITH STROKE 0xd2 0x010e #LATIN CAPITAL LETTER D WITH CARON 0xd3 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS 0xd4 0x010f #LATIN SMALL LETTER D WITH CARON 0xd5 0x0147 #LATIN CAPITAL LETTER N WITH CARON 0xd6 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE 0xd7 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xd8 0x011b #LATIN SMALL LETTER E WITH CARON 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA 0xde 0x016e #LATIN CAPITAL LETTER U WITH RING ABOVE 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE 0xe1 0x00df #LATIN SMALL LETTER SHARP S 0xe2 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xe3 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE 0xe4 0x0144 #LATIN SMALL LETTER N WITH ACUTE 0xe5 0x0148 #LATIN SMALL LETTER N WITH CARON 0xe6 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0xe7 0x0161 #LATIN SMALL LETTER S WITH CARON 0xe8 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE 0xe9 0x00da #LATIN CAPITAL LETTER U WITH ACUTE 0xea 0x0155 #LATIN SMALL LETTER R WITH ACUTE 0xeb 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0xec 0x00fd #LATIN SMALL LETTER Y WITH ACUTE 0xed 0x00dd #LATIN CAPITAL LETTER Y WITH ACUTE 0xee 0x0163 #LATIN SMALL LETTER T WITH CEDILLA 0xef 0x00b4 #ACUTE ACCENT 0xf0 0x00ad #SOFT HYPHEN 0xf1 0x02dd #DOUBLE ACUTE ACCENT 0xf2 0x02db #OGONEK 0xf3 0x02c7 #CARON 0xf4 0x02d8 #BREVE 0xf5 0x00a7 #SECTION SIGN 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x00b8 #CEDILLA 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x00a8 #DIAERESIS 0xfa 0x02d9 #DOT ABOVE 0xfb 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE 0xfc 0x0158 #LATIN CAPITAL LETTER R WITH CARON 0xfd 0x0159 #LATIN SMALL LETTER R WITH CARON 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP855.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp855_DOSCyrillic to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp855_DOSCyrillic code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp855_DOSCyrillic order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x0452 #CYRILLIC SMALL LETTER DJE 0x81 0x0402 #CYRILLIC CAPITAL LETTER DJE 0x82 0x0453 #CYRILLIC SMALL LETTER GJE 0x83 0x0403 #CYRILLIC CAPITAL LETTER GJE 0x84 0x0451 #CYRILLIC SMALL LETTER IO 0x85 0x0401 #CYRILLIC CAPITAL LETTER IO 0x86 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE 0x87 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE 0x88 0x0455 #CYRILLIC SMALL LETTER DZE 0x89 0x0405 #CYRILLIC CAPITAL LETTER DZE 0x8a 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 0x8b 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0x8c 0x0457 #CYRILLIC SMALL LETTER YI 0x8d 0x0407 #CYRILLIC CAPITAL LETTER YI 0x8e 0x0458 #CYRILLIC SMALL LETTER JE 0x8f 0x0408 #CYRILLIC CAPITAL LETTER JE 0x90 0x0459 #CYRILLIC SMALL LETTER LJE 0x91 0x0409 #CYRILLIC CAPITAL LETTER LJE 0x92 0x045a #CYRILLIC SMALL LETTER NJE 0x93 0x040a #CYRILLIC CAPITAL LETTER NJE 0x94 0x045b #CYRILLIC SMALL LETTER TSHE 0x95 0x040b #CYRILLIC CAPITAL LETTER TSHE 0x96 0x045c #CYRILLIC SMALL LETTER KJE 0x97 0x040c #CYRILLIC CAPITAL LETTER KJE 0x98 0x045e #CYRILLIC SMALL LETTER SHORT U 0x99 0x040e #CYRILLIC CAPITAL LETTER SHORT U 0x9a 0x045f #CYRILLIC SMALL LETTER DZHE 0x9b 0x040f #CYRILLIC CAPITAL LETTER DZHE 0x9c 0x044e #CYRILLIC SMALL LETTER YU 0x9d 0x042e #CYRILLIC CAPITAL LETTER YU 0x9e 0x044a #CYRILLIC SMALL LETTER HARD SIGN 0x9f 0x042a #CYRILLIC CAPITAL LETTER HARD SIGN 0xa0 0x0430 #CYRILLIC SMALL LETTER A 0xa1 0x0410 #CYRILLIC CAPITAL LETTER A 0xa2 0x0431 #CYRILLIC SMALL LETTER BE 0xa3 0x0411 #CYRILLIC CAPITAL LETTER BE 0xa4 0x0446 #CYRILLIC SMALL LETTER TSE 0xa5 0x0426 #CYRILLIC CAPITAL LETTER TSE 0xa6 0x0434 #CYRILLIC SMALL LETTER DE 0xa7 0x0414 #CYRILLIC CAPITAL LETTER DE 0xa8 0x0435 #CYRILLIC SMALL LETTER IE 0xa9 0x0415 #CYRILLIC CAPITAL LETTER IE 0xaa 0x0444 #CYRILLIC SMALL LETTER EF 0xab 0x0424 #CYRILLIC CAPITAL LETTER EF 0xac 0x0433 #CYRILLIC SMALL LETTER GHE 0xad 0x0413 #CYRILLIC CAPITAL LETTER GHE 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x0445 #CYRILLIC SMALL LETTER HA 0xb6 0x0425 #CYRILLIC CAPITAL LETTER HA 0xb7 0x0438 #CYRILLIC SMALL LETTER I 0xb8 0x0418 #CYRILLIC CAPITAL LETTER I 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x0439 #CYRILLIC SMALL LETTER SHORT I 0xbe 0x0419 #CYRILLIC CAPITAL LETTER SHORT I 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x043a #CYRILLIC SMALL LETTER KA 0xc7 0x041a #CYRILLIC CAPITAL LETTER KA 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x00a4 #CURRENCY SIGN 0xd0 0x043b #CYRILLIC SMALL LETTER EL 0xd1 0x041b #CYRILLIC CAPITAL LETTER EL 0xd2 0x043c #CYRILLIC SMALL LETTER EM 0xd3 0x041c #CYRILLIC CAPITAL LETTER EM 0xd4 0x043d #CYRILLIC SMALL LETTER EN 0xd5 0x041d #CYRILLIC CAPITAL LETTER EN 0xd6 0x043e #CYRILLIC SMALL LETTER O 0xd7 0x041e #CYRILLIC CAPITAL LETTER O 0xd8 0x043f #CYRILLIC SMALL LETTER PE 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x041f #CYRILLIC CAPITAL LETTER PE 0xde 0x044f #CYRILLIC SMALL LETTER YA 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x042f #CYRILLIC CAPITAL LETTER YA 0xe1 0x0440 #CYRILLIC SMALL LETTER ER 0xe2 0x0420 #CYRILLIC CAPITAL LETTER ER 0xe3 0x0441 #CYRILLIC SMALL LETTER ES 0xe4 0x0421 #CYRILLIC CAPITAL LETTER ES 0xe5 0x0442 #CYRILLIC SMALL LETTER TE 0xe6 0x0422 #CYRILLIC CAPITAL LETTER TE 0xe7 0x0443 #CYRILLIC SMALL LETTER U 0xe8 0x0423 #CYRILLIC CAPITAL LETTER U 0xe9 0x0436 #CYRILLIC SMALL LETTER ZHE 0xea 0x0416 #CYRILLIC CAPITAL LETTER ZHE 0xeb 0x0432 #CYRILLIC SMALL LETTER VE 0xec 0x0412 #CYRILLIC CAPITAL LETTER VE 0xed 0x044c #CYRILLIC SMALL LETTER SOFT SIGN 0xee 0x042c #CYRILLIC CAPITAL LETTER SOFT SIGN 0xef 0x2116 #NUMERO SIGN 0xf0 0x00ad #SOFT HYPHEN 0xf1 0x044b #CYRILLIC SMALL LETTER YERU 0xf2 0x042b #CYRILLIC CAPITAL LETTER YERU 0xf3 0x0437 #CYRILLIC SMALL LETTER ZE 0xf4 0x0417 #CYRILLIC CAPITAL LETTER ZE 0xf5 0x0448 #CYRILLIC SMALL LETTER SHA 0xf6 0x0428 #CYRILLIC CAPITAL LETTER SHA 0xf7 0x044d #CYRILLIC SMALL LETTER E 0xf8 0x042d #CYRILLIC CAPITAL LETTER E 0xf9 0x0449 #CYRILLIC SMALL LETTER SHCHA 0xfa 0x0429 #CYRILLIC CAPITAL LETTER SHCHA 0xfb 0x0447 #CYRILLIC SMALL LETTER CHE 0xfc 0x0427 #CYRILLIC CAPITAL LETTER CHE 0xfd 0x00a7 #SECTION SIGN 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP856.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 | # # Name: cp856_Hebrew_PC to Unicode table # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler (kenw@sybase.com) # # Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # CP424 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the cp856_Hebrew_PC code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp856_Hebrew_PC order # # Version history # 1.0 version new. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x05D0 #HEBREW LETTER ALEF 0x81 0x05D1 #HEBREW LETTER BET 0x82 0x05D2 #HEBREW LETTER GIMEL 0x83 0x05D3 #HEBREW LETTER DALET 0x84 0x05D4 #HEBREW LETTER HE 0x85 0x05D5 #HEBREW LETTER VAV 0x86 0x05D6 #HEBREW LETTER ZAYIN 0x87 0x05D7 #HEBREW LETTER HET 0x88 0x05D8 #HEBREW LETTER TET 0x89 0x05D9 #HEBREW LETTER YOD 0x8A 0x05DA #HEBREW LETTER FINAL KAF 0x8B 0x05DB #HEBREW LETTER KAF 0x8C 0x05DC #HEBREW LETTER LAMED 0x8D 0x05DD #HEBREW LETTER FINAL MEM 0x8E 0x05DE #HEBREW LETTER MEM 0x8F 0x05DF #HEBREW LETTER FINAL NUN 0x90 0x05E0 #HEBREW LETTER NUN 0x91 0x05E1 #HEBREW LETTER SAMEKH 0x92 0x05E2 #HEBREW LETTER AYIN 0x93 0x05E3 #HEBREW LETTER FINAL PE 0x94 0x05E4 #HEBREW LETTER PE 0x95 0x05E5 #HEBREW LETTER FINAL TSADI 0x96 0x05E6 #HEBREW LETTER TSADI 0x97 0x05E7 #HEBREW LETTER QOF 0x98 0x05E8 #HEBREW LETTER RESH 0x99 0x05E9 #HEBREW LETTER SHIN 0x9A 0x05EA #HEBREW LETTER TAV 0x9B #UNDEFINED 0x9C 0x00A3 #POUND SIGN 0x9D #UNDEFINED 0x9E 0x00D7 #MULTIPLICATION SIGN 0x9F #UNDEFINED 0xA0 #UNDEFINED 0xA1 #UNDEFINED 0xA2 #UNDEFINED 0xA3 #UNDEFINED 0xA4 #UNDEFINED 0xA5 #UNDEFINED 0xA6 #UNDEFINED 0xA7 #UNDEFINED 0xA8 #UNDEFINED 0xA9 0x00AE #REGISTERED SIGN 0xAA 0x00AC #NOT SIGN 0xAB 0x00BD #VULGAR FRACTION ONE HALF 0xAC 0x00BC #VULGAR FRACTION ONE QUARTER 0xAD #UNDEFINED 0xAE 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAF 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xB0 0x2591 #LIGHT SHADE 0xB1 0x2592 #MEDIUM SHADE 0xB2 0x2593 #DARK SHADE 0xB3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xB4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xB5 #UNDEFINED 0xB6 #UNDEFINED 0xB7 #UNDEFINED 0xB8 0x00A9 #COPYRIGHT SIGN 0xB9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xBA 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xBB 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xBC 0x255D #BOX DRAWINGS DOUBLE UP AND LEFT 0xBD 0x00A2 #CENT SIGN 0xBE 0x00A5 #YEN SIGN 0xBF 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xC0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xC1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xC2 0x252C #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xC3 0x251C #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xC4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xC5 0x253C #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xC6 #UNDEFINED 0xC7 #UNDEFINED 0xC8 0x255A #BOX DRAWINGS DOUBLE UP AND RIGHT 0xC9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xCA 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xCB 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xCC 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xCD 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xCE 0x256C #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xCF 0x00A4 #CURRENCY SIGN 0xD0 #UNDEFINED 0xD1 #UNDEFINED 0xD2 #UNDEFINED 0xD3 #UNDEFINEDS 0xD4 #UNDEFINED 0xD5 #UNDEFINED 0xD6 #UNDEFINEDE 0xD7 #UNDEFINED 0xD8 #UNDEFINED 0xD9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xDA 0x250C #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xDB 0x2588 #FULL BLOCK 0xDC 0x2584 #LOWER HALF BLOCK 0xDD 0x00A6 #BROKEN BAR 0xDE #UNDEFINED 0xDF 0x2580 #UPPER HALF BLOCK 0xE0 #UNDEFINED 0xE1 #UNDEFINED 0xE2 #UNDEFINED 0xE3 #UNDEFINED 0xE4 #UNDEFINED 0xE5 #UNDEFINED 0xE6 0x00B5 #MICRO SIGN 0xE7 #UNDEFINED 0xE8 #UNDEFINED 0xE9 #UNDEFINED 0xEA #UNDEFINED 0xEB #UNDEFINED 0xEC #UNDEFINED 0xED #UNDEFINED 0xEE 0x00AF #MACRON 0xEF 0x00B4 #ACUTE ACCENT 0xF0 0x00AD #SOFT HYPHEN 0xF1 0x00B1 #PLUS-MINUS SIGN 0xF2 0x2017 #DOUBLE LOW LINE 0xF3 0x00BE #VULGAR FRACTION THREE QUARTERS 0xF4 0x00B6 #PILCROW SIGN 0xF5 0x00A7 #SECTION SIGN 0xF6 0x00F7 #DIVISION SIGN 0xF7 0x00B8 #CEDILLA 0xF8 0x00B0 #DEGREE SIGN 0xF9 0x00A8 #DIAERESIS 0xFA 0x00B7 #MIDDLE DOT 0xFB 0x00B9 #SUPERSCRIPT ONE 0xFC 0x00B3 #SUPERSCRIPT THREE 0xFD 0x00B2 #SUPERSCRIPT TWO 0xFE 0x25A0 #BLACK SQUARE 0xFF 0x00A0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP857.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp857_DOSTurkish to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp857_DOSTurkish code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp857_DOSTurkish order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS 0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE 0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS 0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE 0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS 0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX 0x8d 0x0131 #LATIN SMALL LETTER DOTLESS I 0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 0x91 0x00e6 #LATIN SMALL LIGATURE AE 0x92 0x00c6 #LATIN CAPITAL LIGATURE AE 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS 0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE 0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX 0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE 0x98 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE 0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE 0x9c 0x00a3 #POUND SIGN 0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE 0x9e 0x015e #LATIN CAPITAL LETTER S WITH CEDILLA 0x9f 0x015f #LATIN SMALL LETTER S WITH CEDILLA 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE 0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE 0xa6 0x011e #LATIN CAPITAL LETTER G WITH BREVE 0xa7 0x011f #LATIN SMALL LETTER G WITH BREVE 0xa8 0x00bf #INVERTED QUESTION MARK 0xa9 0x00ae #REGISTERED SIGN 0xaa 0x00ac #NOT SIGN 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 0xad 0x00a1 #INVERTED EXCLAMATION MARK 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE 0xb6 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xb7 0x00c0 #LATIN CAPITAL LETTER A WITH GRAVE 0xb8 0x00a9 #COPYRIGHT SIGN 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x00a2 #CENT SIGN 0xbe 0x00a5 #YEN SIGN 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x00e3 #LATIN SMALL LETTER A WITH TILDE 0xc7 0x00c3 #LATIN CAPITAL LETTER A WITH TILDE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x00a4 #CURRENCY SIGN 0xd0 0x00ba #MASCULINE ORDINAL INDICATOR 0xd1 0x00aa #FEMININE ORDINAL INDICATOR 0xd2 0x00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xd3 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS 0xd4 0x00c8 #LATIN CAPITAL LETTER E WITH GRAVE 0xd5 #UNDEFINED 0xd6 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE 0xd7 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xd8 0x00cf #LATIN CAPITAL LETTER I WITH DIAERESIS 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x00a6 #BROKEN BAR 0xde 0x00cc #LATIN CAPITAL LETTER I WITH GRAVE 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE 0xe1 0x00df #LATIN SMALL LETTER SHARP S 0xe2 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xe3 0x00d2 #LATIN CAPITAL LETTER O WITH GRAVE 0xe4 0x00f5 #LATIN SMALL LETTER O WITH TILDE 0xe5 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE 0xe6 0x00b5 #MICRO SIGN 0xe7 #UNDEFINED 0xe8 0x00d7 #MULTIPLICATION SIGN 0xe9 0x00da #LATIN CAPITAL LETTER U WITH ACUTE 0xea 0x00db #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xeb 0x00d9 #LATIN CAPITAL LETTER U WITH GRAVE 0xec 0x00ec #LATIN SMALL LETTER I WITH GRAVE 0xed 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS 0xee 0x00af #MACRON 0xef 0x00b4 #ACUTE ACCENT 0xf0 0x00ad #SOFT HYPHEN 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 #UNDEFINED 0xf3 0x00be #VULGAR FRACTION THREE QUARTERS 0xf4 0x00b6 #PILCROW SIGN 0xf5 0x00a7 #SECTION SIGN 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x00b8 #CEDILLA 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x00a8 #DIAERESIS 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x00b9 #SUPERSCRIPT ONE 0xfc 0x00b3 #SUPERSCRIPT THREE 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP860.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp860_DOSPortuguese to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp860_DOSPortuguese code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp860_DOSPortuguese order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x84 0x00e3 #LATIN SMALL LETTER A WITH TILDE 0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE 0x86 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x89 0x00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE 0x8b 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE 0x8c 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE 0x8e 0x00c3 #LATIN CAPITAL LETTER A WITH TILDE 0x8f 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 0x91 0x00c0 #LATIN CAPITAL LETTER A WITH GRAVE 0x92 0x00c8 #LATIN CAPITAL LETTER E WITH GRAVE 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0x94 0x00f5 #LATIN SMALL LETTER O WITH TILDE 0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE 0x96 0x00da #LATIN CAPITAL LETTER U WITH ACUTE 0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE 0x98 0x00cc #LATIN CAPITAL LETTER I WITH GRAVE 0x99 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x00a2 #CENT SIGN 0x9c 0x00a3 #POUND SIGN 0x9d 0x00d9 #LATIN CAPITAL LETTER U WITH GRAVE 0x9e 0x20a7 #PESETA SIGN 0x9f 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE 0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE 0xa6 0x00aa #FEMININE ORDINAL INDICATOR 0xa7 0x00ba #MASCULINE ORDINAL INDICATOR 0xa8 0x00bf #INVERTED QUESTION MARK 0xa9 0x00d2 #LATIN CAPITAL LETTER O WITH GRAVE 0xaa 0x00ac #NOT SIGN 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 0xad 0x00a1 #INVERTED EXCLAMATION MARK 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x258c #LEFT HALF BLOCK 0xde 0x2590 #RIGHT HALF BLOCK 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x03b1 #GREEK SMALL LETTER ALPHA 0xe1 0x00df #LATIN SMALL LETTER SHARP S 0xe2 0x0393 #GREEK CAPITAL LETTER GAMMA 0xe3 0x03c0 #GREEK SMALL LETTER PI 0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA 0xe5 0x03c3 #GREEK SMALL LETTER SIGMA 0xe6 0x00b5 #MICRO SIGN 0xe7 0x03c4 #GREEK SMALL LETTER TAU 0xe8 0x03a6 #GREEK CAPITAL LETTER PHI 0xe9 0x0398 #GREEK CAPITAL LETTER THETA 0xea 0x03a9 #GREEK CAPITAL LETTER OMEGA 0xeb 0x03b4 #GREEK SMALL LETTER DELTA 0xec 0x221e #INFINITY 0xed 0x03c6 #GREEK SMALL LETTER PHI 0xee 0x03b5 #GREEK SMALL LETTER EPSILON 0xef 0x2229 #INTERSECTION 0xf0 0x2261 #IDENTICAL TO 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x2265 #GREATER-THAN OR EQUAL TO 0xf3 0x2264 #LESS-THAN OR EQUAL TO 0xf4 0x2320 #TOP HALF INTEGRAL 0xf5 0x2321 #BOTTOM HALF INTEGRAL 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x2248 #ALMOST EQUAL TO 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x2219 #BULLET OPERATOR 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x221a #SQUARE ROOT 0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP861.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp861_DOSIcelandic to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp861_DOSIcelandic code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp861_DOSIcelandic order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS 0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE 0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS 0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE 0x8b 0x00d0 #LATIN CAPITAL LETTER ETH 0x8c 0x00f0 #LATIN SMALL LETTER ETH 0x8d 0x00de #LATIN CAPITAL LETTER THORN 0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 0x91 0x00e6 #LATIN SMALL LIGATURE AE 0x92 0x00c6 #LATIN CAPITAL LIGATURE AE 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS 0x95 0x00fe #LATIN SMALL LETTER THORN 0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX 0x97 0x00dd #LATIN CAPITAL LETTER Y WITH ACUTE 0x98 0x00fd #LATIN SMALL LETTER Y WITH ACUTE 0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE 0x9c 0x00a3 #POUND SIGN 0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE 0x9e 0x20a7 #PESETA SIGN 0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 0xa4 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE 0xa5 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE 0xa6 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE 0xa7 0x00da #LATIN CAPITAL LETTER U WITH ACUTE 0xa8 0x00bf #INVERTED QUESTION MARK 0xa9 0x2310 #REVERSED NOT SIGN 0xaa 0x00ac #NOT SIGN 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 0xad 0x00a1 #INVERTED EXCLAMATION MARK 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x258c #LEFT HALF BLOCK 0xde 0x2590 #RIGHT HALF BLOCK 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x03b1 #GREEK SMALL LETTER ALPHA 0xe1 0x00df #LATIN SMALL LETTER SHARP S 0xe2 0x0393 #GREEK CAPITAL LETTER GAMMA 0xe3 0x03c0 #GREEK SMALL LETTER PI 0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA 0xe5 0x03c3 #GREEK SMALL LETTER SIGMA 0xe6 0x00b5 #MICRO SIGN 0xe7 0x03c4 #GREEK SMALL LETTER TAU 0xe8 0x03a6 #GREEK CAPITAL LETTER PHI 0xe9 0x0398 #GREEK CAPITAL LETTER THETA 0xea 0x03a9 #GREEK CAPITAL LETTER OMEGA 0xeb 0x03b4 #GREEK SMALL LETTER DELTA 0xec 0x221e #INFINITY 0xed 0x03c6 #GREEK SMALL LETTER PHI 0xee 0x03b5 #GREEK SMALL LETTER EPSILON 0xef 0x2229 #INTERSECTION 0xf0 0x2261 #IDENTICAL TO 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x2265 #GREATER-THAN OR EQUAL TO 0xf3 0x2264 #LESS-THAN OR EQUAL TO 0xf4 0x2320 #TOP HALF INTEGRAL 0xf5 0x2321 #BOTTOM HALF INTEGRAL 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x2248 #ALMOST EQUAL TO 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x2219 #BULLET OPERATOR 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x221a #SQUARE ROOT 0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP862.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp862_DOSHebrew to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp862_DOSHebrew code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp862_DOSHebrew order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x05d0 #HEBREW LETTER ALEF 0x81 0x05d1 #HEBREW LETTER BET 0x82 0x05d2 #HEBREW LETTER GIMEL 0x83 0x05d3 #HEBREW LETTER DALET 0x84 0x05d4 #HEBREW LETTER HE 0x85 0x05d5 #HEBREW LETTER VAV 0x86 0x05d6 #HEBREW LETTER ZAYIN 0x87 0x05d7 #HEBREW LETTER HET 0x88 0x05d8 #HEBREW LETTER TET 0x89 0x05d9 #HEBREW LETTER YOD 0x8a 0x05da #HEBREW LETTER FINAL KAF 0x8b 0x05db #HEBREW LETTER KAF 0x8c 0x05dc #HEBREW LETTER LAMED 0x8d 0x05dd #HEBREW LETTER FINAL MEM 0x8e 0x05de #HEBREW LETTER MEM 0x8f 0x05df #HEBREW LETTER FINAL NUN 0x90 0x05e0 #HEBREW LETTER NUN 0x91 0x05e1 #HEBREW LETTER SAMEKH 0x92 0x05e2 #HEBREW LETTER AYIN 0x93 0x05e3 #HEBREW LETTER FINAL PE 0x94 0x05e4 #HEBREW LETTER PE 0x95 0x05e5 #HEBREW LETTER FINAL TSADI 0x96 0x05e6 #HEBREW LETTER TSADI 0x97 0x05e7 #HEBREW LETTER QOF 0x98 0x05e8 #HEBREW LETTER RESH 0x99 0x05e9 #HEBREW LETTER SHIN 0x9a 0x05ea #HEBREW LETTER TAV 0x9b 0x00a2 #CENT SIGN 0x9c 0x00a3 #POUND SIGN 0x9d 0x00a5 #YEN SIGN 0x9e 0x20a7 #PESETA SIGN 0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE 0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE 0xa6 0x00aa #FEMININE ORDINAL INDICATOR 0xa7 0x00ba #MASCULINE ORDINAL INDICATOR 0xa8 0x00bf #INVERTED QUESTION MARK 0xa9 0x2310 #REVERSED NOT SIGN 0xaa 0x00ac #NOT SIGN 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 0xad 0x00a1 #INVERTED EXCLAMATION MARK 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x258c #LEFT HALF BLOCK 0xde 0x2590 #RIGHT HALF BLOCK 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x03b1 #GREEK SMALL LETTER ALPHA 0xe1 0x00df #LATIN SMALL LETTER SHARP S (GERMAN) 0xe2 0x0393 #GREEK CAPITAL LETTER GAMMA 0xe3 0x03c0 #GREEK SMALL LETTER PI 0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA 0xe5 0x03c3 #GREEK SMALL LETTER SIGMA 0xe6 0x00b5 #MICRO SIGN 0xe7 0x03c4 #GREEK SMALL LETTER TAU 0xe8 0x03a6 #GREEK CAPITAL LETTER PHI 0xe9 0x0398 #GREEK CAPITAL LETTER THETA 0xea 0x03a9 #GREEK CAPITAL LETTER OMEGA 0xeb 0x03b4 #GREEK SMALL LETTER DELTA 0xec 0x221e #INFINITY 0xed 0x03c6 #GREEK SMALL LETTER PHI 0xee 0x03b5 #GREEK SMALL LETTER EPSILON 0xef 0x2229 #INTERSECTION 0xf0 0x2261 #IDENTICAL TO 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x2265 #GREATER-THAN OR EQUAL TO 0xf3 0x2264 #LESS-THAN OR EQUAL TO 0xf4 0x2320 #TOP HALF INTEGRAL 0xf5 0x2321 #BOTTOM HALF INTEGRAL 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x2248 #ALMOST EQUAL TO 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x2219 #BULLET OPERATOR 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x221a #SQUARE ROOT 0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP863.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp863_DOSCanadaF to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp863_DOSCanadaF code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp863_DOSCanadaF order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x84 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE 0x86 0x00b6 #PILCROW SIGN 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS 0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE 0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS 0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX 0x8d 0x2017 #DOUBLE LOW LINE 0x8e 0x00c0 #LATIN CAPITAL LETTER A WITH GRAVE 0x8f 0x00a7 #SECTION SIGN 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 0x91 0x00c8 #LATIN CAPITAL LETTER E WITH GRAVE 0x92 0x00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0x94 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS 0x95 0x00cf #LATIN CAPITAL LETTER I WITH DIAERESIS 0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX 0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE 0x98 0x00a4 #CURRENCY SIGN 0x99 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x00a2 #CENT SIGN 0x9c 0x00a3 #POUND SIGN 0x9d 0x00d9 #LATIN CAPITAL LETTER U WITH GRAVE 0x9e 0x00db #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK 0xa0 0x00a6 #BROKEN BAR 0xa1 0x00b4 #ACUTE ACCENT 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 0xa4 0x00a8 #DIAERESIS 0xa5 0x00b8 #CEDILLA 0xa6 0x00b3 #SUPERSCRIPT THREE 0xa7 0x00af #MACRON 0xa8 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xa9 0x2310 #REVERSED NOT SIGN 0xaa 0x00ac #NOT SIGN 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 0xad 0x00be #VULGAR FRACTION THREE QUARTERS 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x258c #LEFT HALF BLOCK 0xde 0x2590 #RIGHT HALF BLOCK 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x03b1 #GREEK SMALL LETTER ALPHA 0xe1 0x00df #LATIN SMALL LETTER SHARP S 0xe2 0x0393 #GREEK CAPITAL LETTER GAMMA 0xe3 0x03c0 #GREEK SMALL LETTER PI 0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA 0xe5 0x03c3 #GREEK SMALL LETTER SIGMA 0xe6 0x00b5 #MICRO SIGN 0xe7 0x03c4 #GREEK SMALL LETTER TAU 0xe8 0x03a6 #GREEK CAPITAL LETTER PHI 0xe9 0x0398 #GREEK CAPITAL LETTER THETA 0xea 0x03a9 #GREEK CAPITAL LETTER OMEGA 0xeb 0x03b4 #GREEK SMALL LETTER DELTA 0xec 0x221e #INFINITY 0xed 0x03c6 #GREEK SMALL LETTER PHI 0xee 0x03b5 #GREEK SMALL LETTER EPSILON 0xef 0x2229 #INTERSECTION 0xf0 0x2261 #IDENTICAL TO 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x2265 #GREATER-THAN OR EQUAL TO 0xf3 0x2264 #LESS-THAN OR EQUAL TO 0xf4 0x2320 #TOP HALF INTEGRAL 0xf5 0x2321 #BOTTOM HALF INTEGRAL 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x2248 #ALMOST EQUAL TO 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x2219 #BULLET OPERATOR 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x221a #SQUARE ROOT 0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP864.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp864_DOSArabic to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp864_DOSArabic code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp864_DOSArabic order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x066a #ARABIC PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x00b0 #DEGREE SIGN 0x81 0x00b7 #MIDDLE DOT 0x82 0x2219 #BULLET OPERATOR 0x83 0x221a #SQUARE ROOT 0x84 0x2592 #MEDIUM SHADE 0x85 0x2500 #FORMS LIGHT HORIZONTAL 0x86 0x2502 #FORMS LIGHT VERTICAL 0x87 0x253c #FORMS LIGHT VERTICAL AND HORIZONTAL 0x88 0x2524 #FORMS LIGHT VERTICAL AND LEFT 0x89 0x252c #FORMS LIGHT DOWN AND HORIZONTAL 0x8a 0x251c #FORMS LIGHT VERTICAL AND RIGHT 0x8b 0x2534 #FORMS LIGHT UP AND HORIZONTAL 0x8c 0x2510 #FORMS LIGHT DOWN AND LEFT 0x8d 0x250c #FORMS LIGHT DOWN AND RIGHT 0x8e 0x2514 #FORMS LIGHT UP AND RIGHT 0x8f 0x2518 #FORMS LIGHT UP AND LEFT 0x90 0x03b2 #GREEK SMALL BETA 0x91 0x221e #INFINITY 0x92 0x03c6 #GREEK SMALL PHI 0x93 0x00b1 #PLUS-OR-MINUS SIGN 0x94 0x00bd #FRACTION 1/2 0x95 0x00bc #FRACTION 1/4 0x96 0x2248 #ALMOST EQUAL TO 0x97 0x00ab #LEFT POINTING GUILLEMET 0x98 0x00bb #RIGHT POINTING GUILLEMET 0x99 0xfef7 #ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM 0x9a 0xfef8 #ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM 0x9b #UNDEFINED 0x9c #UNDEFINED 0x9d 0xfefb #ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM 0x9e 0xfefc #ARABIC LIGATURE LAM WITH ALEF FINAL FORM 0x9f #UNDEFINED 0xa0 0x00a0 #NON-BREAKING SPACE 0xa1 0x00ad #SOFT HYPHEN 0xa2 0xfe82 #ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM 0xa3 0x00a3 #POUND SIGN 0xa4 0x00a4 #CURRENCY SIGN 0xa5 0xfe84 #ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM 0xa6 #UNDEFINED 0xa7 #UNDEFINED 0xa8 0xfe8e #ARABIC LETTER ALEF FINAL FORM 0xa9 0xfe8f #ARABIC LETTER BEH ISOLATED FORM 0xaa 0xfe95 #ARABIC LETTER TEH ISOLATED FORM 0xab 0xfe99 #ARABIC LETTER THEH ISOLATED FORM 0xac 0x060c #ARABIC COMMA 0xad 0xfe9d #ARABIC LETTER JEEM ISOLATED FORM 0xae 0xfea1 #ARABIC LETTER HAH ISOLATED FORM 0xaf 0xfea5 #ARABIC LETTER KHAH ISOLATED FORM 0xb0 0x0660 #ARABIC-INDIC DIGIT ZERO 0xb1 0x0661 #ARABIC-INDIC DIGIT ONE 0xb2 0x0662 #ARABIC-INDIC DIGIT TWO 0xb3 0x0663 #ARABIC-INDIC DIGIT THREE 0xb4 0x0664 #ARABIC-INDIC DIGIT FOUR 0xb5 0x0665 #ARABIC-INDIC DIGIT FIVE 0xb6 0x0666 #ARABIC-INDIC DIGIT SIX 0xb7 0x0667 #ARABIC-INDIC DIGIT SEVEN 0xb8 0x0668 #ARABIC-INDIC DIGIT EIGHT 0xb9 0x0669 #ARABIC-INDIC DIGIT NINE 0xba 0xfed1 #ARABIC LETTER FEH ISOLATED FORM 0xbb 0x061b #ARABIC SEMICOLON 0xbc 0xfeb1 #ARABIC LETTER SEEN ISOLATED FORM 0xbd 0xfeb5 #ARABIC LETTER SHEEN ISOLATED FORM 0xbe 0xfeb9 #ARABIC LETTER SAD ISOLATED FORM 0xbf 0x061f #ARABIC QUESTION MARK 0xc0 0x00a2 #CENT SIGN 0xc1 0xfe80 #ARABIC LETTER HAMZA ISOLATED FORM 0xc2 0xfe81 #ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM 0xc3 0xfe83 #ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM 0xc4 0xfe85 #ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM 0xc5 0xfeca #ARABIC LETTER AIN FINAL FORM 0xc6 0xfe8b #ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM 0xc7 0xfe8d #ARABIC LETTER ALEF ISOLATED FORM 0xc8 0xfe91 #ARABIC LETTER BEH INITIAL FORM 0xc9 0xfe93 #ARABIC LETTER TEH MARBUTA ISOLATED FORM 0xca 0xfe97 #ARABIC LETTER TEH INITIAL FORM 0xcb 0xfe9b #ARABIC LETTER THEH INITIAL FORM 0xcc 0xfe9f #ARABIC LETTER JEEM INITIAL FORM 0xcd 0xfea3 #ARABIC LETTER HAH INITIAL FORM 0xce 0xfea7 #ARABIC LETTER KHAH INITIAL FORM 0xcf 0xfea9 #ARABIC LETTER DAL ISOLATED FORM 0xd0 0xfeab #ARABIC LETTER THAL ISOLATED FORM 0xd1 0xfead #ARABIC LETTER REH ISOLATED FORM 0xd2 0xfeaf #ARABIC LETTER ZAIN ISOLATED FORM 0xd3 0xfeb3 #ARABIC LETTER SEEN INITIAL FORM 0xd4 0xfeb7 #ARABIC LETTER SHEEN INITIAL FORM 0xd5 0xfebb #ARABIC LETTER SAD INITIAL FORM 0xd6 0xfebf #ARABIC LETTER DAD INITIAL FORM 0xd7 0xfec1 #ARABIC LETTER TAH ISOLATED FORM 0xd8 0xfec5 #ARABIC LETTER ZAH ISOLATED FORM 0xd9 0xfecb #ARABIC LETTER AIN INITIAL FORM 0xda 0xfecf #ARABIC LETTER GHAIN INITIAL FORM 0xdb 0x00a6 #BROKEN VERTICAL BAR 0xdc 0x00ac #NOT SIGN 0xdd 0x00f7 #DIVISION SIGN 0xde 0x00d7 #MULTIPLICATION SIGN 0xdf 0xfec9 #ARABIC LETTER AIN ISOLATED FORM 0xe0 0x0640 #ARABIC TATWEEL 0xe1 0xfed3 #ARABIC LETTER FEH INITIAL FORM 0xe2 0xfed7 #ARABIC LETTER QAF INITIAL FORM 0xe3 0xfedb #ARABIC LETTER KAF INITIAL FORM 0xe4 0xfedf #ARABIC LETTER LAM INITIAL FORM 0xe5 0xfee3 #ARABIC LETTER MEEM INITIAL FORM 0xe6 0xfee7 #ARABIC LETTER NOON INITIAL FORM 0xe7 0xfeeb #ARABIC LETTER HEH INITIAL FORM 0xe8 0xfeed #ARABIC LETTER WAW ISOLATED FORM 0xe9 0xfeef #ARABIC LETTER ALEF MAKSURA ISOLATED FORM 0xea 0xfef3 #ARABIC LETTER YEH INITIAL FORM 0xeb 0xfebd #ARABIC LETTER DAD ISOLATED FORM 0xec 0xfecc #ARABIC LETTER AIN MEDIAL FORM 0xed 0xfece #ARABIC LETTER GHAIN FINAL FORM 0xee 0xfecd #ARABIC LETTER GHAIN ISOLATED FORM 0xef 0xfee1 #ARABIC LETTER MEEM ISOLATED FORM 0xf0 0xfe7d #ARABIC SHADDA MEDIAL FORM 0xf1 0x0651 #ARABIC SHADDAH 0xf2 0xfee5 #ARABIC LETTER NOON ISOLATED FORM 0xf3 0xfee9 #ARABIC LETTER HEH ISOLATED FORM 0xf4 0xfeec #ARABIC LETTER HEH MEDIAL FORM 0xf5 0xfef0 #ARABIC LETTER ALEF MAKSURA FINAL FORM 0xf6 0xfef2 #ARABIC LETTER YEH FINAL FORM 0xf7 0xfed0 #ARABIC LETTER GHAIN MEDIAL FORM 0xf8 0xfed5 #ARABIC LETTER QAF ISOLATED FORM 0xf9 0xfef5 #ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM 0xfa 0xfef6 #ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM 0xfb 0xfedd #ARABIC LETTER LAM ISOLATED FORM 0xfc 0xfed9 #ARABIC LETTER KAF ISOLATED FORM 0xfd 0xfef1 #ARABIC LETTER YEH ISOLATED FORM 0xfe 0x25a0 #BLACK SQUARE 0xff #UNDEFINED |
Added freshlib/data/_encodings/_sources/CP865.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp865_DOSNordic to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp865_DOSNordic code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp865_DOSNordic order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS 0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE 0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX 0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS 0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE 0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS 0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX 0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE 0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 0x91 0x00e6 #LATIN SMALL LIGATURE AE 0x92 0x00c6 #LATIN CAPITAL LIGATURE AE 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS 0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE 0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX 0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE 0x98 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS 0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE 0x9c 0x00a3 #POUND SIGN 0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE 0x9e 0x20a7 #PESETA SIGN 0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE 0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE 0xa6 0x00aa #FEMININE ORDINAL INDICATOR 0xa7 0x00ba #MASCULINE ORDINAL INDICATOR 0xa8 0x00bf #INVERTED QUESTION MARK 0xa9 0x2310 #REVERSED NOT SIGN 0xaa 0x00ac #NOT SIGN 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 0xad 0x00a1 #INVERTED EXCLAMATION MARK 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00a4 #CURRENCY SIGN 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x258c #LEFT HALF BLOCK 0xde 0x2590 #RIGHT HALF BLOCK 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x03b1 #GREEK SMALL LETTER ALPHA 0xe1 0x00df #LATIN SMALL LETTER SHARP S 0xe2 0x0393 #GREEK CAPITAL LETTER GAMMA 0xe3 0x03c0 #GREEK SMALL LETTER PI 0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA 0xe5 0x03c3 #GREEK SMALL LETTER SIGMA 0xe6 0x00b5 #MICRO SIGN 0xe7 0x03c4 #GREEK SMALL LETTER TAU 0xe8 0x03a6 #GREEK CAPITAL LETTER PHI 0xe9 0x0398 #GREEK CAPITAL LETTER THETA 0xea 0x03a9 #GREEK CAPITAL LETTER OMEGA 0xeb 0x03b4 #GREEK SMALL LETTER DELTA 0xec 0x221e #INFINITY 0xed 0x03c6 #GREEK SMALL LETTER PHI 0xee 0x03b5 #GREEK SMALL LETTER EPSILON 0xef 0x2229 #INTERSECTION 0xf0 0x2261 #IDENTICAL TO 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x2265 #GREATER-THAN OR EQUAL TO 0xf3 0x2264 #LESS-THAN OR EQUAL TO 0xf4 0x2320 #TOP HALF INTEGRAL 0xf5 0x2321 #BOTTOM HALF INTEGRAL 0xf6 0x00f7 #DIVISION SIGN 0xf7 0x2248 #ALMOST EQUAL TO 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x2219 #BULLET OPERATOR 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x221a #SQUARE ROOT 0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N 0xfd 0x00b2 #SUPERSCRIPT TWO 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP866.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp866_DOSCyrillicRussian to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp866_DOSCyrillicRussian code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp866_DOSCyrillicRussian order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 0x0410 #CYRILLIC CAPITAL LETTER A 0x81 0x0411 #CYRILLIC CAPITAL LETTER BE 0x82 0x0412 #CYRILLIC CAPITAL LETTER VE 0x83 0x0413 #CYRILLIC CAPITAL LETTER GHE 0x84 0x0414 #CYRILLIC CAPITAL LETTER DE 0x85 0x0415 #CYRILLIC CAPITAL LETTER IE 0x86 0x0416 #CYRILLIC CAPITAL LETTER ZHE 0x87 0x0417 #CYRILLIC CAPITAL LETTER ZE 0x88 0x0418 #CYRILLIC CAPITAL LETTER I 0x89 0x0419 #CYRILLIC CAPITAL LETTER SHORT I 0x8a 0x041a #CYRILLIC CAPITAL LETTER KA 0x8b 0x041b #CYRILLIC CAPITAL LETTER EL 0x8c 0x041c #CYRILLIC CAPITAL LETTER EM 0x8d 0x041d #CYRILLIC CAPITAL LETTER EN 0x8e 0x041e #CYRILLIC CAPITAL LETTER O 0x8f 0x041f #CYRILLIC CAPITAL LETTER PE 0x90 0x0420 #CYRILLIC CAPITAL LETTER ER 0x91 0x0421 #CYRILLIC CAPITAL LETTER ES 0x92 0x0422 #CYRILLIC CAPITAL LETTER TE 0x93 0x0423 #CYRILLIC CAPITAL LETTER U 0x94 0x0424 #CYRILLIC CAPITAL LETTER EF 0x95 0x0425 #CYRILLIC CAPITAL LETTER HA 0x96 0x0426 #CYRILLIC CAPITAL LETTER TSE 0x97 0x0427 #CYRILLIC CAPITAL LETTER CHE 0x98 0x0428 #CYRILLIC CAPITAL LETTER SHA 0x99 0x0429 #CYRILLIC CAPITAL LETTER SHCHA 0x9a 0x042a #CYRILLIC CAPITAL LETTER HARD SIGN 0x9b 0x042b #CYRILLIC CAPITAL LETTER YERU 0x9c 0x042c #CYRILLIC CAPITAL LETTER SOFT SIGN 0x9d 0x042d #CYRILLIC CAPITAL LETTER E 0x9e 0x042e #CYRILLIC CAPITAL LETTER YU 0x9f 0x042f #CYRILLIC CAPITAL LETTER YA 0xa0 0x0430 #CYRILLIC SMALL LETTER A 0xa1 0x0431 #CYRILLIC SMALL LETTER BE 0xa2 0x0432 #CYRILLIC SMALL LETTER VE 0xa3 0x0433 #CYRILLIC SMALL LETTER GHE 0xa4 0x0434 #CYRILLIC SMALL LETTER DE 0xa5 0x0435 #CYRILLIC SMALL LETTER IE 0xa6 0x0436 #CYRILLIC SMALL LETTER ZHE 0xa7 0x0437 #CYRILLIC SMALL LETTER ZE 0xa8 0x0438 #CYRILLIC SMALL LETTER I 0xa9 0x0439 #CYRILLIC SMALL LETTER SHORT I 0xaa 0x043a #CYRILLIC SMALL LETTER KA 0xab 0x043b #CYRILLIC SMALL LETTER EL 0xac 0x043c #CYRILLIC SMALL LETTER EM 0xad 0x043d #CYRILLIC SMALL LETTER EN 0xae 0x043e #CYRILLIC SMALL LETTER O 0xaf 0x043f #CYRILLIC SMALL LETTER PE 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x258c #LEFT HALF BLOCK 0xde 0x2590 #RIGHT HALF BLOCK 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x0440 #CYRILLIC SMALL LETTER ER 0xe1 0x0441 #CYRILLIC SMALL LETTER ES 0xe2 0x0442 #CYRILLIC SMALL LETTER TE 0xe3 0x0443 #CYRILLIC SMALL LETTER U 0xe4 0x0444 #CYRILLIC SMALL LETTER EF 0xe5 0x0445 #CYRILLIC SMALL LETTER HA 0xe6 0x0446 #CYRILLIC SMALL LETTER TSE 0xe7 0x0447 #CYRILLIC SMALL LETTER CHE 0xe8 0x0448 #CYRILLIC SMALL LETTER SHA 0xe9 0x0449 #CYRILLIC SMALL LETTER SHCHA 0xea 0x044a #CYRILLIC SMALL LETTER HARD SIGN 0xeb 0x044b #CYRILLIC SMALL LETTER YERU 0xec 0x044c #CYRILLIC SMALL LETTER SOFT SIGN 0xed 0x044d #CYRILLIC SMALL LETTER E 0xee 0x044e #CYRILLIC SMALL LETTER YU 0xef 0x044f #CYRILLIC SMALL LETTER YA 0xf0 0x0401 #CYRILLIC CAPITAL LETTER IO 0xf1 0x0451 #CYRILLIC SMALL LETTER IO 0xf2 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE 0xf3 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE 0xf4 0x0407 #CYRILLIC CAPITAL LETTER YI 0xf5 0x0457 #CYRILLIC SMALL LETTER YI 0xf6 0x040e #CYRILLIC CAPITAL LETTER SHORT U 0xf7 0x045e #CYRILLIC SMALL LETTER SHORT U 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x2219 #BULLET OPERATOR 0xfa 0x00b7 #MIDDLE DOT 0xfb 0x221a #SQUARE ROOT 0xfc 0x2116 #NUMERO SIGN 0xfd 0x00a4 #CURRENCY SIGN 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP869.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp869_DOSGreek2 to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp869_DOSGreek2 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp869_DOSGreek2 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0a 0x000a #LINE FEED 0x0b 0x000b #VERTICAL TABULATION 0x0c 0x000c #FORM FEED 0x0d 0x000d #CARRIAGE RETURN 0x0e 0x000e #SHIFT OUT 0x0f 0x000f #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1a 0x001a #SUBSTITUTE 0x1b 0x001b #ESCAPE 0x1c 0x001c #FILE SEPARATOR 0x1d 0x001d #GROUP SEPARATOR 0x1e 0x001e #RECORD SEPARATOR 0x1f 0x001f #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2a 0x002a #ASTERISK 0x2b 0x002b #PLUS SIGN 0x2c 0x002c #COMMA 0x2d 0x002d #HYPHEN-MINUS 0x2e 0x002e #FULL STOP 0x2f 0x002f #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3a 0x003a #COLON 0x3b 0x003b #SEMICOLON 0x3c 0x003c #LESS-THAN SIGN 0x3d 0x003d #EQUALS SIGN 0x3e 0x003e #GREATER-THAN SIGN 0x3f 0x003f #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4a 0x004a #LATIN CAPITAL LETTER J 0x4b 0x004b #LATIN CAPITAL LETTER K 0x4c 0x004c #LATIN CAPITAL LETTER L 0x4d 0x004d #LATIN CAPITAL LETTER M 0x4e 0x004e #LATIN CAPITAL LETTER N 0x4f 0x004f #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5a 0x005a #LATIN CAPITAL LETTER Z 0x5b 0x005b #LEFT SQUARE BRACKET 0x5c 0x005c #REVERSE SOLIDUS 0x5d 0x005d #RIGHT SQUARE BRACKET 0x5e 0x005e #CIRCUMFLEX ACCENT 0x5f 0x005f #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6a 0x006a #LATIN SMALL LETTER J 0x6b 0x006b #LATIN SMALL LETTER K 0x6c 0x006c #LATIN SMALL LETTER L 0x6d 0x006d #LATIN SMALL LETTER M 0x6e 0x006e #LATIN SMALL LETTER N 0x6f 0x006f #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7a 0x007a #LATIN SMALL LETTER Z 0x7b 0x007b #LEFT CURLY BRACKET 0x7c 0x007c #VERTICAL LINE 0x7d 0x007d #RIGHT CURLY BRACKET 0x7e 0x007e #TILDE 0x7f 0x007f #DELETE 0x80 #UNDEFINED 0x81 #UNDEFINED 0x82 #UNDEFINED 0x83 #UNDEFINED 0x84 #UNDEFINED 0x85 #UNDEFINED 0x86 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS 0x87 #UNDEFINED 0x88 0x00b7 #MIDDLE DOT 0x89 0x00ac #NOT SIGN 0x8a 0x00a6 #BROKEN BAR 0x8b 0x2018 #LEFT SINGLE QUOTATION MARK 0x8c 0x2019 #RIGHT SINGLE QUOTATION MARK 0x8d 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS 0x8e 0x2015 #HORIZONTAL BAR 0x8f 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS 0x90 0x038a #GREEK CAPITAL LETTER IOTA WITH TONOS 0x91 0x03aa #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 0x92 0x038c #GREEK CAPITAL LETTER OMICRON WITH TONOS 0x93 #UNDEFINED 0x94 #UNDEFINED 0x95 0x038e #GREEK CAPITAL LETTER UPSILON WITH TONOS 0x96 0x03ab #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 0x97 0x00a9 #COPYRIGHT SIGN 0x98 0x038f #GREEK CAPITAL LETTER OMEGA WITH TONOS 0x99 0x00b2 #SUPERSCRIPT TWO 0x9a 0x00b3 #SUPERSCRIPT THREE 0x9b 0x03ac #GREEK SMALL LETTER ALPHA WITH TONOS 0x9c 0x00a3 #POUND SIGN 0x9d 0x03ad #GREEK SMALL LETTER EPSILON WITH TONOS 0x9e 0x03ae #GREEK SMALL LETTER ETA WITH TONOS 0x9f 0x03af #GREEK SMALL LETTER IOTA WITH TONOS 0xa0 0x03ca #GREEK SMALL LETTER IOTA WITH DIALYTIKA 0xa1 0x0390 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 0xa2 0x03cc #GREEK SMALL LETTER OMICRON WITH TONOS 0xa3 0x03cd #GREEK SMALL LETTER UPSILON WITH TONOS 0xa4 0x0391 #GREEK CAPITAL LETTER ALPHA 0xa5 0x0392 #GREEK CAPITAL LETTER BETA 0xa6 0x0393 #GREEK CAPITAL LETTER GAMMA 0xa7 0x0394 #GREEK CAPITAL LETTER DELTA 0xa8 0x0395 #GREEK CAPITAL LETTER EPSILON 0xa9 0x0396 #GREEK CAPITAL LETTER ZETA 0xaa 0x0397 #GREEK CAPITAL LETTER ETA 0xab 0x00bd #VULGAR FRACTION ONE HALF 0xac 0x0398 #GREEK CAPITAL LETTER THETA 0xad 0x0399 #GREEK CAPITAL LETTER IOTA 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xb0 0x2591 #LIGHT SHADE 0xb1 0x2592 #MEDIUM SHADE 0xb2 0x2593 #DARK SHADE 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0xb5 0x039a #GREEK CAPITAL LETTER KAPPA 0xb6 0x039b #GREEK CAPITAL LETTER LAMDA 0xb7 0x039c #GREEK CAPITAL LETTER MU 0xb8 0x039d #GREEK CAPITAL LETTER NU 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 0xbd 0x039e #GREEK CAPITAL LETTER XI 0xbe 0x039f #GREEK CAPITAL LETTER OMICRON 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0xc6 0x03a0 #GREEK CAPITAL LETTER PI 0xc7 0x03a1 #GREEK CAPITAL LETTER RHO 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xcf 0x03a3 #GREEK CAPITAL LETTER SIGMA 0xd0 0x03a4 #GREEK CAPITAL LETTER TAU 0xd1 0x03a5 #GREEK CAPITAL LETTER UPSILON 0xd2 0x03a6 #GREEK CAPITAL LETTER PHI 0xd3 0x03a7 #GREEK CAPITAL LETTER CHI 0xd4 0x03a8 #GREEK CAPITAL LETTER PSI 0xd5 0x03a9 #GREEK CAPITAL LETTER OMEGA 0xd6 0x03b1 #GREEK SMALL LETTER ALPHA 0xd7 0x03b2 #GREEK SMALL LETTER BETA 0xd8 0x03b3 #GREEK SMALL LETTER GAMMA 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 0xdb 0x2588 #FULL BLOCK 0xdc 0x2584 #LOWER HALF BLOCK 0xdd 0x03b4 #GREEK SMALL LETTER DELTA 0xde 0x03b5 #GREEK SMALL LETTER EPSILON 0xdf 0x2580 #UPPER HALF BLOCK 0xe0 0x03b6 #GREEK SMALL LETTER ZETA 0xe1 0x03b7 #GREEK SMALL LETTER ETA 0xe2 0x03b8 #GREEK SMALL LETTER THETA 0xe3 0x03b9 #GREEK SMALL LETTER IOTA 0xe4 0x03ba #GREEK SMALL LETTER KAPPA 0xe5 0x03bb #GREEK SMALL LETTER LAMDA 0xe6 0x03bc #GREEK SMALL LETTER MU 0xe7 0x03bd #GREEK SMALL LETTER NU 0xe8 0x03be #GREEK SMALL LETTER XI 0xe9 0x03bf #GREEK SMALL LETTER OMICRON 0xea 0x03c0 #GREEK SMALL LETTER PI 0xeb 0x03c1 #GREEK SMALL LETTER RHO 0xec 0x03c3 #GREEK SMALL LETTER SIGMA 0xed 0x03c2 #GREEK SMALL LETTER FINAL SIGMA 0xee 0x03c4 #GREEK SMALL LETTER TAU 0xef 0x0384 #GREEK TONOS 0xf0 0x00ad #SOFT HYPHEN 0xf1 0x00b1 #PLUS-MINUS SIGN 0xf2 0x03c5 #GREEK SMALL LETTER UPSILON 0xf3 0x03c6 #GREEK SMALL LETTER PHI 0xf4 0x03c7 #GREEK SMALL LETTER CHI 0xf5 0x00a7 #SECTION SIGN 0xf6 0x03c8 #GREEK SMALL LETTER PSI 0xf7 0x0385 #GREEK DIALYTIKA TONOS 0xf8 0x00b0 #DEGREE SIGN 0xf9 0x00a8 #DIAERESIS 0xfa 0x03c9 #GREEK SMALL LETTER OMEGA 0xfb 0x03cb #GREEK SMALL LETTER UPSILON WITH DIALYTIKA 0xfc 0x03b0 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 0xfd 0x03ce #GREEK SMALL LETTER OMEGA WITH TONOS 0xfe 0x25a0 #BLACK SQUARE 0xff 0x00a0 #NO-BREAK SPACE |
Added freshlib/data/_encodings/_sources/CP874.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # # Name: cp874 to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/15/98 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp874 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp874 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 #UNDEFINED 0x83 #UNDEFINED 0x84 #UNDEFINED 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 #UNDEFINED 0x87 #UNDEFINED 0x88 #UNDEFINED 0x89 #UNDEFINED 0x8A #UNDEFINED 0x8B #UNDEFINED 0x8C #UNDEFINED 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 #UNDEFINED 0x9A #UNDEFINED 0x9B #UNDEFINED 0x9C #UNDEFINED 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F #UNDEFINED 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x0E01 #THAI CHARACTER KO KAI 0xA2 0x0E02 #THAI CHARACTER KHO KHAI 0xA3 0x0E03 #THAI CHARACTER KHO KHUAT 0xA4 0x0E04 #THAI CHARACTER KHO KHWAI 0xA5 0x0E05 #THAI CHARACTER KHO KHON 0xA6 0x0E06 #THAI CHARACTER KHO RAKHANG 0xA7 0x0E07 #THAI CHARACTER NGO NGU 0xA8 0x0E08 #THAI CHARACTER CHO CHAN 0xA9 0x0E09 #THAI CHARACTER CHO CHING 0xAA 0x0E0A #THAI CHARACTER CHO CHANG 0xAB 0x0E0B #THAI CHARACTER SO SO 0xAC 0x0E0C #THAI CHARACTER CHO CHOE 0xAD 0x0E0D #THAI CHARACTER YO YING 0xAE 0x0E0E #THAI CHARACTER DO CHADA 0xAF 0x0E0F #THAI CHARACTER TO PATAK 0xB0 0x0E10 #THAI CHARACTER THO THAN 0xB1 0x0E11 #THAI CHARACTER THO NANGMONTHO 0xB2 0x0E12 #THAI CHARACTER THO PHUTHAO 0xB3 0x0E13 #THAI CHARACTER NO NEN 0xB4 0x0E14 #THAI CHARACTER DO DEK 0xB5 0x0E15 #THAI CHARACTER TO TAO 0xB6 0x0E16 #THAI CHARACTER THO THUNG 0xB7 0x0E17 #THAI CHARACTER THO THAHAN 0xB8 0x0E18 #THAI CHARACTER THO THONG 0xB9 0x0E19 #THAI CHARACTER NO NU 0xBA 0x0E1A #THAI CHARACTER BO BAIMAI 0xBB 0x0E1B #THAI CHARACTER PO PLA 0xBC 0x0E1C #THAI CHARACTER PHO PHUNG 0xBD 0x0E1D #THAI CHARACTER FO FA 0xBE 0x0E1E #THAI CHARACTER PHO PHAN 0xBF 0x0E1F #THAI CHARACTER FO FAN 0xC0 0x0E20 #THAI CHARACTER PHO SAMPHAO 0xC1 0x0E21 #THAI CHARACTER MO MA 0xC2 0x0E22 #THAI CHARACTER YO YAK 0xC3 0x0E23 #THAI CHARACTER RO RUA 0xC4 0x0E24 #THAI CHARACTER RU 0xC5 0x0E25 #THAI CHARACTER LO LING 0xC6 0x0E26 #THAI CHARACTER LU 0xC7 0x0E27 #THAI CHARACTER WO WAEN 0xC8 0x0E28 #THAI CHARACTER SO SALA 0xC9 0x0E29 #THAI CHARACTER SO RUSI 0xCA 0x0E2A #THAI CHARACTER SO SUA 0xCB 0x0E2B #THAI CHARACTER HO HIP 0xCC 0x0E2C #THAI CHARACTER LO CHULA 0xCD 0x0E2D #THAI CHARACTER O ANG 0xCE 0x0E2E #THAI CHARACTER HO NOKHUK 0xCF 0x0E2F #THAI CHARACTER PAIYANNOI 0xD0 0x0E30 #THAI CHARACTER SARA A 0xD1 0x0E31 #THAI CHARACTER MAI HAN-AKAT 0xD2 0x0E32 #THAI CHARACTER SARA AA 0xD3 0x0E33 #THAI CHARACTER SARA AM 0xD4 0x0E34 #THAI CHARACTER SARA I 0xD5 0x0E35 #THAI CHARACTER SARA II 0xD6 0x0E36 #THAI CHARACTER SARA UE 0xD7 0x0E37 #THAI CHARACTER SARA UEE 0xD8 0x0E38 #THAI CHARACTER SARA U 0xD9 0x0E39 #THAI CHARACTER SARA UU 0xDA 0x0E3A #THAI CHARACTER PHINTHU 0xDB #UNDEFINED 0xDC #UNDEFINED 0xDD #UNDEFINED 0xDE #UNDEFINED 0xDF 0x0E3F #THAI CURRENCY SYMBOL BAHT 0xE0 0x0E40 #THAI CHARACTER SARA E 0xE1 0x0E41 #THAI CHARACTER SARA AE 0xE2 0x0E42 #THAI CHARACTER SARA O 0xE3 0x0E43 #THAI CHARACTER SARA AI MAIMUAN 0xE4 0x0E44 #THAI CHARACTER SARA AI MAIMALAI 0xE5 0x0E45 #THAI CHARACTER LAKKHANGYAO 0xE6 0x0E46 #THAI CHARACTER MAIYAMOK 0xE7 0x0E47 #THAI CHARACTER MAITAIKHU 0xE8 0x0E48 #THAI CHARACTER MAI EK 0xE9 0x0E49 #THAI CHARACTER MAI THO 0xEA 0x0E4A #THAI CHARACTER MAI TRI 0xEB 0x0E4B #THAI CHARACTER MAI CHATTAWA 0xEC 0x0E4C #THAI CHARACTER THANTHAKHAT 0xED 0x0E4D #THAI CHARACTER NIKHAHIT 0xEE 0x0E4E #THAI CHARACTER YAMAKKAN 0xEF 0x0E4F #THAI CHARACTER FONGMAN 0xF0 0x0E50 #THAI DIGIT ZERO 0xF1 0x0E51 #THAI DIGIT ONE 0xF2 0x0E52 #THAI DIGIT TWO 0xF3 0x0E53 #THAI DIGIT THREE 0xF4 0x0E54 #THAI DIGIT FOUR 0xF5 0x0E55 #THAI DIGIT FIVE 0xF6 0x0E56 #THAI DIGIT SIX 0xF7 0x0E57 #THAI DIGIT SEVEN 0xF8 0x0E58 #THAI DIGIT EIGHT 0xF9 0x0E59 #THAI DIGIT NINE 0xFA 0x0E5A #THAI CHARACTER ANGKHANKHU 0xFB 0x0E5B #THAI CHARACTER KHOMUT 0xFC #UNDEFINED 0xFD #UNDEFINED 0xFE #UNDEFINED 0xFF #UNDEFINED |
Added freshlib/data/_encodings/_sources/CP875.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | # # Name: cp875_IBMGreek to Unicode table # Unicode version: 2.0 # Table version: 2.00 # Table format: Format A # Date: 04/24/96 # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp875_IBMGreek code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp875_IBMGreek order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x009C #CONTROL 0x05 0x0009 #HORIZONTAL TABULATION 0x06 0x0086 #CONTROL 0x07 0x007F #DELETE 0x08 0x0097 #CONTROL 0x09 0x008D #CONTROL 0x0A 0x008E #CONTROL 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x009D #CONTROL 0x15 0x0085 #CONTROL 0x16 0x0008 #BACKSPACE 0x17 0x0087 #CONTROL 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x0092 #CONTROL 0x1B 0x008F #CONTROL 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0080 #CONTROL 0x21 0x0081 #CONTROL 0x22 0x0082 #CONTROL 0x23 0x0083 #CONTROL 0x24 0x0084 #CONTROL 0x25 0x000A #LINE FEED 0x26 0x0017 #END OF TRANSMISSION BLOCK 0x27 0x001B #ESCAPE 0x28 0x0088 #CONTROL 0x29 0x0089 #CONTROL 0x2A 0x008A #CONTROL 0x2B 0x008B #CONTROL 0x2C 0x008C #CONTROL 0x2D 0x0005 #ENQUIRY 0x2E 0x0006 #ACKNOWLEDGE 0x2F 0x0007 #BELL 0x30 0x0090 #CONTROL 0x31 0x0091 #CONTROL 0x32 0x0016 #SYNCHRONOUS IDLE 0x33 0x0093 #CONTROL 0x34 0x0094 #CONTROL 0x35 0x0095 #CONTROL 0x36 0x0096 #CONTROL 0x37 0x0004 #END OF TRANSMISSION 0x38 0x0098 #CONTROL 0x39 0x0099 #CONTROL 0x3A 0x009A #CONTROL 0x3B 0x009B #CONTROL 0x3C 0x0014 #DEVICE CONTROL FOUR 0x3D 0x0015 #NEGATIVE ACKNOWLEDGE 0x3E 0x009E #CONTROL 0x3F 0x001A #SUBSTITUTE 0x40 0x0020 #SPACE 0x41 0x0391 #GREEK CAPITAL LETTER ALPHA 0x42 0x0392 #GREEK CAPITAL LETTER BETA 0x43 0x0393 #GREEK CAPITAL LETTER GAMMA 0x44 0x0394 #GREEK CAPITAL LETTER DELTA 0x45 0x0395 #GREEK CAPITAL LETTER EPSILON 0x46 0x0396 #GREEK CAPITAL LETTER ZETA 0x47 0x0397 #GREEK CAPITAL LETTER ETA 0x48 0x0398 #GREEK CAPITAL LETTER THETA 0x49 0x0399 #GREEK CAPITAL LETTER IOTA 0x4A 0x005B #LEFT SQUARE BRACKET 0x4B 0x002E #FULL STOP 0x4C 0x003C #LESS-THAN SIGN 0x4D 0x0028 #LEFT PARENTHESIS 0x4E 0x002B #PLUS SIGN 0x4F 0x0021 #EXCLAMATION MARK 0x50 0x0026 #AMPERSAND 0x51 0x039A #GREEK CAPITAL LETTER KAPPA 0x52 0x039B #GREEK CAPITAL LETTER LAMDA 0x53 0x039C #GREEK CAPITAL LETTER MU 0x54 0x039D #GREEK CAPITAL LETTER NU 0x55 0x039E #GREEK CAPITAL LETTER XI 0x56 0x039F #GREEK CAPITAL LETTER OMICRON 0x57 0x03A0 #GREEK CAPITAL LETTER PI 0x58 0x03A1 #GREEK CAPITAL LETTER RHO 0x59 0x03A3 #GREEK CAPITAL LETTER SIGMA 0x5A 0x005D #RIGHT SQUARE BRACKET 0x5B 0x0024 #DOLLAR SIGN 0x5C 0x002A #ASTERISK 0x5D 0x0029 #RIGHT PARENTHESIS 0x5E 0x003B #SEMICOLON 0x5F 0x005E #CIRCUMFLEX ACCENT 0x60 0x002D #HYPHEN-MINUS 0x61 0x002F #SOLIDUS 0x62 0x03A4 #GREEK CAPITAL LETTER TAU 0x63 0x03A5 #GREEK CAPITAL LETTER UPSILON 0x64 0x03A6 #GREEK CAPITAL LETTER PHI 0x65 0x03A7 #GREEK CAPITAL LETTER CHI 0x66 0x03A8 #GREEK CAPITAL LETTER PSI 0x67 0x03A9 #GREEK CAPITAL LETTER OMEGA 0x68 0x03AA #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 0x69 0x03AB #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 0x6A 0x007C #VERTICAL LINE 0x6B 0x002C #COMMA 0x6C 0x0025 #PERCENT SIGN 0x6D 0x005F #LOW LINE 0x6E 0x003E #GREATER-THAN SIGN 0x6F 0x003F #QUESTION MARK 0x70 0x00A8 #DIAERESIS 0x71 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS 0x72 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS 0x73 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS 0x74 0x00A0 #NO-BREAK SPACE 0x75 0x038A #GREEK CAPITAL LETTER IOTA WITH TONOS 0x76 0x038C #GREEK CAPITAL LETTER OMICRON WITH TONOS 0x77 0x038E #GREEK CAPITAL LETTER UPSILON WITH TONOS 0x78 0x038F #GREEK CAPITAL LETTER OMEGA WITH TONOS 0x79 0x0060 #GRAVE ACCENT 0x7A 0x003A #COLON 0x7B 0x0023 #NUMBER SIGN 0x7C 0x0040 #COMMERCIAL AT 0x7D 0x0027 #APOSTROPHE 0x7E 0x003D #EQUALS SIGN 0x7F 0x0022 #QUOTATION MARK 0x80 0x0385 #GREEK DIALYTIKA TONOS 0x81 0x0061 #LATIN SMALL LETTER A 0x82 0x0062 #LATIN SMALL LETTER B 0x83 0x0063 #LATIN SMALL LETTER C 0x84 0x0064 #LATIN SMALL LETTER D 0x85 0x0065 #LATIN SMALL LETTER E 0x86 0x0066 #LATIN SMALL LETTER F 0x87 0x0067 #LATIN SMALL LETTER G 0x88 0x0068 #LATIN SMALL LETTER H 0x89 0x0069 #LATIN SMALL LETTER I 0x8A 0x03B1 #GREEK SMALL LETTER ALPHA 0x8B 0x03B2 #GREEK SMALL LETTER BETA 0x8C 0x03B3 #GREEK SMALL LETTER GAMMA 0x8D 0x03B4 #GREEK SMALL LETTER DELTA 0x8E 0x03B5 #GREEK SMALL LETTER EPSILON 0x8F 0x03B6 #GREEK SMALL LETTER ZETA 0x90 0x00B0 #DEGREE SIGN 0x91 0x006A #LATIN SMALL LETTER J 0x92 0x006B #LATIN SMALL LETTER K 0x93 0x006C #LATIN SMALL LETTER L 0x94 0x006D #LATIN SMALL LETTER M 0x95 0x006E #LATIN SMALL LETTER N 0x96 0x006F #LATIN SMALL LETTER O 0x97 0x0070 #LATIN SMALL LETTER P 0x98 0x0071 #LATIN SMALL LETTER Q 0x99 0x0072 #LATIN SMALL LETTER R 0x9A 0x03B7 #GREEK SMALL LETTER ETA 0x9B 0x03B8 #GREEK SMALL LETTER THETA 0x9C 0x03B9 #GREEK SMALL LETTER IOTA 0x9D 0x03BA #GREEK SMALL LETTER KAPPA 0x9E 0x03BB #GREEK SMALL LETTER LAMDA 0x9F 0x03BC #GREEK SMALL LETTER MU 0xA0 0x00B4 #ACUTE ACCENT 0xA1 0x007E #TILDE 0xA2 0x0073 #LATIN SMALL LETTER S 0xA3 0x0074 #LATIN SMALL LETTER T 0xA4 0x0075 #LATIN SMALL LETTER U 0xA5 0x0076 #LATIN SMALL LETTER V 0xA6 0x0077 #LATIN SMALL LETTER W 0xA7 0x0078 #LATIN SMALL LETTER X 0xA8 0x0079 #LATIN SMALL LETTER Y 0xA9 0x007A #LATIN SMALL LETTER Z 0xAA 0x03BD #GREEK SMALL LETTER NU 0xAB 0x03BE #GREEK SMALL LETTER XI 0xAC 0x03BF #GREEK SMALL LETTER OMICRON 0xAD 0x03C0 #GREEK SMALL LETTER PI 0xAE 0x03C1 #GREEK SMALL LETTER RHO 0xAF 0x03C3 #GREEK SMALL LETTER SIGMA 0xB0 0x00A3 #POUND SIGN 0xB1 0x03AC #GREEK SMALL LETTER ALPHA WITH TONOS 0xB2 0x03AD #GREEK SMALL LETTER EPSILON WITH TONOS 0xB3 0x03AE #GREEK SMALL LETTER ETA WITH TONOS 0xB4 0x03CA #GREEK SMALL LETTER IOTA WITH DIALYTIKA 0xB5 0x03AF #GREEK SMALL LETTER IOTA WITH TONOS 0xB6 0x03CC #GREEK SMALL LETTER OMICRON WITH TONOS 0xB7 0x03CD #GREEK SMALL LETTER UPSILON WITH TONOS 0xB8 0x03CB #GREEK SMALL LETTER UPSILON WITH DIALYTIKA 0xB9 0x03CE #GREEK SMALL LETTER OMEGA WITH TONOS 0xBA 0x03C2 #GREEK SMALL LETTER FINAL SIGMA 0xBB 0x03C4 #GREEK SMALL LETTER TAU 0xBC 0x03C5 #GREEK SMALL LETTER UPSILON 0xBD 0x03C6 #GREEK SMALL LETTER PHI 0xBE 0x03C7 #GREEK SMALL LETTER CHI 0xBF 0x03C8 #GREEK SMALL LETTER PSI 0xC0 0x007B #LEFT CURLY BRACKET 0xC1 0x0041 #LATIN CAPITAL LETTER A 0xC2 0x0042 #LATIN CAPITAL LETTER B 0xC3 0x0043 #LATIN CAPITAL LETTER C 0xC4 0x0044 #LATIN CAPITAL LETTER D 0xC5 0x0045 #LATIN CAPITAL LETTER E 0xC6 0x0046 #LATIN CAPITAL LETTER F 0xC7 0x0047 #LATIN CAPITAL LETTER G 0xC8 0x0048 #LATIN CAPITAL LETTER H 0xC9 0x0049 #LATIN CAPITAL LETTER I 0xCA 0x00AD #SOFT HYPHEN 0xCB 0x03C9 #GREEK SMALL LETTER OMEGA 0xCC 0x0390 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 0xCD 0x03B0 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 0xCE 0x2018 #LEFT SINGLE QUOTATION MARK 0xCF 0x2015 #HORIZONTAL BAR 0xD0 0x007D #RIGHT CURLY BRACKET 0xD1 0x004A #LATIN CAPITAL LETTER J 0xD2 0x004B #LATIN CAPITAL LETTER K 0xD3 0x004C #LATIN CAPITAL LETTER L 0xD4 0x004D #LATIN CAPITAL LETTER M 0xD5 0x004E #LATIN CAPITAL LETTER N 0xD6 0x004F #LATIN CAPITAL LETTER O 0xD7 0x0050 #LATIN CAPITAL LETTER P 0xD8 0x0051 #LATIN CAPITAL LETTER Q 0xD9 0x0052 #LATIN CAPITAL LETTER R 0xDA 0x00B1 #PLUS-MINUS SIGN 0xDB 0x00BD #VULGAR FRACTION ONE HALF 0xDC 0x001A #SUBSTITUTE 0xDD 0x0387 #GREEK ANO TELEIA 0xDE 0x2019 #RIGHT SINGLE QUOTATION MARK 0xDF 0x00A6 #BROKEN BAR 0xE0 0x005C #REVERSE SOLIDUS 0xE1 0x001A #SUBSTITUTE 0xE2 0x0053 #LATIN CAPITAL LETTER S 0xE3 0x0054 #LATIN CAPITAL LETTER T 0xE4 0x0055 #LATIN CAPITAL LETTER U 0xE5 0x0056 #LATIN CAPITAL LETTER V 0xE6 0x0057 #LATIN CAPITAL LETTER W 0xE7 0x0058 #LATIN CAPITAL LETTER X 0xE8 0x0059 #LATIN CAPITAL LETTER Y 0xE9 0x005A #LATIN CAPITAL LETTER Z 0xEA 0x00B2 #SUPERSCRIPT TWO 0xEB 0x00A7 #SECTION SIGN 0xEC 0x001A #SUBSTITUTE 0xED 0x001A #SUBSTITUTE 0xEE 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xEF 0x00AC #NOT SIGN 0xF0 0x0030 #DIGIT ZERO 0xF1 0x0031 #DIGIT ONE 0xF2 0x0032 #DIGIT TWO 0xF3 0x0033 #DIGIT THREE 0xF4 0x0034 #DIGIT FOUR 0xF5 0x0035 #DIGIT FIVE 0xF6 0x0036 #DIGIT SIX 0xF7 0x0037 #DIGIT SEVEN 0xF8 0x0038 #DIGIT EIGHT 0xF9 0x0039 #DIGIT NINE 0xFA 0x00B3 #SUPERSCRIPT THREE 0xFB 0x00A9 #COPYRIGHT SIGN 0xFC 0x001A #SUBSTITUTE 0xFD 0x001A #SUBSTITUTE 0xFE 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xFF 0x009F #CONTROL |
Added freshlib/data/_encodings/_sources/CP932.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 | # # Name: cp932 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: Shawn.Steele@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp932 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp932 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 #UNDEFINED 0x81 #DBCS LEAD BYTE 0x82 #DBCS LEAD BYTE 0x83 #DBCS LEAD BYTE 0x84 #DBCS LEAD BYTE 0x85 #DBCS LEAD BYTE 0x86 #DBCS LEAD BYTE 0x87 #DBCS LEAD BYTE 0x88 #DBCS LEAD BYTE 0x89 #DBCS LEAD BYTE 0x8A #DBCS LEAD BYTE 0x8B #DBCS LEAD BYTE 0x8C #DBCS LEAD BYTE 0x8D #DBCS LEAD BYTE 0x8E #DBCS LEAD BYTE 0x8F #DBCS LEAD BYTE 0x90 #DBCS LEAD BYTE 0x91 #DBCS LEAD BYTE 0x92 #DBCS LEAD BYTE 0x93 #DBCS LEAD BYTE 0x94 #DBCS LEAD BYTE 0x95 #DBCS LEAD BYTE 0x96 #DBCS LEAD BYTE 0x97 #DBCS LEAD BYTE 0x98 #DBCS LEAD BYTE 0x99 #DBCS LEAD BYTE 0x9A #DBCS LEAD BYTE 0x9B #DBCS LEAD BYTE 0x9C #DBCS LEAD BYTE 0x9D #DBCS LEAD BYTE 0x9E #DBCS LEAD BYTE 0x9F #DBCS LEAD BYTE 0xA0 #UNDEFINED 0xA1 0xFF61 #HALFWIDTH IDEOGRAPHIC FULL STOP 0xA2 0xFF62 #HALFWIDTH LEFT CORNER BRACKET 0xA3 0xFF63 #HALFWIDTH RIGHT CORNER BRACKET 0xA4 0xFF64 #HALFWIDTH IDEOGRAPHIC COMMA 0xA5 0xFF65 #HALFWIDTH KATAKANA MIDDLE DOT 0xA6 0xFF66 #HALFWIDTH KATAKANA LETTER WO 0xA7 0xFF67 #HALFWIDTH KATAKANA LETTER SMALL A 0xA8 0xFF68 #HALFWIDTH KATAKANA LETTER SMALL I 0xA9 0xFF69 #HALFWIDTH KATAKANA LETTER SMALL U 0xAA 0xFF6A #HALFWIDTH KATAKANA LETTER SMALL E 0xAB 0xFF6B #HALFWIDTH KATAKANA LETTER SMALL O 0xAC 0xFF6C #HALFWIDTH KATAKANA LETTER SMALL YA 0xAD 0xFF6D #HALFWIDTH KATAKANA LETTER SMALL YU 0xAE 0xFF6E #HALFWIDTH KATAKANA LETTER SMALL YO 0xAF 0xFF6F #HALFWIDTH KATAKANA LETTER SMALL TU 0xB0 0xFF70 #HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK 0xB1 0xFF71 #HALFWIDTH KATAKANA LETTER A 0xB2 0xFF72 #HALFWIDTH KATAKANA LETTER I 0xB3 0xFF73 #HALFWIDTH KATAKANA LETTER U 0xB4 0xFF74 #HALFWIDTH KATAKANA LETTER E 0xB5 0xFF75 #HALFWIDTH KATAKANA LETTER O 0xB6 0xFF76 #HALFWIDTH KATAKANA LETTER KA 0xB7 0xFF77 #HALFWIDTH KATAKANA LETTER KI 0xB8 0xFF78 #HALFWIDTH KATAKANA LETTER KU 0xB9 0xFF79 #HALFWIDTH KATAKANA LETTER KE 0xBA 0xFF7A #HALFWIDTH KATAKANA LETTER KO 0xBB 0xFF7B #HALFWIDTH KATAKANA LETTER SA 0xBC 0xFF7C #HALFWIDTH KATAKANA LETTER SI 0xBD 0xFF7D #HALFWIDTH KATAKANA LETTER SU 0xBE 0xFF7E #HALFWIDTH KATAKANA LETTER SE 0xBF 0xFF7F #HALFWIDTH KATAKANA LETTER SO 0xC0 0xFF80 #HALFWIDTH KATAKANA LETTER TA 0xC1 0xFF81 #HALFWIDTH KATAKANA LETTER TI 0xC2 0xFF82 #HALFWIDTH KATAKANA LETTER TU 0xC3 0xFF83 #HALFWIDTH KATAKANA LETTER TE 0xC4 0xFF84 #HALFWIDTH KATAKANA LETTER TO 0xC5 0xFF85 #HALFWIDTH KATAKANA LETTER NA 0xC6 0xFF86 #HALFWIDTH KATAKANA LETTER NI 0xC7 0xFF87 #HALFWIDTH KATAKANA LETTER NU 0xC8 0xFF88 #HALFWIDTH KATAKANA LETTER NE 0xC9 0xFF89 #HALFWIDTH KATAKANA LETTER NO 0xCA 0xFF8A #HALFWIDTH KATAKANA LETTER HA 0xCB 0xFF8B #HALFWIDTH KATAKANA LETTER HI 0xCC 0xFF8C #HALFWIDTH KATAKANA LETTER HU 0xCD 0xFF8D #HALFWIDTH KATAKANA LETTER HE 0xCE 0xFF8E #HALFWIDTH KATAKANA LETTER HO 0xCF 0xFF8F #HALFWIDTH KATAKANA LETTER MA 0xD0 0xFF90 #HALFWIDTH KATAKANA LETTER MI 0xD1 0xFF91 #HALFWIDTH KATAKANA LETTER MU 0xD2 0xFF92 #HALFWIDTH KATAKANA LETTER ME 0xD3 0xFF93 #HALFWIDTH KATAKANA LETTER MO 0xD4 0xFF94 #HALFWIDTH KATAKANA LETTER YA 0xD5 0xFF95 #HALFWIDTH KATAKANA LETTER YU 0xD6 0xFF96 #HALFWIDTH KATAKANA LETTER YO 0xD7 0xFF97 #HALFWIDTH KATAKANA LETTER RA 0xD8 0xFF98 #HALFWIDTH KATAKANA LETTER RI 0xD9 0xFF99 #HALFWIDTH KATAKANA LETTER RU 0xDA 0xFF9A #HALFWIDTH KATAKANA LETTER RE 0xDB 0xFF9B #HALFWIDTH KATAKANA LETTER RO 0xDC 0xFF9C #HALFWIDTH KATAKANA LETTER WA 0xDD 0xFF9D #HALFWIDTH KATAKANA LETTER N 0xDE 0xFF9E #HALFWIDTH KATAKANA VOICED SOUND MARK 0xDF 0xFF9F #HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK 0xE0 #DBCS LEAD BYTE 0xE1 #DBCS LEAD BYTE 0xE2 #DBCS LEAD BYTE 0xE3 #DBCS LEAD BYTE 0xE4 #DBCS LEAD BYTE 0xE5 #DBCS LEAD BYTE 0xE6 #DBCS LEAD BYTE 0xE7 #DBCS LEAD BYTE 0xE8 #DBCS LEAD BYTE 0xE9 #DBCS LEAD BYTE 0xEA #DBCS LEAD BYTE 0xEB #DBCS LEAD BYTE 0xEC #DBCS LEAD BYTE 0xED #DBCS LEAD BYTE 0xEE #DBCS LEAD BYTE 0xEF #DBCS LEAD BYTE 0xF0 #DBCS LEAD BYTE 0xF1 #DBCS LEAD BYTE 0xF2 #DBCS LEAD BYTE 0xF3 #DBCS LEAD BYTE 0xF4 #DBCS LEAD BYTE 0xF5 #DBCS LEAD BYTE 0xF6 #DBCS LEAD BYTE 0xF7 #DBCS LEAD BYTE 0xF8 #DBCS LEAD BYTE 0xF9 #DBCS LEAD BYTE 0xFA #DBCS LEAD BYTE 0xFB #DBCS LEAD BYTE 0xFC #DBCS LEAD BYTE 0xFD #UNDEFINED 0xFE #UNDEFINED 0xFF #UNDEFINED 0x8140 0x3000 #IDEOGRAPHIC SPACE 0x8141 0x3001 #IDEOGRAPHIC COMMA 0x8142 0x3002 #IDEOGRAPHIC FULL STOP 0x8143 0xFF0C #FULLWIDTH COMMA 0x8144 0xFF0E #FULLWIDTH FULL STOP 0x8145 0x30FB #KATAKANA MIDDLE DOT 0x8146 0xFF1A #FULLWIDTH COLON 0x8147 0xFF1B #FULLWIDTH SEMICOLON 0x8148 0xFF1F #FULLWIDTH QUESTION MARK 0x8149 0xFF01 #FULLWIDTH EXCLAMATION MARK 0x814A 0x309B #KATAKANA-HIRAGANA VOICED SOUND MARK 0x814B 0x309C #KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 0x814C 0x00B4 #ACUTE ACCENT 0x814D 0xFF40 #FULLWIDTH GRAVE ACCENT 0x814E 0x00A8 #DIAERESIS 0x814F 0xFF3E #FULLWIDTH CIRCUMFLEX ACCENT 0x8150 0xFFE3 #FULLWIDTH MACRON 0x8151 0xFF3F #FULLWIDTH LOW LINE 0x8152 0x30FD #KATAKANA ITERATION MARK 0x8153 0x30FE #KATAKANA VOICED ITERATION MARK 0x8154 0x309D #HIRAGANA ITERATION MARK 0x8155 0x309E #HIRAGANA VOICED ITERATION MARK 0x8156 0x3003 #DITTO MARK 0x8157 0x4EDD #CJK UNIFIED IDEOGRAPH 0x8158 0x3005 #IDEOGRAPHIC ITERATION MARK 0x8159 0x3006 #IDEOGRAPHIC CLOSING MARK 0x815A 0x3007 #IDEOGRAPHIC NUMBER ZERO 0x815B 0x30FC #KATAKANA-HIRAGANA PROLONGED SOUND MARK 0x815C 0x2015 #HORIZONTAL BAR 0x815D 0x2010 #HYPHEN 0x815E 0xFF0F #FULLWIDTH SOLIDUS 0x815F 0xFF3C #FULLWIDTH REVERSE SOLIDUS 0x8160 0xFF5E #FULLWIDTH TILDE 0x8161 0x2225 #PARALLEL TO 0x8162 0xFF5C #FULLWIDTH VERTICAL LINE 0x8163 0x2026 #HORIZONTAL ELLIPSIS 0x8164 0x2025 #TWO DOT LEADER 0x8165 0x2018 #LEFT SINGLE QUOTATION MARK 0x8166 0x2019 #RIGHT SINGLE QUOTATION MARK 0x8167 0x201C #LEFT DOUBLE QUOTATION MARK 0x8168 0x201D #RIGHT DOUBLE QUOTATION MARK 0x8169 0xFF08 #FULLWIDTH LEFT PARENTHESIS 0x816A 0xFF09 #FULLWIDTH RIGHT PARENTHESIS 0x816B 0x3014 #LEFT TORTOISE SHELL BRACKET 0x816C 0x3015 #RIGHT TORTOISE SHELL BRACKET 0x816D 0xFF3B #FULLWIDTH LEFT SQUARE BRACKET 0x816E 0xFF3D #FULLWIDTH RIGHT SQUARE BRACKET 0x816F 0xFF5B #FULLWIDTH LEFT CURLY BRACKET 0x8170 0xFF5D #FULLWIDTH RIGHT CURLY BRACKET 0x8171 0x3008 #LEFT ANGLE BRACKET 0x8172 0x3009 #RIGHT ANGLE BRACKET 0x8173 0x300A #LEFT DOUBLE ANGLE BRACKET 0x8174 0x300B #RIGHT DOUBLE ANGLE BRACKET 0x8175 0x300C #LEFT CORNER BRACKET 0x8176 0x300D #RIGHT CORNER BRACKET 0x8177 0x300E #LEFT WHITE CORNER BRACKET 0x8178 0x300F #RIGHT WHITE CORNER BRACKET 0x8179 0x3010 #LEFT BLACK LENTICULAR BRACKET 0x817A 0x3011 #RIGHT BLACK LENTICULAR BRACKET 0x817B 0xFF0B #FULLWIDTH PLUS SIGN 0x817C 0xFF0D #FULLWIDTH HYPHEN-MINUS 0x817D 0x00B1 #PLUS-MINUS SIGN 0x817E 0x00D7 #MULTIPLICATION SIGN 0x8180 0x00F7 #DIVISION SIGN 0x8181 0xFF1D #FULLWIDTH EQUALS SIGN 0x8182 0x2260 #NOT EQUAL TO 0x8183 0xFF1C #FULLWIDTH LESS-THAN SIGN 0x8184 0xFF1E #FULLWIDTH GREATER-THAN SIGN 0x8185 0x2266 #LESS-THAN OVER EQUAL TO 0x8186 0x2267 #GREATER-THAN OVER EQUAL TO 0x8187 0x221E #INFINITY 0x8188 0x2234 #THEREFORE 0x8189 0x2642 #MALE SIGN 0x818A 0x2640 #FEMALE SIGN 0x818B 0x00B0 #DEGREE SIGN 0x818C 0x2032 #PRIME 0x818D 0x2033 #DOUBLE PRIME 0x818E 0x2103 #DEGREE CELSIUS 0x818F 0xFFE5 #FULLWIDTH YEN SIGN 0x8190 0xFF04 #FULLWIDTH DOLLAR SIGN 0x8191 0xFFE0 #FULLWIDTH CENT SIGN 0x8192 0xFFE1 #FULLWIDTH POUND SIGN 0x8193 0xFF05 #FULLWIDTH PERCENT SIGN 0x8194 0xFF03 #FULLWIDTH NUMBER SIGN 0x8195 0xFF06 #FULLWIDTH AMPERSAND 0x8196 0xFF0A #FULLWIDTH ASTERISK 0x8197 0xFF20 #FULLWIDTH COMMERCIAL AT 0x8198 0x00A7 #SECTION SIGN 0x8199 0x2606 #WHITE STAR 0x819A 0x2605 #BLACK STAR 0x819B 0x25CB #WHITE CIRCLE 0x819C 0x25CF #BLACK CIRCLE 0x819D 0x25CE #BULLSEYE 0x819E 0x25C7 #WHITE DIAMOND 0x819F 0x25C6 #BLACK DIAMOND 0x81A0 0x25A1 #WHITE SQUARE 0x81A1 0x25A0 #BLACK SQUARE 0x81A2 0x25B3 #WHITE UP-POINTING TRIANGLE 0x81A3 0x25B2 #BLACK UP-POINTING TRIANGLE 0x81A4 0x25BD #WHITE DOWN-POINTING TRIANGLE 0x81A5 0x25BC #BLACK DOWN-POINTING TRIANGLE 0x81A6 0x203B #REFERENCE MARK 0x81A7 0x3012 #POSTAL MARK 0x81A8 0x2192 #RIGHTWARDS ARROW 0x81A9 0x2190 #LEFTWARDS ARROW 0x81AA 0x2191 #UPWARDS ARROW 0x81AB 0x2193 #DOWNWARDS ARROW 0x81AC 0x3013 #GETA MARK 0x81B8 0x2208 #ELEMENT OF 0x81B9 0x220B #CONTAINS AS MEMBER 0x81BA 0x2286 #SUBSET OF OR EQUAL TO 0x81BB 0x2287 #SUPERSET OF OR EQUAL TO 0x81BC 0x2282 #SUBSET OF 0x81BD 0x2283 #SUPERSET OF 0x81BE 0x222A #UNION 0x81BF 0x2229 #INTERSECTION 0x81C8 0x2227 #LOGICAL AND 0x81C9 0x2228 #LOGICAL OR 0x81CA 0xFFE2 #FULLWIDTH NOT SIGN 0x81CB 0x21D2 #RIGHTWARDS DOUBLE ARROW 0x81CC 0x21D4 #LEFT RIGHT DOUBLE ARROW 0x81CD 0x2200 #FOR ALL 0x81CE 0x2203 #THERE EXISTS 0x81DA 0x2220 #ANGLE 0x81DB 0x22A5 #UP TACK 0x81DC 0x2312 #ARC 0x81DD 0x2202 #PARTIAL DIFFERENTIAL 0x81DE 0x2207 #NABLA 0x81DF 0x2261 #IDENTICAL TO 0x81E0 0x2252 #APPROXIMATELY EQUAL TO OR THE IMAGE OF 0x81E1 0x226A #MUCH LESS-THAN 0x81E2 0x226B #MUCH GREATER-THAN 0x81E3 0x221A #SQUARE ROOT 0x81E4 0x223D #REVERSED TILDE 0x81E5 0x221D #PROPORTIONAL TO 0x81E6 0x2235 #BECAUSE 0x81E7 0x222B #INTEGRAL 0x81E8 0x222C #DOUBLE INTEGRAL 0x81F0 0x212B #ANGSTROM SIGN 0x81F1 0x2030 #PER MILLE SIGN 0x81F2 0x266F #MUSIC SHARP SIGN 0x81F3 0x266D #MUSIC FLAT SIGN 0x81F4 0x266A #EIGHTH NOTE 0x81F5 0x2020 #DAGGER 0x81F6 0x2021 #DOUBLE DAGGER 0x81F7 0x00B6 #PILCROW SIGN 0x81FC 0x25EF #LARGE CIRCLE 0x824F 0xFF10 #FULLWIDTH DIGIT ZERO 0x8250 0xFF11 #FULLWIDTH DIGIT ONE 0x8251 0xFF12 #FULLWIDTH DIGIT TWO 0x8252 0xFF13 #FULLWIDTH DIGIT THREE 0x8253 0xFF14 #FULLWIDTH DIGIT FOUR 0x8254 0xFF15 #FULLWIDTH DIGIT FIVE 0x8255 0xFF16 #FULLWIDTH DIGIT SIX 0x8256 0xFF17 #FULLWIDTH DIGIT SEVEN 0x8257 0xFF18 #FULLWIDTH DIGIT EIGHT 0x8258 0xFF19 #FULLWIDTH DIGIT NINE 0x8260 0xFF21 #FULLWIDTH LATIN CAPITAL LETTER A 0x8261 0xFF22 #FULLWIDTH LATIN CAPITAL LETTER B 0x8262 0xFF23 #FULLWIDTH LATIN CAPITAL LETTER C 0x8263 0xFF24 #FULLWIDTH LATIN CAPITAL LETTER D 0x8264 0xFF25 #FULLWIDTH LATIN CAPITAL LETTER E 0x8265 0xFF26 #FULLWIDTH LATIN CAPITAL LETTER F 0x8266 0xFF27 #FULLWIDTH LATIN CAPITAL LETTER G 0x8267 0xFF28 #FULLWIDTH LATIN CAPITAL LETTER H 0x8268 0xFF29 #FULLWIDTH LATIN CAPITAL LETTER I 0x8269 0xFF2A #FULLWIDTH LATIN CAPITAL LETTER J 0x826A 0xFF2B #FULLWIDTH LATIN CAPITAL LETTER K 0x826B 0xFF2C #FULLWIDTH LATIN CAPITAL LETTER L 0x826C 0xFF2D #FULLWIDTH LATIN CAPITAL LETTER M 0x826D 0xFF2E #FULLWIDTH LATIN CAPITAL LETTER N 0x826E 0xFF2F #FULLWIDTH LATIN CAPITAL LETTER O 0x826F 0xFF30 #FULLWIDTH LATIN CAPITAL LETTER P 0x8270 0xFF31 #FULLWIDTH LATIN CAPITAL LETTER Q 0x8271 0xFF32 #FULLWIDTH LATIN CAPITAL LETTER R 0x8272 0xFF33 #FULLWIDTH LATIN CAPITAL LETTER S 0x8273 0xFF34 #FULLWIDTH LATIN CAPITAL LETTER T 0x8274 0xFF35 #FULLWIDTH LATIN CAPITAL LETTER U 0x8275 0xFF36 #FULLWIDTH LATIN CAPITAL LETTER V 0x8276 0xFF37 #FULLWIDTH LATIN CAPITAL LETTER W 0x8277 0xFF38 #FULLWIDTH LATIN CAPITAL LETTER X 0x8278 0xFF39 #FULLWIDTH LATIN CAPITAL LETTER Y 0x8279 0xFF3A #FULLWIDTH LATIN CAPITAL LETTER Z 0x8281 0xFF41 #FULLWIDTH LATIN SMALL LETTER A 0x8282 0xFF42 #FULLWIDTH LATIN SMALL LETTER B 0x8283 0xFF43 #FULLWIDTH LATIN SMALL LETTER C 0x8284 0xFF44 #FULLWIDTH LATIN SMALL LETTER D 0x8285 0xFF45 #FULLWIDTH LATIN SMALL LETTER E 0x8286 0xFF46 #FULLWIDTH LATIN SMALL LETTER F 0x8287 0xFF47 #FULLWIDTH LATIN SMALL LETTER G 0x8288 0xFF48 #FULLWIDTH LATIN SMALL LETTER H 0x8289 0xFF49 #FULLWIDTH LATIN SMALL LETTER I 0x828A 0xFF4A #FULLWIDTH LATIN SMALL LETTER J 0x828B 0xFF4B #FULLWIDTH LATIN SMALL LETTER K 0x828C 0xFF4C #FULLWIDTH LATIN SMALL LETTER L 0x828D 0xFF4D #FULLWIDTH LATIN SMALL LETTER M 0x828E 0xFF4E #FULLWIDTH LATIN SMALL LETTER N 0x828F 0xFF4F #FULLWIDTH LATIN SMALL LETTER O 0x8290 0xFF50 #FULLWIDTH LATIN SMALL LETTER P 0x8291 0xFF51 #FULLWIDTH LATIN SMALL LETTER Q 0x8292 0xFF52 #FULLWIDTH LATIN SMALL LETTER R 0x8293 0xFF53 #FULLWIDTH LATIN SMALL LETTER S 0x8294 0xFF54 #FULLWIDTH LATIN SMALL LETTER T 0x8295 0xFF55 #FULLWIDTH LATIN SMALL LETTER U 0x8296 0xFF56 #FULLWIDTH LATIN SMALL LETTER V 0x8297 0xFF57 #FULLWIDTH LATIN SMALL LETTER W 0x8298 0xFF58 #FULLWIDTH LATIN SMALL LETTER X 0x8299 0xFF59 #FULLWIDTH LATIN SMALL LETTER Y 0x829A 0xFF5A #FULLWIDTH LATIN SMALL LETTER Z 0x829F 0x3041 #HIRAGANA LETTER SMALL A 0x82A0 0x3042 #HIRAGANA LETTER A 0x82A1 0x3043 #HIRAGANA LETTER SMALL I 0x82A2 0x3044 #HIRAGANA LETTER I 0x82A3 0x3045 #HIRAGANA LETTER SMALL U 0x82A4 0x3046 #HIRAGANA LETTER U 0x82A5 0x3047 #HIRAGANA LETTER SMALL E 0x82A6 0x3048 #HIRAGANA LETTER E 0x82A7 0x3049 #HIRAGANA LETTER SMALL O 0x82A8 0x304A #HIRAGANA LETTER O 0x82A9 0x304B #HIRAGANA LETTER KA 0x82AA 0x304C #HIRAGANA LETTER GA 0x82AB 0x304D #HIRAGANA LETTER KI 0x82AC 0x304E #HIRAGANA LETTER GI 0x82AD 0x304F #HIRAGANA LETTER KU 0x82AE 0x3050 #HIRAGANA LETTER GU 0x82AF 0x3051 #HIRAGANA LETTER KE 0x82B0 0x3052 #HIRAGANA LETTER GE 0x82B1 0x3053 #HIRAGANA LETTER KO 0x82B2 0x3054 #HIRAGANA LETTER GO 0x82B3 0x3055 #HIRAGANA LETTER SA 0x82B4 0x3056 #HIRAGANA LETTER ZA 0x82B5 0x3057 #HIRAGANA LETTER SI 0x82B6 0x3058 #HIRAGANA LETTER ZI 0x82B7 0x3059 #HIRAGANA LETTER SU 0x82B8 0x305A #HIRAGANA LETTER ZU 0x82B9 0x305B #HIRAGANA LETTER SE 0x82BA 0x305C #HIRAGANA LETTER ZE 0x82BB 0x305D #HIRAGANA LETTER SO 0x82BC 0x305E #HIRAGANA LETTER ZO 0x82BD 0x305F #HIRAGANA LETTER TA 0x82BE 0x3060 #HIRAGANA LETTER DA 0x82BF 0x3061 #HIRAGANA LETTER TI 0x82C0 0x3062 #HIRAGANA LETTER DI 0x82C1 0x3063 #HIRAGANA LETTER SMALL TU 0x82C2 0x3064 #HIRAGANA LETTER TU 0x82C3 0x3065 #HIRAGANA LETTER DU 0x82C4 0x3066 #HIRAGANA LETTER TE 0x82C5 0x3067 #HIRAGANA LETTER DE 0x82C6 0x3068 #HIRAGANA LETTER TO 0x82C7 0x3069 #HIRAGANA LETTER DO 0x82C8 0x306A #HIRAGANA LETTER NA 0x82C9 0x306B #HIRAGANA LETTER NI 0x82CA 0x306C #HIRAGANA LETTER NU 0x82CB 0x306D #HIRAGANA LETTER NE 0x82CC 0x306E #HIRAGANA LETTER NO 0x82CD 0x306F #HIRAGANA LETTER HA 0x82CE 0x3070 #HIRAGANA LETTER BA 0x82CF 0x3071 #HIRAGANA LETTER PA 0x82D0 0x3072 #HIRAGANA LETTER HI 0x82D1 0x3073 #HIRAGANA LETTER BI 0x82D2 0x3074 #HIRAGANA LETTER PI 0x82D3 0x3075 #HIRAGANA LETTER HU 0x82D4 0x3076 #HIRAGANA LETTER BU 0x82D5 0x3077 #HIRAGANA LETTER PU 0x82D6 0x3078 #HIRAGANA LETTER HE 0x82D7 0x3079 #HIRAGANA LETTER BE 0x82D8 0x307A #HIRAGANA LETTER PE 0x82D9 0x307B #HIRAGANA LETTER HO 0x82DA 0x307C #HIRAGANA LETTER BO 0x82DB 0x307D #HIRAGANA LETTER PO 0x82DC 0x307E #HIRAGANA LETTER MA 0x82DD 0x307F #HIRAGANA LETTER MI 0x82DE 0x3080 #HIRAGANA LETTER MU 0x82DF 0x3081 #HIRAGANA LETTER ME 0x82E0 0x3082 #HIRAGANA LETTER MO 0x82E1 0x3083 #HIRAGANA LETTER SMALL YA 0x82E2 0x3084 #HIRAGANA LETTER YA 0x82E3 0x3085 #HIRAGANA LETTER SMALL YU 0x82E4 0x3086 #HIRAGANA LETTER YU 0x82E5 0x3087 #HIRAGANA LETTER SMALL YO 0x82E6 0x3088 #HIRAGANA LETTER YO 0x82E7 0x3089 #HIRAGANA LETTER RA 0x82E8 0x308A #HIRAGANA LETTER RI 0x82E9 0x308B #HIRAGANA LETTER RU 0x82EA 0x308C #HIRAGANA LETTER RE 0x82EB 0x308D #HIRAGANA LETTER RO 0x82EC 0x308E #HIRAGANA LETTER SMALL WA 0x82ED 0x308F #HIRAGANA LETTER WA 0x82EE 0x3090 #HIRAGANA LETTER WI 0x82EF 0x3091 #HIRAGANA LETTER WE 0x82F0 0x3092 #HIRAGANA LETTER WO 0x82F1 0x3093 #HIRAGANA LETTER N 0x8340 0x30A1 #KATAKANA LETTER SMALL A 0x8341 0x30A2 #KATAKANA LETTER A 0x8342 0x30A3 #KATAKANA LETTER SMALL I 0x8343 0x30A4 #KATAKANA LETTER I 0x8344 0x30A5 #KATAKANA LETTER SMALL U 0x8345 0x30A6 #KATAKANA LETTER U 0x8346 0x30A7 #KATAKANA LETTER SMALL E 0x8347 0x30A8 #KATAKANA LETTER E 0x8348 0x30A9 #KATAKANA LETTER SMALL O 0x8349 0x30AA #KATAKANA LETTER O 0x834A 0x30AB #KATAKANA LETTER KA 0x834B 0x30AC #KATAKANA LETTER GA 0x834C 0x30AD #KATAKANA LETTER KI 0x834D 0x30AE #KATAKANA LETTER GI 0x834E 0x30AF #KATAKANA LETTER KU 0x834F 0x30B0 #KATAKANA LETTER GU 0x8350 0x30B1 #KATAKANA LETTER KE 0x8351 0x30B2 #KATAKANA LETTER GE 0x8352 0x30B3 #KATAKANA LETTER KO 0x8353 0x30B4 #KATAKANA LETTER GO 0x8354 0x30B5 #KATAKANA LETTER SA 0x8355 0x30B6 #KATAKANA LETTER ZA 0x8356 0x30B7 #KATAKANA LETTER SI 0x8357 0x30B8 #KATAKANA LETTER ZI 0x8358 0x30B9 #KATAKANA LETTER SU 0x8359 0x30BA #KATAKANA LETTER ZU 0x835A 0x30BB #KATAKANA LETTER SE 0x835B 0x30BC #KATAKANA LETTER ZE 0x835C 0x30BD #KATAKANA LETTER SO 0x835D 0x30BE #KATAKANA LETTER ZO 0x835E 0x30BF #KATAKANA LETTER TA 0x835F 0x30C0 #KATAKANA LETTER DA 0x8360 0x30C1 #KATAKANA LETTER TI 0x8361 0x30C2 #KATAKANA LETTER DI 0x8362 0x30C3 #KATAKANA LETTER SMALL TU 0x8363 0x30C4 #KATAKANA LETTER TU 0x8364 0x30C5 #KATAKANA LETTER DU 0x8365 0x30C6 #KATAKANA LETTER TE 0x8366 0x30C7 #KATAKANA LETTER DE 0x8367 0x30C8 #KATAKANA LETTER TO 0x8368 0x30C9 #KATAKANA LETTER DO 0x8369 0x30CA #KATAKANA LETTER NA 0x836A 0x30CB #KATAKANA LETTER NI 0x836B 0x30CC #KATAKANA LETTER NU 0x836C 0x30CD #KATAKANA LETTER NE 0x836D 0x30CE #KATAKANA LETTER NO 0x836E 0x30CF #KATAKANA LETTER HA 0x836F 0x30D0 #KATAKANA LETTER BA 0x8370 0x30D1 #KATAKANA LETTER PA 0x8371 0x30D2 #KATAKANA LETTER HI 0x8372 0x30D3 #KATAKANA LETTER BI 0x8373 0x30D4 #KATAKANA LETTER PI 0x8374 0x30D5 #KATAKANA LETTER HU 0x8375 0x30D6 #KATAKANA LETTER BU 0x8376 0x30D7 #KATAKANA LETTER PU 0x8377 0x30D8 #KATAKANA LETTER HE 0x8378 0x30D9 #KATAKANA LETTER BE 0x8379 0x30DA #KATAKANA LETTER PE 0x837A 0x30DB #KATAKANA LETTER HO 0x837B 0x30DC #KATAKANA LETTER BO 0x837C 0x30DD #KATAKANA LETTER PO 0x837D 0x30DE #KATAKANA LETTER MA 0x837E 0x30DF #KATAKANA LETTER MI 0x8380 0x30E0 #KATAKANA LETTER MU 0x8381 0x30E1 #KATAKANA LETTER ME 0x8382 0x30E2 #KATAKANA LETTER MO 0x8383 0x30E3 #KATAKANA LETTER SMALL YA 0x8384 0x30E4 #KATAKANA LETTER YA 0x8385 0x30E5 #KATAKANA LETTER SMALL YU 0x8386 0x30E6 #KATAKANA LETTER YU 0x8387 0x30E7 #KATAKANA LETTER SMALL YO 0x8388 0x30E8 #KATAKANA LETTER YO 0x8389 0x30E9 #KATAKANA LETTER RA 0x838A 0x30EA #KATAKANA LETTER RI 0x838B 0x30EB #KATAKANA LETTER RU 0x838C 0x30EC #KATAKANA LETTER RE 0x838D 0x30ED #KATAKANA LETTER RO 0x838E 0x30EE #KATAKANA LETTER SMALL WA 0x838F 0x30EF #KATAKANA LETTER WA 0x8390 0x30F0 #KATAKANA LETTER WI 0x8391 0x30F1 #KATAKANA LETTER WE 0x8392 0x30F2 #KATAKANA LETTER WO 0x8393 0x30F3 #KATAKANA LETTER N 0x8394 0x30F4 #KATAKANA LETTER VU 0x8395 0x30F5 #KATAKANA LETTER SMALL KA 0x8396 0x30F6 #KATAKANA LETTER SMALL KE 0x839F 0x0391 #GREEK CAPITAL LETTER ALPHA 0x83A0 0x0392 #GREEK CAPITAL LETTER BETA 0x83A1 0x0393 #GREEK CAPITAL LETTER GAMMA 0x83A2 0x0394 #GREEK CAPITAL LETTER DELTA 0x83A3 0x0395 #GREEK CAPITAL LETTER EPSILON 0x83A4 0x0396 #GREEK CAPITAL LETTER ZETA 0x83A5 0x0397 #GREEK CAPITAL LETTER ETA 0x83A6 0x0398 #GREEK CAPITAL LETTER THETA 0x83A7 0x0399 #GREEK CAPITAL LETTER IOTA 0x83A8 0x039A #GREEK CAPITAL LETTER KAPPA 0x83A9 0x039B #GREEK CAPITAL LETTER LAMDA 0x83AA 0x039C #GREEK CAPITAL LETTER MU 0x83AB 0x039D #GREEK CAPITAL LETTER NU 0x83AC 0x039E #GREEK CAPITAL LETTER XI 0x83AD 0x039F #GREEK CAPITAL LETTER OMICRON 0x83AE 0x03A0 #GREEK CAPITAL LETTER PI 0x83AF 0x03A1 #GREEK CAPITAL LETTER RHO 0x83B0 0x03A3 #GREEK CAPITAL LETTER SIGMA 0x83B1 0x03A4 #GREEK CAPITAL LETTER TAU 0x83B2 0x03A5 #GREEK CAPITAL LETTER UPSILON 0x83B3 0x03A6 #GREEK CAPITAL LETTER PHI 0x83B4 0x03A7 #GREEK CAPITAL LETTER CHI 0x83B5 0x03A8 #GREEK CAPITAL LETTER PSI 0x83B6 0x03A9 #GREEK CAPITAL LETTER OMEGA 0x83BF 0x03B1 #GREEK SMALL LETTER ALPHA 0x83C0 0x03B2 #GREEK SMALL LETTER BETA 0x83C1 0x03B3 #GREEK SMALL LETTER GAMMA 0x83C2 0x03B4 #GREEK SMALL LETTER DELTA 0x83C3 0x03B5 #GREEK SMALL LETTER EPSILON 0x83C4 0x03B6 #GREEK SMALL LETTER ZETA 0x83C5 0x03B7 #GREEK SMALL LETTER ETA 0x83C6 0x03B8 #GREEK SMALL LETTER THETA 0x83C7 0x03B9 #GREEK SMALL LETTER IOTA 0x83C8 0x03BA #GREEK SMALL LETTER KAPPA 0x83C9 0x03BB #GREEK SMALL LETTER LAMDA 0x83CA 0x03BC #GREEK SMALL LETTER MU 0x83CB 0x03BD #GREEK SMALL LETTER NU 0x83CC 0x03BE #GREEK SMALL LETTER XI 0x83CD 0x03BF #GREEK SMALL LETTER OMICRON 0x83CE 0x03C0 #GREEK SMALL LETTER PI 0x83CF 0x03C1 #GREEK SMALL LETTER RHO 0x83D0 0x03C3 #GREEK SMALL LETTER SIGMA 0x83D1 0x03C4 #GREEK SMALL LETTER TAU 0x83D2 0x03C5 #GREEK SMALL LETTER UPSILON 0x83D3 0x03C6 #GREEK SMALL LETTER PHI 0x83D4 0x03C7 #GREEK SMALL LETTER CHI 0x83D5 0x03C8 #GREEK SMALL LETTER PSI 0x83D6 0x03C9 #GREEK SMALL LETTER OMEGA 0x8440 0x0410 #CYRILLIC CAPITAL LETTER A 0x8441 0x0411 #CYRILLIC CAPITAL LETTER BE 0x8442 0x0412 #CYRILLIC CAPITAL LETTER VE 0x8443 0x0413 #CYRILLIC CAPITAL LETTER GHE 0x8444 0x0414 #CYRILLIC CAPITAL LETTER DE 0x8445 0x0415 #CYRILLIC CAPITAL LETTER IE 0x8446 0x0401 #CYRILLIC CAPITAL LETTER IO 0x8447 0x0416 #CYRILLIC CAPITAL LETTER ZHE 0x8448 0x0417 #CYRILLIC CAPITAL LETTER ZE 0x8449 0x0418 #CYRILLIC CAPITAL LETTER I 0x844A 0x0419 #CYRILLIC CAPITAL LETTER SHORT I 0x844B 0x041A #CYRILLIC CAPITAL LETTER KA 0x844C 0x041B #CYRILLIC CAPITAL LETTER EL 0x844D 0x041C #CYRILLIC CAPITAL LETTER EM 0x844E 0x041D #CYRILLIC CAPITAL LETTER EN 0x844F 0x041E #CYRILLIC CAPITAL LETTER O 0x8450 0x041F #CYRILLIC CAPITAL LETTER PE 0x8451 0x0420 #CYRILLIC CAPITAL LETTER ER 0x8452 0x0421 #CYRILLIC CAPITAL LETTER ES 0x8453 0x0422 #CYRILLIC CAPITAL LETTER TE 0x8454 0x0423 #CYRILLIC CAPITAL LETTER U 0x8455 0x0424 #CYRILLIC CAPITAL LETTER EF 0x8456 0x0425 #CYRILLIC CAPITAL LETTER HA 0x8457 0x0426 #CYRILLIC CAPITAL LETTER TSE 0x8458 0x0427 #CYRILLIC CAPITAL LETTER CHE 0x8459 0x0428 #CYRILLIC CAPITAL LETTER SHA 0x845A 0x0429 #CYRILLIC CAPITAL LETTER SHCHA 0x845B 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN 0x845C 0x042B #CYRILLIC CAPITAL LETTER YERU 0x845D 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN 0x845E 0x042D #CYRILLIC CAPITAL LETTER E 0x845F 0x042E #CYRILLIC CAPITAL LETTER YU 0x8460 0x042F #CYRILLIC CAPITAL LETTER YA 0x8470 0x0430 #CYRILLIC SMALL LETTER A 0x8471 0x0431 #CYRILLIC SMALL LETTER BE 0x8472 0x0432 #CYRILLIC SMALL LETTER VE 0x8473 0x0433 #CYRILLIC SMALL LETTER GHE 0x8474 0x0434 #CYRILLIC SMALL LETTER DE 0x8475 0x0435 #CYRILLIC SMALL LETTER IE 0x8476 0x0451 #CYRILLIC SMALL LETTER IO 0x8477 0x0436 #CYRILLIC SMALL LETTER ZHE 0x8478 0x0437 #CYRILLIC SMALL LETTER ZE 0x8479 0x0438 #CYRILLIC SMALL LETTER I 0x847A 0x0439 #CYRILLIC SMALL LETTER SHORT I 0x847B 0x043A #CYRILLIC SMALL LETTER KA 0x847C 0x043B #CYRILLIC SMALL LETTER EL 0x847D 0x043C #CYRILLIC SMALL LETTER EM 0x847E 0x043D #CYRILLIC SMALL LETTER EN 0x8480 0x043E #CYRILLIC SMALL LETTER O 0x8481 0x043F #CYRILLIC SMALL LETTER PE 0x8482 0x0440 #CYRILLIC SMALL LETTER ER 0x8483 0x0441 #CYRILLIC SMALL LETTER ES 0x8484 0x0442 #CYRILLIC SMALL LETTER TE 0x8485 0x0443 #CYRILLIC SMALL LETTER U 0x8486 0x0444 #CYRILLIC SMALL LETTER EF 0x8487 0x0445 #CYRILLIC SMALL LETTER HA 0x8488 0x0446 #CYRILLIC SMALL LETTER TSE 0x8489 0x0447 #CYRILLIC SMALL LETTER CHE 0x848A 0x0448 #CYRILLIC SMALL LETTER SHA 0x848B 0x0449 #CYRILLIC SMALL LETTER SHCHA 0x848C 0x044A #CYRILLIC SMALL LETTER HARD SIGN 0x848D 0x044B #CYRILLIC SMALL LETTER YERU 0x848E 0x044C #CYRILLIC SMALL LETTER SOFT SIGN 0x848F 0x044D #CYRILLIC SMALL LETTER E 0x8490 0x044E #CYRILLIC SMALL LETTER YU 0x8491 0x044F #CYRILLIC SMALL LETTER YA 0x849F 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 0x84A0 0x2502 #BOX DRAWINGS LIGHT VERTICAL 0x84A1 0x250C #BOX DRAWINGS LIGHT DOWN AND RIGHT 0x84A2 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 0x84A3 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 0x84A4 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 0x84A5 0x251C #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0x84A6 0x252C #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0x84A7 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 0x84A8 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 0x84A9 0x253C #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0x84AA 0x2501 #BOX DRAWINGS HEAVY HORIZONTAL 0x84AB 0x2503 #BOX DRAWINGS HEAVY VERTICAL 0x84AC 0x250F #BOX DRAWINGS HEAVY DOWN AND RIGHT 0x84AD 0x2513 #BOX DRAWINGS HEAVY DOWN AND LEFT 0x84AE 0x251B #BOX DRAWINGS HEAVY UP AND LEFT 0x84AF 0x2517 #BOX DRAWINGS HEAVY UP AND RIGHT 0x84B0 0x2523 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT 0x84B1 0x2533 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL 0x84B2 0x252B #BOX DRAWINGS HEAVY VERTICAL AND LEFT 0x84B3 0x253B #BOX DRAWINGS HEAVY UP AND HORIZONTAL 0x84B4 0x254B #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL 0x84B5 0x2520 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT 0x84B6 0x252F #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY 0x84B7 0x2528 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT 0x84B8 0x2537 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY 0x84B9 0x253F #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY 0x84BA 0x251D #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY 0x84BB 0x2530 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT 0x84BC 0x2525 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY 0x84BD 0x2538 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT 0x84BE 0x2542 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT 0x8740 0x2460 #CIRCLED DIGIT ONE 0x8741 0x2461 #CIRCLED DIGIT TWO 0x8742 0x2462 #CIRCLED DIGIT THREE 0x8743 0x2463 #CIRCLED DIGIT FOUR 0x8744 0x2464 #CIRCLED DIGIT FIVE 0x8745 0x2465 #CIRCLED DIGIT SIX 0x8746 0x2466 #CIRCLED DIGIT SEVEN 0x8747 0x2467 #CIRCLED DIGIT EIGHT 0x8748 0x2468 #CIRCLED DIGIT NINE 0x8749 0x2469 #CIRCLED NUMBER TEN 0x874A 0x246A #CIRCLED NUMBER ELEVEN 0x874B 0x246B #CIRCLED NUMBER TWELVE 0x874C 0x246C #CIRCLED NUMBER THIRTEEN 0x874D 0x246D #CIRCLED NUMBER FOURTEEN 0x874E 0x246E #CIRCLED NUMBER FIFTEEN 0x874F 0x246F #CIRCLED NUMBER SIXTEEN 0x8750 0x2470 #CIRCLED NUMBER SEVENTEEN 0x8751 0x2471 #CIRCLED NUMBER EIGHTEEN 0x8752 0x2472 #CIRCLED NUMBER NINETEEN 0x8753 0x2473 #CIRCLED NUMBER TWENTY 0x8754 0x2160 #ROMAN NUMERAL ONE 0x8755 0x2161 #ROMAN NUMERAL TWO 0x8756 0x2162 #ROMAN NUMERAL THREE 0x8757 0x2163 #ROMAN NUMERAL FOUR 0x8758 0x2164 #ROMAN NUMERAL FIVE 0x8759 0x2165 #ROMAN NUMERAL SIX 0x875A 0x2166 #ROMAN NUMERAL SEVEN 0x875B 0x2167 #ROMAN NUMERAL EIGHT 0x875C 0x2168 #ROMAN NUMERAL NINE 0x875D 0x2169 #ROMAN NUMERAL TEN 0x875F 0x3349 #SQUARE MIRI 0x8760 0x3314 #SQUARE KIRO 0x8761 0x3322 #SQUARE SENTI 0x8762 0x334D #SQUARE MEETORU 0x8763 0x3318 #SQUARE GURAMU 0x8764 0x3327 #SQUARE TON 0x8765 0x3303 #SQUARE AARU 0x8766 0x3336 #SQUARE HEKUTAARU 0x8767 0x3351 #SQUARE RITTORU 0x8768 0x3357 #SQUARE WATTO 0x8769 0x330D #SQUARE KARORII 0x876A 0x3326 #SQUARE DORU 0x876B 0x3323 #SQUARE SENTO 0x876C 0x332B #SQUARE PAASENTO 0x876D 0x334A #SQUARE MIRIBAARU 0x876E 0x333B #SQUARE PEEZI 0x876F 0x339C #SQUARE MM 0x8770 0x339D #SQUARE CM 0x8771 0x339E #SQUARE KM 0x8772 0x338E #SQUARE MG 0x8773 0x338F #SQUARE KG 0x8774 0x33C4 #SQUARE CC 0x8775 0x33A1 #SQUARE M SQUARED 0x877E 0x337B #SQUARE ERA NAME HEISEI 0x8780 0x301D #REVERSED DOUBLE PRIME QUOTATION MARK 0x8781 0x301F #LOW DOUBLE PRIME QUOTATION MARK 0x8782 0x2116 #NUMERO SIGN 0x8783 0x33CD #SQUARE KK 0x8784 0x2121 #TELEPHONE SIGN 0x8785 0x32A4 #CIRCLED IDEOGRAPH HIGH 0x8786 0x32A5 #CIRCLED IDEOGRAPH CENTRE 0x8787 0x32A6 #CIRCLED IDEOGRAPH LOW 0x8788 0x32A7 #CIRCLED IDEOGRAPH LEFT 0x8789 0x32A8 #CIRCLED IDEOGRAPH RIGHT 0x878A 0x3231 #PARENTHESIZED IDEOGRAPH STOCK 0x878B 0x3232 #PARENTHESIZED IDEOGRAPH HAVE 0x878C 0x3239 #PARENTHESIZED IDEOGRAPH REPRESENT 0x878D 0x337E #SQUARE ERA NAME MEIZI 0x878E 0x337D #SQUARE ERA NAME TAISYOU 0x878F 0x337C #SQUARE ERA NAME SYOUWA 0x8790 0x2252 #APPROXIMATELY EQUAL TO OR THE IMAGE OF 0x8791 0x2261 #IDENTICAL TO 0x8792 0x222B #INTEGRAL 0x8793 0x222E #CONTOUR INTEGRAL 0x8794 0x2211 #N-ARY SUMMATION 0x8795 0x221A #SQUARE ROOT 0x8796 0x22A5 #UP TACK 0x8797 0x2220 #ANGLE 0x8798 0x221F #RIGHT ANGLE 0x8799 0x22BF #RIGHT TRIANGLE 0x879A 0x2235 #BECAUSE 0x879B 0x2229 #INTERSECTION 0x879C 0x222A #UNION 0x889F 0x4E9C #CJK UNIFIED IDEOGRAPH 0x88A0 0x5516 #CJK UNIFIED IDEOGRAPH 0x88A1 0x5A03 #CJK UNIFIED IDEOGRAPH 0x88A2 0x963F #CJK UNIFIED IDEOGRAPH 0x88A3 0x54C0 #CJK UNIFIED IDEOGRAPH 0x88A4 0x611B #CJK UNIFIED IDEOGRAPH 0x88A5 0x6328 #CJK UNIFIED IDEOGRAPH 0x88A6 0x59F6 #CJK UNIFIED IDEOGRAPH 0x88A7 0x9022 #CJK UNIFIED IDEOGRAPH 0x88A8 0x8475 #CJK UNIFIED IDEOGRAPH 0x88A9 0x831C #CJK UNIFIED IDEOGRAPH 0x88AA 0x7A50 #CJK UNIFIED IDEOGRAPH 0x88AB 0x60AA #CJK UNIFIED IDEOGRAPH 0x88AC 0x63E1 #CJK UNIFIED IDEOGRAPH 0x88AD 0x6E25 #CJK UNIFIED IDEOGRAPH 0x88AE 0x65ED #CJK UNIFIED IDEOGRAPH 0x88AF 0x8466 #CJK UNIFIED IDEOGRAPH 0x88B0 0x82A6 #CJK UNIFIED IDEOGRAPH 0x88B1 0x9BF5 #CJK UNIFIED IDEOGRAPH 0x88B2 0x6893 #CJK UNIFIED IDEOGRAPH 0x88B3 0x5727 #CJK UNIFIED IDEOGRAPH 0x88B4 0x65A1 #CJK UNIFIED IDEOGRAPH 0x88B5 0x6271 #CJK UNIFIED IDEOGRAPH 0x88B6 0x5B9B #CJK UNIFIED IDEOGRAPH 0x88B7 0x59D0 #CJK UNIFIED IDEOGRAPH 0x88B8 0x867B #CJK UNIFIED IDEOGRAPH 0x88B9 0x98F4 #CJK UNIFIED IDEOGRAPH 0x88BA 0x7D62 #CJK UNIFIED IDEOGRAPH 0x88BB 0x7DBE #CJK UNIFIED IDEOGRAPH 0x88BC 0x9B8E #CJK UNIFIED IDEOGRAPH 0x88BD 0x6216 #CJK UNIFIED IDEOGRAPH 0x88BE 0x7C9F #CJK UNIFIED IDEOGRAPH 0x88BF 0x88B7 #CJK UNIFIED IDEOGRAPH 0x88C0 0x5B89 #CJK UNIFIED IDEOGRAPH 0x88C1 0x5EB5 #CJK UNIFIED IDEOGRAPH 0x88C2 0x6309 #CJK UNIFIED IDEOGRAPH 0x88C3 0x6697 #CJK UNIFIED IDEOGRAPH 0x88C4 0x6848 #CJK UNIFIED IDEOGRAPH 0x88C5 0x95C7 #CJK UNIFIED IDEOGRAPH 0x88C6 0x978D #CJK UNIFIED IDEOGRAPH 0x88C7 0x674F #CJK UNIFIED IDEOGRAPH 0x88C8 0x4EE5 #CJK UNIFIED IDEOGRAPH 0x88C9 0x4F0A #CJK UNIFIED IDEOGRAPH 0x88CA 0x4F4D #CJK UNIFIED IDEOGRAPH 0x88CB 0x4F9D #CJK UNIFIED IDEOGRAPH 0x88CC 0x5049 #CJK UNIFIED IDEOGRAPH 0x88CD 0x56F2 #CJK UNIFIED IDEOGRAPH 0x88CE 0x5937 #CJK UNIFIED IDEOGRAPH 0x88CF 0x59D4 #CJK UNIFIED IDEOGRAPH 0x88D0 0x5A01 #CJK UNIFIED IDEOGRAPH 0x88D1 0x5C09 #CJK UNIFIED IDEOGRAPH 0x88D2 0x60DF #CJK UNIFIED IDEOGRAPH 0x88D3 0x610F #CJK UNIFIED IDEOGRAPH 0x88D4 0x6170 #CJK UNIFIED IDEOGRAPH 0x88D5 0x6613 #CJK UNIFIED IDEOGRAPH 0x88D6 0x6905 #CJK UNIFIED IDEOGRAPH 0x88D7 0x70BA #CJK UNIFIED IDEOGRAPH 0x88D8 0x754F #CJK UNIFIED IDEOGRAPH 0x88D9 0x7570 #CJK UNIFIED IDEOGRAPH 0x88DA 0x79FB #CJK UNIFIED IDEOGRAPH 0x88DB 0x7DAD #CJK UNIFIED IDEOGRAPH 0x88DC 0x7DEF #CJK UNIFIED IDEOGRAPH 0x88DD 0x80C3 #CJK UNIFIED IDEOGRAPH 0x88DE 0x840E #CJK UNIFIED IDEOGRAPH 0x88DF 0x8863 #CJK UNIFIED IDEOGRAPH 0x88E0 0x8B02 #CJK UNIFIED IDEOGRAPH 0x88E1 0x9055 #CJK UNIFIED IDEOGRAPH 0x88E2 0x907A #CJK UNIFIED IDEOGRAPH 0x88E3 0x533B #CJK UNIFIED IDEOGRAPH 0x88E4 0x4E95 #CJK UNIFIED IDEOGRAPH 0x88E5 0x4EA5 #CJK UNIFIED IDEOGRAPH 0x88E6 0x57DF #CJK UNIFIED IDEOGRAPH 0x88E7 0x80B2 #CJK UNIFIED IDEOGRAPH 0x88E8 0x90C1 #CJK UNIFIED IDEOGRAPH 0x88E9 0x78EF #CJK UNIFIED IDEOGRAPH 0x88EA 0x4E00 #CJK UNIFIED IDEOGRAPH 0x88EB 0x58F1 #CJK UNIFIED IDEOGRAPH 0x88EC 0x6EA2 #CJK UNIFIED IDEOGRAPH 0x88ED 0x9038 #CJK UNIFIED IDEOGRAPH 0x88EE 0x7A32 #CJK UNIFIED IDEOGRAPH 0x88EF 0x8328 #CJK UNIFIED IDEOGRAPH 0x88F0 0x828B #CJK UNIFIED IDEOGRAPH 0x88F1 0x9C2F #CJK UNIFIED IDEOGRAPH 0x88F2 0x5141 #CJK UNIFIED IDEOGRAPH 0x88F3 0x5370 #CJK UNIFIED IDEOGRAPH 0x88F4 0x54BD #CJK UNIFIED IDEOGRAPH 0x88F5 0x54E1 #CJK UNIFIED IDEOGRAPH 0x88F6 0x56E0 #CJK UNIFIED IDEOGRAPH 0x88F7 0x59FB #CJK UNIFIED IDEOGRAPH 0x88F8 0x5F15 #CJK UNIFIED IDEOGRAPH 0x88F9 0x98F2 #CJK UNIFIED IDEOGRAPH 0x88FA 0x6DEB #CJK UNIFIED IDEOGRAPH 0x88FB 0x80E4 #CJK UNIFIED IDEOGRAPH 0x88FC 0x852D #CJK UNIFIED IDEOGRAPH 0x8940 0x9662 #CJK UNIFIED IDEOGRAPH 0x8941 0x9670 #CJK UNIFIED IDEOGRAPH 0x8942 0x96A0 #CJK UNIFIED IDEOGRAPH 0x8943 0x97FB #CJK UNIFIED IDEOGRAPH 0x8944 0x540B #CJK UNIFIED IDEOGRAPH 0x8945 0x53F3 #CJK UNIFIED IDEOGRAPH 0x8946 0x5B87 #CJK UNIFIED IDEOGRAPH 0x8947 0x70CF #CJK UNIFIED IDEOGRAPH 0x8948 0x7FBD #CJK UNIFIED IDEOGRAPH 0x8949 0x8FC2 #CJK UNIFIED IDEOGRAPH 0x894A 0x96E8 #CJK UNIFIED IDEOGRAPH 0x894B 0x536F #CJK UNIFIED IDEOGRAPH 0x894C 0x9D5C #CJK UNIFIED IDEOGRAPH 0x894D 0x7ABA #CJK UNIFIED IDEOGRAPH 0x894E 0x4E11 #CJK UNIFIED IDEOGRAPH 0x894F 0x7893 #CJK UNIFIED IDEOGRAPH 0x8950 0x81FC #CJK UNIFIED IDEOGRAPH 0x8951 0x6E26 #CJK UNIFIED IDEOGRAPH 0x8952 0x5618 #CJK UNIFIED IDEOGRAPH 0x8953 0x5504 #CJK UNIFIED IDEOGRAPH 0x8954 0x6B1D #CJK UNIFIED IDEOGRAPH 0x8955 0x851A #CJK UNIFIED IDEOGRAPH 0x8956 0x9C3B #CJK UNIFIED IDEOGRAPH 0x8957 0x59E5 #CJK UNIFIED IDEOGRAPH 0x8958 0x53A9 #CJK UNIFIED IDEOGRAPH 0x8959 0x6D66 #CJK UNIFIED IDEOGRAPH 0x895A 0x74DC #CJK UNIFIED IDEOGRAPH 0x895B 0x958F #CJK UNIFIED IDEOGRAPH 0x895C 0x5642 #CJK UNIFIED IDEOGRAPH 0x895D 0x4E91 #CJK UNIFIED IDEOGRAPH 0x895E 0x904B #CJK UNIFIED IDEOGRAPH 0x895F 0x96F2 #CJK UNIFIED IDEOGRAPH 0x8960 0x834F #CJK UNIFIED IDEOGRAPH 0x8961 0x990C #CJK UNIFIED IDEOGRAPH 0x8962 0x53E1 #CJK UNIFIED IDEOGRAPH 0x8963 0x55B6 #CJK UNIFIED IDEOGRAPH 0x8964 0x5B30 #CJK UNIFIED IDEOGRAPH 0x8965 0x5F71 #CJK UNIFIED IDEOGRAPH 0x8966 0x6620 #CJK UNIFIED IDEOGRAPH 0x8967 0x66F3 #CJK UNIFIED IDEOGRAPH 0x8968 0x6804 #CJK UNIFIED IDEOGRAPH 0x8969 0x6C38 #CJK UNIFIED IDEOGRAPH 0x896A 0x6CF3 #CJK UNIFIED IDEOGRAPH 0x896B 0x6D29 #CJK UNIFIED IDEOGRAPH 0x896C 0x745B #CJK UNIFIED IDEOGRAPH 0x896D 0x76C8 #CJK UNIFIED IDEOGRAPH 0x896E 0x7A4E #CJK UNIFIED IDEOGRAPH 0x896F 0x9834 #CJK UNIFIED IDEOGRAPH 0x8970 0x82F1 #CJK UNIFIED IDEOGRAPH 0x8971 0x885B #CJK UNIFIED IDEOGRAPH 0x8972 0x8A60 #CJK UNIFIED IDEOGRAPH 0x8973 0x92ED #CJK UNIFIED IDEOGRAPH 0x8974 0x6DB2 #CJK UNIFIED IDEOGRAPH 0x8975 0x75AB #CJK UNIFIED IDEOGRAPH 0x8976 0x76CA #CJK UNIFIED IDEOGRAPH 0x8977 0x99C5 #CJK UNIFIED IDEOGRAPH 0x8978 0x60A6 #CJK UNIFIED IDEOGRAPH 0x8979 0x8B01 #CJK UNIFIED IDEOGRAPH 0x897A 0x8D8A #CJK UNIFIED IDEOGRAPH 0x897B 0x95B2 #CJK UNIFIED IDEOGRAPH 0x897C 0x698E #CJK UNIFIED IDEOGRAPH 0x897D 0x53AD #CJK UNIFIED IDEOGRAPH 0x897E 0x5186 #CJK UNIFIED IDEOGRAPH 0x8980 0x5712 #CJK UNIFIED IDEOGRAPH 0x8981 0x5830 #CJK UNIFIED IDEOGRAPH 0x8982 0x5944 #CJK UNIFIED IDEOGRAPH 0x8983 0x5BB4 #CJK UNIFIED IDEOGRAPH 0x8984 0x5EF6 #CJK UNIFIED IDEOGRAPH 0x8985 0x6028 #CJK UNIFIED IDEOGRAPH 0x8986 0x63A9 #CJK UNIFIED IDEOGRAPH 0x8987 0x63F4 #CJK UNIFIED IDEOGRAPH 0x8988 0x6CBF #CJK UNIFIED IDEOGRAPH 0x8989 0x6F14 #CJK UNIFIED IDEOGRAPH 0x898A 0x708E #CJK UNIFIED IDEOGRAPH 0x898B 0x7114 #CJK UNIFIED IDEOGRAPH 0x898C 0x7159 #CJK UNIFIED IDEOGRAPH 0x898D 0x71D5 #CJK UNIFIED IDEOGRAPH 0x898E 0x733F #CJK UNIFIED IDEOGRAPH 0x898F 0x7E01 #CJK UNIFIED IDEOGRAPH 0x8990 0x8276 #CJK UNIFIED IDEOGRAPH 0x8991 0x82D1 #CJK UNIFIED IDEOGRAPH 0x8992 0x8597 #CJK UNIFIED IDEOGRAPH 0x8993 0x9060 #CJK UNIFIED IDEOGRAPH 0x8994 0x925B #CJK UNIFIED IDEOGRAPH 0x8995 0x9D1B #CJK UNIFIED IDEOGRAPH 0x8996 0x5869 #CJK UNIFIED IDEOGRAPH 0x8997 0x65BC #CJK UNIFIED IDEOGRAPH 0x8998 0x6C5A #CJK UNIFIED IDEOGRAPH 0x8999 0x7525 #CJK UNIFIED IDEOGRAPH 0x899A 0x51F9 #CJK UNIFIED IDEOGRAPH 0x899B 0x592E #CJK UNIFIED IDEOGRAPH 0x899C 0x5965 #CJK UNIFIED IDEOGRAPH 0x899D 0x5F80 #CJK UNIFIED IDEOGRAPH 0x899E 0x5FDC #CJK UNIFIED IDEOGRAPH 0x899F 0x62BC #CJK UNIFIED IDEOGRAPH 0x89A0 0x65FA #CJK UNIFIED IDEOGRAPH 0x89A1 0x6A2A #CJK UNIFIED IDEOGRAPH 0x89A2 0x6B27 #CJK UNIFIED IDEOGRAPH 0x89A3 0x6BB4 #CJK UNIFIED IDEOGRAPH 0x89A4 0x738B #CJK UNIFIED IDEOGRAPH 0x89A5 0x7FC1 #CJK UNIFIED IDEOGRAPH 0x89A6 0x8956 #CJK UNIFIED IDEOGRAPH 0x89A7 0x9D2C #CJK UNIFIED IDEOGRAPH 0x89A8 0x9D0E #CJK UNIFIED IDEOGRAPH 0x89A9 0x9EC4 #CJK UNIFIED IDEOGRAPH 0x89AA 0x5CA1 #CJK UNIFIED IDEOGRAPH 0x89AB 0x6C96 #CJK UNIFIED IDEOGRAPH 0x89AC 0x837B #CJK UNIFIED IDEOGRAPH 0x89AD 0x5104 #CJK UNIFIED IDEOGRAPH 0x89AE 0x5C4B #CJK UNIFIED IDEOGRAPH 0x89AF 0x61B6 #CJK UNIFIED IDEOGRAPH 0x89B0 0x81C6 #CJK UNIFIED IDEOGRAPH 0x89B1 0x6876 #CJK UNIFIED IDEOGRAPH 0x89B2 0x7261 #CJK UNIFIED IDEOGRAPH 0x89B3 0x4E59 #CJK UNIFIED IDEOGRAPH 0x89B4 0x4FFA #CJK UNIFIED IDEOGRAPH 0x89B5 0x5378 #CJK UNIFIED IDEOGRAPH 0x89B6 0x6069 #CJK UNIFIED IDEOGRAPH 0x89B7 0x6E29 #CJK UNIFIED IDEOGRAPH 0x89B8 0x7A4F #CJK UNIFIED IDEOGRAPH 0x89B9 0x97F3 #CJK UNIFIED IDEOGRAPH 0x89BA 0x4E0B #CJK UNIFIED IDEOGRAPH 0x89BB 0x5316 #CJK UNIFIED IDEOGRAPH 0x89BC 0x4EEE #CJK UNIFIED IDEOGRAPH 0x89BD 0x4F55 #CJK UNIFIED IDEOGRAPH 0x89BE 0x4F3D #CJK UNIFIED IDEOGRAPH 0x89BF 0x4FA1 #CJK UNIFIED IDEOGRAPH 0x89C0 0x4F73 #CJK UNIFIED IDEOGRAPH 0x89C1 0x52A0 #CJK UNIFIED IDEOGRAPH 0x89C2 0x53EF #CJK UNIFIED IDEOGRAPH 0x89C3 0x5609 #CJK UNIFIED IDEOGRAPH 0x89C4 0x590F #CJK UNIFIED IDEOGRAPH 0x89C5 0x5AC1 #CJK UNIFIED IDEOGRAPH 0x89C6 0x5BB6 #CJK UNIFIED IDEOGRAPH 0x89C7 0x5BE1 #CJK UNIFIED IDEOGRAPH 0x89C8 0x79D1 #CJK UNIFIED IDEOGRAPH 0x89C9 0x6687 #CJK UNIFIED IDEOGRAPH 0x89CA 0x679C #CJK UNIFIED IDEOGRAPH 0x89CB 0x67B6 #CJK UNIFIED IDEOGRAPH 0x89CC 0x6B4C #CJK UNIFIED IDEOGRAPH 0x89CD 0x6CB3 #CJK UNIFIED IDEOGRAPH 0x89CE 0x706B #CJK UNIFIED IDEOGRAPH 0x89CF 0x73C2 #CJK UNIFIED IDEOGRAPH 0x89D0 0x798D #CJK UNIFIED IDEOGRAPH 0x89D1 0x79BE #CJK UNIFIED IDEOGRAPH 0x89D2 0x7A3C #CJK UNIFIED IDEOGRAPH 0x89D3 0x7B87 #CJK UNIFIED IDEOGRAPH 0x89D4 0x82B1 #CJK UNIFIED IDEOGRAPH 0x89D5 0x82DB #CJK UNIFIED IDEOGRAPH 0x89D6 0x8304 #CJK UNIFIED IDEOGRAPH 0x89D7 0x8377 #CJK UNIFIED IDEOGRAPH 0x89D8 0x83EF #CJK UNIFIED IDEOGRAPH 0x89D9 0x83D3 #CJK UNIFIED IDEOGRAPH 0x89DA 0x8766 #CJK UNIFIED IDEOGRAPH 0x89DB 0x8AB2 #CJK UNIFIED IDEOGRAPH 0x89DC 0x5629 #CJK UNIFIED IDEOGRAPH 0x89DD 0x8CA8 #CJK UNIFIED IDEOGRAPH 0x89DE 0x8FE6 #CJK UNIFIED IDEOGRAPH 0x89DF 0x904E #CJK UNIFIED IDEOGRAPH 0x89E0 0x971E #CJK UNIFIED IDEOGRAPH 0x89E1 0x868A #CJK UNIFIED IDEOGRAPH 0x89E2 0x4FC4 #CJK UNIFIED IDEOGRAPH 0x89E3 0x5CE8 #CJK UNIFIED IDEOGRAPH 0x89E4 0x6211 #CJK UNIFIED IDEOGRAPH 0x89E5 0x7259 #CJK UNIFIED IDEOGRAPH 0x89E6 0x753B #CJK UNIFIED IDEOGRAPH 0x89E7 0x81E5 #CJK UNIFIED IDEOGRAPH 0x89E8 0x82BD #CJK UNIFIED IDEOGRAPH 0x89E9 0x86FE #CJK UNIFIED IDEOGRAPH 0x89EA 0x8CC0 #CJK UNIFIED IDEOGRAPH 0x89EB 0x96C5 #CJK UNIFIED IDEOGRAPH 0x89EC 0x9913 #CJK UNIFIED IDEOGRAPH 0x89ED 0x99D5 #CJK UNIFIED IDEOGRAPH 0x89EE 0x4ECB #CJK UNIFIED IDEOGRAPH 0x89EF 0x4F1A #CJK UNIFIED IDEOGRAPH 0x89F0 0x89E3 #CJK UNIFIED IDEOGRAPH 0x89F1 0x56DE #CJK UNIFIED IDEOGRAPH 0x89F2 0x584A #CJK UNIFIED IDEOGRAPH 0x89F3 0x58CA #CJK UNIFIED IDEOGRAPH 0x89F4 0x5EFB #CJK UNIFIED IDEOGRAPH 0x89F5 0x5FEB #CJK UNIFIED IDEOGRAPH 0x89F6 0x602A #CJK UNIFIED IDEOGRAPH 0x89F7 0x6094 #CJK UNIFIED IDEOGRAPH 0x89F8 0x6062 #CJK UNIFIED IDEOGRAPH 0x89F9 0x61D0 #CJK UNIFIED IDEOGRAPH 0x89FA 0x6212 #CJK UNIFIED IDEOGRAPH 0x89FB 0x62D0 #CJK UNIFIED IDEOGRAPH 0x89FC 0x6539 #CJK UNIFIED IDEOGRAPH 0x8A40 0x9B41 #CJK UNIFIED IDEOGRAPH 0x8A41 0x6666 #CJK UNIFIED IDEOGRAPH 0x8A42 0x68B0 #CJK UNIFIED IDEOGRAPH 0x8A43 0x6D77 #CJK UNIFIED IDEOGRAPH 0x8A44 0x7070 #CJK UNIFIED IDEOGRAPH 0x8A45 0x754C #CJK UNIFIED IDEOGRAPH 0x8A46 0x7686 #CJK UNIFIED IDEOGRAPH 0x8A47 0x7D75 #CJK UNIFIED IDEOGRAPH 0x8A48 0x82A5 #CJK UNIFIED IDEOGRAPH 0x8A49 0x87F9 #CJK UNIFIED IDEOGRAPH 0x8A4A 0x958B #CJK UNIFIED IDEOGRAPH 0x8A4B 0x968E #CJK UNIFIED IDEOGRAPH 0x8A4C 0x8C9D #CJK UNIFIED IDEOGRAPH 0x8A4D 0x51F1 #CJK UNIFIED IDEOGRAPH 0x8A4E 0x52BE #CJK UNIFIED IDEOGRAPH 0x8A4F 0x5916 #CJK UNIFIED IDEOGRAPH 0x8A50 0x54B3 #CJK UNIFIED IDEOGRAPH 0x8A51 0x5BB3 #CJK UNIFIED IDEOGRAPH 0x8A52 0x5D16 #CJK UNIFIED IDEOGRAPH 0x8A53 0x6168 #CJK UNIFIED IDEOGRAPH 0x8A54 0x6982 #CJK UNIFIED IDEOGRAPH 0x8A55 0x6DAF #CJK UNIFIED IDEOGRAPH 0x8A56 0x788D #CJK UNIFIED IDEOGRAPH 0x8A57 0x84CB #CJK UNIFIED IDEOGRAPH 0x8A58 0x8857 #CJK UNIFIED IDEOGRAPH 0x8A59 0x8A72 #CJK UNIFIED IDEOGRAPH 0x8A5A 0x93A7 #CJK UNIFIED IDEOGRAPH 0x8A5B 0x9AB8 #CJK UNIFIED IDEOGRAPH 0x8A5C 0x6D6C #CJK UNIFIED IDEOGRAPH 0x8A5D 0x99A8 #CJK UNIFIED IDEOGRAPH 0x8A5E 0x86D9 #CJK UNIFIED IDEOGRAPH 0x8A5F 0x57A3 #CJK UNIFIED IDEOGRAPH 0x8A60 0x67FF #CJK UNIFIED IDEOGRAPH 0x8A61 0x86CE #CJK UNIFIED IDEOGRAPH 0x8A62 0x920E #CJK UNIFIED IDEOGRAPH 0x8A63 0x5283 #CJK UNIFIED IDEOGRAPH 0x8A64 0x5687 #CJK UNIFIED IDEOGRAPH 0x8A65 0x5404 #CJK UNIFIED IDEOGRAPH 0x8A66 0x5ED3 #CJK UNIFIED IDEOGRAPH 0x8A67 0x62E1 #CJK UNIFIED IDEOGRAPH 0x8A68 0x64B9 #CJK UNIFIED IDEOGRAPH 0x8A69 0x683C #CJK UNIFIED IDEOGRAPH 0x8A6A 0x6838 #CJK UNIFIED IDEOGRAPH 0x8A6B 0x6BBB #CJK UNIFIED IDEOGRAPH 0x8A6C 0x7372 #CJK UNIFIED IDEOGRAPH 0x8A6D 0x78BA #CJK UNIFIED IDEOGRAPH 0x8A6E 0x7A6B #CJK UNIFIED IDEOGRAPH 0x8A6F 0x899A #CJK UNIFIED IDEOGRAPH 0x8A70 0x89D2 #CJK UNIFIED IDEOGRAPH 0x8A71 0x8D6B #CJK UNIFIED IDEOGRAPH 0x8A72 0x8F03 #CJK UNIFIED IDEOGRAPH 0x8A73 0x90ED #CJK UNIFIED IDEOGRAPH 0x8A74 0x95A3 #CJK UNIFIED IDEOGRAPH 0x8A75 0x9694 #CJK UNIFIED IDEOGRAPH 0x8A76 0x9769 #CJK UNIFIED IDEOGRAPH 0x8A77 0x5B66 #CJK UNIFIED IDEOGRAPH 0x8A78 0x5CB3 #CJK UNIFIED IDEOGRAPH 0x8A79 0x697D #CJK UNIFIED IDEOGRAPH 0x8A7A 0x984D #CJK UNIFIED IDEOGRAPH 0x8A7B 0x984E #CJK UNIFIED IDEOGRAPH 0x8A7C 0x639B #CJK UNIFIED IDEOGRAPH 0x8A7D 0x7B20 #CJK UNIFIED IDEOGRAPH 0x8A7E 0x6A2B #CJK UNIFIED IDEOGRAPH 0x8A80 0x6A7F #CJK UNIFIED IDEOGRAPH 0x8A81 0x68B6 #CJK UNIFIED IDEOGRAPH 0x8A82 0x9C0D #CJK UNIFIED IDEOGRAPH 0x8A83 0x6F5F #CJK UNIFIED IDEOGRAPH 0x8A84 0x5272 #CJK UNIFIED IDEOGRAPH 0x8A85 0x559D #CJK UNIFIED IDEOGRAPH 0x8A86 0x6070 #CJK UNIFIED IDEOGRAPH 0x8A87 0x62EC #CJK UNIFIED IDEOGRAPH 0x8A88 0x6D3B #CJK UNIFIED IDEOGRAPH 0x8A89 0x6E07 #CJK UNIFIED IDEOGRAPH 0x8A8A 0x6ED1 #CJK UNIFIED IDEOGRAPH 0x8A8B 0x845B #CJK UNIFIED IDEOGRAPH 0x8A8C 0x8910 #CJK UNIFIED IDEOGRAPH 0x8A8D 0x8F44 #CJK UNIFIED IDEOGRAPH 0x8A8E 0x4E14 #CJK UNIFIED IDEOGRAPH 0x8A8F 0x9C39 #CJK UNIFIED IDEOGRAPH 0x8A90 0x53F6 #CJK UNIFIED IDEOGRAPH 0x8A91 0x691B #CJK UNIFIED IDEOGRAPH 0x8A92 0x6A3A #CJK UNIFIED IDEOGRAPH 0x8A93 0x9784 #CJK UNIFIED IDEOGRAPH 0x8A94 0x682A #CJK UNIFIED IDEOGRAPH 0x8A95 0x515C #CJK UNIFIED IDEOGRAPH 0x8A96 0x7AC3 #CJK UNIFIED IDEOGRAPH 0x8A97 0x84B2 #CJK UNIFIED IDEOGRAPH 0x8A98 0x91DC #CJK UNIFIED IDEOGRAPH 0x8A99 0x938C #CJK UNIFIED IDEOGRAPH 0x8A9A 0x565B #CJK UNIFIED IDEOGRAPH 0x8A9B 0x9D28 #CJK UNIFIED IDEOGRAPH 0x8A9C 0x6822 #CJK UNIFIED IDEOGRAPH 0x8A9D 0x8305 #CJK UNIFIED IDEOGRAPH 0x8A9E 0x8431 #CJK UNIFIED IDEOGRAPH 0x8A9F 0x7CA5 #CJK UNIFIED IDEOGRAPH 0x8AA0 0x5208 #CJK UNIFIED IDEOGRAPH 0x8AA1 0x82C5 #CJK UNIFIED IDEOGRAPH 0x8AA2 0x74E6 #CJK UNIFIED IDEOGRAPH 0x8AA3 0x4E7E #CJK UNIFIED IDEOGRAPH 0x8AA4 0x4F83 #CJK UNIFIED IDEOGRAPH 0x8AA5 0x51A0 #CJK UNIFIED IDEOGRAPH 0x8AA6 0x5BD2 #CJK UNIFIED IDEOGRAPH 0x8AA7 0x520A #CJK UNIFIED IDEOGRAPH 0x8AA8 0x52D8 #CJK UNIFIED IDEOGRAPH 0x8AA9 0x52E7 #CJK UNIFIED IDEOGRAPH 0x8AAA 0x5DFB #CJK UNIFIED IDEOGRAPH 0x8AAB 0x559A #CJK UNIFIED IDEOGRAPH 0x8AAC 0x582A #CJK UNIFIED IDEOGRAPH 0x8AAD 0x59E6 #CJK UNIFIED IDEOGRAPH 0x8AAE 0x5B8C #CJK UNIFIED IDEOGRAPH 0x8AAF 0x5B98 #CJK UNIFIED IDEOGRAPH 0x8AB0 0x5BDB #CJK UNIFIED IDEOGRAPH 0x8AB1 0x5E72 #CJK UNIFIED IDEOGRAPH 0x8AB2 0x5E79 #CJK UNIFIED IDEOGRAPH 0x8AB3 0x60A3 #CJK UNIFIED IDEOGRAPH 0x8AB4 0x611F #CJK UNIFIED IDEOGRAPH 0x8AB5 0x6163 #CJK UNIFIED IDEOGRAPH 0x8AB6 0x61BE #CJK UNIFIED IDEOGRAPH 0x8AB7 0x63DB #CJK UNIFIED IDEOGRAPH 0x8AB8 0x6562 #CJK UNIFIED IDEOGRAPH 0x8AB9 0x67D1 #CJK UNIFIED IDEOGRAPH 0x8ABA 0x6853 #CJK UNIFIED IDEOGRAPH 0x8ABB 0x68FA #CJK UNIFIED IDEOGRAPH 0x8ABC 0x6B3E #CJK UNIFIED IDEOGRAPH 0x8ABD 0x6B53 #CJK UNIFIED IDEOGRAPH 0x8ABE 0x6C57 #CJK UNIFIED IDEOGRAPH 0x8ABF 0x6F22 #CJK UNIFIED IDEOGRAPH 0x8AC0 0x6F97 #CJK UNIFIED IDEOGRAPH 0x8AC1 0x6F45 #CJK UNIFIED IDEOGRAPH 0x8AC2 0x74B0 #CJK UNIFIED IDEOGRAPH 0x8AC3 0x7518 #CJK UNIFIED IDEOGRAPH 0x8AC4 0x76E3 #CJK UNIFIED IDEOGRAPH 0x8AC5 0x770B #CJK UNIFIED IDEOGRAPH 0x8AC6 0x7AFF #CJK UNIFIED IDEOGRAPH 0x8AC7 0x7BA1 #CJK UNIFIED IDEOGRAPH 0x8AC8 0x7C21 #CJK UNIFIED IDEOGRAPH 0x8AC9 0x7DE9 #CJK UNIFIED IDEOGRAPH 0x8ACA 0x7F36 #CJK UNIFIED IDEOGRAPH 0x8ACB 0x7FF0 #CJK UNIFIED IDEOGRAPH 0x8ACC 0x809D #CJK UNIFIED IDEOGRAPH 0x8ACD 0x8266 #CJK UNIFIED IDEOGRAPH 0x8ACE 0x839E #CJK UNIFIED IDEOGRAPH 0x8ACF 0x89B3 #CJK UNIFIED IDEOGRAPH 0x8AD0 0x8ACC #CJK UNIFIED IDEOGRAPH 0x8AD1 0x8CAB #CJK UNIFIED IDEOGRAPH 0x8AD2 0x9084 #CJK UNIFIED IDEOGRAPH 0x8AD3 0x9451 #CJK UNIFIED IDEOGRAPH 0x8AD4 0x9593 #CJK UNIFIED IDEOGRAPH 0x8AD5 0x9591 #CJK UNIFIED IDEOGRAPH 0x8AD6 0x95A2 #CJK UNIFIED IDEOGRAPH 0x8AD7 0x9665 #CJK UNIFIED IDEOGRAPH 0x8AD8 0x97D3 #CJK UNIFIED IDEOGRAPH 0x8AD9 0x9928 #CJK UNIFIED IDEOGRAPH 0x8ADA 0x8218 #CJK UNIFIED IDEOGRAPH 0x8ADB 0x4E38 #CJK UNIFIED IDEOGRAPH 0x8ADC 0x542B #CJK UNIFIED IDEOGRAPH 0x8ADD 0x5CB8 #CJK UNIFIED IDEOGRAPH 0x8ADE 0x5DCC #CJK UNIFIED IDEOGRAPH 0x8ADF 0x73A9 #CJK UNIFIED IDEOGRAPH 0x8AE0 0x764C #CJK UNIFIED IDEOGRAPH 0x8AE1 0x773C #CJK UNIFIED IDEOGRAPH 0x8AE2 0x5CA9 #CJK UNIFIED IDEOGRAPH 0x8AE3 0x7FEB #CJK UNIFIED IDEOGRAPH 0x8AE4 0x8D0B #CJK UNIFIED IDEOGRAPH 0x8AE5 0x96C1 #CJK UNIFIED IDEOGRAPH 0x8AE6 0x9811 #CJK UNIFIED IDEOGRAPH 0x8AE7 0x9854 #CJK UNIFIED IDEOGRAPH 0x8AE8 0x9858 #CJK UNIFIED IDEOGRAPH 0x8AE9 0x4F01 #CJK UNIFIED IDEOGRAPH 0x8AEA 0x4F0E #CJK UNIFIED IDEOGRAPH 0x8AEB 0x5371 #CJK UNIFIED IDEOGRAPH 0x8AEC 0x559C #CJK UNIFIED IDEOGRAPH 0x8AED 0x5668 #CJK UNIFIED IDEOGRAPH 0x8AEE 0x57FA #CJK UNIFIED IDEOGRAPH 0x8AEF 0x5947 #CJK UNIFIED IDEOGRAPH 0x8AF0 0x5B09 #CJK UNIFIED IDEOGRAPH 0x8AF1 0x5BC4 #CJK UNIFIED IDEOGRAPH 0x8AF2 0x5C90 #CJK UNIFIED IDEOGRAPH 0x8AF3 0x5E0C #CJK UNIFIED IDEOGRAPH 0x8AF4 0x5E7E #CJK UNIFIED IDEOGRAPH 0x8AF5 0x5FCC #CJK UNIFIED IDEOGRAPH 0x8AF6 0x63EE #CJK UNIFIED IDEOGRAPH 0x8AF7 0x673A #CJK UNIFIED IDEOGRAPH 0x8AF8 0x65D7 #CJK UNIFIED IDEOGRAPH 0x8AF9 0x65E2 #CJK UNIFIED IDEOGRAPH 0x8AFA 0x671F #CJK UNIFIED IDEOGRAPH 0x8AFB 0x68CB #CJK UNIFIED IDEOGRAPH 0x8AFC 0x68C4 #CJK UNIFIED IDEOGRAPH 0x8B40 0x6A5F #CJK UNIFIED IDEOGRAPH 0x8B41 0x5E30 #CJK UNIFIED IDEOGRAPH 0x8B42 0x6BC5 #CJK UNIFIED IDEOGRAPH 0x8B43 0x6C17 #CJK UNIFIED IDEOGRAPH 0x8B44 0x6C7D #CJK UNIFIED IDEOGRAPH 0x8B45 0x757F #CJK UNIFIED IDEOGRAPH 0x8B46 0x7948 #CJK UNIFIED IDEOGRAPH 0x8B47 0x5B63 #CJK UNIFIED IDEOGRAPH 0x8B48 0x7A00 #CJK UNIFIED IDEOGRAPH 0x8B49 0x7D00 #CJK UNIFIED IDEOGRAPH 0x8B4A 0x5FBD #CJK UNIFIED IDEOGRAPH 0x8B4B 0x898F #CJK UNIFIED IDEOGRAPH 0x8B4C 0x8A18 #CJK UNIFIED IDEOGRAPH 0x8B4D 0x8CB4 #CJK UNIFIED IDEOGRAPH 0x8B4E 0x8D77 #CJK UNIFIED IDEOGRAPH 0x8B4F 0x8ECC #CJK UNIFIED IDEOGRAPH 0x8B50 0x8F1D #CJK UNIFIED IDEOGRAPH 0x8B51 0x98E2 #CJK UNIFIED IDEOGRAPH 0x8B52 0x9A0E #CJK UNIFIED IDEOGRAPH 0x8B53 0x9B3C #CJK UNIFIED IDEOGRAPH 0x8B54 0x4E80 #CJK UNIFIED IDEOGRAPH 0x8B55 0x507D #CJK UNIFIED IDEOGRAPH 0x8B56 0x5100 #CJK UNIFIED IDEOGRAPH 0x8B57 0x5993 #CJK UNIFIED IDEOGRAPH 0x8B58 0x5B9C #CJK UNIFIED IDEOGRAPH 0x8B59 0x622F #CJK UNIFIED IDEOGRAPH 0x8B5A 0x6280 #CJK UNIFIED IDEOGRAPH 0x8B5B 0x64EC #CJK UNIFIED IDEOGRAPH 0x8B5C 0x6B3A #CJK UNIFIED IDEOGRAPH 0x8B5D 0x72A0 #CJK UNIFIED IDEOGRAPH 0x8B5E 0x7591 #CJK UNIFIED IDEOGRAPH 0x8B5F 0x7947 #CJK UNIFIED IDEOGRAPH 0x8B60 0x7FA9 #CJK UNIFIED IDEOGRAPH 0x8B61 0x87FB #CJK UNIFIED IDEOGRAPH 0x8B62 0x8ABC #CJK UNIFIED IDEOGRAPH 0x8B63 0x8B70 #CJK UNIFIED IDEOGRAPH 0x8B64 0x63AC #CJK UNIFIED IDEOGRAPH 0x8B65 0x83CA #CJK UNIFIED IDEOGRAPH 0x8B66 0x97A0 #CJK UNIFIED IDEOGRAPH 0x8B67 0x5409 #CJK UNIFIED IDEOGRAPH 0x8B68 0x5403 #CJK UNIFIED IDEOGRAPH 0x8B69 0x55AB #CJK UNIFIED IDEOGRAPH 0x8B6A 0x6854 #CJK UNIFIED IDEOGRAPH 0x8B6B 0x6A58 #CJK UNIFIED IDEOGRAPH 0x8B6C 0x8A70 #CJK UNIFIED IDEOGRAPH 0x8B6D 0x7827 #CJK UNIFIED IDEOGRAPH 0x8B6E 0x6775 #CJK UNIFIED IDEOGRAPH 0x8B6F 0x9ECD #CJK UNIFIED IDEOGRAPH 0x8B70 0x5374 #CJK UNIFIED IDEOGRAPH 0x8B71 0x5BA2 #CJK UNIFIED IDEOGRAPH 0x8B72 0x811A #CJK UNIFIED IDEOGRAPH 0x8B73 0x8650 #CJK UNIFIED IDEOGRAPH 0x8B74 0x9006 #CJK UNIFIED IDEOGRAPH 0x8B75 0x4E18 #CJK UNIFIED IDEOGRAPH 0x8B76 0x4E45 #CJK UNIFIED IDEOGRAPH 0x8B77 0x4EC7 #CJK UNIFIED IDEOGRAPH 0x8B78 0x4F11 #CJK UNIFIED IDEOGRAPH 0x8B79 0x53CA #CJK UNIFIED IDEOGRAPH 0x8B7A 0x5438 #CJK UNIFIED IDEOGRAPH 0x8B7B 0x5BAE #CJK UNIFIED IDEOGRAPH 0x8B7C 0x5F13 #CJK UNIFIED IDEOGRAPH 0x8B7D 0x6025 #CJK UNIFIED IDEOGRAPH 0x8B7E 0x6551 #CJK UNIFIED IDEOGRAPH 0x8B80 0x673D #CJK UNIFIED IDEOGRAPH 0x8B81 0x6C42 #CJK UNIFIED IDEOGRAPH 0x8B82 0x6C72 #CJK UNIFIED IDEOGRAPH 0x8B83 0x6CE3 #CJK UNIFIED IDEOGRAPH 0x8B84 0x7078 #CJK UNIFIED IDEOGRAPH 0x8B85 0x7403 #CJK UNIFIED IDEOGRAPH 0x8B86 0x7A76 #CJK UNIFIED IDEOGRAPH 0x8B87 0x7AAE #CJK UNIFIED IDEOGRAPH 0x8B88 0x7B08 #CJK UNIFIED IDEOGRAPH 0x8B89 0x7D1A #CJK UNIFIED IDEOGRAPH 0x8B8A 0x7CFE #CJK UNIFIED IDEOGRAPH 0x8B8B 0x7D66 #CJK UNIFIED IDEOGRAPH 0x8B8C 0x65E7 #CJK UNIFIED IDEOGRAPH 0x8B8D 0x725B #CJK UNIFIED IDEOGRAPH 0x8B8E 0x53BB #CJK UNIFIED IDEOGRAPH 0x8B8F 0x5C45 #CJK UNIFIED IDEOGRAPH 0x8B90 0x5DE8 #CJK UNIFIED IDEOGRAPH 0x8B91 0x62D2 #CJK UNIFIED IDEOGRAPH 0x8B92 0x62E0 #CJK UNIFIED IDEOGRAPH 0x8B93 0x6319 #CJK UNIFIED IDEOGRAPH 0x8B94 0x6E20 #CJK UNIFIED IDEOGRAPH 0x8B95 0x865A #CJK UNIFIED IDEOGRAPH 0x8B96 0x8A31 #CJK UNIFIED IDEOGRAPH 0x8B97 0x8DDD #CJK UNIFIED IDEOGRAPH 0x8B98 0x92F8 #CJK UNIFIED IDEOGRAPH 0x8B99 0x6F01 #CJK UNIFIED IDEOGRAPH 0x8B9A 0x79A6 #CJK UNIFIED IDEOGRAPH 0x8B9B 0x9B5A #CJK UNIFIED IDEOGRAPH 0x8B9C 0x4EA8 #CJK UNIFIED IDEOGRAPH 0x8B9D 0x4EAB #CJK UNIFIED IDEOGRAPH 0x8B9E 0x4EAC #CJK UNIFIED IDEOGRAPH 0x8B9F 0x4F9B #CJK UNIFIED IDEOGRAPH 0x8BA0 0x4FA0 #CJK UNIFIED IDEOGRAPH 0x8BA1 0x50D1 #CJK UNIFIED IDEOGRAPH 0x8BA2 0x5147 #CJK UNIFIED IDEOGRAPH 0x8BA3 0x7AF6 #CJK UNIFIED IDEOGRAPH 0x8BA4 0x5171 #CJK UNIFIED IDEOGRAPH 0x8BA5 0x51F6 #CJK UNIFIED IDEOGRAPH 0x8BA6 0x5354 #CJK UNIFIED IDEOGRAPH 0x8BA7 0x5321 #CJK UNIFIED IDEOGRAPH 0x8BA8 0x537F #CJK UNIFIED IDEOGRAPH 0x8BA9 0x53EB #CJK UNIFIED IDEOGRAPH 0x8BAA 0x55AC #CJK UNIFIED IDEOGRAPH 0x8BAB 0x5883 #CJK UNIFIED IDEOGRAPH 0x8BAC 0x5CE1 #CJK UNIFIED IDEOGRAPH 0x8BAD 0x5F37 #CJK UNIFIED IDEOGRAPH 0x8BAE 0x5F4A #CJK UNIFIED IDEOGRAPH 0x8BAF 0x602F #CJK UNIFIED IDEOGRAPH 0x8BB0 0x6050 #CJK UNIFIED IDEOGRAPH 0x8BB1 0x606D #CJK UNIFIED IDEOGRAPH 0x8BB2 0x631F #CJK UNIFIED IDEOGRAPH 0x8BB3 0x6559 #CJK UNIFIED IDEOGRAPH 0x8BB4 0x6A4B #CJK UNIFIED IDEOGRAPH 0x8BB5 0x6CC1 #CJK UNIFIED IDEOGRAPH 0x8BB6 0x72C2 #CJK UNIFIED IDEOGRAPH 0x8BB7 0x72ED #CJK UNIFIED IDEOGRAPH 0x8BB8 0x77EF #CJK UNIFIED IDEOGRAPH 0x8BB9 0x80F8 #CJK UNIFIED IDEOGRAPH 0x8BBA 0x8105 #CJK UNIFIED IDEOGRAPH 0x8BBB 0x8208 #CJK UNIFIED IDEOGRAPH 0x8BBC 0x854E #CJK UNIFIED IDEOGRAPH 0x8BBD 0x90F7 #CJK UNIFIED IDEOGRAPH 0x8BBE 0x93E1 #CJK UNIFIED IDEOGRAPH 0x8BBF 0x97FF #CJK UNIFIED IDEOGRAPH 0x8BC0 0x9957 #CJK UNIFIED IDEOGRAPH 0x8BC1 0x9A5A #CJK UNIFIED IDEOGRAPH 0x8BC2 0x4EF0 #CJK UNIFIED IDEOGRAPH 0x8BC3 0x51DD #CJK UNIFIED IDEOGRAPH 0x8BC4 0x5C2D #CJK UNIFIED IDEOGRAPH 0x8BC5 0x6681 #CJK UNIFIED IDEOGRAPH 0x8BC6 0x696D #CJK UNIFIED IDEOGRAPH 0x8BC7 0x5C40 #CJK UNIFIED IDEOGRAPH 0x8BC8 0x66F2 #CJK UNIFIED IDEOGRAPH 0x8BC9 0x6975 #CJK UNIFIED IDEOGRAPH 0x8BCA 0x7389 #CJK UNIFIED IDEOGRAPH 0x8BCB 0x6850 #CJK UNIFIED IDEOGRAPH 0x8BCC 0x7C81 #CJK UNIFIED IDEOGRAPH 0x8BCD 0x50C5 #CJK UNIFIED IDEOGRAPH 0x8BCE 0x52E4 #CJK UNIFIED IDEOGRAPH 0x8BCF 0x5747 #CJK UNIFIED IDEOGRAPH 0x8BD0 0x5DFE #CJK UNIFIED IDEOGRAPH 0x8BD1 0x9326 #CJK UNIFIED IDEOGRAPH 0x8BD2 0x65A4 #CJK UNIFIED IDEOGRAPH 0x8BD3 0x6B23 #CJK UNIFIED IDEOGRAPH 0x8BD4 0x6B3D #CJK UNIFIED IDEOGRAPH 0x8BD5 0x7434 #CJK UNIFIED IDEOGRAPH 0x8BD6 0x7981 #CJK UNIFIED IDEOGRAPH 0x8BD7 0x79BD #CJK UNIFIED IDEOGRAPH 0x8BD8 0x7B4B #CJK UNIFIED IDEOGRAPH 0x8BD9 0x7DCA #CJK UNIFIED IDEOGRAPH 0x8BDA 0x82B9 #CJK UNIFIED IDEOGRAPH 0x8BDB 0x83CC #CJK UNIFIED IDEOGRAPH 0x8BDC 0x887F #CJK UNIFIED IDEOGRAPH 0x8BDD 0x895F #CJK UNIFIED IDEOGRAPH 0x8BDE 0x8B39 #CJK UNIFIED IDEOGRAPH 0x8BDF 0x8FD1 #CJK UNIFIED IDEOGRAPH 0x8BE0 0x91D1 #CJK UNIFIED IDEOGRAPH 0x8BE1 0x541F #CJK UNIFIED IDEOGRAPH 0x8BE2 0x9280 #CJK UNIFIED IDEOGRAPH 0x8BE3 0x4E5D #CJK UNIFIED IDEOGRAPH 0x8BE4 0x5036 #CJK UNIFIED IDEOGRAPH 0x8BE5 0x53E5 #CJK UNIFIED IDEOGRAPH 0x8BE6 0x533A #CJK UNIFIED IDEOGRAPH 0x8BE7 0x72D7 #CJK UNIFIED IDEOGRAPH 0x8BE8 0x7396 #CJK UNIFIED IDEOGRAPH 0x8BE9 0x77E9 #CJK UNIFIED IDEOGRAPH 0x8BEA 0x82E6 #CJK UNIFIED IDEOGRAPH 0x8BEB 0x8EAF #CJK UNIFIED IDEOGRAPH 0x8BEC 0x99C6 #CJK UNIFIED IDEOGRAPH 0x8BED 0x99C8 #CJK UNIFIED IDEOGRAPH 0x8BEE 0x99D2 #CJK UNIFIED IDEOGRAPH 0x8BEF 0x5177 #CJK UNIFIED IDEOGRAPH 0x8BF0 0x611A #CJK UNIFIED IDEOGRAPH 0x8BF1 0x865E #CJK UNIFIED IDEOGRAPH 0x8BF2 0x55B0 #CJK UNIFIED IDEOGRAPH 0x8BF3 0x7A7A #CJK UNIFIED IDEOGRAPH 0x8BF4 0x5076 #CJK UNIFIED IDEOGRAPH 0x8BF5 0x5BD3 #CJK UNIFIED IDEOGRAPH 0x8BF6 0x9047 #CJK UNIFIED IDEOGRAPH 0x8BF7 0x9685 #CJK UNIFIED IDEOGRAPH 0x8BF8 0x4E32 #CJK UNIFIED IDEOGRAPH 0x8BF9 0x6ADB #CJK UNIFIED IDEOGRAPH 0x8BFA 0x91E7 #CJK UNIFIED IDEOGRAPH 0x8BFB 0x5C51 #CJK UNIFIED IDEOGRAPH 0x8BFC 0x5C48 #CJK UNIFIED IDEOGRAPH 0x8C40 0x6398 #CJK UNIFIED IDEOGRAPH 0x8C41 0x7A9F #CJK UNIFIED IDEOGRAPH 0x8C42 0x6C93 #CJK UNIFIED IDEOGRAPH 0x8C43 0x9774 #CJK UNIFIED IDEOGRAPH 0x8C44 0x8F61 #CJK UNIFIED IDEOGRAPH 0x8C45 0x7AAA #CJK UNIFIED IDEOGRAPH 0x8C46 0x718A #CJK UNIFIED IDEOGRAPH 0x8C47 0x9688 #CJK UNIFIED IDEOGRAPH 0x8C48 0x7C82 #CJK UNIFIED IDEOGRAPH 0x8C49 0x6817 #CJK UNIFIED IDEOGRAPH 0x8C4A 0x7E70 #CJK UNIFIED IDEOGRAPH 0x8C4B 0x6851 #CJK UNIFIED IDEOGRAPH 0x8C4C 0x936C #CJK UNIFIED IDEOGRAPH 0x8C4D 0x52F2 #CJK UNIFIED IDEOGRAPH 0x8C4E 0x541B #CJK UNIFIED IDEOGRAPH 0x8C4F 0x85AB #CJK UNIFIED IDEOGRAPH 0x8C50 0x8A13 #CJK UNIFIED IDEOGRAPH 0x8C51 0x7FA4 #CJK UNIFIED IDEOGRAPH 0x8C52 0x8ECD #CJK UNIFIED IDEOGRAPH 0x8C53 0x90E1 #CJK UNIFIED IDEOGRAPH 0x8C54 0x5366 #CJK UNIFIED IDEOGRAPH 0x8C55 0x8888 #CJK UNIFIED IDEOGRAPH 0x8C56 0x7941 #CJK UNIFIED IDEOGRAPH 0x8C57 0x4FC2 #CJK UNIFIED IDEOGRAPH 0x8C58 0x50BE #CJK UNIFIED IDEOGRAPH 0x8C59 0x5211 #CJK UNIFIED IDEOGRAPH 0x8C5A 0x5144 #CJK UNIFIED IDEOGRAPH 0x8C5B 0x5553 #CJK UNIFIED IDEOGRAPH 0x8C5C 0x572D #CJK UNIFIED IDEOGRAPH 0x8C5D 0x73EA #CJK UNIFIED IDEOGRAPH 0x8C5E 0x578B #CJK UNIFIED IDEOGRAPH 0x8C5F 0x5951 #CJK UNIFIED IDEOGRAPH 0x8C60 0x5F62 #CJK UNIFIED IDEOGRAPH 0x8C61 0x5F84 #CJK UNIFIED IDEOGRAPH 0x8C62 0x6075 #CJK UNIFIED IDEOGRAPH 0x8C63 0x6176 #CJK UNIFIED IDEOGRAPH 0x8C64 0x6167 #CJK UNIFIED IDEOGRAPH 0x8C65 0x61A9 #CJK UNIFIED IDEOGRAPH 0x8C66 0x63B2 #CJK UNIFIED IDEOGRAPH 0x8C67 0x643A #CJK UNIFIED IDEOGRAPH 0x8C68 0x656C #CJK UNIFIED IDEOGRAPH 0x8C69 0x666F #CJK UNIFIED IDEOGRAPH 0x8C6A 0x6842 #CJK UNIFIED IDEOGRAPH 0x8C6B 0x6E13 #CJK UNIFIED IDEOGRAPH 0x8C6C 0x7566 #CJK UNIFIED IDEOGRAPH 0x8C6D 0x7A3D #CJK UNIFIED IDEOGRAPH 0x8C6E 0x7CFB #CJK UNIFIED IDEOGRAPH 0x8C6F 0x7D4C #CJK UNIFIED IDEOGRAPH 0x8C70 0x7D99 #CJK UNIFIED IDEOGRAPH 0x8C71 0x7E4B #CJK UNIFIED IDEOGRAPH 0x8C72 0x7F6B #CJK UNIFIED IDEOGRAPH 0x8C73 0x830E #CJK UNIFIED IDEOGRAPH 0x8C74 0x834A #CJK UNIFIED IDEOGRAPH 0x8C75 0x86CD #CJK UNIFIED IDEOGRAPH 0x8C76 0x8A08 #CJK UNIFIED IDEOGRAPH 0x8C77 0x8A63 #CJK UNIFIED IDEOGRAPH 0x8C78 0x8B66 #CJK UNIFIED IDEOGRAPH 0x8C79 0x8EFD #CJK UNIFIED IDEOGRAPH 0x8C7A 0x981A #CJK UNIFIED IDEOGRAPH 0x8C7B 0x9D8F #CJK UNIFIED IDEOGRAPH 0x8C7C 0x82B8 #CJK UNIFIED IDEOGRAPH 0x8C7D 0x8FCE #CJK UNIFIED IDEOGRAPH 0x8C7E 0x9BE8 #CJK UNIFIED IDEOGRAPH 0x8C80 0x5287 #CJK UNIFIED IDEOGRAPH 0x8C81 0x621F #CJK UNIFIED IDEOGRAPH 0x8C82 0x6483 #CJK UNIFIED IDEOGRAPH 0x8C83 0x6FC0 #CJK UNIFIED IDEOGRAPH 0x8C84 0x9699 #CJK UNIFIED IDEOGRAPH 0x8C85 0x6841 #CJK UNIFIED IDEOGRAPH 0x8C86 0x5091 #CJK UNIFIED IDEOGRAPH 0x8C87 0x6B20 #CJK UNIFIED IDEOGRAPH 0x8C88 0x6C7A #CJK UNIFIED IDEOGRAPH 0x8C89 0x6F54 #CJK UNIFIED IDEOGRAPH 0x8C8A 0x7A74 #CJK UNIFIED IDEOGRAPH 0x8C8B 0x7D50 #CJK UNIFIED IDEOGRAPH 0x8C8C 0x8840 #CJK UNIFIED IDEOGRAPH 0x8C8D 0x8A23 #CJK UNIFIED IDEOGRAPH 0x8C8E 0x6708 #CJK UNIFIED IDEOGRAPH 0x8C8F 0x4EF6 #CJK UNIFIED IDEOGRAPH 0x8C90 0x5039 #CJK UNIFIED IDEOGRAPH 0x8C91 0x5026 #CJK UNIFIED IDEOGRAPH 0x8C92 0x5065 #CJK UNIFIED IDEOGRAPH 0x8C93 0x517C #CJK UNIFIED IDEOGRAPH 0x8C94 0x5238 #CJK UNIFIED IDEOGRAPH 0x8C95 0x5263 #CJK UNIFIED IDEOGRAPH 0x8C96 0x55A7 #CJK UNIFIED IDEOGRAPH 0x8C97 0x570F #CJK UNIFIED IDEOGRAPH 0x8C98 0x5805 #CJK UNIFIED IDEOGRAPH 0x8C99 0x5ACC #CJK UNIFIED IDEOGRAPH 0x8C9A 0x5EFA #CJK UNIFIED IDEOGRAPH 0x8C9B 0x61B2 #CJK UNIFIED IDEOGRAPH 0x8C9C 0x61F8 #CJK UNIFIED IDEOGRAPH 0x8C9D 0x62F3 #CJK UNIFIED IDEOGRAPH 0x8C9E 0x6372 #CJK UNIFIED IDEOGRAPH 0x8C9F 0x691C #CJK UNIFIED IDEOGRAPH 0x8CA0 0x6A29 #CJK UNIFIED IDEOGRAPH 0x8CA1 0x727D #CJK UNIFIED IDEOGRAPH 0x8CA2 0x72AC #CJK UNIFIED IDEOGRAPH 0x8CA3 0x732E #CJK UNIFIED IDEOGRAPH 0x8CA4 0x7814 #CJK UNIFIED IDEOGRAPH 0x8CA5 0x786F #CJK UNIFIED IDEOGRAPH 0x8CA6 0x7D79 #CJK UNIFIED IDEOGRAPH 0x8CA7 0x770C #CJK UNIFIED IDEOGRAPH 0x8CA8 0x80A9 #CJK UNIFIED IDEOGRAPH 0x8CA9 0x898B #CJK UNIFIED IDEOGRAPH 0x8CAA 0x8B19 #CJK UNIFIED IDEOGRAPH 0x8CAB 0x8CE2 #CJK UNIFIED IDEOGRAPH 0x8CAC 0x8ED2 #CJK UNIFIED IDEOGRAPH 0x8CAD 0x9063 #CJK UNIFIED IDEOGRAPH 0x8CAE 0x9375 #CJK UNIFIED IDEOGRAPH 0x8CAF 0x967A #CJK UNIFIED IDEOGRAPH 0x8CB0 0x9855 #CJK UNIFIED IDEOGRAPH 0x8CB1 0x9A13 #CJK UNIFIED IDEOGRAPH 0x8CB2 0x9E78 #CJK UNIFIED IDEOGRAPH 0x8CB3 0x5143 #CJK UNIFIED IDEOGRAPH 0x8CB4 0x539F #CJK UNIFIED IDEOGRAPH 0x8CB5 0x53B3 #CJK UNIFIED IDEOGRAPH 0x8CB6 0x5E7B #CJK UNIFIED IDEOGRAPH 0x8CB7 0x5F26 #CJK UNIFIED IDEOGRAPH 0x8CB8 0x6E1B #CJK UNIFIED IDEOGRAPH 0x8CB9 0x6E90 #CJK UNIFIED IDEOGRAPH 0x8CBA 0x7384 #CJK UNIFIED IDEOGRAPH 0x8CBB 0x73FE #CJK UNIFIED IDEOGRAPH 0x8CBC 0x7D43 #CJK UNIFIED IDEOGRAPH 0x8CBD 0x8237 #CJK UNIFIED IDEOGRAPH 0x8CBE 0x8A00 #CJK UNIFIED IDEOGRAPH 0x8CBF 0x8AFA #CJK UNIFIED IDEOGRAPH 0x8CC0 0x9650 #CJK UNIFIED IDEOGRAPH 0x8CC1 0x4E4E #CJK UNIFIED IDEOGRAPH 0x8CC2 0x500B #CJK UNIFIED IDEOGRAPH 0x8CC3 0x53E4 #CJK UNIFIED IDEOGRAPH 0x8CC4 0x547C #CJK UNIFIED IDEOGRAPH 0x8CC5 0x56FA #CJK UNIFIED IDEOGRAPH 0x8CC6 0x59D1 #CJK UNIFIED IDEOGRAPH 0x8CC7 0x5B64 #CJK UNIFIED IDEOGRAPH 0x8CC8 0x5DF1 #CJK UNIFIED IDEOGRAPH 0x8CC9 0x5EAB #CJK UNIFIED IDEOGRAPH 0x8CCA 0x5F27 #CJK UNIFIED IDEOGRAPH 0x8CCB 0x6238 #CJK UNIFIED IDEOGRAPH 0x8CCC 0x6545 #CJK UNIFIED IDEOGRAPH 0x8CCD 0x67AF #CJK UNIFIED IDEOGRAPH 0x8CCE 0x6E56 #CJK UNIFIED IDEOGRAPH 0x8CCF 0x72D0 #CJK UNIFIED IDEOGRAPH 0x8CD0 0x7CCA #CJK UNIFIED IDEOGRAPH 0x8CD1 0x88B4 #CJK UNIFIED IDEOGRAPH 0x8CD2 0x80A1 #CJK UNIFIED IDEOGRAPH 0x8CD3 0x80E1 #CJK UNIFIED IDEOGRAPH 0x8CD4 0x83F0 #CJK UNIFIED IDEOGRAPH 0x8CD5 0x864E #CJK UNIFIED IDEOGRAPH 0x8CD6 0x8A87 #CJK UNIFIED IDEOGRAPH 0x8CD7 0x8DE8 #CJK UNIFIED IDEOGRAPH 0x8CD8 0x9237 #CJK UNIFIED IDEOGRAPH 0x8CD9 0x96C7 #CJK UNIFIED IDEOGRAPH 0x8CDA 0x9867 #CJK UNIFIED IDEOGRAPH 0x8CDB 0x9F13 #CJK UNIFIED IDEOGRAPH 0x8CDC 0x4E94 #CJK UNIFIED IDEOGRAPH 0x8CDD 0x4E92 #CJK UNIFIED IDEOGRAPH 0x8CDE 0x4F0D #CJK UNIFIED IDEOGRAPH 0x8CDF 0x5348 #CJK UNIFIED IDEOGRAPH 0x8CE0 0x5449 #CJK UNIFIED IDEOGRAPH 0x8CE1 0x543E #CJK UNIFIED IDEOGRAPH 0x8CE2 0x5A2F #CJK UNIFIED IDEOGRAPH 0x8CE3 0x5F8C #CJK UNIFIED IDEOGRAPH 0x8CE4 0x5FA1 #CJK UNIFIED IDEOGRAPH 0x8CE5 0x609F #CJK UNIFIED IDEOGRAPH 0x8CE6 0x68A7 #CJK UNIFIED IDEOGRAPH 0x8CE7 0x6A8E #CJK UNIFIED IDEOGRAPH 0x8CE8 0x745A #CJK UNIFIED IDEOGRAPH 0x8CE9 0x7881 #CJK UNIFIED IDEOGRAPH 0x8CEA 0x8A9E #CJK UNIFIED IDEOGRAPH 0x8CEB 0x8AA4 #CJK UNIFIED IDEOGRAPH 0x8CEC 0x8B77 #CJK UNIFIED IDEOGRAPH 0x8CED 0x9190 #CJK UNIFIED IDEOGRAPH 0x8CEE 0x4E5E #CJK UNIFIED IDEOGRAPH 0x8CEF 0x9BC9 #CJK UNIFIED IDEOGRAPH 0x8CF0 0x4EA4 #CJK UNIFIED IDEOGRAPH 0x8CF1 0x4F7C #CJK UNIFIED IDEOGRAPH 0x8CF2 0x4FAF #CJK UNIFIED IDEOGRAPH 0x8CF3 0x5019 #CJK UNIFIED IDEOGRAPH 0x8CF4 0x5016 #CJK UNIFIED IDEOGRAPH 0x8CF5 0x5149 #CJK UNIFIED IDEOGRAPH 0x8CF6 0x516C #CJK UNIFIED IDEOGRAPH 0x8CF7 0x529F #CJK UNIFIED IDEOGRAPH 0x8CF8 0x52B9 #CJK UNIFIED IDEOGRAPH 0x8CF9 0x52FE #CJK UNIFIED IDEOGRAPH 0x8CFA 0x539A #CJK UNIFIED IDEOGRAPH 0x8CFB 0x53E3 #CJK UNIFIED IDEOGRAPH 0x8CFC 0x5411 #CJK UNIFIED IDEOGRAPH 0x8D40 0x540E #CJK UNIFIED IDEOGRAPH 0x8D41 0x5589 #CJK UNIFIED IDEOGRAPH 0x8D42 0x5751 #CJK UNIFIED IDEOGRAPH 0x8D43 0x57A2 #CJK UNIFIED IDEOGRAPH 0x8D44 0x597D #CJK UNIFIED IDEOGRAPH 0x8D45 0x5B54 #CJK UNIFIED IDEOGRAPH 0x8D46 0x5B5D #CJK UNIFIED IDEOGRAPH 0x8D47 0x5B8F #CJK UNIFIED IDEOGRAPH 0x8D48 0x5DE5 #CJK UNIFIED IDEOGRAPH 0x8D49 0x5DE7 #CJK UNIFIED IDEOGRAPH 0x8D4A 0x5DF7 #CJK UNIFIED IDEOGRAPH 0x8D4B 0x5E78 #CJK UNIFIED IDEOGRAPH 0x8D4C 0x5E83 #CJK UNIFIED IDEOGRAPH 0x8D4D 0x5E9A #CJK UNIFIED IDEOGRAPH 0x8D4E 0x5EB7 #CJK UNIFIED IDEOGRAPH 0x8D4F 0x5F18 #CJK UNIFIED IDEOGRAPH 0x8D50 0x6052 #CJK UNIFIED IDEOGRAPH 0x8D51 0x614C #CJK UNIFIED IDEOGRAPH 0x8D52 0x6297 #CJK UNIFIED IDEOGRAPH 0x8D53 0x62D8 #CJK UNIFIED IDEOGRAPH 0x8D54 0x63A7 #CJK UNIFIED IDEOGRAPH 0x8D55 0x653B #CJK UNIFIED IDEOGRAPH 0x8D56 0x6602 #CJK UNIFIED IDEOGRAPH 0x8D57 0x6643 #CJK UNIFIED IDEOGRAPH 0x8D58 0x66F4 #CJK UNIFIED IDEOGRAPH 0x8D59 0x676D #CJK UNIFIED IDEOGRAPH 0x8D5A 0x6821 #CJK UNIFIED IDEOGRAPH 0x8D5B 0x6897 #CJK UNIFIED IDEOGRAPH 0x8D5C 0x69CB #CJK UNIFIED IDEOGRAPH 0x8D5D 0x6C5F #CJK UNIFIED IDEOGRAPH 0x8D5E 0x6D2A #CJK UNIFIED IDEOGRAPH 0x8D5F 0x6D69 #CJK UNIFIED IDEOGRAPH 0x8D60 0x6E2F #CJK UNIFIED IDEOGRAPH 0x8D61 0x6E9D #CJK UNIFIED IDEOGRAPH 0x8D62 0x7532 #CJK UNIFIED IDEOGRAPH 0x8D63 0x7687 #CJK UNIFIED IDEOGRAPH 0x8D64 0x786C #CJK UNIFIED IDEOGRAPH 0x8D65 0x7A3F #CJK UNIFIED IDEOGRAPH 0x8D66 0x7CE0 #CJK UNIFIED IDEOGRAPH 0x8D67 0x7D05 #CJK UNIFIED IDEOGRAPH 0x8D68 0x7D18 #CJK UNIFIED IDEOGRAPH 0x8D69 0x7D5E #CJK UNIFIED IDEOGRAPH 0x8D6A 0x7DB1 #CJK UNIFIED IDEOGRAPH 0x8D6B 0x8015 #CJK UNIFIED IDEOGRAPH 0x8D6C 0x8003 #CJK UNIFIED IDEOGRAPH 0x8D6D 0x80AF #CJK UNIFIED IDEOGRAPH 0x8D6E 0x80B1 #CJK UNIFIED IDEOGRAPH 0x8D6F 0x8154 #CJK UNIFIED IDEOGRAPH 0x8D70 0x818F #CJK UNIFIED IDEOGRAPH 0x8D71 0x822A #CJK UNIFIED IDEOGRAPH 0x8D72 0x8352 #CJK UNIFIED IDEOGRAPH 0x8D73 0x884C #CJK UNIFIED IDEOGRAPH 0x8D74 0x8861 #CJK UNIFIED IDEOGRAPH 0x8D75 0x8B1B #CJK UNIFIED IDEOGRAPH 0x8D76 0x8CA2 #CJK UNIFIED IDEOGRAPH 0x8D77 0x8CFC #CJK UNIFIED IDEOGRAPH 0x8D78 0x90CA #CJK UNIFIED IDEOGRAPH 0x8D79 0x9175 #CJK UNIFIED IDEOGRAPH 0x8D7A 0x9271 #CJK UNIFIED IDEOGRAPH 0x8D7B 0x783F #CJK UNIFIED IDEOGRAPH 0x8D7C 0x92FC #CJK UNIFIED IDEOGRAPH 0x8D7D 0x95A4 #CJK UNIFIED IDEOGRAPH 0x8D7E 0x964D #CJK UNIFIED IDEOGRAPH 0x8D80 0x9805 #CJK UNIFIED IDEOGRAPH 0x8D81 0x9999 #CJK UNIFIED IDEOGRAPH 0x8D82 0x9AD8 #CJK UNIFIED IDEOGRAPH 0x8D83 0x9D3B #CJK UNIFIED IDEOGRAPH 0x8D84 0x525B #CJK UNIFIED IDEOGRAPH 0x8D85 0x52AB #CJK UNIFIED IDEOGRAPH 0x8D86 0x53F7 #CJK UNIFIED IDEOGRAPH 0x8D87 0x5408 #CJK UNIFIED IDEOGRAPH 0x8D88 0x58D5 #CJK UNIFIED IDEOGRAPH 0x8D89 0x62F7 #CJK UNIFIED IDEOGRAPH 0x8D8A 0x6FE0 #CJK UNIFIED IDEOGRAPH 0x8D8B 0x8C6A #CJK UNIFIED IDEOGRAPH 0x8D8C 0x8F5F #CJK UNIFIED IDEOGRAPH 0x8D8D 0x9EB9 #CJK UNIFIED IDEOGRAPH 0x8D8E 0x514B #CJK UNIFIED IDEOGRAPH 0x8D8F 0x523B #CJK UNIFIED IDEOGRAPH 0x8D90 0x544A #CJK UNIFIED IDEOGRAPH 0x8D91 0x56FD #CJK UNIFIED IDEOGRAPH 0x8D92 0x7A40 #CJK UNIFIED IDEOGRAPH 0x8D93 0x9177 #CJK UNIFIED IDEOGRAPH 0x8D94 0x9D60 #CJK UNIFIED IDEOGRAPH 0x8D95 0x9ED2 #CJK UNIFIED IDEOGRAPH 0x8D96 0x7344 #CJK UNIFIED IDEOGRAPH 0x8D97 0x6F09 #CJK UNIFIED IDEOGRAPH 0x8D98 0x8170 #CJK UNIFIED IDEOGRAPH 0x8D99 0x7511 #CJK UNIFIED IDEOGRAPH 0x8D9A 0x5FFD #CJK UNIFIED IDEOGRAPH 0x8D9B 0x60DA #CJK UNIFIED IDEOGRAPH 0x8D9C 0x9AA8 #CJK UNIFIED IDEOGRAPH 0x8D9D 0x72DB #CJK UNIFIED IDEOGRAPH 0x8D9E 0x8FBC #CJK UNIFIED IDEOGRAPH 0x8D9F 0x6B64 #CJK UNIFIED IDEOGRAPH 0x8DA0 0x9803 #CJK UNIFIED IDEOGRAPH 0x8DA1 0x4ECA #CJK UNIFIED IDEOGRAPH 0x8DA2 0x56F0 #CJK UNIFIED IDEOGRAPH 0x8DA3 0x5764 #CJK UNIFIED IDEOGRAPH 0x8DA4 0x58BE #CJK UNIFIED IDEOGRAPH 0x8DA5 0x5A5A #CJK UNIFIED IDEOGRAPH 0x8DA6 0x6068 #CJK UNIFIED IDEOGRAPH 0x8DA7 0x61C7 #CJK UNIFIED IDEOGRAPH 0x8DA8 0x660F #CJK UNIFIED IDEOGRAPH 0x8DA9 0x6606 #CJK UNIFIED IDEOGRAPH 0x8DAA 0x6839 #CJK UNIFIED IDEOGRAPH 0x8DAB 0x68B1 #CJK UNIFIED IDEOGRAPH 0x8DAC 0x6DF7 #CJK UNIFIED IDEOGRAPH 0x8DAD 0x75D5 #CJK UNIFIED IDEOGRAPH 0x8DAE 0x7D3A #CJK UNIFIED IDEOGRAPH 0x8DAF 0x826E #CJK UNIFIED IDEOGRAPH 0x8DB0 0x9B42 #CJK UNIFIED IDEOGRAPH 0x8DB1 0x4E9B #CJK UNIFIED IDEOGRAPH 0x8DB2 0x4F50 #CJK UNIFIED IDEOGRAPH 0x8DB3 0x53C9 #CJK UNIFIED IDEOGRAPH 0x8DB4 0x5506 #CJK UNIFIED IDEOGRAPH 0x8DB5 0x5D6F #CJK UNIFIED IDEOGRAPH 0x8DB6 0x5DE6 #CJK UNIFIED IDEOGRAPH 0x8DB7 0x5DEE #CJK UNIFIED IDEOGRAPH 0x8DB8 0x67FB #CJK UNIFIED IDEOGRAPH 0x8DB9 0x6C99 #CJK UNIFIED IDEOGRAPH 0x8DBA 0x7473 #CJK UNIFIED IDEOGRAPH 0x8DBB 0x7802 #CJK UNIFIED IDEOGRAPH 0x8DBC 0x8A50 #CJK UNIFIED IDEOGRAPH 0x8DBD 0x9396 #CJK UNIFIED IDEOGRAPH 0x8DBE 0x88DF #CJK UNIFIED IDEOGRAPH 0x8DBF 0x5750 #CJK UNIFIED IDEOGRAPH 0x8DC0 0x5EA7 #CJK UNIFIED IDEOGRAPH 0x8DC1 0x632B #CJK UNIFIED IDEOGRAPH 0x8DC2 0x50B5 #CJK UNIFIED IDEOGRAPH 0x8DC3 0x50AC #CJK UNIFIED IDEOGRAPH 0x8DC4 0x518D #CJK UNIFIED IDEOGRAPH 0x8DC5 0x6700 #CJK UNIFIED IDEOGRAPH 0x8DC6 0x54C9 #CJK UNIFIED IDEOGRAPH 0x8DC7 0x585E #CJK UNIFIED IDEOGRAPH 0x8DC8 0x59BB #CJK UNIFIED IDEOGRAPH 0x8DC9 0x5BB0 #CJK UNIFIED IDEOGRAPH 0x8DCA 0x5F69 #CJK UNIFIED IDEOGRAPH 0x8DCB 0x624D #CJK UNIFIED IDEOGRAPH 0x8DCC 0x63A1 #CJK UNIFIED IDEOGRAPH 0x8DCD 0x683D #CJK UNIFIED IDEOGRAPH 0x8DCE 0x6B73 #CJK UNIFIED IDEOGRAPH 0x8DCF 0x6E08 #CJK UNIFIED IDEOGRAPH 0x8DD0 0x707D #CJK UNIFIED IDEOGRAPH 0x8DD1 0x91C7 #CJK UNIFIED IDEOGRAPH 0x8DD2 0x7280 #CJK UNIFIED IDEOGRAPH 0x8DD3 0x7815 #CJK UNIFIED IDEOGRAPH 0x8DD4 0x7826 #CJK UNIFIED IDEOGRAPH 0x8DD5 0x796D #CJK UNIFIED IDEOGRAPH 0x8DD6 0x658E #CJK UNIFIED IDEOGRAPH 0x8DD7 0x7D30 #CJK UNIFIED IDEOGRAPH 0x8DD8 0x83DC #CJK UNIFIED IDEOGRAPH 0x8DD9 0x88C1 #CJK UNIFIED IDEOGRAPH 0x8DDA 0x8F09 #CJK UNIFIED IDEOGRAPH 0x8DDB 0x969B #CJK UNIFIED IDEOGRAPH 0x8DDC 0x5264 #CJK UNIFIED IDEOGRAPH 0x8DDD 0x5728 #CJK UNIFIED IDEOGRAPH 0x8DDE 0x6750 #CJK UNIFIED IDEOGRAPH 0x8DDF 0x7F6A #CJK UNIFIED IDEOGRAPH 0x8DE0 0x8CA1 #CJK UNIFIED IDEOGRAPH 0x8DE1 0x51B4 #CJK UNIFIED IDEOGRAPH 0x8DE2 0x5742 #CJK UNIFIED IDEOGRAPH 0x8DE3 0x962A #CJK UNIFIED IDEOGRAPH 0x8DE4 0x583A #CJK UNIFIED IDEOGRAPH 0x8DE5 0x698A #CJK UNIFIED IDEOGRAPH 0x8DE6 0x80B4 #CJK UNIFIED IDEOGRAPH 0x8DE7 0x54B2 #CJK UNIFIED IDEOGRAPH 0x8DE8 0x5D0E #CJK UNIFIED IDEOGRAPH 0x8DE9 0x57FC #CJK UNIFIED IDEOGRAPH 0x8DEA 0x7895 #CJK UNIFIED IDEOGRAPH 0x8DEB 0x9DFA #CJK UNIFIED IDEOGRAPH 0x8DEC 0x4F5C #CJK UNIFIED IDEOGRAPH 0x8DED 0x524A #CJK UNIFIED IDEOGRAPH 0x8DEE 0x548B #CJK UNIFIED IDEOGRAPH 0x8DEF 0x643E #CJK UNIFIED IDEOGRAPH 0x8DF0 0x6628 #CJK UNIFIED IDEOGRAPH 0x8DF1 0x6714 #CJK UNIFIED IDEOGRAPH 0x8DF2 0x67F5 #CJK UNIFIED IDEOGRAPH 0x8DF3 0x7A84 #CJK UNIFIED IDEOGRAPH 0x8DF4 0x7B56 #CJK UNIFIED IDEOGRAPH 0x8DF5 0x7D22 #CJK UNIFIED IDEOGRAPH 0x8DF6 0x932F #CJK UNIFIED IDEOGRAPH 0x8DF7 0x685C #CJK UNIFIED IDEOGRAPH 0x8DF8 0x9BAD #CJK UNIFIED IDEOGRAPH 0x8DF9 0x7B39 #CJK UNIFIED IDEOGRAPH 0x8DFA 0x5319 #CJK UNIFIED IDEOGRAPH 0x8DFB 0x518A #CJK UNIFIED IDEOGRAPH 0x8DFC 0x5237 #CJK UNIFIED IDEOGRAPH 0x8E40 0x5BDF #CJK UNIFIED IDEOGRAPH 0x8E41 0x62F6 #CJK UNIFIED IDEOGRAPH 0x8E42 0x64AE #CJK UNIFIED IDEOGRAPH 0x8E43 0x64E6 #CJK UNIFIED IDEOGRAPH 0x8E44 0x672D #CJK UNIFIED IDEOGRAPH 0x8E45 0x6BBA #CJK UNIFIED IDEOGRAPH 0x8E46 0x85A9 #CJK UNIFIED IDEOGRAPH 0x8E47 0x96D1 #CJK UNIFIED IDEOGRAPH 0x8E48 0x7690 #CJK UNIFIED IDEOGRAPH 0x8E49 0x9BD6 #CJK UNIFIED IDEOGRAPH 0x8E4A 0x634C #CJK UNIFIED IDEOGRAPH 0x8E4B 0x9306 #CJK UNIFIED IDEOGRAPH 0x8E4C 0x9BAB #CJK UNIFIED IDEOGRAPH 0x8E4D 0x76BF #CJK UNIFIED IDEOGRAPH 0x8E4E 0x6652 #CJK UNIFIED IDEOGRAPH 0x8E4F 0x4E09 #CJK UNIFIED IDEOGRAPH 0x8E50 0x5098 #CJK UNIFIED IDEOGRAPH 0x8E51 0x53C2 #CJK UNIFIED IDEOGRAPH 0x8E52 0x5C71 #CJK UNIFIED IDEOGRAPH 0x8E53 0x60E8 #CJK UNIFIED IDEOGRAPH 0x8E54 0x6492 #CJK UNIFIED IDEOGRAPH 0x8E55 0x6563 #CJK UNIFIED IDEOGRAPH 0x8E56 0x685F #CJK UNIFIED IDEOGRAPH 0x8E57 0x71E6 #CJK UNIFIED IDEOGRAPH 0x8E58 0x73CA #CJK UNIFIED IDEOGRAPH 0x8E59 0x7523 #CJK UNIFIED IDEOGRAPH 0x8E5A 0x7B97 #CJK UNIFIED IDEOGRAPH 0x8E5B 0x7E82 #CJK UNIFIED IDEOGRAPH 0x8E5C 0x8695 #CJK UNIFIED IDEOGRAPH 0x8E5D 0x8B83 #CJK UNIFIED IDEOGRAPH 0x8E5E 0x8CDB #CJK UNIFIED IDEOGRAPH 0x8E5F 0x9178 #CJK UNIFIED IDEOGRAPH 0x8E60 0x9910 #CJK UNIFIED IDEOGRAPH 0x8E61 0x65AC #CJK UNIFIED IDEOGRAPH 0x8E62 0x66AB #CJK UNIFIED IDEOGRAPH 0x8E63 0x6B8B #CJK UNIFIED IDEOGRAPH 0x8E64 0x4ED5 #CJK UNIFIED IDEOGRAPH 0x8E65 0x4ED4 #CJK UNIFIED IDEOGRAPH 0x8E66 0x4F3A #CJK UNIFIED IDEOGRAPH 0x8E67 0x4F7F #CJK UNIFIED IDEOGRAPH 0x8E68 0x523A #CJK UNIFIED IDEOGRAPH 0x8E69 0x53F8 #CJK UNIFIED IDEOGRAPH 0x8E6A 0x53F2 #CJK UNIFIED IDEOGRAPH 0x8E6B 0x55E3 #CJK UNIFIED IDEOGRAPH 0x8E6C 0x56DB #CJK UNIFIED IDEOGRAPH 0x8E6D 0x58EB #CJK UNIFIED IDEOGRAPH 0x8E6E 0x59CB #CJK UNIFIED IDEOGRAPH 0x8E6F 0x59C9 #CJK UNIFIED IDEOGRAPH 0x8E70 0x59FF #CJK UNIFIED IDEOGRAPH 0x8E71 0x5B50 #CJK UNIFIED IDEOGRAPH 0x8E72 0x5C4D #CJK UNIFIED IDEOGRAPH 0x8E73 0x5E02 #CJK UNIFIED IDEOGRAPH 0x8E74 0x5E2B #CJK UNIFIED IDEOGRAPH 0x8E75 0x5FD7 #CJK UNIFIED IDEOGRAPH 0x8E76 0x601D #CJK UNIFIED IDEOGRAPH 0x8E77 0x6307 #CJK UNIFIED IDEOGRAPH 0x8E78 0x652F #CJK UNIFIED IDEOGRAPH 0x8E79 0x5B5C #CJK UNIFIED IDEOGRAPH 0x8E7A 0x65AF #CJK UNIFIED IDEOGRAPH 0x8E7B 0x65BD #CJK UNIFIED IDEOGRAPH 0x8E7C 0x65E8 #CJK UNIFIED IDEOGRAPH 0x8E7D 0x679D #CJK UNIFIED IDEOGRAPH 0x8E7E 0x6B62 #CJK UNIFIED IDEOGRAPH 0x8E80 0x6B7B #CJK UNIFIED IDEOGRAPH 0x8E81 0x6C0F #CJK UNIFIED IDEOGRAPH 0x8E82 0x7345 #CJK UNIFIED IDEOGRAPH 0x8E83 0x7949 #CJK UNIFIED IDEOGRAPH 0x8E84 0x79C1 #CJK UNIFIED IDEOGRAPH 0x8E85 0x7CF8 #CJK UNIFIED IDEOGRAPH 0x8E86 0x7D19 #CJK UNIFIED IDEOGRAPH 0x8E87 0x7D2B #CJK UNIFIED IDEOGRAPH 0x8E88 0x80A2 #CJK UNIFIED IDEOGRAPH 0x8E89 0x8102 #CJK UNIFIED IDEOGRAPH 0x8E8A 0x81F3 #CJK UNIFIED IDEOGRAPH 0x8E8B 0x8996 #CJK UNIFIED IDEOGRAPH 0x8E8C 0x8A5E #CJK UNIFIED IDEOGRAPH 0x8E8D 0x8A69 #CJK UNIFIED IDEOGRAPH 0x8E8E 0x8A66 #CJK UNIFIED IDEOGRAPH 0x8E8F 0x8A8C #CJK UNIFIED IDEOGRAPH 0x8E90 0x8AEE #CJK UNIFIED IDEOGRAPH 0x8E91 0x8CC7 #CJK UNIFIED IDEOGRAPH 0x8E92 0x8CDC #CJK UNIFIED IDEOGRAPH 0x8E93 0x96CC #CJK UNIFIED IDEOGRAPH 0x8E94 0x98FC #CJK UNIFIED IDEOGRAPH 0x8E95 0x6B6F #CJK UNIFIED IDEOGRAPH 0x8E96 0x4E8B #CJK UNIFIED IDEOGRAPH 0x8E97 0x4F3C #CJK UNIFIED IDEOGRAPH 0x8E98 0x4F8D #CJK UNIFIED IDEOGRAPH 0x8E99 0x5150 #CJK UNIFIED IDEOGRAPH 0x8E9A 0x5B57 #CJK UNIFIED IDEOGRAPH 0x8E9B 0x5BFA #CJK UNIFIED IDEOGRAPH 0x8E9C 0x6148 #CJK UNIFIED IDEOGRAPH 0x8E9D 0x6301 #CJK UNIFIED IDEOGRAPH 0x8E9E 0x6642 #CJK UNIFIED IDEOGRAPH 0x8E9F 0x6B21 #CJK UNIFIED IDEOGRAPH 0x8EA0 0x6ECB #CJK UNIFIED IDEOGRAPH 0x8EA1 0x6CBB #CJK UNIFIED IDEOGRAPH 0x8EA2 0x723E #CJK UNIFIED IDEOGRAPH 0x8EA3 0x74BD #CJK UNIFIED IDEOGRAPH 0x8EA4 0x75D4 #CJK UNIFIED IDEOGRAPH 0x8EA5 0x78C1 #CJK UNIFIED IDEOGRAPH 0x8EA6 0x793A #CJK UNIFIED IDEOGRAPH 0x8EA7 0x800C #CJK UNIFIED IDEOGRAPH 0x8EA8 0x8033 #CJK UNIFIED IDEOGRAPH 0x8EA9 0x81EA #CJK UNIFIED IDEOGRAPH 0x8EAA 0x8494 #CJK UNIFIED IDEOGRAPH 0x8EAB 0x8F9E #CJK UNIFIED IDEOGRAPH 0x8EAC 0x6C50 #CJK UNIFIED IDEOGRAPH 0x8EAD 0x9E7F #CJK UNIFIED IDEOGRAPH 0x8EAE 0x5F0F #CJK UNIFIED IDEOGRAPH 0x8EAF 0x8B58 #CJK UNIFIED IDEOGRAPH 0x8EB0 0x9D2B #CJK UNIFIED IDEOGRAPH 0x8EB1 0x7AFA #CJK UNIFIED IDEOGRAPH 0x8EB2 0x8EF8 #CJK UNIFIED IDEOGRAPH 0x8EB3 0x5B8D #CJK UNIFIED IDEOGRAPH 0x8EB4 0x96EB #CJK UNIFIED IDEOGRAPH 0x8EB5 0x4E03 #CJK UNIFIED IDEOGRAPH 0x8EB6 0x53F1 #CJK UNIFIED IDEOGRAPH 0x8EB7 0x57F7 #CJK UNIFIED IDEOGRAPH 0x8EB8 0x5931 #CJK UNIFIED IDEOGRAPH 0x8EB9 0x5AC9 #CJK UNIFIED IDEOGRAPH 0x8EBA 0x5BA4 #CJK UNIFIED IDEOGRAPH 0x8EBB 0x6089 #CJK UNIFIED IDEOGRAPH 0x8EBC 0x6E7F #CJK UNIFIED IDEOGRAPH 0x8EBD 0x6F06 #CJK UNIFIED IDEOGRAPH 0x8EBE 0x75BE #CJK UNIFIED IDEOGRAPH 0x8EBF 0x8CEA #CJK UNIFIED IDEOGRAPH 0x8EC0 0x5B9F #CJK UNIFIED IDEOGRAPH 0x8EC1 0x8500 #CJK UNIFIED IDEOGRAPH 0x8EC2 0x7BE0 #CJK UNIFIED IDEOGRAPH 0x8EC3 0x5072 #CJK UNIFIED IDEOGRAPH 0x8EC4 0x67F4 #CJK UNIFIED IDEOGRAPH 0x8EC5 0x829D #CJK UNIFIED IDEOGRAPH 0x8EC6 0x5C61 #CJK UNIFIED IDEOGRAPH 0x8EC7 0x854A #CJK UNIFIED IDEOGRAPH 0x8EC8 0x7E1E #CJK UNIFIED IDEOGRAPH 0x8EC9 0x820E #CJK UNIFIED IDEOGRAPH 0x8ECA 0x5199 #CJK UNIFIED IDEOGRAPH 0x8ECB 0x5C04 #CJK UNIFIED IDEOGRAPH 0x8ECC 0x6368 #CJK UNIFIED IDEOGRAPH 0x8ECD 0x8D66 #CJK UNIFIED IDEOGRAPH 0x8ECE 0x659C #CJK UNIFIED IDEOGRAPH 0x8ECF 0x716E #CJK UNIFIED IDEOGRAPH 0x8ED0 0x793E #CJK UNIFIED IDEOGRAPH 0x8ED1 0x7D17 #CJK UNIFIED IDEOGRAPH 0x8ED2 0x8005 #CJK UNIFIED IDEOGRAPH 0x8ED3 0x8B1D #CJK UNIFIED IDEOGRAPH 0x8ED4 0x8ECA #CJK UNIFIED IDEOGRAPH 0x8ED5 0x906E #CJK UNIFIED IDEOGRAPH 0x8ED6 0x86C7 #CJK UNIFIED IDEOGRAPH 0x8ED7 0x90AA #CJK UNIFIED IDEOGRAPH 0x8ED8 0x501F #CJK UNIFIED IDEOGRAPH 0x8ED9 0x52FA #CJK UNIFIED IDEOGRAPH 0x8EDA 0x5C3A #CJK UNIFIED IDEOGRAPH 0x8EDB 0x6753 #CJK UNIFIED IDEOGRAPH 0x8EDC 0x707C #CJK UNIFIED IDEOGRAPH 0x8EDD 0x7235 #CJK UNIFIED IDEOGRAPH 0x8EDE 0x914C #CJK UNIFIED IDEOGRAPH 0x8EDF 0x91C8 #CJK UNIFIED IDEOGRAPH 0x8EE0 0x932B #CJK UNIFIED IDEOGRAPH 0x8EE1 0x82E5 #CJK UNIFIED IDEOGRAPH 0x8EE2 0x5BC2 #CJK UNIFIED IDEOGRAPH 0x8EE3 0x5F31 #CJK UNIFIED IDEOGRAPH 0x8EE4 0x60F9 #CJK UNIFIED IDEOGRAPH 0x8EE5 0x4E3B #CJK UNIFIED IDEOGRAPH 0x8EE6 0x53D6 #CJK UNIFIED IDEOGRAPH 0x8EE7 0x5B88 #CJK UNIFIED IDEOGRAPH 0x8EE8 0x624B #CJK UNIFIED IDEOGRAPH 0x8EE9 0x6731 #CJK UNIFIED IDEOGRAPH 0x8EEA 0x6B8A #CJK UNIFIED IDEOGRAPH 0x8EEB 0x72E9 #CJK UNIFIED IDEOGRAPH 0x8EEC 0x73E0 #CJK UNIFIED IDEOGRAPH 0x8EED 0x7A2E #CJK UNIFIED IDEOGRAPH 0x8EEE 0x816B #CJK UNIFIED IDEOGRAPH 0x8EEF 0x8DA3 #CJK UNIFIED IDEOGRAPH 0x8EF0 0x9152 #CJK UNIFIED IDEOGRAPH 0x8EF1 0x9996 #CJK UNIFIED IDEOGRAPH 0x8EF2 0x5112 #CJK UNIFIED IDEOGRAPH 0x8EF3 0x53D7 #CJK UNIFIED IDEOGRAPH 0x8EF4 0x546A #CJK UNIFIED IDEOGRAPH 0x8EF5 0x5BFF #CJK UNIFIED IDEOGRAPH 0x8EF6 0x6388 #CJK UNIFIED IDEOGRAPH 0x8EF7 0x6A39 #CJK UNIFIED IDEOGRAPH 0x8EF8 0x7DAC #CJK UNIFIED IDEOGRAPH 0x8EF9 0x9700 #CJK UNIFIED IDEOGRAPH 0x8EFA 0x56DA #CJK UNIFIED IDEOGRAPH 0x8EFB 0x53CE #CJK UNIFIED IDEOGRAPH 0x8EFC 0x5468 #CJK UNIFIED IDEOGRAPH 0x8F40 0x5B97 #CJK UNIFIED IDEOGRAPH 0x8F41 0x5C31 #CJK UNIFIED IDEOGRAPH 0x8F42 0x5DDE #CJK UNIFIED IDEOGRAPH 0x8F43 0x4FEE #CJK UNIFIED IDEOGRAPH 0x8F44 0x6101 #CJK UNIFIED IDEOGRAPH 0x8F45 0x62FE #CJK UNIFIED IDEOGRAPH 0x8F46 0x6D32 #CJK UNIFIED IDEOGRAPH 0x8F47 0x79C0 #CJK UNIFIED IDEOGRAPH 0x8F48 0x79CB #CJK UNIFIED IDEOGRAPH 0x8F49 0x7D42 #CJK UNIFIED IDEOGRAPH 0x8F4A 0x7E4D #CJK UNIFIED IDEOGRAPH 0x8F4B 0x7FD2 #CJK UNIFIED IDEOGRAPH 0x8F4C 0x81ED #CJK UNIFIED IDEOGRAPH 0x8F4D 0x821F #CJK UNIFIED IDEOGRAPH 0x8F4E 0x8490 #CJK UNIFIED IDEOGRAPH 0x8F4F 0x8846 #CJK UNIFIED IDEOGRAPH 0x8F50 0x8972 #CJK UNIFIED IDEOGRAPH 0x8F51 0x8B90 #CJK UNIFIED IDEOGRAPH 0x8F52 0x8E74 #CJK UNIFIED IDEOGRAPH 0x8F53 0x8F2F #CJK UNIFIED IDEOGRAPH 0x8F54 0x9031 #CJK UNIFIED IDEOGRAPH 0x8F55 0x914B #CJK UNIFIED IDEOGRAPH 0x8F56 0x916C #CJK UNIFIED IDEOGRAPH 0x8F57 0x96C6 #CJK UNIFIED IDEOGRAPH 0x8F58 0x919C #CJK UNIFIED IDEOGRAPH 0x8F59 0x4EC0 #CJK UNIFIED IDEOGRAPH 0x8F5A 0x4F4F #CJK UNIFIED IDEOGRAPH 0x8F5B 0x5145 #CJK UNIFIED IDEOGRAPH 0x8F5C 0x5341 #CJK UNIFIED IDEOGRAPH 0x8F5D 0x5F93 #CJK UNIFIED IDEOGRAPH 0x8F5E 0x620E #CJK UNIFIED IDEOGRAPH 0x8F5F 0x67D4 #CJK UNIFIED IDEOGRAPH 0x8F60 0x6C41 #CJK UNIFIED IDEOGRAPH 0x8F61 0x6E0B #CJK UNIFIED IDEOGRAPH 0x8F62 0x7363 #CJK UNIFIED IDEOGRAPH 0x8F63 0x7E26 #CJK UNIFIED IDEOGRAPH 0x8F64 0x91CD #CJK UNIFIED IDEOGRAPH 0x8F65 0x9283 #CJK UNIFIED IDEOGRAPH 0x8F66 0x53D4 #CJK UNIFIED IDEOGRAPH 0x8F67 0x5919 #CJK UNIFIED IDEOGRAPH 0x8F68 0x5BBF #CJK UNIFIED IDEOGRAPH 0x8F69 0x6DD1 #CJK UNIFIED IDEOGRAPH 0x8F6A 0x795D #CJK UNIFIED IDEOGRAPH 0x8F6B 0x7E2E #CJK UNIFIED IDEOGRAPH 0x8F6C 0x7C9B #CJK UNIFIED IDEOGRAPH 0x8F6D 0x587E #CJK UNIFIED IDEOGRAPH 0x8F6E 0x719F #CJK UNIFIED IDEOGRAPH 0x8F6F 0x51FA #CJK UNIFIED IDEOGRAPH 0x8F70 0x8853 #CJK UNIFIED IDEOGRAPH 0x8F71 0x8FF0 #CJK UNIFIED IDEOGRAPH 0x8F72 0x4FCA #CJK UNIFIED IDEOGRAPH 0x8F73 0x5CFB #CJK UNIFIED IDEOGRAPH 0x8F74 0x6625 #CJK UNIFIED IDEOGRAPH 0x8F75 0x77AC #CJK UNIFIED IDEOGRAPH 0x8F76 0x7AE3 #CJK UNIFIED IDEOGRAPH 0x8F77 0x821C #CJK UNIFIED IDEOGRAPH 0x8F78 0x99FF #CJK UNIFIED IDEOGRAPH 0x8F79 0x51C6 #CJK UNIFIED IDEOGRAPH 0x8F7A 0x5FAA #CJK UNIFIED IDEOGRAPH 0x8F7B 0x65EC #CJK UNIFIED IDEOGRAPH 0x8F7C 0x696F #CJK UNIFIED IDEOGRAPH 0x8F7D 0x6B89 #CJK UNIFIED IDEOGRAPH 0x8F7E 0x6DF3 #CJK UNIFIED IDEOGRAPH 0x8F80 0x6E96 #CJK UNIFIED IDEOGRAPH 0x8F81 0x6F64 #CJK UNIFIED IDEOGRAPH 0x8F82 0x76FE #CJK UNIFIED IDEOGRAPH 0x8F83 0x7D14 #CJK UNIFIED IDEOGRAPH 0x8F84 0x5DE1 #CJK UNIFIED IDEOGRAPH 0x8F85 0x9075 #CJK UNIFIED IDEOGRAPH 0x8F86 0x9187 #CJK UNIFIED IDEOGRAPH 0x8F87 0x9806 #CJK UNIFIED IDEOGRAPH 0x8F88 0x51E6 #CJK UNIFIED IDEOGRAPH 0x8F89 0x521D #CJK UNIFIED IDEOGRAPH 0x8F8A 0x6240 #CJK UNIFIED IDEOGRAPH 0x8F8B 0x6691 #CJK UNIFIED IDEOGRAPH 0x8F8C 0x66D9 #CJK UNIFIED IDEOGRAPH 0x8F8D 0x6E1A #CJK UNIFIED IDEOGRAPH 0x8F8E 0x5EB6 #CJK UNIFIED IDEOGRAPH 0x8F8F 0x7DD2 #CJK UNIFIED IDEOGRAPH 0x8F90 0x7F72 #CJK UNIFIED IDEOGRAPH 0x8F91 0x66F8 #CJK UNIFIED IDEOGRAPH 0x8F92 0x85AF #CJK UNIFIED IDEOGRAPH 0x8F93 0x85F7 #CJK UNIFIED IDEOGRAPH 0x8F94 0x8AF8 #CJK UNIFIED IDEOGRAPH 0x8F95 0x52A9 #CJK UNIFIED IDEOGRAPH 0x8F96 0x53D9 #CJK UNIFIED IDEOGRAPH 0x8F97 0x5973 #CJK UNIFIED IDEOGRAPH 0x8F98 0x5E8F #CJK UNIFIED IDEOGRAPH 0x8F99 0x5F90 #CJK UNIFIED IDEOGRAPH 0x8F9A 0x6055 #CJK UNIFIED IDEOGRAPH 0x8F9B 0x92E4 #CJK UNIFIED IDEOGRAPH 0x8F9C 0x9664 #CJK UNIFIED IDEOGRAPH 0x8F9D 0x50B7 #CJK UNIFIED IDEOGRAPH 0x8F9E 0x511F #CJK UNIFIED IDEOGRAPH 0x8F9F 0x52DD #CJK UNIFIED IDEOGRAPH 0x8FA0 0x5320 #CJK UNIFIED IDEOGRAPH 0x8FA1 0x5347 #CJK UNIFIED IDEOGRAPH 0x8FA2 0x53EC #CJK UNIFIED IDEOGRAPH 0x8FA3 0x54E8 #CJK UNIFIED IDEOGRAPH 0x8FA4 0x5546 #CJK UNIFIED IDEOGRAPH 0x8FA5 0x5531 #CJK UNIFIED IDEOGRAPH 0x8FA6 0x5617 #CJK UNIFIED IDEOGRAPH 0x8FA7 0x5968 #CJK UNIFIED IDEOGRAPH 0x8FA8 0x59BE #CJK UNIFIED IDEOGRAPH 0x8FA9 0x5A3C #CJK UNIFIED IDEOGRAPH 0x8FAA 0x5BB5 #CJK UNIFIED IDEOGRAPH 0x8FAB 0x5C06 #CJK UNIFIED IDEOGRAPH 0x8FAC 0x5C0F #CJK UNIFIED IDEOGRAPH 0x8FAD 0x5C11 #CJK UNIFIED IDEOGRAPH 0x8FAE 0x5C1A #CJK UNIFIED IDEOGRAPH 0x8FAF 0x5E84 #CJK UNIFIED IDEOGRAPH 0x8FB0 0x5E8A #CJK UNIFIED IDEOGRAPH 0x8FB1 0x5EE0 #CJK UNIFIED IDEOGRAPH 0x8FB2 0x5F70 #CJK UNIFIED IDEOGRAPH 0x8FB3 0x627F #CJK UNIFIED IDEOGRAPH 0x8FB4 0x6284 #CJK UNIFIED IDEOGRAPH 0x8FB5 0x62DB #CJK UNIFIED IDEOGRAPH 0x8FB6 0x638C #CJK UNIFIED IDEOGRAPH 0x8FB7 0x6377 #CJK UNIFIED IDEOGRAPH 0x8FB8 0x6607 #CJK UNIFIED IDEOGRAPH 0x8FB9 0x660C #CJK UNIFIED IDEOGRAPH 0x8FBA 0x662D #CJK UNIFIED IDEOGRAPH 0x8FBB 0x6676 #CJK UNIFIED IDEOGRAPH 0x8FBC 0x677E #CJK UNIFIED IDEOGRAPH 0x8FBD 0x68A2 #CJK UNIFIED IDEOGRAPH 0x8FBE 0x6A1F #CJK UNIFIED IDEOGRAPH 0x8FBF 0x6A35 #CJK UNIFIED IDEOGRAPH 0x8FC0 0x6CBC #CJK UNIFIED IDEOGRAPH 0x8FC1 0x6D88 #CJK UNIFIED IDEOGRAPH 0x8FC2 0x6E09 #CJK UNIFIED IDEOGRAPH 0x8FC3 0x6E58 #CJK UNIFIED IDEOGRAPH 0x8FC4 0x713C #CJK UNIFIED IDEOGRAPH 0x8FC5 0x7126 #CJK UNIFIED IDEOGRAPH 0x8FC6 0x7167 #CJK UNIFIED IDEOGRAPH 0x8FC7 0x75C7 #CJK UNIFIED IDEOGRAPH 0x8FC8 0x7701 #CJK UNIFIED IDEOGRAPH 0x8FC9 0x785D #CJK UNIFIED IDEOGRAPH 0x8FCA 0x7901 #CJK UNIFIED IDEOGRAPH 0x8FCB 0x7965 #CJK UNIFIED IDEOGRAPH 0x8FCC 0x79F0 #CJK UNIFIED IDEOGRAPH 0x8FCD 0x7AE0 #CJK UNIFIED IDEOGRAPH 0x8FCE 0x7B11 #CJK UNIFIED IDEOGRAPH 0x8FCF 0x7CA7 #CJK UNIFIED IDEOGRAPH 0x8FD0 0x7D39 #CJK UNIFIED IDEOGRAPH 0x8FD1 0x8096 #CJK UNIFIED IDEOGRAPH 0x8FD2 0x83D6 #CJK UNIFIED IDEOGRAPH 0x8FD3 0x848B #CJK UNIFIED IDEOGRAPH 0x8FD4 0x8549 #CJK UNIFIED IDEOGRAPH 0x8FD5 0x885D #CJK UNIFIED IDEOGRAPH 0x8FD6 0x88F3 #CJK UNIFIED IDEOGRAPH 0x8FD7 0x8A1F #CJK UNIFIED IDEOGRAPH 0x8FD8 0x8A3C #CJK UNIFIED IDEOGRAPH 0x8FD9 0x8A54 #CJK UNIFIED IDEOGRAPH 0x8FDA 0x8A73 #CJK UNIFIED IDEOGRAPH 0x8FDB 0x8C61 #CJK UNIFIED IDEOGRAPH 0x8FDC 0x8CDE #CJK UNIFIED IDEOGRAPH 0x8FDD 0x91A4 #CJK UNIFIED IDEOGRAPH 0x8FDE 0x9266 #CJK UNIFIED IDEOGRAPH 0x8FDF 0x937E #CJK UNIFIED IDEOGRAPH 0x8FE0 0x9418 #CJK UNIFIED IDEOGRAPH 0x8FE1 0x969C #CJK UNIFIED IDEOGRAPH 0x8FE2 0x9798 #CJK UNIFIED IDEOGRAPH 0x8FE3 0x4E0A #CJK UNIFIED IDEOGRAPH 0x8FE4 0x4E08 #CJK UNIFIED IDEOGRAPH 0x8FE5 0x4E1E #CJK UNIFIED IDEOGRAPH 0x8FE6 0x4E57 #CJK UNIFIED IDEOGRAPH 0x8FE7 0x5197 #CJK UNIFIED IDEOGRAPH 0x8FE8 0x5270 #CJK UNIFIED IDEOGRAPH 0x8FE9 0x57CE #CJK UNIFIED IDEOGRAPH 0x8FEA 0x5834 #CJK UNIFIED IDEOGRAPH 0x8FEB 0x58CC #CJK UNIFIED IDEOGRAPH 0x8FEC 0x5B22 #CJK UNIFIED IDEOGRAPH 0x8FED 0x5E38 #CJK UNIFIED IDEOGRAPH 0x8FEE 0x60C5 #CJK UNIFIED IDEOGRAPH 0x8FEF 0x64FE #CJK UNIFIED IDEOGRAPH 0x8FF0 0x6761 #CJK UNIFIED IDEOGRAPH 0x8FF1 0x6756 #CJK UNIFIED IDEOGRAPH 0x8FF2 0x6D44 #CJK UNIFIED IDEOGRAPH 0x8FF3 0x72B6 #CJK UNIFIED IDEOGRAPH 0x8FF4 0x7573 #CJK UNIFIED IDEOGRAPH 0x8FF5 0x7A63 #CJK UNIFIED IDEOGRAPH 0x8FF6 0x84B8 #CJK UNIFIED IDEOGRAPH 0x8FF7 0x8B72 #CJK UNIFIED IDEOGRAPH 0x8FF8 0x91B8 #CJK UNIFIED IDEOGRAPH 0x8FF9 0x9320 #CJK UNIFIED IDEOGRAPH 0x8FFA 0x5631 #CJK UNIFIED IDEOGRAPH 0x8FFB 0x57F4 #CJK UNIFIED IDEOGRAPH 0x8FFC 0x98FE #CJK UNIFIED IDEOGRAPH 0x9040 0x62ED #CJK UNIFIED IDEOGRAPH 0x9041 0x690D #CJK UNIFIED IDEOGRAPH 0x9042 0x6B96 #CJK UNIFIED IDEOGRAPH 0x9043 0x71ED #CJK UNIFIED IDEOGRAPH 0x9044 0x7E54 #CJK UNIFIED IDEOGRAPH 0x9045 0x8077 #CJK UNIFIED IDEOGRAPH 0x9046 0x8272 #CJK UNIFIED IDEOGRAPH 0x9047 0x89E6 #CJK UNIFIED IDEOGRAPH 0x9048 0x98DF #CJK UNIFIED IDEOGRAPH 0x9049 0x8755 #CJK UNIFIED IDEOGRAPH 0x904A 0x8FB1 #CJK UNIFIED IDEOGRAPH 0x904B 0x5C3B #CJK UNIFIED IDEOGRAPH 0x904C 0x4F38 #CJK UNIFIED IDEOGRAPH 0x904D 0x4FE1 #CJK UNIFIED IDEOGRAPH 0x904E 0x4FB5 #CJK UNIFIED IDEOGRAPH 0x904F 0x5507 #CJK UNIFIED IDEOGRAPH 0x9050 0x5A20 #CJK UNIFIED IDEOGRAPH 0x9051 0x5BDD #CJK UNIFIED IDEOGRAPH 0x9052 0x5BE9 #CJK UNIFIED IDEOGRAPH 0x9053 0x5FC3 #CJK UNIFIED IDEOGRAPH 0x9054 0x614E #CJK UNIFIED IDEOGRAPH 0x9055 0x632F #CJK UNIFIED IDEOGRAPH 0x9056 0x65B0 #CJK UNIFIED IDEOGRAPH 0x9057 0x664B #CJK UNIFIED IDEOGRAPH 0x9058 0x68EE #CJK UNIFIED IDEOGRAPH 0x9059 0x699B #CJK UNIFIED IDEOGRAPH 0x905A 0x6D78 #CJK UNIFIED IDEOGRAPH 0x905B 0x6DF1 #CJK UNIFIED IDEOGRAPH 0x905C 0x7533 #CJK UNIFIED IDEOGRAPH 0x905D 0x75B9 #CJK UNIFIED IDEOGRAPH 0x905E 0x771F #CJK UNIFIED IDEOGRAPH 0x905F 0x795E #CJK UNIFIED IDEOGRAPH 0x9060 0x79E6 #CJK UNIFIED IDEOGRAPH 0x9061 0x7D33 #CJK UNIFIED IDEOGRAPH 0x9062 0x81E3 #CJK UNIFIED IDEOGRAPH 0x9063 0x82AF #CJK UNIFIED IDEOGRAPH 0x9064 0x85AA #CJK UNIFIED IDEOGRAPH 0x9065 0x89AA #CJK UNIFIED IDEOGRAPH 0x9066 0x8A3A #CJK UNIFIED IDEOGRAPH 0x9067 0x8EAB #CJK UNIFIED IDEOGRAPH 0x9068 0x8F9B #CJK UNIFIED IDEOGRAPH 0x9069 0x9032 #CJK UNIFIED IDEOGRAPH 0x906A 0x91DD #CJK UNIFIED IDEOGRAPH 0x906B 0x9707 #CJK UNIFIED IDEOGRAPH 0x906C 0x4EBA #CJK UNIFIED IDEOGRAPH 0x906D 0x4EC1 #CJK UNIFIED IDEOGRAPH 0x906E 0x5203 #CJK UNIFIED IDEOGRAPH 0x906F 0x5875 #CJK UNIFIED IDEOGRAPH 0x9070 0x58EC #CJK UNIFIED IDEOGRAPH 0x9071 0x5C0B #CJK UNIFIED IDEOGRAPH 0x9072 0x751A #CJK UNIFIED IDEOGRAPH 0x9073 0x5C3D #CJK UNIFIED IDEOGRAPH 0x9074 0x814E #CJK UNIFIED IDEOGRAPH 0x9075 0x8A0A #CJK UNIFIED IDEOGRAPH 0x9076 0x8FC5 #CJK UNIFIED IDEOGRAPH 0x9077 0x9663 #CJK UNIFIED IDEOGRAPH 0x9078 0x976D #CJK UNIFIED IDEOGRAPH 0x9079 0x7B25 #CJK UNIFIED IDEOGRAPH 0x907A 0x8ACF #CJK UNIFIED IDEOGRAPH 0x907B 0x9808 #CJK UNIFIED IDEOGRAPH 0x907C 0x9162 #CJK UNIFIED IDEOGRAPH 0x907D 0x56F3 #CJK UNIFIED IDEOGRAPH 0x907E 0x53A8 #CJK UNIFIED IDEOGRAPH 0x9080 0x9017 #CJK UNIFIED IDEOGRAPH 0x9081 0x5439 #CJK UNIFIED IDEOGRAPH 0x9082 0x5782 #CJK UNIFIED IDEOGRAPH 0x9083 0x5E25 #CJK UNIFIED IDEOGRAPH 0x9084 0x63A8 #CJK UNIFIED IDEOGRAPH 0x9085 0x6C34 #CJK UNIFIED IDEOGRAPH 0x9086 0x708A #CJK UNIFIED IDEOGRAPH 0x9087 0x7761 #CJK UNIFIED IDEOGRAPH 0x9088 0x7C8B #CJK UNIFIED IDEOGRAPH 0x9089 0x7FE0 #CJK UNIFIED IDEOGRAPH 0x908A 0x8870 #CJK UNIFIED IDEOGRAPH 0x908B 0x9042 #CJK UNIFIED IDEOGRAPH 0x908C 0x9154 #CJK UNIFIED IDEOGRAPH 0x908D 0x9310 #CJK UNIFIED IDEOGRAPH 0x908E 0x9318 #CJK UNIFIED IDEOGRAPH 0x908F 0x968F #CJK UNIFIED IDEOGRAPH 0x9090 0x745E #CJK UNIFIED IDEOGRAPH 0x9091 0x9AC4 #CJK UNIFIED IDEOGRAPH 0x9092 0x5D07 #CJK UNIFIED IDEOGRAPH 0x9093 0x5D69 #CJK UNIFIED IDEOGRAPH 0x9094 0x6570 #CJK UNIFIED IDEOGRAPH 0x9095 0x67A2 #CJK UNIFIED IDEOGRAPH 0x9096 0x8DA8 #CJK UNIFIED IDEOGRAPH 0x9097 0x96DB #CJK UNIFIED IDEOGRAPH 0x9098 0x636E #CJK UNIFIED IDEOGRAPH 0x9099 0x6749 #CJK UNIFIED IDEOGRAPH 0x909A 0x6919 #CJK UNIFIED IDEOGRAPH 0x909B 0x83C5 #CJK UNIFIED IDEOGRAPH 0x909C 0x9817 #CJK UNIFIED IDEOGRAPH 0x909D 0x96C0 #CJK UNIFIED IDEOGRAPH 0x909E 0x88FE #CJK UNIFIED IDEOGRAPH 0x909F 0x6F84 #CJK UNIFIED IDEOGRAPH 0x90A0 0x647A #CJK UNIFIED IDEOGRAPH 0x90A1 0x5BF8 #CJK UNIFIED IDEOGRAPH 0x90A2 0x4E16 #CJK UNIFIED IDEOGRAPH 0x90A3 0x702C #CJK UNIFIED IDEOGRAPH 0x90A4 0x755D #CJK UNIFIED IDEOGRAPH 0x90A5 0x662F #CJK UNIFIED IDEOGRAPH 0x90A6 0x51C4 #CJK UNIFIED IDEOGRAPH 0x90A7 0x5236 #CJK UNIFIED IDEOGRAPH 0x90A8 0x52E2 #CJK UNIFIED IDEOGRAPH 0x90A9 0x59D3 #CJK UNIFIED IDEOGRAPH 0x90AA 0x5F81 #CJK UNIFIED IDEOGRAPH 0x90AB 0x6027 #CJK UNIFIED IDEOGRAPH 0x90AC 0x6210 #CJK UNIFIED IDEOGRAPH 0x90AD 0x653F #CJK UNIFIED IDEOGRAPH 0x90AE 0x6574 #CJK UNIFIED IDEOGRAPH 0x90AF 0x661F #CJK UNIFIED IDEOGRAPH 0x90B0 0x6674 #CJK UNIFIED IDEOGRAPH 0x90B1 0x68F2 #CJK UNIFIED IDEOGRAPH 0x90B2 0x6816 #CJK UNIFIED IDEOGRAPH 0x90B3 0x6B63 #CJK UNIFIED IDEOGRAPH 0x90B4 0x6E05 #CJK UNIFIED IDEOGRAPH 0x90B5 0x7272 #CJK UNIFIED IDEOGRAPH 0x90B6 0x751F #CJK UNIFIED IDEOGRAPH 0x90B7 0x76DB #CJK UNIFIED IDEOGRAPH 0x90B8 0x7CBE #CJK UNIFIED IDEOGRAPH 0x90B9 0x8056 #CJK UNIFIED IDEOGRAPH 0x90BA 0x58F0 #CJK UNIFIED IDEOGRAPH 0x90BB 0x88FD #CJK UNIFIED IDEOGRAPH 0x90BC 0x897F #CJK UNIFIED IDEOGRAPH 0x90BD 0x8AA0 #CJK UNIFIED IDEOGRAPH 0x90BE 0x8A93 #CJK UNIFIED IDEOGRAPH 0x90BF 0x8ACB #CJK UNIFIED IDEOGRAPH 0x90C0 0x901D #CJK UNIFIED IDEOGRAPH 0x90C1 0x9192 #CJK UNIFIED IDEOGRAPH 0x90C2 0x9752 #CJK UNIFIED IDEOGRAPH 0x90C3 0x9759 #CJK UNIFIED IDEOGRAPH 0x90C4 0x6589 #CJK UNIFIED IDEOGRAPH 0x90C5 0x7A0E #CJK UNIFIED IDEOGRAPH 0x90C6 0x8106 #CJK UNIFIED IDEOGRAPH 0x90C7 0x96BB #CJK UNIFIED IDEOGRAPH 0x90C8 0x5E2D #CJK UNIFIED IDEOGRAPH 0x90C9 0x60DC #CJK UNIFIED IDEOGRAPH 0x90CA 0x621A #CJK UNIFIED IDEOGRAPH 0x90CB 0x65A5 #CJK UNIFIED IDEOGRAPH 0x90CC 0x6614 #CJK UNIFIED IDEOGRAPH 0x90CD 0x6790 #CJK UNIFIED IDEOGRAPH 0x90CE 0x77F3 #CJK UNIFIED IDEOGRAPH 0x90CF 0x7A4D #CJK UNIFIED IDEOGRAPH 0x90D0 0x7C4D #CJK UNIFIED IDEOGRAPH 0x90D1 0x7E3E #CJK UNIFIED IDEOGRAPH 0x90D2 0x810A #CJK UNIFIED IDEOGRAPH 0x90D3 0x8CAC #CJK UNIFIED IDEOGRAPH 0x90D4 0x8D64 #CJK UNIFIED IDEOGRAPH 0x90D5 0x8DE1 #CJK UNIFIED IDEOGRAPH 0x90D6 0x8E5F #CJK UNIFIED IDEOGRAPH 0x90D7 0x78A9 #CJK UNIFIED IDEOGRAPH 0x90D8 0x5207 #CJK UNIFIED IDEOGRAPH 0x90D9 0x62D9 #CJK UNIFIED IDEOGRAPH 0x90DA 0x63A5 #CJK UNIFIED IDEOGRAPH 0x90DB 0x6442 #CJK UNIFIED IDEOGRAPH 0x90DC 0x6298 #CJK UNIFIED IDEOGRAPH 0x90DD 0x8A2D #CJK UNIFIED IDEOGRAPH 0x90DE 0x7A83 #CJK UNIFIED IDEOGRAPH 0x90DF 0x7BC0 #CJK UNIFIED IDEOGRAPH 0x90E0 0x8AAC #CJK UNIFIED IDEOGRAPH 0x90E1 0x96EA #CJK UNIFIED IDEOGRAPH 0x90E2 0x7D76 #CJK UNIFIED IDEOGRAPH 0x90E3 0x820C #CJK UNIFIED IDEOGRAPH 0x90E4 0x8749 #CJK UNIFIED IDEOGRAPH 0x90E5 0x4ED9 #CJK UNIFIED IDEOGRAPH 0x90E6 0x5148 #CJK UNIFIED IDEOGRAPH 0x90E7 0x5343 #CJK UNIFIED IDEOGRAPH 0x90E8 0x5360 #CJK UNIFIED IDEOGRAPH 0x90E9 0x5BA3 #CJK UNIFIED IDEOGRAPH 0x90EA 0x5C02 #CJK UNIFIED IDEOGRAPH 0x90EB 0x5C16 #CJK UNIFIED IDEOGRAPH 0x90EC 0x5DDD #CJK UNIFIED IDEOGRAPH 0x90ED 0x6226 #CJK UNIFIED IDEOGRAPH 0x90EE 0x6247 #CJK UNIFIED IDEOGRAPH 0x90EF 0x64B0 #CJK UNIFIED IDEOGRAPH 0x90F0 0x6813 #CJK UNIFIED IDEOGRAPH 0x90F1 0x6834 #CJK UNIFIED IDEOGRAPH 0x90F2 0x6CC9 #CJK UNIFIED IDEOGRAPH 0x90F3 0x6D45 #CJK UNIFIED IDEOGRAPH 0x90F4 0x6D17 #CJK UNIFIED IDEOGRAPH 0x90F5 0x67D3 #CJK UNIFIED IDEOGRAPH 0x90F6 0x6F5C #CJK UNIFIED IDEOGRAPH 0x90F7 0x714E #CJK UNIFIED IDEOGRAPH 0x90F8 0x717D #CJK UNIFIED IDEOGRAPH 0x90F9 0x65CB #CJK UNIFIED IDEOGRAPH 0x90FA 0x7A7F #CJK UNIFIED IDEOGRAPH 0x90FB 0x7BAD #CJK UNIFIED IDEOGRAPH 0x90FC 0x7DDA #CJK UNIFIED IDEOGRAPH 0x9140 0x7E4A #CJK UNIFIED IDEOGRAPH 0x9141 0x7FA8 #CJK UNIFIED IDEOGRAPH 0x9142 0x817A #CJK UNIFIED IDEOGRAPH 0x9143 0x821B #CJK UNIFIED IDEOGRAPH 0x9144 0x8239 #CJK UNIFIED IDEOGRAPH 0x9145 0x85A6 #CJK UNIFIED IDEOGRAPH 0x9146 0x8A6E #CJK UNIFIED IDEOGRAPH 0x9147 0x8CCE #CJK UNIFIED IDEOGRAPH 0x9148 0x8DF5 #CJK UNIFIED IDEOGRAPH 0x9149 0x9078 #CJK UNIFIED IDEOGRAPH 0x914A 0x9077 #CJK UNIFIED IDEOGRAPH 0x914B 0x92AD #CJK UNIFIED IDEOGRAPH 0x914C 0x9291 #CJK UNIFIED IDEOGRAPH 0x914D 0x9583 #CJK UNIFIED IDEOGRAPH 0x914E 0x9BAE #CJK UNIFIED IDEOGRAPH 0x914F 0x524D #CJK UNIFIED IDEOGRAPH 0x9150 0x5584 #CJK UNIFIED IDEOGRAPH 0x9151 0x6F38 #CJK UNIFIED IDEOGRAPH 0x9152 0x7136 #CJK UNIFIED IDEOGRAPH 0x9153 0x5168 #CJK UNIFIED IDEOGRAPH 0x9154 0x7985 #CJK UNIFIED IDEOGRAPH 0x9155 0x7E55 #CJK UNIFIED IDEOGRAPH 0x9156 0x81B3 #CJK UNIFIED IDEOGRAPH 0x9157 0x7CCE #CJK UNIFIED IDEOGRAPH 0x9158 0x564C #CJK UNIFIED IDEOGRAPH 0x9159 0x5851 #CJK UNIFIED IDEOGRAPH 0x915A 0x5CA8 #CJK UNIFIED IDEOGRAPH 0x915B 0x63AA #CJK UNIFIED IDEOGRAPH 0x915C 0x66FE #CJK UNIFIED IDEOGRAPH 0x915D 0x66FD #CJK UNIFIED IDEOGRAPH 0x915E 0x695A #CJK UNIFIED IDEOGRAPH 0x915F 0x72D9 #CJK UNIFIED IDEOGRAPH 0x9160 0x758F #CJK UNIFIED IDEOGRAPH 0x9161 0x758E #CJK UNIFIED IDEOGRAPH 0x9162 0x790E #CJK UNIFIED IDEOGRAPH 0x9163 0x7956 #CJK UNIFIED IDEOGRAPH 0x9164 0x79DF #CJK UNIFIED IDEOGRAPH 0x9165 0x7C97 #CJK UNIFIED IDEOGRAPH 0x9166 0x7D20 #CJK UNIFIED IDEOGRAPH 0x9167 0x7D44 #CJK UNIFIED IDEOGRAPH 0x9168 0x8607 #CJK UNIFIED IDEOGRAPH 0x9169 0x8A34 #CJK UNIFIED IDEOGRAPH 0x916A 0x963B #CJK UNIFIED IDEOGRAPH 0x916B 0x9061 #CJK UNIFIED IDEOGRAPH 0x916C 0x9F20 #CJK UNIFIED IDEOGRAPH 0x916D 0x50E7 #CJK UNIFIED IDEOGRAPH 0x916E 0x5275 #CJK UNIFIED IDEOGRAPH 0x916F 0x53CC #CJK UNIFIED IDEOGRAPH 0x9170 0x53E2 #CJK UNIFIED IDEOGRAPH 0x9171 0x5009 #CJK UNIFIED IDEOGRAPH 0x9172 0x55AA #CJK UNIFIED IDEOGRAPH 0x9173 0x58EE #CJK UNIFIED IDEOGRAPH 0x9174 0x594F #CJK UNIFIED IDEOGRAPH 0x9175 0x723D #CJK UNIFIED IDEOGRAPH 0x9176 0x5B8B #CJK UNIFIED IDEOGRAPH 0x9177 0x5C64 #CJK UNIFIED IDEOGRAPH 0x9178 0x531D #CJK UNIFIED IDEOGRAPH 0x9179 0x60E3 #CJK UNIFIED IDEOGRAPH 0x917A 0x60F3 #CJK UNIFIED IDEOGRAPH 0x917B 0x635C #CJK UNIFIED IDEOGRAPH 0x917C 0x6383 #CJK UNIFIED IDEOGRAPH 0x917D 0x633F #CJK UNIFIED IDEOGRAPH 0x917E 0x63BB #CJK UNIFIED IDEOGRAPH 0x9180 0x64CD #CJK UNIFIED IDEOGRAPH 0x9181 0x65E9 #CJK UNIFIED IDEOGRAPH 0x9182 0x66F9 #CJK UNIFIED IDEOGRAPH 0x9183 0x5DE3 #CJK UNIFIED IDEOGRAPH 0x9184 0x69CD #CJK UNIFIED IDEOGRAPH 0x9185 0x69FD #CJK UNIFIED IDEOGRAPH 0x9186 0x6F15 #CJK UNIFIED IDEOGRAPH 0x9187 0x71E5 #CJK UNIFIED IDEOGRAPH 0x9188 0x4E89 #CJK UNIFIED IDEOGRAPH 0x9189 0x75E9 #CJK UNIFIED IDEOGRAPH 0x918A 0x76F8 #CJK UNIFIED IDEOGRAPH 0x918B 0x7A93 #CJK UNIFIED IDEOGRAPH 0x918C 0x7CDF #CJK UNIFIED IDEOGRAPH 0x918D 0x7DCF #CJK UNIFIED IDEOGRAPH 0x918E 0x7D9C #CJK UNIFIED IDEOGRAPH 0x918F 0x8061 #CJK UNIFIED IDEOGRAPH 0x9190 0x8349 #CJK UNIFIED IDEOGRAPH 0x9191 0x8358 #CJK UNIFIED IDEOGRAPH 0x9192 0x846C #CJK UNIFIED IDEOGRAPH 0x9193 0x84BC #CJK UNIFIED IDEOGRAPH 0x9194 0x85FB #CJK UNIFIED IDEOGRAPH 0x9195 0x88C5 #CJK UNIFIED IDEOGRAPH 0x9196 0x8D70 #CJK UNIFIED IDEOGRAPH 0x9197 0x9001 #CJK UNIFIED IDEOGRAPH 0x9198 0x906D #CJK UNIFIED IDEOGRAPH 0x9199 0x9397 #CJK UNIFIED IDEOGRAPH 0x919A 0x971C #CJK UNIFIED IDEOGRAPH 0x919B 0x9A12 #CJK UNIFIED IDEOGRAPH 0x919C 0x50CF #CJK UNIFIED IDEOGRAPH 0x919D 0x5897 #CJK UNIFIED IDEOGRAPH 0x919E 0x618E #CJK UNIFIED IDEOGRAPH 0x919F 0x81D3 #CJK UNIFIED IDEOGRAPH 0x91A0 0x8535 #CJK UNIFIED IDEOGRAPH 0x91A1 0x8D08 #CJK UNIFIED IDEOGRAPH 0x91A2 0x9020 #CJK UNIFIED IDEOGRAPH 0x91A3 0x4FC3 #CJK UNIFIED IDEOGRAPH 0x91A4 0x5074 #CJK UNIFIED IDEOGRAPH 0x91A5 0x5247 #CJK UNIFIED IDEOGRAPH 0x91A6 0x5373 #CJK UNIFIED IDEOGRAPH 0x91A7 0x606F #CJK UNIFIED IDEOGRAPH 0x91A8 0x6349 #CJK UNIFIED IDEOGRAPH 0x91A9 0x675F #CJK UNIFIED IDEOGRAPH 0x91AA 0x6E2C #CJK UNIFIED IDEOGRAPH 0x91AB 0x8DB3 #CJK UNIFIED IDEOGRAPH 0x91AC 0x901F #CJK UNIFIED IDEOGRAPH 0x91AD 0x4FD7 #CJK UNIFIED IDEOGRAPH 0x91AE 0x5C5E #CJK UNIFIED IDEOGRAPH 0x91AF 0x8CCA #CJK UNIFIED IDEOGRAPH 0x91B0 0x65CF #CJK UNIFIED IDEOGRAPH 0x91B1 0x7D9A #CJK UNIFIED IDEOGRAPH 0x91B2 0x5352 #CJK UNIFIED IDEOGRAPH 0x91B3 0x8896 #CJK UNIFIED IDEOGRAPH 0x91B4 0x5176 #CJK UNIFIED IDEOGRAPH 0x91B5 0x63C3 #CJK UNIFIED IDEOGRAPH 0x91B6 0x5B58 #CJK UNIFIED IDEOGRAPH 0x91B7 0x5B6B #CJK UNIFIED IDEOGRAPH 0x91B8 0x5C0A #CJK UNIFIED IDEOGRAPH 0x91B9 0x640D #CJK UNIFIED IDEOGRAPH 0x91BA 0x6751 #CJK UNIFIED IDEOGRAPH 0x91BB 0x905C #CJK UNIFIED IDEOGRAPH 0x91BC 0x4ED6 #CJK UNIFIED IDEOGRAPH 0x91BD 0x591A #CJK UNIFIED IDEOGRAPH 0x91BE 0x592A #CJK UNIFIED IDEOGRAPH 0x91BF 0x6C70 #CJK UNIFIED IDEOGRAPH 0x91C0 0x8A51 #CJK UNIFIED IDEOGRAPH 0x91C1 0x553E #CJK UNIFIED IDEOGRAPH 0x91C2 0x5815 #CJK UNIFIED IDEOGRAPH 0x91C3 0x59A5 #CJK UNIFIED IDEOGRAPH 0x91C4 0x60F0 #CJK UNIFIED IDEOGRAPH 0x91C5 0x6253 #CJK UNIFIED IDEOGRAPH 0x91C6 0x67C1 #CJK UNIFIED IDEOGRAPH 0x91C7 0x8235 #CJK UNIFIED IDEOGRAPH 0x91C8 0x6955 #CJK UNIFIED IDEOGRAPH 0x91C9 0x9640 #CJK UNIFIED IDEOGRAPH 0x91CA 0x99C4 #CJK UNIFIED IDEOGRAPH 0x91CB 0x9A28 #CJK UNIFIED IDEOGRAPH 0x91CC 0x4F53 #CJK UNIFIED IDEOGRAPH 0x91CD 0x5806 #CJK UNIFIED IDEOGRAPH 0x91CE 0x5BFE #CJK UNIFIED IDEOGRAPH 0x91CF 0x8010 #CJK UNIFIED IDEOGRAPH 0x91D0 0x5CB1 #CJK UNIFIED IDEOGRAPH 0x91D1 0x5E2F #CJK UNIFIED IDEOGRAPH 0x91D2 0x5F85 #CJK UNIFIED IDEOGRAPH 0x91D3 0x6020 #CJK UNIFIED IDEOGRAPH 0x91D4 0x614B #CJK UNIFIED IDEOGRAPH 0x91D5 0x6234 #CJK UNIFIED IDEOGRAPH 0x91D6 0x66FF #CJK UNIFIED IDEOGRAPH 0x91D7 0x6CF0 #CJK UNIFIED IDEOGRAPH 0x91D8 0x6EDE #CJK UNIFIED IDEOGRAPH 0x91D9 0x80CE #CJK UNIFIED IDEOGRAPH 0x91DA 0x817F #CJK UNIFIED IDEOGRAPH 0x91DB 0x82D4 #CJK UNIFIED IDEOGRAPH 0x91DC 0x888B #CJK UNIFIED IDEOGRAPH 0x91DD 0x8CB8 #CJK UNIFIED IDEOGRAPH 0x91DE 0x9000 #CJK UNIFIED IDEOGRAPH 0x91DF 0x902E #CJK UNIFIED IDEOGRAPH 0x91E0 0x968A #CJK UNIFIED IDEOGRAPH 0x91E1 0x9EDB #CJK UNIFIED IDEOGRAPH 0x91E2 0x9BDB #CJK UNIFIED IDEOGRAPH 0x91E3 0x4EE3 #CJK UNIFIED IDEOGRAPH 0x91E4 0x53F0 #CJK UNIFIED IDEOGRAPH 0x91E5 0x5927 #CJK UNIFIED IDEOGRAPH 0x91E6 0x7B2C #CJK UNIFIED IDEOGRAPH 0x91E7 0x918D #CJK UNIFIED IDEOGRAPH 0x91E8 0x984C #CJK UNIFIED IDEOGRAPH 0x91E9 0x9DF9 #CJK UNIFIED IDEOGRAPH 0x91EA 0x6EDD #CJK UNIFIED IDEOGRAPH 0x91EB 0x7027 #CJK UNIFIED IDEOGRAPH 0x91EC 0x5353 #CJK UNIFIED IDEOGRAPH 0x91ED 0x5544 #CJK UNIFIED IDEOGRAPH 0x91EE 0x5B85 #CJK UNIFIED IDEOGRAPH 0x91EF 0x6258 #CJK UNIFIED IDEOGRAPH 0x91F0 0x629E #CJK UNIFIED IDEOGRAPH 0x91F1 0x62D3 #CJK UNIFIED IDEOGRAPH 0x91F2 0x6CA2 #CJK UNIFIED IDEOGRAPH 0x91F3 0x6FEF #CJK UNIFIED IDEOGRAPH 0x91F4 0x7422 #CJK UNIFIED IDEOGRAPH 0x91F5 0x8A17 #CJK UNIFIED IDEOGRAPH 0x91F6 0x9438 #CJK UNIFIED IDEOGRAPH 0x91F7 0x6FC1 #CJK UNIFIED IDEOGRAPH 0x91F8 0x8AFE #CJK UNIFIED IDEOGRAPH 0x91F9 0x8338 #CJK UNIFIED IDEOGRAPH 0x91FA 0x51E7 #CJK UNIFIED IDEOGRAPH 0x91FB 0x86F8 #CJK UNIFIED IDEOGRAPH 0x91FC 0x53EA #CJK UNIFIED IDEOGRAPH 0x9240 0x53E9 #CJK UNIFIED IDEOGRAPH 0x9241 0x4F46 #CJK UNIFIED IDEOGRAPH 0x9242 0x9054 #CJK UNIFIED IDEOGRAPH 0x9243 0x8FB0 #CJK UNIFIED IDEOGRAPH 0x9244 0x596A #CJK UNIFIED IDEOGRAPH 0x9245 0x8131 #CJK UNIFIED IDEOGRAPH 0x9246 0x5DFD #CJK UNIFIED IDEOGRAPH 0x9247 0x7AEA #CJK UNIFIED IDEOGRAPH 0x9248 0x8FBF #CJK UNIFIED IDEOGRAPH 0x9249 0x68DA #CJK UNIFIED IDEOGRAPH 0x924A 0x8C37 #CJK UNIFIED IDEOGRAPH 0x924B 0x72F8 #CJK UNIFIED IDEOGRAPH 0x924C 0x9C48 #CJK UNIFIED IDEOGRAPH 0x924D 0x6A3D #CJK UNIFIED IDEOGRAPH 0x924E 0x8AB0 #CJK UNIFIED IDEOGRAPH 0x924F 0x4E39 #CJK UNIFIED IDEOGRAPH 0x9250 0x5358 #CJK UNIFIED IDEOGRAPH 0x9251 0x5606 #CJK UNIFIED IDEOGRAPH 0x9252 0x5766 #CJK UNIFIED IDEOGRAPH 0x9253 0x62C5 #CJK UNIFIED IDEOGRAPH 0x9254 0x63A2 #CJK UNIFIED IDEOGRAPH 0x9255 0x65E6 #CJK UNIFIED IDEOGRAPH 0x9256 0x6B4E #CJK UNIFIED IDEOGRAPH 0x9257 0x6DE1 #CJK UNIFIED IDEOGRAPH 0x9258 0x6E5B #CJK UNIFIED IDEOGRAPH 0x9259 0x70AD #CJK UNIFIED IDEOGRAPH 0x925A 0x77ED #CJK UNIFIED IDEOGRAPH 0x925B 0x7AEF #CJK UNIFIED IDEOGRAPH 0x925C 0x7BAA #CJK UNIFIED IDEOGRAPH 0x925D 0x7DBB #CJK UNIFIED IDEOGRAPH 0x925E 0x803D #CJK UNIFIED IDEOGRAPH 0x925F 0x80C6 #CJK UNIFIED IDEOGRAPH 0x9260 0x86CB #CJK UNIFIED IDEOGRAPH 0x9261 0x8A95 #CJK UNIFIED IDEOGRAPH 0x9262 0x935B #CJK UNIFIED IDEOGRAPH 0x9263 0x56E3 #CJK UNIFIED IDEOGRAPH 0x9264 0x58C7 #CJK UNIFIED IDEOGRAPH 0x9265 0x5F3E #CJK UNIFIED IDEOGRAPH 0x9266 0x65AD #CJK UNIFIED IDEOGRAPH 0x9267 0x6696 #CJK UNIFIED IDEOGRAPH 0x9268 0x6A80 #CJK UNIFIED IDEOGRAPH 0x9269 0x6BB5 #CJK UNIFIED IDEOGRAPH 0x926A 0x7537 #CJK UNIFIED IDEOGRAPH 0x926B 0x8AC7 #CJK UNIFIED IDEOGRAPH 0x926C 0x5024 #CJK UNIFIED IDEOGRAPH 0x926D 0x77E5 #CJK UNIFIED IDEOGRAPH 0x926E 0x5730 #CJK UNIFIED IDEOGRAPH 0x926F 0x5F1B #CJK UNIFIED IDEOGRAPH 0x9270 0x6065 #CJK UNIFIED IDEOGRAPH 0x9271 0x667A #CJK UNIFIED IDEOGRAPH 0x9272 0x6C60 #CJK UNIFIED IDEOGRAPH 0x9273 0x75F4 #CJK UNIFIED IDEOGRAPH 0x9274 0x7A1A #CJK UNIFIED IDEOGRAPH 0x9275 0x7F6E #CJK UNIFIED IDEOGRAPH 0x9276 0x81F4 #CJK UNIFIED IDEOGRAPH 0x9277 0x8718 #CJK UNIFIED IDEOGRAPH 0x9278 0x9045 #CJK UNIFIED IDEOGRAPH 0x9279 0x99B3 #CJK UNIFIED IDEOGRAPH 0x927A 0x7BC9 #CJK UNIFIED IDEOGRAPH 0x927B 0x755C #CJK UNIFIED IDEOGRAPH 0x927C 0x7AF9 #CJK UNIFIED IDEOGRAPH 0x927D 0x7B51 #CJK UNIFIED IDEOGRAPH 0x927E 0x84C4 #CJK UNIFIED IDEOGRAPH 0x9280 0x9010 #CJK UNIFIED IDEOGRAPH 0x9281 0x79E9 #CJK UNIFIED IDEOGRAPH 0x9282 0x7A92 #CJK UNIFIED IDEOGRAPH 0x9283 0x8336 #CJK UNIFIED IDEOGRAPH 0x9284 0x5AE1 #CJK UNIFIED IDEOGRAPH 0x9285 0x7740 #CJK UNIFIED IDEOGRAPH 0x9286 0x4E2D #CJK UNIFIED IDEOGRAPH 0x9287 0x4EF2 #CJK UNIFIED IDEOGRAPH 0x9288 0x5B99 #CJK UNIFIED IDEOGRAPH 0x9289 0x5FE0 #CJK UNIFIED IDEOGRAPH 0x928A 0x62BD #CJK UNIFIED IDEOGRAPH 0x928B 0x663C #CJK UNIFIED IDEOGRAPH 0x928C 0x67F1 #CJK UNIFIED IDEOGRAPH 0x928D 0x6CE8 #CJK UNIFIED IDEOGRAPH 0x928E 0x866B #CJK UNIFIED IDEOGRAPH 0x928F 0x8877 #CJK UNIFIED IDEOGRAPH 0x9290 0x8A3B #CJK UNIFIED IDEOGRAPH 0x9291 0x914E #CJK UNIFIED IDEOGRAPH 0x9292 0x92F3 #CJK UNIFIED IDEOGRAPH 0x9293 0x99D0 #CJK UNIFIED IDEOGRAPH 0x9294 0x6A17 #CJK UNIFIED IDEOGRAPH 0x9295 0x7026 #CJK UNIFIED IDEOGRAPH 0x9296 0x732A #CJK UNIFIED IDEOGRAPH 0x9297 0x82E7 #CJK UNIFIED IDEOGRAPH 0x9298 0x8457 #CJK UNIFIED IDEOGRAPH 0x9299 0x8CAF #CJK UNIFIED IDEOGRAPH 0x929A 0x4E01 #CJK UNIFIED IDEOGRAPH 0x929B 0x5146 #CJK UNIFIED IDEOGRAPH 0x929C 0x51CB #CJK UNIFIED IDEOGRAPH 0x929D 0x558B #CJK UNIFIED IDEOGRAPH 0x929E 0x5BF5 #CJK UNIFIED IDEOGRAPH 0x929F 0x5E16 #CJK UNIFIED IDEOGRAPH 0x92A0 0x5E33 #CJK UNIFIED IDEOGRAPH 0x92A1 0x5E81 #CJK UNIFIED IDEOGRAPH 0x92A2 0x5F14 #CJK UNIFIED IDEOGRAPH 0x92A3 0x5F35 #CJK UNIFIED IDEOGRAPH 0x92A4 0x5F6B #CJK UNIFIED IDEOGRAPH 0x92A5 0x5FB4 #CJK UNIFIED IDEOGRAPH 0x92A6 0x61F2 #CJK UNIFIED IDEOGRAPH 0x92A7 0x6311 #CJK UNIFIED IDEOGRAPH 0x92A8 0x66A2 #CJK UNIFIED IDEOGRAPH 0x92A9 0x671D #CJK UNIFIED IDEOGRAPH 0x92AA 0x6F6E #CJK UNIFIED IDEOGRAPH 0x92AB 0x7252 #CJK UNIFIED IDEOGRAPH 0x92AC 0x753A #CJK UNIFIED IDEOGRAPH 0x92AD 0x773A #CJK UNIFIED IDEOGRAPH 0x92AE 0x8074 #CJK UNIFIED IDEOGRAPH 0x92AF 0x8139 #CJK UNIFIED IDEOGRAPH 0x92B0 0x8178 #CJK UNIFIED IDEOGRAPH 0x92B1 0x8776 #CJK UNIFIED IDEOGRAPH 0x92B2 0x8ABF #CJK UNIFIED IDEOGRAPH 0x92B3 0x8ADC #CJK UNIFIED IDEOGRAPH 0x92B4 0x8D85 #CJK UNIFIED IDEOGRAPH 0x92B5 0x8DF3 #CJK UNIFIED IDEOGRAPH 0x92B6 0x929A #CJK UNIFIED IDEOGRAPH 0x92B7 0x9577 #CJK UNIFIED IDEOGRAPH 0x92B8 0x9802 #CJK UNIFIED IDEOGRAPH 0x92B9 0x9CE5 #CJK UNIFIED IDEOGRAPH 0x92BA 0x52C5 #CJK UNIFIED IDEOGRAPH 0x92BB 0x6357 #CJK UNIFIED IDEOGRAPH 0x92BC 0x76F4 #CJK UNIFIED IDEOGRAPH 0x92BD 0x6715 #CJK UNIFIED IDEOGRAPH 0x92BE 0x6C88 #CJK UNIFIED IDEOGRAPH 0x92BF 0x73CD #CJK UNIFIED IDEOGRAPH 0x92C0 0x8CC3 #CJK UNIFIED IDEOGRAPH 0x92C1 0x93AE #CJK UNIFIED IDEOGRAPH 0x92C2 0x9673 #CJK UNIFIED IDEOGRAPH 0x92C3 0x6D25 #CJK UNIFIED IDEOGRAPH 0x92C4 0x589C #CJK UNIFIED IDEOGRAPH 0x92C5 0x690E #CJK UNIFIED IDEOGRAPH 0x92C6 0x69CC #CJK UNIFIED IDEOGRAPH 0x92C7 0x8FFD #CJK UNIFIED IDEOGRAPH 0x92C8 0x939A #CJK UNIFIED IDEOGRAPH 0x92C9 0x75DB #CJK UNIFIED IDEOGRAPH 0x92CA 0x901A #CJK UNIFIED IDEOGRAPH 0x92CB 0x585A #CJK UNIFIED IDEOGRAPH 0x92CC 0x6802 #CJK UNIFIED IDEOGRAPH 0x92CD 0x63B4 #CJK UNIFIED IDEOGRAPH 0x92CE 0x69FB #CJK UNIFIED IDEOGRAPH 0x92CF 0x4F43 #CJK UNIFIED IDEOGRAPH 0x92D0 0x6F2C #CJK UNIFIED IDEOGRAPH 0x92D1 0x67D8 #CJK UNIFIED IDEOGRAPH 0x92D2 0x8FBB #CJK UNIFIED IDEOGRAPH 0x92D3 0x8526 #CJK UNIFIED IDEOGRAPH 0x92D4 0x7DB4 #CJK UNIFIED IDEOGRAPH 0x92D5 0x9354 #CJK UNIFIED IDEOGRAPH 0x92D6 0x693F #CJK UNIFIED IDEOGRAPH 0x92D7 0x6F70 #CJK UNIFIED IDEOGRAPH 0x92D8 0x576A #CJK UNIFIED IDEOGRAPH 0x92D9 0x58F7 #CJK UNIFIED IDEOGRAPH 0x92DA 0x5B2C #CJK UNIFIED IDEOGRAPH 0x92DB 0x7D2C #CJK UNIFIED IDEOGRAPH 0x92DC 0x722A #CJK UNIFIED IDEOGRAPH 0x92DD 0x540A #CJK UNIFIED IDEOGRAPH 0x92DE 0x91E3 #CJK UNIFIED IDEOGRAPH 0x92DF 0x9DB4 #CJK UNIFIED IDEOGRAPH 0x92E0 0x4EAD #CJK UNIFIED IDEOGRAPH 0x92E1 0x4F4E #CJK UNIFIED IDEOGRAPH 0x92E2 0x505C #CJK UNIFIED IDEOGRAPH 0x92E3 0x5075 #CJK UNIFIED IDEOGRAPH 0x92E4 0x5243 #CJK UNIFIED IDEOGRAPH 0x92E5 0x8C9E #CJK UNIFIED IDEOGRAPH 0x92E6 0x5448 #CJK UNIFIED IDEOGRAPH 0x92E7 0x5824 #CJK UNIFIED IDEOGRAPH 0x92E8 0x5B9A #CJK UNIFIED IDEOGRAPH 0x92E9 0x5E1D #CJK UNIFIED IDEOGRAPH 0x92EA 0x5E95 #CJK UNIFIED IDEOGRAPH 0x92EB 0x5EAD #CJK UNIFIED IDEOGRAPH 0x92EC 0x5EF7 #CJK UNIFIED IDEOGRAPH 0x92ED 0x5F1F #CJK UNIFIED IDEOGRAPH 0x92EE 0x608C #CJK UNIFIED IDEOGRAPH 0x92EF 0x62B5 #CJK UNIFIED IDEOGRAPH 0x92F0 0x633A #CJK UNIFIED IDEOGRAPH 0x92F1 0x63D0 #CJK UNIFIED IDEOGRAPH 0x92F2 0x68AF #CJK UNIFIED IDEOGRAPH 0x92F3 0x6C40 #CJK UNIFIED IDEOGRAPH 0x92F4 0x7887 #CJK UNIFIED IDEOGRAPH 0x92F5 0x798E #CJK UNIFIED IDEOGRAPH 0x92F6 0x7A0B #CJK UNIFIED IDEOGRAPH 0x92F7 0x7DE0 #CJK UNIFIED IDEOGRAPH 0x92F8 0x8247 #CJK UNIFIED IDEOGRAPH 0x92F9 0x8A02 #CJK UNIFIED IDEOGRAPH 0x92FA 0x8AE6 #CJK UNIFIED IDEOGRAPH 0x92FB 0x8E44 #CJK UNIFIED IDEOGRAPH 0x92FC 0x9013 #CJK UNIFIED IDEOGRAPH 0x9340 0x90B8 #CJK UNIFIED IDEOGRAPH 0x9341 0x912D #CJK UNIFIED IDEOGRAPH 0x9342 0x91D8 #CJK UNIFIED IDEOGRAPH 0x9343 0x9F0E #CJK UNIFIED IDEOGRAPH 0x9344 0x6CE5 #CJK UNIFIED IDEOGRAPH 0x9345 0x6458 #CJK UNIFIED IDEOGRAPH 0x9346 0x64E2 #CJK UNIFIED IDEOGRAPH 0x9347 0x6575 #CJK UNIFIED IDEOGRAPH 0x9348 0x6EF4 #CJK UNIFIED IDEOGRAPH 0x9349 0x7684 #CJK UNIFIED IDEOGRAPH 0x934A 0x7B1B #CJK UNIFIED IDEOGRAPH 0x934B 0x9069 #CJK UNIFIED IDEOGRAPH 0x934C 0x93D1 #CJK UNIFIED IDEOGRAPH 0x934D 0x6EBA #CJK UNIFIED IDEOGRAPH 0x934E 0x54F2 #CJK UNIFIED IDEOGRAPH 0x934F 0x5FB9 #CJK UNIFIED IDEOGRAPH 0x9350 0x64A4 #CJK UNIFIED IDEOGRAPH 0x9351 0x8F4D #CJK UNIFIED IDEOGRAPH 0x9352 0x8FED #CJK UNIFIED IDEOGRAPH 0x9353 0x9244 #CJK UNIFIED IDEOGRAPH 0x9354 0x5178 #CJK UNIFIED IDEOGRAPH 0x9355 0x586B #CJK UNIFIED IDEOGRAPH 0x9356 0x5929 #CJK UNIFIED IDEOGRAPH 0x9357 0x5C55 #CJK UNIFIED IDEOGRAPH 0x9358 0x5E97 #CJK UNIFIED IDEOGRAPH 0x9359 0x6DFB #CJK UNIFIED IDEOGRAPH 0x935A 0x7E8F #CJK UNIFIED IDEOGRAPH 0x935B 0x751C #CJK UNIFIED IDEOGRAPH 0x935C 0x8CBC #CJK UNIFIED IDEOGRAPH 0x935D 0x8EE2 #CJK UNIFIED IDEOGRAPH 0x935E 0x985B #CJK UNIFIED IDEOGRAPH 0x935F 0x70B9 #CJK UNIFIED IDEOGRAPH 0x9360 0x4F1D #CJK UNIFIED IDEOGRAPH 0x9361 0x6BBF #CJK UNIFIED IDEOGRAPH 0x9362 0x6FB1 #CJK UNIFIED IDEOGRAPH 0x9363 0x7530 #CJK UNIFIED IDEOGRAPH 0x9364 0x96FB #CJK UNIFIED IDEOGRAPH 0x9365 0x514E #CJK UNIFIED IDEOGRAPH 0x9366 0x5410 #CJK UNIFIED IDEOGRAPH 0x9367 0x5835 #CJK UNIFIED IDEOGRAPH 0x9368 0x5857 #CJK UNIFIED IDEOGRAPH 0x9369 0x59AC #CJK UNIFIED IDEOGRAPH 0x936A 0x5C60 #CJK UNIFIED IDEOGRAPH 0x936B 0x5F92 #CJK UNIFIED IDEOGRAPH 0x936C 0x6597 #CJK UNIFIED IDEOGRAPH 0x936D 0x675C #CJK UNIFIED IDEOGRAPH 0x936E 0x6E21 #CJK UNIFIED IDEOGRAPH 0x936F 0x767B #CJK UNIFIED IDEOGRAPH 0x9370 0x83DF #CJK UNIFIED IDEOGRAPH 0x9371 0x8CED #CJK UNIFIED IDEOGRAPH 0x9372 0x9014 #CJK UNIFIED IDEOGRAPH 0x9373 0x90FD #CJK UNIFIED IDEOGRAPH 0x9374 0x934D #CJK UNIFIED IDEOGRAPH 0x9375 0x7825 #CJK UNIFIED IDEOGRAPH 0x9376 0x783A #CJK UNIFIED IDEOGRAPH 0x9377 0x52AA #CJK UNIFIED IDEOGRAPH 0x9378 0x5EA6 #CJK UNIFIED IDEOGRAPH 0x9379 0x571F #CJK UNIFIED IDEOGRAPH 0x937A 0x5974 #CJK UNIFIED IDEOGRAPH 0x937B 0x6012 #CJK UNIFIED IDEOGRAPH 0x937C 0x5012 #CJK UNIFIED IDEOGRAPH 0x937D 0x515A #CJK UNIFIED IDEOGRAPH 0x937E 0x51AC #CJK UNIFIED IDEOGRAPH 0x9380 0x51CD #CJK UNIFIED IDEOGRAPH 0x9381 0x5200 #CJK UNIFIED IDEOGRAPH 0x9382 0x5510 #CJK UNIFIED IDEOGRAPH 0x9383 0x5854 #CJK UNIFIED IDEOGRAPH 0x9384 0x5858 #CJK UNIFIED IDEOGRAPH 0x9385 0x5957 #CJK UNIFIED IDEOGRAPH 0x9386 0x5B95 #CJK UNIFIED IDEOGRAPH 0x9387 0x5CF6 #CJK UNIFIED IDEOGRAPH 0x9388 0x5D8B #CJK UNIFIED IDEOGRAPH 0x9389 0x60BC #CJK UNIFIED IDEOGRAPH 0x938A 0x6295 #CJK UNIFIED IDEOGRAPH 0x938B 0x642D #CJK UNIFIED IDEOGRAPH 0x938C 0x6771 #CJK UNIFIED IDEOGRAPH 0x938D 0x6843 #CJK UNIFIED IDEOGRAPH 0x938E 0x68BC #CJK UNIFIED IDEOGRAPH 0x938F 0x68DF #CJK UNIFIED IDEOGRAPH 0x9390 0x76D7 #CJK UNIFIED IDEOGRAPH 0x9391 0x6DD8 #CJK UNIFIED IDEOGRAPH 0x9392 0x6E6F #CJK UNIFIED IDEOGRAPH 0x9393 0x6D9B #CJK UNIFIED IDEOGRAPH 0x9394 0x706F #CJK UNIFIED IDEOGRAPH 0x9395 0x71C8 #CJK UNIFIED IDEOGRAPH 0x9396 0x5F53 #CJK UNIFIED IDEOGRAPH 0x9397 0x75D8 #CJK UNIFIED IDEOGRAPH 0x9398 0x7977 #CJK UNIFIED IDEOGRAPH 0x9399 0x7B49 #CJK UNIFIED IDEOGRAPH 0x939A 0x7B54 #CJK UNIFIED IDEOGRAPH 0x939B 0x7B52 #CJK UNIFIED IDEOGRAPH 0x939C 0x7CD6 #CJK UNIFIED IDEOGRAPH 0x939D 0x7D71 #CJK UNIFIED IDEOGRAPH 0x939E 0x5230 #CJK UNIFIED IDEOGRAPH 0x939F 0x8463 #CJK UNIFIED IDEOGRAPH 0x93A0 0x8569 #CJK UNIFIED IDEOGRAPH 0x93A1 0x85E4 #CJK UNIFIED IDEOGRAPH 0x93A2 0x8A0E #CJK UNIFIED IDEOGRAPH 0x93A3 0x8B04 #CJK UNIFIED IDEOGRAPH 0x93A4 0x8C46 #CJK UNIFIED IDEOGRAPH 0x93A5 0x8E0F #CJK UNIFIED IDEOGRAPH 0x93A6 0x9003 #CJK UNIFIED IDEOGRAPH 0x93A7 0x900F #CJK UNIFIED IDEOGRAPH 0x93A8 0x9419 #CJK UNIFIED IDEOGRAPH 0x93A9 0x9676 #CJK UNIFIED IDEOGRAPH 0x93AA 0x982D #CJK UNIFIED IDEOGRAPH 0x93AB 0x9A30 #CJK UNIFIED IDEOGRAPH 0x93AC 0x95D8 #CJK UNIFIED IDEOGRAPH 0x93AD 0x50CD #CJK UNIFIED IDEOGRAPH 0x93AE 0x52D5 #CJK UNIFIED IDEOGRAPH 0x93AF 0x540C #CJK UNIFIED IDEOGRAPH 0x93B0 0x5802 #CJK UNIFIED IDEOGRAPH 0x93B1 0x5C0E #CJK UNIFIED IDEOGRAPH 0x93B2 0x61A7 #CJK UNIFIED IDEOGRAPH 0x93B3 0x649E #CJK UNIFIED IDEOGRAPH 0x93B4 0x6D1E #CJK UNIFIED IDEOGRAPH 0x93B5 0x77B3 #CJK UNIFIED IDEOGRAPH 0x93B6 0x7AE5 #CJK UNIFIED IDEOGRAPH 0x93B7 0x80F4 #CJK UNIFIED IDEOGRAPH 0x93B8 0x8404 #CJK UNIFIED IDEOGRAPH 0x93B9 0x9053 #CJK UNIFIED IDEOGRAPH 0x93BA 0x9285 #CJK UNIFIED IDEOGRAPH 0x93BB 0x5CE0 #CJK UNIFIED IDEOGRAPH 0x93BC 0x9D07 #CJK UNIFIED IDEOGRAPH 0x93BD 0x533F #CJK UNIFIED IDEOGRAPH 0x93BE 0x5F97 #CJK UNIFIED IDEOGRAPH 0x93BF 0x5FB3 #CJK UNIFIED IDEOGRAPH 0x93C0 0x6D9C #CJK UNIFIED IDEOGRAPH 0x93C1 0x7279 #CJK UNIFIED IDEOGRAPH 0x93C2 0x7763 #CJK UNIFIED IDEOGRAPH 0x93C3 0x79BF #CJK UNIFIED IDEOGRAPH 0x93C4 0x7BE4 #CJK UNIFIED IDEOGRAPH 0x93C5 0x6BD2 #CJK UNIFIED IDEOGRAPH 0x93C6 0x72EC #CJK UNIFIED IDEOGRAPH 0x93C7 0x8AAD #CJK UNIFIED IDEOGRAPH 0x93C8 0x6803 #CJK UNIFIED IDEOGRAPH 0x93C9 0x6A61 #CJK UNIFIED IDEOGRAPH 0x93CA 0x51F8 #CJK UNIFIED IDEOGRAPH 0x93CB 0x7A81 #CJK UNIFIED IDEOGRAPH 0x93CC 0x6934 #CJK UNIFIED IDEOGRAPH 0x93CD 0x5C4A #CJK UNIFIED IDEOGRAPH 0x93CE 0x9CF6 #CJK UNIFIED IDEOGRAPH 0x93CF 0x82EB #CJK UNIFIED IDEOGRAPH 0x93D0 0x5BC5 #CJK UNIFIED IDEOGRAPH 0x93D1 0x9149 #CJK UNIFIED IDEOGRAPH 0x93D2 0x701E #CJK UNIFIED IDEOGRAPH 0x93D3 0x5678 #CJK UNIFIED IDEOGRAPH 0x93D4 0x5C6F #CJK UNIFIED IDEOGRAPH 0x93D5 0x60C7 #CJK UNIFIED IDEOGRAPH 0x93D6 0x6566 #CJK UNIFIED IDEOGRAPH 0x93D7 0x6C8C #CJK UNIFIED IDEOGRAPH 0x93D8 0x8C5A #CJK UNIFIED IDEOGRAPH 0x93D9 0x9041 #CJK UNIFIED IDEOGRAPH 0x93DA 0x9813 #CJK UNIFIED IDEOGRAPH 0x93DB 0x5451 #CJK UNIFIED IDEOGRAPH 0x93DC 0x66C7 #CJK UNIFIED IDEOGRAPH 0x93DD 0x920D #CJK UNIFIED IDEOGRAPH 0x93DE 0x5948 #CJK UNIFIED IDEOGRAPH 0x93DF 0x90A3 #CJK UNIFIED IDEOGRAPH 0x93E0 0x5185 #CJK UNIFIED IDEOGRAPH 0x93E1 0x4E4D #CJK UNIFIED IDEOGRAPH 0x93E2 0x51EA #CJK UNIFIED IDEOGRAPH 0x93E3 0x8599 #CJK UNIFIED IDEOGRAPH 0x93E4 0x8B0E #CJK UNIFIED IDEOGRAPH 0x93E5 0x7058 #CJK UNIFIED IDEOGRAPH 0x93E6 0x637A #CJK UNIFIED IDEOGRAPH 0x93E7 0x934B #CJK UNIFIED IDEOGRAPH 0x93E8 0x6962 #CJK UNIFIED IDEOGRAPH 0x93E9 0x99B4 #CJK UNIFIED IDEOGRAPH 0x93EA 0x7E04 #CJK UNIFIED IDEOGRAPH 0x93EB 0x7577 #CJK UNIFIED IDEOGRAPH 0x93EC 0x5357 #CJK UNIFIED IDEOGRAPH 0x93ED 0x6960 #CJK UNIFIED IDEOGRAPH 0x93EE 0x8EDF #CJK UNIFIED IDEOGRAPH 0x93EF 0x96E3 #CJK UNIFIED IDEOGRAPH 0x93F0 0x6C5D #CJK UNIFIED IDEOGRAPH 0x93F1 0x4E8C #CJK UNIFIED IDEOGRAPH 0x93F2 0x5C3C #CJK UNIFIED IDEOGRAPH 0x93F3 0x5F10 #CJK UNIFIED IDEOGRAPH 0x93F4 0x8FE9 #CJK UNIFIED IDEOGRAPH 0x93F5 0x5302 #CJK UNIFIED IDEOGRAPH 0x93F6 0x8CD1 #CJK UNIFIED IDEOGRAPH 0x93F7 0x8089 #CJK UNIFIED IDEOGRAPH 0x93F8 0x8679 #CJK UNIFIED IDEOGRAPH 0x93F9 0x5EFF #CJK UNIFIED IDEOGRAPH 0x93FA 0x65E5 #CJK UNIFIED IDEOGRAPH 0x93FB 0x4E73 #CJK UNIFIED IDEOGRAPH 0x93FC 0x5165 #CJK UNIFIED IDEOGRAPH 0x9440 0x5982 #CJK UNIFIED IDEOGRAPH 0x9441 0x5C3F #CJK UNIFIED IDEOGRAPH 0x9442 0x97EE #CJK UNIFIED IDEOGRAPH 0x9443 0x4EFB #CJK UNIFIED IDEOGRAPH 0x9444 0x598A #CJK UNIFIED IDEOGRAPH 0x9445 0x5FCD #CJK UNIFIED IDEOGRAPH 0x9446 0x8A8D #CJK UNIFIED IDEOGRAPH 0x9447 0x6FE1 #CJK UNIFIED IDEOGRAPH 0x9448 0x79B0 #CJK UNIFIED IDEOGRAPH 0x9449 0x7962 #CJK UNIFIED IDEOGRAPH 0x944A 0x5BE7 #CJK UNIFIED IDEOGRAPH 0x944B 0x8471 #CJK UNIFIED IDEOGRAPH 0x944C 0x732B #CJK UNIFIED IDEOGRAPH 0x944D 0x71B1 #CJK UNIFIED IDEOGRAPH 0x944E 0x5E74 #CJK UNIFIED IDEOGRAPH 0x944F 0x5FF5 #CJK UNIFIED IDEOGRAPH 0x9450 0x637B #CJK UNIFIED IDEOGRAPH 0x9451 0x649A #CJK UNIFIED IDEOGRAPH 0x9452 0x71C3 #CJK UNIFIED IDEOGRAPH 0x9453 0x7C98 #CJK UNIFIED IDEOGRAPH 0x9454 0x4E43 #CJK UNIFIED IDEOGRAPH 0x9455 0x5EFC #CJK UNIFIED IDEOGRAPH 0x9456 0x4E4B #CJK UNIFIED IDEOGRAPH 0x9457 0x57DC #CJK UNIFIED IDEOGRAPH 0x9458 0x56A2 #CJK UNIFIED IDEOGRAPH 0x9459 0x60A9 #CJK UNIFIED IDEOGRAPH 0x945A 0x6FC3 #CJK UNIFIED IDEOGRAPH 0x945B 0x7D0D #CJK UNIFIED IDEOGRAPH 0x945C 0x80FD #CJK UNIFIED IDEOGRAPH 0x945D 0x8133 #CJK UNIFIED IDEOGRAPH 0x945E 0x81BF #CJK UNIFIED IDEOGRAPH 0x945F 0x8FB2 #CJK UNIFIED IDEOGRAPH 0x9460 0x8997 #CJK UNIFIED IDEOGRAPH 0x9461 0x86A4 #CJK UNIFIED IDEOGRAPH 0x9462 0x5DF4 #CJK UNIFIED IDEOGRAPH 0x9463 0x628A #CJK UNIFIED IDEOGRAPH 0x9464 0x64AD #CJK UNIFIED IDEOGRAPH 0x9465 0x8987 #CJK UNIFIED IDEOGRAPH 0x9466 0x6777 #CJK UNIFIED IDEOGRAPH 0x9467 0x6CE2 #CJK UNIFIED IDEOGRAPH 0x9468 0x6D3E #CJK UNIFIED IDEOGRAPH 0x9469 0x7436 #CJK UNIFIED IDEOGRAPH 0x946A 0x7834 #CJK UNIFIED IDEOGRAPH 0x946B 0x5A46 #CJK UNIFIED IDEOGRAPH 0x946C 0x7F75 #CJK UNIFIED IDEOGRAPH 0x946D 0x82AD #CJK UNIFIED IDEOGRAPH 0x946E 0x99AC #CJK UNIFIED IDEOGRAPH 0x946F 0x4FF3 #CJK UNIFIED IDEOGRAPH 0x9470 0x5EC3 #CJK UNIFIED IDEOGRAPH 0x9471 0x62DD #CJK UNIFIED IDEOGRAPH 0x9472 0x6392 #CJK UNIFIED IDEOGRAPH 0x9473 0x6557 #CJK UNIFIED IDEOGRAPH 0x9474 0x676F #CJK UNIFIED IDEOGRAPH 0x9475 0x76C3 #CJK UNIFIED IDEOGRAPH 0x9476 0x724C #CJK UNIFIED IDEOGRAPH 0x9477 0x80CC #CJK UNIFIED IDEOGRAPH 0x9478 0x80BA #CJK UNIFIED IDEOGRAPH 0x9479 0x8F29 #CJK UNIFIED IDEOGRAPH 0x947A 0x914D #CJK UNIFIED IDEOGRAPH 0x947B 0x500D #CJK UNIFIED IDEOGRAPH 0x947C 0x57F9 #CJK UNIFIED IDEOGRAPH 0x947D 0x5A92 #CJK UNIFIED IDEOGRAPH 0x947E 0x6885 #CJK UNIFIED IDEOGRAPH 0x9480 0x6973 #CJK UNIFIED IDEOGRAPH 0x9481 0x7164 #CJK UNIFIED IDEOGRAPH 0x9482 0x72FD #CJK UNIFIED IDEOGRAPH 0x9483 0x8CB7 #CJK UNIFIED IDEOGRAPH 0x9484 0x58F2 #CJK UNIFIED IDEOGRAPH 0x9485 0x8CE0 #CJK UNIFIED IDEOGRAPH 0x9486 0x966A #CJK UNIFIED IDEOGRAPH 0x9487 0x9019 #CJK UNIFIED IDEOGRAPH 0x9488 0x877F #CJK UNIFIED IDEOGRAPH 0x9489 0x79E4 #CJK UNIFIED IDEOGRAPH 0x948A 0x77E7 #CJK UNIFIED IDEOGRAPH 0x948B 0x8429 #CJK UNIFIED IDEOGRAPH 0x948C 0x4F2F #CJK UNIFIED IDEOGRAPH 0x948D 0x5265 #CJK UNIFIED IDEOGRAPH 0x948E 0x535A #CJK UNIFIED IDEOGRAPH 0x948F 0x62CD #CJK UNIFIED IDEOGRAPH 0x9490 0x67CF #CJK UNIFIED IDEOGRAPH 0x9491 0x6CCA #CJK UNIFIED IDEOGRAPH 0x9492 0x767D #CJK UNIFIED IDEOGRAPH 0x9493 0x7B94 #CJK UNIFIED IDEOGRAPH 0x9494 0x7C95 #CJK UNIFIED IDEOGRAPH 0x9495 0x8236 #CJK UNIFIED IDEOGRAPH 0x9496 0x8584 #CJK UNIFIED IDEOGRAPH 0x9497 0x8FEB #CJK UNIFIED IDEOGRAPH 0x9498 0x66DD #CJK UNIFIED IDEOGRAPH 0x9499 0x6F20 #CJK UNIFIED IDEOGRAPH 0x949A 0x7206 #CJK UNIFIED IDEOGRAPH 0x949B 0x7E1B #CJK UNIFIED IDEOGRAPH 0x949C 0x83AB #CJK UNIFIED IDEOGRAPH 0x949D 0x99C1 #CJK UNIFIED IDEOGRAPH 0x949E 0x9EA6 #CJK UNIFIED IDEOGRAPH 0x949F 0x51FD #CJK UNIFIED IDEOGRAPH 0x94A0 0x7BB1 #CJK UNIFIED IDEOGRAPH 0x94A1 0x7872 #CJK UNIFIED IDEOGRAPH 0x94A2 0x7BB8 #CJK UNIFIED IDEOGRAPH 0x94A3 0x8087 #CJK UNIFIED IDEOGRAPH 0x94A4 0x7B48 #CJK UNIFIED IDEOGRAPH 0x94A5 0x6AE8 #CJK UNIFIED IDEOGRAPH 0x94A6 0x5E61 #CJK UNIFIED IDEOGRAPH 0x94A7 0x808C #CJK UNIFIED IDEOGRAPH 0x94A8 0x7551 #CJK UNIFIED IDEOGRAPH 0x94A9 0x7560 #CJK UNIFIED IDEOGRAPH 0x94AA 0x516B #CJK UNIFIED IDEOGRAPH 0x94AB 0x9262 #CJK UNIFIED IDEOGRAPH 0x94AC 0x6E8C #CJK UNIFIED IDEOGRAPH 0x94AD 0x767A #CJK UNIFIED IDEOGRAPH 0x94AE 0x9197 #CJK UNIFIED IDEOGRAPH 0x94AF 0x9AEA #CJK UNIFIED IDEOGRAPH 0x94B0 0x4F10 #CJK UNIFIED IDEOGRAPH 0x94B1 0x7F70 #CJK UNIFIED IDEOGRAPH 0x94B2 0x629C #CJK UNIFIED IDEOGRAPH 0x94B3 0x7B4F #CJK UNIFIED IDEOGRAPH 0x94B4 0x95A5 #CJK UNIFIED IDEOGRAPH 0x94B5 0x9CE9 #CJK UNIFIED IDEOGRAPH 0x94B6 0x567A #CJK UNIFIED IDEOGRAPH 0x94B7 0x5859 #CJK UNIFIED IDEOGRAPH 0x94B8 0x86E4 #CJK UNIFIED IDEOGRAPH 0x94B9 0x96BC #CJK UNIFIED IDEOGRAPH 0x94BA 0x4F34 #CJK UNIFIED IDEOGRAPH 0x94BB 0x5224 #CJK UNIFIED IDEOGRAPH 0x94BC 0x534A #CJK UNIFIED IDEOGRAPH 0x94BD 0x53CD #CJK UNIFIED IDEOGRAPH 0x94BE 0x53DB #CJK UNIFIED IDEOGRAPH 0x94BF 0x5E06 #CJK UNIFIED IDEOGRAPH 0x94C0 0x642C #CJK UNIFIED IDEOGRAPH 0x94C1 0x6591 #CJK UNIFIED IDEOGRAPH 0x94C2 0x677F #CJK UNIFIED IDEOGRAPH 0x94C3 0x6C3E #CJK UNIFIED IDEOGRAPH 0x94C4 0x6C4E #CJK UNIFIED IDEOGRAPH 0x94C5 0x7248 #CJK UNIFIED IDEOGRAPH 0x94C6 0x72AF #CJK UNIFIED IDEOGRAPH 0x94C7 0x73ED #CJK UNIFIED IDEOGRAPH 0x94C8 0x7554 #CJK UNIFIED IDEOGRAPH 0x94C9 0x7E41 #CJK UNIFIED IDEOGRAPH 0x94CA 0x822C #CJK UNIFIED IDEOGRAPH 0x94CB 0x85E9 #CJK UNIFIED IDEOGRAPH 0x94CC 0x8CA9 #CJK UNIFIED IDEOGRAPH 0x94CD 0x7BC4 #CJK UNIFIED IDEOGRAPH 0x94CE 0x91C6 #CJK UNIFIED IDEOGRAPH 0x94CF 0x7169 #CJK UNIFIED IDEOGRAPH 0x94D0 0x9812 #CJK UNIFIED IDEOGRAPH 0x94D1 0x98EF #CJK UNIFIED IDEOGRAPH 0x94D2 0x633D #CJK UNIFIED IDEOGRAPH 0x94D3 0x6669 #CJK UNIFIED IDEOGRAPH 0x94D4 0x756A #CJK UNIFIED IDEOGRAPH 0x94D5 0x76E4 #CJK UNIFIED IDEOGRAPH 0x94D6 0x78D0 #CJK UNIFIED IDEOGRAPH 0x94D7 0x8543 #CJK UNIFIED IDEOGRAPH 0x94D8 0x86EE #CJK UNIFIED IDEOGRAPH 0x94D9 0x532A #CJK UNIFIED IDEOGRAPH 0x94DA 0x5351 #CJK UNIFIED IDEOGRAPH 0x94DB 0x5426 #CJK UNIFIED IDEOGRAPH 0x94DC 0x5983 #CJK UNIFIED IDEOGRAPH 0x94DD 0x5E87 #CJK UNIFIED IDEOGRAPH 0x94DE 0x5F7C #CJK UNIFIED IDEOGRAPH 0x94DF 0x60B2 #CJK UNIFIED IDEOGRAPH 0x94E0 0x6249 #CJK UNIFIED IDEOGRAPH 0x94E1 0x6279 #CJK UNIFIED IDEOGRAPH 0x94E2 0x62AB #CJK UNIFIED IDEOGRAPH 0x94E3 0x6590 #CJK UNIFIED IDEOGRAPH 0x94E4 0x6BD4 #CJK UNIFIED IDEOGRAPH 0x94E5 0x6CCC #CJK UNIFIED IDEOGRAPH 0x94E6 0x75B2 #CJK UNIFIED IDEOGRAPH 0x94E7 0x76AE #CJK UNIFIED IDEOGRAPH 0x94E8 0x7891 #CJK UNIFIED IDEOGRAPH 0x94E9 0x79D8 #CJK UNIFIED IDEOGRAPH 0x94EA 0x7DCB #CJK UNIFIED IDEOGRAPH 0x94EB 0x7F77 #CJK UNIFIED IDEOGRAPH 0x94EC 0x80A5 #CJK UNIFIED IDEOGRAPH 0x94ED 0x88AB #CJK UNIFIED IDEOGRAPH 0x94EE 0x8AB9 #CJK UNIFIED IDEOGRAPH 0x94EF 0x8CBB #CJK UNIFIED IDEOGRAPH 0x94F0 0x907F #CJK UNIFIED IDEOGRAPH 0x94F1 0x975E #CJK UNIFIED IDEOGRAPH 0x94F2 0x98DB #CJK UNIFIED IDEOGRAPH 0x94F3 0x6A0B #CJK UNIFIED IDEOGRAPH 0x94F4 0x7C38 #CJK UNIFIED IDEOGRAPH 0x94F5 0x5099 #CJK UNIFIED IDEOGRAPH 0x94F6 0x5C3E #CJK UNIFIED IDEOGRAPH 0x94F7 0x5FAE #CJK UNIFIED IDEOGRAPH 0x94F8 0x6787 #CJK UNIFIED IDEOGRAPH 0x94F9 0x6BD8 #CJK UNIFIED IDEOGRAPH 0x94FA 0x7435 #CJK UNIFIED IDEOGRAPH 0x94FB 0x7709 #CJK UNIFIED IDEOGRAPH 0x94FC 0x7F8E #CJK UNIFIED IDEOGRAPH 0x9540 0x9F3B #CJK UNIFIED IDEOGRAPH 0x9541 0x67CA #CJK UNIFIED IDEOGRAPH 0x9542 0x7A17 #CJK UNIFIED IDEOGRAPH 0x9543 0x5339 #CJK UNIFIED IDEOGRAPH 0x9544 0x758B #CJK UNIFIED IDEOGRAPH 0x9545 0x9AED #CJK UNIFIED IDEOGRAPH 0x9546 0x5F66 #CJK UNIFIED IDEOGRAPH 0x9547 0x819D #CJK UNIFIED IDEOGRAPH 0x9548 0x83F1 #CJK UNIFIED IDEOGRAPH 0x9549 0x8098 #CJK UNIFIED IDEOGRAPH 0x954A 0x5F3C #CJK UNIFIED IDEOGRAPH 0x954B 0x5FC5 #CJK UNIFIED IDEOGRAPH 0x954C 0x7562 #CJK UNIFIED IDEOGRAPH 0x954D 0x7B46 #CJK UNIFIED IDEOGRAPH 0x954E 0x903C #CJK UNIFIED IDEOGRAPH 0x954F 0x6867 #CJK UNIFIED IDEOGRAPH 0x9550 0x59EB #CJK UNIFIED IDEOGRAPH 0x9551 0x5A9B #CJK UNIFIED IDEOGRAPH 0x9552 0x7D10 #CJK UNIFIED IDEOGRAPH 0x9553 0x767E #CJK UNIFIED IDEOGRAPH 0x9554 0x8B2C #CJK UNIFIED IDEOGRAPH 0x9555 0x4FF5 #CJK UNIFIED IDEOGRAPH 0x9556 0x5F6A #CJK UNIFIED IDEOGRAPH 0x9557 0x6A19 #CJK UNIFIED IDEOGRAPH 0x9558 0x6C37 #CJK UNIFIED IDEOGRAPH 0x9559 0x6F02 #CJK UNIFIED IDEOGRAPH 0x955A 0x74E2 #CJK UNIFIED IDEOGRAPH 0x955B 0x7968 #CJK UNIFIED IDEOGRAPH 0x955C 0x8868 #CJK UNIFIED IDEOGRAPH 0x955D 0x8A55 #CJK UNIFIED IDEOGRAPH 0x955E 0x8C79 #CJK UNIFIED IDEOGRAPH 0x955F 0x5EDF #CJK UNIFIED IDEOGRAPH 0x9560 0x63CF #CJK UNIFIED IDEOGRAPH 0x9561 0x75C5 #CJK UNIFIED IDEOGRAPH 0x9562 0x79D2 #CJK UNIFIED IDEOGRAPH 0x9563 0x82D7 #CJK UNIFIED IDEOGRAPH 0x9564 0x9328 #CJK UNIFIED IDEOGRAPH 0x9565 0x92F2 #CJK UNIFIED IDEOGRAPH 0x9566 0x849C #CJK UNIFIED IDEOGRAPH 0x9567 0x86ED #CJK UNIFIED IDEOGRAPH 0x9568 0x9C2D #CJK UNIFIED IDEOGRAPH 0x9569 0x54C1 #CJK UNIFIED IDEOGRAPH 0x956A 0x5F6C #CJK UNIFIED IDEOGRAPH 0x956B 0x658C #CJK UNIFIED IDEOGRAPH 0x956C 0x6D5C #CJK UNIFIED IDEOGRAPH 0x956D 0x7015 #CJK UNIFIED IDEOGRAPH 0x956E 0x8CA7 #CJK UNIFIED IDEOGRAPH 0x956F 0x8CD3 #CJK UNIFIED IDEOGRAPH 0x9570 0x983B #CJK UNIFIED IDEOGRAPH 0x9571 0x654F #CJK UNIFIED IDEOGRAPH 0x9572 0x74F6 #CJK UNIFIED IDEOGRAPH 0x9573 0x4E0D #CJK UNIFIED IDEOGRAPH 0x9574 0x4ED8 #CJK UNIFIED IDEOGRAPH 0x9575 0x57E0 #CJK UNIFIED IDEOGRAPH 0x9576 0x592B #CJK UNIFIED IDEOGRAPH 0x9577 0x5A66 #CJK UNIFIED IDEOGRAPH 0x9578 0x5BCC #CJK UNIFIED IDEOGRAPH 0x9579 0x51A8 #CJK UNIFIED IDEOGRAPH 0x957A 0x5E03 #CJK UNIFIED IDEOGRAPH 0x957B 0x5E9C #CJK UNIFIED IDEOGRAPH 0x957C 0x6016 #CJK UNIFIED IDEOGRAPH 0x957D 0x6276 #CJK UNIFIED IDEOGRAPH 0x957E 0x6577 #CJK UNIFIED IDEOGRAPH 0x9580 0x65A7 #CJK UNIFIED IDEOGRAPH 0x9581 0x666E #CJK UNIFIED IDEOGRAPH 0x9582 0x6D6E #CJK UNIFIED IDEOGRAPH 0x9583 0x7236 #CJK UNIFIED IDEOGRAPH 0x9584 0x7B26 #CJK UNIFIED IDEOGRAPH 0x9585 0x8150 #CJK UNIFIED IDEOGRAPH 0x9586 0x819A #CJK UNIFIED IDEOGRAPH 0x9587 0x8299 #CJK UNIFIED IDEOGRAPH 0x9588 0x8B5C #CJK UNIFIED IDEOGRAPH 0x9589 0x8CA0 #CJK UNIFIED IDEOGRAPH 0x958A 0x8CE6 #CJK UNIFIED IDEOGRAPH 0x958B 0x8D74 #CJK UNIFIED IDEOGRAPH 0x958C 0x961C #CJK UNIFIED IDEOGRAPH 0x958D 0x9644 #CJK UNIFIED IDEOGRAPH 0x958E 0x4FAE #CJK UNIFIED IDEOGRAPH 0x958F 0x64AB #CJK UNIFIED IDEOGRAPH 0x9590 0x6B66 #CJK UNIFIED IDEOGRAPH 0x9591 0x821E #CJK UNIFIED IDEOGRAPH 0x9592 0x8461 #CJK UNIFIED IDEOGRAPH 0x9593 0x856A #CJK UNIFIED IDEOGRAPH 0x9594 0x90E8 #CJK UNIFIED IDEOGRAPH 0x9595 0x5C01 #CJK UNIFIED IDEOGRAPH 0x9596 0x6953 #CJK UNIFIED IDEOGRAPH 0x9597 0x98A8 #CJK UNIFIED IDEOGRAPH 0x9598 0x847A #CJK UNIFIED IDEOGRAPH 0x9599 0x8557 #CJK UNIFIED IDEOGRAPH 0x959A 0x4F0F #CJK UNIFIED IDEOGRAPH 0x959B 0x526F #CJK UNIFIED IDEOGRAPH 0x959C 0x5FA9 #CJK UNIFIED IDEOGRAPH 0x959D 0x5E45 #CJK UNIFIED IDEOGRAPH 0x959E 0x670D #CJK UNIFIED IDEOGRAPH 0x959F 0x798F #CJK UNIFIED IDEOGRAPH 0x95A0 0x8179 #CJK UNIFIED IDEOGRAPH 0x95A1 0x8907 #CJK UNIFIED IDEOGRAPH 0x95A2 0x8986 #CJK UNIFIED IDEOGRAPH 0x95A3 0x6DF5 #CJK UNIFIED IDEOGRAPH 0x95A4 0x5F17 #CJK UNIFIED IDEOGRAPH 0x95A5 0x6255 #CJK UNIFIED IDEOGRAPH 0x95A6 0x6CB8 #CJK UNIFIED IDEOGRAPH 0x95A7 0x4ECF #CJK UNIFIED IDEOGRAPH 0x95A8 0x7269 #CJK UNIFIED IDEOGRAPH 0x95A9 0x9B92 #CJK UNIFIED IDEOGRAPH 0x95AA 0x5206 #CJK UNIFIED IDEOGRAPH 0x95AB 0x543B #CJK UNIFIED IDEOGRAPH 0x95AC 0x5674 #CJK UNIFIED IDEOGRAPH 0x95AD 0x58B3 #CJK UNIFIED IDEOGRAPH 0x95AE 0x61A4 #CJK UNIFIED IDEOGRAPH 0x95AF 0x626E #CJK UNIFIED IDEOGRAPH 0x95B0 0x711A #CJK UNIFIED IDEOGRAPH 0x95B1 0x596E #CJK UNIFIED IDEOGRAPH 0x95B2 0x7C89 #CJK UNIFIED IDEOGRAPH 0x95B3 0x7CDE #CJK UNIFIED IDEOGRAPH 0x95B4 0x7D1B #CJK UNIFIED IDEOGRAPH 0x95B5 0x96F0 #CJK UNIFIED IDEOGRAPH 0x95B6 0x6587 #CJK UNIFIED IDEOGRAPH 0x95B7 0x805E #CJK UNIFIED IDEOGRAPH 0x95B8 0x4E19 #CJK UNIFIED IDEOGRAPH 0x95B9 0x4F75 #CJK UNIFIED IDEOGRAPH 0x95BA 0x5175 #CJK UNIFIED IDEOGRAPH 0x95BB 0x5840 #CJK UNIFIED IDEOGRAPH 0x95BC 0x5E63 #CJK UNIFIED IDEOGRAPH 0x95BD 0x5E73 #CJK UNIFIED IDEOGRAPH 0x95BE 0x5F0A #CJK UNIFIED IDEOGRAPH 0x95BF 0x67C4 #CJK UNIFIED IDEOGRAPH 0x95C0 0x4E26 #CJK UNIFIED IDEOGRAPH 0x95C1 0x853D #CJK UNIFIED IDEOGRAPH 0x95C2 0x9589 #CJK UNIFIED IDEOGRAPH 0x95C3 0x965B #CJK UNIFIED IDEOGRAPH 0x95C4 0x7C73 #CJK UNIFIED IDEOGRAPH 0x95C5 0x9801 #CJK UNIFIED IDEOGRAPH 0x95C6 0x50FB #CJK UNIFIED IDEOGRAPH 0x95C7 0x58C1 #CJK UNIFIED IDEOGRAPH 0x95C8 0x7656 #CJK UNIFIED IDEOGRAPH 0x95C9 0x78A7 #CJK UNIFIED IDEOGRAPH 0x95CA 0x5225 #CJK UNIFIED IDEOGRAPH 0x95CB 0x77A5 #CJK UNIFIED IDEOGRAPH 0x95CC 0x8511 #CJK UNIFIED IDEOGRAPH 0x95CD 0x7B86 #CJK UNIFIED IDEOGRAPH 0x95CE 0x504F #CJK UNIFIED IDEOGRAPH 0x95CF 0x5909 #CJK UNIFIED IDEOGRAPH 0x95D0 0x7247 #CJK UNIFIED IDEOGRAPH 0x95D1 0x7BC7 #CJK UNIFIED IDEOGRAPH 0x95D2 0x7DE8 #CJK UNIFIED IDEOGRAPH 0x95D3 0x8FBA #CJK UNIFIED IDEOGRAPH 0x95D4 0x8FD4 #CJK UNIFIED IDEOGRAPH 0x95D5 0x904D #CJK UNIFIED IDEOGRAPH 0x95D6 0x4FBF #CJK UNIFIED IDEOGRAPH 0x95D7 0x52C9 #CJK UNIFIED IDEOGRAPH 0x95D8 0x5A29 #CJK UNIFIED IDEOGRAPH 0x95D9 0x5F01 #CJK UNIFIED IDEOGRAPH 0x95DA 0x97AD #CJK UNIFIED IDEOGRAPH 0x95DB 0x4FDD #CJK UNIFIED IDEOGRAPH 0x95DC 0x8217 #CJK UNIFIED IDEOGRAPH 0x95DD 0x92EA #CJK UNIFIED IDEOGRAPH 0x95DE 0x5703 #CJK UNIFIED IDEOGRAPH 0x95DF 0x6355 #CJK UNIFIED IDEOGRAPH 0x95E0 0x6B69 #CJK UNIFIED IDEOGRAPH 0x95E1 0x752B #CJK UNIFIED IDEOGRAPH 0x95E2 0x88DC #CJK UNIFIED IDEOGRAPH 0x95E3 0x8F14 #CJK UNIFIED IDEOGRAPH 0x95E4 0x7A42 #CJK UNIFIED IDEOGRAPH 0x95E5 0x52DF #CJK UNIFIED IDEOGRAPH 0x95E6 0x5893 #CJK UNIFIED IDEOGRAPH 0x95E7 0x6155 #CJK UNIFIED IDEOGRAPH 0x95E8 0x620A #CJK UNIFIED IDEOGRAPH 0x95E9 0x66AE #CJK UNIFIED IDEOGRAPH 0x95EA 0x6BCD #CJK UNIFIED IDEOGRAPH 0x95EB 0x7C3F #CJK UNIFIED IDEOGRAPH 0x95EC 0x83E9 #CJK UNIFIED IDEOGRAPH 0x95ED 0x5023 #CJK UNIFIED IDEOGRAPH 0x95EE 0x4FF8 #CJK UNIFIED IDEOGRAPH 0x95EF 0x5305 #CJK UNIFIED IDEOGRAPH 0x95F0 0x5446 #CJK UNIFIED IDEOGRAPH 0x95F1 0x5831 #CJK UNIFIED IDEOGRAPH 0x95F2 0x5949 #CJK UNIFIED IDEOGRAPH 0x95F3 0x5B9D #CJK UNIFIED IDEOGRAPH 0x95F4 0x5CF0 #CJK UNIFIED IDEOGRAPH 0x95F5 0x5CEF #CJK UNIFIED IDEOGRAPH 0x95F6 0x5D29 #CJK UNIFIED IDEOGRAPH 0x95F7 0x5E96 #CJK UNIFIED IDEOGRAPH 0x95F8 0x62B1 #CJK UNIFIED IDEOGRAPH 0x95F9 0x6367 #CJK UNIFIED IDEOGRAPH 0x95FA 0x653E #CJK UNIFIED IDEOGRAPH 0x95FB 0x65B9 #CJK UNIFIED IDEOGRAPH 0x95FC 0x670B #CJK UNIFIED IDEOGRAPH 0x9640 0x6CD5 #CJK UNIFIED IDEOGRAPH 0x9641 0x6CE1 #CJK UNIFIED IDEOGRAPH 0x9642 0x70F9 #CJK UNIFIED IDEOGRAPH 0x9643 0x7832 #CJK UNIFIED IDEOGRAPH 0x9644 0x7E2B #CJK UNIFIED IDEOGRAPH 0x9645 0x80DE #CJK UNIFIED IDEOGRAPH 0x9646 0x82B3 #CJK UNIFIED IDEOGRAPH 0x9647 0x840C #CJK UNIFIED IDEOGRAPH 0x9648 0x84EC #CJK UNIFIED IDEOGRAPH 0x9649 0x8702 #CJK UNIFIED IDEOGRAPH 0x964A 0x8912 #CJK UNIFIED IDEOGRAPH 0x964B 0x8A2A #CJK UNIFIED IDEOGRAPH 0x964C 0x8C4A #CJK UNIFIED IDEOGRAPH 0x964D 0x90A6 #CJK UNIFIED IDEOGRAPH 0x964E 0x92D2 #CJK UNIFIED IDEOGRAPH 0x964F 0x98FD #CJK UNIFIED IDEOGRAPH 0x9650 0x9CF3 #CJK UNIFIED IDEOGRAPH 0x9651 0x9D6C #CJK UNIFIED IDEOGRAPH 0x9652 0x4E4F #CJK UNIFIED IDEOGRAPH 0x9653 0x4EA1 #CJK UNIFIED IDEOGRAPH 0x9654 0x508D #CJK UNIFIED IDEOGRAPH 0x9655 0x5256 #CJK UNIFIED IDEOGRAPH 0x9656 0x574A #CJK UNIFIED IDEOGRAPH 0x9657 0x59A8 #CJK UNIFIED IDEOGRAPH 0x9658 0x5E3D #CJK UNIFIED IDEOGRAPH 0x9659 0x5FD8 #CJK UNIFIED IDEOGRAPH 0x965A 0x5FD9 #CJK UNIFIED IDEOGRAPH 0x965B 0x623F #CJK UNIFIED IDEOGRAPH 0x965C 0x66B4 #CJK UNIFIED IDEOGRAPH 0x965D 0x671B #CJK UNIFIED IDEOGRAPH 0x965E 0x67D0 #CJK UNIFIED IDEOGRAPH 0x965F 0x68D2 #CJK UNIFIED IDEOGRAPH 0x9660 0x5192 #CJK UNIFIED IDEOGRAPH 0x9661 0x7D21 #CJK UNIFIED IDEOGRAPH 0x9662 0x80AA #CJK UNIFIED IDEOGRAPH 0x9663 0x81A8 #CJK UNIFIED IDEOGRAPH 0x9664 0x8B00 #CJK UNIFIED IDEOGRAPH 0x9665 0x8C8C #CJK UNIFIED IDEOGRAPH 0x9666 0x8CBF #CJK UNIFIED IDEOGRAPH 0x9667 0x927E #CJK UNIFIED IDEOGRAPH 0x9668 0x9632 #CJK UNIFIED IDEOGRAPH 0x9669 0x5420 #CJK UNIFIED IDEOGRAPH 0x966A 0x982C #CJK UNIFIED IDEOGRAPH 0x966B 0x5317 #CJK UNIFIED IDEOGRAPH 0x966C 0x50D5 #CJK UNIFIED IDEOGRAPH 0x966D 0x535C #CJK UNIFIED IDEOGRAPH 0x966E 0x58A8 #CJK UNIFIED IDEOGRAPH 0x966F 0x64B2 #CJK UNIFIED IDEOGRAPH 0x9670 0x6734 #CJK UNIFIED IDEOGRAPH 0x9671 0x7267 #CJK UNIFIED IDEOGRAPH 0x9672 0x7766 #CJK UNIFIED IDEOGRAPH 0x9673 0x7A46 #CJK UNIFIED IDEOGRAPH 0x9674 0x91E6 #CJK UNIFIED IDEOGRAPH 0x9675 0x52C3 #CJK UNIFIED IDEOGRAPH 0x9676 0x6CA1 #CJK UNIFIED IDEOGRAPH 0x9677 0x6B86 #CJK UNIFIED IDEOGRAPH 0x9678 0x5800 #CJK UNIFIED IDEOGRAPH 0x9679 0x5E4C #CJK UNIFIED IDEOGRAPH 0x967A 0x5954 #CJK UNIFIED IDEOGRAPH 0x967B 0x672C #CJK UNIFIED IDEOGRAPH 0x967C 0x7FFB #CJK UNIFIED IDEOGRAPH 0x967D 0x51E1 #CJK UNIFIED IDEOGRAPH 0x967E 0x76C6 #CJK UNIFIED IDEOGRAPH 0x9680 0x6469 #CJK UNIFIED IDEOGRAPH 0x9681 0x78E8 #CJK UNIFIED IDEOGRAPH 0x9682 0x9B54 #CJK UNIFIED IDEOGRAPH 0x9683 0x9EBB #CJK UNIFIED IDEOGRAPH 0x9684 0x57CB #CJK UNIFIED IDEOGRAPH 0x9685 0x59B9 #CJK UNIFIED IDEOGRAPH 0x9686 0x6627 #CJK UNIFIED IDEOGRAPH 0x9687 0x679A #CJK UNIFIED IDEOGRAPH 0x9688 0x6BCE #CJK UNIFIED IDEOGRAPH 0x9689 0x54E9 #CJK UNIFIED IDEOGRAPH 0x968A 0x69D9 #CJK UNIFIED IDEOGRAPH 0x968B 0x5E55 #CJK UNIFIED IDEOGRAPH 0x968C 0x819C #CJK UNIFIED IDEOGRAPH 0x968D 0x6795 #CJK UNIFIED IDEOGRAPH 0x968E 0x9BAA #CJK UNIFIED IDEOGRAPH 0x968F 0x67FE #CJK UNIFIED IDEOGRAPH 0x9690 0x9C52 #CJK UNIFIED IDEOGRAPH 0x9691 0x685D #CJK UNIFIED IDEOGRAPH 0x9692 0x4EA6 #CJK UNIFIED IDEOGRAPH 0x9693 0x4FE3 #CJK UNIFIED IDEOGRAPH 0x9694 0x53C8 #CJK UNIFIED IDEOGRAPH 0x9695 0x62B9 #CJK UNIFIED IDEOGRAPH 0x9696 0x672B #CJK UNIFIED IDEOGRAPH 0x9697 0x6CAB #CJK UNIFIED IDEOGRAPH 0x9698 0x8FC4 #CJK UNIFIED IDEOGRAPH 0x9699 0x4FAD #CJK UNIFIED IDEOGRAPH 0x969A 0x7E6D #CJK UNIFIED IDEOGRAPH 0x969B 0x9EBF #CJK UNIFIED IDEOGRAPH 0x969C 0x4E07 #CJK UNIFIED IDEOGRAPH 0x969D 0x6162 #CJK UNIFIED IDEOGRAPH 0x969E 0x6E80 #CJK UNIFIED IDEOGRAPH 0x969F 0x6F2B #CJK UNIFIED IDEOGRAPH 0x96A0 0x8513 #CJK UNIFIED IDEOGRAPH 0x96A1 0x5473 #CJK UNIFIED IDEOGRAPH 0x96A2 0x672A #CJK UNIFIED IDEOGRAPH 0x96A3 0x9B45 #CJK UNIFIED IDEOGRAPH 0x96A4 0x5DF3 #CJK UNIFIED IDEOGRAPH 0x96A5 0x7B95 #CJK UNIFIED IDEOGRAPH 0x96A6 0x5CAC #CJK UNIFIED IDEOGRAPH 0x96A7 0x5BC6 #CJK UNIFIED IDEOGRAPH 0x96A8 0x871C #CJK UNIFIED IDEOGRAPH 0x96A9 0x6E4A #CJK UNIFIED IDEOGRAPH 0x96AA 0x84D1 #CJK UNIFIED IDEOGRAPH 0x96AB 0x7A14 #CJK UNIFIED IDEOGRAPH 0x96AC 0x8108 #CJK UNIFIED IDEOGRAPH 0x96AD 0x5999 #CJK UNIFIED IDEOGRAPH 0x96AE 0x7C8D #CJK UNIFIED IDEOGRAPH 0x96AF 0x6C11 #CJK UNIFIED IDEOGRAPH 0x96B0 0x7720 #CJK UNIFIED IDEOGRAPH 0x96B1 0x52D9 #CJK UNIFIED IDEOGRAPH 0x96B2 0x5922 #CJK UNIFIED IDEOGRAPH 0x96B3 0x7121 #CJK UNIFIED IDEOGRAPH 0x96B4 0x725F #CJK UNIFIED IDEOGRAPH 0x96B5 0x77DB #CJK UNIFIED IDEOGRAPH 0x96B6 0x9727 #CJK UNIFIED IDEOGRAPH 0x96B7 0x9D61 #CJK UNIFIED IDEOGRAPH 0x96B8 0x690B #CJK UNIFIED IDEOGRAPH 0x96B9 0x5A7F #CJK UNIFIED IDEOGRAPH 0x96BA 0x5A18 #CJK UNIFIED IDEOGRAPH 0x96BB 0x51A5 #CJK UNIFIED IDEOGRAPH 0x96BC 0x540D #CJK UNIFIED IDEOGRAPH 0x96BD 0x547D #CJK UNIFIED IDEOGRAPH 0x96BE 0x660E #CJK UNIFIED IDEOGRAPH 0x96BF 0x76DF #CJK UNIFIED IDEOGRAPH 0x96C0 0x8FF7 #CJK UNIFIED IDEOGRAPH 0x96C1 0x9298 #CJK UNIFIED IDEOGRAPH 0x96C2 0x9CF4 #CJK UNIFIED IDEOGRAPH 0x96C3 0x59EA #CJK UNIFIED IDEOGRAPH 0x96C4 0x725D #CJK UNIFIED IDEOGRAPH 0x96C5 0x6EC5 #CJK UNIFIED IDEOGRAPH 0x96C6 0x514D #CJK UNIFIED IDEOGRAPH 0x96C7 0x68C9 #CJK UNIFIED IDEOGRAPH 0x96C8 0x7DBF #CJK UNIFIED IDEOGRAPH 0x96C9 0x7DEC #CJK UNIFIED IDEOGRAPH 0x96CA 0x9762 #CJK UNIFIED IDEOGRAPH 0x96CB 0x9EBA #CJK UNIFIED IDEOGRAPH 0x96CC 0x6478 #CJK UNIFIED IDEOGRAPH 0x96CD 0x6A21 #CJK UNIFIED IDEOGRAPH 0x96CE 0x8302 #CJK UNIFIED IDEOGRAPH 0x96CF 0x5984 #CJK UNIFIED IDEOGRAPH 0x96D0 0x5B5F #CJK UNIFIED IDEOGRAPH 0x96D1 0x6BDB #CJK UNIFIED IDEOGRAPH 0x96D2 0x731B #CJK UNIFIED IDEOGRAPH 0x96D3 0x76F2 #CJK UNIFIED IDEOGRAPH 0x96D4 0x7DB2 #CJK UNIFIED IDEOGRAPH 0x96D5 0x8017 #CJK UNIFIED IDEOGRAPH 0x96D6 0x8499 #CJK UNIFIED IDEOGRAPH 0x96D7 0x5132 #CJK UNIFIED IDEOGRAPH 0x96D8 0x6728 #CJK UNIFIED IDEOGRAPH 0x96D9 0x9ED9 #CJK UNIFIED IDEOGRAPH 0x96DA 0x76EE #CJK UNIFIED IDEOGRAPH 0x96DB 0x6762 #CJK UNIFIED IDEOGRAPH 0x96DC 0x52FF #CJK UNIFIED IDEOGRAPH 0x96DD 0x9905 #CJK UNIFIED IDEOGRAPH 0x96DE 0x5C24 #CJK UNIFIED IDEOGRAPH 0x96DF 0x623B #CJK UNIFIED IDEOGRAPH 0x96E0 0x7C7E #CJK UNIFIED IDEOGRAPH 0x96E1 0x8CB0 #CJK UNIFIED IDEOGRAPH 0x96E2 0x554F #CJK UNIFIED IDEOGRAPH 0x96E3 0x60B6 #CJK UNIFIED IDEOGRAPH 0x96E4 0x7D0B #CJK UNIFIED IDEOGRAPH 0x96E5 0x9580 #CJK UNIFIED IDEOGRAPH 0x96E6 0x5301 #CJK UNIFIED IDEOGRAPH 0x96E7 0x4E5F #CJK UNIFIED IDEOGRAPH 0x96E8 0x51B6 #CJK UNIFIED IDEOGRAPH 0x96E9 0x591C #CJK UNIFIED IDEOGRAPH 0x96EA 0x723A #CJK UNIFIED IDEOGRAPH 0x96EB 0x8036 #CJK UNIFIED IDEOGRAPH 0x96EC 0x91CE #CJK UNIFIED IDEOGRAPH 0x96ED 0x5F25 #CJK UNIFIED IDEOGRAPH 0x96EE 0x77E2 #CJK UNIFIED IDEOGRAPH 0x96EF 0x5384 #CJK UNIFIED IDEOGRAPH 0x96F0 0x5F79 #CJK UNIFIED IDEOGRAPH 0x96F1 0x7D04 #CJK UNIFIED IDEOGRAPH 0x96F2 0x85AC #CJK UNIFIED IDEOGRAPH 0x96F3 0x8A33 #CJK UNIFIED IDEOGRAPH 0x96F4 0x8E8D #CJK UNIFIED IDEOGRAPH 0x96F5 0x9756 #CJK UNIFIED IDEOGRAPH 0x96F6 0x67F3 #CJK UNIFIED IDEOGRAPH 0x96F7 0x85AE #CJK UNIFIED IDEOGRAPH 0x96F8 0x9453 #CJK UNIFIED IDEOGRAPH 0x96F9 0x6109 #CJK UNIFIED IDEOGRAPH 0x96FA 0x6108 #CJK UNIFIED IDEOGRAPH 0x96FB 0x6CB9 #CJK UNIFIED IDEOGRAPH 0x96FC 0x7652 #CJK UNIFIED IDEOGRAPH 0x9740 0x8AED #CJK UNIFIED IDEOGRAPH 0x9741 0x8F38 #CJK UNIFIED IDEOGRAPH 0x9742 0x552F #CJK UNIFIED IDEOGRAPH 0x9743 0x4F51 #CJK UNIFIED IDEOGRAPH 0x9744 0x512A #CJK UNIFIED IDEOGRAPH 0x9745 0x52C7 #CJK UNIFIED IDEOGRAPH 0x9746 0x53CB #CJK UNIFIED IDEOGRAPH 0x9747 0x5BA5 #CJK UNIFIED IDEOGRAPH 0x9748 0x5E7D #CJK UNIFIED IDEOGRAPH 0x9749 0x60A0 #CJK UNIFIED IDEOGRAPH 0x974A 0x6182 #CJK UNIFIED IDEOGRAPH 0x974B 0x63D6 #CJK UNIFIED IDEOGRAPH 0x974C 0x6709 #CJK UNIFIED IDEOGRAPH 0x974D 0x67DA #CJK UNIFIED IDEOGRAPH 0x974E 0x6E67 #CJK UNIFIED IDEOGRAPH 0x974F 0x6D8C #CJK UNIFIED IDEOGRAPH 0x9750 0x7336 #CJK UNIFIED IDEOGRAPH 0x9751 0x7337 #CJK UNIFIED IDEOGRAPH 0x9752 0x7531 #CJK UNIFIED IDEOGRAPH 0x9753 0x7950 #CJK UNIFIED IDEOGRAPH 0x9754 0x88D5 #CJK UNIFIED IDEOGRAPH 0x9755 0x8A98 #CJK UNIFIED IDEOGRAPH 0x9756 0x904A #CJK UNIFIED IDEOGRAPH 0x9757 0x9091 #CJK UNIFIED IDEOGRAPH 0x9758 0x90F5 #CJK UNIFIED IDEOGRAPH 0x9759 0x96C4 #CJK UNIFIED IDEOGRAPH 0x975A 0x878D #CJK UNIFIED IDEOGRAPH 0x975B 0x5915 #CJK UNIFIED IDEOGRAPH 0x975C 0x4E88 #CJK UNIFIED IDEOGRAPH 0x975D 0x4F59 #CJK UNIFIED IDEOGRAPH 0x975E 0x4E0E #CJK UNIFIED IDEOGRAPH 0x975F 0x8A89 #CJK UNIFIED IDEOGRAPH 0x9760 0x8F3F #CJK UNIFIED IDEOGRAPH 0x9761 0x9810 #CJK UNIFIED IDEOGRAPH 0x9762 0x50AD #CJK UNIFIED IDEOGRAPH 0x9763 0x5E7C #CJK UNIFIED IDEOGRAPH 0x9764 0x5996 #CJK UNIFIED IDEOGRAPH 0x9765 0x5BB9 #CJK UNIFIED IDEOGRAPH 0x9766 0x5EB8 #CJK UNIFIED IDEOGRAPH 0x9767 0x63DA #CJK UNIFIED IDEOGRAPH 0x9768 0x63FA #CJK UNIFIED IDEOGRAPH 0x9769 0x64C1 #CJK UNIFIED IDEOGRAPH 0x976A 0x66DC #CJK UNIFIED IDEOGRAPH 0x976B 0x694A #CJK UNIFIED IDEOGRAPH 0x976C 0x69D8 #CJK UNIFIED IDEOGRAPH 0x976D 0x6D0B #CJK UNIFIED IDEOGRAPH 0x976E 0x6EB6 #CJK UNIFIED IDEOGRAPH 0x976F 0x7194 #CJK UNIFIED IDEOGRAPH 0x9770 0x7528 #CJK UNIFIED IDEOGRAPH 0x9771 0x7AAF #CJK UNIFIED IDEOGRAPH 0x9772 0x7F8A #CJK UNIFIED IDEOGRAPH 0x9773 0x8000 #CJK UNIFIED IDEOGRAPH 0x9774 0x8449 #CJK UNIFIED IDEOGRAPH 0x9775 0x84C9 #CJK UNIFIED IDEOGRAPH 0x9776 0x8981 #CJK UNIFIED IDEOGRAPH 0x9777 0x8B21 #CJK UNIFIED IDEOGRAPH 0x9778 0x8E0A #CJK UNIFIED IDEOGRAPH 0x9779 0x9065 #CJK UNIFIED IDEOGRAPH 0x977A 0x967D #CJK UNIFIED IDEOGRAPH 0x977B 0x990A #CJK UNIFIED IDEOGRAPH 0x977C 0x617E #CJK UNIFIED IDEOGRAPH 0x977D 0x6291 #CJK UNIFIED IDEOGRAPH 0x977E 0x6B32 #CJK UNIFIED IDEOGRAPH 0x9780 0x6C83 #CJK UNIFIED IDEOGRAPH 0x9781 0x6D74 #CJK UNIFIED IDEOGRAPH 0x9782 0x7FCC #CJK UNIFIED IDEOGRAPH 0x9783 0x7FFC #CJK UNIFIED IDEOGRAPH 0x9784 0x6DC0 #CJK UNIFIED IDEOGRAPH 0x9785 0x7F85 #CJK UNIFIED IDEOGRAPH 0x9786 0x87BA #CJK UNIFIED IDEOGRAPH 0x9787 0x88F8 #CJK UNIFIED IDEOGRAPH 0x9788 0x6765 #CJK UNIFIED IDEOGRAPH 0x9789 0x83B1 #CJK UNIFIED IDEOGRAPH 0x978A 0x983C #CJK UNIFIED IDEOGRAPH 0x978B 0x96F7 #CJK UNIFIED IDEOGRAPH 0x978C 0x6D1B #CJK UNIFIED IDEOGRAPH 0x978D 0x7D61 #CJK UNIFIED IDEOGRAPH 0x978E 0x843D #CJK UNIFIED IDEOGRAPH 0x978F 0x916A #CJK UNIFIED IDEOGRAPH 0x9790 0x4E71 #CJK UNIFIED IDEOGRAPH 0x9791 0x5375 #CJK UNIFIED IDEOGRAPH 0x9792 0x5D50 #CJK UNIFIED IDEOGRAPH 0x9793 0x6B04 #CJK UNIFIED IDEOGRAPH 0x9794 0x6FEB #CJK UNIFIED IDEOGRAPH 0x9795 0x85CD #CJK UNIFIED IDEOGRAPH 0x9796 0x862D #CJK UNIFIED IDEOGRAPH 0x9797 0x89A7 #CJK UNIFIED IDEOGRAPH 0x9798 0x5229 #CJK UNIFIED IDEOGRAPH 0x9799 0x540F #CJK UNIFIED IDEOGRAPH 0x979A 0x5C65 #CJK UNIFIED IDEOGRAPH 0x979B 0x674E #CJK UNIFIED IDEOGRAPH 0x979C 0x68A8 #CJK UNIFIED IDEOGRAPH 0x979D 0x7406 #CJK UNIFIED IDEOGRAPH 0x979E 0x7483 #CJK UNIFIED IDEOGRAPH 0x979F 0x75E2 #CJK UNIFIED IDEOGRAPH 0x97A0 0x88CF #CJK UNIFIED IDEOGRAPH 0x97A1 0x88E1 #CJK UNIFIED IDEOGRAPH 0x97A2 0x91CC #CJK UNIFIED IDEOGRAPH 0x97A3 0x96E2 #CJK UNIFIED IDEOGRAPH 0x97A4 0x9678 #CJK UNIFIED IDEOGRAPH 0x97A5 0x5F8B #CJK UNIFIED IDEOGRAPH 0x97A6 0x7387 #CJK UNIFIED IDEOGRAPH 0x97A7 0x7ACB #CJK UNIFIED IDEOGRAPH 0x97A8 0x844E #CJK UNIFIED IDEOGRAPH 0x97A9 0x63A0 #CJK UNIFIED IDEOGRAPH 0x97AA 0x7565 #CJK UNIFIED IDEOGRAPH 0x97AB 0x5289 #CJK UNIFIED IDEOGRAPH 0x97AC 0x6D41 #CJK UNIFIED IDEOGRAPH 0x97AD 0x6E9C #CJK UNIFIED IDEOGRAPH 0x97AE 0x7409 #CJK UNIFIED IDEOGRAPH 0x97AF 0x7559 #CJK UNIFIED IDEOGRAPH 0x97B0 0x786B #CJK UNIFIED IDEOGRAPH 0x97B1 0x7C92 #CJK UNIFIED IDEOGRAPH 0x97B2 0x9686 #CJK UNIFIED IDEOGRAPH 0x97B3 0x7ADC #CJK UNIFIED IDEOGRAPH 0x97B4 0x9F8D #CJK UNIFIED IDEOGRAPH 0x97B5 0x4FB6 #CJK UNIFIED IDEOGRAPH 0x97B6 0x616E #CJK UNIFIED IDEOGRAPH 0x97B7 0x65C5 #CJK UNIFIED IDEOGRAPH 0x97B8 0x865C #CJK UNIFIED IDEOGRAPH 0x97B9 0x4E86 #CJK UNIFIED IDEOGRAPH 0x97BA 0x4EAE #CJK UNIFIED IDEOGRAPH 0x97BB 0x50DA #CJK UNIFIED IDEOGRAPH 0x97BC 0x4E21 #CJK UNIFIED IDEOGRAPH 0x97BD 0x51CC #CJK UNIFIED IDEOGRAPH 0x97BE 0x5BEE #CJK UNIFIED IDEOGRAPH 0x97BF 0x6599 #CJK UNIFIED IDEOGRAPH 0x97C0 0x6881 #CJK UNIFIED IDEOGRAPH 0x97C1 0x6DBC #CJK UNIFIED IDEOGRAPH 0x97C2 0x731F #CJK UNIFIED IDEOGRAPH 0x97C3 0x7642 #CJK UNIFIED IDEOGRAPH 0x97C4 0x77AD #CJK UNIFIED IDEOGRAPH 0x97C5 0x7A1C #CJK UNIFIED IDEOGRAPH 0x97C6 0x7CE7 #CJK UNIFIED IDEOGRAPH 0x97C7 0x826F #CJK UNIFIED IDEOGRAPH 0x97C8 0x8AD2 #CJK UNIFIED IDEOGRAPH 0x97C9 0x907C #CJK UNIFIED IDEOGRAPH 0x97CA 0x91CF #CJK UNIFIED IDEOGRAPH 0x97CB 0x9675 #CJK UNIFIED IDEOGRAPH 0x97CC 0x9818 #CJK UNIFIED IDEOGRAPH 0x97CD 0x529B #CJK UNIFIED IDEOGRAPH 0x97CE 0x7DD1 #CJK UNIFIED IDEOGRAPH 0x97CF 0x502B #CJK UNIFIED IDEOGRAPH 0x97D0 0x5398 #CJK UNIFIED IDEOGRAPH 0x97D1 0x6797 #CJK UNIFIED IDEOGRAPH 0x97D2 0x6DCB #CJK UNIFIED IDEOGRAPH 0x97D3 0x71D0 #CJK UNIFIED IDEOGRAPH 0x97D4 0x7433 #CJK UNIFIED IDEOGRAPH 0x97D5 0x81E8 #CJK UNIFIED IDEOGRAPH 0x97D6 0x8F2A #CJK UNIFIED IDEOGRAPH 0x97D7 0x96A3 #CJK UNIFIED IDEOGRAPH 0x97D8 0x9C57 #CJK UNIFIED IDEOGRAPH 0x97D9 0x9E9F #CJK UNIFIED IDEOGRAPH 0x97DA 0x7460 #CJK UNIFIED IDEOGRAPH 0x97DB 0x5841 #CJK UNIFIED IDEOGRAPH 0x97DC 0x6D99 #CJK UNIFIED IDEOGRAPH 0x97DD 0x7D2F #CJK UNIFIED IDEOGRAPH 0x97DE 0x985E #CJK UNIFIED IDEOGRAPH 0x97DF 0x4EE4 #CJK UNIFIED IDEOGRAPH 0x97E0 0x4F36 #CJK UNIFIED IDEOGRAPH 0x97E1 0x4F8B #CJK UNIFIED IDEOGRAPH 0x97E2 0x51B7 #CJK UNIFIED IDEOGRAPH 0x97E3 0x52B1 #CJK UNIFIED IDEOGRAPH 0x97E4 0x5DBA #CJK UNIFIED IDEOGRAPH 0x97E5 0x601C #CJK UNIFIED IDEOGRAPH 0x97E6 0x73B2 #CJK UNIFIED IDEOGRAPH 0x97E7 0x793C #CJK UNIFIED IDEOGRAPH 0x97E8 0x82D3 #CJK UNIFIED IDEOGRAPH 0x97E9 0x9234 #CJK UNIFIED IDEOGRAPH 0x97EA 0x96B7 #CJK UNIFIED IDEOGRAPH 0x97EB 0x96F6 #CJK UNIFIED IDEOGRAPH 0x97EC 0x970A #CJK UNIFIED IDEOGRAPH 0x97ED 0x9E97 #CJK UNIFIED IDEOGRAPH 0x97EE 0x9F62 #CJK UNIFIED IDEOGRAPH 0x97EF 0x66A6 #CJK UNIFIED IDEOGRAPH 0x97F0 0x6B74 #CJK UNIFIED IDEOGRAPH 0x97F1 0x5217 #CJK UNIFIED IDEOGRAPH 0x97F2 0x52A3 #CJK UNIFIED IDEOGRAPH 0x97F3 0x70C8 #CJK UNIFIED IDEOGRAPH 0x97F4 0x88C2 #CJK UNIFIED IDEOGRAPH 0x97F5 0x5EC9 #CJK UNIFIED IDEOGRAPH 0x97F6 0x604B #CJK UNIFIED IDEOGRAPH 0x97F7 0x6190 #CJK UNIFIED IDEOGRAPH 0x97F8 0x6F23 #CJK UNIFIED IDEOGRAPH 0x97F9 0x7149 #CJK UNIFIED IDEOGRAPH 0x97FA 0x7C3E #CJK UNIFIED IDEOGRAPH 0x97FB 0x7DF4 #CJK UNIFIED IDEOGRAPH 0x97FC 0x806F #CJK UNIFIED IDEOGRAPH 0x9840 0x84EE #CJK UNIFIED IDEOGRAPH 0x9841 0x9023 #CJK UNIFIED IDEOGRAPH 0x9842 0x932C #CJK UNIFIED IDEOGRAPH 0x9843 0x5442 #CJK UNIFIED IDEOGRAPH 0x9844 0x9B6F #CJK UNIFIED IDEOGRAPH 0x9845 0x6AD3 #CJK UNIFIED IDEOGRAPH 0x9846 0x7089 #CJK UNIFIED IDEOGRAPH 0x9847 0x8CC2 #CJK UNIFIED IDEOGRAPH 0x9848 0x8DEF #CJK UNIFIED IDEOGRAPH 0x9849 0x9732 #CJK UNIFIED IDEOGRAPH 0x984A 0x52B4 #CJK UNIFIED IDEOGRAPH 0x984B 0x5A41 #CJK UNIFIED IDEOGRAPH 0x984C 0x5ECA #CJK UNIFIED IDEOGRAPH 0x984D 0x5F04 #CJK UNIFIED IDEOGRAPH 0x984E 0x6717 #CJK UNIFIED IDEOGRAPH 0x984F 0x697C #CJK UNIFIED IDEOGRAPH 0x9850 0x6994 #CJK UNIFIED IDEOGRAPH 0x9851 0x6D6A #CJK UNIFIED IDEOGRAPH 0x9852 0x6F0F #CJK UNIFIED IDEOGRAPH 0x9853 0x7262 #CJK UNIFIED IDEOGRAPH 0x9854 0x72FC #CJK UNIFIED IDEOGRAPH 0x9855 0x7BED #CJK UNIFIED IDEOGRAPH 0x9856 0x8001 #CJK UNIFIED IDEOGRAPH 0x9857 0x807E #CJK UNIFIED IDEOGRAPH 0x9858 0x874B #CJK UNIFIED IDEOGRAPH 0x9859 0x90CE #CJK UNIFIED IDEOGRAPH 0x985A 0x516D #CJK UNIFIED IDEOGRAPH 0x985B 0x9E93 #CJK UNIFIED IDEOGRAPH 0x985C 0x7984 #CJK UNIFIED IDEOGRAPH 0x985D 0x808B #CJK UNIFIED IDEOGRAPH 0x985E 0x9332 #CJK UNIFIED IDEOGRAPH 0x985F 0x8AD6 #CJK UNIFIED IDEOGRAPH 0x9860 0x502D #CJK UNIFIED IDEOGRAPH 0x9861 0x548C #CJK UNIFIED IDEOGRAPH 0x9862 0x8A71 #CJK UNIFIED IDEOGRAPH 0x9863 0x6B6A #CJK UNIFIED IDEOGRAPH 0x9864 0x8CC4 #CJK UNIFIED IDEOGRAPH 0x9865 0x8107 #CJK UNIFIED IDEOGRAPH 0x9866 0x60D1 #CJK UNIFIED IDEOGRAPH 0x9867 0x67A0 #CJK UNIFIED IDEOGRAPH 0x9868 0x9DF2 #CJK UNIFIED IDEOGRAPH 0x9869 0x4E99 #CJK UNIFIED IDEOGRAPH 0x986A 0x4E98 #CJK UNIFIED IDEOGRAPH 0x986B 0x9C10 #CJK UNIFIED IDEOGRAPH 0x986C 0x8A6B #CJK UNIFIED IDEOGRAPH 0x986D 0x85C1 #CJK UNIFIED IDEOGRAPH 0x986E 0x8568 #CJK UNIFIED IDEOGRAPH 0x986F 0x6900 #CJK UNIFIED IDEOGRAPH 0x9870 0x6E7E #CJK UNIFIED IDEOGRAPH 0x9871 0x7897 #CJK UNIFIED IDEOGRAPH 0x9872 0x8155 #CJK UNIFIED IDEOGRAPH 0x989F 0x5F0C #CJK UNIFIED IDEOGRAPH 0x98A0 0x4E10 #CJK UNIFIED IDEOGRAPH 0x98A1 0x4E15 #CJK UNIFIED IDEOGRAPH 0x98A2 0x4E2A #CJK UNIFIED IDEOGRAPH 0x98A3 0x4E31 #CJK UNIFIED IDEOGRAPH 0x98A4 0x4E36 #CJK UNIFIED IDEOGRAPH 0x98A5 0x4E3C #CJK UNIFIED IDEOGRAPH 0x98A6 0x4E3F #CJK UNIFIED IDEOGRAPH 0x98A7 0x4E42 #CJK UNIFIED IDEOGRAPH 0x98A8 0x4E56 #CJK UNIFIED IDEOGRAPH 0x98A9 0x4E58 #CJK UNIFIED IDEOGRAPH 0x98AA 0x4E82 #CJK UNIFIED IDEOGRAPH 0x98AB 0x4E85 #CJK UNIFIED IDEOGRAPH 0x98AC 0x8C6B #CJK UNIFIED IDEOGRAPH 0x98AD 0x4E8A #CJK UNIFIED IDEOGRAPH 0x98AE 0x8212 #CJK UNIFIED IDEOGRAPH 0x98AF 0x5F0D #CJK UNIFIED IDEOGRAPH 0x98B0 0x4E8E #CJK UNIFIED IDEOGRAPH 0x98B1 0x4E9E #CJK UNIFIED IDEOGRAPH 0x98B2 0x4E9F #CJK UNIFIED IDEOGRAPH 0x98B3 0x4EA0 #CJK UNIFIED IDEOGRAPH 0x98B4 0x4EA2 #CJK UNIFIED IDEOGRAPH 0x98B5 0x4EB0 #CJK UNIFIED IDEOGRAPH 0x98B6 0x4EB3 #CJK UNIFIED IDEOGRAPH 0x98B7 0x4EB6 #CJK UNIFIED IDEOGRAPH 0x98B8 0x4ECE #CJK UNIFIED IDEOGRAPH 0x98B9 0x4ECD #CJK UNIFIED IDEOGRAPH 0x98BA 0x4EC4 #CJK UNIFIED IDEOGRAPH 0x98BB 0x4EC6 #CJK UNIFIED IDEOGRAPH 0x98BC 0x4EC2 #CJK UNIFIED IDEOGRAPH 0x98BD 0x4ED7 #CJK UNIFIED IDEOGRAPH 0x98BE 0x4EDE #CJK UNIFIED IDEOGRAPH 0x98BF 0x4EED #CJK UNIFIED IDEOGRAPH 0x98C0 0x4EDF #CJK UNIFIED IDEOGRAPH 0x98C1 0x4EF7 #CJK UNIFIED IDEOGRAPH 0x98C2 0x4F09 #CJK UNIFIED IDEOGRAPH 0x98C3 0x4F5A #CJK UNIFIED IDEOGRAPH 0x98C4 0x4F30 #CJK UNIFIED IDEOGRAPH 0x98C5 0x4F5B #CJK UNIFIED IDEOGRAPH 0x98C6 0x4F5D #CJK UNIFIED IDEOGRAPH 0x98C7 0x4F57 #CJK UNIFIED IDEOGRAPH 0x98C8 0x4F47 #CJK UNIFIED IDEOGRAPH 0x98C9 0x4F76 #CJK UNIFIED IDEOGRAPH 0x98CA 0x4F88 #CJK UNIFIED IDEOGRAPH 0x98CB 0x4F8F #CJK UNIFIED IDEOGRAPH 0x98CC 0x4F98 #CJK UNIFIED IDEOGRAPH 0x98CD 0x4F7B #CJK UNIFIED IDEOGRAPH 0x98CE 0x4F69 #CJK UNIFIED IDEOGRAPH 0x98CF 0x4F70 #CJK UNIFIED IDEOGRAPH 0x98D0 0x4F91 #CJK UNIFIED IDEOGRAPH 0x98D1 0x4F6F #CJK UNIFIED IDEOGRAPH 0x98D2 0x4F86 #CJK UNIFIED IDEOGRAPH 0x98D3 0x4F96 #CJK UNIFIED IDEOGRAPH 0x98D4 0x5118 #CJK UNIFIED IDEOGRAPH 0x98D5 0x4FD4 #CJK UNIFIED IDEOGRAPH 0x98D6 0x4FDF #CJK UNIFIED IDEOGRAPH 0x98D7 0x4FCE #CJK UNIFIED IDEOGRAPH 0x98D8 0x4FD8 #CJK UNIFIED IDEOGRAPH 0x98D9 0x4FDB #CJK UNIFIED IDEOGRAPH 0x98DA 0x4FD1 #CJK UNIFIED IDEOGRAPH 0x98DB 0x4FDA #CJK UNIFIED IDEOGRAPH 0x98DC 0x4FD0 #CJK UNIFIED IDEOGRAPH 0x98DD 0x4FE4 #CJK UNIFIED IDEOGRAPH 0x98DE 0x4FE5 #CJK UNIFIED IDEOGRAPH 0x98DF 0x501A #CJK UNIFIED IDEOGRAPH 0x98E0 0x5028 #CJK UNIFIED IDEOGRAPH 0x98E1 0x5014 #CJK UNIFIED IDEOGRAPH 0x98E2 0x502A #CJK UNIFIED IDEOGRAPH 0x98E3 0x5025 #CJK UNIFIED IDEOGRAPH 0x98E4 0x5005 #CJK UNIFIED IDEOGRAPH 0x98E5 0x4F1C #CJK UNIFIED IDEOGRAPH 0x98E6 0x4FF6 #CJK UNIFIED IDEOGRAPH 0x98E7 0x5021 #CJK UNIFIED IDEOGRAPH 0x98E8 0x5029 #CJK UNIFIED IDEOGRAPH 0x98E9 0x502C #CJK UNIFIED IDEOGRAPH 0x98EA 0x4FFE #CJK UNIFIED IDEOGRAPH 0x98EB 0x4FEF #CJK UNIFIED IDEOGRAPH 0x98EC 0x5011 #CJK UNIFIED IDEOGRAPH 0x98ED 0x5006 #CJK UNIFIED IDEOGRAPH 0x98EE 0x5043 #CJK UNIFIED IDEOGRAPH 0x98EF 0x5047 #CJK UNIFIED IDEOGRAPH 0x98F0 0x6703 #CJK UNIFIED IDEOGRAPH 0x98F1 0x5055 #CJK UNIFIED IDEOGRAPH 0x98F2 0x5050 #CJK UNIFIED IDEOGRAPH 0x98F3 0x5048 #CJK UNIFIED IDEOGRAPH 0x98F4 0x505A #CJK UNIFIED IDEOGRAPH 0x98F5 0x5056 #CJK UNIFIED IDEOGRAPH 0x98F6 0x506C #CJK UNIFIED IDEOGRAPH 0x98F7 0x5078 #CJK UNIFIED IDEOGRAPH 0x98F8 0x5080 #CJK UNIFIED IDEOGRAPH 0x98F9 0x509A #CJK UNIFIED IDEOGRAPH 0x98FA 0x5085 #CJK UNIFIED IDEOGRAPH 0x98FB 0x50B4 #CJK UNIFIED IDEOGRAPH 0x98FC 0x50B2 #CJK UNIFIED IDEOGRAPH 0x9940 0x50C9 #CJK UNIFIED IDEOGRAPH 0x9941 0x50CA #CJK UNIFIED IDEOGRAPH 0x9942 0x50B3 #CJK UNIFIED IDEOGRAPH 0x9943 0x50C2 #CJK UNIFIED IDEOGRAPH 0x9944 0x50D6 #CJK UNIFIED IDEOGRAPH 0x9945 0x50DE #CJK UNIFIED IDEOGRAPH 0x9946 0x50E5 #CJK UNIFIED IDEOGRAPH 0x9947 0x50ED #CJK UNIFIED IDEOGRAPH 0x9948 0x50E3 #CJK UNIFIED IDEOGRAPH 0x9949 0x50EE #CJK UNIFIED IDEOGRAPH 0x994A 0x50F9 #CJK UNIFIED IDEOGRAPH 0x994B 0x50F5 #CJK UNIFIED IDEOGRAPH 0x994C 0x5109 #CJK UNIFIED IDEOGRAPH 0x994D 0x5101 #CJK UNIFIED IDEOGRAPH 0x994E 0x5102 #CJK UNIFIED IDEOGRAPH 0x994F 0x5116 #CJK UNIFIED IDEOGRAPH 0x9950 0x5115 #CJK UNIFIED IDEOGRAPH 0x9951 0x5114 #CJK UNIFIED IDEOGRAPH 0x9952 0x511A #CJK UNIFIED IDEOGRAPH 0x9953 0x5121 #CJK UNIFIED IDEOGRAPH 0x9954 0x513A #CJK UNIFIED IDEOGRAPH 0x9955 0x5137 #CJK UNIFIED IDEOGRAPH 0x9956 0x513C #CJK UNIFIED IDEOGRAPH 0x9957 0x513B #CJK UNIFIED IDEOGRAPH 0x9958 0x513F #CJK UNIFIED IDEOGRAPH 0x9959 0x5140 #CJK UNIFIED IDEOGRAPH 0x995A 0x5152 #CJK UNIFIED IDEOGRAPH 0x995B 0x514C #CJK UNIFIED IDEOGRAPH 0x995C 0x5154 #CJK UNIFIED IDEOGRAPH 0x995D 0x5162 #CJK UNIFIED IDEOGRAPH 0x995E 0x7AF8 #CJK UNIFIED IDEOGRAPH 0x995F 0x5169 #CJK UNIFIED IDEOGRAPH 0x9960 0x516A #CJK UNIFIED IDEOGRAPH 0x9961 0x516E #CJK UNIFIED IDEOGRAPH 0x9962 0x5180 #CJK UNIFIED IDEOGRAPH 0x9963 0x5182 #CJK UNIFIED IDEOGRAPH 0x9964 0x56D8 #CJK UNIFIED IDEOGRAPH 0x9965 0x518C #CJK UNIFIED IDEOGRAPH 0x9966 0x5189 #CJK UNIFIED IDEOGRAPH 0x9967 0x518F #CJK UNIFIED IDEOGRAPH 0x9968 0x5191 #CJK UNIFIED IDEOGRAPH 0x9969 0x5193 #CJK UNIFIED IDEOGRAPH 0x996A 0x5195 #CJK UNIFIED IDEOGRAPH 0x996B 0x5196 #CJK UNIFIED IDEOGRAPH 0x996C 0x51A4 #CJK UNIFIED IDEOGRAPH 0x996D 0x51A6 #CJK UNIFIED IDEOGRAPH 0x996E 0x51A2 #CJK UNIFIED IDEOGRAPH 0x996F 0x51A9 #CJK UNIFIED IDEOGRAPH 0x9970 0x51AA #CJK UNIFIED IDEOGRAPH 0x9971 0x51AB #CJK UNIFIED IDEOGRAPH 0x9972 0x51B3 #CJK UNIFIED IDEOGRAPH 0x9973 0x51B1 #CJK UNIFIED IDEOGRAPH 0x9974 0x51B2 #CJK UNIFIED IDEOGRAPH 0x9975 0x51B0 #CJK UNIFIED IDEOGRAPH 0x9976 0x51B5 #CJK UNIFIED IDEOGRAPH 0x9977 0x51BD #CJK UNIFIED IDEOGRAPH 0x9978 0x51C5 #CJK UNIFIED IDEOGRAPH 0x9979 0x51C9 #CJK UNIFIED IDEOGRAPH 0x997A 0x51DB #CJK UNIFIED IDEOGRAPH 0x997B 0x51E0 #CJK UNIFIED IDEOGRAPH 0x997C 0x8655 #CJK UNIFIED IDEOGRAPH 0x997D 0x51E9 #CJK UNIFIED IDEOGRAPH 0x997E 0x51ED #CJK UNIFIED IDEOGRAPH 0x9980 0x51F0 #CJK UNIFIED IDEOGRAPH 0x9981 0x51F5 #CJK UNIFIED IDEOGRAPH 0x9982 0x51FE #CJK UNIFIED IDEOGRAPH 0x9983 0x5204 #CJK UNIFIED IDEOGRAPH 0x9984 0x520B #CJK UNIFIED IDEOGRAPH 0x9985 0x5214 #CJK UNIFIED IDEOGRAPH 0x9986 0x520E #CJK UNIFIED IDEOGRAPH 0x9987 0x5227 #CJK UNIFIED IDEOGRAPH 0x9988 0x522A #CJK UNIFIED IDEOGRAPH 0x9989 0x522E #CJK UNIFIED IDEOGRAPH 0x998A 0x5233 #CJK UNIFIED IDEOGRAPH 0x998B 0x5239 #CJK UNIFIED IDEOGRAPH 0x998C 0x524F #CJK UNIFIED IDEOGRAPH 0x998D 0x5244 #CJK UNIFIED IDEOGRAPH 0x998E 0x524B #CJK UNIFIED IDEOGRAPH 0x998F 0x524C #CJK UNIFIED IDEOGRAPH 0x9990 0x525E #CJK UNIFIED IDEOGRAPH 0x9991 0x5254 #CJK UNIFIED IDEOGRAPH 0x9992 0x526A #CJK UNIFIED IDEOGRAPH 0x9993 0x5274 #CJK UNIFIED IDEOGRAPH 0x9994 0x5269 #CJK UNIFIED IDEOGRAPH 0x9995 0x5273 #CJK UNIFIED IDEOGRAPH 0x9996 0x527F #CJK UNIFIED IDEOGRAPH 0x9997 0x527D #CJK UNIFIED IDEOGRAPH 0x9998 0x528D #CJK UNIFIED IDEOGRAPH 0x9999 0x5294 #CJK UNIFIED IDEOGRAPH 0x999A 0x5292 #CJK UNIFIED IDEOGRAPH 0x999B 0x5271 #CJK UNIFIED IDEOGRAPH 0x999C 0x5288 #CJK UNIFIED IDEOGRAPH 0x999D 0x5291 #CJK UNIFIED IDEOGRAPH 0x999E 0x8FA8 #CJK UNIFIED IDEOGRAPH 0x999F 0x8FA7 #CJK UNIFIED IDEOGRAPH 0x99A0 0x52AC #CJK UNIFIED IDEOGRAPH 0x99A1 0x52AD #CJK UNIFIED IDEOGRAPH 0x99A2 0x52BC #CJK UNIFIED IDEOGRAPH 0x99A3 0x52B5 #CJK UNIFIED IDEOGRAPH 0x99A4 0x52C1 #CJK UNIFIED IDEOGRAPH 0x99A5 0x52CD #CJK UNIFIED IDEOGRAPH 0x99A6 0x52D7 #CJK UNIFIED IDEOGRAPH 0x99A7 0x52DE #CJK UNIFIED IDEOGRAPH 0x99A8 0x52E3 #CJK UNIFIED IDEOGRAPH 0x99A9 0x52E6 #CJK UNIFIED IDEOGRAPH 0x99AA 0x98ED #CJK UNIFIED IDEOGRAPH 0x99AB 0x52E0 #CJK UNIFIED IDEOGRAPH 0x99AC 0x52F3 #CJK UNIFIED IDEOGRAPH 0x99AD 0x52F5 #CJK UNIFIED IDEOGRAPH 0x99AE 0x52F8 #CJK UNIFIED IDEOGRAPH 0x99AF 0x52F9 #CJK UNIFIED IDEOGRAPH 0x99B0 0x5306 #CJK UNIFIED IDEOGRAPH 0x99B1 0x5308 #CJK UNIFIED IDEOGRAPH 0x99B2 0x7538 #CJK UNIFIED IDEOGRAPH 0x99B3 0x530D #CJK UNIFIED IDEOGRAPH 0x99B4 0x5310 #CJK UNIFIED IDEOGRAPH 0x99B5 0x530F #CJK UNIFIED IDEOGRAPH 0x99B6 0x5315 #CJK UNIFIED IDEOGRAPH 0x99B7 0x531A #CJK UNIFIED IDEOGRAPH 0x99B8 0x5323 #CJK UNIFIED IDEOGRAPH 0x99B9 0x532F #CJK UNIFIED IDEOGRAPH 0x99BA 0x5331 #CJK UNIFIED IDEOGRAPH 0x99BB 0x5333 #CJK UNIFIED IDEOGRAPH 0x99BC 0x5338 #CJK UNIFIED IDEOGRAPH 0x99BD 0x5340 #CJK UNIFIED IDEOGRAPH 0x99BE 0x5346 #CJK UNIFIED IDEOGRAPH 0x99BF 0x5345 #CJK UNIFIED IDEOGRAPH 0x99C0 0x4E17 #CJK UNIFIED IDEOGRAPH 0x99C1 0x5349 #CJK UNIFIED IDEOGRAPH 0x99C2 0x534D #CJK UNIFIED IDEOGRAPH 0x99C3 0x51D6 #CJK UNIFIED IDEOGRAPH 0x99C4 0x535E #CJK UNIFIED IDEOGRAPH 0x99C5 0x5369 #CJK UNIFIED IDEOGRAPH 0x99C6 0x536E #CJK UNIFIED IDEOGRAPH 0x99C7 0x5918 #CJK UNIFIED IDEOGRAPH 0x99C8 0x537B #CJK UNIFIED IDEOGRAPH 0x99C9 0x5377 #CJK UNIFIED IDEOGRAPH 0x99CA 0x5382 #CJK UNIFIED IDEOGRAPH 0x99CB 0x5396 #CJK UNIFIED IDEOGRAPH 0x99CC 0x53A0 #CJK UNIFIED IDEOGRAPH 0x99CD 0x53A6 #CJK UNIFIED IDEOGRAPH 0x99CE 0x53A5 #CJK UNIFIED IDEOGRAPH 0x99CF 0x53AE #CJK UNIFIED IDEOGRAPH 0x99D0 0x53B0 #CJK UNIFIED IDEOGRAPH 0x99D1 0x53B6 #CJK UNIFIED IDEOGRAPH 0x99D2 0x53C3 #CJK UNIFIED IDEOGRAPH 0x99D3 0x7C12 #CJK UNIFIED IDEOGRAPH 0x99D4 0x96D9 #CJK UNIFIED IDEOGRAPH 0x99D5 0x53DF #CJK UNIFIED IDEOGRAPH 0x99D6 0x66FC #CJK UNIFIED IDEOGRAPH 0x99D7 0x71EE #CJK UNIFIED IDEOGRAPH 0x99D8 0x53EE #CJK UNIFIED IDEOGRAPH 0x99D9 0x53E8 #CJK UNIFIED IDEOGRAPH 0x99DA 0x53ED #CJK UNIFIED IDEOGRAPH 0x99DB 0x53FA #CJK UNIFIED IDEOGRAPH 0x99DC 0x5401 #CJK UNIFIED IDEOGRAPH 0x99DD 0x543D #CJK UNIFIED IDEOGRAPH 0x99DE 0x5440 #CJK UNIFIED IDEOGRAPH 0x99DF 0x542C #CJK UNIFIED IDEOGRAPH 0x99E0 0x542D #CJK UNIFIED IDEOGRAPH 0x99E1 0x543C #CJK UNIFIED IDEOGRAPH 0x99E2 0x542E #CJK UNIFIED IDEOGRAPH 0x99E3 0x5436 #CJK UNIFIED IDEOGRAPH 0x99E4 0x5429 #CJK UNIFIED IDEOGRAPH 0x99E5 0x541D #CJK UNIFIED IDEOGRAPH 0x99E6 0x544E #CJK UNIFIED IDEOGRAPH 0x99E7 0x548F #CJK UNIFIED IDEOGRAPH 0x99E8 0x5475 #CJK UNIFIED IDEOGRAPH 0x99E9 0x548E #CJK UNIFIED IDEOGRAPH 0x99EA 0x545F #CJK UNIFIED IDEOGRAPH 0x99EB 0x5471 #CJK UNIFIED IDEOGRAPH 0x99EC 0x5477 #CJK UNIFIED IDEOGRAPH 0x99ED 0x5470 #CJK UNIFIED IDEOGRAPH 0x99EE 0x5492 #CJK UNIFIED IDEOGRAPH 0x99EF 0x547B #CJK UNIFIED IDEOGRAPH 0x99F0 0x5480 #CJK UNIFIED IDEOGRAPH 0x99F1 0x5476 #CJK UNIFIED IDEOGRAPH 0x99F2 0x5484 #CJK UNIFIED IDEOGRAPH 0x99F3 0x5490 #CJK UNIFIED IDEOGRAPH 0x99F4 0x5486 #CJK UNIFIED IDEOGRAPH 0x99F5 0x54C7 #CJK UNIFIED IDEOGRAPH 0x99F6 0x54A2 #CJK UNIFIED IDEOGRAPH 0x99F7 0x54B8 #CJK UNIFIED IDEOGRAPH 0x99F8 0x54A5 #CJK UNIFIED IDEOGRAPH 0x99F9 0x54AC #CJK UNIFIED IDEOGRAPH 0x99FA 0x54C4 #CJK UNIFIED IDEOGRAPH 0x99FB 0x54C8 #CJK UNIFIED IDEOGRAPH 0x99FC 0x54A8 #CJK UNIFIED IDEOGRAPH 0x9A40 0x54AB #CJK UNIFIED IDEOGRAPH 0x9A41 0x54C2 #CJK UNIFIED IDEOGRAPH 0x9A42 0x54A4 #CJK UNIFIED IDEOGRAPH 0x9A43 0x54BE #CJK UNIFIED IDEOGRAPH 0x9A44 0x54BC #CJK UNIFIED IDEOGRAPH 0x9A45 0x54D8 #CJK UNIFIED IDEOGRAPH 0x9A46 0x54E5 #CJK UNIFIED IDEOGRAPH 0x9A47 0x54E6 #CJK UNIFIED IDEOGRAPH 0x9A48 0x550F #CJK UNIFIED IDEOGRAPH 0x9A49 0x5514 #CJK UNIFIED IDEOGRAPH 0x9A4A 0x54FD #CJK UNIFIED IDEOGRAPH 0x9A4B 0x54EE #CJK UNIFIED IDEOGRAPH 0x9A4C 0x54ED #CJK UNIFIED IDEOGRAPH 0x9A4D 0x54FA #CJK UNIFIED IDEOGRAPH 0x9A4E 0x54E2 #CJK UNIFIED IDEOGRAPH 0x9A4F 0x5539 #CJK UNIFIED IDEOGRAPH 0x9A50 0x5540 #CJK UNIFIED IDEOGRAPH 0x9A51 0x5563 #CJK UNIFIED IDEOGRAPH 0x9A52 0x554C #CJK UNIFIED IDEOGRAPH 0x9A53 0x552E #CJK UNIFIED IDEOGRAPH 0x9A54 0x555C #CJK UNIFIED IDEOGRAPH 0x9A55 0x5545 #CJK UNIFIED IDEOGRAPH 0x9A56 0x5556 #CJK UNIFIED IDEOGRAPH 0x9A57 0x5557 #CJK UNIFIED IDEOGRAPH 0x9A58 0x5538 #CJK UNIFIED IDEOGRAPH 0x9A59 0x5533 #CJK UNIFIED IDEOGRAPH 0x9A5A 0x555D #CJK UNIFIED IDEOGRAPH 0x9A5B 0x5599 #CJK UNIFIED IDEOGRAPH 0x9A5C 0x5580 #CJK UNIFIED IDEOGRAPH 0x9A5D 0x54AF #CJK UNIFIED IDEOGRAPH 0x9A5E 0x558A #CJK UNIFIED IDEOGRAPH 0x9A5F 0x559F #CJK UNIFIED IDEOGRAPH 0x9A60 0x557B #CJK UNIFIED IDEOGRAPH 0x9A61 0x557E #CJK UNIFIED IDEOGRAPH 0x9A62 0x5598 #CJK UNIFIED IDEOGRAPH 0x9A63 0x559E #CJK UNIFIED IDEOGRAPH 0x9A64 0x55AE #CJK UNIFIED IDEOGRAPH 0x9A65 0x557C #CJK UNIFIED IDEOGRAPH 0x9A66 0x5583 #CJK UNIFIED IDEOGRAPH 0x9A67 0x55A9 #CJK UNIFIED IDEOGRAPH 0x9A68 0x5587 #CJK UNIFIED IDEOGRAPH 0x9A69 0x55A8 #CJK UNIFIED IDEOGRAPH 0x9A6A 0x55DA #CJK UNIFIED IDEOGRAPH 0x9A6B 0x55C5 #CJK UNIFIED IDEOGRAPH 0x9A6C 0x55DF #CJK UNIFIED IDEOGRAPH 0x9A6D 0x55C4 #CJK UNIFIED IDEOGRAPH 0x9A6E 0x55DC #CJK UNIFIED IDEOGRAPH 0x9A6F 0x55E4 #CJK UNIFIED IDEOGRAPH 0x9A70 0x55D4 #CJK UNIFIED IDEOGRAPH 0x9A71 0x5614 #CJK UNIFIED IDEOGRAPH 0x9A72 0x55F7 #CJK UNIFIED IDEOGRAPH 0x9A73 0x5616 #CJK UNIFIED IDEOGRAPH 0x9A74 0x55FE #CJK UNIFIED IDEOGRAPH 0x9A75 0x55FD #CJK UNIFIED IDEOGRAPH 0x9A76 0x561B #CJK UNIFIED IDEOGRAPH 0x9A77 0x55F9 #CJK UNIFIED IDEOGRAPH 0x9A78 0x564E #CJK UNIFIED IDEOGRAPH 0x9A79 0x5650 #CJK UNIFIED IDEOGRAPH 0x9A7A 0x71DF #CJK UNIFIED IDEOGRAPH 0x9A7B 0x5634 #CJK UNIFIED IDEOGRAPH 0x9A7C 0x5636 #CJK UNIFIED IDEOGRAPH 0x9A7D 0x5632 #CJK UNIFIED IDEOGRAPH 0x9A7E 0x5638 #CJK UNIFIED IDEOGRAPH 0x9A80 0x566B #CJK UNIFIED IDEOGRAPH 0x9A81 0x5664 #CJK UNIFIED IDEOGRAPH 0x9A82 0x562F #CJK UNIFIED IDEOGRAPH 0x9A83 0x566C #CJK UNIFIED IDEOGRAPH 0x9A84 0x566A #CJK UNIFIED IDEOGRAPH 0x9A85 0x5686 #CJK UNIFIED IDEOGRAPH 0x9A86 0x5680 #CJK UNIFIED IDEOGRAPH 0x9A87 0x568A #CJK UNIFIED IDEOGRAPH 0x9A88 0x56A0 #CJK UNIFIED IDEOGRAPH 0x9A89 0x5694 #CJK UNIFIED IDEOGRAPH 0x9A8A 0x568F #CJK UNIFIED IDEOGRAPH 0x9A8B 0x56A5 #CJK UNIFIED IDEOGRAPH 0x9A8C 0x56AE #CJK UNIFIED IDEOGRAPH 0x9A8D 0x56B6 #CJK UNIFIED IDEOGRAPH 0x9A8E 0x56B4 #CJK UNIFIED IDEOGRAPH 0x9A8F 0x56C2 #CJK UNIFIED IDEOGRAPH 0x9A90 0x56BC #CJK UNIFIED IDEOGRAPH 0x9A91 0x56C1 #CJK UNIFIED IDEOGRAPH 0x9A92 0x56C3 #CJK UNIFIED IDEOGRAPH 0x9A93 0x56C0 #CJK UNIFIED IDEOGRAPH 0x9A94 0x56C8 #CJK UNIFIED IDEOGRAPH 0x9A95 0x56CE #CJK UNIFIED IDEOGRAPH 0x9A96 0x56D1 #CJK UNIFIED IDEOGRAPH 0x9A97 0x56D3 #CJK UNIFIED IDEOGRAPH 0x9A98 0x56D7 #CJK UNIFIED IDEOGRAPH 0x9A99 0x56EE #CJK UNIFIED IDEOGRAPH 0x9A9A 0x56F9 #CJK UNIFIED IDEOGRAPH 0x9A9B 0x5700 #CJK UNIFIED IDEOGRAPH 0x9A9C 0x56FF #CJK UNIFIED IDEOGRAPH 0x9A9D 0x5704 #CJK UNIFIED IDEOGRAPH 0x9A9E 0x5709 #CJK UNIFIED IDEOGRAPH 0x9A9F 0x5708 #CJK UNIFIED IDEOGRAPH 0x9AA0 0x570B #CJK UNIFIED IDEOGRAPH 0x9AA1 0x570D #CJK UNIFIED IDEOGRAPH 0x9AA2 0x5713 #CJK UNIFIED IDEOGRAPH 0x9AA3 0x5718 #CJK UNIFIED IDEOGRAPH 0x9AA4 0x5716 #CJK UNIFIED IDEOGRAPH 0x9AA5 0x55C7 #CJK UNIFIED IDEOGRAPH 0x9AA6 0x571C #CJK UNIFIED IDEOGRAPH 0x9AA7 0x5726 #CJK UNIFIED IDEOGRAPH 0x9AA8 0x5737 #CJK UNIFIED IDEOGRAPH 0x9AA9 0x5738 #CJK UNIFIED IDEOGRAPH 0x9AAA 0x574E #CJK UNIFIED IDEOGRAPH 0x9AAB 0x573B #CJK UNIFIED IDEOGRAPH 0x9AAC 0x5740 #CJK UNIFIED IDEOGRAPH 0x9AAD 0x574F #CJK UNIFIED IDEOGRAPH 0x9AAE 0x5769 #CJK UNIFIED IDEOGRAPH 0x9AAF 0x57C0 #CJK UNIFIED IDEOGRAPH 0x9AB0 0x5788 #CJK UNIFIED IDEOGRAPH 0x9AB1 0x5761 #CJK UNIFIED IDEOGRAPH 0x9AB2 0x577F #CJK UNIFIED IDEOGRAPH 0x9AB3 0x5789 #CJK UNIFIED IDEOGRAPH 0x9AB4 0x5793 #CJK UNIFIED IDEOGRAPH 0x9AB5 0x57A0 #CJK UNIFIED IDEOGRAPH 0x9AB6 0x57B3 #CJK UNIFIED IDEOGRAPH 0x9AB7 0x57A4 #CJK UNIFIED IDEOGRAPH 0x9AB8 0x57AA #CJK UNIFIED IDEOGRAPH 0x9AB9 0x57B0 #CJK UNIFIED IDEOGRAPH 0x9ABA 0x57C3 #CJK UNIFIED IDEOGRAPH 0x9ABB 0x57C6 #CJK UNIFIED IDEOGRAPH 0x9ABC 0x57D4 #CJK UNIFIED IDEOGRAPH 0x9ABD 0x57D2 #CJK UNIFIED IDEOGRAPH 0x9ABE 0x57D3 #CJK UNIFIED IDEOGRAPH 0x9ABF 0x580A #CJK UNIFIED IDEOGRAPH 0x9AC0 0x57D6 #CJK UNIFIED IDEOGRAPH 0x9AC1 0x57E3 #CJK UNIFIED IDEOGRAPH 0x9AC2 0x580B #CJK UNIFIED IDEOGRAPH 0x9AC3 0x5819 #CJK UNIFIED IDEOGRAPH 0x9AC4 0x581D #CJK UNIFIED IDEOGRAPH 0x9AC5 0x5872 #CJK UNIFIED IDEOGRAPH 0x9AC6 0x5821 #CJK UNIFIED IDEOGRAPH 0x9AC7 0x5862 #CJK UNIFIED IDEOGRAPH 0x9AC8 0x584B #CJK UNIFIED IDEOGRAPH 0x9AC9 0x5870 #CJK UNIFIED IDEOGRAPH 0x9ACA 0x6BC0 #CJK UNIFIED IDEOGRAPH 0x9ACB 0x5852 #CJK UNIFIED IDEOGRAPH 0x9ACC 0x583D #CJK UNIFIED IDEOGRAPH 0x9ACD 0x5879 #CJK UNIFIED IDEOGRAPH 0x9ACE 0x5885 #CJK UNIFIED IDEOGRAPH 0x9ACF 0x58B9 #CJK UNIFIED IDEOGRAPH 0x9AD0 0x589F #CJK UNIFIED IDEOGRAPH 0x9AD1 0x58AB #CJK UNIFIED IDEOGRAPH 0x9AD2 0x58BA #CJK UNIFIED IDEOGRAPH 0x9AD3 0x58DE #CJK UNIFIED IDEOGRAPH 0x9AD4 0x58BB #CJK UNIFIED IDEOGRAPH 0x9AD5 0x58B8 #CJK UNIFIED IDEOGRAPH 0x9AD6 0x58AE #CJK UNIFIED IDEOGRAPH 0x9AD7 0x58C5 #CJK UNIFIED IDEOGRAPH 0x9AD8 0x58D3 #CJK UNIFIED IDEOGRAPH 0x9AD9 0x58D1 #CJK UNIFIED IDEOGRAPH 0x9ADA 0x58D7 #CJK UNIFIED IDEOGRAPH 0x9ADB 0x58D9 #CJK UNIFIED IDEOGRAPH 0x9ADC 0x58D8 #CJK UNIFIED IDEOGRAPH 0x9ADD 0x58E5 #CJK UNIFIED IDEOGRAPH 0x9ADE 0x58DC #CJK UNIFIED IDEOGRAPH 0x9ADF 0x58E4 #CJK UNIFIED IDEOGRAPH 0x9AE0 0x58DF #CJK UNIFIED IDEOGRAPH 0x9AE1 0x58EF #CJK UNIFIED IDEOGRAPH 0x9AE2 0x58FA #CJK UNIFIED IDEOGRAPH 0x9AE3 0x58F9 #CJK UNIFIED IDEOGRAPH 0x9AE4 0x58FB #CJK UNIFIED IDEOGRAPH 0x9AE5 0x58FC #CJK UNIFIED IDEOGRAPH 0x9AE6 0x58FD #CJK UNIFIED IDEOGRAPH 0x9AE7 0x5902 #CJK UNIFIED IDEOGRAPH 0x9AE8 0x590A #CJK UNIFIED IDEOGRAPH 0x9AE9 0x5910 #CJK UNIFIED IDEOGRAPH 0x9AEA 0x591B #CJK UNIFIED IDEOGRAPH 0x9AEB 0x68A6 #CJK UNIFIED IDEOGRAPH 0x9AEC 0x5925 #CJK UNIFIED IDEOGRAPH 0x9AED 0x592C #CJK UNIFIED IDEOGRAPH 0x9AEE 0x592D #CJK UNIFIED IDEOGRAPH 0x9AEF 0x5932 #CJK UNIFIED IDEOGRAPH 0x9AF0 0x5938 #CJK UNIFIED IDEOGRAPH 0x9AF1 0x593E #CJK UNIFIED IDEOGRAPH 0x9AF2 0x7AD2 #CJK UNIFIED IDEOGRAPH 0x9AF3 0x5955 #CJK UNIFIED IDEOGRAPH 0x9AF4 0x5950 #CJK UNIFIED IDEOGRAPH 0x9AF5 0x594E #CJK UNIFIED IDEOGRAPH 0x9AF6 0x595A #CJK UNIFIED IDEOGRAPH 0x9AF7 0x5958 #CJK UNIFIED IDEOGRAPH 0x9AF8 0x5962 #CJK UNIFIED IDEOGRAPH 0x9AF9 0x5960 #CJK UNIFIED IDEOGRAPH 0x9AFA 0x5967 #CJK UNIFIED IDEOGRAPH 0x9AFB 0x596C #CJK UNIFIED IDEOGRAPH 0x9AFC 0x5969 #CJK UNIFIED IDEOGRAPH 0x9B40 0x5978 #CJK UNIFIED IDEOGRAPH 0x9B41 0x5981 #CJK UNIFIED IDEOGRAPH 0x9B42 0x599D #CJK UNIFIED IDEOGRAPH 0x9B43 0x4F5E #CJK UNIFIED IDEOGRAPH 0x9B44 0x4FAB #CJK UNIFIED IDEOGRAPH 0x9B45 0x59A3 #CJK UNIFIED IDEOGRAPH 0x9B46 0x59B2 #CJK UNIFIED IDEOGRAPH 0x9B47 0x59C6 #CJK UNIFIED IDEOGRAPH 0x9B48 0x59E8 #CJK UNIFIED IDEOGRAPH 0x9B49 0x59DC #CJK UNIFIED IDEOGRAPH 0x9B4A 0x598D #CJK UNIFIED IDEOGRAPH 0x9B4B 0x59D9 #CJK UNIFIED IDEOGRAPH 0x9B4C 0x59DA #CJK UNIFIED IDEOGRAPH 0x9B4D 0x5A25 #CJK UNIFIED IDEOGRAPH 0x9B4E 0x5A1F #CJK UNIFIED IDEOGRAPH 0x9B4F 0x5A11 #CJK UNIFIED IDEOGRAPH 0x9B50 0x5A1C #CJK UNIFIED IDEOGRAPH 0x9B51 0x5A09 #CJK UNIFIED IDEOGRAPH 0x9B52 0x5A1A #CJK UNIFIED IDEOGRAPH 0x9B53 0x5A40 #CJK UNIFIED IDEOGRAPH 0x9B54 0x5A6C #CJK UNIFIED IDEOGRAPH 0x9B55 0x5A49 #CJK UNIFIED IDEOGRAPH 0x9B56 0x5A35 #CJK UNIFIED IDEOGRAPH 0x9B57 0x5A36 #CJK UNIFIED IDEOGRAPH 0x9B58 0x5A62 #CJK UNIFIED IDEOGRAPH 0x9B59 0x5A6A #CJK UNIFIED IDEOGRAPH 0x9B5A 0x5A9A #CJK UNIFIED IDEOGRAPH 0x9B5B 0x5ABC #CJK UNIFIED IDEOGRAPH 0x9B5C 0x5ABE #CJK UNIFIED IDEOGRAPH 0x9B5D 0x5ACB #CJK UNIFIED IDEOGRAPH 0x9B5E 0x5AC2 #CJK UNIFIED IDEOGRAPH 0x9B5F 0x5ABD #CJK UNIFIED IDEOGRAPH 0x9B60 0x5AE3 #CJK UNIFIED IDEOGRAPH 0x9B61 0x5AD7 #CJK UNIFIED IDEOGRAPH 0x9B62 0x5AE6 #CJK UNIFIED IDEOGRAPH 0x9B63 0x5AE9 #CJK UNIFIED IDEOGRAPH 0x9B64 0x5AD6 #CJK UNIFIED IDEOGRAPH 0x9B65 0x5AFA #CJK UNIFIED IDEOGRAPH 0x9B66 0x5AFB #CJK UNIFIED IDEOGRAPH 0x9B67 0x5B0C #CJK UNIFIED IDEOGRAPH 0x9B68 0x5B0B #CJK UNIFIED IDEOGRAPH 0x9B69 0x5B16 #CJK UNIFIED IDEOGRAPH 0x9B6A 0x5B32 #CJK UNIFIED IDEOGRAPH 0x9B6B 0x5AD0 #CJK UNIFIED IDEOGRAPH 0x9B6C 0x5B2A #CJK UNIFIED IDEOGRAPH 0x9B6D 0x5B36 #CJK UNIFIED IDEOGRAPH 0x9B6E 0x5B3E #CJK UNIFIED IDEOGRAPH 0x9B6F 0x5B43 #CJK UNIFIED IDEOGRAPH 0x9B70 0x5B45 #CJK UNIFIED IDEOGRAPH 0x9B71 0x5B40 #CJK UNIFIED IDEOGRAPH 0x9B72 0x5B51 #CJK UNIFIED IDEOGRAPH 0x9B73 0x5B55 #CJK UNIFIED IDEOGRAPH 0x9B74 0x5B5A #CJK UNIFIED IDEOGRAPH 0x9B75 0x5B5B #CJK UNIFIED IDEOGRAPH 0x9B76 0x5B65 #CJK UNIFIED IDEOGRAPH 0x9B77 0x5B69 #CJK UNIFIED IDEOGRAPH 0x9B78 0x5B70 #CJK UNIFIED IDEOGRAPH 0x9B79 0x5B73 #CJK UNIFIED IDEOGRAPH 0x9B7A 0x5B75 #CJK UNIFIED IDEOGRAPH 0x9B7B 0x5B78 #CJK UNIFIED IDEOGRAPH 0x9B7C 0x6588 #CJK UNIFIED IDEOGRAPH 0x9B7D 0x5B7A #CJK UNIFIED IDEOGRAPH 0x9B7E 0x5B80 #CJK UNIFIED IDEOGRAPH 0x9B80 0x5B83 #CJK UNIFIED IDEOGRAPH 0x9B81 0x5BA6 #CJK UNIFIED IDEOGRAPH 0x9B82 0x5BB8 #CJK UNIFIED IDEOGRAPH 0x9B83 0x5BC3 #CJK UNIFIED IDEOGRAPH 0x9B84 0x5BC7 #CJK UNIFIED IDEOGRAPH 0x9B85 0x5BC9 #CJK UNIFIED IDEOGRAPH 0x9B86 0x5BD4 #CJK UNIFIED IDEOGRAPH 0x9B87 0x5BD0 #CJK UNIFIED IDEOGRAPH 0x9B88 0x5BE4 #CJK UNIFIED IDEOGRAPH 0x9B89 0x5BE6 #CJK UNIFIED IDEOGRAPH 0x9B8A 0x5BE2 #CJK UNIFIED IDEOGRAPH 0x9B8B 0x5BDE #CJK UNIFIED IDEOGRAPH 0x9B8C 0x5BE5 #CJK UNIFIED IDEOGRAPH 0x9B8D 0x5BEB #CJK UNIFIED IDEOGRAPH 0x9B8E 0x5BF0 #CJK UNIFIED IDEOGRAPH 0x9B8F 0x5BF6 #CJK UNIFIED IDEOGRAPH 0x9B90 0x5BF3 #CJK UNIFIED IDEOGRAPH 0x9B91 0x5C05 #CJK UNIFIED IDEOGRAPH 0x9B92 0x5C07 #CJK UNIFIED IDEOGRAPH 0x9B93 0x5C08 #CJK UNIFIED IDEOGRAPH 0x9B94 0x5C0D #CJK UNIFIED IDEOGRAPH 0x9B95 0x5C13 #CJK UNIFIED IDEOGRAPH 0x9B96 0x5C20 #CJK UNIFIED IDEOGRAPH 0x9B97 0x5C22 #CJK UNIFIED IDEOGRAPH 0x9B98 0x5C28 #CJK UNIFIED IDEOGRAPH 0x9B99 0x5C38 #CJK UNIFIED IDEOGRAPH 0x9B9A 0x5C39 #CJK UNIFIED IDEOGRAPH 0x9B9B 0x5C41 #CJK UNIFIED IDEOGRAPH 0x9B9C 0x5C46 #CJK UNIFIED IDEOGRAPH 0x9B9D 0x5C4E #CJK UNIFIED IDEOGRAPH 0x9B9E 0x5C53 #CJK UNIFIED IDEOGRAPH 0x9B9F 0x5C50 #CJK UNIFIED IDEOGRAPH 0x9BA0 0x5C4F #CJK UNIFIED IDEOGRAPH 0x9BA1 0x5B71 #CJK UNIFIED IDEOGRAPH 0x9BA2 0x5C6C #CJK UNIFIED IDEOGRAPH 0x9BA3 0x5C6E #CJK UNIFIED IDEOGRAPH 0x9BA4 0x4E62 #CJK UNIFIED IDEOGRAPH 0x9BA5 0x5C76 #CJK UNIFIED IDEOGRAPH 0x9BA6 0x5C79 #CJK UNIFIED IDEOGRAPH 0x9BA7 0x5C8C #CJK UNIFIED IDEOGRAPH 0x9BA8 0x5C91 #CJK UNIFIED IDEOGRAPH 0x9BA9 0x5C94 #CJK UNIFIED IDEOGRAPH 0x9BAA 0x599B #CJK UNIFIED IDEOGRAPH 0x9BAB 0x5CAB #CJK UNIFIED IDEOGRAPH 0x9BAC 0x5CBB #CJK UNIFIED IDEOGRAPH 0x9BAD 0x5CB6 #CJK UNIFIED IDEOGRAPH 0x9BAE 0x5CBC #CJK UNIFIED IDEOGRAPH 0x9BAF 0x5CB7 #CJK UNIFIED IDEOGRAPH 0x9BB0 0x5CC5 #CJK UNIFIED IDEOGRAPH 0x9BB1 0x5CBE #CJK UNIFIED IDEOGRAPH 0x9BB2 0x5CC7 #CJK UNIFIED IDEOGRAPH 0x9BB3 0x5CD9 #CJK UNIFIED IDEOGRAPH 0x9BB4 0x5CE9 #CJK UNIFIED IDEOGRAPH 0x9BB5 0x5CFD #CJK UNIFIED IDEOGRAPH 0x9BB6 0x5CFA #CJK UNIFIED IDEOGRAPH 0x9BB7 0x5CED #CJK UNIFIED IDEOGRAPH 0x9BB8 0x5D8C #CJK UNIFIED IDEOGRAPH 0x9BB9 0x5CEA #CJK UNIFIED IDEOGRAPH 0x9BBA 0x5D0B #CJK UNIFIED IDEOGRAPH 0x9BBB 0x5D15 #CJK UNIFIED IDEOGRAPH 0x9BBC 0x5D17 #CJK UNIFIED IDEOGRAPH 0x9BBD 0x5D5C #CJK UNIFIED IDEOGRAPH 0x9BBE 0x5D1F #CJK UNIFIED IDEOGRAPH 0x9BBF 0x5D1B #CJK UNIFIED IDEOGRAPH 0x9BC0 0x5D11 #CJK UNIFIED IDEOGRAPH 0x9BC1 0x5D14 #CJK UNIFIED IDEOGRAPH 0x9BC2 0x5D22 #CJK UNIFIED IDEOGRAPH 0x9BC3 0x5D1A #CJK UNIFIED IDEOGRAPH 0x9BC4 0x5D19 #CJK UNIFIED IDEOGRAPH 0x9BC5 0x5D18 #CJK UNIFIED IDEOGRAPH 0x9BC6 0x5D4C #CJK UNIFIED IDEOGRAPH 0x9BC7 0x5D52 #CJK UNIFIED IDEOGRAPH 0x9BC8 0x5D4E #CJK UNIFIED IDEOGRAPH 0x9BC9 0x5D4B #CJK UNIFIED IDEOGRAPH 0x9BCA 0x5D6C #CJK UNIFIED IDEOGRAPH 0x9BCB 0x5D73 #CJK UNIFIED IDEOGRAPH 0x9BCC 0x5D76 #CJK UNIFIED IDEOGRAPH 0x9BCD 0x5D87 #CJK UNIFIED IDEOGRAPH 0x9BCE 0x5D84 #CJK UNIFIED IDEOGRAPH 0x9BCF 0x5D82 #CJK UNIFIED IDEOGRAPH 0x9BD0 0x5DA2 #CJK UNIFIED IDEOGRAPH 0x9BD1 0x5D9D #CJK UNIFIED IDEOGRAPH 0x9BD2 0x5DAC #CJK UNIFIED IDEOGRAPH 0x9BD3 0x5DAE #CJK UNIFIED IDEOGRAPH 0x9BD4 0x5DBD #CJK UNIFIED IDEOGRAPH 0x9BD5 0x5D90 #CJK UNIFIED IDEOGRAPH 0x9BD6 0x5DB7 #CJK UNIFIED IDEOGRAPH 0x9BD7 0x5DBC #CJK UNIFIED IDEOGRAPH 0x9BD8 0x5DC9 #CJK UNIFIED IDEOGRAPH 0x9BD9 0x5DCD #CJK UNIFIED IDEOGRAPH 0x9BDA 0x5DD3 #CJK UNIFIED IDEOGRAPH 0x9BDB 0x5DD2 #CJK UNIFIED IDEOGRAPH 0x9BDC 0x5DD6 #CJK UNIFIED IDEOGRAPH 0x9BDD 0x5DDB #CJK UNIFIED IDEOGRAPH 0x9BDE 0x5DEB #CJK UNIFIED IDEOGRAPH 0x9BDF 0x5DF2 #CJK UNIFIED IDEOGRAPH 0x9BE0 0x5DF5 #CJK UNIFIED IDEOGRAPH 0x9BE1 0x5E0B #CJK UNIFIED IDEOGRAPH 0x9BE2 0x5E1A #CJK UNIFIED IDEOGRAPH 0x9BE3 0x5E19 #CJK UNIFIED IDEOGRAPH 0x9BE4 0x5E11 #CJK UNIFIED IDEOGRAPH 0x9BE5 0x5E1B #CJK UNIFIED IDEOGRAPH 0x9BE6 0x5E36 #CJK UNIFIED IDEOGRAPH 0x9BE7 0x5E37 #CJK UNIFIED IDEOGRAPH 0x9BE8 0x5E44 #CJK UNIFIED IDEOGRAPH 0x9BE9 0x5E43 #CJK UNIFIED IDEOGRAPH 0x9BEA 0x5E40 #CJK UNIFIED IDEOGRAPH 0x9BEB 0x5E4E #CJK UNIFIED IDEOGRAPH 0x9BEC 0x5E57 #CJK UNIFIED IDEOGRAPH 0x9BED 0x5E54 #CJK UNIFIED IDEOGRAPH 0x9BEE 0x5E5F #CJK UNIFIED IDEOGRAPH 0x9BEF 0x5E62 #CJK UNIFIED IDEOGRAPH 0x9BF0 0x5E64 #CJK UNIFIED IDEOGRAPH 0x9BF1 0x5E47 #CJK UNIFIED IDEOGRAPH 0x9BF2 0x5E75 #CJK UNIFIED IDEOGRAPH 0x9BF3 0x5E76 #CJK UNIFIED IDEOGRAPH 0x9BF4 0x5E7A #CJK UNIFIED IDEOGRAPH 0x9BF5 0x9EBC #CJK UNIFIED IDEOGRAPH 0x9BF6 0x5E7F #CJK UNIFIED IDEOGRAPH 0x9BF7 0x5EA0 #CJK UNIFIED IDEOGRAPH 0x9BF8 0x5EC1 #CJK UNIFIED IDEOGRAPH 0x9BF9 0x5EC2 #CJK UNIFIED IDEOGRAPH 0x9BFA 0x5EC8 #CJK UNIFIED IDEOGRAPH 0x9BFB 0x5ED0 #CJK UNIFIED IDEOGRAPH 0x9BFC 0x5ECF #CJK UNIFIED IDEOGRAPH 0x9C40 0x5ED6 #CJK UNIFIED IDEOGRAPH 0x9C41 0x5EE3 #CJK UNIFIED IDEOGRAPH 0x9C42 0x5EDD #CJK UNIFIED IDEOGRAPH 0x9C43 0x5EDA #CJK UNIFIED IDEOGRAPH 0x9C44 0x5EDB #CJK UNIFIED IDEOGRAPH 0x9C45 0x5EE2 #CJK UNIFIED IDEOGRAPH 0x9C46 0x5EE1 #CJK UNIFIED IDEOGRAPH 0x9C47 0x5EE8 #CJK UNIFIED IDEOGRAPH 0x9C48 0x5EE9 #CJK UNIFIED IDEOGRAPH 0x9C49 0x5EEC #CJK UNIFIED IDEOGRAPH 0x9C4A 0x5EF1 #CJK UNIFIED IDEOGRAPH 0x9C4B 0x5EF3 #CJK UNIFIED IDEOGRAPH 0x9C4C 0x5EF0 #CJK UNIFIED IDEOGRAPH 0x9C4D 0x5EF4 #CJK UNIFIED IDEOGRAPH 0x9C4E 0x5EF8 #CJK UNIFIED IDEOGRAPH 0x9C4F 0x5EFE #CJK UNIFIED IDEOGRAPH 0x9C50 0x5F03 #CJK UNIFIED IDEOGRAPH 0x9C51 0x5F09 #CJK UNIFIED IDEOGRAPH 0x9C52 0x5F5D #CJK UNIFIED IDEOGRAPH 0x9C53 0x5F5C #CJK UNIFIED IDEOGRAPH 0x9C54 0x5F0B #CJK UNIFIED IDEOGRAPH 0x9C55 0x5F11 #CJK UNIFIED IDEOGRAPH 0x9C56 0x5F16 #CJK UNIFIED IDEOGRAPH 0x9C57 0x5F29 #CJK UNIFIED IDEOGRAPH 0x9C58 0x5F2D #CJK UNIFIED IDEOGRAPH 0x9C59 0x5F38 #CJK UNIFIED IDEOGRAPH 0x9C5A 0x5F41 #CJK UNIFIED IDEOGRAPH 0x9C5B 0x5F48 #CJK UNIFIED IDEOGRAPH 0x9C5C 0x5F4C #CJK UNIFIED IDEOGRAPH 0x9C5D 0x5F4E #CJK UNIFIED IDEOGRAPH 0x9C5E 0x5F2F #CJK UNIFIED IDEOGRAPH 0x9C5F 0x5F51 #CJK UNIFIED IDEOGRAPH 0x9C60 0x5F56 #CJK UNIFIED IDEOGRAPH 0x9C61 0x5F57 #CJK UNIFIED IDEOGRAPH 0x9C62 0x5F59 #CJK UNIFIED IDEOGRAPH 0x9C63 0x5F61 #CJK UNIFIED IDEOGRAPH 0x9C64 0x5F6D #CJK UNIFIED IDEOGRAPH 0x9C65 0x5F73 #CJK UNIFIED IDEOGRAPH 0x9C66 0x5F77 #CJK UNIFIED IDEOGRAPH 0x9C67 0x5F83 #CJK UNIFIED IDEOGRAPH 0x9C68 0x5F82 #CJK UNIFIED IDEOGRAPH 0x9C69 0x5F7F #CJK UNIFIED IDEOGRAPH 0x9C6A 0x5F8A #CJK UNIFIED IDEOGRAPH 0x9C6B 0x5F88 #CJK UNIFIED IDEOGRAPH 0x9C6C 0x5F91 #CJK UNIFIED IDEOGRAPH 0x9C6D 0x5F87 #CJK UNIFIED IDEOGRAPH 0x9C6E 0x5F9E #CJK UNIFIED IDEOGRAPH 0x9C6F 0x5F99 #CJK UNIFIED IDEOGRAPH 0x9C70 0x5F98 #CJK UNIFIED IDEOGRAPH 0x9C71 0x5FA0 #CJK UNIFIED IDEOGRAPH 0x9C72 0x5FA8 #CJK UNIFIED IDEOGRAPH 0x9C73 0x5FAD #CJK UNIFIED IDEOGRAPH 0x9C74 0x5FBC #CJK UNIFIED IDEOGRAPH 0x9C75 0x5FD6 #CJK UNIFIED IDEOGRAPH 0x9C76 0x5FFB #CJK UNIFIED IDEOGRAPH 0x9C77 0x5FE4 #CJK UNIFIED IDEOGRAPH 0x9C78 0x5FF8 #CJK UNIFIED IDEOGRAPH 0x9C79 0x5FF1 #CJK UNIFIED IDEOGRAPH 0x9C7A 0x5FDD #CJK UNIFIED IDEOGRAPH 0x9C7B 0x60B3 #CJK UNIFIED IDEOGRAPH 0x9C7C 0x5FFF #CJK UNIFIED IDEOGRAPH 0x9C7D 0x6021 #CJK UNIFIED IDEOGRAPH 0x9C7E 0x6060 #CJK UNIFIED IDEOGRAPH 0x9C80 0x6019 #CJK UNIFIED IDEOGRAPH 0x9C81 0x6010 #CJK UNIFIED IDEOGRAPH 0x9C82 0x6029 #CJK UNIFIED IDEOGRAPH 0x9C83 0x600E #CJK UNIFIED IDEOGRAPH 0x9C84 0x6031 #CJK UNIFIED IDEOGRAPH 0x9C85 0x601B #CJK UNIFIED IDEOGRAPH 0x9C86 0x6015 #CJK UNIFIED IDEOGRAPH 0x9C87 0x602B #CJK UNIFIED IDEOGRAPH 0x9C88 0x6026 #CJK UNIFIED IDEOGRAPH 0x9C89 0x600F #CJK UNIFIED IDEOGRAPH 0x9C8A 0x603A #CJK UNIFIED IDEOGRAPH 0x9C8B 0x605A #CJK UNIFIED IDEOGRAPH 0x9C8C 0x6041 #CJK UNIFIED IDEOGRAPH 0x9C8D 0x606A #CJK UNIFIED IDEOGRAPH 0x9C8E 0x6077 #CJK UNIFIED IDEOGRAPH 0x9C8F 0x605F #CJK UNIFIED IDEOGRAPH 0x9C90 0x604A #CJK UNIFIED IDEOGRAPH 0x9C91 0x6046 #CJK UNIFIED IDEOGRAPH 0x9C92 0x604D #CJK UNIFIED IDEOGRAPH 0x9C93 0x6063 #CJK UNIFIED IDEOGRAPH 0x9C94 0x6043 #CJK UNIFIED IDEOGRAPH 0x9C95 0x6064 #CJK UNIFIED IDEOGRAPH 0x9C96 0x6042 #CJK UNIFIED IDEOGRAPH 0x9C97 0x606C #CJK UNIFIED IDEOGRAPH 0x9C98 0x606B #CJK UNIFIED IDEOGRAPH 0x9C99 0x6059 #CJK UNIFIED IDEOGRAPH 0x9C9A 0x6081 #CJK UNIFIED IDEOGRAPH 0x9C9B 0x608D #CJK UNIFIED IDEOGRAPH 0x9C9C 0x60E7 #CJK UNIFIED IDEOGRAPH 0x9C9D 0x6083 #CJK UNIFIED IDEOGRAPH 0x9C9E 0x609A #CJK UNIFIED IDEOGRAPH 0x9C9F 0x6084 #CJK UNIFIED IDEOGRAPH 0x9CA0 0x609B #CJK UNIFIED IDEOGRAPH 0x9CA1 0x6096 #CJK UNIFIED IDEOGRAPH 0x9CA2 0x6097 #CJK UNIFIED IDEOGRAPH 0x9CA3 0x6092 #CJK UNIFIED IDEOGRAPH 0x9CA4 0x60A7 #CJK UNIFIED IDEOGRAPH 0x9CA5 0x608B #CJK UNIFIED IDEOGRAPH 0x9CA6 0x60E1 #CJK UNIFIED IDEOGRAPH 0x9CA7 0x60B8 #CJK UNIFIED IDEOGRAPH 0x9CA8 0x60E0 #CJK UNIFIED IDEOGRAPH 0x9CA9 0x60D3 #CJK UNIFIED IDEOGRAPH 0x9CAA 0x60B4 #CJK UNIFIED IDEOGRAPH 0x9CAB 0x5FF0 #CJK UNIFIED IDEOGRAPH 0x9CAC 0x60BD #CJK UNIFIED IDEOGRAPH 0x9CAD 0x60C6 #CJK UNIFIED IDEOGRAPH 0x9CAE 0x60B5 #CJK UNIFIED IDEOGRAPH 0x9CAF 0x60D8 #CJK UNIFIED IDEOGRAPH 0x9CB0 0x614D #CJK UNIFIED IDEOGRAPH 0x9CB1 0x6115 #CJK UNIFIED IDEOGRAPH 0x9CB2 0x6106 #CJK UNIFIED IDEOGRAPH 0x9CB3 0x60F6 #CJK UNIFIED IDEOGRAPH 0x9CB4 0x60F7 #CJK UNIFIED IDEOGRAPH 0x9CB5 0x6100 #CJK UNIFIED IDEOGRAPH 0x9CB6 0x60F4 #CJK UNIFIED IDEOGRAPH 0x9CB7 0x60FA #CJK UNIFIED IDEOGRAPH 0x9CB8 0x6103 #CJK UNIFIED IDEOGRAPH 0x9CB9 0x6121 #CJK UNIFIED IDEOGRAPH 0x9CBA 0x60FB #CJK UNIFIED IDEOGRAPH 0x9CBB 0x60F1 #CJK UNIFIED IDEOGRAPH 0x9CBC 0x610D #CJK UNIFIED IDEOGRAPH 0x9CBD 0x610E #CJK UNIFIED IDEOGRAPH 0x9CBE 0x6147 #CJK UNIFIED IDEOGRAPH 0x9CBF 0x613E #CJK UNIFIED IDEOGRAPH 0x9CC0 0x6128 #CJK UNIFIED IDEOGRAPH 0x9CC1 0x6127 #CJK UNIFIED IDEOGRAPH 0x9CC2 0x614A #CJK UNIFIED IDEOGRAPH 0x9CC3 0x613F #CJK UNIFIED IDEOGRAPH 0x9CC4 0x613C #CJK UNIFIED IDEOGRAPH 0x9CC5 0x612C #CJK UNIFIED IDEOGRAPH 0x9CC6 0x6134 #CJK UNIFIED IDEOGRAPH 0x9CC7 0x613D #CJK UNIFIED IDEOGRAPH 0x9CC8 0x6142 #CJK UNIFIED IDEOGRAPH 0x9CC9 0x6144 #CJK UNIFIED IDEOGRAPH 0x9CCA 0x6173 #CJK UNIFIED IDEOGRAPH 0x9CCB 0x6177 #CJK UNIFIED IDEOGRAPH 0x9CCC 0x6158 #CJK UNIFIED IDEOGRAPH 0x9CCD 0x6159 #CJK UNIFIED IDEOGRAPH 0x9CCE 0x615A #CJK UNIFIED IDEOGRAPH 0x9CCF 0x616B #CJK UNIFIED IDEOGRAPH 0x9CD0 0x6174 #CJK UNIFIED IDEOGRAPH 0x9CD1 0x616F #CJK UNIFIED IDEOGRAPH 0x9CD2 0x6165 #CJK UNIFIED IDEOGRAPH 0x9CD3 0x6171 #CJK UNIFIED IDEOGRAPH 0x9CD4 0x615F #CJK UNIFIED IDEOGRAPH 0x9CD5 0x615D #CJK UNIFIED IDEOGRAPH 0x9CD6 0x6153 #CJK UNIFIED IDEOGRAPH 0x9CD7 0x6175 #CJK UNIFIED IDEOGRAPH 0x9CD8 0x6199 #CJK UNIFIED IDEOGRAPH 0x9CD9 0x6196 #CJK UNIFIED IDEOGRAPH 0x9CDA 0x6187 #CJK UNIFIED IDEOGRAPH 0x9CDB 0x61AC #CJK UNIFIED IDEOGRAPH 0x9CDC 0x6194 #CJK UNIFIED IDEOGRAPH 0x9CDD 0x619A #CJK UNIFIED IDEOGRAPH 0x9CDE 0x618A #CJK UNIFIED IDEOGRAPH 0x9CDF 0x6191 #CJK UNIFIED IDEOGRAPH 0x9CE0 0x61AB #CJK UNIFIED IDEOGRAPH 0x9CE1 0x61AE #CJK UNIFIED IDEOGRAPH 0x9CE2 0x61CC #CJK UNIFIED IDEOGRAPH 0x9CE3 0x61CA #CJK UNIFIED IDEOGRAPH 0x9CE4 0x61C9 #CJK UNIFIED IDEOGRAPH 0x9CE5 0x61F7 #CJK UNIFIED IDEOGRAPH 0x9CE6 0x61C8 #CJK UNIFIED IDEOGRAPH 0x9CE7 0x61C3 #CJK UNIFIED IDEOGRAPH 0x9CE8 0x61C6 #CJK UNIFIED IDEOGRAPH 0x9CE9 0x61BA #CJK UNIFIED IDEOGRAPH 0x9CEA 0x61CB #CJK UNIFIED IDEOGRAPH 0x9CEB 0x7F79 #CJK UNIFIED IDEOGRAPH 0x9CEC 0x61CD #CJK UNIFIED IDEOGRAPH 0x9CED 0x61E6 #CJK UNIFIED IDEOGRAPH 0x9CEE 0x61E3 #CJK UNIFIED IDEOGRAPH 0x9CEF 0x61F6 #CJK UNIFIED IDEOGRAPH 0x9CF0 0x61FA #CJK UNIFIED IDEOGRAPH 0x9CF1 0x61F4 #CJK UNIFIED IDEOGRAPH 0x9CF2 0x61FF #CJK UNIFIED IDEOGRAPH 0x9CF3 0x61FD #CJK UNIFIED IDEOGRAPH 0x9CF4 0x61FC #CJK UNIFIED IDEOGRAPH 0x9CF5 0x61FE #CJK UNIFIED IDEOGRAPH 0x9CF6 0x6200 #CJK UNIFIED IDEOGRAPH 0x9CF7 0x6208 #CJK UNIFIED IDEOGRAPH 0x9CF8 0x6209 #CJK UNIFIED IDEOGRAPH 0x9CF9 0x620D #CJK UNIFIED IDEOGRAPH 0x9CFA 0x620C #CJK UNIFIED IDEOGRAPH 0x9CFB 0x6214 #CJK UNIFIED IDEOGRAPH 0x9CFC 0x621B #CJK UNIFIED IDEOGRAPH 0x9D40 0x621E #CJK UNIFIED IDEOGRAPH 0x9D41 0x6221 #CJK UNIFIED IDEOGRAPH 0x9D42 0x622A #CJK UNIFIED IDEOGRAPH 0x9D43 0x622E #CJK UNIFIED IDEOGRAPH 0x9D44 0x6230 #CJK UNIFIED IDEOGRAPH 0x9D45 0x6232 #CJK UNIFIED IDEOGRAPH 0x9D46 0x6233 #CJK UNIFIED IDEOGRAPH 0x9D47 0x6241 #CJK UNIFIED IDEOGRAPH 0x9D48 0x624E #CJK UNIFIED IDEOGRAPH 0x9D49 0x625E #CJK UNIFIED IDEOGRAPH 0x9D4A 0x6263 #CJK UNIFIED IDEOGRAPH 0x9D4B 0x625B #CJK UNIFIED IDEOGRAPH 0x9D4C 0x6260 #CJK UNIFIED IDEOGRAPH 0x9D4D 0x6268 #CJK UNIFIED IDEOGRAPH 0x9D4E 0x627C #CJK UNIFIED IDEOGRAPH 0x9D4F 0x6282 #CJK UNIFIED IDEOGRAPH 0x9D50 0x6289 #CJK UNIFIED IDEOGRAPH 0x9D51 0x627E #CJK UNIFIED IDEOGRAPH 0x9D52 0x6292 #CJK UNIFIED IDEOGRAPH 0x9D53 0x6293 #CJK UNIFIED IDEOGRAPH 0x9D54 0x6296 #CJK UNIFIED IDEOGRAPH 0x9D55 0x62D4 #CJK UNIFIED IDEOGRAPH 0x9D56 0x6283 #CJK UNIFIED IDEOGRAPH 0x9D57 0x6294 #CJK UNIFIED IDEOGRAPH 0x9D58 0x62D7 #CJK UNIFIED IDEOGRAPH 0x9D59 0x62D1 #CJK UNIFIED IDEOGRAPH 0x9D5A 0x62BB #CJK UNIFIED IDEOGRAPH 0x9D5B 0x62CF #CJK UNIFIED IDEOGRAPH 0x9D5C 0x62FF #CJK UNIFIED IDEOGRAPH 0x9D5D 0x62C6 #CJK UNIFIED IDEOGRAPH 0x9D5E 0x64D4 #CJK UNIFIED IDEOGRAPH 0x9D5F 0x62C8 #CJK UNIFIED IDEOGRAPH 0x9D60 0x62DC #CJK UNIFIED IDEOGRAPH 0x9D61 0x62CC #CJK UNIFIED IDEOGRAPH 0x9D62 0x62CA #CJK UNIFIED IDEOGRAPH 0x9D63 0x62C2 #CJK UNIFIED IDEOGRAPH 0x9D64 0x62C7 #CJK UNIFIED IDEOGRAPH 0x9D65 0x629B #CJK UNIFIED IDEOGRAPH 0x9D66 0x62C9 #CJK UNIFIED IDEOGRAPH 0x9D67 0x630C #CJK UNIFIED IDEOGRAPH 0x9D68 0x62EE #CJK UNIFIED IDEOGRAPH 0x9D69 0x62F1 #CJK UNIFIED IDEOGRAPH 0x9D6A 0x6327 #CJK UNIFIED IDEOGRAPH 0x9D6B 0x6302 #CJK UNIFIED IDEOGRAPH 0x9D6C 0x6308 #CJK UNIFIED IDEOGRAPH 0x9D6D 0x62EF #CJK UNIFIED IDEOGRAPH 0x9D6E 0x62F5 #CJK UNIFIED IDEOGRAPH 0x9D6F 0x6350 #CJK UNIFIED IDEOGRAPH 0x9D70 0x633E #CJK UNIFIED IDEOGRAPH 0x9D71 0x634D #CJK UNIFIED IDEOGRAPH 0x9D72 0x641C #CJK UNIFIED IDEOGRAPH 0x9D73 0x634F #CJK UNIFIED IDEOGRAPH 0x9D74 0x6396 #CJK UNIFIED IDEOGRAPH 0x9D75 0x638E #CJK UNIFIED IDEOGRAPH 0x9D76 0x6380 #CJK UNIFIED IDEOGRAPH 0x9D77 0x63AB #CJK UNIFIED IDEOGRAPH 0x9D78 0x6376 #CJK UNIFIED IDEOGRAPH 0x9D79 0x63A3 #CJK UNIFIED IDEOGRAPH 0x9D7A 0x638F #CJK UNIFIED IDEOGRAPH 0x9D7B 0x6389 #CJK UNIFIED IDEOGRAPH 0x9D7C 0x639F #CJK UNIFIED IDEOGRAPH 0x9D7D 0x63B5 #CJK UNIFIED IDEOGRAPH 0x9D7E 0x636B #CJK UNIFIED IDEOGRAPH 0x9D80 0x6369 #CJK UNIFIED IDEOGRAPH 0x9D81 0x63BE #CJK UNIFIED IDEOGRAPH 0x9D82 0x63E9 #CJK UNIFIED IDEOGRAPH 0x9D83 0x63C0 #CJK UNIFIED IDEOGRAPH 0x9D84 0x63C6 #CJK UNIFIED IDEOGRAPH 0x9D85 0x63E3 #CJK UNIFIED IDEOGRAPH 0x9D86 0x63C9 #CJK UNIFIED IDEOGRAPH 0x9D87 0x63D2 #CJK UNIFIED IDEOGRAPH 0x9D88 0x63F6 #CJK UNIFIED IDEOGRAPH 0x9D89 0x63C4 #CJK UNIFIED IDEOGRAPH 0x9D8A 0x6416 #CJK UNIFIED IDEOGRAPH 0x9D8B 0x6434 #CJK UNIFIED IDEOGRAPH 0x9D8C 0x6406 #CJK UNIFIED IDEOGRAPH 0x9D8D 0x6413 #CJK UNIFIED IDEOGRAPH 0x9D8E 0x6426 #CJK UNIFIED IDEOGRAPH 0x9D8F 0x6436 #CJK UNIFIED IDEOGRAPH 0x9D90 0x651D #CJK UNIFIED IDEOGRAPH 0x9D91 0x6417 #CJK UNIFIED IDEOGRAPH 0x9D92 0x6428 #CJK UNIFIED IDEOGRAPH 0x9D93 0x640F #CJK UNIFIED IDEOGRAPH 0x9D94 0x6467 #CJK UNIFIED IDEOGRAPH 0x9D95 0x646F #CJK UNIFIED IDEOGRAPH 0x9D96 0x6476 #CJK UNIFIED IDEOGRAPH 0x9D97 0x644E #CJK UNIFIED IDEOGRAPH 0x9D98 0x652A #CJK UNIFIED IDEOGRAPH 0x9D99 0x6495 #CJK UNIFIED IDEOGRAPH 0x9D9A 0x6493 #CJK UNIFIED IDEOGRAPH 0x9D9B 0x64A5 #CJK UNIFIED IDEOGRAPH 0x9D9C 0x64A9 #CJK UNIFIED IDEOGRAPH 0x9D9D 0x6488 #CJK UNIFIED IDEOGRAPH 0x9D9E 0x64BC #CJK UNIFIED IDEOGRAPH 0x9D9F 0x64DA #CJK UNIFIED IDEOGRAPH 0x9DA0 0x64D2 #CJK UNIFIED IDEOGRAPH 0x9DA1 0x64C5 #CJK UNIFIED IDEOGRAPH 0x9DA2 0x64C7 #CJK UNIFIED IDEOGRAPH 0x9DA3 0x64BB #CJK UNIFIED IDEOGRAPH 0x9DA4 0x64D8 #CJK UNIFIED IDEOGRAPH 0x9DA5 0x64C2 #CJK UNIFIED IDEOGRAPH 0x9DA6 0x64F1 #CJK UNIFIED IDEOGRAPH 0x9DA7 0x64E7 #CJK UNIFIED IDEOGRAPH 0x9DA8 0x8209 #CJK UNIFIED IDEOGRAPH 0x9DA9 0x64E0 #CJK UNIFIED IDEOGRAPH 0x9DAA 0x64E1 #CJK UNIFIED IDEOGRAPH 0x9DAB 0x62AC #CJK UNIFIED IDEOGRAPH 0x9DAC 0x64E3 #CJK UNIFIED IDEOGRAPH 0x9DAD 0x64EF #CJK UNIFIED IDEOGRAPH 0x9DAE 0x652C #CJK UNIFIED IDEOGRAPH 0x9DAF 0x64F6 #CJK UNIFIED IDEOGRAPH 0x9DB0 0x64F4 #CJK UNIFIED IDEOGRAPH 0x9DB1 0x64F2 #CJK UNIFIED IDEOGRAPH 0x9DB2 0x64FA #CJK UNIFIED IDEOGRAPH 0x9DB3 0x6500 #CJK UNIFIED IDEOGRAPH 0x9DB4 0x64FD #CJK UNIFIED IDEOGRAPH 0x9DB5 0x6518 #CJK UNIFIED IDEOGRAPH 0x9DB6 0x651C #CJK UNIFIED IDEOGRAPH 0x9DB7 0x6505 #CJK UNIFIED IDEOGRAPH 0x9DB8 0x6524 #CJK UNIFIED IDEOGRAPH 0x9DB9 0x6523 #CJK UNIFIED IDEOGRAPH 0x9DBA 0x652B #CJK UNIFIED IDEOGRAPH 0x9DBB 0x6534 #CJK UNIFIED IDEOGRAPH 0x9DBC 0x6535 #CJK UNIFIED IDEOGRAPH 0x9DBD 0x6537 #CJK UNIFIED IDEOGRAPH 0x9DBE 0x6536 #CJK UNIFIED IDEOGRAPH 0x9DBF 0x6538 #CJK UNIFIED IDEOGRAPH 0x9DC0 0x754B #CJK UNIFIED IDEOGRAPH 0x9DC1 0x6548 #CJK UNIFIED IDEOGRAPH 0x9DC2 0x6556 #CJK UNIFIED IDEOGRAPH 0x9DC3 0x6555 #CJK UNIFIED IDEOGRAPH 0x9DC4 0x654D #CJK UNIFIED IDEOGRAPH 0x9DC5 0x6558 #CJK UNIFIED IDEOGRAPH 0x9DC6 0x655E #CJK UNIFIED IDEOGRAPH 0x9DC7 0x655D #CJK UNIFIED IDEOGRAPH 0x9DC8 0x6572 #CJK UNIFIED IDEOGRAPH 0x9DC9 0x6578 #CJK UNIFIED IDEOGRAPH 0x9DCA 0x6582 #CJK UNIFIED IDEOGRAPH 0x9DCB 0x6583 #CJK UNIFIED IDEOGRAPH 0x9DCC 0x8B8A #CJK UNIFIED IDEOGRAPH 0x9DCD 0x659B #CJK UNIFIED IDEOGRAPH 0x9DCE 0x659F #CJK UNIFIED IDEOGRAPH 0x9DCF 0x65AB #CJK UNIFIED IDEOGRAPH 0x9DD0 0x65B7 #CJK UNIFIED IDEOGRAPH 0x9DD1 0x65C3 #CJK UNIFIED IDEOGRAPH 0x9DD2 0x65C6 #CJK UNIFIED IDEOGRAPH 0x9DD3 0x65C1 #CJK UNIFIED IDEOGRAPH 0x9DD4 0x65C4 #CJK UNIFIED IDEOGRAPH 0x9DD5 0x65CC #CJK UNIFIED IDEOGRAPH 0x9DD6 0x65D2 #CJK UNIFIED IDEOGRAPH 0x9DD7 0x65DB #CJK UNIFIED IDEOGRAPH 0x9DD8 0x65D9 #CJK UNIFIED IDEOGRAPH 0x9DD9 0x65E0 #CJK UNIFIED IDEOGRAPH 0x9DDA 0x65E1 #CJK UNIFIED IDEOGRAPH 0x9DDB 0x65F1 #CJK UNIFIED IDEOGRAPH 0x9DDC 0x6772 #CJK UNIFIED IDEOGRAPH 0x9DDD 0x660A #CJK UNIFIED IDEOGRAPH 0x9DDE 0x6603 #CJK UNIFIED IDEOGRAPH 0x9DDF 0x65FB #CJK UNIFIED IDEOGRAPH 0x9DE0 0x6773 #CJK UNIFIED IDEOGRAPH 0x9DE1 0x6635 #CJK UNIFIED IDEOGRAPH 0x9DE2 0x6636 #CJK UNIFIED IDEOGRAPH 0x9DE3 0x6634 #CJK UNIFIED IDEOGRAPH 0x9DE4 0x661C #CJK UNIFIED IDEOGRAPH 0x9DE5 0x664F #CJK UNIFIED IDEOGRAPH 0x9DE6 0x6644 #CJK UNIFIED IDEOGRAPH 0x9DE7 0x6649 #CJK UNIFIED IDEOGRAPH 0x9DE8 0x6641 #CJK UNIFIED IDEOGRAPH 0x9DE9 0x665E #CJK UNIFIED IDEOGRAPH 0x9DEA 0x665D #CJK UNIFIED IDEOGRAPH 0x9DEB 0x6664 #CJK UNIFIED IDEOGRAPH 0x9DEC 0x6667 #CJK UNIFIED IDEOGRAPH 0x9DED 0x6668 #CJK UNIFIED IDEOGRAPH 0x9DEE 0x665F #CJK UNIFIED IDEOGRAPH 0x9DEF 0x6662 #CJK UNIFIED IDEOGRAPH 0x9DF0 0x6670 #CJK UNIFIED IDEOGRAPH 0x9DF1 0x6683 #CJK UNIFIED IDEOGRAPH 0x9DF2 0x6688 #CJK UNIFIED IDEOGRAPH 0x9DF3 0x668E #CJK UNIFIED IDEOGRAPH 0x9DF4 0x6689 #CJK UNIFIED IDEOGRAPH 0x9DF5 0x6684 #CJK UNIFIED IDEOGRAPH 0x9DF6 0x6698 #CJK UNIFIED IDEOGRAPH 0x9DF7 0x669D #CJK UNIFIED IDEOGRAPH 0x9DF8 0x66C1 #CJK UNIFIED IDEOGRAPH 0x9DF9 0x66B9 #CJK UNIFIED IDEOGRAPH 0x9DFA 0x66C9 #CJK UNIFIED IDEOGRAPH 0x9DFB 0x66BE #CJK UNIFIED IDEOGRAPH 0x9DFC 0x66BC #CJK UNIFIED IDEOGRAPH 0x9E40 0x66C4 #CJK UNIFIED IDEOGRAPH 0x9E41 0x66B8 #CJK UNIFIED IDEOGRAPH 0x9E42 0x66D6 #CJK UNIFIED IDEOGRAPH 0x9E43 0x66DA #CJK UNIFIED IDEOGRAPH 0x9E44 0x66E0 #CJK UNIFIED IDEOGRAPH 0x9E45 0x663F #CJK UNIFIED IDEOGRAPH 0x9E46 0x66E6 #CJK UNIFIED IDEOGRAPH 0x9E47 0x66E9 #CJK UNIFIED IDEOGRAPH 0x9E48 0x66F0 #CJK UNIFIED IDEOGRAPH 0x9E49 0x66F5 #CJK UNIFIED IDEOGRAPH 0x9E4A 0x66F7 #CJK UNIFIED IDEOGRAPH 0x9E4B 0x670F #CJK UNIFIED IDEOGRAPH 0x9E4C 0x6716 #CJK UNIFIED IDEOGRAPH 0x9E4D 0x671E #CJK UNIFIED IDEOGRAPH 0x9E4E 0x6726 #CJK UNIFIED IDEOGRAPH 0x9E4F 0x6727 #CJK UNIFIED IDEOGRAPH 0x9E50 0x9738 #CJK UNIFIED IDEOGRAPH 0x9E51 0x672E #CJK UNIFIED IDEOGRAPH 0x9E52 0x673F #CJK UNIFIED IDEOGRAPH 0x9E53 0x6736 #CJK UNIFIED IDEOGRAPH 0x9E54 0x6741 #CJK UNIFIED IDEOGRAPH 0x9E55 0x6738 #CJK UNIFIED IDEOGRAPH 0x9E56 0x6737 #CJK UNIFIED IDEOGRAPH 0x9E57 0x6746 #CJK UNIFIED IDEOGRAPH 0x9E58 0x675E #CJK UNIFIED IDEOGRAPH 0x9E59 0x6760 #CJK UNIFIED IDEOGRAPH 0x9E5A 0x6759 #CJK UNIFIED IDEOGRAPH 0x9E5B 0x6763 #CJK UNIFIED IDEOGRAPH 0x9E5C 0x6764 #CJK UNIFIED IDEOGRAPH 0x9E5D 0x6789 #CJK UNIFIED IDEOGRAPH 0x9E5E 0x6770 #CJK UNIFIED IDEOGRAPH 0x9E5F 0x67A9 #CJK UNIFIED IDEOGRAPH 0x9E60 0x677C #CJK UNIFIED IDEOGRAPH 0x9E61 0x676A #CJK UNIFIED IDEOGRAPH 0x9E62 0x678C #CJK UNIFIED IDEOGRAPH 0x9E63 0x678B #CJK UNIFIED IDEOGRAPH 0x9E64 0x67A6 #CJK UNIFIED IDEOGRAPH 0x9E65 0x67A1 #CJK UNIFIED IDEOGRAPH 0x9E66 0x6785 #CJK UNIFIED IDEOGRAPH 0x9E67 0x67B7 #CJK UNIFIED IDEOGRAPH 0x9E68 0x67EF #CJK UNIFIED IDEOGRAPH 0x9E69 0x67B4 #CJK UNIFIED IDEOGRAPH 0x9E6A 0x67EC #CJK UNIFIED IDEOGRAPH 0x9E6B 0x67B3 #CJK UNIFIED IDEOGRAPH 0x9E6C 0x67E9 #CJK UNIFIED IDEOGRAPH 0x9E6D 0x67B8 #CJK UNIFIED IDEOGRAPH 0x9E6E 0x67E4 #CJK UNIFIED IDEOGRAPH 0x9E6F 0x67DE #CJK UNIFIED IDEOGRAPH 0x9E70 0x67DD #CJK UNIFIED IDEOGRAPH 0x9E71 0x67E2 #CJK UNIFIED IDEOGRAPH 0x9E72 0x67EE #CJK UNIFIED IDEOGRAPH 0x9E73 0x67B9 #CJK UNIFIED IDEOGRAPH 0x9E74 0x67CE #CJK UNIFIED IDEOGRAPH 0x9E75 0x67C6 #CJK UNIFIED IDEOGRAPH 0x9E76 0x67E7 #CJK UNIFIED IDEOGRAPH 0x9E77 0x6A9C #CJK UNIFIED IDEOGRAPH 0x9E78 0x681E #CJK UNIFIED IDEOGRAPH 0x9E79 0x6846 #CJK UNIFIED IDEOGRAPH 0x9E7A 0x6829 #CJK UNIFIED IDEOGRAPH 0x9E7B 0x6840 #CJK UNIFIED IDEOGRAPH 0x9E7C 0x684D #CJK UNIFIED IDEOGRAPH 0x9E7D 0x6832 #CJK UNIFIED IDEOGRAPH 0x9E7E 0x684E #CJK UNIFIED IDEOGRAPH 0x9E80 0x68B3 #CJK UNIFIED IDEOGRAPH 0x9E81 0x682B #CJK UNIFIED IDEOGRAPH 0x9E82 0x6859 #CJK UNIFIED IDEOGRAPH 0x9E83 0x6863 #CJK UNIFIED IDEOGRAPH 0x9E84 0x6877 #CJK UNIFIED IDEOGRAPH 0x9E85 0x687F #CJK UNIFIED IDEOGRAPH 0x9E86 0x689F #CJK UNIFIED IDEOGRAPH 0x9E87 0x688F #CJK UNIFIED IDEOGRAPH 0x9E88 0x68AD #CJK UNIFIED IDEOGRAPH 0x9E89 0x6894 #CJK UNIFIED IDEOGRAPH 0x9E8A 0x689D #CJK UNIFIED IDEOGRAPH 0x9E8B 0x689B #CJK UNIFIED IDEOGRAPH 0x9E8C 0x6883 #CJK UNIFIED IDEOGRAPH 0x9E8D 0x6AAE #CJK UNIFIED IDEOGRAPH 0x9E8E 0x68B9 #CJK UNIFIED IDEOGRAPH 0x9E8F 0x6874 #CJK UNIFIED IDEOGRAPH 0x9E90 0x68B5 #CJK UNIFIED IDEOGRAPH 0x9E91 0x68A0 #CJK UNIFIED IDEOGRAPH 0x9E92 0x68BA #CJK UNIFIED IDEOGRAPH 0x9E93 0x690F #CJK UNIFIED IDEOGRAPH 0x9E94 0x688D #CJK UNIFIED IDEOGRAPH 0x9E95 0x687E #CJK UNIFIED IDEOGRAPH 0x9E96 0x6901 #CJK UNIFIED IDEOGRAPH 0x9E97 0x68CA #CJK UNIFIED IDEOGRAPH 0x9E98 0x6908 #CJK UNIFIED IDEOGRAPH 0x9E99 0x68D8 #CJK UNIFIED IDEOGRAPH 0x9E9A 0x6922 #CJK UNIFIED IDEOGRAPH 0x9E9B 0x6926 #CJK UNIFIED IDEOGRAPH 0x9E9C 0x68E1 #CJK UNIFIED IDEOGRAPH 0x9E9D 0x690C #CJK UNIFIED IDEOGRAPH 0x9E9E 0x68CD #CJK UNIFIED IDEOGRAPH 0x9E9F 0x68D4 #CJK UNIFIED IDEOGRAPH 0x9EA0 0x68E7 #CJK UNIFIED IDEOGRAPH 0x9EA1 0x68D5 #CJK UNIFIED IDEOGRAPH 0x9EA2 0x6936 #CJK UNIFIED IDEOGRAPH 0x9EA3 0x6912 #CJK UNIFIED IDEOGRAPH 0x9EA4 0x6904 #CJK UNIFIED IDEOGRAPH 0x9EA5 0x68D7 #CJK UNIFIED IDEOGRAPH 0x9EA6 0x68E3 #CJK UNIFIED IDEOGRAPH 0x9EA7 0x6925 #CJK UNIFIED IDEOGRAPH 0x9EA8 0x68F9 #CJK UNIFIED IDEOGRAPH 0x9EA9 0x68E0 #CJK UNIFIED IDEOGRAPH 0x9EAA 0x68EF #CJK UNIFIED IDEOGRAPH 0x9EAB 0x6928 #CJK UNIFIED IDEOGRAPH 0x9EAC 0x692A #CJK UNIFIED IDEOGRAPH 0x9EAD 0x691A #CJK UNIFIED IDEOGRAPH 0x9EAE 0x6923 #CJK UNIFIED IDEOGRAPH 0x9EAF 0x6921 #CJK UNIFIED IDEOGRAPH 0x9EB0 0x68C6 #CJK UNIFIED IDEOGRAPH 0x9EB1 0x6979 #CJK UNIFIED IDEOGRAPH 0x9EB2 0x6977 #CJK UNIFIED IDEOGRAPH 0x9EB3 0x695C #CJK UNIFIED IDEOGRAPH 0x9EB4 0x6978 #CJK UNIFIED IDEOGRAPH 0x9EB5 0x696B #CJK UNIFIED IDEOGRAPH 0x9EB6 0x6954 #CJK UNIFIED IDEOGRAPH 0x9EB7 0x697E #CJK UNIFIED IDEOGRAPH 0x9EB8 0x696E #CJK UNIFIED IDEOGRAPH 0x9EB9 0x6939 #CJK UNIFIED IDEOGRAPH 0x9EBA 0x6974 #CJK UNIFIED IDEOGRAPH 0x9EBB 0x693D #CJK UNIFIED IDEOGRAPH 0x9EBC 0x6959 #CJK UNIFIED IDEOGRAPH 0x9EBD 0x6930 #CJK UNIFIED IDEOGRAPH 0x9EBE 0x6961 #CJK UNIFIED IDEOGRAPH 0x9EBF 0x695E #CJK UNIFIED IDEOGRAPH 0x9EC0 0x695D #CJK UNIFIED IDEOGRAPH 0x9EC1 0x6981 #CJK UNIFIED IDEOGRAPH 0x9EC2 0x696A #CJK UNIFIED IDEOGRAPH 0x9EC3 0x69B2 #CJK UNIFIED IDEOGRAPH 0x9EC4 0x69AE #CJK UNIFIED IDEOGRAPH 0x9EC5 0x69D0 #CJK UNIFIED IDEOGRAPH 0x9EC6 0x69BF #CJK UNIFIED IDEOGRAPH 0x9EC7 0x69C1 #CJK UNIFIED IDEOGRAPH 0x9EC8 0x69D3 #CJK UNIFIED IDEOGRAPH 0x9EC9 0x69BE #CJK UNIFIED IDEOGRAPH 0x9ECA 0x69CE #CJK UNIFIED IDEOGRAPH 0x9ECB 0x5BE8 #CJK UNIFIED IDEOGRAPH 0x9ECC 0x69CA #CJK UNIFIED IDEOGRAPH 0x9ECD 0x69DD #CJK UNIFIED IDEOGRAPH 0x9ECE 0x69BB #CJK UNIFIED IDEOGRAPH 0x9ECF 0x69C3 #CJK UNIFIED IDEOGRAPH 0x9ED0 0x69A7 #CJK UNIFIED IDEOGRAPH 0x9ED1 0x6A2E #CJK UNIFIED IDEOGRAPH 0x9ED2 0x6991 #CJK UNIFIED IDEOGRAPH 0x9ED3 0x69A0 #CJK UNIFIED IDEOGRAPH 0x9ED4 0x699C #CJK UNIFIED IDEOGRAPH 0x9ED5 0x6995 #CJK UNIFIED IDEOGRAPH 0x9ED6 0x69B4 #CJK UNIFIED IDEOGRAPH 0x9ED7 0x69DE #CJK UNIFIED IDEOGRAPH 0x9ED8 0x69E8 #CJK UNIFIED IDEOGRAPH 0x9ED9 0x6A02 #CJK UNIFIED IDEOGRAPH 0x9EDA 0x6A1B #CJK UNIFIED IDEOGRAPH 0x9EDB 0x69FF #CJK UNIFIED IDEOGRAPH 0x9EDC 0x6B0A #CJK UNIFIED IDEOGRAPH 0x9EDD 0x69F9 #CJK UNIFIED IDEOGRAPH 0x9EDE 0x69F2 #CJK UNIFIED IDEOGRAPH 0x9EDF 0x69E7 #CJK UNIFIED IDEOGRAPH 0x9EE0 0x6A05 #CJK UNIFIED IDEOGRAPH 0x9EE1 0x69B1 #CJK UNIFIED IDEOGRAPH 0x9EE2 0x6A1E #CJK UNIFIED IDEOGRAPH 0x9EE3 0x69ED #CJK UNIFIED IDEOGRAPH 0x9EE4 0x6A14 #CJK UNIFIED IDEOGRAPH 0x9EE5 0x69EB #CJK UNIFIED IDEOGRAPH 0x9EE6 0x6A0A #CJK UNIFIED IDEOGRAPH 0x9EE7 0x6A12 #CJK UNIFIED IDEOGRAPH 0x9EE8 0x6AC1 #CJK UNIFIED IDEOGRAPH 0x9EE9 0x6A23 #CJK UNIFIED IDEOGRAPH 0x9EEA 0x6A13 #CJK UNIFIED IDEOGRAPH 0x9EEB 0x6A44 #CJK UNIFIED IDEOGRAPH 0x9EEC 0x6A0C #CJK UNIFIED IDEOGRAPH 0x9EED 0x6A72 #CJK UNIFIED IDEOGRAPH 0x9EEE 0x6A36 #CJK UNIFIED IDEOGRAPH 0x9EEF 0x6A78 #CJK UNIFIED IDEOGRAPH 0x9EF0 0x6A47 #CJK UNIFIED IDEOGRAPH 0x9EF1 0x6A62 #CJK UNIFIED IDEOGRAPH 0x9EF2 0x6A59 #CJK UNIFIED IDEOGRAPH 0x9EF3 0x6A66 #CJK UNIFIED IDEOGRAPH 0x9EF4 0x6A48 #CJK UNIFIED IDEOGRAPH 0x9EF5 0x6A38 #CJK UNIFIED IDEOGRAPH 0x9EF6 0x6A22 #CJK UNIFIED IDEOGRAPH 0x9EF7 0x6A90 #CJK UNIFIED IDEOGRAPH 0x9EF8 0x6A8D #CJK UNIFIED IDEOGRAPH 0x9EF9 0x6AA0 #CJK UNIFIED IDEOGRAPH 0x9EFA 0x6A84 #CJK UNIFIED IDEOGRAPH 0x9EFB 0x6AA2 #CJK UNIFIED IDEOGRAPH 0x9EFC 0x6AA3 #CJK UNIFIED IDEOGRAPH 0x9F40 0x6A97 #CJK UNIFIED IDEOGRAPH 0x9F41 0x8617 #CJK UNIFIED IDEOGRAPH 0x9F42 0x6ABB #CJK UNIFIED IDEOGRAPH 0x9F43 0x6AC3 #CJK UNIFIED IDEOGRAPH 0x9F44 0x6AC2 #CJK UNIFIED IDEOGRAPH 0x9F45 0x6AB8 #CJK UNIFIED IDEOGRAPH 0x9F46 0x6AB3 #CJK UNIFIED IDEOGRAPH 0x9F47 0x6AAC #CJK UNIFIED IDEOGRAPH 0x9F48 0x6ADE #CJK UNIFIED IDEOGRAPH 0x9F49 0x6AD1 #CJK UNIFIED IDEOGRAPH 0x9F4A 0x6ADF #CJK UNIFIED IDEOGRAPH 0x9F4B 0x6AAA #CJK UNIFIED IDEOGRAPH 0x9F4C 0x6ADA #CJK UNIFIED IDEOGRAPH 0x9F4D 0x6AEA #CJK UNIFIED IDEOGRAPH 0x9F4E 0x6AFB #CJK UNIFIED IDEOGRAPH 0x9F4F 0x6B05 #CJK UNIFIED IDEOGRAPH 0x9F50 0x8616 #CJK UNIFIED IDEOGRAPH 0x9F51 0x6AFA #CJK UNIFIED IDEOGRAPH 0x9F52 0x6B12 #CJK UNIFIED IDEOGRAPH 0x9F53 0x6B16 #CJK UNIFIED IDEOGRAPH 0x9F54 0x9B31 #CJK UNIFIED IDEOGRAPH 0x9F55 0x6B1F #CJK UNIFIED IDEOGRAPH 0x9F56 0x6B38 #CJK UNIFIED IDEOGRAPH 0x9F57 0x6B37 #CJK UNIFIED IDEOGRAPH 0x9F58 0x76DC #CJK UNIFIED IDEOGRAPH 0x9F59 0x6B39 #CJK UNIFIED IDEOGRAPH 0x9F5A 0x98EE #CJK UNIFIED IDEOGRAPH 0x9F5B 0x6B47 #CJK UNIFIED IDEOGRAPH 0x9F5C 0x6B43 #CJK UNIFIED IDEOGRAPH 0x9F5D 0x6B49 #CJK UNIFIED IDEOGRAPH 0x9F5E 0x6B50 #CJK UNIFIED IDEOGRAPH 0x9F5F 0x6B59 #CJK UNIFIED IDEOGRAPH 0x9F60 0x6B54 #CJK UNIFIED IDEOGRAPH 0x9F61 0x6B5B #CJK UNIFIED IDEOGRAPH 0x9F62 0x6B5F #CJK UNIFIED IDEOGRAPH 0x9F63 0x6B61 #CJK UNIFIED IDEOGRAPH 0x9F64 0x6B78 #CJK UNIFIED IDEOGRAPH 0x9F65 0x6B79 #CJK UNIFIED IDEOGRAPH 0x9F66 0x6B7F #CJK UNIFIED IDEOGRAPH 0x9F67 0x6B80 #CJK UNIFIED IDEOGRAPH 0x9F68 0x6B84 #CJK UNIFIED IDEOGRAPH 0x9F69 0x6B83 #CJK UNIFIED IDEOGRAPH 0x9F6A 0x6B8D #CJK UNIFIED IDEOGRAPH 0x9F6B 0x6B98 #CJK UNIFIED IDEOGRAPH 0x9F6C 0x6B95 #CJK UNIFIED IDEOGRAPH 0x9F6D 0x6B9E #CJK UNIFIED IDEOGRAPH 0x9F6E 0x6BA4 #CJK UNIFIED IDEOGRAPH 0x9F6F 0x6BAA #CJK UNIFIED IDEOGRAPH 0x9F70 0x6BAB #CJK UNIFIED IDEOGRAPH 0x9F71 0x6BAF #CJK UNIFIED IDEOGRAPH 0x9F72 0x6BB2 #CJK UNIFIED IDEOGRAPH 0x9F73 0x6BB1 #CJK UNIFIED IDEOGRAPH 0x9F74 0x6BB3 #CJK UNIFIED IDEOGRAPH 0x9F75 0x6BB7 #CJK UNIFIED IDEOGRAPH 0x9F76 0x6BBC #CJK UNIFIED IDEOGRAPH 0x9F77 0x6BC6 #CJK UNIFIED IDEOGRAPH 0x9F78 0x6BCB #CJK UNIFIED IDEOGRAPH 0x9F79 0x6BD3 #CJK UNIFIED IDEOGRAPH 0x9F7A 0x6BDF #CJK UNIFIED IDEOGRAPH 0x9F7B 0x6BEC #CJK UNIFIED IDEOGRAPH 0x9F7C 0x6BEB #CJK UNIFIED IDEOGRAPH 0x9F7D 0x6BF3 #CJK UNIFIED IDEOGRAPH 0x9F7E 0x6BEF #CJK UNIFIED IDEOGRAPH 0x9F80 0x9EBE #CJK UNIFIED IDEOGRAPH 0x9F81 0x6C08 #CJK UNIFIED IDEOGRAPH 0x9F82 0x6C13 #CJK UNIFIED IDEOGRAPH 0x9F83 0x6C14 #CJK UNIFIED IDEOGRAPH 0x9F84 0x6C1B #CJK UNIFIED IDEOGRAPH 0x9F85 0x6C24 #CJK UNIFIED IDEOGRAPH 0x9F86 0x6C23 #CJK UNIFIED IDEOGRAPH 0x9F87 0x6C5E #CJK UNIFIED IDEOGRAPH 0x9F88 0x6C55 #CJK UNIFIED IDEOGRAPH 0x9F89 0x6C62 #CJK UNIFIED IDEOGRAPH 0x9F8A 0x6C6A #CJK UNIFIED IDEOGRAPH 0x9F8B 0x6C82 #CJK UNIFIED IDEOGRAPH 0x9F8C 0x6C8D #CJK UNIFIED IDEOGRAPH 0x9F8D 0x6C9A #CJK UNIFIED IDEOGRAPH 0x9F8E 0x6C81 #CJK UNIFIED IDEOGRAPH 0x9F8F 0x6C9B #CJK UNIFIED IDEOGRAPH 0x9F90 0x6C7E #CJK UNIFIED IDEOGRAPH 0x9F91 0x6C68 #CJK UNIFIED IDEOGRAPH 0x9F92 0x6C73 #CJK UNIFIED IDEOGRAPH 0x9F93 0x6C92 #CJK UNIFIED IDEOGRAPH 0x9F94 0x6C90 #CJK UNIFIED IDEOGRAPH 0x9F95 0x6CC4 #CJK UNIFIED IDEOGRAPH 0x9F96 0x6CF1 #CJK UNIFIED IDEOGRAPH 0x9F97 0x6CD3 #CJK UNIFIED IDEOGRAPH 0x9F98 0x6CBD #CJK UNIFIED IDEOGRAPH 0x9F99 0x6CD7 #CJK UNIFIED IDEOGRAPH 0x9F9A 0x6CC5 #CJK UNIFIED IDEOGRAPH 0x9F9B 0x6CDD #CJK UNIFIED IDEOGRAPH 0x9F9C 0x6CAE #CJK UNIFIED IDEOGRAPH 0x9F9D 0x6CB1 #CJK UNIFIED IDEOGRAPH 0x9F9E 0x6CBE #CJK UNIFIED IDEOGRAPH 0x9F9F 0x6CBA #CJK UNIFIED IDEOGRAPH 0x9FA0 0x6CDB #CJK UNIFIED IDEOGRAPH 0x9FA1 0x6CEF #CJK UNIFIED IDEOGRAPH 0x9FA2 0x6CD9 #CJK UNIFIED IDEOGRAPH 0x9FA3 0x6CEA #CJK UNIFIED IDEOGRAPH 0x9FA4 0x6D1F #CJK UNIFIED IDEOGRAPH 0x9FA5 0x884D #CJK UNIFIED IDEOGRAPH 0x9FA6 0x6D36 #CJK UNIFIED IDEOGRAPH 0x9FA7 0x6D2B #CJK UNIFIED IDEOGRAPH 0x9FA8 0x6D3D #CJK UNIFIED IDEOGRAPH 0x9FA9 0x6D38 #CJK UNIFIED IDEOGRAPH 0x9FAA 0x6D19 #CJK UNIFIED IDEOGRAPH 0x9FAB 0x6D35 #CJK UNIFIED IDEOGRAPH 0x9FAC 0x6D33 #CJK UNIFIED IDEOGRAPH 0x9FAD 0x6D12 #CJK UNIFIED IDEOGRAPH 0x9FAE 0x6D0C #CJK UNIFIED IDEOGRAPH 0x9FAF 0x6D63 #CJK UNIFIED IDEOGRAPH 0x9FB0 0x6D93 #CJK UNIFIED IDEOGRAPH 0x9FB1 0x6D64 #CJK UNIFIED IDEOGRAPH 0x9FB2 0x6D5A #CJK UNIFIED IDEOGRAPH 0x9FB3 0x6D79 #CJK UNIFIED IDEOGRAPH 0x9FB4 0x6D59 #CJK UNIFIED IDEOGRAPH 0x9FB5 0x6D8E #CJK UNIFIED IDEOGRAPH 0x9FB6 0x6D95 #CJK UNIFIED IDEOGRAPH 0x9FB7 0x6FE4 #CJK UNIFIED IDEOGRAPH 0x9FB8 0x6D85 #CJK UNIFIED IDEOGRAPH 0x9FB9 0x6DF9 #CJK UNIFIED IDEOGRAPH 0x9FBA 0x6E15 #CJK UNIFIED IDEOGRAPH 0x9FBB 0x6E0A #CJK UNIFIED IDEOGRAPH 0x9FBC 0x6DB5 #CJK UNIFIED IDEOGRAPH 0x9FBD 0x6DC7 #CJK UNIFIED IDEOGRAPH 0x9FBE 0x6DE6 #CJK UNIFIED IDEOGRAPH 0x9FBF 0x6DB8 #CJK UNIFIED IDEOGRAPH 0x9FC0 0x6DC6 #CJK UNIFIED IDEOGRAPH 0x9FC1 0x6DEC #CJK UNIFIED IDEOGRAPH 0x9FC2 0x6DDE #CJK UNIFIED IDEOGRAPH 0x9FC3 0x6DCC #CJK UNIFIED IDEOGRAPH 0x9FC4 0x6DE8 #CJK UNIFIED IDEOGRAPH 0x9FC5 0x6DD2 #CJK UNIFIED IDEOGRAPH 0x9FC6 0x6DC5 #CJK UNIFIED IDEOGRAPH 0x9FC7 0x6DFA #CJK UNIFIED IDEOGRAPH 0x9FC8 0x6DD9 #CJK UNIFIED IDEOGRAPH 0x9FC9 0x6DE4 #CJK UNIFIED IDEOGRAPH 0x9FCA 0x6DD5 #CJK UNIFIED IDEOGRAPH 0x9FCB 0x6DEA #CJK UNIFIED IDEOGRAPH 0x9FCC 0x6DEE #CJK UNIFIED IDEOGRAPH 0x9FCD 0x6E2D #CJK UNIFIED IDEOGRAPH 0x9FCE 0x6E6E #CJK UNIFIED IDEOGRAPH 0x9FCF 0x6E2E #CJK UNIFIED IDEOGRAPH 0x9FD0 0x6E19 #CJK UNIFIED IDEOGRAPH 0x9FD1 0x6E72 #CJK UNIFIED IDEOGRAPH 0x9FD2 0x6E5F #CJK UNIFIED IDEOGRAPH 0x9FD3 0x6E3E #CJK UNIFIED IDEOGRAPH 0x9FD4 0x6E23 #CJK UNIFIED IDEOGRAPH 0x9FD5 0x6E6B #CJK UNIFIED IDEOGRAPH 0x9FD6 0x6E2B #CJK UNIFIED IDEOGRAPH 0x9FD7 0x6E76 #CJK UNIFIED IDEOGRAPH 0x9FD8 0x6E4D #CJK UNIFIED IDEOGRAPH 0x9FD9 0x6E1F #CJK UNIFIED IDEOGRAPH 0x9FDA 0x6E43 #CJK UNIFIED IDEOGRAPH 0x9FDB 0x6E3A #CJK UNIFIED IDEOGRAPH 0x9FDC 0x6E4E #CJK UNIFIED IDEOGRAPH 0x9FDD 0x6E24 #CJK UNIFIED IDEOGRAPH 0x9FDE 0x6EFF #CJK UNIFIED IDEOGRAPH 0x9FDF 0x6E1D #CJK UNIFIED IDEOGRAPH 0x9FE0 0x6E38 #CJK UNIFIED IDEOGRAPH 0x9FE1 0x6E82 #CJK UNIFIED IDEOGRAPH 0x9FE2 0x6EAA #CJK UNIFIED IDEOGRAPH 0x9FE3 0x6E98 #CJK UNIFIED IDEOGRAPH 0x9FE4 0x6EC9 #CJK UNIFIED IDEOGRAPH 0x9FE5 0x6EB7 #CJK UNIFIED IDEOGRAPH 0x9FE6 0x6ED3 #CJK UNIFIED IDEOGRAPH 0x9FE7 0x6EBD #CJK UNIFIED IDEOGRAPH 0x9FE8 0x6EAF #CJK UNIFIED IDEOGRAPH 0x9FE9 0x6EC4 #CJK UNIFIED IDEOGRAPH 0x9FEA 0x6EB2 #CJK UNIFIED IDEOGRAPH 0x9FEB 0x6ED4 #CJK UNIFIED IDEOGRAPH 0x9FEC 0x6ED5 #CJK UNIFIED IDEOGRAPH 0x9FED 0x6E8F #CJK UNIFIED IDEOGRAPH 0x9FEE 0x6EA5 #CJK UNIFIED IDEOGRAPH 0x9FEF 0x6EC2 #CJK UNIFIED IDEOGRAPH 0x9FF0 0x6E9F #CJK UNIFIED IDEOGRAPH 0x9FF1 0x6F41 #CJK UNIFIED IDEOGRAPH 0x9FF2 0x6F11 #CJK UNIFIED IDEOGRAPH 0x9FF3 0x704C #CJK UNIFIED IDEOGRAPH 0x9FF4 0x6EEC #CJK UNIFIED IDEOGRAPH 0x9FF5 0x6EF8 #CJK UNIFIED IDEOGRAPH 0x9FF6 0x6EFE #CJK UNIFIED IDEOGRAPH 0x9FF7 0x6F3F #CJK UNIFIED IDEOGRAPH 0x9FF8 0x6EF2 #CJK UNIFIED IDEOGRAPH 0x9FF9 0x6F31 #CJK UNIFIED IDEOGRAPH 0x9FFA 0x6EEF #CJK UNIFIED IDEOGRAPH 0x9FFB 0x6F32 #CJK UNIFIED IDEOGRAPH 0x9FFC 0x6ECC #CJK UNIFIED IDEOGRAPH 0xE040 0x6F3E #CJK UNIFIED IDEOGRAPH 0xE041 0x6F13 #CJK UNIFIED IDEOGRAPH 0xE042 0x6EF7 #CJK UNIFIED IDEOGRAPH 0xE043 0x6F86 #CJK UNIFIED IDEOGRAPH 0xE044 0x6F7A #CJK UNIFIED IDEOGRAPH 0xE045 0x6F78 #CJK UNIFIED IDEOGRAPH 0xE046 0x6F81 #CJK UNIFIED IDEOGRAPH 0xE047 0x6F80 #CJK UNIFIED IDEOGRAPH 0xE048 0x6F6F #CJK UNIFIED IDEOGRAPH 0xE049 0x6F5B #CJK UNIFIED IDEOGRAPH 0xE04A 0x6FF3 #CJK UNIFIED IDEOGRAPH 0xE04B 0x6F6D #CJK UNIFIED IDEOGRAPH 0xE04C 0x6F82 #CJK UNIFIED IDEOGRAPH 0xE04D 0x6F7C #CJK UNIFIED IDEOGRAPH 0xE04E 0x6F58 #CJK UNIFIED IDEOGRAPH 0xE04F 0x6F8E #CJK UNIFIED IDEOGRAPH 0xE050 0x6F91 #CJK UNIFIED IDEOGRAPH 0xE051 0x6FC2 #CJK UNIFIED IDEOGRAPH 0xE052 0x6F66 #CJK UNIFIED IDEOGRAPH 0xE053 0x6FB3 #CJK UNIFIED IDEOGRAPH 0xE054 0x6FA3 #CJK UNIFIED IDEOGRAPH 0xE055 0x6FA1 #CJK UNIFIED IDEOGRAPH 0xE056 0x6FA4 #CJK UNIFIED IDEOGRAPH 0xE057 0x6FB9 #CJK UNIFIED IDEOGRAPH 0xE058 0x6FC6 #CJK UNIFIED IDEOGRAPH 0xE059 0x6FAA #CJK UNIFIED IDEOGRAPH 0xE05A 0x6FDF #CJK UNIFIED IDEOGRAPH 0xE05B 0x6FD5 #CJK UNIFIED IDEOGRAPH 0xE05C 0x6FEC #CJK UNIFIED IDEOGRAPH 0xE05D 0x6FD4 #CJK UNIFIED IDEOGRAPH 0xE05E 0x6FD8 #CJK UNIFIED IDEOGRAPH 0xE05F 0x6FF1 #CJK UNIFIED IDEOGRAPH 0xE060 0x6FEE #CJK UNIFIED IDEOGRAPH 0xE061 0x6FDB #CJK UNIFIED IDEOGRAPH 0xE062 0x7009 #CJK UNIFIED IDEOGRAPH 0xE063 0x700B #CJK UNIFIED IDEOGRAPH 0xE064 0x6FFA #CJK UNIFIED IDEOGRAPH 0xE065 0x7011 #CJK UNIFIED IDEOGRAPH 0xE066 0x7001 #CJK UNIFIED IDEOGRAPH 0xE067 0x700F #CJK UNIFIED IDEOGRAPH 0xE068 0x6FFE #CJK UNIFIED IDEOGRAPH 0xE069 0x701B #CJK UNIFIED IDEOGRAPH 0xE06A 0x701A #CJK UNIFIED IDEOGRAPH 0xE06B 0x6F74 #CJK UNIFIED IDEOGRAPH 0xE06C 0x701D #CJK UNIFIED IDEOGRAPH 0xE06D 0x7018 #CJK UNIFIED IDEOGRAPH 0xE06E 0x701F #CJK UNIFIED IDEOGRAPH 0xE06F 0x7030 #CJK UNIFIED IDEOGRAPH 0xE070 0x703E #CJK UNIFIED IDEOGRAPH 0xE071 0x7032 #CJK UNIFIED IDEOGRAPH 0xE072 0x7051 #CJK UNIFIED IDEOGRAPH 0xE073 0x7063 #CJK UNIFIED IDEOGRAPH 0xE074 0x7099 #CJK UNIFIED IDEOGRAPH 0xE075 0x7092 #CJK UNIFIED IDEOGRAPH 0xE076 0x70AF #CJK UNIFIED IDEOGRAPH 0xE077 0x70F1 #CJK UNIFIED IDEOGRAPH 0xE078 0x70AC #CJK UNIFIED IDEOGRAPH 0xE079 0x70B8 #CJK UNIFIED IDEOGRAPH 0xE07A 0x70B3 #CJK UNIFIED IDEOGRAPH 0xE07B 0x70AE #CJK UNIFIED IDEOGRAPH 0xE07C 0x70DF #CJK UNIFIED IDEOGRAPH 0xE07D 0x70CB #CJK UNIFIED IDEOGRAPH 0xE07E 0x70DD #CJK UNIFIED IDEOGRAPH 0xE080 0x70D9 #CJK UNIFIED IDEOGRAPH 0xE081 0x7109 #CJK UNIFIED IDEOGRAPH 0xE082 0x70FD #CJK UNIFIED IDEOGRAPH 0xE083 0x711C #CJK UNIFIED IDEOGRAPH 0xE084 0x7119 #CJK UNIFIED IDEOGRAPH 0xE085 0x7165 #CJK UNIFIED IDEOGRAPH 0xE086 0x7155 #CJK UNIFIED IDEOGRAPH 0xE087 0x7188 #CJK UNIFIED IDEOGRAPH 0xE088 0x7166 #CJK UNIFIED IDEOGRAPH 0xE089 0x7162 #CJK UNIFIED IDEOGRAPH 0xE08A 0x714C #CJK UNIFIED IDEOGRAPH 0xE08B 0x7156 #CJK UNIFIED IDEOGRAPH 0xE08C 0x716C #CJK UNIFIED IDEOGRAPH 0xE08D 0x718F #CJK UNIFIED IDEOGRAPH 0xE08E 0x71FB #CJK UNIFIED IDEOGRAPH 0xE08F 0x7184 #CJK UNIFIED IDEOGRAPH 0xE090 0x7195 #CJK UNIFIED IDEOGRAPH 0xE091 0x71A8 #CJK UNIFIED IDEOGRAPH 0xE092 0x71AC #CJK UNIFIED IDEOGRAPH 0xE093 0x71D7 #CJK UNIFIED IDEOGRAPH 0xE094 0x71B9 #CJK UNIFIED IDEOGRAPH 0xE095 0x71BE #CJK UNIFIED IDEOGRAPH 0xE096 0x71D2 #CJK UNIFIED IDEOGRAPH 0xE097 0x71C9 #CJK UNIFIED IDEOGRAPH 0xE098 0x71D4 #CJK UNIFIED IDEOGRAPH 0xE099 0x71CE #CJK UNIFIED IDEOGRAPH 0xE09A 0x71E0 #CJK UNIFIED IDEOGRAPH 0xE09B 0x71EC #CJK UNIFIED IDEOGRAPH 0xE09C 0x71E7 #CJK UNIFIED IDEOGRAPH 0xE09D 0x71F5 #CJK UNIFIED IDEOGRAPH 0xE09E 0x71FC #CJK UNIFIED IDEOGRAPH 0xE09F 0x71F9 #CJK UNIFIED IDEOGRAPH 0xE0A0 0x71FF #CJK UNIFIED IDEOGRAPH 0xE0A1 0x720D #CJK UNIFIED IDEOGRAPH 0xE0A2 0x7210 #CJK UNIFIED IDEOGRAPH 0xE0A3 0x721B #CJK UNIFIED IDEOGRAPH 0xE0A4 0x7228 #CJK UNIFIED IDEOGRAPH 0xE0A5 0x722D #CJK UNIFIED IDEOGRAPH 0xE0A6 0x722C #CJK UNIFIED IDEOGRAPH 0xE0A7 0x7230 #CJK UNIFIED IDEOGRAPH 0xE0A8 0x7232 #CJK UNIFIED IDEOGRAPH 0xE0A9 0x723B #CJK UNIFIED IDEOGRAPH 0xE0AA 0x723C #CJK UNIFIED IDEOGRAPH 0xE0AB 0x723F #CJK UNIFIED IDEOGRAPH 0xE0AC 0x7240 #CJK UNIFIED IDEOGRAPH 0xE0AD 0x7246 #CJK UNIFIED IDEOGRAPH 0xE0AE 0x724B #CJK UNIFIED IDEOGRAPH 0xE0AF 0x7258 #CJK UNIFIED IDEOGRAPH 0xE0B0 0x7274 #CJK UNIFIED IDEOGRAPH 0xE0B1 0x727E #CJK UNIFIED IDEOGRAPH 0xE0B2 0x7282 #CJK UNIFIED IDEOGRAPH 0xE0B3 0x7281 #CJK UNIFIED IDEOGRAPH 0xE0B4 0x7287 #CJK UNIFIED IDEOGRAPH 0xE0B5 0x7292 #CJK UNIFIED IDEOGRAPH 0xE0B6 0x7296 #CJK UNIFIED IDEOGRAPH 0xE0B7 0x72A2 #CJK UNIFIED IDEOGRAPH 0xE0B8 0x72A7 #CJK UNIFIED IDEOGRAPH 0xE0B9 0x72B9 #CJK UNIFIED IDEOGRAPH 0xE0BA 0x72B2 #CJK UNIFIED IDEOGRAPH 0xE0BB 0x72C3 #CJK UNIFIED IDEOGRAPH 0xE0BC 0x72C6 #CJK UNIFIED IDEOGRAPH 0xE0BD 0x72C4 #CJK UNIFIED IDEOGRAPH 0xE0BE 0x72CE #CJK UNIFIED IDEOGRAPH 0xE0BF 0x72D2 #CJK UNIFIED IDEOGRAPH 0xE0C0 0x72E2 #CJK UNIFIED IDEOGRAPH 0xE0C1 0x72E0 #CJK UNIFIED IDEOGRAPH 0xE0C2 0x72E1 #CJK UNIFIED IDEOGRAPH 0xE0C3 0x72F9 #CJK UNIFIED IDEOGRAPH 0xE0C4 0x72F7 #CJK UNIFIED IDEOGRAPH 0xE0C5 0x500F #CJK UNIFIED IDEOGRAPH 0xE0C6 0x7317 #CJK UNIFIED IDEOGRAPH 0xE0C7 0x730A #CJK UNIFIED IDEOGRAPH 0xE0C8 0x731C #CJK UNIFIED IDEOGRAPH 0xE0C9 0x7316 #CJK UNIFIED IDEOGRAPH 0xE0CA 0x731D #CJK UNIFIED IDEOGRAPH 0xE0CB 0x7334 #CJK UNIFIED IDEOGRAPH 0xE0CC 0x732F #CJK UNIFIED IDEOGRAPH 0xE0CD 0x7329 #CJK UNIFIED IDEOGRAPH 0xE0CE 0x7325 #CJK UNIFIED IDEOGRAPH 0xE0CF 0x733E #CJK UNIFIED IDEOGRAPH 0xE0D0 0x734E #CJK UNIFIED IDEOGRAPH 0xE0D1 0x734F #CJK UNIFIED IDEOGRAPH 0xE0D2 0x9ED8 #CJK UNIFIED IDEOGRAPH 0xE0D3 0x7357 #CJK UNIFIED IDEOGRAPH 0xE0D4 0x736A #CJK UNIFIED IDEOGRAPH 0xE0D5 0x7368 #CJK UNIFIED IDEOGRAPH 0xE0D6 0x7370 #CJK UNIFIED IDEOGRAPH 0xE0D7 0x7378 #CJK UNIFIED IDEOGRAPH 0xE0D8 0x7375 #CJK UNIFIED IDEOGRAPH 0xE0D9 0x737B #CJK UNIFIED IDEOGRAPH 0xE0DA 0x737A #CJK UNIFIED IDEOGRAPH 0xE0DB 0x73C8 #CJK UNIFIED IDEOGRAPH 0xE0DC 0x73B3 #CJK UNIFIED IDEOGRAPH 0xE0DD 0x73CE #CJK UNIFIED IDEOGRAPH 0xE0DE 0x73BB #CJK UNIFIED IDEOGRAPH 0xE0DF 0x73C0 #CJK UNIFIED IDEOGRAPH 0xE0E0 0x73E5 #CJK UNIFIED IDEOGRAPH 0xE0E1 0x73EE #CJK UNIFIED IDEOGRAPH 0xE0E2 0x73DE #CJK UNIFIED IDEOGRAPH 0xE0E3 0x74A2 #CJK UNIFIED IDEOGRAPH 0xE0E4 0x7405 #CJK UNIFIED IDEOGRAPH 0xE0E5 0x746F #CJK UNIFIED IDEOGRAPH 0xE0E6 0x7425 #CJK UNIFIED IDEOGRAPH 0xE0E7 0x73F8 #CJK UNIFIED IDEOGRAPH 0xE0E8 0x7432 #CJK UNIFIED IDEOGRAPH 0xE0E9 0x743A #CJK UNIFIED IDEOGRAPH 0xE0EA 0x7455 #CJK UNIFIED IDEOGRAPH 0xE0EB 0x743F #CJK UNIFIED IDEOGRAPH 0xE0EC 0x745F #CJK UNIFIED IDEOGRAPH 0xE0ED 0x7459 #CJK UNIFIED IDEOGRAPH 0xE0EE 0x7441 #CJK UNIFIED IDEOGRAPH 0xE0EF 0x745C #CJK UNIFIED IDEOGRAPH 0xE0F0 0x7469 #CJK UNIFIED IDEOGRAPH 0xE0F1 0x7470 #CJK UNIFIED IDEOGRAPH 0xE0F2 0x7463 #CJK UNIFIED IDEOGRAPH 0xE0F3 0x746A #CJK UNIFIED IDEOGRAPH 0xE0F4 0x7476 #CJK UNIFIED IDEOGRAPH 0xE0F5 0x747E #CJK UNIFIED IDEOGRAPH 0xE0F6 0x748B #CJK UNIFIED IDEOGRAPH 0xE0F7 0x749E #CJK UNIFIED IDEOGRAPH 0xE0F8 0x74A7 #CJK UNIFIED IDEOGRAPH 0xE0F9 0x74CA #CJK UNIFIED IDEOGRAPH 0xE0FA 0x74CF #CJK UNIFIED IDEOGRAPH 0xE0FB 0x74D4 #CJK UNIFIED IDEOGRAPH 0xE0FC 0x73F1 #CJK UNIFIED IDEOGRAPH 0xE140 0x74E0 #CJK UNIFIED IDEOGRAPH 0xE141 0x74E3 #CJK UNIFIED IDEOGRAPH 0xE142 0x74E7 #CJK UNIFIED IDEOGRAPH 0xE143 0x74E9 #CJK UNIFIED IDEOGRAPH 0xE144 0x74EE #CJK UNIFIED IDEOGRAPH 0xE145 0x74F2 #CJK UNIFIED IDEOGRAPH 0xE146 0x74F0 #CJK UNIFIED IDEOGRAPH 0xE147 0x74F1 #CJK UNIFIED IDEOGRAPH 0xE148 0x74F8 #CJK UNIFIED IDEOGRAPH 0xE149 0x74F7 #CJK UNIFIED IDEOGRAPH 0xE14A 0x7504 #CJK UNIFIED IDEOGRAPH 0xE14B 0x7503 #CJK UNIFIED IDEOGRAPH 0xE14C 0x7505 #CJK UNIFIED IDEOGRAPH 0xE14D 0x750C #CJK UNIFIED IDEOGRAPH 0xE14E 0x750E #CJK UNIFIED IDEOGRAPH 0xE14F 0x750D #CJK UNIFIED IDEOGRAPH 0xE150 0x7515 #CJK UNIFIED IDEOGRAPH 0xE151 0x7513 #CJK UNIFIED IDEOGRAPH 0xE152 0x751E #CJK UNIFIED IDEOGRAPH 0xE153 0x7526 #CJK UNIFIED IDEOGRAPH 0xE154 0x752C #CJK UNIFIED IDEOGRAPH 0xE155 0x753C #CJK UNIFIED IDEOGRAPH 0xE156 0x7544 #CJK UNIFIED IDEOGRAPH 0xE157 0x754D #CJK UNIFIED IDEOGRAPH 0xE158 0x754A #CJK UNIFIED IDEOGRAPH 0xE159 0x7549 #CJK UNIFIED IDEOGRAPH 0xE15A 0x755B #CJK UNIFIED IDEOGRAPH 0xE15B 0x7546 #CJK UNIFIED IDEOGRAPH 0xE15C 0x755A #CJK UNIFIED IDEOGRAPH 0xE15D 0x7569 #CJK UNIFIED IDEOGRAPH 0xE15E 0x7564 #CJK UNIFIED IDEOGRAPH 0xE15F 0x7567 #CJK UNIFIED IDEOGRAPH 0xE160 0x756B #CJK UNIFIED IDEOGRAPH 0xE161 0x756D #CJK UNIFIED IDEOGRAPH 0xE162 0x7578 #CJK UNIFIED IDEOGRAPH 0xE163 0x7576 #CJK UNIFIED IDEOGRAPH 0xE164 0x7586 #CJK UNIFIED IDEOGRAPH 0xE165 0x7587 #CJK UNIFIED IDEOGRAPH 0xE166 0x7574 #CJK UNIFIED IDEOGRAPH 0xE167 0x758A #CJK UNIFIED IDEOGRAPH 0xE168 0x7589 #CJK UNIFIED IDEOGRAPH 0xE169 0x7582 #CJK UNIFIED IDEOGRAPH 0xE16A 0x7594 #CJK UNIFIED IDEOGRAPH 0xE16B 0x759A #CJK UNIFIED IDEOGRAPH 0xE16C 0x759D #CJK UNIFIED IDEOGRAPH 0xE16D 0x75A5 #CJK UNIFIED IDEOGRAPH 0xE16E 0x75A3 #CJK UNIFIED IDEOGRAPH 0xE16F 0x75C2 #CJK UNIFIED IDEOGRAPH 0xE170 0x75B3 #CJK UNIFIED IDEOGRAPH 0xE171 0x75C3 #CJK UNIFIED IDEOGRAPH 0xE172 0x75B5 #CJK UNIFIED IDEOGRAPH 0xE173 0x75BD #CJK UNIFIED IDEOGRAPH 0xE174 0x75B8 #CJK UNIFIED IDEOGRAPH 0xE175 0x75BC #CJK UNIFIED IDEOGRAPH 0xE176 0x75B1 #CJK UNIFIED IDEOGRAPH 0xE177 0x75CD #CJK UNIFIED IDEOGRAPH 0xE178 0x75CA #CJK UNIFIED IDEOGRAPH 0xE179 0x75D2 #CJK UNIFIED IDEOGRAPH 0xE17A 0x75D9 #CJK UNIFIED IDEOGRAPH 0xE17B 0x75E3 #CJK UNIFIED IDEOGRAPH 0xE17C 0x75DE #CJK UNIFIED IDEOGRAPH 0xE17D 0x75FE #CJK UNIFIED IDEOGRAPH 0xE17E 0x75FF #CJK UNIFIED IDEOGRAPH 0xE180 0x75FC #CJK UNIFIED IDEOGRAPH 0xE181 0x7601 #CJK UNIFIED IDEOGRAPH 0xE182 0x75F0 #CJK UNIFIED IDEOGRAPH 0xE183 0x75FA #CJK UNIFIED IDEOGRAPH 0xE184 0x75F2 #CJK UNIFIED IDEOGRAPH 0xE185 0x75F3 #CJK UNIFIED IDEOGRAPH 0xE186 0x760B #CJK UNIFIED IDEOGRAPH 0xE187 0x760D #CJK UNIFIED IDEOGRAPH 0xE188 0x7609 #CJK UNIFIED IDEOGRAPH 0xE189 0x761F #CJK UNIFIED IDEOGRAPH 0xE18A 0x7627 #CJK UNIFIED IDEOGRAPH 0xE18B 0x7620 #CJK UNIFIED IDEOGRAPH 0xE18C 0x7621 #CJK UNIFIED IDEOGRAPH 0xE18D 0x7622 #CJK UNIFIED IDEOGRAPH 0xE18E 0x7624 #CJK UNIFIED IDEOGRAPH 0xE18F 0x7634 #CJK UNIFIED IDEOGRAPH 0xE190 0x7630 #CJK UNIFIED IDEOGRAPH 0xE191 0x763B #CJK UNIFIED IDEOGRAPH 0xE192 0x7647 #CJK UNIFIED IDEOGRAPH 0xE193 0x7648 #CJK UNIFIED IDEOGRAPH 0xE194 0x7646 #CJK UNIFIED IDEOGRAPH 0xE195 0x765C #CJK UNIFIED IDEOGRAPH 0xE196 0x7658 #CJK UNIFIED IDEOGRAPH 0xE197 0x7661 #CJK UNIFIED IDEOGRAPH 0xE198 0x7662 #CJK UNIFIED IDEOGRAPH 0xE199 0x7668 #CJK UNIFIED IDEOGRAPH 0xE19A 0x7669 #CJK UNIFIED IDEOGRAPH 0xE19B 0x766A #CJK UNIFIED IDEOGRAPH 0xE19C 0x7667 #CJK UNIFIED IDEOGRAPH 0xE19D 0x766C #CJK UNIFIED IDEOGRAPH 0xE19E 0x7670 #CJK UNIFIED IDEOGRAPH 0xE19F 0x7672 #CJK UNIFIED IDEOGRAPH 0xE1A0 0x7676 #CJK UNIFIED IDEOGRAPH 0xE1A1 0x7678 #CJK UNIFIED IDEOGRAPH 0xE1A2 0x767C #CJK UNIFIED IDEOGRAPH 0xE1A3 0x7680 #CJK UNIFIED IDEOGRAPH 0xE1A4 0x7683 #CJK UNIFIED IDEOGRAPH 0xE1A5 0x7688 #CJK UNIFIED IDEOGRAPH 0xE1A6 0x768B #CJK UNIFIED IDEOGRAPH 0xE1A7 0x768E #CJK UNIFIED IDEOGRAPH 0xE1A8 0x7696 #CJK UNIFIED IDEOGRAPH 0xE1A9 0x7693 #CJK UNIFIED IDEOGRAPH 0xE1AA 0x7699 #CJK UNIFIED IDEOGRAPH 0xE1AB 0x769A #CJK UNIFIED IDEOGRAPH 0xE1AC 0x76B0 #CJK UNIFIED IDEOGRAPH 0xE1AD 0x76B4 #CJK UNIFIED IDEOGRAPH 0xE1AE 0x76B8 #CJK UNIFIED IDEOGRAPH 0xE1AF 0x76B9 #CJK UNIFIED IDEOGRAPH 0xE1B0 0x76BA #CJK UNIFIED IDEOGRAPH 0xE1B1 0x76C2 #CJK UNIFIED IDEOGRAPH 0xE1B2 0x76CD #CJK UNIFIED IDEOGRAPH 0xE1B3 0x76D6 #CJK UNIFIED IDEOGRAPH 0xE1B4 0x76D2 #CJK UNIFIED IDEOGRAPH 0xE1B5 0x76DE #CJK UNIFIED IDEOGRAPH 0xE1B6 0x76E1 #CJK UNIFIED IDEOGRAPH 0xE1B7 0x76E5 #CJK UNIFIED IDEOGRAPH 0xE1B8 0x76E7 #CJK UNIFIED IDEOGRAPH 0xE1B9 0x76EA #CJK UNIFIED IDEOGRAPH 0xE1BA 0x862F #CJK UNIFIED IDEOGRAPH 0xE1BB 0x76FB #CJK UNIFIED IDEOGRAPH 0xE1BC 0x7708 #CJK UNIFIED IDEOGRAPH 0xE1BD 0x7707 #CJK UNIFIED IDEOGRAPH 0xE1BE 0x7704 #CJK UNIFIED IDEOGRAPH 0xE1BF 0x7729 #CJK UNIFIED IDEOGRAPH 0xE1C0 0x7724 #CJK UNIFIED IDEOGRAPH 0xE1C1 0x771E #CJK UNIFIED IDEOGRAPH 0xE1C2 0x7725 #CJK UNIFIED IDEOGRAPH 0xE1C3 0x7726 #CJK UNIFIED IDEOGRAPH 0xE1C4 0x771B #CJK UNIFIED IDEOGRAPH 0xE1C5 0x7737 #CJK UNIFIED IDEOGRAPH 0xE1C6 0x7738 #CJK UNIFIED IDEOGRAPH 0xE1C7 0x7747 #CJK UNIFIED IDEOGRAPH 0xE1C8 0x775A #CJK UNIFIED IDEOGRAPH 0xE1C9 0x7768 #CJK UNIFIED IDEOGRAPH 0xE1CA 0x776B #CJK UNIFIED IDEOGRAPH 0xE1CB 0x775B #CJK UNIFIED IDEOGRAPH 0xE1CC 0x7765 #CJK UNIFIED IDEOGRAPH 0xE1CD 0x777F #CJK UNIFIED IDEOGRAPH 0xE1CE 0x777E #CJK UNIFIED IDEOGRAPH 0xE1CF 0x7779 #CJK UNIFIED IDEOGRAPH 0xE1D0 0x778E #CJK UNIFIED IDEOGRAPH 0xE1D1 0x778B #CJK UNIFIED IDEOGRAPH 0xE1D2 0x7791 #CJK UNIFIED IDEOGRAPH 0xE1D3 0x77A0 #CJK UNIFIED IDEOGRAPH 0xE1D4 0x779E #CJK UNIFIED IDEOGRAPH 0xE1D5 0x77B0 #CJK UNIFIED IDEOGRAPH 0xE1D6 0x77B6 #CJK UNIFIED IDEOGRAPH 0xE1D7 0x77B9 #CJK UNIFIED IDEOGRAPH 0xE1D8 0x77BF #CJK UNIFIED IDEOGRAPH 0xE1D9 0x77BC #CJK UNIFIED IDEOGRAPH 0xE1DA 0x77BD #CJK UNIFIED IDEOGRAPH 0xE1DB 0x77BB #CJK UNIFIED IDEOGRAPH 0xE1DC 0x77C7 #CJK UNIFIED IDEOGRAPH 0xE1DD 0x77CD #CJK UNIFIED IDEOGRAPH 0xE1DE 0x77D7 #CJK UNIFIED IDEOGRAPH 0xE1DF 0x77DA #CJK UNIFIED IDEOGRAPH 0xE1E0 0x77DC #CJK UNIFIED IDEOGRAPH 0xE1E1 0x77E3 #CJK UNIFIED IDEOGRAPH 0xE1E2 0x77EE #CJK UNIFIED IDEOGRAPH 0xE1E3 0x77FC #CJK UNIFIED IDEOGRAPH 0xE1E4 0x780C #CJK UNIFIED IDEOGRAPH 0xE1E5 0x7812 #CJK UNIFIED IDEOGRAPH 0xE1E6 0x7926 #CJK UNIFIED IDEOGRAPH 0xE1E7 0x7820 #CJK UNIFIED IDEOGRAPH 0xE1E8 0x792A #CJK UNIFIED IDEOGRAPH 0xE1E9 0x7845 #CJK UNIFIED IDEOGRAPH 0xE1EA 0x788E #CJK UNIFIED IDEOGRAPH 0xE1EB 0x7874 #CJK UNIFIED IDEOGRAPH 0xE1EC 0x7886 #CJK UNIFIED IDEOGRAPH 0xE1ED 0x787C #CJK UNIFIED IDEOGRAPH 0xE1EE 0x789A #CJK UNIFIED IDEOGRAPH 0xE1EF 0x788C #CJK UNIFIED IDEOGRAPH 0xE1F0 0x78A3 #CJK UNIFIED IDEOGRAPH 0xE1F1 0x78B5 #CJK UNIFIED IDEOGRAPH 0xE1F2 0x78AA #CJK UNIFIED IDEOGRAPH 0xE1F3 0x78AF #CJK UNIFIED IDEOGRAPH 0xE1F4 0x78D1 #CJK UNIFIED IDEOGRAPH 0xE1F5 0x78C6 #CJK UNIFIED IDEOGRAPH 0xE1F6 0x78CB #CJK UNIFIED IDEOGRAPH 0xE1F7 0x78D4 #CJK UNIFIED IDEOGRAPH 0xE1F8 0x78BE #CJK UNIFIED IDEOGRAPH 0xE1F9 0x78BC #CJK UNIFIED IDEOGRAPH 0xE1FA 0x78C5 #CJK UNIFIED IDEOGRAPH 0xE1FB 0x78CA #CJK UNIFIED IDEOGRAPH 0xE1FC 0x78EC #CJK UNIFIED IDEOGRAPH 0xE240 0x78E7 #CJK UNIFIED IDEOGRAPH 0xE241 0x78DA #CJK UNIFIED IDEOGRAPH 0xE242 0x78FD #CJK UNIFIED IDEOGRAPH 0xE243 0x78F4 #CJK UNIFIED IDEOGRAPH 0xE244 0x7907 #CJK UNIFIED IDEOGRAPH 0xE245 0x7912 #CJK UNIFIED IDEOGRAPH 0xE246 0x7911 #CJK UNIFIED IDEOGRAPH 0xE247 0x7919 #CJK UNIFIED IDEOGRAPH 0xE248 0x792C #CJK UNIFIED IDEOGRAPH 0xE249 0x792B #CJK UNIFIED IDEOGRAPH 0xE24A 0x7940 #CJK UNIFIED IDEOGRAPH 0xE24B 0x7960 #CJK UNIFIED IDEOGRAPH 0xE24C 0x7957 #CJK UNIFIED IDEOGRAPH 0xE24D 0x795F #CJK UNIFIED IDEOGRAPH 0xE24E 0x795A #CJK UNIFIED IDEOGRAPH 0xE24F 0x7955 #CJK UNIFIED IDEOGRAPH 0xE250 0x7953 #CJK UNIFIED IDEOGRAPH 0xE251 0x797A #CJK UNIFIED IDEOGRAPH 0xE252 0x797F #CJK UNIFIED IDEOGRAPH 0xE253 0x798A #CJK UNIFIED IDEOGRAPH 0xE254 0x799D #CJK UNIFIED IDEOGRAPH 0xE255 0x79A7 #CJK UNIFIED IDEOGRAPH 0xE256 0x9F4B #CJK UNIFIED IDEOGRAPH 0xE257 0x79AA #CJK UNIFIED IDEOGRAPH 0xE258 0x79AE #CJK UNIFIED IDEOGRAPH 0xE259 0x79B3 #CJK UNIFIED IDEOGRAPH 0xE25A 0x79B9 #CJK UNIFIED IDEOGRAPH 0xE25B 0x79BA #CJK UNIFIED IDEOGRAPH 0xE25C 0x79C9 #CJK UNIFIED IDEOGRAPH 0xE25D 0x79D5 #CJK UNIFIED IDEOGRAPH 0xE25E 0x79E7 #CJK UNIFIED IDEOGRAPH 0xE25F 0x79EC #CJK UNIFIED IDEOGRAPH 0xE260 0x79E1 #CJK UNIFIED IDEOGRAPH 0xE261 0x79E3 #CJK UNIFIED IDEOGRAPH 0xE262 0x7A08 #CJK UNIFIED IDEOGRAPH 0xE263 0x7A0D #CJK UNIFIED IDEOGRAPH 0xE264 0x7A18 #CJK UNIFIED IDEOGRAPH 0xE265 0x7A19 #CJK UNIFIED IDEOGRAPH 0xE266 0x7A20 #CJK UNIFIED IDEOGRAPH 0xE267 0x7A1F #CJK UNIFIED IDEOGRAPH 0xE268 0x7980 #CJK UNIFIED IDEOGRAPH 0xE269 0x7A31 #CJK UNIFIED IDEOGRAPH 0xE26A 0x7A3B #CJK UNIFIED IDEOGRAPH 0xE26B 0x7A3E #CJK UNIFIED IDEOGRAPH 0xE26C 0x7A37 #CJK UNIFIED IDEOGRAPH 0xE26D 0x7A43 #CJK UNIFIED IDEOGRAPH 0xE26E 0x7A57 #CJK UNIFIED IDEOGRAPH 0xE26F 0x7A49 #CJK UNIFIED IDEOGRAPH 0xE270 0x7A61 #CJK UNIFIED IDEOGRAPH 0xE271 0x7A62 #CJK UNIFIED IDEOGRAPH 0xE272 0x7A69 #CJK UNIFIED IDEOGRAPH 0xE273 0x9F9D #CJK UNIFIED IDEOGRAPH 0xE274 0x7A70 #CJK UNIFIED IDEOGRAPH 0xE275 0x7A79 #CJK UNIFIED IDEOGRAPH 0xE276 0x7A7D #CJK UNIFIED IDEOGRAPH 0xE277 0x7A88 #CJK UNIFIED IDEOGRAPH 0xE278 0x7A97 #CJK UNIFIED IDEOGRAPH 0xE279 0x7A95 #CJK UNIFIED IDEOGRAPH 0xE27A 0x7A98 #CJK UNIFIED IDEOGRAPH 0xE27B 0x7A96 #CJK UNIFIED IDEOGRAPH 0xE27C 0x7AA9 #CJK UNIFIED IDEOGRAPH 0xE27D 0x7AC8 #CJK UNIFIED IDEOGRAPH 0xE27E 0x7AB0 #CJK UNIFIED IDEOGRAPH 0xE280 0x7AB6 #CJK UNIFIED IDEOGRAPH 0xE281 0x7AC5 #CJK UNIFIED IDEOGRAPH 0xE282 0x7AC4 #CJK UNIFIED IDEOGRAPH 0xE283 0x7ABF #CJK UNIFIED IDEOGRAPH 0xE284 0x9083 #CJK UNIFIED IDEOGRAPH 0xE285 0x7AC7 #CJK UNIFIED IDEOGRAPH 0xE286 0x7ACA #CJK UNIFIED IDEOGRAPH 0xE287 0x7ACD #CJK UNIFIED IDEOGRAPH 0xE288 0x7ACF #CJK UNIFIED IDEOGRAPH 0xE289 0x7AD5 #CJK UNIFIED IDEOGRAPH 0xE28A 0x7AD3 #CJK UNIFIED IDEOGRAPH 0xE28B 0x7AD9 #CJK UNIFIED IDEOGRAPH 0xE28C 0x7ADA #CJK UNIFIED IDEOGRAPH 0xE28D 0x7ADD #CJK UNIFIED IDEOGRAPH 0xE28E 0x7AE1 #CJK UNIFIED IDEOGRAPH 0xE28F 0x7AE2 #CJK UNIFIED IDEOGRAPH 0xE290 0x7AE6 #CJK UNIFIED IDEOGRAPH 0xE291 0x7AED #CJK UNIFIED IDEOGRAPH 0xE292 0x7AF0 #CJK UNIFIED IDEOGRAPH 0xE293 0x7B02 #CJK UNIFIED IDEOGRAPH 0xE294 0x7B0F #CJK UNIFIED IDEOGRAPH 0xE295 0x7B0A #CJK UNIFIED IDEOGRAPH 0xE296 0x7B06 #CJK UNIFIED IDEOGRAPH 0xE297 0x7B33 #CJK UNIFIED IDEOGRAPH 0xE298 0x7B18 #CJK UNIFIED IDEOGRAPH 0xE299 0x7B19 #CJK UNIFIED IDEOGRAPH 0xE29A 0x7B1E #CJK UNIFIED IDEOGRAPH 0xE29B 0x7B35 #CJK UNIFIED IDEOGRAPH 0xE29C 0x7B28 #CJK UNIFIED IDEOGRAPH 0xE29D 0x7B36 #CJK UNIFIED IDEOGRAPH 0xE29E 0x7B50 #CJK UNIFIED IDEOGRAPH 0xE29F 0x7B7A #CJK UNIFIED IDEOGRAPH 0xE2A0 0x7B04 #CJK UNIFIED IDEOGRAPH 0xE2A1 0x7B4D #CJK UNIFIED IDEOGRAPH 0xE2A2 0x7B0B #CJK UNIFIED IDEOGRAPH 0xE2A3 0x7B4C #CJK UNIFIED IDEOGRAPH 0xE2A4 0x7B45 #CJK UNIFIED IDEOGRAPH 0xE2A5 0x7B75 #CJK UNIFIED IDEOGRAPH 0xE2A6 0x7B65 #CJK UNIFIED IDEOGRAPH 0xE2A7 0x7B74 #CJK UNIFIED IDEOGRAPH 0xE2A8 0x7B67 #CJK UNIFIED IDEOGRAPH 0xE2A9 0x7B70 #CJK UNIFIED IDEOGRAPH 0xE2AA 0x7B71 #CJK UNIFIED IDEOGRAPH 0xE2AB 0x7B6C #CJK UNIFIED IDEOGRAPH 0xE2AC 0x7B6E #CJK UNIFIED IDEOGRAPH 0xE2AD 0x7B9D #CJK UNIFIED IDEOGRAPH 0xE2AE 0x7B98 #CJK UNIFIED IDEOGRAPH 0xE2AF 0x7B9F #CJK UNIFIED IDEOGRAPH 0xE2B0 0x7B8D #CJK UNIFIED IDEOGRAPH 0xE2B1 0x7B9C #CJK UNIFIED IDEOGRAPH 0xE2B2 0x7B9A #CJK UNIFIED IDEOGRAPH 0xE2B3 0x7B8B #CJK UNIFIED IDEOGRAPH 0xE2B4 0x7B92 #CJK UNIFIED IDEOGRAPH 0xE2B5 0x7B8F #CJK UNIFIED IDEOGRAPH 0xE2B6 0x7B5D #CJK UNIFIED IDEOGRAPH 0xE2B7 0x7B99 #CJK UNIFIED IDEOGRAPH 0xE2B8 0x7BCB #CJK UNIFIED IDEOGRAPH 0xE2B9 0x7BC1 #CJK UNIFIED IDEOGRAPH 0xE2BA 0x7BCC #CJK UNIFIED IDEOGRAPH 0xE2BB 0x7BCF #CJK UNIFIED IDEOGRAPH 0xE2BC 0x7BB4 #CJK UNIFIED IDEOGRAPH 0xE2BD 0x7BC6 #CJK UNIFIED IDEOGRAPH 0xE2BE 0x7BDD #CJK UNIFIED IDEOGRAPH 0xE2BF 0x7BE9 #CJK UNIFIED IDEOGRAPH 0xE2C0 0x7C11 #CJK UNIFIED IDEOGRAPH 0xE2C1 0x7C14 #CJK UNIFIED IDEOGRAPH 0xE2C2 0x7BE6 #CJK UNIFIED IDEOGRAPH 0xE2C3 0x7BE5 #CJK UNIFIED IDEOGRAPH 0xE2C4 0x7C60 #CJK UNIFIED IDEOGRAPH 0xE2C5 0x7C00 #CJK UNIFIED IDEOGRAPH 0xE2C6 0x7C07 #CJK UNIFIED IDEOGRAPH 0xE2C7 0x7C13 #CJK UNIFIED IDEOGRAPH 0xE2C8 0x7BF3 #CJK UNIFIED IDEOGRAPH 0xE2C9 0x7BF7 #CJK UNIFIED IDEOGRAPH 0xE2CA 0x7C17 #CJK UNIFIED IDEOGRAPH 0xE2CB 0x7C0D #CJK UNIFIED IDEOGRAPH 0xE2CC 0x7BF6 #CJK UNIFIED IDEOGRAPH 0xE2CD 0x7C23 #CJK UNIFIED IDEOGRAPH 0xE2CE 0x7C27 #CJK UNIFIED IDEOGRAPH 0xE2CF 0x7C2A #CJK UNIFIED IDEOGRAPH 0xE2D0 0x7C1F #CJK UNIFIED IDEOGRAPH 0xE2D1 0x7C37 #CJK UNIFIED IDEOGRAPH 0xE2D2 0x7C2B #CJK UNIFIED IDEOGRAPH 0xE2D3 0x7C3D #CJK UNIFIED IDEOGRAPH 0xE2D4 0x7C4C #CJK UNIFIED IDEOGRAPH 0xE2D5 0x7C43 #CJK UNIFIED IDEOGRAPH 0xE2D6 0x7C54 #CJK UNIFIED IDEOGRAPH 0xE2D7 0x7C4F #CJK UNIFIED IDEOGRAPH 0xE2D8 0x7C40 #CJK UNIFIED IDEOGRAPH 0xE2D9 0x7C50 #CJK UNIFIED IDEOGRAPH 0xE2DA 0x7C58 #CJK UNIFIED IDEOGRAPH 0xE2DB 0x7C5F #CJK UNIFIED IDEOGRAPH 0xE2DC 0x7C64 #CJK UNIFIED IDEOGRAPH 0xE2DD 0x7C56 #CJK UNIFIED IDEOGRAPH 0xE2DE 0x7C65 #CJK UNIFIED IDEOGRAPH 0xE2DF 0x7C6C #CJK UNIFIED IDEOGRAPH 0xE2E0 0x7C75 #CJK UNIFIED IDEOGRAPH 0xE2E1 0x7C83 #CJK UNIFIED IDEOGRAPH 0xE2E2 0x7C90 #CJK UNIFIED IDEOGRAPH 0xE2E3 0x7CA4 #CJK UNIFIED IDEOGRAPH 0xE2E4 0x7CAD #CJK UNIFIED IDEOGRAPH 0xE2E5 0x7CA2 #CJK UNIFIED IDEOGRAPH 0xE2E6 0x7CAB #CJK UNIFIED IDEOGRAPH 0xE2E7 0x7CA1 #CJK UNIFIED IDEOGRAPH 0xE2E8 0x7CA8 #CJK UNIFIED IDEOGRAPH 0xE2E9 0x7CB3 #CJK UNIFIED IDEOGRAPH 0xE2EA 0x7CB2 #CJK UNIFIED IDEOGRAPH 0xE2EB 0x7CB1 #CJK UNIFIED IDEOGRAPH 0xE2EC 0x7CAE #CJK UNIFIED IDEOGRAPH 0xE2ED 0x7CB9 #CJK UNIFIED IDEOGRAPH 0xE2EE 0x7CBD #CJK UNIFIED IDEOGRAPH 0xE2EF 0x7CC0 #CJK UNIFIED IDEOGRAPH 0xE2F0 0x7CC5 #CJK UNIFIED IDEOGRAPH 0xE2F1 0x7CC2 #CJK UNIFIED IDEOGRAPH 0xE2F2 0x7CD8 #CJK UNIFIED IDEOGRAPH 0xE2F3 0x7CD2 #CJK UNIFIED IDEOGRAPH 0xE2F4 0x7CDC #CJK UNIFIED IDEOGRAPH 0xE2F5 0x7CE2 #CJK UNIFIED IDEOGRAPH 0xE2F6 0x9B3B #CJK UNIFIED IDEOGRAPH 0xE2F7 0x7CEF #CJK UNIFIED IDEOGRAPH 0xE2F8 0x7CF2 #CJK UNIFIED IDEOGRAPH 0xE2F9 0x7CF4 #CJK UNIFIED IDEOGRAPH 0xE2FA 0x7CF6 #CJK UNIFIED IDEOGRAPH 0xE2FB 0x7CFA #CJK UNIFIED IDEOGRAPH 0xE2FC 0x7D06 #CJK UNIFIED IDEOGRAPH 0xE340 0x7D02 #CJK UNIFIED IDEOGRAPH 0xE341 0x7D1C #CJK UNIFIED IDEOGRAPH 0xE342 0x7D15 #CJK UNIFIED IDEOGRAPH 0xE343 0x7D0A #CJK UNIFIED IDEOGRAPH 0xE344 0x7D45 #CJK UNIFIED IDEOGRAPH 0xE345 0x7D4B #CJK UNIFIED IDEOGRAPH 0xE346 0x7D2E #CJK UNIFIED IDEOGRAPH 0xE347 0x7D32 #CJK UNIFIED IDEOGRAPH 0xE348 0x7D3F #CJK UNIFIED IDEOGRAPH 0xE349 0x7D35 #CJK UNIFIED IDEOGRAPH 0xE34A 0x7D46 #CJK UNIFIED IDEOGRAPH 0xE34B 0x7D73 #CJK UNIFIED IDEOGRAPH 0xE34C 0x7D56 #CJK UNIFIED IDEOGRAPH 0xE34D 0x7D4E #CJK UNIFIED IDEOGRAPH 0xE34E 0x7D72 #CJK UNIFIED IDEOGRAPH 0xE34F 0x7D68 #CJK UNIFIED IDEOGRAPH 0xE350 0x7D6E #CJK UNIFIED IDEOGRAPH 0xE351 0x7D4F #CJK UNIFIED IDEOGRAPH 0xE352 0x7D63 #CJK UNIFIED IDEOGRAPH 0xE353 0x7D93 #CJK UNIFIED IDEOGRAPH 0xE354 0x7D89 #CJK UNIFIED IDEOGRAPH 0xE355 0x7D5B #CJK UNIFIED IDEOGRAPH 0xE356 0x7D8F #CJK UNIFIED IDEOGRAPH 0xE357 0x7D7D #CJK UNIFIED IDEOGRAPH 0xE358 0x7D9B #CJK UNIFIED IDEOGRAPH 0xE359 0x7DBA #CJK UNIFIED IDEOGRAPH 0xE35A 0x7DAE #CJK UNIFIED IDEOGRAPH 0xE35B 0x7DA3 #CJK UNIFIED IDEOGRAPH 0xE35C 0x7DB5 #CJK UNIFIED IDEOGRAPH 0xE35D 0x7DC7 #CJK UNIFIED IDEOGRAPH 0xE35E 0x7DBD #CJK UNIFIED IDEOGRAPH 0xE35F 0x7DAB #CJK UNIFIED IDEOGRAPH 0xE360 0x7E3D #CJK UNIFIED IDEOGRAPH 0xE361 0x7DA2 #CJK UNIFIED IDEOGRAPH 0xE362 0x7DAF #CJK UNIFIED IDEOGRAPH 0xE363 0x7DDC #CJK UNIFIED IDEOGRAPH 0xE364 0x7DB8 #CJK UNIFIED IDEOGRAPH 0xE365 0x7D9F #CJK UNIFIED IDEOGRAPH 0xE366 0x7DB0 #CJK UNIFIED IDEOGRAPH 0xE367 0x7DD8 #CJK UNIFIED IDEOGRAPH 0xE368 0x7DDD #CJK UNIFIED IDEOGRAPH 0xE369 0x7DE4 #CJK UNIFIED IDEOGRAPH 0xE36A 0x7DDE #CJK UNIFIED IDEOGRAPH 0xE36B 0x7DFB #CJK UNIFIED IDEOGRAPH 0xE36C 0x7DF2 #CJK UNIFIED IDEOGRAPH 0xE36D 0x7DE1 #CJK UNIFIED IDEOGRAPH 0xE36E 0x7E05 #CJK UNIFIED IDEOGRAPH 0xE36F 0x7E0A #CJK UNIFIED IDEOGRAPH 0xE370 0x7E23 #CJK UNIFIED IDEOGRAPH 0xE371 0x7E21 #CJK UNIFIED IDEOGRAPH 0xE372 0x7E12 #CJK UNIFIED IDEOGRAPH 0xE373 0x7E31 #CJK UNIFIED IDEOGRAPH 0xE374 0x7E1F #CJK UNIFIED IDEOGRAPH 0xE375 0x7E09 #CJK UNIFIED IDEOGRAPH 0xE376 0x7E0B #CJK UNIFIED IDEOGRAPH 0xE377 0x7E22 #CJK UNIFIED IDEOGRAPH 0xE378 0x7E46 #CJK UNIFIED IDEOGRAPH 0xE379 0x7E66 #CJK UNIFIED IDEOGRAPH 0xE37A 0x7E3B #CJK UNIFIED IDEOGRAPH 0xE37B 0x7E35 #CJK UNIFIED IDEOGRAPH 0xE37C 0x7E39 #CJK UNIFIED IDEOGRAPH 0xE37D 0x7E43 #CJK UNIFIED IDEOGRAPH 0xE37E 0x7E37 #CJK UNIFIED IDEOGRAPH 0xE380 0x7E32 #CJK UNIFIED IDEOGRAPH 0xE381 0x7E3A #CJK UNIFIED IDEOGRAPH 0xE382 0x7E67 #CJK UNIFIED IDEOGRAPH 0xE383 0x7E5D #CJK UNIFIED IDEOGRAPH 0xE384 0x7E56 #CJK UNIFIED IDEOGRAPH 0xE385 0x7E5E #CJK UNIFIED IDEOGRAPH 0xE386 0x7E59 #CJK UNIFIED IDEOGRAPH 0xE387 0x7E5A #CJK UNIFIED IDEOGRAPH 0xE388 0x7E79 #CJK UNIFIED IDEOGRAPH 0xE389 0x7E6A #CJK UNIFIED IDEOGRAPH 0xE38A 0x7E69 #CJK UNIFIED IDEOGRAPH 0xE38B 0x7E7C #CJK UNIFIED IDEOGRAPH 0xE38C 0x7E7B #CJK UNIFIED IDEOGRAPH 0xE38D 0x7E83 #CJK UNIFIED IDEOGRAPH 0xE38E 0x7DD5 #CJK UNIFIED IDEOGRAPH 0xE38F 0x7E7D #CJK UNIFIED IDEOGRAPH 0xE390 0x8FAE #CJK UNIFIED IDEOGRAPH 0xE391 0x7E7F #CJK UNIFIED IDEOGRAPH 0xE392 0x7E88 #CJK UNIFIED IDEOGRAPH 0xE393 0x7E89 #CJK UNIFIED IDEOGRAPH 0xE394 0x7E8C #CJK UNIFIED IDEOGRAPH 0xE395 0x7E92 #CJK UNIFIED IDEOGRAPH 0xE396 0x7E90 #CJK UNIFIED IDEOGRAPH 0xE397 0x7E93 #CJK UNIFIED IDEOGRAPH 0xE398 0x7E94 #CJK UNIFIED IDEOGRAPH 0xE399 0x7E96 #CJK UNIFIED IDEOGRAPH 0xE39A 0x7E8E #CJK UNIFIED IDEOGRAPH 0xE39B 0x7E9B #CJK UNIFIED IDEOGRAPH 0xE39C 0x7E9C #CJK UNIFIED IDEOGRAPH 0xE39D 0x7F38 #CJK UNIFIED IDEOGRAPH 0xE39E 0x7F3A #CJK UNIFIED IDEOGRAPH 0xE39F 0x7F45 #CJK UNIFIED IDEOGRAPH 0xE3A0 0x7F4C #CJK UNIFIED IDEOGRAPH 0xE3A1 0x7F4D #CJK UNIFIED IDEOGRAPH 0xE3A2 0x7F4E #CJK UNIFIED IDEOGRAPH 0xE3A3 0x7F50 #CJK UNIFIED IDEOGRAPH 0xE3A4 0x7F51 #CJK UNIFIED IDEOGRAPH 0xE3A5 0x7F55 #CJK UNIFIED IDEOGRAPH 0xE3A6 0x7F54 #CJK UNIFIED IDEOGRAPH 0xE3A7 0x7F58 #CJK UNIFIED IDEOGRAPH 0xE3A8 0x7F5F #CJK UNIFIED IDEOGRAPH 0xE3A9 0x7F60 #CJK UNIFIED IDEOGRAPH 0xE3AA 0x7F68 #CJK UNIFIED IDEOGRAPH 0xE3AB 0x7F69 #CJK UNIFIED IDEOGRAPH 0xE3AC 0x7F67 #CJK UNIFIED IDEOGRAPH 0xE3AD 0x7F78 #CJK UNIFIED IDEOGRAPH 0xE3AE 0x7F82 #CJK UNIFIED IDEOGRAPH 0xE3AF 0x7F86 #CJK UNIFIED IDEOGRAPH 0xE3B0 0x7F83 #CJK UNIFIED IDEOGRAPH 0xE3B1 0x7F88 #CJK UNIFIED IDEOGRAPH 0xE3B2 0x7F87 #CJK UNIFIED IDEOGRAPH 0xE3B3 0x7F8C #CJK UNIFIED IDEOGRAPH 0xE3B4 0x7F94 #CJK UNIFIED IDEOGRAPH 0xE3B5 0x7F9E #CJK UNIFIED IDEOGRAPH 0xE3B6 0x7F9D #CJK UNIFIED IDEOGRAPH 0xE3B7 0x7F9A #CJK UNIFIED IDEOGRAPH 0xE3B8 0x7FA3 #CJK UNIFIED IDEOGRAPH 0xE3B9 0x7FAF #CJK UNIFIED IDEOGRAPH 0xE3BA 0x7FB2 #CJK UNIFIED IDEOGRAPH 0xE3BB 0x7FB9 #CJK UNIFIED IDEOGRAPH 0xE3BC 0x7FAE #CJK UNIFIED IDEOGRAPH 0xE3BD 0x7FB6 #CJK UNIFIED IDEOGRAPH 0xE3BE 0x7FB8 #CJK UNIFIED IDEOGRAPH 0xE3BF 0x8B71 #CJK UNIFIED IDEOGRAPH 0xE3C0 0x7FC5 #CJK UNIFIED IDEOGRAPH 0xE3C1 0x7FC6 #CJK UNIFIED IDEOGRAPH 0xE3C2 0x7FCA #CJK UNIFIED IDEOGRAPH 0xE3C3 0x7FD5 #CJK UNIFIED IDEOGRAPH 0xE3C4 0x7FD4 #CJK UNIFIED IDEOGRAPH 0xE3C5 0x7FE1 #CJK UNIFIED IDEOGRAPH 0xE3C6 0x7FE6 #CJK UNIFIED IDEOGRAPH 0xE3C7 0x7FE9 #CJK UNIFIED IDEOGRAPH 0xE3C8 0x7FF3 #CJK UNIFIED IDEOGRAPH 0xE3C9 0x7FF9 #CJK UNIFIED IDEOGRAPH 0xE3CA 0x98DC #CJK UNIFIED IDEOGRAPH 0xE3CB 0x8006 #CJK UNIFIED IDEOGRAPH 0xE3CC 0x8004 #CJK UNIFIED IDEOGRAPH 0xE3CD 0x800B #CJK UNIFIED IDEOGRAPH 0xE3CE 0x8012 #CJK UNIFIED IDEOGRAPH 0xE3CF 0x8018 #CJK UNIFIED IDEOGRAPH 0xE3D0 0x8019 #CJK UNIFIED IDEOGRAPH 0xE3D1 0x801C #CJK UNIFIED IDEOGRAPH 0xE3D2 0x8021 #CJK UNIFIED IDEOGRAPH 0xE3D3 0x8028 #CJK UNIFIED IDEOGRAPH 0xE3D4 0x803F #CJK UNIFIED IDEOGRAPH 0xE3D5 0x803B #CJK UNIFIED IDEOGRAPH 0xE3D6 0x804A #CJK UNIFIED IDEOGRAPH 0xE3D7 0x8046 #CJK UNIFIED IDEOGRAPH 0xE3D8 0x8052 #CJK UNIFIED IDEOGRAPH 0xE3D9 0x8058 #CJK UNIFIED IDEOGRAPH 0xE3DA 0x805A #CJK UNIFIED IDEOGRAPH 0xE3DB 0x805F #CJK UNIFIED IDEOGRAPH 0xE3DC 0x8062 #CJK UNIFIED IDEOGRAPH 0xE3DD 0x8068 #CJK UNIFIED IDEOGRAPH 0xE3DE 0x8073 #CJK UNIFIED IDEOGRAPH 0xE3DF 0x8072 #CJK UNIFIED IDEOGRAPH 0xE3E0 0x8070 #CJK UNIFIED IDEOGRAPH 0xE3E1 0x8076 #CJK UNIFIED IDEOGRAPH 0xE3E2 0x8079 #CJK UNIFIED IDEOGRAPH 0xE3E3 0x807D #CJK UNIFIED IDEOGRAPH 0xE3E4 0x807F #CJK UNIFIED IDEOGRAPH 0xE3E5 0x8084 #CJK UNIFIED IDEOGRAPH 0xE3E6 0x8086 #CJK UNIFIED IDEOGRAPH 0xE3E7 0x8085 #CJK UNIFIED IDEOGRAPH 0xE3E8 0x809B #CJK UNIFIED IDEOGRAPH 0xE3E9 0x8093 #CJK UNIFIED IDEOGRAPH 0xE3EA 0x809A #CJK UNIFIED IDEOGRAPH 0xE3EB 0x80AD #CJK UNIFIED IDEOGRAPH 0xE3EC 0x5190 #CJK UNIFIED IDEOGRAPH 0xE3ED 0x80AC #CJK UNIFIED IDEOGRAPH 0xE3EE 0x80DB #CJK UNIFIED IDEOGRAPH 0xE3EF 0x80E5 #CJK UNIFIED IDEOGRAPH 0xE3F0 0x80D9 #CJK UNIFIED IDEOGRAPH 0xE3F1 0x80DD #CJK UNIFIED IDEOGRAPH 0xE3F2 0x80C4 #CJK UNIFIED IDEOGRAPH 0xE3F3 0x80DA #CJK UNIFIED IDEOGRAPH 0xE3F4 0x80D6 #CJK UNIFIED IDEOGRAPH 0xE3F5 0x8109 #CJK UNIFIED IDEOGRAPH 0xE3F6 0x80EF #CJK UNIFIED IDEOGRAPH 0xE3F7 0x80F1 #CJK UNIFIED IDEOGRAPH 0xE3F8 0x811B #CJK UNIFIED IDEOGRAPH 0xE3F9 0x8129 #CJK UNIFIED IDEOGRAPH 0xE3FA 0x8123 #CJK UNIFIED IDEOGRAPH 0xE3FB 0x812F #CJK UNIFIED IDEOGRAPH 0xE3FC 0x814B #CJK UNIFIED IDEOGRAPH 0xE440 0x968B #CJK UNIFIED IDEOGRAPH 0xE441 0x8146 #CJK UNIFIED IDEOGRAPH 0xE442 0x813E #CJK UNIFIED IDEOGRAPH 0xE443 0x8153 #CJK UNIFIED IDEOGRAPH 0xE444 0x8151 #CJK UNIFIED IDEOGRAPH 0xE445 0x80FC #CJK UNIFIED IDEOGRAPH 0xE446 0x8171 #CJK UNIFIED IDEOGRAPH 0xE447 0x816E #CJK UNIFIED IDEOGRAPH 0xE448 0x8165 #CJK UNIFIED IDEOGRAPH 0xE449 0x8166 #CJK UNIFIED IDEOGRAPH 0xE44A 0x8174 #CJK UNIFIED IDEOGRAPH 0xE44B 0x8183 #CJK UNIFIED IDEOGRAPH 0xE44C 0x8188 #CJK UNIFIED IDEOGRAPH 0xE44D 0x818A #CJK UNIFIED IDEOGRAPH 0xE44E 0x8180 #CJK UNIFIED IDEOGRAPH 0xE44F 0x8182 #CJK UNIFIED IDEOGRAPH 0xE450 0x81A0 #CJK UNIFIED IDEOGRAPH 0xE451 0x8195 #CJK UNIFIED IDEOGRAPH 0xE452 0x81A4 #CJK UNIFIED IDEOGRAPH 0xE453 0x81A3 #CJK UNIFIED IDEOGRAPH 0xE454 0x815F #CJK UNIFIED IDEOGRAPH 0xE455 0x8193 #CJK UNIFIED IDEOGRAPH 0xE456 0x81A9 #CJK UNIFIED IDEOGRAPH 0xE457 0x81B0 #CJK UNIFIED IDEOGRAPH 0xE458 0x81B5 #CJK UNIFIED IDEOGRAPH 0xE459 0x81BE #CJK UNIFIED IDEOGRAPH 0xE45A 0x81B8 #CJK UNIFIED IDEOGRAPH 0xE45B 0x81BD #CJK UNIFIED IDEOGRAPH 0xE45C 0x81C0 #CJK UNIFIED IDEOGRAPH 0xE45D 0x81C2 #CJK UNIFIED IDEOGRAPH 0xE45E 0x81BA #CJK UNIFIED IDEOGRAPH 0xE45F 0x81C9 #CJK UNIFIED IDEOGRAPH 0xE460 0x81CD #CJK UNIFIED IDEOGRAPH 0xE461 0x81D1 #CJK UNIFIED IDEOGRAPH 0xE462 0x81D9 #CJK UNIFIED IDEOGRAPH 0xE463 0x81D8 #CJK UNIFIED IDEOGRAPH 0xE464 0x81C8 #CJK UNIFIED IDEOGRAPH 0xE465 0x81DA #CJK UNIFIED IDEOGRAPH 0xE466 0x81DF #CJK UNIFIED IDEOGRAPH 0xE467 0x81E0 #CJK UNIFIED IDEOGRAPH 0xE468 0x81E7 #CJK UNIFIED IDEOGRAPH 0xE469 0x81FA #CJK UNIFIED IDEOGRAPH 0xE46A 0x81FB #CJK UNIFIED IDEOGRAPH 0xE46B 0x81FE #CJK UNIFIED IDEOGRAPH 0xE46C 0x8201 #CJK UNIFIED IDEOGRAPH 0xE46D 0x8202 #CJK UNIFIED IDEOGRAPH 0xE46E 0x8205 #CJK UNIFIED IDEOGRAPH 0xE46F 0x8207 #CJK UNIFIED IDEOGRAPH 0xE470 0x820A #CJK UNIFIED IDEOGRAPH 0xE471 0x820D #CJK UNIFIED IDEOGRAPH 0xE472 0x8210 #CJK UNIFIED IDEOGRAPH 0xE473 0x8216 #CJK UNIFIED IDEOGRAPH 0xE474 0x8229 #CJK UNIFIED IDEOGRAPH 0xE475 0x822B #CJK UNIFIED IDEOGRAPH 0xE476 0x8238 #CJK UNIFIED IDEOGRAPH 0xE477 0x8233 #CJK UNIFIED IDEOGRAPH 0xE478 0x8240 #CJK UNIFIED IDEOGRAPH 0xE479 0x8259 #CJK UNIFIED IDEOGRAPH 0xE47A 0x8258 #CJK UNIFIED IDEOGRAPH 0xE47B 0x825D #CJK UNIFIED IDEOGRAPH 0xE47C 0x825A #CJK UNIFIED IDEOGRAPH 0xE47D 0x825F #CJK UNIFIED IDEOGRAPH 0xE47E 0x8264 #CJK UNIFIED IDEOGRAPH 0xE480 0x8262 #CJK UNIFIED IDEOGRAPH 0xE481 0x8268 #CJK UNIFIED IDEOGRAPH 0xE482 0x826A #CJK UNIFIED IDEOGRAPH 0xE483 0x826B #CJK UNIFIED IDEOGRAPH 0xE484 0x822E #CJK UNIFIED IDEOGRAPH 0xE485 0x8271 #CJK UNIFIED IDEOGRAPH 0xE486 0x8277 #CJK UNIFIED IDEOGRAPH 0xE487 0x8278 #CJK UNIFIED IDEOGRAPH 0xE488 0x827E #CJK UNIFIED IDEOGRAPH 0xE489 0x828D #CJK UNIFIED IDEOGRAPH 0xE48A 0x8292 #CJK UNIFIED IDEOGRAPH 0xE48B 0x82AB #CJK UNIFIED IDEOGRAPH 0xE48C 0x829F #CJK UNIFIED IDEOGRAPH 0xE48D 0x82BB #CJK UNIFIED IDEOGRAPH 0xE48E 0x82AC #CJK UNIFIED IDEOGRAPH 0xE48F 0x82E1 #CJK UNIFIED IDEOGRAPH 0xE490 0x82E3 #CJK UNIFIED IDEOGRAPH 0xE491 0x82DF #CJK UNIFIED IDEOGRAPH 0xE492 0x82D2 #CJK UNIFIED IDEOGRAPH 0xE493 0x82F4 #CJK UNIFIED IDEOGRAPH 0xE494 0x82F3 #CJK UNIFIED IDEOGRAPH 0xE495 0x82FA #CJK UNIFIED IDEOGRAPH 0xE496 0x8393 #CJK UNIFIED IDEOGRAPH 0xE497 0x8303 #CJK UNIFIED IDEOGRAPH 0xE498 0x82FB #CJK UNIFIED IDEOGRAPH 0xE499 0x82F9 #CJK UNIFIED IDEOGRAPH 0xE49A 0x82DE #CJK UNIFIED IDEOGRAPH 0xE49B 0x8306 #CJK UNIFIED IDEOGRAPH 0xE49C 0x82DC #CJK UNIFIED IDEOGRAPH 0xE49D 0x8309 #CJK UNIFIED IDEOGRAPH 0xE49E 0x82D9 #CJK UNIFIED IDEOGRAPH 0xE49F 0x8335 #CJK UNIFIED IDEOGRAPH 0xE4A0 0x8334 #CJK UNIFIED IDEOGRAPH 0xE4A1 0x8316 #CJK UNIFIED IDEOGRAPH 0xE4A2 0x8332 #CJK UNIFIED IDEOGRAPH 0xE4A3 0x8331 #CJK UNIFIED IDEOGRAPH 0xE4A4 0x8340 #CJK UNIFIED IDEOGRAPH 0xE4A5 0x8339 #CJK UNIFIED IDEOGRAPH 0xE4A6 0x8350 #CJK UNIFIED IDEOGRAPH 0xE4A7 0x8345 #CJK UNIFIED IDEOGRAPH 0xE4A8 0x832F #CJK UNIFIED IDEOGRAPH 0xE4A9 0x832B #CJK UNIFIED IDEOGRAPH 0xE4AA 0x8317 #CJK UNIFIED IDEOGRAPH 0xE4AB 0x8318 #CJK UNIFIED IDEOGRAPH 0xE4AC 0x8385 #CJK UNIFIED IDEOGRAPH 0xE4AD 0x839A #CJK UNIFIED IDEOGRAPH 0xE4AE 0x83AA #CJK UNIFIED IDEOGRAPH 0xE4AF 0x839F #CJK UNIFIED IDEOGRAPH 0xE4B0 0x83A2 #CJK UNIFIED IDEOGRAPH 0xE4B1 0x8396 #CJK UNIFIED IDEOGRAPH 0xE4B2 0x8323 #CJK UNIFIED IDEOGRAPH 0xE4B3 0x838E #CJK UNIFIED IDEOGRAPH 0xE4B4 0x8387 #CJK UNIFIED IDEOGRAPH 0xE4B5 0x838A #CJK UNIFIED IDEOGRAPH 0xE4B6 0x837C #CJK UNIFIED IDEOGRAPH 0xE4B7 0x83B5 #CJK UNIFIED IDEOGRAPH 0xE4B8 0x8373 #CJK UNIFIED IDEOGRAPH 0xE4B9 0x8375 #CJK UNIFIED IDEOGRAPH 0xE4BA 0x83A0 #CJK UNIFIED IDEOGRAPH 0xE4BB 0x8389 #CJK UNIFIED IDEOGRAPH 0xE4BC 0x83A8 #CJK UNIFIED IDEOGRAPH 0xE4BD 0x83F4 #CJK UNIFIED IDEOGRAPH 0xE4BE 0x8413 #CJK UNIFIED IDEOGRAPH 0xE4BF 0x83EB #CJK UNIFIED IDEOGRAPH 0xE4C0 0x83CE #CJK UNIFIED IDEOGRAPH 0xE4C1 0x83FD #CJK UNIFIED IDEOGRAPH 0xE4C2 0x8403 #CJK UNIFIED IDEOGRAPH 0xE4C3 0x83D8 #CJK UNIFIED IDEOGRAPH 0xE4C4 0x840B #CJK UNIFIED IDEOGRAPH 0xE4C5 0x83C1 #CJK UNIFIED IDEOGRAPH 0xE4C6 0x83F7 #CJK UNIFIED IDEOGRAPH 0xE4C7 0x8407 #CJK UNIFIED IDEOGRAPH 0xE4C8 0x83E0 #CJK UNIFIED IDEOGRAPH 0xE4C9 0x83F2 #CJK UNIFIED IDEOGRAPH 0xE4CA 0x840D #CJK UNIFIED IDEOGRAPH 0xE4CB 0x8422 #CJK UNIFIED IDEOGRAPH 0xE4CC 0x8420 #CJK UNIFIED IDEOGRAPH 0xE4CD 0x83BD #CJK UNIFIED IDEOGRAPH 0xE4CE 0x8438 #CJK UNIFIED IDEOGRAPH 0xE4CF 0x8506 #CJK UNIFIED IDEOGRAPH 0xE4D0 0x83FB #CJK UNIFIED IDEOGRAPH 0xE4D1 0x846D #CJK UNIFIED IDEOGRAPH 0xE4D2 0x842A #CJK UNIFIED IDEOGRAPH 0xE4D3 0x843C #CJK UNIFIED IDEOGRAPH 0xE4D4 0x855A #CJK UNIFIED IDEOGRAPH 0xE4D5 0x8484 #CJK UNIFIED IDEOGRAPH 0xE4D6 0x8477 #CJK UNIFIED IDEOGRAPH 0xE4D7 0x846B #CJK UNIFIED IDEOGRAPH 0xE4D8 0x84AD #CJK UNIFIED IDEOGRAPH 0xE4D9 0x846E #CJK UNIFIED IDEOGRAPH 0xE4DA 0x8482 #CJK UNIFIED IDEOGRAPH 0xE4DB 0x8469 #CJK UNIFIED IDEOGRAPH 0xE4DC 0x8446 #CJK UNIFIED IDEOGRAPH 0xE4DD 0x842C #CJK UNIFIED IDEOGRAPH 0xE4DE 0x846F #CJK UNIFIED IDEOGRAPH 0xE4DF 0x8479 #CJK UNIFIED IDEOGRAPH 0xE4E0 0x8435 #CJK UNIFIED IDEOGRAPH 0xE4E1 0x84CA #CJK UNIFIED IDEOGRAPH 0xE4E2 0x8462 #CJK UNIFIED IDEOGRAPH 0xE4E3 0x84B9 #CJK UNIFIED IDEOGRAPH 0xE4E4 0x84BF #CJK UNIFIED IDEOGRAPH 0xE4E5 0x849F #CJK UNIFIED IDEOGRAPH 0xE4E6 0x84D9 #CJK UNIFIED IDEOGRAPH 0xE4E7 0x84CD #CJK UNIFIED IDEOGRAPH 0xE4E8 0x84BB #CJK UNIFIED IDEOGRAPH 0xE4E9 0x84DA #CJK UNIFIED IDEOGRAPH 0xE4EA 0x84D0 #CJK UNIFIED IDEOGRAPH 0xE4EB 0x84C1 #CJK UNIFIED IDEOGRAPH 0xE4EC 0x84C6 #CJK UNIFIED IDEOGRAPH 0xE4ED 0x84D6 #CJK UNIFIED IDEOGRAPH 0xE4EE 0x84A1 #CJK UNIFIED IDEOGRAPH 0xE4EF 0x8521 #CJK UNIFIED IDEOGRAPH 0xE4F0 0x84FF #CJK UNIFIED IDEOGRAPH 0xE4F1 0x84F4 #CJK UNIFIED IDEOGRAPH 0xE4F2 0x8517 #CJK UNIFIED IDEOGRAPH 0xE4F3 0x8518 #CJK UNIFIED IDEOGRAPH 0xE4F4 0x852C #CJK UNIFIED IDEOGRAPH 0xE4F5 0x851F #CJK UNIFIED IDEOGRAPH 0xE4F6 0x8515 #CJK UNIFIED IDEOGRAPH 0xE4F7 0x8514 #CJK UNIFIED IDEOGRAPH 0xE4F8 0x84FC #CJK UNIFIED IDEOGRAPH 0xE4F9 0x8540 #CJK UNIFIED IDEOGRAPH 0xE4FA 0x8563 #CJK UNIFIED IDEOGRAPH 0xE4FB 0x8558 #CJK UNIFIED IDEOGRAPH 0xE4FC 0x8548 #CJK UNIFIED IDEOGRAPH 0xE540 0x8541 #CJK UNIFIED IDEOGRAPH 0xE541 0x8602 #CJK UNIFIED IDEOGRAPH 0xE542 0x854B #CJK UNIFIED IDEOGRAPH 0xE543 0x8555 #CJK UNIFIED IDEOGRAPH 0xE544 0x8580 #CJK UNIFIED IDEOGRAPH 0xE545 0x85A4 #CJK UNIFIED IDEOGRAPH 0xE546 0x8588 #CJK UNIFIED IDEOGRAPH 0xE547 0x8591 #CJK UNIFIED IDEOGRAPH 0xE548 0x858A #CJK UNIFIED IDEOGRAPH 0xE549 0x85A8 #CJK UNIFIED IDEOGRAPH 0xE54A 0x856D #CJK UNIFIED IDEOGRAPH 0xE54B 0x8594 #CJK UNIFIED IDEOGRAPH 0xE54C 0x859B #CJK UNIFIED IDEOGRAPH 0xE54D 0x85EA #CJK UNIFIED IDEOGRAPH 0xE54E 0x8587 #CJK UNIFIED IDEOGRAPH 0xE54F 0x859C #CJK UNIFIED IDEOGRAPH 0xE550 0x8577 #CJK UNIFIED IDEOGRAPH 0xE551 0x857E #CJK UNIFIED IDEOGRAPH 0xE552 0x8590 #CJK UNIFIED IDEOGRAPH 0xE553 0x85C9 #CJK UNIFIED IDEOGRAPH 0xE554 0x85BA #CJK UNIFIED IDEOGRAPH 0xE555 0x85CF #CJK UNIFIED IDEOGRAPH 0xE556 0x85B9 #CJK UNIFIED IDEOGRAPH 0xE557 0x85D0 #CJK UNIFIED IDEOGRAPH 0xE558 0x85D5 #CJK UNIFIED IDEOGRAPH 0xE559 0x85DD #CJK UNIFIED IDEOGRAPH 0xE55A 0x85E5 #CJK UNIFIED IDEOGRAPH 0xE55B 0x85DC #CJK UNIFIED IDEOGRAPH 0xE55C 0x85F9 #CJK UNIFIED IDEOGRAPH 0xE55D 0x860A #CJK UNIFIED IDEOGRAPH 0xE55E 0x8613 #CJK UNIFIED IDEOGRAPH 0xE55F 0x860B #CJK UNIFIED IDEOGRAPH 0xE560 0x85FE #CJK UNIFIED IDEOGRAPH 0xE561 0x85FA #CJK UNIFIED IDEOGRAPH 0xE562 0x8606 #CJK UNIFIED IDEOGRAPH 0xE563 0x8622 #CJK UNIFIED IDEOGRAPH 0xE564 0x861A #CJK UNIFIED IDEOGRAPH 0xE565 0x8630 #CJK UNIFIED IDEOGRAPH 0xE566 0x863F #CJK UNIFIED IDEOGRAPH 0xE567 0x864D #CJK UNIFIED IDEOGRAPH 0xE568 0x4E55 #CJK UNIFIED IDEOGRAPH 0xE569 0x8654 #CJK UNIFIED IDEOGRAPH 0xE56A 0x865F #CJK UNIFIED IDEOGRAPH 0xE56B 0x8667 #CJK UNIFIED IDEOGRAPH 0xE56C 0x8671 #CJK UNIFIED IDEOGRAPH 0xE56D 0x8693 #CJK UNIFIED IDEOGRAPH 0xE56E 0x86A3 #CJK UNIFIED IDEOGRAPH 0xE56F 0x86A9 #CJK UNIFIED IDEOGRAPH 0xE570 0x86AA #CJK UNIFIED IDEOGRAPH 0xE571 0x868B #CJK UNIFIED IDEOGRAPH 0xE572 0x868C #CJK UNIFIED IDEOGRAPH 0xE573 0x86B6 #CJK UNIFIED IDEOGRAPH 0xE574 0x86AF #CJK UNIFIED IDEOGRAPH 0xE575 0x86C4 #CJK UNIFIED IDEOGRAPH 0xE576 0x86C6 #CJK UNIFIED IDEOGRAPH 0xE577 0x86B0 #CJK UNIFIED IDEOGRAPH 0xE578 0x86C9 #CJK UNIFIED IDEOGRAPH 0xE579 0x8823 #CJK UNIFIED IDEOGRAPH 0xE57A 0x86AB #CJK UNIFIED IDEOGRAPH 0xE57B 0x86D4 #CJK UNIFIED IDEOGRAPH 0xE57C 0x86DE #CJK UNIFIED IDEOGRAPH 0xE57D 0x86E9 #CJK UNIFIED IDEOGRAPH 0xE57E 0x86EC #CJK UNIFIED IDEOGRAPH 0xE580 0x86DF #CJK UNIFIED IDEOGRAPH 0xE581 0x86DB #CJK UNIFIED IDEOGRAPH 0xE582 0x86EF #CJK UNIFIED IDEOGRAPH 0xE583 0x8712 #CJK UNIFIED IDEOGRAPH 0xE584 0x8706 #CJK UNIFIED IDEOGRAPH 0xE585 0x8708 #CJK UNIFIED IDEOGRAPH 0xE586 0x8700 #CJK UNIFIED IDEOGRAPH 0xE587 0x8703 #CJK UNIFIED IDEOGRAPH 0xE588 0x86FB #CJK UNIFIED IDEOGRAPH 0xE589 0x8711 #CJK UNIFIED IDEOGRAPH 0xE58A 0x8709 #CJK UNIFIED IDEOGRAPH 0xE58B 0x870D #CJK UNIFIED IDEOGRAPH 0xE58C 0x86F9 #CJK UNIFIED IDEOGRAPH 0xE58D 0x870A #CJK UNIFIED IDEOGRAPH 0xE58E 0x8734 #CJK UNIFIED IDEOGRAPH 0xE58F 0x873F #CJK UNIFIED IDEOGRAPH 0xE590 0x8737 #CJK UNIFIED IDEOGRAPH 0xE591 0x873B #CJK UNIFIED IDEOGRAPH 0xE592 0x8725 #CJK UNIFIED IDEOGRAPH 0xE593 0x8729 #CJK UNIFIED IDEOGRAPH 0xE594 0x871A #CJK UNIFIED IDEOGRAPH 0xE595 0x8760 #CJK UNIFIED IDEOGRAPH 0xE596 0x875F #CJK UNIFIED IDEOGRAPH 0xE597 0x8778 #CJK UNIFIED IDEOGRAPH 0xE598 0x874C #CJK UNIFIED IDEOGRAPH 0xE599 0x874E #CJK UNIFIED IDEOGRAPH 0xE59A 0x8774 #CJK UNIFIED IDEOGRAPH 0xE59B 0x8757 #CJK UNIFIED IDEOGRAPH 0xE59C 0x8768 #CJK UNIFIED IDEOGRAPH 0xE59D 0x876E #CJK UNIFIED IDEOGRAPH 0xE59E 0x8759 #CJK UNIFIED IDEOGRAPH 0xE59F 0x8753 #CJK UNIFIED IDEOGRAPH 0xE5A0 0x8763 #CJK UNIFIED IDEOGRAPH 0xE5A1 0x876A #CJK UNIFIED IDEOGRAPH 0xE5A2 0x8805 #CJK UNIFIED IDEOGRAPH 0xE5A3 0x87A2 #CJK UNIFIED IDEOGRAPH 0xE5A4 0x879F #CJK UNIFIED IDEOGRAPH 0xE5A5 0x8782 #CJK UNIFIED IDEOGRAPH 0xE5A6 0x87AF #CJK UNIFIED IDEOGRAPH 0xE5A7 0x87CB #CJK UNIFIED IDEOGRAPH 0xE5A8 0x87BD #CJK UNIFIED IDEOGRAPH 0xE5A9 0x87C0 #CJK UNIFIED IDEOGRAPH 0xE5AA 0x87D0 #CJK UNIFIED IDEOGRAPH 0xE5AB 0x96D6 #CJK UNIFIED IDEOGRAPH 0xE5AC 0x87AB #CJK UNIFIED IDEOGRAPH 0xE5AD 0x87C4 #CJK UNIFIED IDEOGRAPH 0xE5AE 0x87B3 #CJK UNIFIED IDEOGRAPH 0xE5AF 0x87C7 #CJK UNIFIED IDEOGRAPH 0xE5B0 0x87C6 #CJK UNIFIED IDEOGRAPH 0xE5B1 0x87BB #CJK UNIFIED IDEOGRAPH 0xE5B2 0x87EF #CJK UNIFIED IDEOGRAPH 0xE5B3 0x87F2 #CJK UNIFIED IDEOGRAPH 0xE5B4 0x87E0 #CJK UNIFIED IDEOGRAPH 0xE5B5 0x880F #CJK UNIFIED IDEOGRAPH 0xE5B6 0x880D #CJK UNIFIED IDEOGRAPH 0xE5B7 0x87FE #CJK UNIFIED IDEOGRAPH 0xE5B8 0x87F6 #CJK UNIFIED IDEOGRAPH 0xE5B9 0x87F7 #CJK UNIFIED IDEOGRAPH 0xE5BA 0x880E #CJK UNIFIED IDEOGRAPH 0xE5BB 0x87D2 #CJK UNIFIED IDEOGRAPH 0xE5BC 0x8811 #CJK UNIFIED IDEOGRAPH 0xE5BD 0x8816 #CJK UNIFIED IDEOGRAPH 0xE5BE 0x8815 #CJK UNIFIED IDEOGRAPH 0xE5BF 0x8822 #CJK UNIFIED IDEOGRAPH 0xE5C0 0x8821 #CJK UNIFIED IDEOGRAPH 0xE5C1 0x8831 #CJK UNIFIED IDEOGRAPH 0xE5C2 0x8836 #CJK UNIFIED IDEOGRAPH 0xE5C3 0x8839 #CJK UNIFIED IDEOGRAPH 0xE5C4 0x8827 #CJK UNIFIED IDEOGRAPH 0xE5C5 0x883B #CJK UNIFIED IDEOGRAPH 0xE5C6 0x8844 #CJK UNIFIED IDEOGRAPH 0xE5C7 0x8842 #CJK UNIFIED IDEOGRAPH 0xE5C8 0x8852 #CJK UNIFIED IDEOGRAPH 0xE5C9 0x8859 #CJK UNIFIED IDEOGRAPH 0xE5CA 0x885E #CJK UNIFIED IDEOGRAPH 0xE5CB 0x8862 #CJK UNIFIED IDEOGRAPH 0xE5CC 0x886B #CJK UNIFIED IDEOGRAPH 0xE5CD 0x8881 #CJK UNIFIED IDEOGRAPH 0xE5CE 0x887E #CJK UNIFIED IDEOGRAPH 0xE5CF 0x889E #CJK UNIFIED IDEOGRAPH 0xE5D0 0x8875 #CJK UNIFIED IDEOGRAPH 0xE5D1 0x887D #CJK UNIFIED IDEOGRAPH 0xE5D2 0x88B5 #CJK UNIFIED IDEOGRAPH 0xE5D3 0x8872 #CJK UNIFIED IDEOGRAPH 0xE5D4 0x8882 #CJK UNIFIED IDEOGRAPH 0xE5D5 0x8897 #CJK UNIFIED IDEOGRAPH 0xE5D6 0x8892 #CJK UNIFIED IDEOGRAPH 0xE5D7 0x88AE #CJK UNIFIED IDEOGRAPH 0xE5D8 0x8899 #CJK UNIFIED IDEOGRAPH 0xE5D9 0x88A2 #CJK UNIFIED IDEOGRAPH 0xE5DA 0x888D #CJK UNIFIED IDEOGRAPH 0xE5DB 0x88A4 #CJK UNIFIED IDEOGRAPH 0xE5DC 0x88B0 #CJK UNIFIED IDEOGRAPH 0xE5DD 0x88BF #CJK UNIFIED IDEOGRAPH 0xE5DE 0x88B1 #CJK UNIFIED IDEOGRAPH 0xE5DF 0x88C3 #CJK UNIFIED IDEOGRAPH 0xE5E0 0x88C4 #CJK UNIFIED IDEOGRAPH 0xE5E1 0x88D4 #CJK UNIFIED IDEOGRAPH 0xE5E2 0x88D8 #CJK UNIFIED IDEOGRAPH 0xE5E3 0x88D9 #CJK UNIFIED IDEOGRAPH 0xE5E4 0x88DD #CJK UNIFIED IDEOGRAPH 0xE5E5 0x88F9 #CJK UNIFIED IDEOGRAPH 0xE5E6 0x8902 #CJK UNIFIED IDEOGRAPH 0xE5E7 0x88FC #CJK UNIFIED IDEOGRAPH 0xE5E8 0x88F4 #CJK UNIFIED IDEOGRAPH 0xE5E9 0x88E8 #CJK UNIFIED IDEOGRAPH 0xE5EA 0x88F2 #CJK UNIFIED IDEOGRAPH 0xE5EB 0x8904 #CJK UNIFIED IDEOGRAPH 0xE5EC 0x890C #CJK UNIFIED IDEOGRAPH 0xE5ED 0x890A #CJK UNIFIED IDEOGRAPH 0xE5EE 0x8913 #CJK UNIFIED IDEOGRAPH 0xE5EF 0x8943 #CJK UNIFIED IDEOGRAPH 0xE5F0 0x891E #CJK UNIFIED IDEOGRAPH 0xE5F1 0x8925 #CJK UNIFIED IDEOGRAPH 0xE5F2 0x892A #CJK UNIFIED IDEOGRAPH 0xE5F3 0x892B #CJK UNIFIED IDEOGRAPH 0xE5F4 0x8941 #CJK UNIFIED IDEOGRAPH 0xE5F5 0x8944 #CJK UNIFIED IDEOGRAPH 0xE5F6 0x893B #CJK UNIFIED IDEOGRAPH 0xE5F7 0x8936 #CJK UNIFIED IDEOGRAPH 0xE5F8 0x8938 #CJK UNIFIED IDEOGRAPH 0xE5F9 0x894C #CJK UNIFIED IDEOGRAPH 0xE5FA 0x891D #CJK UNIFIED IDEOGRAPH 0xE5FB 0x8960 #CJK UNIFIED IDEOGRAPH 0xE5FC 0x895E #CJK UNIFIED IDEOGRAPH 0xE640 0x8966 #CJK UNIFIED IDEOGRAPH 0xE641 0x8964 #CJK UNIFIED IDEOGRAPH 0xE642 0x896D #CJK UNIFIED IDEOGRAPH 0xE643 0x896A #CJK UNIFIED IDEOGRAPH 0xE644 0x896F #CJK UNIFIED IDEOGRAPH 0xE645 0x8974 #CJK UNIFIED IDEOGRAPH 0xE646 0x8977 #CJK UNIFIED IDEOGRAPH 0xE647 0x897E #CJK UNIFIED IDEOGRAPH 0xE648 0x8983 #CJK UNIFIED IDEOGRAPH 0xE649 0x8988 #CJK UNIFIED IDEOGRAPH 0xE64A 0x898A #CJK UNIFIED IDEOGRAPH 0xE64B 0x8993 #CJK UNIFIED IDEOGRAPH 0xE64C 0x8998 #CJK UNIFIED IDEOGRAPH 0xE64D 0x89A1 #CJK UNIFIED IDEOGRAPH 0xE64E 0x89A9 #CJK UNIFIED IDEOGRAPH 0xE64F 0x89A6 #CJK UNIFIED IDEOGRAPH 0xE650 0x89AC #CJK UNIFIED IDEOGRAPH 0xE651 0x89AF #CJK UNIFIED IDEOGRAPH 0xE652 0x89B2 #CJK UNIFIED IDEOGRAPH 0xE653 0x89BA #CJK UNIFIED IDEOGRAPH 0xE654 0x89BD #CJK UNIFIED IDEOGRAPH 0xE655 0x89BF #CJK UNIFIED IDEOGRAPH 0xE656 0x89C0 #CJK UNIFIED IDEOGRAPH 0xE657 0x89DA #CJK UNIFIED IDEOGRAPH 0xE658 0x89DC #CJK UNIFIED IDEOGRAPH 0xE659 0x89DD #CJK UNIFIED IDEOGRAPH 0xE65A 0x89E7 #CJK UNIFIED IDEOGRAPH 0xE65B 0x89F4 #CJK UNIFIED IDEOGRAPH 0xE65C 0x89F8 #CJK UNIFIED IDEOGRAPH 0xE65D 0x8A03 #CJK UNIFIED IDEOGRAPH 0xE65E 0x8A16 #CJK UNIFIED IDEOGRAPH 0xE65F 0x8A10 #CJK UNIFIED IDEOGRAPH 0xE660 0x8A0C #CJK UNIFIED IDEOGRAPH 0xE661 0x8A1B #CJK UNIFIED IDEOGRAPH 0xE662 0x8A1D #CJK UNIFIED IDEOGRAPH 0xE663 0x8A25 #CJK UNIFIED IDEOGRAPH 0xE664 0x8A36 #CJK UNIFIED IDEOGRAPH 0xE665 0x8A41 #CJK UNIFIED IDEOGRAPH 0xE666 0x8A5B #CJK UNIFIED IDEOGRAPH 0xE667 0x8A52 #CJK UNIFIED IDEOGRAPH 0xE668 0x8A46 #CJK UNIFIED IDEOGRAPH 0xE669 0x8A48 #CJK UNIFIED IDEOGRAPH 0xE66A 0x8A7C #CJK UNIFIED IDEOGRAPH 0xE66B 0x8A6D #CJK UNIFIED IDEOGRAPH 0xE66C 0x8A6C #CJK UNIFIED IDEOGRAPH 0xE66D 0x8A62 #CJK UNIFIED IDEOGRAPH 0xE66E 0x8A85 #CJK UNIFIED IDEOGRAPH 0xE66F 0x8A82 #CJK UNIFIED IDEOGRAPH 0xE670 0x8A84 #CJK UNIFIED IDEOGRAPH 0xE671 0x8AA8 #CJK UNIFIED IDEOGRAPH 0xE672 0x8AA1 #CJK UNIFIED IDEOGRAPH 0xE673 0x8A91 #CJK UNIFIED IDEOGRAPH 0xE674 0x8AA5 #CJK UNIFIED IDEOGRAPH 0xE675 0x8AA6 #CJK UNIFIED IDEOGRAPH 0xE676 0x8A9A #CJK UNIFIED IDEOGRAPH 0xE677 0x8AA3 #CJK UNIFIED IDEOGRAPH 0xE678 0x8AC4 #CJK UNIFIED IDEOGRAPH 0xE679 0x8ACD #CJK UNIFIED IDEOGRAPH 0xE67A 0x8AC2 #CJK UNIFIED IDEOGRAPH 0xE67B 0x8ADA #CJK UNIFIED IDEOGRAPH 0xE67C 0x8AEB #CJK UNIFIED IDEOGRAPH 0xE67D 0x8AF3 #CJK UNIFIED IDEOGRAPH 0xE67E 0x8AE7 #CJK UNIFIED IDEOGRAPH 0xE680 0x8AE4 #CJK UNIFIED IDEOGRAPH 0xE681 0x8AF1 #CJK UNIFIED IDEOGRAPH 0xE682 0x8B14 #CJK UNIFIED IDEOGRAPH 0xE683 0x8AE0 #CJK UNIFIED IDEOGRAPH 0xE684 0x8AE2 #CJK UNIFIED IDEOGRAPH 0xE685 0x8AF7 #CJK UNIFIED IDEOGRAPH 0xE686 0x8ADE #CJK UNIFIED IDEOGRAPH 0xE687 0x8ADB #CJK UNIFIED IDEOGRAPH 0xE688 0x8B0C #CJK UNIFIED IDEOGRAPH 0xE689 0x8B07 #CJK UNIFIED IDEOGRAPH 0xE68A 0x8B1A #CJK UNIFIED IDEOGRAPH 0xE68B 0x8AE1 #CJK UNIFIED IDEOGRAPH 0xE68C 0x8B16 #CJK UNIFIED IDEOGRAPH 0xE68D 0x8B10 #CJK UNIFIED IDEOGRAPH 0xE68E 0x8B17 #CJK UNIFIED IDEOGRAPH 0xE68F 0x8B20 #CJK UNIFIED IDEOGRAPH 0xE690 0x8B33 #CJK UNIFIED IDEOGRAPH 0xE691 0x97AB #CJK UNIFIED IDEOGRAPH 0xE692 0x8B26 #CJK UNIFIED IDEOGRAPH 0xE693 0x8B2B #CJK UNIFIED IDEOGRAPH 0xE694 0x8B3E #CJK UNIFIED IDEOGRAPH 0xE695 0x8B28 #CJK UNIFIED IDEOGRAPH 0xE696 0x8B41 #CJK UNIFIED IDEOGRAPH 0xE697 0x8B4C #CJK UNIFIED IDEOGRAPH 0xE698 0x8B4F #CJK UNIFIED IDEOGRAPH 0xE699 0x8B4E #CJK UNIFIED IDEOGRAPH 0xE69A 0x8B49 #CJK UNIFIED IDEOGRAPH 0xE69B 0x8B56 #CJK UNIFIED IDEOGRAPH 0xE69C 0x8B5B #CJK UNIFIED IDEOGRAPH 0xE69D 0x8B5A #CJK UNIFIED IDEOGRAPH 0xE69E 0x8B6B #CJK UNIFIED IDEOGRAPH 0xE69F 0x8B5F #CJK UNIFIED IDEOGRAPH 0xE6A0 0x8B6C #CJK UNIFIED IDEOGRAPH 0xE6A1 0x8B6F #CJK UNIFIED IDEOGRAPH 0xE6A2 0x8B74 #CJK UNIFIED IDEOGRAPH 0xE6A3 0x8B7D #CJK UNIFIED IDEOGRAPH 0xE6A4 0x8B80 #CJK UNIFIED IDEOGRAPH 0xE6A5 0x8B8C #CJK UNIFIED IDEOGRAPH 0xE6A6 0x8B8E #CJK UNIFIED IDEOGRAPH 0xE6A7 0x8B92 #CJK UNIFIED IDEOGRAPH 0xE6A8 0x8B93 #CJK UNIFIED IDEOGRAPH 0xE6A9 0x8B96 #CJK UNIFIED IDEOGRAPH 0xE6AA 0x8B99 #CJK UNIFIED IDEOGRAPH 0xE6AB 0x8B9A #CJK UNIFIED IDEOGRAPH 0xE6AC 0x8C3A #CJK UNIFIED IDEOGRAPH 0xE6AD 0x8C41 #CJK UNIFIED IDEOGRAPH 0xE6AE 0x8C3F #CJK UNIFIED IDEOGRAPH 0xE6AF 0x8C48 #CJK UNIFIED IDEOGRAPH 0xE6B0 0x8C4C #CJK UNIFIED IDEOGRAPH 0xE6B1 0x8C4E #CJK UNIFIED IDEOGRAPH 0xE6B2 0x8C50 #CJK UNIFIED IDEOGRAPH 0xE6B3 0x8C55 #CJK UNIFIED IDEOGRAPH 0xE6B4 0x8C62 #CJK UNIFIED IDEOGRAPH 0xE6B5 0x8C6C #CJK UNIFIED IDEOGRAPH 0xE6B6 0x8C78 #CJK UNIFIED IDEOGRAPH 0xE6B7 0x8C7A #CJK UNIFIED IDEOGRAPH 0xE6B8 0x8C82 #CJK UNIFIED IDEOGRAPH 0xE6B9 0x8C89 #CJK UNIFIED IDEOGRAPH 0xE6BA 0x8C85 #CJK UNIFIED IDEOGRAPH 0xE6BB 0x8C8A #CJK UNIFIED IDEOGRAPH 0xE6BC 0x8C8D #CJK UNIFIED IDEOGRAPH 0xE6BD 0x8C8E #CJK UNIFIED IDEOGRAPH 0xE6BE 0x8C94 #CJK UNIFIED IDEOGRAPH 0xE6BF 0x8C7C #CJK UNIFIED IDEOGRAPH 0xE6C0 0x8C98 #CJK UNIFIED IDEOGRAPH 0xE6C1 0x621D #CJK UNIFIED IDEOGRAPH 0xE6C2 0x8CAD #CJK UNIFIED IDEOGRAPH 0xE6C3 0x8CAA #CJK UNIFIED IDEOGRAPH 0xE6C4 0x8CBD #CJK UNIFIED IDEOGRAPH 0xE6C5 0x8CB2 #CJK UNIFIED IDEOGRAPH 0xE6C6 0x8CB3 #CJK UNIFIED IDEOGRAPH 0xE6C7 0x8CAE #CJK UNIFIED IDEOGRAPH 0xE6C8 0x8CB6 #CJK UNIFIED IDEOGRAPH 0xE6C9 0x8CC8 #CJK UNIFIED IDEOGRAPH 0xE6CA 0x8CC1 #CJK UNIFIED IDEOGRAPH 0xE6CB 0x8CE4 #CJK UNIFIED IDEOGRAPH 0xE6CC 0x8CE3 #CJK UNIFIED IDEOGRAPH 0xE6CD 0x8CDA #CJK UNIFIED IDEOGRAPH 0xE6CE 0x8CFD #CJK UNIFIED IDEOGRAPH 0xE6CF 0x8CFA #CJK UNIFIED IDEOGRAPH 0xE6D0 0x8CFB #CJK UNIFIED IDEOGRAPH 0xE6D1 0x8D04 #CJK UNIFIED IDEOGRAPH 0xE6D2 0x8D05 #CJK UNIFIED IDEOGRAPH 0xE6D3 0x8D0A #CJK UNIFIED IDEOGRAPH 0xE6D4 0x8D07 #CJK UNIFIED IDEOGRAPH 0xE6D5 0x8D0F #CJK UNIFIED IDEOGRAPH 0xE6D6 0x8D0D #CJK UNIFIED IDEOGRAPH 0xE6D7 0x8D10 #CJK UNIFIED IDEOGRAPH 0xE6D8 0x9F4E #CJK UNIFIED IDEOGRAPH 0xE6D9 0x8D13 #CJK UNIFIED IDEOGRAPH 0xE6DA 0x8CCD #CJK UNIFIED IDEOGRAPH 0xE6DB 0x8D14 #CJK UNIFIED IDEOGRAPH 0xE6DC 0x8D16 #CJK UNIFIED IDEOGRAPH 0xE6DD 0x8D67 #CJK UNIFIED IDEOGRAPH 0xE6DE 0x8D6D #CJK UNIFIED IDEOGRAPH 0xE6DF 0x8D71 #CJK UNIFIED IDEOGRAPH 0xE6E0 0x8D73 #CJK UNIFIED IDEOGRAPH 0xE6E1 0x8D81 #CJK UNIFIED IDEOGRAPH 0xE6E2 0x8D99 #CJK UNIFIED IDEOGRAPH 0xE6E3 0x8DC2 #CJK UNIFIED IDEOGRAPH 0xE6E4 0x8DBE #CJK UNIFIED IDEOGRAPH 0xE6E5 0x8DBA #CJK UNIFIED IDEOGRAPH 0xE6E6 0x8DCF #CJK UNIFIED IDEOGRAPH 0xE6E7 0x8DDA #CJK UNIFIED IDEOGRAPH 0xE6E8 0x8DD6 #CJK UNIFIED IDEOGRAPH 0xE6E9 0x8DCC #CJK UNIFIED IDEOGRAPH 0xE6EA 0x8DDB #CJK UNIFIED IDEOGRAPH 0xE6EB 0x8DCB #CJK UNIFIED IDEOGRAPH 0xE6EC 0x8DEA #CJK UNIFIED IDEOGRAPH 0xE6ED 0x8DEB #CJK UNIFIED IDEOGRAPH 0xE6EE 0x8DDF #CJK UNIFIED IDEOGRAPH 0xE6EF 0x8DE3 #CJK UNIFIED IDEOGRAPH 0xE6F0 0x8DFC #CJK UNIFIED IDEOGRAPH 0xE6F1 0x8E08 #CJK UNIFIED IDEOGRAPH 0xE6F2 0x8E09 #CJK UNIFIED IDEOGRAPH 0xE6F3 0x8DFF #CJK UNIFIED IDEOGRAPH 0xE6F4 0x8E1D #CJK UNIFIED IDEOGRAPH 0xE6F5 0x8E1E #CJK UNIFIED IDEOGRAPH 0xE6F6 0x8E10 #CJK UNIFIED IDEOGRAPH 0xE6F7 0x8E1F #CJK UNIFIED IDEOGRAPH 0xE6F8 0x8E42 #CJK UNIFIED IDEOGRAPH 0xE6F9 0x8E35 #CJK UNIFIED IDEOGRAPH 0xE6FA 0x8E30 #CJK UNIFIED IDEOGRAPH 0xE6FB 0x8E34 #CJK UNIFIED IDEOGRAPH 0xE6FC 0x8E4A #CJK UNIFIED IDEOGRAPH 0xE740 0x8E47 #CJK UNIFIED IDEOGRAPH 0xE741 0x8E49 #CJK UNIFIED IDEOGRAPH 0xE742 0x8E4C #CJK UNIFIED IDEOGRAPH 0xE743 0x8E50 #CJK UNIFIED IDEOGRAPH 0xE744 0x8E48 #CJK UNIFIED IDEOGRAPH 0xE745 0x8E59 #CJK UNIFIED IDEOGRAPH 0xE746 0x8E64 #CJK UNIFIED IDEOGRAPH 0xE747 0x8E60 #CJK UNIFIED IDEOGRAPH 0xE748 0x8E2A #CJK UNIFIED IDEOGRAPH 0xE749 0x8E63 #CJK UNIFIED IDEOGRAPH 0xE74A 0x8E55 #CJK UNIFIED IDEOGRAPH 0xE74B 0x8E76 #CJK UNIFIED IDEOGRAPH 0xE74C 0x8E72 #CJK UNIFIED IDEOGRAPH 0xE74D 0x8E7C #CJK UNIFIED IDEOGRAPH 0xE74E 0x8E81 #CJK UNIFIED IDEOGRAPH 0xE74F 0x8E87 #CJK UNIFIED IDEOGRAPH 0xE750 0x8E85 #CJK UNIFIED IDEOGRAPH 0xE751 0x8E84 #CJK UNIFIED IDEOGRAPH 0xE752 0x8E8B #CJK UNIFIED IDEOGRAPH 0xE753 0x8E8A #CJK UNIFIED IDEOGRAPH 0xE754 0x8E93 #CJK UNIFIED IDEOGRAPH 0xE755 0x8E91 #CJK UNIFIED IDEOGRAPH 0xE756 0x8E94 #CJK UNIFIED IDEOGRAPH 0xE757 0x8E99 #CJK UNIFIED IDEOGRAPH 0xE758 0x8EAA #CJK UNIFIED IDEOGRAPH 0xE759 0x8EA1 #CJK UNIFIED IDEOGRAPH 0xE75A 0x8EAC #CJK UNIFIED IDEOGRAPH 0xE75B 0x8EB0 #CJK UNIFIED IDEOGRAPH 0xE75C 0x8EC6 #CJK UNIFIED IDEOGRAPH 0xE75D 0x8EB1 #CJK UNIFIED IDEOGRAPH 0xE75E 0x8EBE #CJK UNIFIED IDEOGRAPH 0xE75F 0x8EC5 #CJK UNIFIED IDEOGRAPH 0xE760 0x8EC8 #CJK UNIFIED IDEOGRAPH 0xE761 0x8ECB #CJK UNIFIED IDEOGRAPH 0xE762 0x8EDB #CJK UNIFIED IDEOGRAPH 0xE763 0x8EE3 #CJK UNIFIED IDEOGRAPH 0xE764 0x8EFC #CJK UNIFIED IDEOGRAPH 0xE765 0x8EFB #CJK UNIFIED IDEOGRAPH 0xE766 0x8EEB #CJK UNIFIED IDEOGRAPH 0xE767 0x8EFE #CJK UNIFIED IDEOGRAPH 0xE768 0x8F0A #CJK UNIFIED IDEOGRAPH 0xE769 0x8F05 #CJK UNIFIED IDEOGRAPH 0xE76A 0x8F15 #CJK UNIFIED IDEOGRAPH 0xE76B 0x8F12 #CJK UNIFIED IDEOGRAPH 0xE76C 0x8F19 #CJK UNIFIED IDEOGRAPH 0xE76D 0x8F13 #CJK UNIFIED IDEOGRAPH 0xE76E 0x8F1C #CJK UNIFIED IDEOGRAPH 0xE76F 0x8F1F #CJK UNIFIED IDEOGRAPH 0xE770 0x8F1B #CJK UNIFIED IDEOGRAPH 0xE771 0x8F0C #CJK UNIFIED IDEOGRAPH 0xE772 0x8F26 #CJK UNIFIED IDEOGRAPH 0xE773 0x8F33 #CJK UNIFIED IDEOGRAPH 0xE774 0x8F3B #CJK UNIFIED IDEOGRAPH 0xE775 0x8F39 #CJK UNIFIED IDEOGRAPH 0xE776 0x8F45 #CJK UNIFIED IDEOGRAPH 0xE777 0x8F42 #CJK UNIFIED IDEOGRAPH 0xE778 0x8F3E #CJK UNIFIED IDEOGRAPH 0xE779 0x8F4C #CJK UNIFIED IDEOGRAPH 0xE77A 0x8F49 #CJK UNIFIED IDEOGRAPH 0xE77B 0x8F46 #CJK UNIFIED IDEOGRAPH 0xE77C 0x8F4E #CJK UNIFIED IDEOGRAPH 0xE77D 0x8F57 #CJK UNIFIED IDEOGRAPH 0xE77E 0x8F5C #CJK UNIFIED IDEOGRAPH 0xE780 0x8F62 #CJK UNIFIED IDEOGRAPH 0xE781 0x8F63 #CJK UNIFIED IDEOGRAPH 0xE782 0x8F64 #CJK UNIFIED IDEOGRAPH 0xE783 0x8F9C #CJK UNIFIED IDEOGRAPH 0xE784 0x8F9F #CJK UNIFIED IDEOGRAPH 0xE785 0x8FA3 #CJK UNIFIED IDEOGRAPH 0xE786 0x8FAD #CJK UNIFIED IDEOGRAPH 0xE787 0x8FAF #CJK UNIFIED IDEOGRAPH 0xE788 0x8FB7 #CJK UNIFIED IDEOGRAPH 0xE789 0x8FDA #CJK UNIFIED IDEOGRAPH 0xE78A 0x8FE5 #CJK UNIFIED IDEOGRAPH 0xE78B 0x8FE2 #CJK UNIFIED IDEOGRAPH 0xE78C 0x8FEA #CJK UNIFIED IDEOGRAPH 0xE78D 0x8FEF #CJK UNIFIED IDEOGRAPH 0xE78E 0x9087 #CJK UNIFIED IDEOGRAPH 0xE78F 0x8FF4 #CJK UNIFIED IDEOGRAPH 0xE790 0x9005 #CJK UNIFIED IDEOGRAPH 0xE791 0x8FF9 #CJK UNIFIED IDEOGRAPH 0xE792 0x8FFA #CJK UNIFIED IDEOGRAPH 0xE793 0x9011 #CJK UNIFIED IDEOGRAPH 0xE794 0x9015 #CJK UNIFIED IDEOGRAPH 0xE795 0x9021 #CJK UNIFIED IDEOGRAPH 0xE796 0x900D #CJK UNIFIED IDEOGRAPH 0xE797 0x901E #CJK UNIFIED IDEOGRAPH 0xE798 0x9016 #CJK UNIFIED IDEOGRAPH 0xE799 0x900B #CJK UNIFIED IDEOGRAPH 0xE79A 0x9027 #CJK UNIFIED IDEOGRAPH 0xE79B 0x9036 #CJK UNIFIED IDEOGRAPH 0xE79C 0x9035 #CJK UNIFIED IDEOGRAPH 0xE79D 0x9039 #CJK UNIFIED IDEOGRAPH 0xE79E 0x8FF8 #CJK UNIFIED IDEOGRAPH 0xE79F 0x904F #CJK UNIFIED IDEOGRAPH 0xE7A0 0x9050 #CJK UNIFIED IDEOGRAPH 0xE7A1 0x9051 #CJK UNIFIED IDEOGRAPH 0xE7A2 0x9052 #CJK UNIFIED IDEOGRAPH 0xE7A3 0x900E #CJK UNIFIED IDEOGRAPH 0xE7A4 0x9049 #CJK UNIFIED IDEOGRAPH 0xE7A5 0x903E #CJK UNIFIED IDEOGRAPH 0xE7A6 0x9056 #CJK UNIFIED IDEOGRAPH 0xE7A7 0x9058 #CJK UNIFIED IDEOGRAPH 0xE7A8 0x905E #CJK UNIFIED IDEOGRAPH 0xE7A9 0x9068 #CJK UNIFIED IDEOGRAPH 0xE7AA 0x906F #CJK UNIFIED IDEOGRAPH 0xE7AB 0x9076 #CJK UNIFIED IDEOGRAPH 0xE7AC 0x96A8 #CJK UNIFIED IDEOGRAPH 0xE7AD 0x9072 #CJK UNIFIED IDEOGRAPH 0xE7AE 0x9082 #CJK UNIFIED IDEOGRAPH 0xE7AF 0x907D #CJK UNIFIED IDEOGRAPH 0xE7B0 0x9081 #CJK UNIFIED IDEOGRAPH 0xE7B1 0x9080 #CJK UNIFIED IDEOGRAPH 0xE7B2 0x908A #CJK UNIFIED IDEOGRAPH 0xE7B3 0x9089 #CJK UNIFIED IDEOGRAPH 0xE7B4 0x908F #CJK UNIFIED IDEOGRAPH 0xE7B5 0x90A8 #CJK UNIFIED IDEOGRAPH 0xE7B6 0x90AF #CJK UNIFIED IDEOGRAPH 0xE7B7 0x90B1 #CJK UNIFIED IDEOGRAPH 0xE7B8 0x90B5 #CJK UNIFIED IDEOGRAPH 0xE7B9 0x90E2 #CJK UNIFIED IDEOGRAPH 0xE7BA 0x90E4 #CJK UNIFIED IDEOGRAPH 0xE7BB 0x6248 #CJK UNIFIED IDEOGRAPH 0xE7BC 0x90DB #CJK UNIFIED IDEOGRAPH 0xE7BD 0x9102 #CJK UNIFIED IDEOGRAPH 0xE7BE 0x9112 #CJK UNIFIED IDEOGRAPH 0xE7BF 0x9119 #CJK UNIFIED IDEOGRAPH 0xE7C0 0x9132 #CJK UNIFIED IDEOGRAPH 0xE7C1 0x9130 #CJK UNIFIED IDEOGRAPH 0xE7C2 0x914A #CJK UNIFIED IDEOGRAPH 0xE7C3 0x9156 #CJK UNIFIED IDEOGRAPH 0xE7C4 0x9158 #CJK UNIFIED IDEOGRAPH 0xE7C5 0x9163 #CJK UNIFIED IDEOGRAPH 0xE7C6 0x9165 #CJK UNIFIED IDEOGRAPH 0xE7C7 0x9169 #CJK UNIFIED IDEOGRAPH 0xE7C8 0x9173 #CJK UNIFIED IDEOGRAPH 0xE7C9 0x9172 #CJK UNIFIED IDEOGRAPH 0xE7CA 0x918B #CJK UNIFIED IDEOGRAPH 0xE7CB 0x9189 #CJK UNIFIED IDEOGRAPH 0xE7CC 0x9182 #CJK UNIFIED IDEOGRAPH 0xE7CD 0x91A2 #CJK UNIFIED IDEOGRAPH 0xE7CE 0x91AB #CJK UNIFIED IDEOGRAPH 0xE7CF 0x91AF #CJK UNIFIED IDEOGRAPH 0xE7D0 0x91AA #CJK UNIFIED IDEOGRAPH 0xE7D1 0x91B5 #CJK UNIFIED IDEOGRAPH 0xE7D2 0x91B4 #CJK UNIFIED IDEOGRAPH 0xE7D3 0x91BA #CJK UNIFIED IDEOGRAPH 0xE7D4 0x91C0 #CJK UNIFIED IDEOGRAPH 0xE7D5 0x91C1 #CJK UNIFIED IDEOGRAPH 0xE7D6 0x91C9 #CJK UNIFIED IDEOGRAPH 0xE7D7 0x91CB #CJK UNIFIED IDEOGRAPH 0xE7D8 0x91D0 #CJK UNIFIED IDEOGRAPH 0xE7D9 0x91D6 #CJK UNIFIED IDEOGRAPH 0xE7DA 0x91DF #CJK UNIFIED IDEOGRAPH 0xE7DB 0x91E1 #CJK UNIFIED IDEOGRAPH 0xE7DC 0x91DB #CJK UNIFIED IDEOGRAPH 0xE7DD 0x91FC #CJK UNIFIED IDEOGRAPH 0xE7DE 0x91F5 #CJK UNIFIED IDEOGRAPH 0xE7DF 0x91F6 #CJK UNIFIED IDEOGRAPH 0xE7E0 0x921E #CJK UNIFIED IDEOGRAPH 0xE7E1 0x91FF #CJK UNIFIED IDEOGRAPH 0xE7E2 0x9214 #CJK UNIFIED IDEOGRAPH 0xE7E3 0x922C #CJK UNIFIED IDEOGRAPH 0xE7E4 0x9215 #CJK UNIFIED IDEOGRAPH 0xE7E5 0x9211 #CJK UNIFIED IDEOGRAPH 0xE7E6 0x925E #CJK UNIFIED IDEOGRAPH 0xE7E7 0x9257 #CJK UNIFIED IDEOGRAPH 0xE7E8 0x9245 #CJK UNIFIED IDEOGRAPH 0xE7E9 0x9249 #CJK UNIFIED IDEOGRAPH 0xE7EA 0x9264 #CJK UNIFIED IDEOGRAPH 0xE7EB 0x9248 #CJK UNIFIED IDEOGRAPH 0xE7EC 0x9295 #CJK UNIFIED IDEOGRAPH 0xE7ED 0x923F #CJK UNIFIED IDEOGRAPH 0xE7EE 0x924B #CJK UNIFIED IDEOGRAPH 0xE7EF 0x9250 #CJK UNIFIED IDEOGRAPH 0xE7F0 0x929C #CJK UNIFIED IDEOGRAPH 0xE7F1 0x9296 #CJK UNIFIED IDEOGRAPH 0xE7F2 0x9293 #CJK UNIFIED IDEOGRAPH 0xE7F3 0x929B #CJK UNIFIED IDEOGRAPH 0xE7F4 0x925A #CJK UNIFIED IDEOGRAPH 0xE7F5 0x92CF #CJK UNIFIED IDEOGRAPH 0xE7F6 0x92B9 #CJK UNIFIED IDEOGRAPH 0xE7F7 0x92B7 #CJK UNIFIED IDEOGRAPH 0xE7F8 0x92E9 #CJK UNIFIED IDEOGRAPH 0xE7F9 0x930F #CJK UNIFIED IDEOGRAPH 0xE7FA 0x92FA #CJK UNIFIED IDEOGRAPH 0xE7FB 0x9344 #CJK UNIFIED IDEOGRAPH 0xE7FC 0x932E #CJK UNIFIED IDEOGRAPH 0xE840 0x9319 #CJK UNIFIED IDEOGRAPH 0xE841 0x9322 #CJK UNIFIED IDEOGRAPH 0xE842 0x931A #CJK UNIFIED IDEOGRAPH 0xE843 0x9323 #CJK UNIFIED IDEOGRAPH 0xE844 0x933A #CJK UNIFIED IDEOGRAPH 0xE845 0x9335 #CJK UNIFIED IDEOGRAPH 0xE846 0x933B #CJK UNIFIED IDEOGRAPH 0xE847 0x935C #CJK UNIFIED IDEOGRAPH 0xE848 0x9360 #CJK UNIFIED IDEOGRAPH 0xE849 0x937C #CJK UNIFIED IDEOGRAPH 0xE84A 0x936E #CJK UNIFIED IDEOGRAPH 0xE84B 0x9356 #CJK UNIFIED IDEOGRAPH 0xE84C 0x93B0 #CJK UNIFIED IDEOGRAPH 0xE84D 0x93AC #CJK UNIFIED IDEOGRAPH 0xE84E 0x93AD #CJK UNIFIED IDEOGRAPH 0xE84F 0x9394 #CJK UNIFIED IDEOGRAPH 0xE850 0x93B9 #CJK UNIFIED IDEOGRAPH 0xE851 0x93D6 #CJK UNIFIED IDEOGRAPH 0xE852 0x93D7 #CJK UNIFIED IDEOGRAPH 0xE853 0x93E8 #CJK UNIFIED IDEOGRAPH 0xE854 0x93E5 #CJK UNIFIED IDEOGRAPH 0xE855 0x93D8 #CJK UNIFIED IDEOGRAPH 0xE856 0x93C3 #CJK UNIFIED IDEOGRAPH 0xE857 0x93DD #CJK UNIFIED IDEOGRAPH 0xE858 0x93D0 #CJK UNIFIED IDEOGRAPH 0xE859 0x93C8 #CJK UNIFIED IDEOGRAPH 0xE85A 0x93E4 #CJK UNIFIED IDEOGRAPH 0xE85B 0x941A #CJK UNIFIED IDEOGRAPH 0xE85C 0x9414 #CJK UNIFIED IDEOGRAPH 0xE85D 0x9413 #CJK UNIFIED IDEOGRAPH 0xE85E 0x9403 #CJK UNIFIED IDEOGRAPH 0xE85F 0x9407 #CJK UNIFIED IDEOGRAPH 0xE860 0x9410 #CJK UNIFIED IDEOGRAPH 0xE861 0x9436 #CJK UNIFIED IDEOGRAPH 0xE862 0x942B #CJK UNIFIED IDEOGRAPH 0xE863 0x9435 #CJK UNIFIED IDEOGRAPH 0xE864 0x9421 #CJK UNIFIED IDEOGRAPH 0xE865 0x943A #CJK UNIFIED IDEOGRAPH 0xE866 0x9441 #CJK UNIFIED IDEOGRAPH 0xE867 0x9452 #CJK UNIFIED IDEOGRAPH 0xE868 0x9444 #CJK UNIFIED IDEOGRAPH 0xE869 0x945B #CJK UNIFIED IDEOGRAPH 0xE86A 0x9460 #CJK UNIFIED IDEOGRAPH 0xE86B 0x9462 #CJK UNIFIED IDEOGRAPH 0xE86C 0x945E #CJK UNIFIED IDEOGRAPH 0xE86D 0x946A #CJK UNIFIED IDEOGRAPH 0xE86E 0x9229 #CJK UNIFIED IDEOGRAPH 0xE86F 0x9470 #CJK UNIFIED IDEOGRAPH 0xE870 0x9475 #CJK UNIFIED IDEOGRAPH 0xE871 0x9477 #CJK UNIFIED IDEOGRAPH 0xE872 0x947D #CJK UNIFIED IDEOGRAPH 0xE873 0x945A #CJK UNIFIED IDEOGRAPH 0xE874 0x947C #CJK UNIFIED IDEOGRAPH 0xE875 0x947E #CJK UNIFIED IDEOGRAPH 0xE876 0x9481 #CJK UNIFIED IDEOGRAPH 0xE877 0x947F #CJK UNIFIED IDEOGRAPH 0xE878 0x9582 #CJK UNIFIED IDEOGRAPH 0xE879 0x9587 #CJK UNIFIED IDEOGRAPH 0xE87A 0x958A #CJK UNIFIED IDEOGRAPH 0xE87B 0x9594 #CJK UNIFIED IDEOGRAPH 0xE87C 0x9596 #CJK UNIFIED IDEOGRAPH 0xE87D 0x9598 #CJK UNIFIED IDEOGRAPH 0xE87E 0x9599 #CJK UNIFIED IDEOGRAPH 0xE880 0x95A0 #CJK UNIFIED IDEOGRAPH 0xE881 0x95A8 #CJK UNIFIED IDEOGRAPH 0xE882 0x95A7 #CJK UNIFIED IDEOGRAPH 0xE883 0x95AD #CJK UNIFIED IDEOGRAPH 0xE884 0x95BC #CJK UNIFIED IDEOGRAPH 0xE885 0x95BB #CJK UNIFIED IDEOGRAPH 0xE886 0x95B9 #CJK UNIFIED IDEOGRAPH 0xE887 0x95BE #CJK UNIFIED IDEOGRAPH 0xE888 0x95CA #CJK UNIFIED IDEOGRAPH 0xE889 0x6FF6 #CJK UNIFIED IDEOGRAPH 0xE88A 0x95C3 #CJK UNIFIED IDEOGRAPH 0xE88B 0x95CD #CJK UNIFIED IDEOGRAPH 0xE88C 0x95CC #CJK UNIFIED IDEOGRAPH 0xE88D 0x95D5 #CJK UNIFIED IDEOGRAPH 0xE88E 0x95D4 #CJK UNIFIED IDEOGRAPH 0xE88F 0x95D6 #CJK UNIFIED IDEOGRAPH 0xE890 0x95DC #CJK UNIFIED IDEOGRAPH 0xE891 0x95E1 #CJK UNIFIED IDEOGRAPH 0xE892 0x95E5 #CJK UNIFIED IDEOGRAPH 0xE893 0x95E2 #CJK UNIFIED IDEOGRAPH 0xE894 0x9621 #CJK UNIFIED IDEOGRAPH 0xE895 0x9628 #CJK UNIFIED IDEOGRAPH 0xE896 0x962E #CJK UNIFIED IDEOGRAPH 0xE897 0x962F #CJK UNIFIED IDEOGRAPH 0xE898 0x9642 #CJK UNIFIED IDEOGRAPH 0xE899 0x964C #CJK UNIFIED IDEOGRAPH 0xE89A 0x964F #CJK UNIFIED IDEOGRAPH 0xE89B 0x964B #CJK UNIFIED IDEOGRAPH 0xE89C 0x9677 #CJK UNIFIED IDEOGRAPH 0xE89D 0x965C #CJK UNIFIED IDEOGRAPH 0xE89E 0x965E #CJK UNIFIED IDEOGRAPH 0xE89F 0x965D #CJK UNIFIED IDEOGRAPH 0xE8A0 0x965F #CJK UNIFIED IDEOGRAPH 0xE8A1 0x9666 #CJK UNIFIED IDEOGRAPH 0xE8A2 0x9672 #CJK UNIFIED IDEOGRAPH 0xE8A3 0x966C #CJK UNIFIED IDEOGRAPH 0xE8A4 0x968D #CJK UNIFIED IDEOGRAPH 0xE8A5 0x9698 #CJK UNIFIED IDEOGRAPH 0xE8A6 0x9695 #CJK UNIFIED IDEOGRAPH 0xE8A7 0x9697 #CJK UNIFIED IDEOGRAPH 0xE8A8 0x96AA #CJK UNIFIED IDEOGRAPH 0xE8A9 0x96A7 #CJK UNIFIED IDEOGRAPH 0xE8AA 0x96B1 #CJK UNIFIED IDEOGRAPH 0xE8AB 0x96B2 #CJK UNIFIED IDEOGRAPH 0xE8AC 0x96B0 #CJK UNIFIED IDEOGRAPH 0xE8AD 0x96B4 #CJK UNIFIED IDEOGRAPH 0xE8AE 0x96B6 #CJK UNIFIED IDEOGRAPH 0xE8AF 0x96B8 #CJK UNIFIED IDEOGRAPH 0xE8B0 0x96B9 #CJK UNIFIED IDEOGRAPH 0xE8B1 0x96CE #CJK UNIFIED IDEOGRAPH 0xE8B2 0x96CB #CJK UNIFIED IDEOGRAPH 0xE8B3 0x96C9 #CJK UNIFIED IDEOGRAPH 0xE8B4 0x96CD #CJK UNIFIED IDEOGRAPH 0xE8B5 0x894D #CJK UNIFIED IDEOGRAPH 0xE8B6 0x96DC #CJK UNIFIED IDEOGRAPH 0xE8B7 0x970D #CJK UNIFIED IDEOGRAPH 0xE8B8 0x96D5 #CJK UNIFIED IDEOGRAPH 0xE8B9 0x96F9 #CJK UNIFIED IDEOGRAPH 0xE8BA 0x9704 #CJK UNIFIED IDEOGRAPH 0xE8BB 0x9706 #CJK UNIFIED IDEOGRAPH 0xE8BC 0x9708 #CJK UNIFIED IDEOGRAPH 0xE8BD 0x9713 #CJK UNIFIED IDEOGRAPH 0xE8BE 0x970E #CJK UNIFIED IDEOGRAPH 0xE8BF 0x9711 #CJK UNIFIED IDEOGRAPH 0xE8C0 0x970F #CJK UNIFIED IDEOGRAPH 0xE8C1 0x9716 #CJK UNIFIED IDEOGRAPH 0xE8C2 0x9719 #CJK UNIFIED IDEOGRAPH 0xE8C3 0x9724 #CJK UNIFIED IDEOGRAPH 0xE8C4 0x972A #CJK UNIFIED IDEOGRAPH 0xE8C5 0x9730 #CJK UNIFIED IDEOGRAPH 0xE8C6 0x9739 #CJK UNIFIED IDEOGRAPH 0xE8C7 0x973D #CJK UNIFIED IDEOGRAPH 0xE8C8 0x973E #CJK UNIFIED IDEOGRAPH 0xE8C9 0x9744 #CJK UNIFIED IDEOGRAPH 0xE8CA 0x9746 #CJK UNIFIED IDEOGRAPH 0xE8CB 0x9748 #CJK UNIFIED IDEOGRAPH 0xE8CC 0x9742 #CJK UNIFIED IDEOGRAPH 0xE8CD 0x9749 #CJK UNIFIED IDEOGRAPH 0xE8CE 0x975C #CJK UNIFIED IDEOGRAPH 0xE8CF 0x9760 #CJK UNIFIED IDEOGRAPH 0xE8D0 0x9764 #CJK UNIFIED IDEOGRAPH 0xE8D1 0x9766 #CJK UNIFIED IDEOGRAPH 0xE8D2 0x9768 #CJK UNIFIED IDEOGRAPH 0xE8D3 0x52D2 #CJK UNIFIED IDEOGRAPH 0xE8D4 0x976B #CJK UNIFIED IDEOGRAPH 0xE8D5 0x9771 #CJK UNIFIED IDEOGRAPH 0xE8D6 0x9779 #CJK UNIFIED IDEOGRAPH 0xE8D7 0x9785 #CJK UNIFIED IDEOGRAPH 0xE8D8 0x977C #CJK UNIFIED IDEOGRAPH 0xE8D9 0x9781 #CJK UNIFIED IDEOGRAPH 0xE8DA 0x977A #CJK UNIFIED IDEOGRAPH 0xE8DB 0x9786 #CJK UNIFIED IDEOGRAPH 0xE8DC 0x978B #CJK UNIFIED IDEOGRAPH 0xE8DD 0x978F #CJK UNIFIED IDEOGRAPH 0xE8DE 0x9790 #CJK UNIFIED IDEOGRAPH 0xE8DF 0x979C #CJK UNIFIED IDEOGRAPH 0xE8E0 0x97A8 #CJK UNIFIED IDEOGRAPH 0xE8E1 0x97A6 #CJK UNIFIED IDEOGRAPH 0xE8E2 0x97A3 #CJK UNIFIED IDEOGRAPH 0xE8E3 0x97B3 #CJK UNIFIED IDEOGRAPH 0xE8E4 0x97B4 #CJK UNIFIED IDEOGRAPH 0xE8E5 0x97C3 #CJK UNIFIED IDEOGRAPH 0xE8E6 0x97C6 #CJK UNIFIED IDEOGRAPH 0xE8E7 0x97C8 #CJK UNIFIED IDEOGRAPH 0xE8E8 0x97CB #CJK UNIFIED IDEOGRAPH 0xE8E9 0x97DC #CJK UNIFIED IDEOGRAPH 0xE8EA 0x97ED #CJK UNIFIED IDEOGRAPH 0xE8EB 0x9F4F #CJK UNIFIED IDEOGRAPH 0xE8EC 0x97F2 #CJK UNIFIED IDEOGRAPH 0xE8ED 0x7ADF #CJK UNIFIED IDEOGRAPH 0xE8EE 0x97F6 #CJK UNIFIED IDEOGRAPH 0xE8EF 0x97F5 #CJK UNIFIED IDEOGRAPH 0xE8F0 0x980F #CJK UNIFIED IDEOGRAPH 0xE8F1 0x980C #CJK UNIFIED IDEOGRAPH 0xE8F2 0x9838 #CJK UNIFIED IDEOGRAPH 0xE8F3 0x9824 #CJK UNIFIED IDEOGRAPH 0xE8F4 0x9821 #CJK UNIFIED IDEOGRAPH 0xE8F5 0x9837 #CJK UNIFIED IDEOGRAPH 0xE8F6 0x983D #CJK UNIFIED IDEOGRAPH 0xE8F7 0x9846 #CJK UNIFIED IDEOGRAPH 0xE8F8 0x984F #CJK UNIFIED IDEOGRAPH 0xE8F9 0x984B #CJK UNIFIED IDEOGRAPH 0xE8FA 0x986B #CJK UNIFIED IDEOGRAPH 0xE8FB 0x986F #CJK UNIFIED IDEOGRAPH 0xE8FC 0x9870 #CJK UNIFIED IDEOGRAPH 0xE940 0x9871 #CJK UNIFIED IDEOGRAPH 0xE941 0x9874 #CJK UNIFIED IDEOGRAPH 0xE942 0x9873 #CJK UNIFIED IDEOGRAPH 0xE943 0x98AA #CJK UNIFIED IDEOGRAPH 0xE944 0x98AF #CJK UNIFIED IDEOGRAPH 0xE945 0x98B1 #CJK UNIFIED IDEOGRAPH 0xE946 0x98B6 #CJK UNIFIED IDEOGRAPH 0xE947 0x98C4 #CJK UNIFIED IDEOGRAPH 0xE948 0x98C3 #CJK UNIFIED IDEOGRAPH 0xE949 0x98C6 #CJK UNIFIED IDEOGRAPH 0xE94A 0x98E9 #CJK UNIFIED IDEOGRAPH 0xE94B 0x98EB #CJK UNIFIED IDEOGRAPH 0xE94C 0x9903 #CJK UNIFIED IDEOGRAPH 0xE94D 0x9909 #CJK UNIFIED IDEOGRAPH 0xE94E 0x9912 #CJK UNIFIED IDEOGRAPH 0xE94F 0x9914 #CJK UNIFIED IDEOGRAPH 0xE950 0x9918 #CJK UNIFIED IDEOGRAPH 0xE951 0x9921 #CJK UNIFIED IDEOGRAPH 0xE952 0x991D #CJK UNIFIED IDEOGRAPH 0xE953 0x991E #CJK UNIFIED IDEOGRAPH 0xE954 0x9924 #CJK UNIFIED IDEOGRAPH 0xE955 0x9920 #CJK UNIFIED IDEOGRAPH 0xE956 0x992C #CJK UNIFIED IDEOGRAPH 0xE957 0x992E #CJK UNIFIED IDEOGRAPH 0xE958 0x993D #CJK UNIFIED IDEOGRAPH 0xE959 0x993E #CJK UNIFIED IDEOGRAPH 0xE95A 0x9942 #CJK UNIFIED IDEOGRAPH 0xE95B 0x9949 #CJK UNIFIED IDEOGRAPH 0xE95C 0x9945 #CJK UNIFIED IDEOGRAPH 0xE95D 0x9950 #CJK UNIFIED IDEOGRAPH 0xE95E 0x994B #CJK UNIFIED IDEOGRAPH 0xE95F 0x9951 #CJK UNIFIED IDEOGRAPH 0xE960 0x9952 #CJK UNIFIED IDEOGRAPH 0xE961 0x994C #CJK UNIFIED IDEOGRAPH 0xE962 0x9955 #CJK UNIFIED IDEOGRAPH 0xE963 0x9997 #CJK UNIFIED IDEOGRAPH 0xE964 0x9998 #CJK UNIFIED IDEOGRAPH 0xE965 0x99A5 #CJK UNIFIED IDEOGRAPH 0xE966 0x99AD #CJK UNIFIED IDEOGRAPH 0xE967 0x99AE #CJK UNIFIED IDEOGRAPH 0xE968 0x99BC #CJK UNIFIED IDEOGRAPH 0xE969 0x99DF #CJK UNIFIED IDEOGRAPH 0xE96A 0x99DB #CJK UNIFIED IDEOGRAPH 0xE96B 0x99DD #CJK UNIFIED IDEOGRAPH 0xE96C 0x99D8 #CJK UNIFIED IDEOGRAPH 0xE96D 0x99D1 #CJK UNIFIED IDEOGRAPH 0xE96E 0x99ED #CJK UNIFIED IDEOGRAPH 0xE96F 0x99EE #CJK UNIFIED IDEOGRAPH 0xE970 0x99F1 #CJK UNIFIED IDEOGRAPH 0xE971 0x99F2 #CJK UNIFIED IDEOGRAPH 0xE972 0x99FB #CJK UNIFIED IDEOGRAPH 0xE973 0x99F8 #CJK UNIFIED IDEOGRAPH 0xE974 0x9A01 #CJK UNIFIED IDEOGRAPH 0xE975 0x9A0F #CJK UNIFIED IDEOGRAPH 0xE976 0x9A05 #CJK UNIFIED IDEOGRAPH 0xE977 0x99E2 #CJK UNIFIED IDEOGRAPH 0xE978 0x9A19 #CJK UNIFIED IDEOGRAPH 0xE979 0x9A2B #CJK UNIFIED IDEOGRAPH 0xE97A 0x9A37 #CJK UNIFIED IDEOGRAPH 0xE97B 0x9A45 #CJK UNIFIED IDEOGRAPH 0xE97C 0x9A42 #CJK UNIFIED IDEOGRAPH 0xE97D 0x9A40 #CJK UNIFIED IDEOGRAPH 0xE97E 0x9A43 #CJK UNIFIED IDEOGRAPH 0xE980 0x9A3E #CJK UNIFIED IDEOGRAPH 0xE981 0x9A55 #CJK UNIFIED IDEOGRAPH 0xE982 0x9A4D #CJK UNIFIED IDEOGRAPH 0xE983 0x9A5B #CJK UNIFIED IDEOGRAPH 0xE984 0x9A57 #CJK UNIFIED IDEOGRAPH 0xE985 0x9A5F #CJK UNIFIED IDEOGRAPH 0xE986 0x9A62 #CJK UNIFIED IDEOGRAPH 0xE987 0x9A65 #CJK UNIFIED IDEOGRAPH 0xE988 0x9A64 #CJK UNIFIED IDEOGRAPH 0xE989 0x9A69 #CJK UNIFIED IDEOGRAPH 0xE98A 0x9A6B #CJK UNIFIED IDEOGRAPH 0xE98B 0x9A6A #CJK UNIFIED IDEOGRAPH 0xE98C 0x9AAD #CJK UNIFIED IDEOGRAPH 0xE98D 0x9AB0 #CJK UNIFIED IDEOGRAPH 0xE98E 0x9ABC #CJK UNIFIED IDEOGRAPH 0xE98F 0x9AC0 #CJK UNIFIED IDEOGRAPH 0xE990 0x9ACF #CJK UNIFIED IDEOGRAPH 0xE991 0x9AD1 #CJK UNIFIED IDEOGRAPH 0xE992 0x9AD3 #CJK UNIFIED IDEOGRAPH 0xE993 0x9AD4 #CJK UNIFIED IDEOGRAPH 0xE994 0x9ADE #CJK UNIFIED IDEOGRAPH 0xE995 0x9ADF #CJK UNIFIED IDEOGRAPH 0xE996 0x9AE2 #CJK UNIFIED IDEOGRAPH 0xE997 0x9AE3 #CJK UNIFIED IDEOGRAPH 0xE998 0x9AE6 #CJK UNIFIED IDEOGRAPH 0xE999 0x9AEF #CJK UNIFIED IDEOGRAPH 0xE99A 0x9AEB #CJK UNIFIED IDEOGRAPH 0xE99B 0x9AEE #CJK UNIFIED IDEOGRAPH 0xE99C 0x9AF4 #CJK UNIFIED IDEOGRAPH 0xE99D 0x9AF1 #CJK UNIFIED IDEOGRAPH 0xE99E 0x9AF7 #CJK UNIFIED IDEOGRAPH 0xE99F 0x9AFB #CJK UNIFIED IDEOGRAPH 0xE9A0 0x9B06 #CJK UNIFIED IDEOGRAPH 0xE9A1 0x9B18 #CJK UNIFIED IDEOGRAPH 0xE9A2 0x9B1A #CJK UNIFIED IDEOGRAPH 0xE9A3 0x9B1F #CJK UNIFIED IDEOGRAPH 0xE9A4 0x9B22 #CJK UNIFIED IDEOGRAPH 0xE9A5 0x9B23 #CJK UNIFIED IDEOGRAPH 0xE9A6 0x9B25 #CJK UNIFIED IDEOGRAPH 0xE9A7 0x9B27 #CJK UNIFIED IDEOGRAPH 0xE9A8 0x9B28 #CJK UNIFIED IDEOGRAPH 0xE9A9 0x9B29 #CJK UNIFIED IDEOGRAPH 0xE9AA 0x9B2A #CJK UNIFIED IDEOGRAPH 0xE9AB 0x9B2E #CJK UNIFIED IDEOGRAPH 0xE9AC 0x9B2F #CJK UNIFIED IDEOGRAPH 0xE9AD 0x9B32 #CJK UNIFIED IDEOGRAPH 0xE9AE 0x9B44 #CJK UNIFIED IDEOGRAPH 0xE9AF 0x9B43 #CJK UNIFIED IDEOGRAPH 0xE9B0 0x9B4F #CJK UNIFIED IDEOGRAPH 0xE9B1 0x9B4D #CJK UNIFIED IDEOGRAPH 0xE9B2 0x9B4E #CJK UNIFIED IDEOGRAPH 0xE9B3 0x9B51 #CJK UNIFIED IDEOGRAPH 0xE9B4 0x9B58 #CJK UNIFIED IDEOGRAPH 0xE9B5 0x9B74 #CJK UNIFIED IDEOGRAPH 0xE9B6 0x9B93 #CJK UNIFIED IDEOGRAPH 0xE9B7 0x9B83 #CJK UNIFIED IDEOGRAPH 0xE9B8 0x9B91 #CJK UNIFIED IDEOGRAPH 0xE9B9 0x9B96 #CJK UNIFIED IDEOGRAPH 0xE9BA 0x9B97 #CJK UNIFIED IDEOGRAPH 0xE9BB 0x9B9F #CJK UNIFIED IDEOGRAPH 0xE9BC 0x9BA0 #CJK UNIFIED IDEOGRAPH 0xE9BD 0x9BA8 #CJK UNIFIED IDEOGRAPH 0xE9BE 0x9BB4 #CJK UNIFIED IDEOGRAPH 0xE9BF 0x9BC0 #CJK UNIFIED IDEOGRAPH 0xE9C0 0x9BCA #CJK UNIFIED IDEOGRAPH 0xE9C1 0x9BB9 #CJK UNIFIED IDEOGRAPH 0xE9C2 0x9BC6 #CJK UNIFIED IDEOGRAPH 0xE9C3 0x9BCF #CJK UNIFIED IDEOGRAPH 0xE9C4 0x9BD1 #CJK UNIFIED IDEOGRAPH 0xE9C5 0x9BD2 #CJK UNIFIED IDEOGRAPH 0xE9C6 0x9BE3 #CJK UNIFIED IDEOGRAPH 0xE9C7 0x9BE2 #CJK UNIFIED IDEOGRAPH 0xE9C8 0x9BE4 #CJK UNIFIED IDEOGRAPH 0xE9C9 0x9BD4 #CJK UNIFIED IDEOGRAPH 0xE9CA 0x9BE1 #CJK UNIFIED IDEOGRAPH 0xE9CB 0x9C3A #CJK UNIFIED IDEOGRAPH 0xE9CC 0x9BF2 #CJK UNIFIED IDEOGRAPH 0xE9CD 0x9BF1 #CJK UNIFIED IDEOGRAPH 0xE9CE 0x9BF0 #CJK UNIFIED IDEOGRAPH 0xE9CF 0x9C15 #CJK UNIFIED IDEOGRAPH 0xE9D0 0x9C14 #CJK UNIFIED IDEOGRAPH 0xE9D1 0x9C09 #CJK UNIFIED IDEOGRAPH 0xE9D2 0x9C13 #CJK UNIFIED IDEOGRAPH 0xE9D3 0x9C0C #CJK UNIFIED IDEOGRAPH 0xE9D4 0x9C06 #CJK UNIFIED IDEOGRAPH 0xE9D5 0x9C08 #CJK UNIFIED IDEOGRAPH 0xE9D6 0x9C12 #CJK UNIFIED IDEOGRAPH 0xE9D7 0x9C0A #CJK UNIFIED IDEOGRAPH 0xE9D8 0x9C04 #CJK UNIFIED IDEOGRAPH 0xE9D9 0x9C2E #CJK UNIFIED IDEOGRAPH 0xE9DA 0x9C1B #CJK UNIFIED IDEOGRAPH 0xE9DB 0x9C25 #CJK UNIFIED IDEOGRAPH 0xE9DC 0x9C24 #CJK UNIFIED IDEOGRAPH 0xE9DD 0x9C21 #CJK UNIFIED IDEOGRAPH 0xE9DE 0x9C30 #CJK UNIFIED IDEOGRAPH 0xE9DF 0x9C47 #CJK UNIFIED IDEOGRAPH 0xE9E0 0x9C32 #CJK UNIFIED IDEOGRAPH 0xE9E1 0x9C46 #CJK UNIFIED IDEOGRAPH 0xE9E2 0x9C3E #CJK UNIFIED IDEOGRAPH 0xE9E3 0x9C5A #CJK UNIFIED IDEOGRAPH 0xE9E4 0x9C60 #CJK UNIFIED IDEOGRAPH 0xE9E5 0x9C67 #CJK UNIFIED IDEOGRAPH 0xE9E6 0x9C76 #CJK UNIFIED IDEOGRAPH 0xE9E7 0x9C78 #CJK UNIFIED IDEOGRAPH 0xE9E8 0x9CE7 #CJK UNIFIED IDEOGRAPH 0xE9E9 0x9CEC #CJK UNIFIED IDEOGRAPH 0xE9EA 0x9CF0 #CJK UNIFIED IDEOGRAPH 0xE9EB 0x9D09 #CJK UNIFIED IDEOGRAPH 0xE9EC 0x9D08 #CJK UNIFIED IDEOGRAPH 0xE9ED 0x9CEB #CJK UNIFIED IDEOGRAPH 0xE9EE 0x9D03 #CJK UNIFIED IDEOGRAPH 0xE9EF 0x9D06 #CJK UNIFIED IDEOGRAPH 0xE9F0 0x9D2A #CJK UNIFIED IDEOGRAPH 0xE9F1 0x9D26 #CJK UNIFIED IDEOGRAPH 0xE9F2 0x9DAF #CJK UNIFIED IDEOGRAPH 0xE9F3 0x9D23 #CJK UNIFIED IDEOGRAPH 0xE9F4 0x9D1F #CJK UNIFIED IDEOGRAPH 0xE9F5 0x9D44 #CJK UNIFIED IDEOGRAPH 0xE9F6 0x9D15 #CJK UNIFIED IDEOGRAPH 0xE9F7 0x9D12 #CJK UNIFIED IDEOGRAPH 0xE9F8 0x9D41 #CJK UNIFIED IDEOGRAPH 0xE9F9 0x9D3F #CJK UNIFIED IDEOGRAPH 0xE9FA 0x9D3E #CJK UNIFIED IDEOGRAPH 0xE9FB 0x9D46 #CJK UNIFIED IDEOGRAPH 0xE9FC 0x9D48 #CJK UNIFIED IDEOGRAPH 0xEA40 0x9D5D #CJK UNIFIED IDEOGRAPH 0xEA41 0x9D5E #CJK UNIFIED IDEOGRAPH 0xEA42 0x9D64 #CJK UNIFIED IDEOGRAPH 0xEA43 0x9D51 #CJK UNIFIED IDEOGRAPH 0xEA44 0x9D50 #CJK UNIFIED IDEOGRAPH 0xEA45 0x9D59 #CJK UNIFIED IDEOGRAPH 0xEA46 0x9D72 #CJK UNIFIED IDEOGRAPH 0xEA47 0x9D89 #CJK UNIFIED IDEOGRAPH 0xEA48 0x9D87 #CJK UNIFIED IDEOGRAPH 0xEA49 0x9DAB #CJK UNIFIED IDEOGRAPH 0xEA4A 0x9D6F #CJK UNIFIED IDEOGRAPH 0xEA4B 0x9D7A #CJK UNIFIED IDEOGRAPH 0xEA4C 0x9D9A #CJK UNIFIED IDEOGRAPH 0xEA4D 0x9DA4 #CJK UNIFIED IDEOGRAPH 0xEA4E 0x9DA9 #CJK UNIFIED IDEOGRAPH 0xEA4F 0x9DB2 #CJK UNIFIED IDEOGRAPH 0xEA50 0x9DC4 #CJK UNIFIED IDEOGRAPH 0xEA51 0x9DC1 #CJK UNIFIED IDEOGRAPH 0xEA52 0x9DBB #CJK UNIFIED IDEOGRAPH 0xEA53 0x9DB8 #CJK UNIFIED IDEOGRAPH 0xEA54 0x9DBA #CJK UNIFIED IDEOGRAPH 0xEA55 0x9DC6 #CJK UNIFIED IDEOGRAPH 0xEA56 0x9DCF #CJK UNIFIED IDEOGRAPH 0xEA57 0x9DC2 #CJK UNIFIED IDEOGRAPH 0xEA58 0x9DD9 #CJK UNIFIED IDEOGRAPH 0xEA59 0x9DD3 #CJK UNIFIED IDEOGRAPH 0xEA5A 0x9DF8 #CJK UNIFIED IDEOGRAPH 0xEA5B 0x9DE6 #CJK UNIFIED IDEOGRAPH 0xEA5C 0x9DED #CJK UNIFIED IDEOGRAPH 0xEA5D 0x9DEF #CJK UNIFIED IDEOGRAPH 0xEA5E 0x9DFD #CJK UNIFIED IDEOGRAPH 0xEA5F 0x9E1A #CJK UNIFIED IDEOGRAPH 0xEA60 0x9E1B #CJK UNIFIED IDEOGRAPH 0xEA61 0x9E1E #CJK UNIFIED IDEOGRAPH 0xEA62 0x9E75 #CJK UNIFIED IDEOGRAPH 0xEA63 0x9E79 #CJK UNIFIED IDEOGRAPH 0xEA64 0x9E7D #CJK UNIFIED IDEOGRAPH 0xEA65 0x9E81 #CJK UNIFIED IDEOGRAPH 0xEA66 0x9E88 #CJK UNIFIED IDEOGRAPH 0xEA67 0x9E8B #CJK UNIFIED IDEOGRAPH 0xEA68 0x9E8C #CJK UNIFIED IDEOGRAPH 0xEA69 0x9E92 #CJK UNIFIED IDEOGRAPH 0xEA6A 0x9E95 #CJK UNIFIED IDEOGRAPH 0xEA6B 0x9E91 #CJK UNIFIED IDEOGRAPH 0xEA6C 0x9E9D #CJK UNIFIED IDEOGRAPH 0xEA6D 0x9EA5 #CJK UNIFIED IDEOGRAPH 0xEA6E 0x9EA9 #CJK UNIFIED IDEOGRAPH 0xEA6F 0x9EB8 #CJK UNIFIED IDEOGRAPH 0xEA70 0x9EAA #CJK UNIFIED IDEOGRAPH 0xEA71 0x9EAD #CJK UNIFIED IDEOGRAPH 0xEA72 0x9761 #CJK UNIFIED IDEOGRAPH 0xEA73 0x9ECC #CJK UNIFIED IDEOGRAPH 0xEA74 0x9ECE #CJK UNIFIED IDEOGRAPH 0xEA75 0x9ECF #CJK UNIFIED IDEOGRAPH 0xEA76 0x9ED0 #CJK UNIFIED IDEOGRAPH 0xEA77 0x9ED4 #CJK UNIFIED IDEOGRAPH 0xEA78 0x9EDC #CJK UNIFIED IDEOGRAPH 0xEA79 0x9EDE #CJK UNIFIED IDEOGRAPH 0xEA7A 0x9EDD #CJK UNIFIED IDEOGRAPH 0xEA7B 0x9EE0 #CJK UNIFIED IDEOGRAPH 0xEA7C 0x9EE5 #CJK UNIFIED IDEOGRAPH 0xEA7D 0x9EE8 #CJK UNIFIED IDEOGRAPH 0xEA7E 0x9EEF #CJK UNIFIED IDEOGRAPH 0xEA80 0x9EF4 #CJK UNIFIED IDEOGRAPH 0xEA81 0x9EF6 #CJK UNIFIED IDEOGRAPH 0xEA82 0x9EF7 #CJK UNIFIED IDEOGRAPH 0xEA83 0x9EF9 #CJK UNIFIED IDEOGRAPH 0xEA84 0x9EFB #CJK UNIFIED IDEOGRAPH 0xEA85 0x9EFC #CJK UNIFIED IDEOGRAPH 0xEA86 0x9EFD #CJK UNIFIED IDEOGRAPH 0xEA87 0x9F07 #CJK UNIFIED IDEOGRAPH 0xEA88 0x9F08 #CJK UNIFIED IDEOGRAPH 0xEA89 0x76B7 #CJK UNIFIED IDEOGRAPH 0xEA8A 0x9F15 #CJK UNIFIED IDEOGRAPH 0xEA8B 0x9F21 #CJK UNIFIED IDEOGRAPH 0xEA8C 0x9F2C #CJK UNIFIED IDEOGRAPH 0xEA8D 0x9F3E #CJK UNIFIED IDEOGRAPH 0xEA8E 0x9F4A #CJK UNIFIED IDEOGRAPH 0xEA8F 0x9F52 #CJK UNIFIED IDEOGRAPH 0xEA90 0x9F54 #CJK UNIFIED IDEOGRAPH 0xEA91 0x9F63 #CJK UNIFIED IDEOGRAPH 0xEA92 0x9F5F #CJK UNIFIED IDEOGRAPH 0xEA93 0x9F60 #CJK UNIFIED IDEOGRAPH 0xEA94 0x9F61 #CJK UNIFIED IDEOGRAPH 0xEA95 0x9F66 #CJK UNIFIED IDEOGRAPH 0xEA96 0x9F67 #CJK UNIFIED IDEOGRAPH 0xEA97 0x9F6C #CJK UNIFIED IDEOGRAPH 0xEA98 0x9F6A #CJK UNIFIED IDEOGRAPH 0xEA99 0x9F77 #CJK UNIFIED IDEOGRAPH 0xEA9A 0x9F72 #CJK UNIFIED IDEOGRAPH 0xEA9B 0x9F76 #CJK UNIFIED IDEOGRAPH 0xEA9C 0x9F95 #CJK UNIFIED IDEOGRAPH 0xEA9D 0x9F9C #CJK UNIFIED IDEOGRAPH 0xEA9E 0x9FA0 #CJK UNIFIED IDEOGRAPH 0xEA9F 0x582F #CJK UNIFIED IDEOGRAPH 0xEAA0 0x69C7 #CJK UNIFIED IDEOGRAPH 0xEAA1 0x9059 #CJK UNIFIED IDEOGRAPH 0xEAA2 0x7464 #CJK UNIFIED IDEOGRAPH 0xEAA3 0x51DC #CJK UNIFIED IDEOGRAPH 0xEAA4 0x7199 #CJK UNIFIED IDEOGRAPH 0xED40 0x7E8A #CJK UNIFIED IDEOGRAPH 0xED41 0x891C #CJK UNIFIED IDEOGRAPH 0xED42 0x9348 #CJK UNIFIED IDEOGRAPH 0xED43 0x9288 #CJK UNIFIED IDEOGRAPH 0xED44 0x84DC #CJK UNIFIED IDEOGRAPH 0xED45 0x4FC9 #CJK UNIFIED IDEOGRAPH 0xED46 0x70BB #CJK UNIFIED IDEOGRAPH 0xED47 0x6631 #CJK UNIFIED IDEOGRAPH 0xED48 0x68C8 #CJK UNIFIED IDEOGRAPH 0xED49 0x92F9 #CJK UNIFIED IDEOGRAPH 0xED4A 0x66FB #CJK UNIFIED IDEOGRAPH 0xED4B 0x5F45 #CJK UNIFIED IDEOGRAPH 0xED4C 0x4E28 #CJK UNIFIED IDEOGRAPH 0xED4D 0x4EE1 #CJK UNIFIED IDEOGRAPH 0xED4E 0x4EFC #CJK UNIFIED IDEOGRAPH 0xED4F 0x4F00 #CJK UNIFIED IDEOGRAPH 0xED50 0x4F03 #CJK UNIFIED IDEOGRAPH 0xED51 0x4F39 #CJK UNIFIED IDEOGRAPH 0xED52 0x4F56 #CJK UNIFIED IDEOGRAPH 0xED53 0x4F92 #CJK UNIFIED IDEOGRAPH 0xED54 0x4F8A #CJK UNIFIED IDEOGRAPH 0xED55 0x4F9A #CJK UNIFIED IDEOGRAPH 0xED56 0x4F94 #CJK UNIFIED IDEOGRAPH 0xED57 0x4FCD #CJK UNIFIED IDEOGRAPH 0xED58 0x5040 #CJK UNIFIED IDEOGRAPH 0xED59 0x5022 #CJK UNIFIED IDEOGRAPH 0xED5A 0x4FFF #CJK UNIFIED IDEOGRAPH 0xED5B 0x501E #CJK UNIFIED IDEOGRAPH 0xED5C 0x5046 #CJK UNIFIED IDEOGRAPH 0xED5D 0x5070 #CJK UNIFIED IDEOGRAPH 0xED5E 0x5042 #CJK UNIFIED IDEOGRAPH 0xED5F 0x5094 #CJK UNIFIED IDEOGRAPH 0xED60 0x50F4 #CJK UNIFIED IDEOGRAPH 0xED61 0x50D8 #CJK UNIFIED IDEOGRAPH 0xED62 0x514A #CJK UNIFIED IDEOGRAPH 0xED63 0x5164 #CJK UNIFIED IDEOGRAPH 0xED64 0x519D #CJK UNIFIED IDEOGRAPH 0xED65 0x51BE #CJK UNIFIED IDEOGRAPH 0xED66 0x51EC #CJK UNIFIED IDEOGRAPH 0xED67 0x5215 #CJK UNIFIED IDEOGRAPH 0xED68 0x529C #CJK UNIFIED IDEOGRAPH 0xED69 0x52A6 #CJK UNIFIED IDEOGRAPH 0xED6A 0x52C0 #CJK UNIFIED IDEOGRAPH 0xED6B 0x52DB #CJK UNIFIED IDEOGRAPH 0xED6C 0x5300 #CJK UNIFIED IDEOGRAPH 0xED6D 0x5307 #CJK UNIFIED IDEOGRAPH 0xED6E 0x5324 #CJK UNIFIED IDEOGRAPH 0xED6F 0x5372 #CJK UNIFIED IDEOGRAPH 0xED70 0x5393 #CJK UNIFIED IDEOGRAPH 0xED71 0x53B2 #CJK UNIFIED IDEOGRAPH 0xED72 0x53DD #CJK UNIFIED IDEOGRAPH 0xED73 0xFA0E #CJK COMPATIBILITY IDEOGRAPH 0xED74 0x549C #CJK UNIFIED IDEOGRAPH 0xED75 0x548A #CJK UNIFIED IDEOGRAPH 0xED76 0x54A9 #CJK UNIFIED IDEOGRAPH 0xED77 0x54FF #CJK UNIFIED IDEOGRAPH 0xED78 0x5586 #CJK UNIFIED IDEOGRAPH 0xED79 0x5759 #CJK UNIFIED IDEOGRAPH 0xED7A 0x5765 #CJK UNIFIED IDEOGRAPH 0xED7B 0x57AC #CJK UNIFIED IDEOGRAPH 0xED7C 0x57C8 #CJK UNIFIED IDEOGRAPH 0xED7D 0x57C7 #CJK UNIFIED IDEOGRAPH 0xED7E 0xFA0F #CJK COMPATIBILITY IDEOGRAPH 0xED80 0xFA10 #CJK COMPATIBILITY IDEOGRAPH 0xED81 0x589E #CJK UNIFIED IDEOGRAPH 0xED82 0x58B2 #CJK UNIFIED IDEOGRAPH 0xED83 0x590B #CJK UNIFIED IDEOGRAPH 0xED84 0x5953 #CJK UNIFIED IDEOGRAPH 0xED85 0x595B #CJK UNIFIED IDEOGRAPH 0xED86 0x595D #CJK UNIFIED IDEOGRAPH 0xED87 0x5963 #CJK UNIFIED IDEOGRAPH 0xED88 0x59A4 #CJK UNIFIED IDEOGRAPH 0xED89 0x59BA #CJK UNIFIED IDEOGRAPH 0xED8A 0x5B56 #CJK UNIFIED IDEOGRAPH 0xED8B 0x5BC0 #CJK UNIFIED IDEOGRAPH 0xED8C 0x752F #CJK UNIFIED IDEOGRAPH 0xED8D 0x5BD8 #CJK UNIFIED IDEOGRAPH 0xED8E 0x5BEC #CJK UNIFIED IDEOGRAPH 0xED8F 0x5C1E #CJK UNIFIED IDEOGRAPH 0xED90 0x5CA6 #CJK UNIFIED IDEOGRAPH 0xED91 0x5CBA #CJK UNIFIED IDEOGRAPH 0xED92 0x5CF5 #CJK UNIFIED IDEOGRAPH 0xED93 0x5D27 #CJK UNIFIED IDEOGRAPH 0xED94 0x5D53 #CJK UNIFIED IDEOGRAPH 0xED95 0xFA11 #CJK COMPATIBILITY IDEOGRAPH 0xED96 0x5D42 #CJK UNIFIED IDEOGRAPH 0xED97 0x5D6D #CJK UNIFIED IDEOGRAPH 0xED98 0x5DB8 #CJK UNIFIED IDEOGRAPH 0xED99 0x5DB9 #CJK UNIFIED IDEOGRAPH 0xED9A 0x5DD0 #CJK UNIFIED IDEOGRAPH 0xED9B 0x5F21 #CJK UNIFIED IDEOGRAPH 0xED9C 0x5F34 #CJK UNIFIED IDEOGRAPH 0xED9D 0x5F67 #CJK UNIFIED IDEOGRAPH 0xED9E 0x5FB7 #CJK UNIFIED IDEOGRAPH 0xED9F 0x5FDE #CJK UNIFIED IDEOGRAPH 0xEDA0 0x605D #CJK UNIFIED IDEOGRAPH 0xEDA1 0x6085 #CJK UNIFIED IDEOGRAPH 0xEDA2 0x608A #CJK UNIFIED IDEOGRAPH 0xEDA3 0x60DE #CJK UNIFIED IDEOGRAPH 0xEDA4 0x60D5 #CJK UNIFIED IDEOGRAPH 0xEDA5 0x6120 #CJK UNIFIED IDEOGRAPH 0xEDA6 0x60F2 #CJK UNIFIED IDEOGRAPH 0xEDA7 0x6111 #CJK UNIFIED IDEOGRAPH 0xEDA8 0x6137 #CJK UNIFIED IDEOGRAPH 0xEDA9 0x6130 #CJK UNIFIED IDEOGRAPH 0xEDAA 0x6198 #CJK UNIFIED IDEOGRAPH 0xEDAB 0x6213 #CJK UNIFIED IDEOGRAPH 0xEDAC 0x62A6 #CJK UNIFIED IDEOGRAPH 0xEDAD 0x63F5 #CJK UNIFIED IDEOGRAPH 0xEDAE 0x6460 #CJK UNIFIED IDEOGRAPH 0xEDAF 0x649D #CJK UNIFIED IDEOGRAPH 0xEDB0 0x64CE #CJK UNIFIED IDEOGRAPH 0xEDB1 0x654E #CJK UNIFIED IDEOGRAPH 0xEDB2 0x6600 #CJK UNIFIED IDEOGRAPH 0xEDB3 0x6615 #CJK UNIFIED IDEOGRAPH 0xEDB4 0x663B #CJK UNIFIED IDEOGRAPH 0xEDB5 0x6609 #CJK UNIFIED IDEOGRAPH 0xEDB6 0x662E #CJK UNIFIED IDEOGRAPH 0xEDB7 0x661E #CJK UNIFIED IDEOGRAPH 0xEDB8 0x6624 #CJK UNIFIED IDEOGRAPH 0xEDB9 0x6665 #CJK UNIFIED IDEOGRAPH 0xEDBA 0x6657 #CJK UNIFIED IDEOGRAPH 0xEDBB 0x6659 #CJK UNIFIED IDEOGRAPH 0xEDBC 0xFA12 #CJK COMPATIBILITY IDEOGRAPH 0xEDBD 0x6673 #CJK UNIFIED IDEOGRAPH 0xEDBE 0x6699 #CJK UNIFIED IDEOGRAPH 0xEDBF 0x66A0 #CJK UNIFIED IDEOGRAPH 0xEDC0 0x66B2 #CJK UNIFIED IDEOGRAPH 0xEDC1 0x66BF #CJK UNIFIED IDEOGRAPH 0xEDC2 0x66FA #CJK UNIFIED IDEOGRAPH 0xEDC3 0x670E #CJK UNIFIED IDEOGRAPH 0xEDC4 0xF929 #CJK COMPATIBILITY IDEOGRAPH 0xEDC5 0x6766 #CJK UNIFIED IDEOGRAPH 0xEDC6 0x67BB #CJK UNIFIED IDEOGRAPH 0xEDC7 0x6852 #CJK UNIFIED IDEOGRAPH 0xEDC8 0x67C0 #CJK UNIFIED IDEOGRAPH 0xEDC9 0x6801 #CJK UNIFIED IDEOGRAPH 0xEDCA 0x6844 #CJK UNIFIED IDEOGRAPH 0xEDCB 0x68CF #CJK UNIFIED IDEOGRAPH 0xEDCC 0xFA13 #CJK COMPATIBILITY IDEOGRAPH 0xEDCD 0x6968 #CJK UNIFIED IDEOGRAPH 0xEDCE 0xFA14 #CJK COMPATIBILITY IDEOGRAPH 0xEDCF 0x6998 #CJK UNIFIED IDEOGRAPH 0xEDD0 0x69E2 #CJK UNIFIED IDEOGRAPH 0xEDD1 0x6A30 #CJK UNIFIED IDEOGRAPH 0xEDD2 0x6A6B #CJK UNIFIED IDEOGRAPH 0xEDD3 0x6A46 #CJK UNIFIED IDEOGRAPH 0xEDD4 0x6A73 #CJK UNIFIED IDEOGRAPH 0xEDD5 0x6A7E #CJK UNIFIED IDEOGRAPH 0xEDD6 0x6AE2 #CJK UNIFIED IDEOGRAPH 0xEDD7 0x6AE4 #CJK UNIFIED IDEOGRAPH 0xEDD8 0x6BD6 #CJK UNIFIED IDEOGRAPH 0xEDD9 0x6C3F #CJK UNIFIED IDEOGRAPH 0xEDDA 0x6C5C #CJK UNIFIED IDEOGRAPH 0xEDDB 0x6C86 #CJK UNIFIED IDEOGRAPH 0xEDDC 0x6C6F #CJK UNIFIED IDEOGRAPH 0xEDDD 0x6CDA #CJK UNIFIED IDEOGRAPH 0xEDDE 0x6D04 #CJK UNIFIED IDEOGRAPH 0xEDDF 0x6D87 #CJK UNIFIED IDEOGRAPH 0xEDE0 0x6D6F #CJK UNIFIED IDEOGRAPH 0xEDE1 0x6D96 #CJK UNIFIED IDEOGRAPH 0xEDE2 0x6DAC #CJK UNIFIED IDEOGRAPH 0xEDE3 0x6DCF #CJK UNIFIED IDEOGRAPH 0xEDE4 0x6DF8 #CJK UNIFIED IDEOGRAPH 0xEDE5 0x6DF2 #CJK UNIFIED IDEOGRAPH 0xEDE6 0x6DFC #CJK UNIFIED IDEOGRAPH 0xEDE7 0x6E39 #CJK UNIFIED IDEOGRAPH 0xEDE8 0x6E5C #CJK UNIFIED IDEOGRAPH 0xEDE9 0x6E27 #CJK UNIFIED IDEOGRAPH 0xEDEA 0x6E3C #CJK UNIFIED IDEOGRAPH 0xEDEB 0x6EBF #CJK UNIFIED IDEOGRAPH 0xEDEC 0x6F88 #CJK UNIFIED IDEOGRAPH 0xEDED 0x6FB5 #CJK UNIFIED IDEOGRAPH 0xEDEE 0x6FF5 #CJK UNIFIED IDEOGRAPH 0xEDEF 0x7005 #CJK UNIFIED IDEOGRAPH 0xEDF0 0x7007 #CJK UNIFIED IDEOGRAPH 0xEDF1 0x7028 #CJK UNIFIED IDEOGRAPH 0xEDF2 0x7085 #CJK UNIFIED IDEOGRAPH 0xEDF3 0x70AB #CJK UNIFIED IDEOGRAPH 0xEDF4 0x710F #CJK UNIFIED IDEOGRAPH 0xEDF5 0x7104 #CJK UNIFIED IDEOGRAPH 0xEDF6 0x715C #CJK UNIFIED IDEOGRAPH 0xEDF7 0x7146 #CJK UNIFIED IDEOGRAPH 0xEDF8 0x7147 #CJK UNIFIED IDEOGRAPH 0xEDF9 0xFA15 #CJK COMPATIBILITY IDEOGRAPH 0xEDFA 0x71C1 #CJK UNIFIED IDEOGRAPH 0xEDFB 0x71FE #CJK UNIFIED IDEOGRAPH 0xEDFC 0x72B1 #CJK UNIFIED IDEOGRAPH 0xEE40 0x72BE #CJK UNIFIED IDEOGRAPH 0xEE41 0x7324 #CJK UNIFIED IDEOGRAPH 0xEE42 0xFA16 #CJK COMPATIBILITY IDEOGRAPH 0xEE43 0x7377 #CJK UNIFIED IDEOGRAPH 0xEE44 0x73BD #CJK UNIFIED IDEOGRAPH 0xEE45 0x73C9 #CJK UNIFIED IDEOGRAPH 0xEE46 0x73D6 #CJK UNIFIED IDEOGRAPH 0xEE47 0x73E3 #CJK UNIFIED IDEOGRAPH 0xEE48 0x73D2 #CJK UNIFIED IDEOGRAPH 0xEE49 0x7407 #CJK UNIFIED IDEOGRAPH 0xEE4A 0x73F5 #CJK UNIFIED IDEOGRAPH 0xEE4B 0x7426 #CJK UNIFIED IDEOGRAPH 0xEE4C 0x742A #CJK UNIFIED IDEOGRAPH 0xEE4D 0x7429 #CJK UNIFIED IDEOGRAPH 0xEE4E 0x742E #CJK UNIFIED IDEOGRAPH 0xEE4F 0x7462 #CJK UNIFIED IDEOGRAPH 0xEE50 0x7489 #CJK UNIFIED IDEOGRAPH 0xEE51 0x749F #CJK UNIFIED IDEOGRAPH 0xEE52 0x7501 #CJK UNIFIED IDEOGRAPH 0xEE53 0x756F #CJK UNIFIED IDEOGRAPH 0xEE54 0x7682 #CJK UNIFIED IDEOGRAPH 0xEE55 0x769C #CJK UNIFIED IDEOGRAPH 0xEE56 0x769E #CJK UNIFIED IDEOGRAPH 0xEE57 0x769B #CJK UNIFIED IDEOGRAPH 0xEE58 0x76A6 #CJK UNIFIED IDEOGRAPH 0xEE59 0xFA17 #CJK COMPATIBILITY IDEOGRAPH 0xEE5A 0x7746 #CJK UNIFIED IDEOGRAPH 0xEE5B 0x52AF #CJK UNIFIED IDEOGRAPH 0xEE5C 0x7821 #CJK UNIFIED IDEOGRAPH 0xEE5D 0x784E #CJK UNIFIED IDEOGRAPH 0xEE5E 0x7864 #CJK UNIFIED IDEOGRAPH 0xEE5F 0x787A #CJK UNIFIED IDEOGRAPH 0xEE60 0x7930 #CJK UNIFIED IDEOGRAPH 0xEE61 0xFA18 #CJK COMPATIBILITY IDEOGRAPH 0xEE62 0xFA19 #CJK COMPATIBILITY IDEOGRAPH 0xEE63 0xFA1A #CJK COMPATIBILITY IDEOGRAPH 0xEE64 0x7994 #CJK UNIFIED IDEOGRAPH 0xEE65 0xFA1B #CJK COMPATIBILITY IDEOGRAPH 0xEE66 0x799B #CJK UNIFIED IDEOGRAPH 0xEE67 0x7AD1 #CJK UNIFIED IDEOGRAPH 0xEE68 0x7AE7 #CJK UNIFIED IDEOGRAPH 0xEE69 0xFA1C #CJK COMPATIBILITY IDEOGRAPH 0xEE6A 0x7AEB #CJK UNIFIED IDEOGRAPH 0xEE6B 0x7B9E #CJK UNIFIED IDEOGRAPH 0xEE6C 0xFA1D #CJK COMPATIBILITY IDEOGRAPH 0xEE6D 0x7D48 #CJK UNIFIED IDEOGRAPH 0xEE6E 0x7D5C #CJK UNIFIED IDEOGRAPH 0xEE6F 0x7DB7 #CJK UNIFIED IDEOGRAPH 0xEE70 0x7DA0 #CJK UNIFIED IDEOGRAPH 0xEE71 0x7DD6 #CJK UNIFIED IDEOGRAPH 0xEE72 0x7E52 #CJK UNIFIED IDEOGRAPH 0xEE73 0x7F47 #CJK UNIFIED IDEOGRAPH 0xEE74 0x7FA1 #CJK UNIFIED IDEOGRAPH 0xEE75 0xFA1E #CJK COMPATIBILITY IDEOGRAPH 0xEE76 0x8301 #CJK UNIFIED IDEOGRAPH 0xEE77 0x8362 #CJK UNIFIED IDEOGRAPH 0xEE78 0x837F #CJK UNIFIED IDEOGRAPH 0xEE79 0x83C7 #CJK UNIFIED IDEOGRAPH 0xEE7A 0x83F6 #CJK UNIFIED IDEOGRAPH 0xEE7B 0x8448 #CJK UNIFIED IDEOGRAPH 0xEE7C 0x84B4 #CJK UNIFIED IDEOGRAPH 0xEE7D 0x8553 #CJK UNIFIED IDEOGRAPH 0xEE7E 0x8559 #CJK UNIFIED IDEOGRAPH 0xEE80 0x856B #CJK UNIFIED IDEOGRAPH 0xEE81 0xFA1F #CJK COMPATIBILITY IDEOGRAPH 0xEE82 0x85B0 #CJK UNIFIED IDEOGRAPH 0xEE83 0xFA20 #CJK COMPATIBILITY IDEOGRAPH 0xEE84 0xFA21 #CJK COMPATIBILITY IDEOGRAPH 0xEE85 0x8807 #CJK UNIFIED IDEOGRAPH 0xEE86 0x88F5 #CJK UNIFIED IDEOGRAPH 0xEE87 0x8A12 #CJK UNIFIED IDEOGRAPH 0xEE88 0x8A37 #CJK UNIFIED IDEOGRAPH 0xEE89 0x8A79 #CJK UNIFIED IDEOGRAPH 0xEE8A 0x8AA7 #CJK UNIFIED IDEOGRAPH 0xEE8B 0x8ABE #CJK UNIFIED IDEOGRAPH 0xEE8C 0x8ADF #CJK UNIFIED IDEOGRAPH 0xEE8D 0xFA22 #CJK COMPATIBILITY IDEOGRAPH 0xEE8E 0x8AF6 #CJK UNIFIED IDEOGRAPH 0xEE8F 0x8B53 #CJK UNIFIED IDEOGRAPH 0xEE90 0x8B7F #CJK UNIFIED IDEOGRAPH 0xEE91 0x8CF0 #CJK UNIFIED IDEOGRAPH 0xEE92 0x8CF4 #CJK UNIFIED IDEOGRAPH 0xEE93 0x8D12 #CJK UNIFIED IDEOGRAPH 0xEE94 0x8D76 #CJK UNIFIED IDEOGRAPH 0xEE95 0xFA23 #CJK COMPATIBILITY IDEOGRAPH 0xEE96 0x8ECF #CJK UNIFIED IDEOGRAPH 0xEE97 0xFA24 #CJK COMPATIBILITY IDEOGRAPH 0xEE98 0xFA25 #CJK COMPATIBILITY IDEOGRAPH 0xEE99 0x9067 #CJK UNIFIED IDEOGRAPH 0xEE9A 0x90DE #CJK UNIFIED IDEOGRAPH 0xEE9B 0xFA26 #CJK COMPATIBILITY IDEOGRAPH 0xEE9C 0x9115 #CJK UNIFIED IDEOGRAPH 0xEE9D 0x9127 #CJK UNIFIED IDEOGRAPH 0xEE9E 0x91DA #CJK UNIFIED IDEOGRAPH 0xEE9F 0x91D7 #CJK UNIFIED IDEOGRAPH 0xEEA0 0x91DE #CJK UNIFIED IDEOGRAPH 0xEEA1 0x91ED #CJK UNIFIED IDEOGRAPH 0xEEA2 0x91EE #CJK UNIFIED IDEOGRAPH 0xEEA3 0x91E4 #CJK UNIFIED IDEOGRAPH 0xEEA4 0x91E5 #CJK UNIFIED IDEOGRAPH 0xEEA5 0x9206 #CJK UNIFIED IDEOGRAPH 0xEEA6 0x9210 #CJK UNIFIED IDEOGRAPH 0xEEA7 0x920A #CJK UNIFIED IDEOGRAPH 0xEEA8 0x923A #CJK UNIFIED IDEOGRAPH 0xEEA9 0x9240 #CJK UNIFIED IDEOGRAPH 0xEEAA 0x923C #CJK UNIFIED IDEOGRAPH 0xEEAB 0x924E #CJK UNIFIED IDEOGRAPH 0xEEAC 0x9259 #CJK UNIFIED IDEOGRAPH 0xEEAD 0x9251 #CJK UNIFIED IDEOGRAPH 0xEEAE 0x9239 #CJK UNIFIED IDEOGRAPH 0xEEAF 0x9267 #CJK UNIFIED IDEOGRAPH 0xEEB0 0x92A7 #CJK UNIFIED IDEOGRAPH 0xEEB1 0x9277 #CJK UNIFIED IDEOGRAPH 0xEEB2 0x9278 #CJK UNIFIED IDEOGRAPH 0xEEB3 0x92E7 #CJK UNIFIED IDEOGRAPH 0xEEB4 0x92D7 #CJK UNIFIED IDEOGRAPH 0xEEB5 0x92D9 #CJK UNIFIED IDEOGRAPH 0xEEB6 0x92D0 #CJK UNIFIED IDEOGRAPH 0xEEB7 0xFA27 #CJK COMPATIBILITY IDEOGRAPH 0xEEB8 0x92D5 #CJK UNIFIED IDEOGRAPH 0xEEB9 0x92E0 #CJK UNIFIED IDEOGRAPH 0xEEBA 0x92D3 #CJK UNIFIED IDEOGRAPH 0xEEBB 0x9325 #CJK UNIFIED IDEOGRAPH 0xEEBC 0x9321 #CJK UNIFIED IDEOGRAPH 0xEEBD 0x92FB #CJK UNIFIED IDEOGRAPH 0xEEBE 0xFA28 #CJK COMPATIBILITY IDEOGRAPH 0xEEBF 0x931E #CJK UNIFIED IDEOGRAPH 0xEEC0 0x92FF #CJK UNIFIED IDEOGRAPH 0xEEC1 0x931D #CJK UNIFIED IDEOGRAPH 0xEEC2 0x9302 #CJK UNIFIED IDEOGRAPH 0xEEC3 0x9370 #CJK UNIFIED IDEOGRAPH 0xEEC4 0x9357 #CJK UNIFIED IDEOGRAPH 0xEEC5 0x93A4 #CJK UNIFIED IDEOGRAPH 0xEEC6 0x93C6 #CJK UNIFIED IDEOGRAPH 0xEEC7 0x93DE #CJK UNIFIED IDEOGRAPH 0xEEC8 0x93F8 #CJK UNIFIED IDEOGRAPH 0xEEC9 0x9431 #CJK UNIFIED IDEOGRAPH 0xEECA 0x9445 #CJK UNIFIED IDEOGRAPH 0xEECB 0x9448 #CJK UNIFIED IDEOGRAPH 0xEECC 0x9592 #CJK UNIFIED IDEOGRAPH 0xEECD 0xF9DC #CJK COMPATIBILITY IDEOGRAPH 0xEECE 0xFA29 #CJK COMPATIBILITY IDEOGRAPH 0xEECF 0x969D #CJK UNIFIED IDEOGRAPH 0xEED0 0x96AF #CJK UNIFIED IDEOGRAPH 0xEED1 0x9733 #CJK UNIFIED IDEOGRAPH 0xEED2 0x973B #CJK UNIFIED IDEOGRAPH 0xEED3 0x9743 #CJK UNIFIED IDEOGRAPH 0xEED4 0x974D #CJK UNIFIED IDEOGRAPH 0xEED5 0x974F #CJK UNIFIED IDEOGRAPH 0xEED6 0x9751 #CJK UNIFIED IDEOGRAPH 0xEED7 0x9755 #CJK UNIFIED IDEOGRAPH 0xEED8 0x9857 #CJK UNIFIED IDEOGRAPH 0xEED9 0x9865 #CJK UNIFIED IDEOGRAPH 0xEEDA 0xFA2A #CJK COMPATIBILITY IDEOGRAPH 0xEEDB 0xFA2B #CJK COMPATIBILITY IDEOGRAPH 0xEEDC 0x9927 #CJK UNIFIED IDEOGRAPH 0xEEDD 0xFA2C #CJK COMPATIBILITY IDEOGRAPH 0xEEDE 0x999E #CJK UNIFIED IDEOGRAPH 0xEEDF 0x9A4E #CJK UNIFIED IDEOGRAPH 0xEEE0 0x9AD9 #CJK UNIFIED IDEOGRAPH 0xEEE1 0x9ADC #CJK UNIFIED IDEOGRAPH 0xEEE2 0x9B75 #CJK UNIFIED IDEOGRAPH 0xEEE3 0x9B72 #CJK UNIFIED IDEOGRAPH 0xEEE4 0x9B8F #CJK UNIFIED IDEOGRAPH 0xEEE5 0x9BB1 #CJK UNIFIED IDEOGRAPH 0xEEE6 0x9BBB #CJK UNIFIED IDEOGRAPH 0xEEE7 0x9C00 #CJK UNIFIED IDEOGRAPH 0xEEE8 0x9D70 #CJK UNIFIED IDEOGRAPH 0xEEE9 0x9D6B #CJK UNIFIED IDEOGRAPH 0xEEEA 0xFA2D #CJK COMPATIBILITY IDEOGRAPH 0xEEEB 0x9E19 #CJK UNIFIED IDEOGRAPH 0xEEEC 0x9ED1 #CJK UNIFIED IDEOGRAPH 0xEEEF 0x2170 #SMALL ROMAN NUMERAL ONE 0xEEF0 0x2171 #SMALL ROMAN NUMERAL TWO 0xEEF1 0x2172 #SMALL ROMAN NUMERAL THREE 0xEEF2 0x2173 #SMALL ROMAN NUMERAL FOUR 0xEEF3 0x2174 #SMALL ROMAN NUMERAL FIVE 0xEEF4 0x2175 #SMALL ROMAN NUMERAL SIX 0xEEF5 0x2176 #SMALL ROMAN NUMERAL SEVEN 0xEEF6 0x2177 #SMALL ROMAN NUMERAL EIGHT 0xEEF7 0x2178 #SMALL ROMAN NUMERAL NINE 0xEEF8 0x2179 #SMALL ROMAN NUMERAL TEN 0xEEF9 0xFFE2 #FULLWIDTH NOT SIGN 0xEEFA 0xFFE4 #FULLWIDTH BROKEN BAR 0xEEFB 0xFF07 #FULLWIDTH APOSTROPHE 0xEEFC 0xFF02 #FULLWIDTH QUOTATION MARK 0xFA40 0x2170 #SMALL ROMAN NUMERAL ONE 0xFA41 0x2171 #SMALL ROMAN NUMERAL TWO 0xFA42 0x2172 #SMALL ROMAN NUMERAL THREE 0xFA43 0x2173 #SMALL ROMAN NUMERAL FOUR 0xFA44 0x2174 #SMALL ROMAN NUMERAL FIVE 0xFA45 0x2175 #SMALL ROMAN NUMERAL SIX 0xFA46 0x2176 #SMALL ROMAN NUMERAL SEVEN 0xFA47 0x2177 #SMALL ROMAN NUMERAL EIGHT 0xFA48 0x2178 #SMALL ROMAN NUMERAL NINE 0xFA49 0x2179 #SMALL ROMAN NUMERAL TEN 0xFA4A 0x2160 #ROMAN NUMERAL ONE 0xFA4B 0x2161 #ROMAN NUMERAL TWO 0xFA4C 0x2162 #ROMAN NUMERAL THREE 0xFA4D 0x2163 #ROMAN NUMERAL FOUR 0xFA4E 0x2164 #ROMAN NUMERAL FIVE 0xFA4F 0x2165 #ROMAN NUMERAL SIX 0xFA50 0x2166 #ROMAN NUMERAL SEVEN 0xFA51 0x2167 #ROMAN NUMERAL EIGHT 0xFA52 0x2168 #ROMAN NUMERAL NINE 0xFA53 0x2169 #ROMAN NUMERAL TEN 0xFA54 0xFFE2 #FULLWIDTH NOT SIGN 0xFA55 0xFFE4 #FULLWIDTH BROKEN BAR 0xFA56 0xFF07 #FULLWIDTH APOSTROPHE 0xFA57 0xFF02 #FULLWIDTH QUOTATION MARK 0xFA58 0x3231 #PARENTHESIZED IDEOGRAPH STOCK 0xFA59 0x2116 #NUMERO SIGN 0xFA5A 0x2121 #TELEPHONE SIGN 0xFA5B 0x2235 #BECAUSE 0xFA5C 0x7E8A #CJK UNIFIED IDEOGRAPH 0xFA5D 0x891C #CJK UNIFIED IDEOGRAPH 0xFA5E 0x9348 #CJK UNIFIED IDEOGRAPH 0xFA5F 0x9288 #CJK UNIFIED IDEOGRAPH 0xFA60 0x84DC #CJK UNIFIED IDEOGRAPH 0xFA61 0x4FC9 #CJK UNIFIED IDEOGRAPH 0xFA62 0x70BB #CJK UNIFIED IDEOGRAPH 0xFA63 0x6631 #CJK UNIFIED IDEOGRAPH 0xFA64 0x68C8 #CJK UNIFIED IDEOGRAPH 0xFA65 0x92F9 #CJK UNIFIED IDEOGRAPH 0xFA66 0x66FB #CJK UNIFIED IDEOGRAPH 0xFA67 0x5F45 #CJK UNIFIED IDEOGRAPH 0xFA68 0x4E28 #CJK UNIFIED IDEOGRAPH 0xFA69 0x4EE1 #CJK UNIFIED IDEOGRAPH 0xFA6A 0x4EFC #CJK UNIFIED IDEOGRAPH 0xFA6B 0x4F00 #CJK UNIFIED IDEOGRAPH 0xFA6C 0x4F03 #CJK UNIFIED IDEOGRAPH 0xFA6D 0x4F39 #CJK UNIFIED IDEOGRAPH 0xFA6E 0x4F56 #CJK UNIFIED IDEOGRAPH 0xFA6F 0x4F92 #CJK UNIFIED IDEOGRAPH 0xFA70 0x4F8A #CJK UNIFIED IDEOGRAPH 0xFA71 0x4F9A #CJK UNIFIED IDEOGRAPH 0xFA72 0x4F94 #CJK UNIFIED IDEOGRAPH 0xFA73 0x4FCD #CJK UNIFIED IDEOGRAPH 0xFA74 0x5040 #CJK UNIFIED IDEOGRAPH 0xFA75 0x5022 #CJK UNIFIED IDEOGRAPH 0xFA76 0x4FFF #CJK UNIFIED IDEOGRAPH 0xFA77 0x501E #CJK UNIFIED IDEOGRAPH 0xFA78 0x5046 #CJK UNIFIED IDEOGRAPH 0xFA79 0x5070 #CJK UNIFIED IDEOGRAPH 0xFA7A 0x5042 #CJK UNIFIED IDEOGRAPH 0xFA7B 0x5094 #CJK UNIFIED IDEOGRAPH 0xFA7C 0x50F4 #CJK UNIFIED IDEOGRAPH 0xFA7D 0x50D8 #CJK UNIFIED IDEOGRAPH 0xFA7E 0x514A #CJK UNIFIED IDEOGRAPH 0xFA80 0x5164 #CJK UNIFIED IDEOGRAPH 0xFA81 0x519D #CJK UNIFIED IDEOGRAPH 0xFA82 0x51BE #CJK UNIFIED IDEOGRAPH 0xFA83 0x51EC #CJK UNIFIED IDEOGRAPH 0xFA84 0x5215 #CJK UNIFIED IDEOGRAPH 0xFA85 0x529C #CJK UNIFIED IDEOGRAPH 0xFA86 0x52A6 #CJK UNIFIED IDEOGRAPH 0xFA87 0x52C0 #CJK UNIFIED IDEOGRAPH 0xFA88 0x52DB #CJK UNIFIED IDEOGRAPH 0xFA89 0x5300 #CJK UNIFIED IDEOGRAPH 0xFA8A 0x5307 #CJK UNIFIED IDEOGRAPH 0xFA8B 0x5324 #CJK UNIFIED IDEOGRAPH 0xFA8C 0x5372 #CJK UNIFIED IDEOGRAPH 0xFA8D 0x5393 #CJK UNIFIED IDEOGRAPH 0xFA8E 0x53B2 #CJK UNIFIED IDEOGRAPH 0xFA8F 0x53DD #CJK UNIFIED IDEOGRAPH 0xFA90 0xFA0E #CJK COMPATIBILITY IDEOGRAPH 0xFA91 0x549C #CJK UNIFIED IDEOGRAPH 0xFA92 0x548A #CJK UNIFIED IDEOGRAPH 0xFA93 0x54A9 #CJK UNIFIED IDEOGRAPH 0xFA94 0x54FF #CJK UNIFIED IDEOGRAPH 0xFA95 0x5586 #CJK UNIFIED IDEOGRAPH 0xFA96 0x5759 #CJK UNIFIED IDEOGRAPH 0xFA97 0x5765 #CJK UNIFIED IDEOGRAPH 0xFA98 0x57AC #CJK UNIFIED IDEOGRAPH 0xFA99 0x57C8 #CJK UNIFIED IDEOGRAPH 0xFA9A 0x57C7 #CJK UNIFIED IDEOGRAPH 0xFA9B 0xFA0F #CJK COMPATIBILITY IDEOGRAPH 0xFA9C 0xFA10 #CJK COMPATIBILITY IDEOGRAPH 0xFA9D 0x589E #CJK UNIFIED IDEOGRAPH 0xFA9E 0x58B2 #CJK UNIFIED IDEOGRAPH 0xFA9F 0x590B #CJK UNIFIED IDEOGRAPH 0xFAA0 0x5953 #CJK UNIFIED IDEOGRAPH 0xFAA1 0x595B #CJK UNIFIED IDEOGRAPH 0xFAA2 0x595D #CJK UNIFIED IDEOGRAPH 0xFAA3 0x5963 #CJK UNIFIED IDEOGRAPH 0xFAA4 0x59A4 #CJK UNIFIED IDEOGRAPH 0xFAA5 0x59BA #CJK UNIFIED IDEOGRAPH 0xFAA6 0x5B56 #CJK UNIFIED IDEOGRAPH 0xFAA7 0x5BC0 #CJK UNIFIED IDEOGRAPH 0xFAA8 0x752F #CJK UNIFIED IDEOGRAPH 0xFAA9 0x5BD8 #CJK UNIFIED IDEOGRAPH 0xFAAA 0x5BEC #CJK UNIFIED IDEOGRAPH 0xFAAB 0x5C1E #CJK UNIFIED IDEOGRAPH 0xFAAC 0x5CA6 #CJK UNIFIED IDEOGRAPH 0xFAAD 0x5CBA #CJK UNIFIED IDEOGRAPH 0xFAAE 0x5CF5 #CJK UNIFIED IDEOGRAPH 0xFAAF 0x5D27 #CJK UNIFIED IDEOGRAPH 0xFAB0 0x5D53 #CJK UNIFIED IDEOGRAPH 0xFAB1 0xFA11 #CJK COMPATIBILITY IDEOGRAPH 0xFAB2 0x5D42 #CJK UNIFIED IDEOGRAPH 0xFAB3 0x5D6D #CJK UNIFIED IDEOGRAPH 0xFAB4 0x5DB8 #CJK UNIFIED IDEOGRAPH 0xFAB5 0x5DB9 #CJK UNIFIED IDEOGRAPH 0xFAB6 0x5DD0 #CJK UNIFIED IDEOGRAPH 0xFAB7 0x5F21 #CJK UNIFIED IDEOGRAPH 0xFAB8 0x5F34 #CJK UNIFIED IDEOGRAPH 0xFAB9 0x5F67 #CJK UNIFIED IDEOGRAPH 0xFABA 0x5FB7 #CJK UNIFIED IDEOGRAPH 0xFABB 0x5FDE #CJK UNIFIED IDEOGRAPH 0xFABC 0x605D #CJK UNIFIED IDEOGRAPH 0xFABD 0x6085 #CJK UNIFIED IDEOGRAPH 0xFABE 0x608A #CJK UNIFIED IDEOGRAPH 0xFABF 0x60DE #CJK UNIFIED IDEOGRAPH 0xFAC0 0x60D5 #CJK UNIFIED IDEOGRAPH 0xFAC1 0x6120 #CJK UNIFIED IDEOGRAPH 0xFAC2 0x60F2 #CJK UNIFIED IDEOGRAPH 0xFAC3 0x6111 #CJK UNIFIED IDEOGRAPH 0xFAC4 0x6137 #CJK UNIFIED IDEOGRAPH 0xFAC5 0x6130 #CJK UNIFIED IDEOGRAPH 0xFAC6 0x6198 #CJK UNIFIED IDEOGRAPH 0xFAC7 0x6213 #CJK UNIFIED IDEOGRAPH 0xFAC8 0x62A6 #CJK UNIFIED IDEOGRAPH 0xFAC9 0x63F5 #CJK UNIFIED IDEOGRAPH 0xFACA 0x6460 #CJK UNIFIED IDEOGRAPH 0xFACB 0x649D #CJK UNIFIED IDEOGRAPH 0xFACC 0x64CE #CJK UNIFIED IDEOGRAPH 0xFACD 0x654E #CJK UNIFIED IDEOGRAPH 0xFACE 0x6600 #CJK UNIFIED IDEOGRAPH 0xFACF 0x6615 #CJK UNIFIED IDEOGRAPH 0xFAD0 0x663B #CJK UNIFIED IDEOGRAPH 0xFAD1 0x6609 #CJK UNIFIED IDEOGRAPH 0xFAD2 0x662E #CJK UNIFIED IDEOGRAPH 0xFAD3 0x661E #CJK UNIFIED IDEOGRAPH 0xFAD4 0x6624 #CJK UNIFIED IDEOGRAPH 0xFAD5 0x6665 #CJK UNIFIED IDEOGRAPH 0xFAD6 0x6657 #CJK UNIFIED IDEOGRAPH 0xFAD7 0x6659 #CJK UNIFIED IDEOGRAPH 0xFAD8 0xFA12 #CJK COMPATIBILITY IDEOGRAPH 0xFAD9 0x6673 #CJK UNIFIED IDEOGRAPH 0xFADA 0x6699 #CJK UNIFIED IDEOGRAPH 0xFADB 0x66A0 #CJK UNIFIED IDEOGRAPH 0xFADC 0x66B2 #CJK UNIFIED IDEOGRAPH 0xFADD 0x66BF #CJK UNIFIED IDEOGRAPH 0xFADE 0x66FA #CJK UNIFIED IDEOGRAPH 0xFADF 0x670E #CJK UNIFIED IDEOGRAPH 0xFAE0 0xF929 #CJK COMPATIBILITY IDEOGRAPH 0xFAE1 0x6766 #CJK UNIFIED IDEOGRAPH 0xFAE2 0x67BB #CJK UNIFIED IDEOGRAPH 0xFAE3 0x6852 #CJK UNIFIED IDEOGRAPH 0xFAE4 0x67C0 #CJK UNIFIED IDEOGRAPH 0xFAE5 0x6801 #CJK UNIFIED IDEOGRAPH 0xFAE6 0x6844 #CJK UNIFIED IDEOGRAPH 0xFAE7 0x68CF #CJK UNIFIED IDEOGRAPH 0xFAE8 0xFA13 #CJK COMPATIBILITY IDEOGRAPH 0xFAE9 0x6968 #CJK UNIFIED IDEOGRAPH 0xFAEA 0xFA14 #CJK COMPATIBILITY IDEOGRAPH 0xFAEB 0x6998 #CJK UNIFIED IDEOGRAPH 0xFAEC 0x69E2 #CJK UNIFIED IDEOGRAPH 0xFAED 0x6A30 #CJK UNIFIED IDEOGRAPH 0xFAEE 0x6A6B #CJK UNIFIED IDEOGRAPH 0xFAEF 0x6A46 #CJK UNIFIED IDEOGRAPH 0xFAF0 0x6A73 #CJK UNIFIED IDEOGRAPH 0xFAF1 0x6A7E #CJK UNIFIED IDEOGRAPH 0xFAF2 0x6AE2 #CJK UNIFIED IDEOGRAPH 0xFAF3 0x6AE4 #CJK UNIFIED IDEOGRAPH 0xFAF4 0x6BD6 #CJK UNIFIED IDEOGRAPH 0xFAF5 0x6C3F #CJK UNIFIED IDEOGRAPH 0xFAF6 0x6C5C #CJK UNIFIED IDEOGRAPH 0xFAF7 0x6C86 #CJK UNIFIED IDEOGRAPH 0xFAF8 0x6C6F #CJK UNIFIED IDEOGRAPH 0xFAF9 0x6CDA #CJK UNIFIED IDEOGRAPH 0xFAFA 0x6D04 #CJK UNIFIED IDEOGRAPH 0xFAFB 0x6D87 #CJK UNIFIED IDEOGRAPH 0xFAFC 0x6D6F #CJK UNIFIED IDEOGRAPH 0xFB40 0x6D96 #CJK UNIFIED IDEOGRAPH 0xFB41 0x6DAC #CJK UNIFIED IDEOGRAPH 0xFB42 0x6DCF #CJK UNIFIED IDEOGRAPH 0xFB43 0x6DF8 #CJK UNIFIED IDEOGRAPH 0xFB44 0x6DF2 #CJK UNIFIED IDEOGRAPH 0xFB45 0x6DFC #CJK UNIFIED IDEOGRAPH 0xFB46 0x6E39 #CJK UNIFIED IDEOGRAPH 0xFB47 0x6E5C #CJK UNIFIED IDEOGRAPH 0xFB48 0x6E27 #CJK UNIFIED IDEOGRAPH 0xFB49 0x6E3C #CJK UNIFIED IDEOGRAPH 0xFB4A 0x6EBF #CJK UNIFIED IDEOGRAPH 0xFB4B 0x6F88 #CJK UNIFIED IDEOGRAPH 0xFB4C 0x6FB5 #CJK UNIFIED IDEOGRAPH 0xFB4D 0x6FF5 #CJK UNIFIED IDEOGRAPH 0xFB4E 0x7005 #CJK UNIFIED IDEOGRAPH 0xFB4F 0x7007 #CJK UNIFIED IDEOGRAPH 0xFB50 0x7028 #CJK UNIFIED IDEOGRAPH 0xFB51 0x7085 #CJK UNIFIED IDEOGRAPH 0xFB52 0x70AB #CJK UNIFIED IDEOGRAPH 0xFB53 0x710F #CJK UNIFIED IDEOGRAPH 0xFB54 0x7104 #CJK UNIFIED IDEOGRAPH 0xFB55 0x715C #CJK UNIFIED IDEOGRAPH 0xFB56 0x7146 #CJK UNIFIED IDEOGRAPH 0xFB57 0x7147 #CJK UNIFIED IDEOGRAPH 0xFB58 0xFA15 #CJK COMPATIBILITY IDEOGRAPH 0xFB59 0x71C1 #CJK UNIFIED IDEOGRAPH 0xFB5A 0x71FE #CJK UNIFIED IDEOGRAPH 0xFB5B 0x72B1 #CJK UNIFIED IDEOGRAPH 0xFB5C 0x72BE #CJK UNIFIED IDEOGRAPH 0xFB5D 0x7324 #CJK UNIFIED IDEOGRAPH 0xFB5E 0xFA16 #CJK COMPATIBILITY IDEOGRAPH 0xFB5F 0x7377 #CJK UNIFIED IDEOGRAPH 0xFB60 0x73BD #CJK UNIFIED IDEOGRAPH 0xFB61 0x73C9 #CJK UNIFIED IDEOGRAPH 0xFB62 0x73D6 #CJK UNIFIED IDEOGRAPH 0xFB63 0x73E3 #CJK UNIFIED IDEOGRAPH 0xFB64 0x73D2 #CJK UNIFIED IDEOGRAPH 0xFB65 0x7407 #CJK UNIFIED IDEOGRAPH 0xFB66 0x73F5 #CJK UNIFIED IDEOGRAPH 0xFB67 0x7426 #CJK UNIFIED IDEOGRAPH 0xFB68 0x742A #CJK UNIFIED IDEOGRAPH 0xFB69 0x7429 #CJK UNIFIED IDEOGRAPH 0xFB6A 0x742E #CJK UNIFIED IDEOGRAPH 0xFB6B 0x7462 #CJK UNIFIED IDEOGRAPH 0xFB6C 0x7489 #CJK UNIFIED IDEOGRAPH 0xFB6D 0x749F #CJK UNIFIED IDEOGRAPH 0xFB6E 0x7501 #CJK UNIFIED IDEOGRAPH 0xFB6F 0x756F #CJK UNIFIED IDEOGRAPH 0xFB70 0x7682 #CJK UNIFIED IDEOGRAPH 0xFB71 0x769C #CJK UNIFIED IDEOGRAPH 0xFB72 0x769E #CJK UNIFIED IDEOGRAPH 0xFB73 0x769B #CJK UNIFIED IDEOGRAPH 0xFB74 0x76A6 #CJK UNIFIED IDEOGRAPH 0xFB75 0xFA17 #CJK COMPATIBILITY IDEOGRAPH 0xFB76 0x7746 #CJK UNIFIED IDEOGRAPH 0xFB77 0x52AF #CJK UNIFIED IDEOGRAPH 0xFB78 0x7821 #CJK UNIFIED IDEOGRAPH 0xFB79 0x784E #CJK UNIFIED IDEOGRAPH 0xFB7A 0x7864 #CJK UNIFIED IDEOGRAPH 0xFB7B 0x787A #CJK UNIFIED IDEOGRAPH 0xFB7C 0x7930 #CJK UNIFIED IDEOGRAPH 0xFB7D 0xFA18 #CJK COMPATIBILITY IDEOGRAPH 0xFB7E 0xFA19 #CJK COMPATIBILITY IDEOGRAPH 0xFB80 0xFA1A #CJK COMPATIBILITY IDEOGRAPH 0xFB81 0x7994 #CJK UNIFIED IDEOGRAPH 0xFB82 0xFA1B #CJK COMPATIBILITY IDEOGRAPH 0xFB83 0x799B #CJK UNIFIED IDEOGRAPH 0xFB84 0x7AD1 #CJK UNIFIED IDEOGRAPH 0xFB85 0x7AE7 #CJK UNIFIED IDEOGRAPH 0xFB86 0xFA1C #CJK COMPATIBILITY IDEOGRAPH 0xFB87 0x7AEB #CJK UNIFIED IDEOGRAPH 0xFB88 0x7B9E #CJK UNIFIED IDEOGRAPH 0xFB89 0xFA1D #CJK COMPATIBILITY IDEOGRAPH 0xFB8A 0x7D48 #CJK UNIFIED IDEOGRAPH 0xFB8B 0x7D5C #CJK UNIFIED IDEOGRAPH 0xFB8C 0x7DB7 #CJK UNIFIED IDEOGRAPH 0xFB8D 0x7DA0 #CJK UNIFIED IDEOGRAPH 0xFB8E 0x7DD6 #CJK UNIFIED IDEOGRAPH 0xFB8F 0x7E52 #CJK UNIFIED IDEOGRAPH 0xFB90 0x7F47 #CJK UNIFIED IDEOGRAPH 0xFB91 0x7FA1 #CJK UNIFIED IDEOGRAPH 0xFB92 0xFA1E #CJK COMPATIBILITY IDEOGRAPH 0xFB93 0x8301 #CJK UNIFIED IDEOGRAPH 0xFB94 0x8362 #CJK UNIFIED IDEOGRAPH 0xFB95 0x837F #CJK UNIFIED IDEOGRAPH 0xFB96 0x83C7 #CJK UNIFIED IDEOGRAPH 0xFB97 0x83F6 #CJK UNIFIED IDEOGRAPH 0xFB98 0x8448 #CJK UNIFIED IDEOGRAPH 0xFB99 0x84B4 #CJK UNIFIED IDEOGRAPH 0xFB9A 0x8553 #CJK UNIFIED IDEOGRAPH 0xFB9B 0x8559 #CJK UNIFIED IDEOGRAPH 0xFB9C 0x856B #CJK UNIFIED IDEOGRAPH 0xFB9D 0xFA1F #CJK COMPATIBILITY IDEOGRAPH 0xFB9E 0x85B0 #CJK UNIFIED IDEOGRAPH 0xFB9F 0xFA20 #CJK COMPATIBILITY IDEOGRAPH 0xFBA0 0xFA21 #CJK COMPATIBILITY IDEOGRAPH 0xFBA1 0x8807 #CJK UNIFIED IDEOGRAPH 0xFBA2 0x88F5 #CJK UNIFIED IDEOGRAPH 0xFBA3 0x8A12 #CJK UNIFIED IDEOGRAPH 0xFBA4 0x8A37 #CJK UNIFIED IDEOGRAPH 0xFBA5 0x8A79 #CJK UNIFIED IDEOGRAPH 0xFBA6 0x8AA7 #CJK UNIFIED IDEOGRAPH 0xFBA7 0x8ABE #CJK UNIFIED IDEOGRAPH 0xFBA8 0x8ADF #CJK UNIFIED IDEOGRAPH 0xFBA9 0xFA22 #CJK COMPATIBILITY IDEOGRAPH 0xFBAA 0x8AF6 #CJK UNIFIED IDEOGRAPH 0xFBAB 0x8B53 #CJK UNIFIED IDEOGRAPH 0xFBAC 0x8B7F #CJK UNIFIED IDEOGRAPH 0xFBAD 0x8CF0 #CJK UNIFIED IDEOGRAPH 0xFBAE 0x8CF4 #CJK UNIFIED IDEOGRAPH 0xFBAF 0x8D12 #CJK UNIFIED IDEOGRAPH 0xFBB0 0x8D76 #CJK UNIFIED IDEOGRAPH 0xFBB1 0xFA23 #CJK COMPATIBILITY IDEOGRAPH 0xFBB2 0x8ECF #CJK UNIFIED IDEOGRAPH 0xFBB3 0xFA24 #CJK COMPATIBILITY IDEOGRAPH 0xFBB4 0xFA25 #CJK COMPATIBILITY IDEOGRAPH 0xFBB5 0x9067 #CJK UNIFIED IDEOGRAPH 0xFBB6 0x90DE #CJK UNIFIED IDEOGRAPH 0xFBB7 0xFA26 #CJK COMPATIBILITY IDEOGRAPH 0xFBB8 0x9115 #CJK UNIFIED IDEOGRAPH 0xFBB9 0x9127 #CJK UNIFIED IDEOGRAPH 0xFBBA 0x91DA #CJK UNIFIED IDEOGRAPH 0xFBBB 0x91D7 #CJK UNIFIED IDEOGRAPH 0xFBBC 0x91DE #CJK UNIFIED IDEOGRAPH 0xFBBD 0x91ED #CJK UNIFIED IDEOGRAPH 0xFBBE 0x91EE #CJK UNIFIED IDEOGRAPH 0xFBBF 0x91E4 #CJK UNIFIED IDEOGRAPH 0xFBC0 0x91E5 #CJK UNIFIED IDEOGRAPH 0xFBC1 0x9206 #CJK UNIFIED IDEOGRAPH 0xFBC2 0x9210 #CJK UNIFIED IDEOGRAPH 0xFBC3 0x920A #CJK UNIFIED IDEOGRAPH 0xFBC4 0x923A #CJK UNIFIED IDEOGRAPH 0xFBC5 0x9240 #CJK UNIFIED IDEOGRAPH 0xFBC6 0x923C #CJK UNIFIED IDEOGRAPH 0xFBC7 0x924E #CJK UNIFIED IDEOGRAPH 0xFBC8 0x9259 #CJK UNIFIED IDEOGRAPH 0xFBC9 0x9251 #CJK UNIFIED IDEOGRAPH 0xFBCA 0x9239 #CJK UNIFIED IDEOGRAPH 0xFBCB 0x9267 #CJK UNIFIED IDEOGRAPH 0xFBCC 0x92A7 #CJK UNIFIED IDEOGRAPH 0xFBCD 0x9277 #CJK UNIFIED IDEOGRAPH 0xFBCE 0x9278 #CJK UNIFIED IDEOGRAPH 0xFBCF 0x92E7 #CJK UNIFIED IDEOGRAPH 0xFBD0 0x92D7 #CJK UNIFIED IDEOGRAPH 0xFBD1 0x92D9 #CJK UNIFIED IDEOGRAPH 0xFBD2 0x92D0 #CJK UNIFIED IDEOGRAPH 0xFBD3 0xFA27 #CJK COMPATIBILITY IDEOGRAPH 0xFBD4 0x92D5 #CJK UNIFIED IDEOGRAPH 0xFBD5 0x92E0 #CJK UNIFIED IDEOGRAPH 0xFBD6 0x92D3 #CJK UNIFIED IDEOGRAPH 0xFBD7 0x9325 #CJK UNIFIED IDEOGRAPH 0xFBD8 0x9321 #CJK UNIFIED IDEOGRAPH 0xFBD9 0x92FB #CJK UNIFIED IDEOGRAPH 0xFBDA 0xFA28 #CJK COMPATIBILITY IDEOGRAPH 0xFBDB 0x931E #CJK UNIFIED IDEOGRAPH 0xFBDC 0x92FF #CJK UNIFIED IDEOGRAPH 0xFBDD 0x931D #CJK UNIFIED IDEOGRAPH 0xFBDE 0x9302 #CJK UNIFIED IDEOGRAPH 0xFBDF 0x9370 #CJK UNIFIED IDEOGRAPH 0xFBE0 0x9357 #CJK UNIFIED IDEOGRAPH 0xFBE1 0x93A4 #CJK UNIFIED IDEOGRAPH 0xFBE2 0x93C6 #CJK UNIFIED IDEOGRAPH 0xFBE3 0x93DE #CJK UNIFIED IDEOGRAPH 0xFBE4 0x93F8 #CJK UNIFIED IDEOGRAPH 0xFBE5 0x9431 #CJK UNIFIED IDEOGRAPH 0xFBE6 0x9445 #CJK UNIFIED IDEOGRAPH 0xFBE7 0x9448 #CJK UNIFIED IDEOGRAPH 0xFBE8 0x9592 #CJK UNIFIED IDEOGRAPH 0xFBE9 0xF9DC #CJK COMPATIBILITY IDEOGRAPH 0xFBEA 0xFA29 #CJK COMPATIBILITY IDEOGRAPH 0xFBEB 0x969D #CJK UNIFIED IDEOGRAPH 0xFBEC 0x96AF #CJK UNIFIED IDEOGRAPH 0xFBED 0x9733 #CJK UNIFIED IDEOGRAPH 0xFBEE 0x973B #CJK UNIFIED IDEOGRAPH 0xFBEF 0x9743 #CJK UNIFIED IDEOGRAPH 0xFBF0 0x974D #CJK UNIFIED IDEOGRAPH 0xFBF1 0x974F #CJK UNIFIED IDEOGRAPH 0xFBF2 0x9751 #CJK UNIFIED IDEOGRAPH 0xFBF3 0x9755 #CJK UNIFIED IDEOGRAPH 0xFBF4 0x9857 #CJK UNIFIED IDEOGRAPH 0xFBF5 0x9865 #CJK UNIFIED IDEOGRAPH 0xFBF6 0xFA2A #CJK COMPATIBILITY IDEOGRAPH 0xFBF7 0xFA2B #CJK COMPATIBILITY IDEOGRAPH 0xFBF8 0x9927 #CJK UNIFIED IDEOGRAPH 0xFBF9 0xFA2C #CJK COMPATIBILITY IDEOGRAPH 0xFBFA 0x999E #CJK UNIFIED IDEOGRAPH 0xFBFB 0x9A4E #CJK UNIFIED IDEOGRAPH 0xFBFC 0x9AD9 #CJK UNIFIED IDEOGRAPH 0xFC40 0x9ADC #CJK UNIFIED IDEOGRAPH 0xFC41 0x9B75 #CJK UNIFIED IDEOGRAPH 0xFC42 0x9B72 #CJK UNIFIED IDEOGRAPH 0xFC43 0x9B8F #CJK UNIFIED IDEOGRAPH 0xFC44 0x9BB1 #CJK UNIFIED IDEOGRAPH 0xFC45 0x9BBB #CJK UNIFIED IDEOGRAPH 0xFC46 0x9C00 #CJK UNIFIED IDEOGRAPH 0xFC47 0x9D70 #CJK UNIFIED IDEOGRAPH 0xFC48 0x9D6B #CJK UNIFIED IDEOGRAPH 0xFC49 0xFA2D #CJK COMPATIBILITY IDEOGRAPH 0xFC4A 0x9E19 #CJK UNIFIED IDEOGRAPH 0xFC4B 0x9ED1 #CJK UNIFIED IDEOGRAPH |
Added freshlib/data/_encodings/_sources/CP936.TXT.
more than 10,000 changes
Added freshlib/data/_encodings/_sources/CP949.TXT.
more than 10,000 changes
Added freshlib/data/_encodings/_sources/KOI8-R.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | # KOI8-R.TXT # Date: 2016-01-04 23:05:00 GMT [KW] # © 2016 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Name: KOI8-R (RFC1489) to Unicode # Unicode version: 3.0 # Table version: 2.0 # Table format: Format A # Date: 18 August 1999 (header updated: 2016-January-04) # Authors: Helmut Richter <richter@lrz.de> # # General notes: # # This table contains the data the Unicode Consortium has on how # KOI8-R characters map into Unicode. The underlying document is the # mapping described in RFC 1489. No statements are made as to whether # this mapping is the same as the mapping defined as "Code Page 878" # with some vendors. # # Format: Three tab-separated columns # Column #1 is the KOI8-R code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in KOI8-R order. # # Version history # 1.0 version: created. # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # http://www.unicode.org/Public/MAPPINGS/ # # Any comments or problems, contact us at: # http://www.unicode.org/reporting.html # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL 0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL 0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT 0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT 0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT 0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT 0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT 0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL 0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0x8B 0x2580 # UPPER HALF BLOCK 0x8C 0x2584 # LOWER HALF BLOCK 0x8D 0x2588 # FULL BLOCK 0x8E 0x258C # LEFT HALF BLOCK 0x8F 0x2590 # RIGHT HALF BLOCK 0x90 0x2591 # LIGHT SHADE 0x91 0x2592 # MEDIUM SHADE 0x92 0x2593 # DARK SHADE 0x93 0x2320 # TOP HALF INTEGRAL 0x94 0x25A0 # BLACK SQUARE 0x95 0x2219 # BULLET OPERATOR 0x96 0x221A # SQUARE ROOT 0x97 0x2248 # ALMOST EQUAL TO 0x98 0x2264 # LESS-THAN OR EQUAL TO 0x99 0x2265 # GREATER-THAN OR EQUAL TO 0x9A 0x00A0 # NO-BREAK SPACE 0x9B 0x2321 # BOTTOM HALF INTEGRAL 0x9C 0x00B0 # DEGREE SIGN 0x9D 0x00B2 # SUPERSCRIPT TWO 0x9E 0x00B7 # MIDDLE DOT 0x9F 0x00F7 # DIVISION SIGN 0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL 0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL 0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xA3 0x0451 # CYRILLIC SMALL LETTER IO 0xA4 0x2553 # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xA6 0x2555 # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xA7 0x2556 # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT 0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT 0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xAD 0x255C # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT 0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO 0xB4 0x2562 # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xB6 0x2564 # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xB7 0x2565 # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xBD 0x256B # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xBF 0x00A9 # COPYRIGHT SIGN 0xC0 0x044E # CYRILLIC SMALL LETTER YU 0xC1 0x0430 # CYRILLIC SMALL LETTER A 0xC2 0x0431 # CYRILLIC SMALL LETTER BE 0xC3 0x0446 # CYRILLIC SMALL LETTER TSE 0xC4 0x0434 # CYRILLIC SMALL LETTER DE 0xC5 0x0435 # CYRILLIC SMALL LETTER IE 0xC6 0x0444 # CYRILLIC SMALL LETTER EF 0xC7 0x0433 # CYRILLIC SMALL LETTER GHE 0xC8 0x0445 # CYRILLIC SMALL LETTER HA 0xC9 0x0438 # CYRILLIC SMALL LETTER I 0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I 0xCB 0x043A # CYRILLIC SMALL LETTER KA 0xCC 0x043B # CYRILLIC SMALL LETTER EL 0xCD 0x043C # CYRILLIC SMALL LETTER EM 0xCE 0x043D # CYRILLIC SMALL LETTER EN 0xCF 0x043E # CYRILLIC SMALL LETTER O 0xD0 0x043F # CYRILLIC SMALL LETTER PE 0xD1 0x044F # CYRILLIC SMALL LETTER YA 0xD2 0x0440 # CYRILLIC SMALL LETTER ER 0xD3 0x0441 # CYRILLIC SMALL LETTER ES 0xD4 0x0442 # CYRILLIC SMALL LETTER TE 0xD5 0x0443 # CYRILLIC SMALL LETTER U 0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE 0xD7 0x0432 # CYRILLIC SMALL LETTER VE 0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN 0xD9 0x044B # CYRILLIC SMALL LETTER YERU 0xDA 0x0437 # CYRILLIC SMALL LETTER ZE 0xDB 0x0448 # CYRILLIC SMALL LETTER SHA 0xDC 0x044D # CYRILLIC SMALL LETTER E 0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA 0xDE 0x0447 # CYRILLIC SMALL LETTER CHE 0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN 0xE0 0x042E # CYRILLIC CAPITAL LETTER YU 0xE1 0x0410 # CYRILLIC CAPITAL LETTER A 0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE 0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE 0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE 0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE 0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF 0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE 0xE8 0x0425 # CYRILLIC CAPITAL LETTER HA 0xE9 0x0418 # CYRILLIC CAPITAL LETTER I 0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I 0xEB 0x041A # CYRILLIC CAPITAL LETTER KA 0xEC 0x041B # CYRILLIC CAPITAL LETTER EL 0xED 0x041C # CYRILLIC CAPITAL LETTER EM 0xEE 0x041D # CYRILLIC CAPITAL LETTER EN 0xEF 0x041E # CYRILLIC CAPITAL LETTER O 0xF0 0x041F # CYRILLIC CAPITAL LETTER PE 0xF1 0x042F # CYRILLIC CAPITAL LETTER YA 0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER 0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES 0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE 0xF5 0x0423 # CYRILLIC CAPITAL LETTER U 0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE 0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE 0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN 0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU 0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE 0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA 0xFC 0x042D # CYRILLIC CAPITAL LETTER E 0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA 0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE 0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN |
Added freshlib/data/_encodings/_sources/KOI8-U.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 | # KOI8-U.TXT # Date: 2016-01-04 23:09:00 GMT [KW] # © 2016 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # # Name: KOI8-U (RFC2319) to Unicode # Unicode version: 5.1 # Table version: 2.0 # Table format: Format A # Date: 13 October 2008 (header updated: 2016-January-04) # Authors: Philippe Verdy <verdy_p AT wanadoo.fr>, # Helmut Richter <richter@lrz.de> # # General notes: # # This table contains the data the Unicode Consortium has on how # KOI8-U characters map into Unicode. The underlying document is the # mapping described in RFC 2319. No statements are made as to whether # this mapping is the same as the mapping defined as "Code Page 878" # with some vendors. # # The KOI8-U (RFC2319) encoding is a variant based on KOI8-R (RFC1489), # where the support for four additional Cyrillic letters was added (both small # and capital letters), replacing 8 box-drawing characters. It is still widely # used to encode texts in Ukrainian, Byelorussian and Bulgarian. # # Format: Three tab-separated columns # Column #1 is the KOI8-U code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in KOI8-U order. # # Version history # 1.0 version: created. # 2.0 version: updates to copyright notice and terms of use; no # changes to character mappings # # Updated versions of this file may be found in: # <http://www.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact the Unicode Consortium at: # <http://www.unicode.org/reporting.html> # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL 0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL 0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT 0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT 0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT 0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT 0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT 0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL 0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0x8B 0x2580 # UPPER HALF BLOCK 0x8C 0x2584 # LOWER HALF BLOCK 0x8D 0x2588 # FULL BLOCK 0x8E 0x258C # LEFT HALF BLOCK 0x8F 0x2590 # RIGHT HALF BLOCK 0x90 0x2591 # LIGHT SHADE 0x91 0x2592 # MEDIUM SHADE 0x92 0x2593 # DARK SHADE 0x93 0x2320 # TOP HALF INTEGRAL 0x94 0x25A0 # BLACK SQUARE 0x95 0x2219 # BULLET OPERATOR 0x96 0x221A # SQUARE ROOT 0x97 0x2248 # ALMOST EQUAL TO 0x98 0x2264 # LESS-THAN OR EQUAL TO 0x99 0x2265 # GREATER-THAN OR EQUAL TO 0x9A 0x00A0 # NO-BREAK SPACE 0x9B 0x2321 # BOTTOM HALF INTEGRAL 0x9C 0x00B0 # DEGREE SIGN 0x9D 0x00B2 # SUPERSCRIPT TWO 0x9E 0x00B7 # MIDDLE DOT 0x9F 0x00F7 # DIVISION SIGN 0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL 0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL 0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xA3 0x0451 # CYRILLIC SMALL LETTER IO 0xA4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE 0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xA6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 0xA7 0x0457 # CYRILLIC SMALL LETTER YI (UKRAINIAN) 0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT 0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT 0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xAD 0x0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN 0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT 0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO 0xB4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE 0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xB6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0xB7 0x0407 # CYRILLIC CAPITAL LETTER YI (UKRAINIAN) 0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xBD 0x0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN 0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xBF 0x00A9 # COPYRIGHT SIGN 0xC0 0x044E # CYRILLIC SMALL LETTER YU 0xC1 0x0430 # CYRILLIC SMALL LETTER A 0xC2 0x0431 # CYRILLIC SMALL LETTER BE 0xC3 0x0446 # CYRILLIC SMALL LETTER TSE 0xC4 0x0434 # CYRILLIC SMALL LETTER DE 0xC5 0x0435 # CYRILLIC SMALL LETTER IE 0xC6 0x0444 # CYRILLIC SMALL LETTER EF 0xC7 0x0433 # CYRILLIC SMALL LETTER GHE 0xC8 0x0445 # CYRILLIC SMALL LETTER HA 0xC9 0x0438 # CYRILLIC SMALL LETTER I 0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I 0xCB 0x043A # CYRILLIC SMALL LETTER KA 0xCC 0x043B # CYRILLIC SMALL LETTER EL 0xCD 0x043C # CYRILLIC SMALL LETTER EM 0xCE 0x043D # CYRILLIC SMALL LETTER EN 0xCF 0x043E # CYRILLIC SMALL LETTER O 0xD0 0x043F # CYRILLIC SMALL LETTER PE 0xD1 0x044F # CYRILLIC SMALL LETTER YA 0xD2 0x0440 # CYRILLIC SMALL LETTER ER 0xD3 0x0441 # CYRILLIC SMALL LETTER ES 0xD4 0x0442 # CYRILLIC SMALL LETTER TE 0xD5 0x0443 # CYRILLIC SMALL LETTER U 0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE 0xD7 0x0432 # CYRILLIC SMALL LETTER VE 0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN 0xD9 0x044B # CYRILLIC SMALL LETTER YERU 0xDA 0x0437 # CYRILLIC SMALL LETTER ZE 0xDB 0x0448 # CYRILLIC SMALL LETTER SHA 0xDC 0x044D # CYRILLIC SMALL LETTER E 0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA 0xDE 0x0447 # CYRILLIC SMALL LETTER CHE 0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN 0xE0 0x042E # CYRILLIC CAPITAL LETTER YU 0xE1 0x0410 # CYRILLIC CAPITAL LETTER A 0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE 0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE 0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE 0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE 0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF 0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE 0xE8 0x0425 # CYRILLIC CAPITAL LETTER HA 0xE9 0x0418 # CYRILLIC CAPITAL LETTER I 0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I 0xEB 0x041A # CYRILLIC CAPITAL LETTER KA 0xEC 0x041B # CYRILLIC CAPITAL LETTER EL 0xED 0x041C # CYRILLIC CAPITAL LETTER EM 0xEE 0x041D # CYRILLIC CAPITAL LETTER EN 0xEF 0x041E # CYRILLIC CAPITAL LETTER O 0xF0 0x041F # CYRILLIC CAPITAL LETTER PE 0xF1 0x042F # CYRILLIC CAPITAL LETTER YA 0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER 0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES 0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE 0xF5 0x0423 # CYRILLIC CAPITAL LETTER U 0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE 0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE 0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN 0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU 0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE 0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA 0xFC 0x042D # CYRILLIC CAPITAL LETTER E 0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA 0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE 0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN |
Added freshlib/data/_encodings/_sources/KPS9566.TXT.
more than 10,000 changes
Added freshlib/data/_encodings/_sources/NEXTSTEP.TXT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | # # Name: NextStep Encoding to Unicode # Unicode version: 1.1 # Table version: 0.1 # Table format: Format A # Date: 1999 September 23 # Authors: Rick McGowan # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # NextStep Encoding characters map into Unicode. Since the first # 128 characters (0x0 - 0x7f) are identical to ASCII and Unicode, # this table only maps the NextStep range from 0x80 - 0xFF. # # This file is provided for historical reference only and pertains # to NextStep and OpenStep products shipped prior to the aquisition # of NeXT by Apple Computer, Inc. See http://www.apple.com for # further information. # # Format: Three tab-separated columns # Column #1 is the NextStep code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 NextStep name, Unicode name (follows a comment sign, '#') # # The entries are in NextStep order # # Any comments or problems, contact info@unicode.org # 0x80 0x00a0 # NO-BREAK SPACE 0x81 0x00c0 # LATIN CAPITAL LETTER A WITH GRAVE 0x82 0x00c1 # LATIN CAPITAL LETTER A WITH ACUTE 0x83 0x00c2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0x84 0x00c3 # LATIN CAPITAL LETTER A WITH TILDE 0x85 0x00c4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0x86 0x00c5 # LATIN CAPITAL LETTER A WITH RING 0x87 0x00c7 # LATIN CAPITAL LETTER C WITH CEDILLA 0x88 0x00c8 # LATIN CAPITAL LETTER E WITH GRAVE 0x89 0x00c9 # LATIN CAPITAL LETTER E WITH ACUTE 0x8a 0x00ca # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0x8b 0x00cb # LATIN CAPITAL LETTER E WITH DIAERESIS 0x8c 0x00cc # LATIN CAPITAL LETTER I WITH GRAVE 0x8d 0x00cd # LATIN CAPITAL LETTER I WITH ACUTE 0x8e 0x00ce # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0x8f 0x00cf # LATIN CAPITAL LETTER I WITH DIAERESIS 0x90 0x00d0 # LATIN CAPITAL LETTER ETH 0x91 0x00d1 # LATIN CAPITAL LETTER N WITH TILDE 0x92 0x00d2 # LATIN CAPITAL LETTER O WITH GRAVE 0x93 0x00d3 # LATIN CAPITAL LETTER O WITH ACUTE 0x94 0x00d4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0x95 0x00d5 # LATIN CAPITAL LETTER O WITH TILDE 0x96 0x00d6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0x97 0x00d9 # LATIN CAPITAL LETTER U WITH GRAVE 0x98 0x00da # LATIN CAPITAL LETTER U WITH ACUTE 0x99 0x00db # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0x9a 0x00dc # LATIN CAPITAL LETTER U WITH DIAERESIS 0x9b 0x00dd # LATIN CAPITAL LETTER Y WITH ACUTE 0x9c 0x00de # LATIN CAPITAL LETTER THORN 0x9d 0x00b5 # MICRO SIGN 0x9e 0x00d7 # MULTIPLICATION SIGN 0x9f 0x00f7 # DIVISION SIGN 0xa0 0x00a9 # COPYRIGHT SIGN 0xa1 0x00a1 # INVERTED EXCLAMATION MARK 0xa2 0x00a2 # CENT SIGN 0xa3 0x00a3 # POUND SIGN 0xa4 0x2044 # FRACTION SLASH 0xa5 0x00a5 # YEN SIGN 0xa6 0x0192 # LATIN SMALL LETTER F WITH HOOK 0xa7 0x00a7 # SECTION SIGN 0xa8 0x00a4 # CURRENCY SIGN 0xa9 0x2019 # RIGHT SINGLE QUOTATION MARK 0xaa 0x201c # LEFT DOUBLE QUOTATION MARK 0xab 0x00ab # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xac 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0xad 0x203a # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0xae 0xfb01 # LATIN SMALL LIGATURE FI 0xaf 0xfb02 # LATIN SMALL LIGATURE FL 0xb0 0x00ae # REGISTERED SIGN 0xb1 0x2013 # EN DASH 0xb2 0x2020 # DAGGER 0xb3 0x2021 # DOUBLE DAGGER 0xb4 0x00b7 # MIDDLE DOT 0xb5 0x00a6 # BROKEN BAR 0xb6 0x00b6 # PILCROW SIGN 0xb7 0x2022 # BULLET 0xb8 0x201a # SINGLE LOW-9 QUOTATION MARK 0xb9 0x201e # DOUBLE LOW-9 QUOTATION MARK 0xba 0x201d # RIGHT DOUBLE QUOTATION MARK 0xbb 0x00bb # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xbc 0x2026 # HORIZONTAL ELLIPSIS 0xbd 0x2030 # PER MILLE SIGN 0xbe 0x00ac # NOT SIGN 0xbf 0x00bf # INVERTED QUESTION MARK 0xc0 0x00b9 # SUPERSCRIPT ONE 0xc1 0x02cb # MODIFIER LETTER GRAVE ACCENT 0xc2 0x00b4 # ACUTE ACCENT 0xc3 0x02c6 # MODIFIER LETTER CIRCUMFLEX ACCENT 0xc4 0x02dc # SMALL TILDE 0xc5 0x00af # MACRON 0xc6 0x02d8 # BREVE 0xc7 0x02d9 # DOT ABOVE 0xc8 0x00a8 # DIAERESIS 0xc9 0x00b2 # SUPERSCRIPT TWO 0xca 0x02da # RING ABOVE 0xcb 0x00b8 # CEDILLA 0xcc 0x00b3 # SUPERSCRIPT THREE 0xcd 0x02dd # DOUBLE ACUTE ACCENT 0xce 0x02db # OGONEK 0xcf 0x02c7 # CARON 0xd0 0x2014 # EM DASH 0xd1 0x00b1 # PLUS-MINUS SIGN 0xd2 0x00bc # VULGAR FRACTION ONE QUARTER 0xd3 0x00bd # VULGAR FRACTION ONE HALF 0xd4 0x00be # VULGAR FRACTION THREE QUARTERS 0xd5 0x00e0 # LATIN SMALL LETTER A WITH GRAVE 0xd6 0x00e1 # LATIN SMALL LETTER A WITH ACUTE 0xd7 0x00e2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xd8 0x00e3 # LATIN SMALL LETTER A WITH TILDE 0xd9 0x00e4 # LATIN SMALL LETTER A WITH DIAERESIS 0xda 0x00e5 # LATIN SMALL LETTER A WITH RING ABOVE 0xdb 0x00e7 # LATIN SMALL LETTER C WITH CEDILLA 0xdc 0x00e8 # LATIN SMALL LETTER E WITH GRAVE 0xdd 0x00e9 # LATIN SMALL LETTER E WITH ACUTE 0xde 0x00ea # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xdf 0x00eb # LATIN SMALL LETTER E WITH DIAERESIS 0xe0 0x00ec # LATIN SMALL LETTER I WITH GRAVE 0xe1 0x00c6 # LATIN CAPITAL LETTER AE 0xe2 0x00ed # LATIN SMALL LETTER I WITH ACUTE 0xe3 0x00aa # FEMININE ORDINAL INDICATOR 0xe4 0x00ee # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xe5 0x00ef # LATIN SMALL LETTER I WITH DIAERESIS 0xe6 0x00f0 # LATIN SMALL LETTER ETH 0xe7 0x00f1 # LATIN SMALL LETTER N WITH TILDE 0xe8 0x0141 # LATIN CAPITAL LETTER L WITH STROKE 0xe9 0x00d8 # LATIN CAPITAL LETTER O WITH STROKE 0xea 0x0152 # LATIN CAPITAL LIGATURE OE 0xeb 0x00ba # MASCULINE ORDINAL INDICATOR 0xec 0x00f2 # LATIN SMALL LETTER O WITH GRAVE 0xed 0x00f3 # LATIN SMALL LETTER O WITH ACUTE 0xee 0x00f4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xef 0x00f5 # LATIN SMALL LETTER O WITH TILDE 0xf0 0x00f6 # LATIN SMALL LETTER O WITH DIAERESIS 0xf1 0x00e6 # LATIN SMALL LETTER AE 0xf2 0x00f9 # LATIN SMALL LETTER U WITH GRAVE 0xf3 0x00fa # LATIN SMALL LETTER U WITH ACUTE 0xf4 0x00fb # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xf5 0x0131 # LATIN SMALL LETTER DOTLESS I 0xf6 0x00fc # LATIN SMALL LETTER U WITH DIAERESIS 0xf7 0x00fd # LATIN SMALL LETTER Y WITH ACUTE 0xf8 0x0142 # LATIN SMALL LETTER L WITH STROKE 0xf9 0x00f8 # LATIN SMALL LETTER O WITH STROKE 0xfa 0x0153 # LATIN SMALL LIGATURE OE 0xfb 0x00df # LATIN SMALL LETTER SHARP S 0xfc 0x00fe # LATIN SMALL LETTER THORN 0xfd 0x00ff # LATIN SMALL LETTER Y WITH DIAERESIS 0xfe 0xfffd # .notdef, REPLACEMENT CHARACTER 0xff 0xfffd # .notdef, REPLACEMENT CHARACTER |
Added freshlib/data/_encodings/build.
cannot compute difference between binary files
Added freshlib/data/_encodings/buildall.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash echo "module 'Encoding tables'" > ./encodings.inc for i in _sources/*.TXT; do dst=$(basename "$i" .TXT) lbl=$(echo -n $dst | tr '-' '_') if [[ $lbl =~ ^[0-9] ]]; then lbl="ISO$lbl" fi ./build "$i" "./$dst.tbl" echo "EncodingTable $lbl, './$dst.tbl'" >> ./encodings.inc done echo "endmodule" >> ./encodings.inc |
Added freshlib/data/_encodings/encodings.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | module 'Encoding tables' EncodingTable ISO8859_10, './8859-10.tbl' EncodingTable ISO8859_11, './8859-11.tbl' EncodingTable ISO8859_13, './8859-13.tbl' EncodingTable ISO8859_14, './8859-14.tbl' EncodingTable ISO8859_15, './8859-15.tbl' EncodingTable ISO8859_16, './8859-16.tbl' EncodingTable ISO8859_1, './8859-1.tbl' EncodingTable ISO8859_2, './8859-2.tbl' EncodingTable ISO8859_3, './8859-3.tbl' EncodingTable ISO8859_4, './8859-4.tbl' EncodingTable ISO8859_5, './8859-5.tbl' EncodingTable ISO8859_6, './8859-6.tbl' EncodingTable ISO8859_7, './8859-7.tbl' EncodingTable ISO8859_8, './8859-8.tbl' EncodingTable ISO8859_9, './8859-9.tbl' EncodingTable CP037, './CP037.tbl' EncodingTable CP1006, './CP1006.tbl' EncodingTable CP1026, './CP1026.tbl' EncodingTable CP1250, './CP1250.tbl' EncodingTable CP1251, './CP1251.tbl' EncodingTable CP1252, './CP1252.tbl' EncodingTable CP1253, './CP1253.tbl' EncodingTable CP1254, './CP1254.tbl' EncodingTable CP1255, './CP1255.tbl' EncodingTable CP1256, './CP1256.tbl' EncodingTable CP1257, './CP1257.tbl' EncodingTable CP1258, './CP1258.tbl' EncodingTable CP424, './CP424.tbl' EncodingTable CP437, './CP437.tbl' EncodingTable CP500, './CP500.tbl' EncodingTable CP737, './CP737.tbl' EncodingTable CP775, './CP775.tbl' EncodingTable CP850, './CP850.tbl' EncodingTable CP852, './CP852.tbl' EncodingTable CP855, './CP855.tbl' EncodingTable CP856, './CP856.tbl' EncodingTable CP857, './CP857.tbl' EncodingTable CP860, './CP860.tbl' EncodingTable CP861, './CP861.tbl' EncodingTable CP862, './CP862.tbl' EncodingTable CP863, './CP863.tbl' EncodingTable CP864, './CP864.tbl' EncodingTable CP865, './CP865.tbl' EncodingTable CP866, './CP866.tbl' EncodingTable CP869, './CP869.tbl' EncodingTable CP874, './CP874.tbl' EncodingTable CP875, './CP875.tbl' EncodingTable CP932, './CP932.tbl' EncodingTable CP936, './CP936.tbl' EncodingTable CP949, './CP949.tbl' EncodingTable KOI8_R, './KOI8-R.tbl' EncodingTable KOI8_U, './KOI8-U.tbl' EncodingTable KPS9566, './KPS9566.tbl' EncodingTable NEXTSTEP, './NEXTSTEP.tbl' endmodule |
Added freshlib/data/_encodings/tools/BuildEncodingTable.fpz.
> > > > > > > | 1 2 3 4 5 6 7 | ;FreshProject_v3 Compiler.Memory = 300000 Compiler.BinaryNameAuto = 0 Compiler.BinaryName = "../build" Compiler.MainFile = "build.asm" Aliases.TargetOS = "Linux|Win32|KolibriOS" ProjectTree.Documents/ = 2 |
Added freshlib/data/_encodings/tools/build.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console include "%lib%/freshlib.asm" ; include your includes here. start: InitializeAll stdcall GetCmdArguments jc .error_arg mov edi, eax .check_params: cmp [edi+TArray.count], 2 jb .error_arg stdcall FileOpen, [edi+TArray.array+4] jc .file_not_found mov [hSourceFile], eax call InitArrays .line_loop: stdcall FileReadLine, [hSourceFile] jc .error_read test eax, eax jz .end_of_file stdcall ProcessOneLine, eax stdcall StrDel, eax jmp .line_loop .end_of_file: stdcall FileClose, ebx ; sort the second table xor ecx, ecx .outer: lea ebx, [ecx+1] .inner: mov ax, [Table2+2*ecx] cmp ax, [Table2+2*ebx] jb .next xchg ax, [Table2+2*ebx] mov [Table2+2*ecx], ax mov al, [Table3+ecx] xchg al, [Table3+ebx] mov [Table3+ecx], al .next: inc ebx cmp ebx, $80 jne .inner inc ecx cmp ecx, $80-1 jne .outer cmp [edi+TArray.count], 3 jb .default_file mov eax, [edi+TArray.array+8] jmp .save .default_file: mov eax, cDefaultOutput .save: stdcall SaveBinaryFile, eax, Table1, 384 stdcall ListFree, edi, StrDel jmp .finish cDefaultOutput text 'table.bin' .error_read: stdcall FileWriteString, [STDERR], <'Source file read error.', 13, 10> jmp .end_of_file .file_not_found: stdcall FileWriteString, [STDERR], <'Source file not found.', 13, 10> jmp .finish .error_arg: stdcall FileWriteString, [STDERR], <'Use: build SOURCE DESTINATION', 13, 10> .finish: FinalizeAll stdcall TerminateAll, 0 proc ProcessOneLine, .hString begin pushad ; stdcall FileWriteString, [STDOUT], [.hString] ; stdcall FileWriteString, [STDOUT], cCRLF mov eax, [.hString] stdcall StrClipSpacesR, eax stdcall StrClipSpacesL, eax stdcall StrCleanDupSpaces, eax stdcall StrLCase, eax stdcall StrPtr, eax mov esi, eax cmp byte [esi], '#' je .finish ; comment line mov edi, esi .loop1: lodsb cmp al, ' ' ja .loop1 test al, al jz .finish ; the string is invalid, skip it. dec esi mov eax, esi sub eax, edi stdcall StrExtract, edi, 0, eax push eax stdcall StrToNumEx, eax stdcall StrDel ; from the stack jc .finish ; invalid number cmp eax, $ff ja .finish ; multibyte code page. mov ebx, eax ; remember for now. .loop2: lodsb test al, al jz .finish ; there is no second number cmp al, ' ' jb .loop2 lea edi, [esi-1] .loop3: lodsb cmp al, ' ' ja .loop3 dec esi mov eax, esi sub eax, edi stdcall StrExtract, edi, 0, eax push eax stdcall StrToNumEx, eax stdcall StrDel ; from the stack jnc .numok ; invalid second number - undefined character. mov eax, $fffd ; replace with space .numok: cmp eax, $ffff ja .finish ; too big unicode letter. Should be fixed maybe, but the tables are 16 bit. cmp ebx, $80 jae .addit cmp ebx, eax je .finish ; it is ; int3 ; is it not possible ? jmp .finish .addit: mov ecx, ebx sub ecx, $80 mov word [Table1+2*ecx], ax mov word [Table2+2*ecx], ax mov byte [Table3+ecx], bl .finish: popad return endp proc InitArrays begin push ecx mov ecx, 80h .loop: mov [Table1+2*ecx-256], cx mov [Table2+2*ecx-256], cx mov [Table3+ecx-256], cl inc cl jnz .loop pop ecx return endp uglobal hSourceFile dd ? Table1 rw 128 ; table for ANSI -> Unicode translation. Table3 rb 128 Table2 rw 128 ; needed only for the sorting of the index. endg cCRLF text 13, 10 |
Added freshlib/data/all.asm.
> > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | include 'i18n.asm' include 'arrays.asm' include 'trees.asm' include 'strlib.asm' include 'base64.asm' include 'uconfig.asm' include 'memstream.asm' include 'hashes.asm' include 'bitstream.asm' include 'bytestream.asm' include 'deflate.asm' include 'named_array.asm' include 'buffergap.asm' include 'counter_array.asm' include 'random.asm' |
Changes to freshlib/data/arrays.asm.
|
| | | < < | | < < < < < > | < > | < < > | > > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS independent dynamic arrays library. ; ; Target OS: Any ; ; Dependencies: memory.asm ; ; Notes: ;_________________________________________________________________________________________ module "Arrays library" struct TArray .count dd ? ; Count of elements in dynamic array .capacity dd ? ; Capacity of the array allocated memory. .itemsize dd ? ; Size of one element in dynamic array. Aligned on dword. .lparam dd ? ; User defined value. label .array dword |
︙ | ︙ | |||
48 49 50 51 52 53 54 | add ecx, 3 and cl, $fc mov edx, ecx imul ecx, cInitialCapacity add ecx, sizeof.TArray stdcall GetMem, ecx | < > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > | > > | | > | < > | > > | < < < < < | > > | | > > > > > | | > | > > | 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | add ecx, 3 and cl, $fc mov edx, ecx imul ecx, cInitialCapacity add ecx, sizeof.TArray stdcall GetMem, ecx jc .finish mov [eax+TArray.itemsize], edx mov [eax+TArray.capacity], cInitialCapacity clc .finish: pop edx ecx return endp ; returns a pointer to the array item. ; Arguments: ; .array - pointer to TArray ; .index - index of the array element. ; ; Returns: ; CF=0; EAX = pointer to the array element. ; CF=1 - indicates that [.index] is bigger than the array element count; ; in this case EAX = points after the last element of the array. proc GetArrayItem, .array, .index begin push ecx esi mov esi, [.array] mov eax, [.index] mov ecx, [esi+TArray.count] cmp eax, ecx cmovae eax, ecx imul eax, [esi+TArray.itemsize] lea eax, [esi+TArray.array+eax] ; set CF sub ecx, 1 jc @f cmp ecx, [.index] @@: pop esi ecx return endp ;____________________________________________________________________ ; ; proc AddArrayItems - adds new item at the end of TArray ; dynamic array. ; Arguments: ; ; .ptrArray - pointer to dword variable containing pointer ; to TArray structure. ; .count - count of the elements to be added. ; ; Returns: ; CF=1 if error: edx - pointer to the original array. ; ; CF=0 if OK: eax - pointer to new created element. ; edx - pointer to the array. ; ; Notes: ; The procedure returns in edx pointer to the TArray. This pointer ; can differs from .ptrArray argument, if the memory was ; reallocated. The user should save the pointer for future access ; to the array. It is safe to save the pointer before check of CF ; for error, because the procedure returns original pointer in case ; of memory allocation error. ;____________________________________________________________________ proc AddArrayItems, .ptrArray, .count begin push ebx ecx mov edx, [.ptrArray] test edx, edx jnz @f stc pop ecx ebx return @@: mov eax, [edx+TArray.count] mov ecx, [edx+TArray.capacity] add eax, [.count] cmp ecx, eax jae .memallocated ; enlarge the array. Strategy here is not clear. mov ecx, eax call dword [ResizeIt] jc .finish mov ebx, ecx imul ecx, [edx+TArray.itemsize] add ecx, sizeof.TArray stdcall ResizeMem, edx, ecx jc .finish mov edx, eax mov [edx+TArray.capacity], ebx .memallocated: mov eax, [edx+TArray.count] mov ecx, [.count] add [edx+TArray.count], ecx imul eax, [edx+TArray.itemsize] lea eax, [edx+eax+TArray.array] clc .finish: pop ecx ebx return endp ;____________________________________________________________________ ; ; proc InsertArrayItems - inserts new item in the array. ; ; Arguments: ; ; .ptrArray - pointer to TArray structure. ; .iElement - on what index to be inserted the new elements. ; .count - how many elements to be inserted. ; ; Returns: ; CF=1 if error: edx - pointer to the original array; new elements are ; not inserted. ; ; CF=0 if OK: eax - pointer to the first of the new inserted elements. ; edx - pointer to the array. ; ; Notes: ; If .iElement is larger or equal to [TArray.count] the elements are ; appended at the end of the array. Otherwise, all elements are moved ; to make room for the new elements. If the capacity of the array is ; not enough to hold the new elements, the array is resized. ; ; The procedure returns in edx pointer to the TArray. This pointer ; can differs from .ptrArray argument, if the memory was ; reallocated. The user should save the pointer for future access ; to the array. It is safe to save the pointer before check of CF ; for error, because the procedure returns original pointer in case ; of memory allocation error. ;____________________________________________________________________ proc InsertArrayItems, .ptrArray, .iElement, .count begin stdcall AddArrayItems, [.ptrArray], [.count] jc .end1 push ecx mov ecx, [.iElement] add ecx, [.count] jc .end2 cmp ecx, [edx+TArray.count] jae .end2 push esi edi imul ecx, [edx+TArray.itemsize] lea ecx, [edx+ecx+TArray.array] |
︙ | ︙ | |||
194 195 196 197 198 199 200 | sub edi, 4 std ; scroll the data. rep movsd | | > < > > > | > | > | | | > > > > | | | | > > > > < < > > > > > > > | < | > > | > > | > > > > > > > > > > > > > > > > > > > | 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 | sub edi, 4 std ; scroll the data. rep movsd ; clear the new items. mov ecx, [edx+TArray.itemsize] imul ecx, [.count] shr ecx, 2 xor eax, eax rep stosd lea eax, [edi+4] cld pop edi esi .end2: pop ecx clc .end1: return endp ;************************************************************** ; proc DeleteArrayItems - deletes the items with the specified ; index and specified count from TArray ; dynamic array. ; If the capacity of the array is bigger than the recomended ; for the new count, then the array is resized. ; The recomended size is calculated using ResizeIt procedure ; from memory library. ; ; Arguments: ; .ptrArray - pointer to TArray structure. ; .iElement - index of the element to be deleted. ; .count - how many elements to be deleted. ; ; Returns: edx - pointer to the TArray. In the most cases ; this pointer will not be changed, but this ; also depends on the current OS memory ; allocation API, so it is safer to store ; the pointer for future use instead of ; passed to the procedure. ; ; Notes: ; This function can't fail, because delete is ; always possible in already allocated array. ; in some cases shrinking resize possibly can fail ; but this will not affect the data in the array. ; ; if [.iElement]+[.count] is bigger that the [TArray.count] ; of the array, only the elements to the end of the array ; will be deleted. ; ;******************************************************* proc DeleteArrayItems, .ptrArray, .iElement, .count begin push edi esi ecx ebx eax mov edx, [.ptrArray] test edx, edx jz .exit mov ecx, [.iElement] mov eax, [edx+TArray.count] test ecx, ecx js .exit cmp ecx, eax jae .exit ; index greater or equal to the count... add ecx, [.count] cmp ecx, eax jae .movedone ; if there is no more elements after the last deleted element, don't move mov eax, [edx+TArray.itemsize] imul ecx, eax lea esi, [edx+ecx+TArray.array] ; the first after deleted mov ecx, [.iElement] imul ecx, eax ; offset of the deleted element. lea edi, [edx+ecx+TArray.array] ; destination address. mov ecx, [edx+TArray.count] imul ecx, eax lea ecx, [ecx+edx+TArray.array] sub ecx, esi ; bytes to be moved. It should be dword aligned count. shr ecx, 2 rep movsd ; move the data. .movedone: mov ecx, [edx+TArray.count] mov eax, [.iElement] sub ecx, [.count] cmp ecx, eax ja @f mov ecx, eax @@: mov [edx+TArray.count], ecx call [ResizeIt] jc .exit ; the array is OK, but the resize failed. cmp ecx, [edx+TArray.capacity] jae .exit ; the array have smaller capacity than recomended, so don't resize. mov eax, ecx imul eax, [edx+TArray.itemsize] add eax, sizeof.TArray stdcall ResizeMem, edx, eax jc .exit ; the resize failed, but the array is ok. mov edx, eax mov [edx+TArray.capacity], ecx ; set new capacity. .exit: pop eax ebx ecx esi edi return endp ;************************************************************** ; proc VacuumArray - deletes the reserved memory from the array. ; ; Arguments: ; .ptrArray - pointer to TArray structure. ; ; Returns: edx - pointer to the TArray. In the most cases ; this pointer will not be changed, but this ; also depends on the current OS memory ; allocation API, so it is safer to store ; the pointer for future use instead of ; passed to the procedure. ; CF=1 - there is a error on vacuuming. This is not ; exactly error, because this case indicates ; simply some memory manager unabiliry to reallocate ; memory. Although the array will not be changed. ; ; This procedure removes all reserved space in the array. ; Vacuum can save a lot of memory space, but takes time and ; also will make future inserts of new elements ; slower at least for the first add/insert. ; ; it is wise to vacuum the array after it is filled with ; most/all of the needed elements. ; proc VacuumArray, .ptrArray begin push eax ecx mov edx, [.ptrArray] mov ecx, [edx+TArray.count] mov eax, [edx+TArray.itemsize] |
︙ | ︙ | |||
323 324 325 326 327 328 329 330 331 332 333 334 335 336 | mov [eax+TArray.capacity], ecx .exit: pop ecx eax return endp ;____________________________________________________________________ ; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 | mov [eax+TArray.capacity], ecx .exit: pop ecx eax return endp ;*************************************************** ; Returns the result in the flags CF and ZF in a way ; to be used with JB,JA,JE: ; ; if E1<E2 -> CF = 1, ZF=0 (JB to be taken) ; if E1=E2 -> CF = 0, ZF=1 (JE to be taken) ; if E1>E2 -> CF=0, ZF=0 (JA to be taken) ; ;**************************************************** interface CompareProc, .pElement1, .pElement2, .param ;**************************************************** ; Quick sort of the array in the memory. ; Arguments: ; .ptrArray - pointer to TArray structure. ; .ptrCompareProc - pointer to procedure that compares two elements. ; .param - parameter that is directly passed to the ; comparison procedure. ; ; .ptrCompareProc has interface: ; ; proc CompareSomething, .ptrElement1, .ptrElement2, .param ; ; Returns the result in the flags CF and ZF in a way ; to be used with JB,JA,JE: ; ; if E1<E2 -> CF = 1, ZF=0 (JB to be taken) ; if E1=E2 -> CF = 0, ZF=1 (JE to be taken) ; if E1>E2 -> CF=0, ZF=0 (JA to be taken) ; ;**************************************************** proc SortArray, .ptrArray, .ptrCompareProc, .param begin pushad mov esi, [.ptrArray] mov edi, [.ptrCompareProc] mov ebx, [esi+TArray.itemsize] mov edx, [esi+TArray.count] dec edx xor ecx, ecx lea esi, [esi+TArray.array] mov [.ptrArray], esi call .DoQSort popad return ; ECX = LEFT ; EDX = RIGHT .DoQSort: push eax cmp ecx, edx jge .finish push edx ecx mov esi, edx sub esi, ecx sar esi, 1 add esi, ecx imul esi, ebx imul ecx, ebx imul edx, ebx add esi, [.ptrArray] add ecx, [.ptrArray] add edx, [.ptrArray] ; copy the pivot element. sub esp, ebx mov edi, esp push ecx mov ecx, ebx rep movsb pop ecx mov edi, esp ; here edi contains pointer to the copied element. ; partition sub ecx, ebx add edx, ebx .whilei: add ecx, ebx stdcall [.ptrCompareProc], ecx, edi, [.param] jb .whilei ; search for the left element >= pivote cmp ecx, edx jg .next .whilej: sub edx, ebx stdcall [.ptrCompareProc], edi, edx, [.param] jb .whilej ; search for the right element <= pivote cmp ecx, edx jg .next ;i>j je .whilei ; swap elements: push ebx .swap_loop: dec ebx js .end_swap mov al, [ecx+ebx] xchg al, [edx+ebx] mov [ecx+ebx], al jmp .swap_loop .end_swap: pop ebx jmp .whilei .next: add esp, ebx mov eax, edx ; j sub eax, [.ptrArray] cdq idiv ebx mov edi, eax mov eax, ecx ; i sub eax, [.ptrArray] cdq idiv ebx pop ecx mov edx, edi call .DoQSort ; Left, j mov ecx, eax pop edx call .DoQSort ; i, Right .finish: pop eax retn endp proc CompareIntAscending as CompareProc begin push eax esi edi mov esi, [.pElement1] mov edi, [.pElement2] mov eax, [esi] cmp eax, [edi] pop edi esi eax return endp ;____________________________________________________________________ ; |
︙ | ︙ | |||
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 | .found: clc mov eax, ecx pop ecx edi return endp ;-------------------------------------------- ; Frees all elements of the list calling ; [FreeProc] on every element. ; (proc FreeProc, ptrItem) ; Frees the array of items ;-------------------------------------------- proc ListFree, .ptrList, .FreeProc begin | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > | > > > | 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 | .found: clc mov eax, ecx pop ecx edi return endp ;____________________________________________________________________ ; ; proc ListIndexOfStr, .ptrArray, .hString - searches dynamic list of ; strings for the the given string. ; ; List is a special case of dynamic array, where the size of the ; elements is dword (4 bytes). ; ; Arguments: ; .ptrList - pointer to TArray dynamic array. ; .hString - value of the element. ; Returns: ; CF = 0 if the element was found. eax contains index of ; the element. ; CF = 1 the element is not found. ;____________________________________________________________________ proc ListIndexOfStr, .ptrList, .hString begin push edi ecx mov edi, [.ptrList] cmp [edi+TArray.itemsize], 4 jne .notfound mov ecx, [edi+TArray.count] jecxz .notfound .loop: dec ecx js .notfound stdcall StrCompCase, [.hString], [edi+TArray.array+4*ecx] jnc .loop clc mov eax, ecx pop ecx edi return .notfound: stc pop ecx edi return endp ;-------------------------------------------- ; Frees all elements of the list calling ; [FreeProc] on every element. ; (proc FreeProc, ptrItem) ; Frees the array of items ;-------------------------------------------- proc ListFree, .ptrList, .FreeProc begin pushad mov edi, [.ptrList] test edi, edi jz .finish mov ebx, [edi+TArray.count] cmp [.FreeProc], 0 je .endwhile .freeloop: dec ebx js .endwhile stdcall [.FreeProc], [edi+4*ebx+TArray.array] jmp .freeloop .endwhile: stdcall FreeMem, edi .finish: popad return endp endmodule |
Added freshlib/data/base64.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS independent string manipulation library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Author of this library is Decard (Mateusz Tymek) ; ;_________________________________________________________________________________________ module "Base64 library" if used base64_table base64_table db "ABCDEFGHIJKLMNOPQRSTUVWXYZ" db "abcdefghijklmnopqrstuvwxyz" db "0123456789+/" end if ; calculates size of base64 stream after encoding proc Base64Size, .DataLen begin push ebx ecx edx mov eax, [.DataLen] mov ebx, eax add eax, 2 xor edx, edx mov ecx, 3 div ecx add ebx, 3 sub ebx, edx mov eax, ebx xor edx, edx div ecx shl eax, 2 pop edx ecx ebx return endp ; encodes given buffer into base64 stream proc EncodeBase64, .pData, .Length begin push ecx edx esi edi mov esi, [.pData] mov ecx, [.Length] stdcall StrNew mov edi, eax stdcall Base64Size, ecx stdcall StrSetCapacity, edi, eax push edi stdcall StrPtr, edi mov edi, eax push edi .loop: mov edx, [esi] cmp ecx, 3 jae .remainder_ok and edx, 0xffff cmp ecx, 2 jae .remainder_ok and edx, 0xff .remainder_ok: bswap edx mov eax, edx shr eax, 26 and eax, 111111b mov al, [base64_table+eax] mov [edi], al inc edi mov eax, edx shr eax, 20 and eax, 111111b mov al, [base64_table+eax] mov [edi], al inc edi dec ecx jz .r2 mov eax, edx shr eax, 14 and eax, 111111b mov al, [base64_table+eax] mov [edi], al inc edi dec ecx jz .r1 mov eax, edx shr eax, 8 and eax, 111111b mov al, [base64_table+eax] mov [edi], al inc edi add esi, 3 dec ecx jnz .loop jmp .finish .r2: mov byte [edi], '=' inc edi .r1: mov byte [edi], '=' inc edi .finish: mov byte [edi], 0 mov ecx, edi pop edi sub ecx, edi ; string length. mov [edi+string.len], ecx pop eax ; string handle pop edi esi edx ecx return endp ; decodes base64 stream into given buffer proc DecodeBase64, .hString .decode_table rb 0x100 .ret dd ? begin push ebx ecx edx esi edi xor eax, eax mov ebx, 63 .make_table: mov al, [base64_table+ebx] mov [.decode_table+eax], bl dec ebx jns .make_table mov [.decode_table+'-'], 0 mov [.decode_table+'='], 0 stdcall StrPtr, [.hString] mov esi, eax stdcall StrLen, [.hString] mov ecx, eax lea eax, [ecx+4] stdcall GetMem, eax lea edi, [eax+4] mov [.ret], edi xor ebx, ebx xor eax, eax .load_dword: mov edx, [esi] bswap edx add esi, 4 mov al, dl mov al, [.decode_table+eax] shrd ebx, eax, 6 shr edx, 8 mov al, dl mov al, [.decode_table+eax] shrd ebx, eax, 6 shr edx, 8 mov al, dl mov al, [.decode_table+eax] shrd ebx, eax, 6 shr edx, 8 mov al, dl mov al, [.decode_table+eax] shrd ebx, eax, 6 bswap ebx mov [edi], ebx add edi, 3 sub ecx, 4 js .exit_loop ; this jump should be never taken jnz .load_dword ; (src_size should be a multiple of four) .exit_loop: sub edi, 2 cmp byte [edi], 0 je .size_ok inc edi cmp byte [edi], 0 je .size_ok inc edi .size_ok: mov eax, [.ret] sub edi, eax mov [eax-4], edi pop edi esi edx ecx ebx return endp endmodule |
Added freshlib/data/bbcode.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 | module "BBCode translator" match =HTML_IMG_ATTR, HTML_IMG_ATTR { HTML_IMG_ATTR equ ' crossorigin="anonymous" ' } iglobal PHashTable tableBBtags, tpl_func, \ 'b', tagStrong, \ '*', tagListItem, \ 'i', tagEm, \ 'u', tagIns, \ 's', tagDel, \ 'c', tagInlineCode, \ 'url', tagURL, \ 'img', tagImg, \ 'quote', tagQuote, \ 'code', tagCode, \ 'size', tagSize, \ 'color', tagColor, \ 'list', tagUL, \ 'ul', tagUL, \ 'ol', tagOL, \ 'table', tagTable, \ 'tr', tagTR, \ 'th', tagTH, \ 'td', tagTD, \ 'spoiler', tagSpoiler, \ 'email', tagEmail, \ 'h1', tagH1, \ 'h2', tagH2, \ 'h3', tagH3, \ 'h4', tagH4, \ 'h5', tagH5, \ 'h6', tagH6, \ ':)', emoSmile, \ ':d', emoLol, \ ':rofl:', emoRofl, \ ';)', emoWink, \ ':p', emoTongue, \ ':(', emoSad, \ ':`(', emoCry, \ '>:(', emoAngry endg struct TOneTag .pOpenP dd ? ; Open tag prefix. for example '<img src="' .lOpenP dd ? .pOpenS dd ? ; Open tag suffix. for example '" alt="' .lOpenS dd ? .pClose dd ? ; Close tag. for example '" />' .lClose dd ? .flags dd ? ; encoding flags for this tag. the first byte contain flags for the text between .pOpenP and .pOpenS ; the second byte for the text between .pOpenS and .pClose ends ; examples: ; [b]: '<b>', 0, '</b>' ; [quote=title]text[/quote]: '<blockquote><header>', '</header>', '</blockquote>' ; [img]image_url[/img]: '<img alt="', '" src="', '" />' ; [code=language][/code]: '<code class="', '">', '</code>' struc flex [arg] { common local f1, f2, cnt, sz cnt = 0 sz = 0 f1 = 1 f2 equ FALSE forward match any, arg \{ match `arg, arg \\{ f2 equ TRUE \\} \} cnt = cnt + 1 if arg eqtype '' virtual at 0 db arg sz = sz + $ end virtual end if common local lbl match =txt string, arg \{ f1 = 0 lbl text string f2 equ FALSE \} if (sz > 4) | (cnt>1) f1 = 0 end if if f1 . = arg .length = 0 else . = lbl .length = lbl#\.length end if match =TRUE, f2 \{ lbl text arg \} } struc onetag prefix, suffix, close, flags { common local ..pref, ..suff, ..close local ..fpr, ..fsf, ..fcl label . dword if used . ..pref flex prefix ..suff flex suffix ..close flex close .pOpenP dd ..pref .lOpenP dd ..pref#\.length .pOpenS dd ..suff .lOpenS dd ..suff#\.length .pClose dd ..close .lClose dd ..close#\.length .flags dd flags end if } fEmptyAttr = $00000001 ; empty value of the attribute is acceptable. fBlockTag = $00000002 ; This is a block tag. Allows paragraph generation and resets its state. fDisableTags = $00000004 ; Disable tag generation inside this block; The only tag that is recongized is the respective closing tag. fLines = $00000008 ; the tag can contain text lines. fInlineTag = $00000010 fURLAttribute = $00000020 ; the attribute of the tag contains URL, that need to be sanitized. fURLContent = $00000040 ; the content of the tag is an URL. fMixedDist = $00000080 ; The argument of the tag should be formatted as mixed ascii-unicode text. fMinimagBlock = $80000000 ; The tags, that are open/close by ;tagname/;end in MiniMagAsm iglobal match =CUSTOM_HTML_TAGS, CUSTOM_HTML_TAGS \{ align 4 tagStrong onetag txt '<strong>', 0, txt '</strong>', fInlineTag tagEm onetag txt '<em>', 0, txt '</em>', fInlineTag tagIns onetag txt '<u>', 0, txt '</u>', fInlineTag tagDel onetag txt '<del>', 0, txt '</del>', fInlineTag tagInlineCode onetag txt '<code>', 0, txt '</code>', fInlineTag or fDisableTags tagCode onetag txt '<pre><code class="', txt '">', txt '</code></pre>', fBlockTag or fEmptyAttr or fDisableTags or fMinimagBlock tagQuote onetag txt '<blockquote><fieldset><legend>', txt '</legend>',txt '</fieldset></blockquote>',fBlockTag or fEmptyAttr or fMinimagBlock or fMixedDist tagUL onetag txt '<ul>', 0, txt '</ul>', fBlockTag or fMinimagBlock tagOL onetag txt '<ol type="', txt '">', txt '</ol>', fBlockTag or fEmptyAttr or fMinimagBlock tagListItem onetag txt '<li>', 0, 0, fBlockTag tagTable onetag txt '<table>', 0, txt '</table>', fBlockTag or fMinimagBlock tagTR onetag txt '<tr>', 0, 0, fBlockTag tagTH onetag txt '<th>', 0, 0, fBlockTag tagTD onetag txt '<td>', 0, 0, fBlockTag tagSpoiler onetag txt '<details><summary>', txt '</summary>', txt '</details>', fBlockTag or fMinimagBlock tagURL onetag txt '<a href="', txt '">', txt '</a>', fURLAttribute or fInlineTag tagAnchor onetag txt '<a href="', txt '" id="', txt '"></a>', fURLAttribute or fInlineTag tagImg onetag <txt '<figure><img', HTML_IMG_ATTR,'alt="'>, txt '" src="', txt '"></figure>', fBlockTag or fDisableTags or fURLContent tagInlineImg onetag <txt '<img', HTML_IMG_ATTR,'alt="'>, txt '" src="', txt '">', fInlineTag or fDisableTags or fURLContent tagSize onetag txt '<span style="font-size:', txt '">', txt '</span>', fInlineTag tagColor onetag txt '<span style="color:', txt '">', txt '</span>', fInlineTag tagEmail onetag txt '<a href="mailto:', txt '">', txt '</a>', 0 tagH1 onetag txt '<h1>', 0, txt '</h1>', fBlockTag or fLines tagH2 onetag txt '<h2>', 0, txt '</h2>', fBlockTag or fLines tagH3 onetag txt '<h3>', 0, txt '</h3>', fBlockTag or fLines tagH4 onetag txt '<h4>', 0, txt '</h4>', fBlockTag or fLines tagH5 onetag txt '<h5>', 0, txt '</h5>', fBlockTag or fLines tagH6 onetag txt '<h6>', 0, txt '</h6>', fBlockTag or fLines tagPara onetag txt '<p>', 0, 0, fLines tagHR onetag txt '<hr>', 0, 0, 0 tagImgMM onetag <txt '<figure><img', HTML_IMG_ATTR, 'src="'>, txt '" alt="', txt '"></figure>', fBlockTag or fDisableTags tagInlineImgMM onetag <txt '<img class="inline"', HTML_IMG_ATTR,'src="'>, txt '" alt="', txt '" />', fInlineTag or fDisableTags tagVideoMM onetag <txt '<video', HTML_IMG_ATTR, 'controls><source src="'>, txt '">', txt '</video>', 0 ; Emoticons tags. emoSmile onetag <'<img class="emoticon" src="', EMOTICONS_PATH, 'smile.gif" alt=":)">'>, 0, 0, 0 emoLol onetag <'<img class="emoticon" src="', EMOTICONS_PATH, 'lol.gif" alt=":D">'>, 0, 0, 0 emoRofl onetag <'<img class="emoticon" src="', EMOTICONS_PATH, 'rofl.gif" alt=":D">'>, 0, 0, 0 emoWink onetag <'<img class="emoticon" src="', EMOTICONS_PATH, 'wink.gif" alt=";)">'>, 0, 0, 0 emoTongue onetag <'<img class="emoticon" src="', EMOTICONS_PATH, 'tongue.gif" alt=":P">'>, 0, 0, 0 emoSad onetag <'<img class="emoticon" src="', EMOTICONS_PATH, 'sad.gif" alt=":(">'>, 0, 0, 0 emoCry onetag <'<img class="emoticon" src="', EMOTICONS_PATH, 'cry.gif" alt=":`(">'>, 0, 0, 0 emoAngry onetag <'<img class="emoticon" src="', EMOTICONS_PATH, 'angry.gif" alt=">:(">'>, 0, 0, 0 emoJ onetag txt '<span class="emoji"><span>', 0, txt '</span></span>', 0 \} endg ; 1 - paragraph starts on every new line. ; 2 - paragraph starts on every two consecutive new lines (like in MarkDown) NEW_PARAGRAPH_EMPTY_LINES = 1 ;-------------------------------------------------------------- ; Converts BB code into HTML. Starts from the position [.from] ; and ends at the end of the text or at first NULL character. ; ; Arguments: ; .pBBCode - pointer to the TText structure with the BBCode ; formatted text. ; .from - the position where to start. ; ; Returns: ; edx - The same structure (possibly reallocated) with ; the translated to html code text. ; proc TranslateBBCode, .pBBCode, .from, .procSanitizeURL .pStack dd ? .ofsStart dd ? .tagType dd ? .tagAddr dd ? .tagFlags dd ? .tagMix dd ? .char rb 4 .fNewLine dd ? .emoj = emoJ ; use this label. begin pushad stdcall CreateArray, 4 mov [.pStack], eax mov [.fNewLine], NEW_PARAGRAPH_EMPTY_LINES ; first new line implicit. and [.tagFlags], 0 mov edx, [.pBBCode] OutputValue "BBCode TText.GapBegin: ", [edx+TText.GapBegin], 10, -1 OutputValue " GapEnd: ", [edx+TText.GapEnd], 10, -1 OutputValue " Length: ", [edx+TText.Length], 10, -1 OutputValue " Translate from: ", [.from], 10, -1 mov ebx, [.from] jmp .loop .next: inc ebx .loop: mov ecx, [edx+TText.GapEnd] cmp ebx, [edx+TText.GapBegin] cmovb ecx, [edx+TText.GapBegin] sub ecx, [edx+TText.GapBegin] add ecx, ebx cmp ecx, [edx+TText.Length] jae .end_of_text movzx eax, byte [edx+ecx] test al, al jz .end_of_text cmp al, $0d je .new_line cmp al, $0a je .new_line cmp al, $20 jbe .next ; skip all whitespace cmp [.fNewLine], NEW_PARAGRAPH_EMPTY_LINES mov [.fNewLine], 0 jb .paragraph_ok test [.tagFlags], fDisableTags jnz .paragraph_ok push eax stdcall TextMoveGap, edx, ebx stdcall TextSetGapSize, edx, 4 mov eax, [edx+TText.GapBegin] mov dword [edx+eax], "<p>" add [edx+TText.GapBegin], 3 add ebx, 3 pop eax .paragraph_ok: cmp al, "[" je .start_tag ; here check for emoticons cmp al, $f0 ; emoji? jb .continue stdcall TextMoveGap, edx, ebx mov ecx, [edx+TText.GapEnd] mov esi, ecx ; the start of thet emoji .loop_emoji: stdcall IsEmoji, [edx+ecx] jnc .end_emoji add ecx, eax cmp ecx, [edx+TText.Length] jb .loop_emoji .end_emoji: sub ecx, esi jz .loop ; no emoji here... add ebx, ecx mov eax, [emoJ.lOpenP] add eax, [emoJ.lClose] stdcall TextSetGapSize, edx, eax mov edi, [edx+TText.GapBegin] add edi, edx mov esi, [emoJ.pOpenP] mov ecx, [emoJ.lOpenP] add ebx, ecx add [edx+TText.GapBegin], ecx rep movsb stdcall TextMoveGap, edx, ebx mov edi, [edx+TText.GapBegin] add edi, edx mov esi, [emoJ.pClose] mov ecx, [emoJ.lClose] add ebx, ecx add [edx+TText.GapBegin], ecx rep movsb jmp .loop .continue: ; html encoding from here test al, al ; all values > 127 are unicode and should not be encoded. js .next movzx eax, byte [tbl_html+eax] test al, al jz .del_char jns .next ; the same as above lea esi, [eax+tbl_html] ; the address of the replacement string. lodsb movzx ecx, al ; length ; insert the replacement html encoding from esi stdcall TextMoveGap, edx, ebx stdcall TextSetGapSize, edx, ecx inc [edx+TText.GapEnd] ; delete the previous char. mov edi, [edx+TText.GapBegin] add edi, edx add [edx+TText.GapBegin], ecx add ebx, ecx rep movsb jmp .loop .del_char: stdcall TextMoveGap, edx, ebx inc [edx+TText.GapEnd] ; delete the current char. jmp .loop .not_a_tag_pop: add esp, 4 .not_a_tag: mov ebx, [.ofsStart] mov eax, "[" jmp .continue ;------------------------------------------------------------------------------------ .new_line: inc ebx mov ecx, [edx+TText.GapEnd] cmp ebx, [edx+TText.GapBegin] cmovb ecx, [edx+TText.GapBegin] sub ecx, [edx+TText.GapBegin] add ecx, ebx cmp ecx, [edx+TText.Length] jae .end_of_text inc [.fNewLine] xor al, byte [edx+ecx] cmp al, $0a xor $0d jne .loop jmp .next ; skip the next char. it is part of CRLF (or LFCR sequence). ;----------------------------------------------------------------------------- .start_tag: xor ecx, ecx mov [.ofsStart], ebx .first_non_ws: inc ebx mov esi, [edx+TText.GapEnd] cmp ebx, [edx+TText.GapBegin] cmovb esi, [edx+TText.GapBegin] sub esi, [edx+TText.GapBegin] add esi, ebx cmp esi, [edx+TText.Length] jae .not_a_tag mov al, [edx+esi] test al, al jz .not_a_tag cmp al, ' ' jbe .first_non_ws mov edi, ebx ; the start of the hash name cmp al, "/" je .closing_tag test [.tagFlags], fDisableTags jnz .loop .hash1: cmp al, "=" je .tag_found cmp al, "]" je .tag_found mov ah, al and ah, $40 shr ah, 1 or al, ah ; case insensitive hash. xor cl, al mov cl, [ tpl_func + ecx] inc ebx mov esi, [edx+TText.GapEnd] cmp ebx, [edx+TText.GapBegin] cmovb esi, [edx+TText.GapBegin] sub esi, [edx+TText.GapBegin] add esi, ebx cmp esi, [edx+TText.Length] jae .not_a_tag mov al, [edx+esi] jmp .hash1 .tag_found: mov [.tagType], eax ; al = "=" or "]" mov esi, [tableBBtags + sizeof.TPHashItem * ecx + TPHashItem.pKeyname] test esi, esi jz .not_a_tag ; empty hash table cell. push ecx mov eax, ebx sub eax, edi ; the length of the tag movzx ecx, byte [esi-1] ; the length of the string in the hash table. cmp ecx, eax jne .not_a_tag_pop lea eax, [ebx+1] stdcall TextMoveGap, edx, eax ; the gap is after the tag, so, the offset and the position are the same. add edi, edx ; = pointer to the tag start. (edi contains the offset); xchg esi, edi .cmp_loop: dec ecx js .equal lodsb mov ah, al and ah, $40 shr ah, 1 or al, ah scasb je .cmp_loop jmp .not_a_tag_pop ; the strings are different, so it is a collision. Ignore. .equal: pop ecx ; the tag name is the same! mov eax, [tableBBtags + sizeof.TPHashItem * ecx + TPHashItem.Value] cmp [eax+TOneTag.pClose], 0 je .stack_ok ; no need to push to the stack tags without closing tag. push edx stdcall AddArrayItems, [.pStack], 1 mov [.pStack], edx mov [eax], ecx ; the last tag for close. pop edx .stack_ok: mov edi, ebx ; edi points one char before the attribute value or to the tag content value, depending on the tag type (with or without attribute). add edi, [edx+TText.GapEnd] sub edi, [edx+TText.GapBegin] .skip_ws1: inc edi cmp edi, [edx+TText.Length] jae .attr_here ; it is an empty attribute actually... cmp byte [edx+edi], 0 je .attr_here cmp byte [edx+edi], ' ' jbe .skip_ws1 .attr_here: add edi, [edx+TText.GapBegin] sub edi, [edx+TText.GapEnd] ; Here edi contains the position of the first non whitespace character of the attribute. ; Don't forget to increment it accordingly on inserting text before it. OutputValue "Open tag with hash=", ecx, 10, -1 mov eax, [edx+TText.GapBegin] sub eax, [.ofsStart] sub [edx+TText.GapBegin], eax ; delete the start of the tag. sub ebx, eax ; move ebx back, because of the deleted tag text. sub edi, eax mov eax, [tableBBtags + sizeof.TPHashItem * ecx + TPHashItem.Value] mov [.tagAddr], eax push [eax+TOneTag.flags] pop [.tagFlags] ; remove the last paragraph (if exists) if the tag is block tag: test [.tagFlags], fBlockTag jz @f mov ecx, [edx+TText.GapBegin] mov ecx, [edx+ecx-3] and ecx, $ffffff cmp ecx, '<p>' jne .clear_newline sub [edx+TText.GapBegin], 3 sub ebx, 3 sub edi, 3 jmp .clear_newline @@: cmp [.fNewLine], 1 jbe .copy_tag_prefix mov esi, [tagPara.pOpenP] mov ecx, [tagPara.lOpenP] add edi, ecx call .copy_tag .clear_newline: and [.fNewLine], 0 .copy_tag_prefix: mov esi, [eax+TOneTag.pOpenP] mov ecx, [eax+TOneTag.lOpenP] add edi, ecx call .copy_tag mov esi, [eax+TOneTag.pOpenS] mov ecx, [eax+TOneTag.lOpenS] test esi, esi jz .mono_open_tag ; the open tag consists of only one part, without attributes. cmp byte [.tagType], '=' je .process_attribute test [eax+TOneTag.flags], fEmptyAttr ; if the tag allows empty attribute, simply copy jnz .copy ; the tag suffix without trying to replace the attribute. ; here copy and encode the attribute value: .process_attribute: ; inc ebx push esi ecx [edx+TText.GapBegin] lea esi, [edi-1] mov [.tagMix], '<u >' mov eax, edi ; == esi+1 add eax, [edx+TText.GapEnd] sub eax, [edx+TText.GapBegin] ; eax = eax + (GapEnd - GapBegin) mov al, byte [edx+eax] mov [.char], al .attr_loop: inc esi mov eax, esi add eax, [edx+TText.GapEnd] sub eax, [edx+TText.GapBegin] ; eax = eax + (GapEnd - GapBegin) cmp eax, [edx+TText.Length] jae .end_of_attr2 movzx eax, byte [edx+eax] test al, al jz .end_of_attr2 cmp al, "]" je .end_of_attr1 cmp al, "[" je .end_of_attr2 ; check the mix flag test [.tagFlags], fMixedDist jz .mixed_ok xor [.char], al mov [.char], al jns .mixed_ok stdcall TextSetGapSize, edx, 4 mov edi, [edx+TText.GapBegin] pushd [.tagMix] popd [edx+edi] add [edx+TText.GapBegin], 4 add ebx, 4 add esi, 4 xor [.tagMix], '<u >' xor '</u>' .mixed_ok: ; encode with HTML encoding. test al, al ; all values > 127 are unicode and should not be encoded. js .store_char movzx eax, byte [tbl_html+eax] test al, al jz .attr_loop jns .store_char ; it is non-encodable character, just copy it. push esi lea esi, [eax+tbl_html] ; the address of the replacement string. lodsb movzx ecx, al ; length stdcall TextSetGapSize, edx, ecx mov edi, [edx+TText.GapBegin] add edi, edx add [edx+TText.GapBegin], ecx add ebx, ecx add [esp], ecx ; increase ESI that is in the stack right now. rep movsb pop esi jmp .attr_loop .store_char: stdcall TextSetGapSize, edx, 1 mov edi, [edx+TText.GapBegin] mov [edx+edi], al inc [edx+TText.GapBegin] inc ebx inc esi jmp .attr_loop .end_of_attr1: inc esi ; delete "]" add esi, [edx+TText.GapEnd] sub esi, [edx+TText.GapBegin] mov [edx+TText.GapEnd], esi .end_of_attr2: cmp [.tagMix], '</u>' jne .mix_closed stdcall TextSetGapSize, edx, 4 mov edi, [edx+TText.GapBegin] pushd [.tagMix] popd [edx+edi] add [edx+TText.GapBegin], 4 add ebx, 4 add esi, 4 xor [.tagMix], '<u >' xor '</u>' .mix_closed: pop edi ; the start [edx+TText.GapBegin] - this is the start of the copied attribute. test [.tagFlags], fURLAttribute jz .url_ok mov ecx, [edx+TText.GapBegin] sub ecx, edi add edi, edx sub ebx, ecx sub [edx+TText.GapBegin], ecx stdcall [.procSanitizeURL], edi, ecx push eax stdcall StrPtr, eax mov esi, eax mov ecx, [eax+string.len] stdcall TextSetGapSize, edx, ecx add ebx, ecx add [edx+TText.GapBegin], ecx rep movsb stdcall StrDel ; from the stack .url_ok: pop ecx esi .copy: call .copy_tag test [.tagFlags], fBlockTag jz .next mov [.fNewLine], NEW_PARAGRAPH_EMPTY_LINES ; after start of a block tag, the first text starts a paragraph. jmp .next .mono_open_tag: cmp byte [.tagType], '=' jne .next ; search the end of the attribute dec edi add edi, [edx+TText.GapEnd] sub edi, [edx+TText.GapBegin] ; edi = edi + (GapEnd - GapBegin) .attr_loop2: inc edi cmp edi, [edx+TText.Length] jae .end_of_attr3 cmp byte [edx+edi], 0 je .end_of_attr3 cmp byte [edx+edi], "]" jne .attr_loop2 inc edi .end_of_attr3: mov [edx+TText.GapEnd], edi jmp .next .closing_tag: .hash2: inc ebx mov esi, [edx+TText.GapEnd] cmp ebx, [edx+TText.GapBegin] cmovb esi, [edx+TText.GapBegin] sub esi, [edx+TText.GapBegin] add esi, ebx cmp esi, [edx+TText.Length] jae .not_a_tag mov al, [edx+esi] test al, al jz .not_a_tag cmp al, "]" je .close_here mov ah, al and ah, $40 shr ah, 1 or al, ah ; case insensitive hash. xor cl, al mov cl, [ tpl_func + ecx] jmp .hash2 .close_here: OutputValue "Closing tag with hash=", ecx, 10, -1 inc edi ; skip "/" char. mov esi, [tableBBtags + sizeof.TPHashItem * ecx + TPHashItem.pKeyname] test esi, esi jz .not_a_tag test [.tagFlags], fDisableTags jz .process_closing mov eax, [tableBBtags + sizeof.TPHashItem * ecx + TPHashItem.Value] cmp eax, [.tagAddr] jne .not_a_tag .process_closing: and [.tagFlags], 0 push ecx mov eax, ebx sub eax, edi ; the length of the tag movzx ecx, byte [esi-1] ; the length of the string in the hash table. cmp ecx, eax jne .not_a_closing_tag lea eax, [ebx+1] stdcall TextMoveGap, edx, eax ; the gap is after the tag, so, the offset and the position are the same. add edi, edx ; the pointer to the tag start. xchg esi, edi .cmp_loop2: dec ecx js .equal2 lodsb mov ah, al and ah, $40 shr ah, 1 or al, ah scasb je .cmp_loop2 .not_a_closing_tag: pop ecx jmp .not_a_tag ; the strings are different, so it is a collision. Ignore. .equal2: pop ecx ; the tag name is the same! mov eax, [edx+TText.GapBegin] sub eax, [.ofsStart] sub ebx, eax ; move ebx back, because of the deleted tag text. sub [edx+TText.GapBegin], eax ; delete the start of the tag. mov edi, [.pStack] mov eax, [edi+TArray.count] test eax, eax jz .next ; the stack is empty, so ignore the closing tag! .close_loop: dec eax js .error_stack push ecx mov esi, [edi+TArray.array + 4*eax] mov esi, [tableBBtags + sizeof.TPHashItem * esi + TPHashItem.Value] mov ecx, [esi+TOneTag.lClose] mov esi, [esi+TOneTag.pClose] call .copy_tag pop ecx cmp ecx, [edi+TArray.array + 4*eax] jne .close_loop mov [edi+TArray.count], eax jmp .next .error_stack: inc eax mov [edi+TArray.count], eax jmp .next .end_of_text: ; here, close all open tags and free the stack array. stdcall TextMoveGap, edx, ebx mov edi, [.pStack] mov eax, [edi+TArray.count] .closeall: dec eax js .finish mov esi, [edi+TArray.array + 4*eax] mov esi, [tableBBtags + sizeof.TPHashItem * esi + TPHashItem.Value] mov ecx, [esi+TOneTag.lClose] mov esi, [esi+TOneTag.pClose] call .copy_tag jmp .closeall .finish: stdcall FreeMem, edi mov [esp+4*regEDX], edx popad return .copy_tag: push edi stdcall TextSetGapSize, edx, ecx mov edi, [edx+TText.GapBegin] add edi, edx add [edx+TText.GapBegin], ecx add ebx, ecx rep movsb pop edi retn endp macro HtmlEntities name, [char, encoding] { common local ..tabl label ..tabl byte if used name label name byte db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 db $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c, $2d, $2e, $2f db $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $3a, $3b, $3c, $3d, $3e, $3f db $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $4a, $4b, $4c, $4d, $4e, $4f db $50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $5a, $5b, $5c, $5d, $5e, $5f db $60, $61, $62, $63, $64, $65, $66, $67, $68, $69, $6a, $6b, $6c, $6d, $6e, $6f db $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $7a, $7b, $7c, $7d, $7e, $7f forward local ..offs, ..name, ..len if encoding eqtype '' ..name db ..len, encoding ..len = $ - ..name - 1 ..offs = ..name - ..tabl else ..offs = encoding end if assert ..offs < 256 forward local ..char, ..ascii virtual at 0 ..char db char load ..ascii byte from ..char end virtual assert ..ascii < 128 store byte ..offs at ..tabl + ..ascii common end if DispSize "HTML entities table:", $-..tabl } iglobal HtmlEntities tbl_html, \ $09, $0d, \ $0a, $0a, \ $0d, $0d, \ '<', '<', \ '>', '>', \ '"', '"', \ "'", ''', \ '&', '&' endg endmodule |
Added freshlib/data/bitstream.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Dynamic bit streams library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Based on works of Mateusz Tymek. ;_________________________________________________________________________________________ module "BitStream" ;struct TBitStream2 ; .dwLength dd ? ; length of the stream in dwords ; .dwCurrent dd ? ; current bit dword. ; ; .bitLength db ? ; remainder of length in bits [0..31] ; .bitCurrent db ? ; current bit number [0..31] ; rb 2 ; align ; ; .capacity dd ? ; capacity in dwords ; label .data dword ;ends struct TBitStream .bitLength dd ? ; length of the stream data in bits. .capacity dd ? ; in dword .biCurrent dd ? ; current bit index... .lparam dd ? ; user defined value. label .data dword ends ; creates bits stream and returns pointer ; free it with FreeMem proc BitsCreate, .length begin push ecx mov ecx, [.length] add ecx, 3 and ecx, $fffffffc add ecx, sizeof.TBitStream stdcall GetMem, ecx jc .finish sub ecx, sizeof.TBitStream shr ecx, 2 ; length in dwords. mov [eax+TBitStream.capacity], ecx clc .finish: pop ecx return endp ; puts given number of bits into stream ; returns in EAX the address of the ; stream. It can be changed if the stream was resized. proc BitsPut, .pStream, .bits, .bit_count begin pushad and [.bit_count], $1f ; max of 32 bits at once. mov ebx, [.pStream] ; provide some room first: mov ecx, [ebx+TBitStream.biCurrent] shr ecx, 5 ; dword index add ecx, 2 ; at least two dword reserve. cmp ecx, [ebx+TBitStream.capacity] jbe .sizeok call [ResizeIt] mov edx, ecx shl ecx, 2 ; in bytes add ecx, sizeof.TBitStream stdcall ResizeMem, ebx, ecx jc .error ; can't be resized; the stream buffer is full mov ebx, eax mov [ebx+TBitStream.capacity], edx .sizeok: ; generate mask in edi:esi xor eax, eax dec eax mov esi, eax mov edi, eax mov ecx, [.bit_count] shl esi, cl mov ecx, [ebx+TBitStream.biCurrent] and ecx, $1f shld edi, esi, cl shld esi, eax, cl ; load new bits into edx:ecx; at this point ecx == [ebx+TBitStream.bitCurrent] xor edx, edx mov eax, [.bits] shld edx, eax, cl shl eax, cl mov ecx, eax ; finally, store new bits using mov eax, [ebx+TBitStream.biCurrent] shr eax, 5 and [ebx+TBitStream.data+4*eax], esi or [ebx+TBitStream.data+4*eax], ecx inc eax and [ebx+TBitStream.data+4*eax], edi or [ebx+TBitStream.data+4*eax], edx ; and fix the pointers .done: mov eax, [.bit_count] add eax, [ebx+TBitStream.biCurrent] cmp eax, [ebx+TBitStream.bitLength] jbe @f mov [ebx+TBitStream.bitLength], eax @@: mov [ebx+TBitStream.biCurrent], eax .finish: mov [esp+4*regEAX], ebx clc popad return .error: popad stc return endp ; reads given number of bits form the stream proc BitsGet, .pStream, .bit_count begin pushad and [.bit_count], $1f ; generate mask (in esi) xor esi, esi dec esi mov ecx, [.bit_count] shl esi, cl not esi mov ebx, [.pStream] mov eax, [ebx+TBitStream.biCurrent] mov edx, [.bit_count] add edx, eax cmp edx, [ebx+TBitStream.bitLength] ja .error mov ecx, eax shr eax, 5 and ecx, $1f mov edx, [ebx+TBitStream.data+4*eax+4] mov eax, [ebx+TBitStream.data+4*eax] shrd eax, edx, cl and eax, esi ; update the current position mov edx, [.bit_count] add [ebx+TBitStream.biCurrent], edx mov [esp+4*regEAX], eax popad clc return .error: popad stc return endp proc BitsSkipToByte, .pStream begin mov eax, [.pStream] add [eax+TBitStream.biCurrent], 7 and [eax+TBitStream.biCurrent], $fffffff8 mov eax, [eax+TBitStream.biCurrent] shr eax, 3 return endp ; returns the pointer at the begining of the requested block in EAX ; returns the stream pointer in EDX (it can be changed on reallocation) proc BitsGetRoom, .pStream, .room begin push ebx ecx mov edx, [.pStream] mov ebx, [edx+TBitStream.biCurrent] add ebx, 7 and ebx, $fffffff8 shr ebx, 3 ; index in bytes. mov ecx, [edx+TBitStream.capacity] shl ecx, 2 ; capacity in bytes. mov eax, [.room] add eax, ebx ; the total size needed cmp eax, ecx jbe .sizeok mov ecx, eax call [ResizeIt] ; align to dword add ecx, 3 and ecx, $fffffffc lea eax, [ecx+sizeof.TBitStream] stdcall ResizeMem, edx, eax jc .error ;.finish ; CF=1 shr ecx, 2 mov edx, eax mov [eax+TBitStream.capacity], ecx mov eax, [.room] .sizeok: mov eax, [.room] add eax, ebx lea eax, [8*eax] mov [edx+TBitStream.biCurrent], eax cmp eax, [edx+TBitStream.bitLength] jbe @f mov [edx+TBitStream.bitLength], eax @@: lea eax, [edx+ebx+sizeof.TBitStream] clc .finish: pop ecx ebx return .error: int3 jmp .finish endp ; returns the current size (in bytes) of the given stream proc BitsGetSize, .pStream begin mov eax, [.pStream] mov eax, [eax+TBitStream.bitLength] add eax, $7 shr eax, 3 return endp proc BitsLoadFromFile, .ptrFileName begin push esi edi ebx stdcall FileOpen, [.ptrFileName] jc .error mov edi, eax stdcall FileSize, edi jc .errorclose mov ebx, eax lea ecx, [eax+3] and ecx, $fffffffc lea ecx, [eax+8+sizeof.TBitStream] ; It is for the case that the file is ; text and we want to use it as null terminated ; string. stdcall GetMem, ecx jc .errorclose mov esi, eax mov eax, ebx mov ecx, ebx shl eax, 3 ; bit length lea ecx, [eax+3] shr ecx, 2 ; capacity in dword; mov [esi + TBitStream.bitLength], eax mov [esi + TBitStream.capacity], ecx lea eax, [esi+TBitStream.data] stdcall FileRead, edi, eax, ebx jc .errorclosemem mov ecx, eax stdcall FileClose, edi mov eax, esi clc pop ebx edi esi return .errorclosemem: stdcall FreeMem, esi .errorclose: push eax stdcall FileClose, edi pop eax .error: xor ecx, ecx stc pop ebx edi esi return endp endmodule |
Added freshlib/data/buffergap.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TText structure and handling library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: TText is so called "buffer gap" method of editing text information. ; it allows fast insert and delete operations. ;_________________________________________________________________________________________ module "Buffer gap engine" gapDefaultSize = 4096 ; 256 ; There are 3 coordinate systems in the TText structure: ; ; 1. "Offset" - this is simple offset inside the memory, relative to the begining of the structure. ; ; 2. "Position" - this is the coordinate of the bytes in the buffer, excluding the gap (which can be placed anywhere in the text). ; ; 3. "Index" - character position - the coordinate of a character in the text buffer. In the case the buffer contains only ANSI characters index=pos; ; In the case when the buffer contains UTF-8 characters, the relation is not so direct and has to be computed for every character. ; This coordinate is not easy to be calculated, but it is rarely needed. ; ; The structure TText is backward structure. All members has negative offsets and the ; pointer to the structure points to its end, not to the start. ; ; The structure has fixed header and variable, dynamically changed length. ; All the text in the structure has positive offsets and all the header fields, negative. rstruct TText .Length dd ? ; The total length of the buffer in bytes .GapBegin dd ? ; In offset units. .GapEnd dd ? ; In offset units. .struc_size dd ? ; the size of the structure (it can be extended up). label . byte ; the text in UTF-8 encoding. ends proc TextIndexToPos, .pText, .index begin pushad mov esi, [.pText] xor edx, edx mov ebx, [.index] .loop: dec ebx js .finish mov eax, [esi+TText.GapBegin] cmp edx, eax cmovae eax, [esi+TText.GapEnd] sub eax, [esi+TText.GapBegin] add eax, edx cmp eax, [esi+TText.Length] jae .error movzx eax, byte [esi+eax] ; compute the length of the UTF-8 character by its first byte (version without branches) Is it fast? not al ; utf-8 starts with one of: 0xxxxxxx, 110xxxxx, 1110xxxx, 11110xxx, 111110xx, 1111110x bsr eax, eax ; eax = 7, 5, 4, 3, 2, 1 sub eax, 7 ; eax = 0, -2, -3, -4, -5, -6 ; CF = 0, 1, 1, 1, 1, 1 not eax ; eax = -1, +1, +2, +3, +4, +5 sbb eax, -2 ; eax = edx + 2 - CF = +1, +2, +3, +4, +5, +6 add edx, eax jmp .loop .finish: mov [esp+4*regEAX], edx clc popad return .error: mov eax, [esi+TText.Length] sub eax, [esi+TText.GapEnd] add eax, [esi+TText.GapBegin] mov [esp+4*regEAX], eax stc popad return endp proc TextPosToIndex, .pText, .Pos begin pushad mov edx, [.pText] mov ecx, [.Pos] mov eax, [edx+TText.Length] sub eax, [edx+TText.GapEnd] add eax, [edx+TText.GapBegin] cmp ecx, eax cmova ecx, eax xor ebx, ebx .loop: dec ecx js .finish mov esi, [edx+TText.GapEnd] cmp ecx, [edx+TText.GapBegin] cmovb esi, [edx+TText.GapBegin] sub esi, [edx+TText.GapBegin] add esi, ecx mov al, [edx+esi] and al, 11000000b cmp al, 10000000b je .loop inc ebx jmp .loop .finish: mov [esp+4*regEAX], ebx popad return endp ; Converts from text position (in bytes) to buffer position (in bytes). ; returns CF=1 if the position is outside the text. ; the returned position is relative to the text start. ; ; esi == .buffer; eax = .pos ; ; If eax is above the size of the text, the position of the buffer end is returned. ; All positions are unsigned, so passing eax = $ffffffff will return the end of the ; data in the buffer. ; ; See also the pos2ofs macro. Because of the simple operation it is better to use it ; or even explicit processing. proc TextPosToOffset, .pText, .pos begin push ebx mov eax, [.pos] mov ebx, [.pText] cmp eax, [ebx+TText.GapBegin] jb @f add eax, [ebx+TText.GapEnd] sub eax, [ebx+TText.GapBegin] @@: cmp eax, [ebx+TText.Length] cmova eax, [ebx+TText.Length] pop ebx return endp macro pos2ofs pos, text { local ..skip if pos eqtype eax & text eqtype eax cmp pos, [text+TText.GapBegin] jb ..skip add pos, [text+TText.GapEnd] sub pos, [text+TText.GapBegin] ..skip: cmp pos, [text+TText.Length] ; ????????? cmova pos, [text+TText.Length] ; ????????? else error "Error! Arguments must be registers!" err end if } ; Converts from buffer offset to the text position. ; Arguments: ; .pText: points to the TText strucure, eax is the offset ; .offs: offset in bytes. ; ; if the buffer offset is placed inside the gap, the start of the gap is returned. ; ; See also ofs2pos macro. Very often it is better to use the macro or explicit processing, ; instead of procedure call, because the operation is very simple. proc TextOffsetToPos, .pText, .offs begin push ebx mov eax, [.offs] mov ebx, [.pText] cmp eax, [ebx+TText.Length] cmova eax, [ebx+TText.Length] cmp eax, [ebx+TText.GapBegin] jb .finish add eax, [ebx+TText.GapEnd] sub eax, [ebx+TText.GapBegin] cmp eax, [ebx+TText.GapBegin] cmovb eax, [ebx+TText.GapBegin] .finish: pop ebx return endp macro ofs2pos ofs, text { local ..skip if ofs eqtype eax & text eqtype eax cmp ofs, [text+TText.Length] cmova ofs, [text+TText.Length] cmp ofs, [text+TText.GapBegin] jb ..skip add ofs, [text+TText.GapBegin] sub ofs, [text+TText.GapEnd] cmp ofs, [text+TText.GapBegin] cmovb ofs, [text+TText.GapBegin] ..skip: else error "Error! Arguments must be registers!" err end if } ; Moves the gap to the desired position. ; Arguments: ; .pText - pointer to the TText ; .position - position of the gap in position units. ; Returns: ; Nothing ; ; This operation can't fail. Preserves all registers. proc TextMoveGap, .pText, .position begin pushad mov edx, [.pText] mov ecx, [.position] mov eax, [edx+TText.Length] mov edi, [edx+TText.GapBegin] mov esi, [edx+TText.GapEnd] sub eax, esi add eax, edi cmp ecx, eax cmova ecx, eax ; the maximal possible position for the gap. sub ecx, edi ; [edx+TText.GapBegin] ; ecx is the distance to move the gap. jz .finish ; source and destination are the same - no move. add [edx+TText.GapBegin], ecx add [edx+TText.GapEnd], ecx cmp esi, edi je .finish ; the gap length is 0 nothing to move add edi, edx add esi, edx test ecx, ecx js .move_back push ecx shr ecx, 2 rep movsd pop ecx and ecx, 3 rep movsb .finish: ; fill the gap with placeholder char in order to make debug easy! It lowers the performance a lot!!! if defined options.DebugMode & options.DebugMode call __fill_the_gap end if popad return .move_back: std neg ecx xchg esi, edi dec esi dec edi push ecx and ecx, 3 rep movsb sub esi, 3 sub edi, 3 pop ecx shr ecx, 2 rep movsd cld jmp .finish endp proc __fill_the_gap begin push edi ecx eax mov edi, [edx+TText.GapBegin] mov ecx, [edx+TText.GapEnd] sub ecx, edi add edi, edx mov al, '*' rep stosb pop eax ecx edi return endp proc TextCreate, .struc_size begin push ecx mov ecx, [.struc_size] mov eax, ecx add eax, gapDefaultSize stdcall GetMem, eax jc .finish lea eax, [eax+ecx] mov [eax+TText.struc_size], ecx xor ecx, ecx mov [eax+TText.GapBegin], ecx mov [eax+TText.GapEnd], gapDefaultSize mov [eax+TText.Length], gapDefaultSize .finish: pop ecx return endp ;--------------------------------------------------------------------------------- ; Duplicates TText structure of any size. Returns pointer to the structure in EAX ; The returned pointer have to be freed with TextFree when not needed anymore. ; ; Arguments: ; .pText - pointer to the source structure ; ; Returns: ; CF = 0 if everithing is OK. In this case EAX is a pointer to the new TText structure. ; CF = 1 if there is an error. The TText is not duplicated and EAX contains the value ; before the call. ;--------------------------------------------------------------------------------- proc TextDup, .pText begin pushad mov esi, [.pText] test esi, esi stc jz .finish mov ecx, [esi+TText.Length] add ecx, [esi+TText.struc_size] stdcall GetMem, ecx jc .finish mov edi, eax mov edx, [esi+TText.struc_size] add eax, edx mov [esp+4*regEAX], eax sub esi, edx mov ebx, ecx shr ecx, 2 and ebx, 3 rep movsd mov ecx, ebx rep movsb clc .finish: popad return endp proc TextFree, .pText begin push eax mov eax, [.pText] test eax, eax jz .exit sub eax, [eax+TText.struc_size] stdcall FreeMem, eax .exit: pop eax return endp ; Ensures that the gap size is at least [.desired_size] bytes long. ; If needed, reallocates the TText ; ; In order to provide less frequent reallocations, the procedure ; always allocates bigger gap than requested. ; max([.desired_size]*2, gapDefaultSize) memory is allocated, ; if the buffer is to be reallocated. ; ; Arguments: ; .pText - pointer to TText ; .desired_size - desired size of the gap. ; ; Returns ; edx - pointer to the same TText. Can be changed because of memory reallocation. ; CF = 0 if OK ; CF = 1 if the memory reallocation failed. ; proc TextSetGapSize, .pText, .desired_size begin pushad mov edx, [.pText] mov ecx, [.desired_size] mov eax, [edx+TText.GapEnd] sub eax, [edx+TText.GapBegin] cmp eax, ecx jae .finish ; CF==0 lea ecx, [2*ecx] mov eax, gapDefaultSize cmp ecx, eax cmovl ecx, eax ; ecx is the new gap size here. mov ebx, [edx+TText.Length] ; current data size. text+gap add ebx, [edx+TText.GapBegin] sub ebx, [edx+TText.GapEnd] add ebx, ecx add ebx, [edx+TText.struc_size] ; the new buffer size. it will always be higher than the current. add ebx, $0000000f and ebx, $fffffff0 push [edx+TText.struc_size] sub edx, [edx+TText.struc_size] stdcall ResizeMem, edx, ebx pop edx lea edx, [edx+eax] jc .finish ; well, it is just an error, but how to proceed? sub ebx, [edx+TText.struc_size] ; total size of the buffer lea edi, [edx+ebx] xchg ebx,[edx+TText.Length] ; ebx is now the old buffer length. lea esi, [edx+ebx] ; the space is allocated and there are 2 gaps. So, merge them now. The new gap is always at the end. ; the size of the new gap is mov ecx, ebx sub ecx, [edx+TText.GapEnd] std dec esi dec edi push ecx and ecx, 3 rep movsb sub esi, 3 sub edi, 3 pop ecx shr ecx, 2 rep movsd cld sub edi, edx add edi, 4 mov [edx+TText.GapEnd], edi clc .finish: mov [esp+4*regEDX], edx ; fill the gap with placeholder char in order to make debug easy! It lowers the performance a lot!!! if defined options.DebugMode & options.DebugMode call __fill_the_gap end if popad return endp ; Inserts on the current gap position up to 4 bytes of character data. ; They can be 4 ANSI characters, or one 4 byte encoded UTF-8 or ; two 2-byte encoded UTF-8, one ASCII and one 2 byte UTF-8 and so on. ; ; .pText - pointer to the TText, ; .char - from 0 to 4 bytes character data. proc TextAddChar, .pText, .char begin push eax ecx mov edx, [.pText] stdcall TextSetGapSize, edx, 8 jc .finish mov eax, [edx+TText.GapBegin] pushd 0 [.char] popd [edx+eax] [edx+eax+4] mov ecx, 4 .len_loop: cmp byte [edx+eax], 0 je .len_ok inc eax loop .len_loop .len_ok: mov [edx+TText.GapBegin], eax clc .finish: pop ecx eax return endp ; Deletes one UTF-8 character at the current gap position. ; esi - pointer to TText ; returns CF = 0 if the character was deleted. ; returns CF = 1 if the operation was not provided, because the GapEnd is at the end of the text. proc TextDelChar, .pText begin push eax edx mov edx, [.pText] mov eax, [edx+TText.GapEnd] cmp eax, [edx+TText.Length] jae .no_op movzx eax, byte [edx+eax] ; compute the length of the UTF-8 character by its first byte (version without branches) Is it fast? not al ; utf-8 starts with one of: 0xxxxxxx, 110xxxxx, 1110xxxx, 11110xxx, 111110xx, 1111110x bsr eax, eax ; eax = 7, 5, 4, 3, 2, 1 sub eax, 7 ; eax = 0, -2, -3, -4, -5, -6 ; CF = 0, 1, 1, 1, 1, 1 not eax ; eax = -1, +1, +2, +3, +4, +5 sbb eax, -2 ; eax = eax + 2 - CF = +1, +2, +3, +4, +5, +6 add [edx+TText.GapEnd], eax clc pop edx eax return .no_op: stc pop edx eax return endp ; returns eax - the character in utf-8 ; edx - the length of the char in bytes. ; CF = 1 if the gap is after the text. proc TextGetChar, .pText begin pushad mov esi, [.pText] mov eax, [esi+TText.GapEnd] cmp eax, [esi+TText.Length] cmc ; jc .finish ; == jae, but CF == 1 movzx edx, byte [esi+eax] mov eax, dword [esi+eax] ; compute the length of the UTF-8 character by its first byte (version without branches) Is it fast? not dl ; utf-8 starts with one of: 0xxxxxxx, 110xxxxx, 1110xxxx, 11110xxx, 111110xx, 1111110x bsr edx, edx ; edx = 7, 5, 4, 3, 2, 1 sub edx, 7 ; edx = 0, -2, -3, -4, -5, -6 ; CF = 0, 1, 1, 1, 1, 1 not edx ; edx = -1, +1, +2, +3, +4, +5 sbb edx, -2 ; edx = edx + 2 - CF = +1, +2, +3, +4, +5, +6 lea ecx, [8*edx] xor ebx, ebx dec ebx shl ebx, cl not ebx and eax, ebx mov [esp+4*regEAX], eax mov [esp+4*regEDX], edx .finish: popad return endp ; Inserts a string in the TText structure ; which can be pointer to NULL terminated string or ; string handle. ; ; Arguments: ; .pText - pointer to the TText structure ; .position - position where the string to be inserted. ; .hString - pointer or handle of string to be inserted. ; Returns: ; edx: pointer to TText structure. Can be changed because of reallocations. ; eax: length of the string added. proc TextAddString, .pText, .position, .hString begin pushad mov edx, [.pText] stdcall StrLen, [.hString] mov ecx, eax mov ebx, eax stdcall StrPtr, [.hString] mov esi, eax stdcall TextSetGapSize, edx, ecx jc .finish stdcall TextMoveGap, edx, [.position] mov edi, [edx+TText.GapBegin] add edi, edx shr ecx, 2 rep movsd mov ecx, ebx and ecx, 3 rep movsb add [edx+TText.GapBegin], ebx .finish: mov [esp+4*regEAX], ebx mov [esp+4*regEDX], edx popad return endp proc TextAddStr2, .pText, .position, .hString, .maxLength begin pushad mov edx, [.pText] mov eax, [.hString] cmp eax, [StrHandleOffs] jb .proceed cmp eax, [StrHandleEnd] jae .proceed stdcall StrLen, [.hString] mov [.maxLength], eax stdcall StrPtr, [.hString] .proceed: mov esi, eax add [.maxLength], 4 ; some reserve stdcall TextSetGapSize, edx, [.maxLength] jc .finish stdcall TextMoveGap, edx, [.position] mov edi, [edx+TText.GapBegin] add edi, edx .copy_loop: lodsd stosd mov ebx, eax not eax sub ebx, $01010101 and eax, ebx and eax, $80808080 jz .copy_loop xor eax, eax sub edi, 5 .final_loop: inc edi cmp [edi], al jne .final_loop sub edi, edx sub edi, [edx+TText.GapBegin] add [edx+TText.GapBegin], edi clc mov [esp+4*regEAX], edi .finish: mov [esp+4*regEDX], edx popad return endp proc TextAddBytes, .pText, .position, .pData, .DataLen begin pushad mov edx, [.pText] mov esi, [.pData] stdcall TextSetGapSize, edx, [.DataLen] jc .finish stdcall TextMoveGap, edx, [.position] mov edi, [edx+TText.GapBegin] add edi, edx mov ebx, [.DataLen] mov ecx, ebx shr ecx, 2 rep movsd mov ecx, ebx and ecx, 3 rep movsb add [edx+TText.GapBegin], ebx .finish: mov [esp+4*regEDX], edx popad return endp proc TextAddText, .pText, .position, .pTextSrc begin pushad mov edx, [.pText] mov ebx, [.pTextSrc] mov ecx, [ebx+TText.Length] sub ecx, [ebx+TText.GapEnd] add ecx, [ebx+TText.GapBegin] ; total length mov [esp+4*regEAX], ecx stdcall TextSetGapSize, edx, ecx stdcall TextMoveGap, edx, [.position] mov edi, edx mov esi, ebx add edi, [edx+TText.GapBegin] mov eax, [ebx+TText.GapBegin] mov ecx, eax and eax, 3 shr ecx, 2 rep movsd mov ecx, eax rep movsb mov eax, [ebx+TText.Length] mov esi, ebx sub eax, [ebx+TText.GapEnd] add esi, [ebx+TText.GapEnd] mov ecx, eax and eax, 3 shr ecx, 2 rep movsd mov ecx, eax rep movsb sub edi, edx mov [edx+TText.GapBegin], edi mov [esp+4*regEDX], edx popad return endp ; Moves the gap to the end of the text and if possible inserts byte 0 after it, so ; the buffer can be used as an ASCIIZ string. ; returns the length of the string in eax and the pointer to the TText object in edx (it can be changed!) proc TextCompact, .pText begin mov edx, [.pText] stdcall TextMoveGap, edx, -1 stdcall TextSetGapSize, edx, 4 mov eax, [edx+TText.GapBegin] ; the length of the text. and dword [edx+eax], 0 return endp tsfCaseIgnore = 0 tsfCaseSensitive = 1 ; Returns the prepared index table for the substring search algorithm. ; After use need to be freed by FreeMem. ; The Knuth-Morris-Pratt prefix function is used. proc TextPrepareSearch, .hSubstr, .flags begin pushad stdcall StrPtr, [.hSubstr] mov esi, eax stdcall StrLen, [.hSubstr] shl eax, 2 stdcall GetMem, eax mov edi, eax mov [esp + 4*regEAX], eax xor ebx, ebx ; i xor edx, edx ; j mov [edi], ebx ; pf[0] = 0 .loop: inc ebx mov al, [esi+ebx] ; s[i] test al, al jz .finish test [.flags], tsfCaseSensitive jnz .inner and al, $40 shr al, 1 or al, [esi+ebx] ; locase(s[i]) .inner: mov ah, [esi+edx] test [.flags], tsfCaseSensitive jnz .case_ok and ah, $40 shr ah, 1 or ah, [esi+edx] ; locase(s[j]) .case_ok: test edx, edx jz .nexti ; j == 0 cmp al, ah ; s[i] == s[j]? je .nexti ; == mov edx, [edi + 4*edx - 4] ; j = pf[j-1] jmp .inner .nexti: cmp al, ah ; s[i] == s[j]? lea eax, [edx + 1] cmove edx, eax ; if s[i] == s[j] j++ mov [edi + 4*ebx], edx ; pf[i] = j jmp .loop .finish: popad return endp ; Searches a substring in the TText, starting from position .From. ; Returns the substring Position ; Knuth-Morris-Pratt search is implemented. ; For the index - call TextPrepareSearch procedure. proc TextSearch, .pText, .hSubstr, .From, .pIndex, .flags .slen dd ? begin pushad mov edx, [.pText] mov edi, [.pIndex] stdcall StrLen, [.hSubstr] mov [.slen], eax stdcall StrPtr, [.hSubstr] mov esi, eax mov ebx, [.From] ; i xor ecx, ecx ; j dec ebx .loop: inc ebx cmp ebx, [edx+TText.GapBegin] jb .iok cmp ebx, [edx+TText.GapEnd] jae .iok add ebx, [edx+TText.GapEnd] sub ebx, [edx+TText.GapBegin] .iok: cmp ebx, [edx+TText.Length] jae .not_found mov al, [edx+ebx] ; s[i] test [.flags], tsfCaseSensitive jnz .inner and al, $40 shr al, 1 or al, [edx+ebx] ; locase(s[i]) .inner: mov ah, [esi+ecx] ; p[j] test [.flags], tsfCaseSensitive jnz .case_ok and ah, $40 shr ah, 1 or ah, [esi+ecx] ; loCase(p[j]) .case_ok: jecxz .nexti cmp al, ah je .nexti mov ecx, [edi+4*ecx-4] ; j = pf[j-1] jmp .inner .nexti: cmp al, ah ; s[i] == p[j] lea eax, [ecx+1] cmove ecx, eax ; j++ if s[i] == p[j] cmp ecx, [.slen] jb .loop ; found inc ebx sub ebx, ecx cmp ebx, [edx+TText.GapBegin] jb .pos_ok sub ebx, [edx+TText.GapEnd] add ebx, [edx+TText.GapBegin] .pos_ok: mov [esp+4*regEAX], ebx stc popad return .not_found: clc popad return endp proc TextDebugInfo, .pText, .hLabel begin pushad mov esi, [.pText] stdcall FileWriteString, [STDOUT], [.hLabel] stdcall FileWriteString, [STDOUT], <txt 13, 10, "START OF INFO BLOCK ==============================", 13, 10> stdcall FileWriteString, [STDOUT], txt "TText content length: " stdcall NumToStr, [esi+TText.Length], ntsUnsigned or ntsDec push eax stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack. stdcall FileWriteString, [STDOUT], <txt "bytes", 13, 10> stdcall FileWriteString, [STDOUT], txt "Text length: " mov eax, [esi+TText.Length] sub eax, [esi+TText.GapEnd] add eax, [esi+TText.GapBegin] stdcall NumToStr, eax, ntsUnsigned or ntsDec push eax stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack. stdcall FileWriteString, [STDOUT], <txt "bytes", 13, 10> stdcall FileWriteString, [STDOUT], txt "Gap begin: " stdcall NumToStr, [esi+TText.GapBegin], ntsUnsigned or ntsDec push eax stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack. stdcall FileWriteString, [STDOUT], txt ", end: " stdcall NumToStr, [esi+TText.GapEnd], ntsUnsigned or ntsDec push eax stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack. stdcall FileWriteString, [STDOUT], <txt 13, 10, 13, 10> stdcall FileWriteString, [STDOUT], <txt "The text before gap: ", 13, 10, ">>>>"> cmp [esi+TText.GapBegin], 0 jle @f stdcall FileWrite, [STDOUT], esi, [esi+TText.GapBegin] @@: stdcall FileWriteString, [STDOUT], <txt "<<<<", 13, 10, 13, 10, "The text after the gap:", 13, 10, ">>>>"> mov ecx, [esi+TText.Length] mov eax, [esi+TText.GapEnd] add eax, esi sub ecx, [esi+TText.GapEnd] jle @f stdcall FileWrite, [STDOUT], eax, ecx @@: stdcall FileWriteString, [STDOUT], <txt "<<<<", 13, 10, 13, 10> stdcall FileWriteString, [STDOUT], <txt 13, 10, "END OF INFO BLOCK ==============================", 13, 10> popad return endp endmodule |
Added freshlib/data/bytestream.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Dynamic byte streams library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Based on works of Mateusz Tymek. ;_________________________________________________________________________________________ module "ByteStream" struct TByteStream .capacity dd ? .size dd ? .offset dd ? .lparam dd ? label .data byte ends ; creates byte stream and returns pointer ; free it with FreeMem proc BytesCreate, .length begin push ecx mov ecx, [.length] add ecx, sizeof.TByteStream stdcall GetMem, ecx jc .finish sub ecx, sizeof.TByteStream mov [eax+TByteStream.capacity], ecx clc .finish: pop ecx return endp ; returns the pointer at the begining of the requested block in EDI ; returns the stream pointer in EBX (it can be changed on reallocation) proc BytesGetRoom, .pStream, .room begin push eax ecx edx mov ebx, [.pStream] mov edi, [ebx+TByteStream.offset] mov edx, [.room] add edx, edi ; the total size needed cmp edx, [ebx+TByteStream.capacity] jbe .sizeok lea ecx, [2*edx] lea eax, [ecx+sizeof.TByteStream] stdcall ResizeMem, ebx, eax jc .finish ; CF=1 mov ebx, eax mov [eax+TByteStream.capacity], ecx .sizeok: mov [ebx+TByteStream.offset], edx cmp edx, [ebx+TByteStream.size] jbe @f mov [ebx+TByteStream.size], edx @@: lea edi, [edi+ebx+sizeof.TByteStream] clc .finish: pop edx ecx eax return endp proc BytesLoadFromFile, .ptrFileName begin push esi edi ebx ecx stdcall FileOpen, [.ptrFileName] jc .error mov edi, eax stdcall FileSize, edi jc .errorclose mov ebx, eax lea ecx, [eax+8+sizeof.TByteStream] ; It is for the case that the file is ; text and we want to use it as null terminated ; string. stdcall GetMem, ecx jc .errorclose mov esi, eax mov eax, ebx mov [esi + TByteStream.size], ebx mov [esi + TByteStream.capacity], ebx lea eax, [esi+TByteStream.data] stdcall FileRead, edi, eax, ebx jc .errorclosemem stdcall FileClose, edi mov eax, esi clc pop ecx ebx edi esi return .errorclosemem: stdcall FreeMem, esi .errorclose: push eax stdcall FileClose, edi pop eax .error: stc pop ecx ebx edi esi return endp endmodule |
Added freshlib/data/counter_array.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Sorted counter array. ; ; Target OS: Any ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ module "Value counter array library" struct TCounter .value dd ? .count dd ? ends ; returns: ; edx - the new pointer to the array. ; eax - pointer to the element incremented. proc IncCount, .pArray, .value begin mov edx, [.pArray] stdcall __SearchCountArray, edx, [.value] jc .add_new lea eax, [edx+TArray.array+sizeof.TCounter*eax] inc [eax+TCounter.count] js .error return .add_new: stdcall InsertArrayItems, edx, eax, 1 push [.value] pop [eax+TCounter.value] mov [eax+TCounter.count], 1 return .error: int3 return endp ; returns: ; edx - the new pointer to the array. ; eax - pointer to the element incremented or NULL, if the element has been deleted from the array. proc DecCount, .pArray, .value begin push ecx mov edx, [.pArray] stdcall __SearchCountArray, edx, [.value] jc .error ; can't decrement not existing element! lea ecx, [edx+TArray.array+sizeof.TCounter*eax] dec [ecx+TCounter.count] js .error jnz .finish stdcall DeleteArrayItems, edx, eax, 1 xor ecx, ecx .finish: mov eax, ecx pop ecx return .error: int3 jmp .finish endp ; binary search [.value] in the array. ; returns: ; eax, the index where the element has been found or the index where the element has to be inserted, if not found ; CF = 0 - element has been found. ; CF = 1 - element not found. proc __SearchCountArray, .pArray, .value begin pushad mov esi, [.pArray] xor eax, eax xor ecx, ecx ; left mov edx, [esi+TArray.count] ; right dec edx js .not_found mov ebx, [.value] .loop: cmp edx, ecx jl .not_found lea eax, [ecx+edx] sar eax, 1 cmp ebx, [esi+TArray.array+ sizeof.TCounter*eax+TCounter.value] je .found ja .goto_right ; goto left lea edx, [eax-1] jmp .loop .goto_right: inc eax mov ecx, eax jmp .loop .found: clc .finish: mov [esp+4*regEAX], eax popad return .not_found: stc jmp .finish endp endmodule |
Added freshlib/data/deflate.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Deflate uncompress library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ module "Deflate" DEFLATE_MAX_BITS = 15 DEFLATE_SIZE_LEN_TREE = 320*2 DEFLATE_SIZE_DIST_TREE = 32*2 DEFLATE_SIZE_LL_TREE = 32*2 DEFLATE_SIZE_LEN_BUF = 300+300 ; Decompress the block in memory. ; Arguments: ; .pDest points to a buffer of type TBitStream for the uncompressed data. ; .pSrc points to a source memory buffer. ; .bitOffs bit offset of the start of the stream, related to [.pSrc]. ; .srcCount byte size of the source buffer, measured from [.pSrc]. ; ; Returns: ; CF=0; The stream is decompressed without errors. ; ; CF=1: There was error on decompression, because of malformed stream or memory ; allocations. ; ; EAX: Pointer to the destination stream. (It can be changed on reallocations) ; ; NOTE: Even on error, the stream can be partially decompressed in the destination ; stream; ; proc Inflate, .pDest, .dstCount, .pSrc, .srcCount .len_tree rd DEFLATE_SIZE_LEN_TREE .dist_tree rd DEFLATE_SIZE_DIST_TREE .ll_tree rd DEFLATE_SIZE_LL_TREE .lengths rb DEFLATE_SIZE_LEN_BUF .final dd ? .pEndSrc dd ? .pEndDst dd ? .pCurrent dd ? .p_lengths_end dd ? .LLCount dd ? .DCount dd ? .b_type dd ? begin pushad mov eax, [.pDest] mov [.pCurrent], eax add eax, [.dstCount] mov [.pEndDst], eax ; prepare the stream pointers. mov esi, [.pSrc] mov eax, esi add eax, [.srcCount] mov [.pEndSrc], eax mov ch, $10 mov eax, [esi] .main_loop: ; read 1 bit header BFINAL mov [.final], eax shr eax, 1 and [.final], 1 dec ch jnz @f add esi, 2 cmp esi, [.pEndSrc] jae .error2 mov eax, [esi] mov ch, $10 @@: ; read 2 bit header BTYPE mov edx, eax shr eax, 2 and edx, 3 sub ch, 2 dec edx js .uncompressed ; BTYPE == 0 uncompressed type mov [.b_type], edx ; 0 if fixed tree; <>0 if dynamic tree jnz .dynamic_tree ; BTYPE == 1 compressed with fixed huffman tree. ; load the fixed huffman tree for literal/lengths. pushad lea edi, [.lengths] lea esi, [.TreeFixed] mov ebx, edi xor eax, eax xor ecx, ecx mov dl, 4 ; edx == 0 here. .loop_fx: lodsw mov cl, ah rep stosb dec edx jnz .loop_fx sub edi, ebx lea eax, [.len_tree] stdcall __tree_by_lengths, ebx, edi, eax popad jmp .decode .dynamic_tree: dec edx jnz .error3 ; BTYPE == 3 invalid block type ; Compressed with dynamic huffman table. Read it from the stream. ; first read the counts ; 5 bits HLIT - Number of Literal/length codes - 257. ; 5 bits HDIST - Number of distance codes - 1. ; 4 bits HCLEN - Number of code length codes - 4. mov edi, eax mov ebx, eax mov edx, eax shr ebx, 5 shr edx, 10 shr eax, 14 and edi, $1f and ebx, $1f and edx, $0f sub ch, 14 jg @f add esi, 2 cmp esi, [.pEndSrc] jae .error4 mov cl, ch mov eax, [esi] add ch, $10 rol eax, cl @@: add edi, 257 inc ebx add edx, 4 mov [.LLCount], edi mov [.DCount], ebx ; second, read the fixed 3bit table for the code lengths. ; clear the lengths array lea edi, [.lengths] xor ebx, ebx mov [edi], ebx mov [edi+4], ebx mov [edi+8], ebx mov [edi+12], ebx ; mov [edi+16], ebx ; codes 16, 17 and 18 are always transmitted, no need to clear; mov bl, $0f .loop_hc: movzx ebx, [.clclOrder2+ebx] mov [edi+ebx], al shr eax, 3 and byte [edi+ebx], $07 sub ch, 3 jg @f add esi, 2 cmp esi, [.pEndSrc] jae .error5 mov cl, ch mov eax, [esi] add ch, $10 rol eax, cl @@: dec edx jnz .loop_hc lea ebx, [.ll_tree] stdcall __tree_by_lengths, edi, 19, ebx jnz .error6 ; now create the two remaining huffman trees: for literal/lengths and for distances. ; First the literal/lengths huffman tree mov edx, [.LLCount] lea edi, [.len_tree] call .decode_lengths jnz .error9 ; Second, the distances huffman tree. mov edx, [.DCount] lea edi, [.dist_tree] call .decode_lengths jnz .error10 ; At the end - trees are ready, so decode the compressed block. mov edi, [.pCurrent] .decode: cmp esi, [.pEndSrc] jae .error7 ; read literal/length code xor edx, edx .bitloop1: shr eax, 1 rcl edx, 1 ; edx = 2*edx+CF dec ch jnz @f add esi, 2 mov eax, [esi] mov ch, $10 @@: xor edx, [.len_tree+4*edx] jns .bitloop1 not edx cmp edx, 255 ja .copy_from_older ; if EDX <= 255 then it is simple encoded byte, so store it. ; OutputValue "Literal: ", edx, 16, 2 ; Store literal value. cmp edi, [.pEndDst] jae .error14 mov [edi], dl inc edi jmp .decode .copy_from_older: ; OutputValue "Length code:", edx, 10, 3 sub edx, 257 js .next_block ; if EDX == 256 then end of block flag. ; The code is a length code. Compute the length of string to be copied from the previous decoded data. ; Compute the additional length and the extra bit count. ; 2^n(4 + edx mod 4) xor ebx, ebx cmp edx, 4 jb .length_ok sub edx, 4 mov cl, dl and edx, 3 ; edx = edx mod 4 shr cl, 2 ; cl = edx div 4 lea edx, [edx+4] jz .length_ok shl edx, cl dec edx cmp cl, 6 ; damn exceptions! jae .length_ok adc ebx, edx ; CF = 1 here! ; read CL bits from the stream or edx, -1 shl edx, cl not edx and edx, eax shr eax, cl ; OutputValue "Additional value:", edx, 10, 2 sub ch, cl jg .length_ok add esi, 2 mov cl, ch mov eax, [esi] add ch, $10 rol eax, cl .length_ok: lea ebx, [ebx+edx+3] ; OutputValue "Copy length:", ebx, 10, 3 ; ... so now decode the distance code cmp [.b_type], 0 jne .decode_dist ; when there is fixed huffman table, then the distances are encoded with 5 bit fixed code ; read fixed 5 bit distance. mov cl, 5 xor edx, edx .bitloop4: shr eax, 1 rcl edx, 1 dec cl jnz .bitloop4 ; OutputValue "Distance code:", edx, 10, 2 sub ch, 5 jg .compute_distance add esi, 2 mov cl, ch mov eax, [esi] add ch, $10 rol eax, cl jmp .compute_distance .decode_dist: xor edx, edx .bitloop2: shr eax, 1 rcl edx, 1 ; edx = 2*edx+CF dec ch jnz @f add esi, 2 mov eax, [esi] mov ch, $10 @@: xor edx, [.dist_tree+4*edx] jns .bitloop2 not edx .compute_distance: cmp edx, 30 jae .error8 ; 2^n(2 + edx mod 2) ; compute the additional distance and extra bit count for the distance. xor cl, cl cmp edx, 2 jb .distance_ok sub edx, 2 mov cl, dl ; and edx, 1 ; edx = edx mod 2 shr cl, 1 ; cl = edx div 2 lea edx, [edx+2] jz .distance_ok shl edx, cl ; edx = 2^cl * (edx mod 2 + 2) ; read CL bits from the stream in EBX push ebx or ebx, -1 ; mask shl ebx, cl ; mask not ebx ; mask and ebx, eax shr eax, cl add edx, ebx pop ebx sub ch, cl jg .distance_ok add esi, 2 mov cl, ch mov eax, [esi] add ch, $10 rol eax, cl .distance_ok: inc edx ; copy the string push esi ecx neg edx mov ecx, ebx lea esi, [edi+edx] lea ebx, [edi+ecx] cmp esi, [.pDest] jb .error_cp1 cmp ebx, [.pEndDst] ja .error_cp2 rep movsb pop ecx esi jmp .decode .error_cp1: dbrk .error_cp2: dbrk pop ecx esi ; these all "error" labels are equal in release mode. In debug mode, there are int3 instructions inbetween in order to allow error tracing. .error2: dbrk .error3: dbrk .error4: dbrk .error5: dbrk .error6: dbrk .error7: dbrk .error8: dbrk .error9: dbrk .error10: dbrk .error11: dbrk .error12: dbrk .error13: dbrk .error14: dbrk .error: dbrk not [.final] ; Tricky makes CF=1 on exit. .next_block: mov [.pCurrent], edi cmp [.final], 0 je .main_loop shl [.final], 1 ; If normal end [.final] is always 1; If error, [.final] is $ffffffff or $fffffffe popad return ; not compressed block ;----------------------------------------------------------- .uncompressed: ; align to byte mov cl, 16 sub cl, ch movzx ecx, cl add ecx, 7 shr ecx, 3 add esi, ecx cmp esi, [.pEndSrc] jae .error11 mov edi, [.pCurrent] xor eax, eax lodsw ; LEN mov ecx, eax lodsw ; NLEN not ax cmp ecx, eax jne .error12 add eax, edi cmp eax, [.pEndDst] ja .error13 rep movsb ; resync stream mov ch, $10 mov eax, [esi] jmp .next_block ; ebx = pointer to the .ll_tree huffman tree ; edx = count of the encoded lengths ; edi = pointer to the tree memory .decode_lengths: ; arguments. push edi push edx lea edi, [.lengths] push edi ; buffer overflow? add edx, edi mov [.p_lengths_end], edx .loop_len: xor edx, edx cmp esi, [.pEndSrc] jae .errordl .bitloop3: shr eax, 1 rcl edx, 1 ; edx = 2*edx+CF dec ch jnz @f add esi, 2 mov eax, [esi] mov ch, $10 @@: xor edx, [ebx+4*edx] jns .bitloop3 ; here dh = $ff xor dh, dl ; dh = not dl because dh is always $ff for this tree. mov dl, 1 ; count cmp dh, 16 jb .rep_loop mov cl, 7 mov dl, 11 sub dh, 18 jz .repeat ; dh = 18 mov cl, 3 mov dl, 3 inc dh jz .repeat ; dh = 17 cmp edi, [esp] je .errordl ; it is the first length, there is no previous. mov cl, 2 mov dh, [edi-1] ; previous length; dl=3 here .repeat: shl edx, 8 ; read CL bits from the stream: CL = 2, 3 or 7 or dl, -1 shl dl, cl not dl and dl, al shr eax, cl sub ch, cl jg @f add esi, 2 mov cl, ch mov eax, [esi] add ch, $10 rol eax, cl @@: add dh, dl shr edx, 8 ; now dl is the count, dh is the byte to be repeat! .rep_loop: mov [edi], dh inc edi dec dl jnz .rep_loop ; next length cmp edi, [.p_lengths_end] jb .loop_len ja .errordl stdcall __tree_by_lengths ; the arguments are already in the stack. retn ; The assembly way of error handling. ;) .errordl: add esp, 3*4 + 4 ; pushed arguments and the return address. jmp .error ; .clclOrder db 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ; original order. .clclOrder2 db 8, 15, 14, 13, 12, 11, 10, 9, 7, 6, 5, 4, 3, 2, 1, 16, 17, 18, 0 ; recoded in order to make better lookup code. ; The fixed Huffman table, encoded in RLE. ; bits, count, ... total 288 codes. .TreeFixed db 8, 144, 9, 112, 7, 24, 8, 8 endp ; Restores the Huffman tree from given code lengths. ; .pTree - pointer to memory for the huffman tree structure. ; .pLengths - array of bytes, containing the lengths for every code needed. ; .count - count of the array elements. ; ; Returns: ; ZF=1; The tree is properly created on [.pTree]; The tree is an array of qwords ; Every element represents one node of the binary tree. The low order dword ; contains index to the left (0) child and the high order dword, index to ; the right (1) child. ; The indexes are a number of a qword element of the array xored with the index of the current element. ; If the high order bit of the word (bit 15) is set, the word is a leaf ; and contains NOT-ed symbol value instead of index in the array. ; ; ZF=0 Error. The provided length list describes not valid Huffman tree. ; In this case no values are filled in the tree. ; ; The comments in the code are according to the RFC-1951 ; proc __tree_by_lengths, .pLengths, .count, .pTree .bl_count rd DEFLATE_MAX_BITS + 1 .next_code rd DEFLATE_MAX_BITS + 1 ; keep immediately after .bl_count begin pushad xor eax, eax lea edi, [.bl_count] mov ecx, 2*(DEFLATE_MAX_BITS+1) rep stosd ; initializes both: .bl_count and .next_code arrays! ; 1) Count the number of codes for each code length. Let bl_count[N] be the number of ; codes of length N, N >= 1. mov esi, [.pLengths] mov ecx, [.count] .loop: lodsb ; tree[i].len inc dword [.bl_count+4*eax] ; count one code length loop .loop ; 2) Find the numerical value of the smallest code for each code length: ; loop from 1 to [.max_bits] ; xor ecx, ecx ; bits - 1 ; here ecx == 0, see the previous instr. xor eax, eax ; bl_count[0] = 0 ; but we still need to keep the original bl_count[0]. cdq ; edx = 0 = code lea ebx, [eax+2] ; ebx = 2 .loop2: inc ecx add edx, eax ; code = code + bl_count[bits-1] shl edx, 1 ; code = code << 1 mov eax, [.bl_count+4*ecx] ; for the next loop mov [.next_code+4*ecx], edx ; next_code[bits] = code sub ebx, eax ; data validity control. shl ebx, 1 cmp ecx, DEFLATE_MAX_BITS jb .loop2 ; 3) Assign numerical values to all codes, using consecutive ; values for all codes of the same length with the base ; values determined at step 2. Codes that are never used ; (which have a bit length of zero) must not be assigned a ; value. ; ; The assigned codes are put inside the binary tree, represented in ; an array pointed by EDI mov ecx, [.count] ; count of all elements sub ecx, [.bl_count] ; minus the count of zero elements .bl_count[0] ; PKZIP exception when the Huffman tree contains single 1bit long element, the second ; is allowed to be not defined and ebx will not be zero... damn exceptions! cmp ecx, 1 jne .check cmp [.bl_count+4], 0 ; count of codes with length 1 bit. jne .valid .check: test ebx, ebx jnz .finish ; it is invalid Huffman tree if EBX <> 0 here. .valid: ; clear the tree area shl ecx, 1 mov edi, [.pTree] ; the needed nodes memory is (K-1)*8 bytes, or eax, -1 ; where K is the count of the codes with length <> 0; rep stosd ; but we allocate one element more in order to work-around the ; above described exception. mov edi, [.pTree] ; the huffman tree array. xor ebx, ebx ; offset to the last free element of the tree. mov esi, [.pLengths] .loop3: movzx ecx, byte [esi] ; ecx = length of the code. jecxz .next mov eax, [.next_code+4*ecx] ; next_code[len] inc [.next_code+4*ecx] ror eax, cl ; start from the high order bit. xor edx, edx ; the traversing index in the tree array. .bit_loop: shl eax, 1 ; the high order bit in CF rcl edx, 1 ; edx = 2*edx + CF ; edx now points to the needed WORD element of the tree. dec ecx jz .put_code ; this is the last bit, so put the code here. .next_node: xor edx, [edi+4*edx] jns .bit_loop not edx inc ebx mov [edi+4*edx], edx ; the current free element. xor [edi+4*edx], ebx ; it is tricky here - the idea is to allow the next node offset to be obtained not by MOV, but by XOR instuction. ; for details see the tree traversing code on "bitloop1" label. jmp .next_node .put_code: mov ecx, esi sub ecx, [.pLengths] not ecx xor ecx, edx mov [edi+4*edx], ecx .next: inc esi dec [.count] jnz .loop3 .finish: ; here ZF = 1 if OK and 0 if error! popad return endp endmodule |
Added freshlib/data/encodings.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS independent text encodings translation library. ; ; Target OS: Any ; ; Dependencies: StrLib.asm ; ; Notes: ; ;_________________________________________________________________________________________ ; AnsiToUnicodeChar converts an Ansi character into Unicode ; ; arguments: ; .SrcEncoding - pointer to 256 ansi2unicode conversion table. ; .char - ansi char. ; returns: ; eax - unicode for the char. proc AnsiToUnicodeChar, .SrcEncoding, .char begin push ebx mov ebx, [.SrcEncoding] movzx eax, byte [.char] cmp eax, $80 jb .finish sub eax, $80 movzx eax, word [ebx+2*eax] .finish: pop ebx return endp ; AnsiToUtf8 converts string from ANSI to UTF-8 ; ; arguments: ; .SrcEncoding - pointer to 256 ansi2unicode conversion table. ; .hString - handle or pointer to the source string. ; returns: ; eax - handle of new created string with utf-8 encoded text. proc AnsiToUtf8, .SrcEncoding, .hString .result dd ? .start dd ? begin pushad stdcall StrLen, [.hString] lea ecx, [4*eax+16] stdcall StrNew mov [.result], eax jecxz .finish2 stdcall StrSetCapacity, [.result], ecx mov edi, eax mov [.start], eax stdcall StrPtr, [.hString] mov esi, eax mov ebx, [.SrcEncoding] .loop: movzx eax, byte [esi] lea esi, [esi+1] test eax, eax jz .finish mov edx, 1 cmp eax, $80 jb .direct sub eax, $80 movzx eax, word [ebx+2*eax] stdcall EncodeUtf8, eax .direct: mov [edi], eax add edi, edx jmp .loop .finish: xor eax, eax mov [edi], eax mov eax, [.start] sub edi, eax mov [eax+string.len], edi .finish2: popad mov eax, [.result] return endp ; Utf8ToAnsi converts string from UTF-8 to some ANSI encoding. ; ; arguments: ; .hString - pointer of handle of utf-8 string. ; .DstEncoding - pointer to utf2ansi conversion table. ; returns: ; eax - handle of new created string with ansi encoded text. proc Utf8ToAnsi, .hString, .DstEncoding .result dd ? .char dd ? begin pushad mov ebx, [.DstEncoding] stdcall StrLen, [.hString] mov ecx, eax stdcall StrNew mov [.result], eax stdcall StrSetCapacity, eax, ecx mov edi, eax stdcall StrPtr, [.hString] mov esi, eax .loop: stdcall DecodeUtf8, [esi] lea esi, [esi+edx] jnc .ok test edx, edx jz .end_of_string ; invalid unicode char .ok: test eax, eax jz .end_of_string ; zero terminated cmp eax, $ffff ja .not_found cmp eax, $80 jb .store ; search in the table mov [.char], eax xor edx, edx xor cl, cl ; start mov ch, $7f ; end .search_loop: cmp cl, ch ja .not_found mov dl, cl add dl, ch shr edx, 1 movzx eax, byte [ebx+256+edx] movzx eax, word [ebx+2*eax-$100] ; unicode character cmp [.char], eax je .found ja .bigger mov ch, dl sub ch, 1 jc .not_found jmp .search_loop .bigger: mov cl, dl inc cl jmp .search_loop .found: mov al, [ebx+256+edx] .store: stosb jmp .loop .not_found: mov al, '?' stosb jmp .loop .end_of_string: mov dword [edi], 0 stdcall StrPtr, [.result] sub edi, eax mov [eax+string.len], edi popad mov eax, [.result] return endp ; converts unicode character [.unichar] to UTF-8 encoding (max to 4 bytes) ; ; returns: CF=0 ; EAX = utf-8 character ; EDX = lenfth of the character in bytes. ; CF=1 - the encoding can not be provided. ; eax = 0 ; edx = 0 proc EncodeUtf8, .unichar begin push ebx ecx edi xor eax, eax mov edi, 1 mov ebx, [.unichar] cmp ebx, $80 jb .one_byte mov edx, $ffffffc0 ; mask .loop: inc edi cmp edi, 4 ja .error sar edx, 1 movzx ecx, bl and cl, $3f or cl, $80 shl eax, 8 shr ebx, 6 or eax, ecx ; eax == result test ebx, edx jnz .loop lea ecx, [2*edx] xor ecx, edx or ebx, edx xor ebx, ecx shl eax, 8 mov al, bl .finish: mov edx, edi pop edi ecx ebx clc return .one_byte: mov eax, ebx jmp .finish .error: xor eax, eax xor edx, edx pop edi ecx ebx stc return endp ; decodes 4 bytes in [.chars] to UNICODE dword value. ; returns: ; CF=0 - no error ; eax - unicode value. ; edx - byte count of the char. [1..4] ; CF=1 - invalid utf-8 char; ; eax = edx = 0 the character can not be decoded. ; edx <> 0 -> eax = the overlong encoded character. edx = byte count of the char. ; ; Note: When CF=1 and [.chars] are overlong encoded char. ; eax contains the proper value and edx contains the proper length. ; But it is still invalid character, according to the standards. proc DecodeUtf8, .chars begin push ebx ecx xor ecx, ecx .loop1: shl byte [.chars], 1 jnc .countok inc ecx jmp .loop1 .countok: jecxz .ascii cmp ecx, 1 je .error ; internal byte cmp ecx, 4 ja .error ; more than 4 bytes mov edx, 1 xor ebx, ebx movzx eax, byte [.chars] shr eax, cl shr eax, 1 .loop2: mov bl, byte [.chars+edx] and bl, $c0 cmp bl, $80 jne .error mov bl, byte [.chars+edx] and bl, $3f shl eax, 6 or eax, ebx inc edx cmp edx, ecx jne .loop2 and eax, $1fffff cmp eax, $10ffff ja .error cmp eax, [._minimal+4*edx-8] jb .overlong ; overlong coding. clc pop ecx ebx return .ascii: movzx eax, byte [.chars] shr eax, 1 mov edx, 1 pop ecx ebx clc return .error: xor eax, eax xor edx, edx .overlong: stc pop ecx ebx return ._minimal dd $80, $800, $10000 endp ; decodes 2 words in [.chars] to UNICODE dword value. ; returns: ; CF=0 - no error ; eax - unicode value. ; edx - byte count of the char. [2 or 4] ; CF=1 - invalid utf-8 char; ; eax = edx = 0 the character can not be decoded. ; edx <> 0 -> eax = the overlong encoded character. edx = byte count of the char. ; ; Note: When CF=1 and [.chars] are overlong encoded char. ; eax contains the proper value and edx contains the proper length. ; But it is still invalid character, according to the standards. proc DecodeUtf16, .chars begin mov eax, [.chars] cmp ax, $d800 jb .direct cmp ax, $dc00 jae .direct sub ax, $d800 movzx ecx, ax shr eax, 16 shl ecx, 10 sub ax, $dc00 or eax, ecx mov edx, 4 cmp eax, $110000 jb .decoded xor eax, eax xor edx, edx stc return .direct: mov edx, 2 and eax, $ffff .decoded: clc return endp ; Returns CF = 0 if the string contains only utf-8 encoded characters. ; CF = 1 if the string contains at least one not utf-8 character. ; Registers are preserved, the string is not changed. proc CheckUtf8, .hString begin pushad stdcall StrPtr, [.hString] mov esi, eax .loop: stdcall DecodeUtf8, [esi] jc .finish test eax, eax jz .finish ; CF=0 after test. add esi, edx jmp .loop .finish: popad return endp ; Encoding tables macro EncodingTable name, filename { name#.@here = 1 if used name align 4 label name word file filename end if } align 4 include "_encodings/encodings.inc" |
Added freshlib/data/hashes.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS independent hashes algorithm library. ; ; Target OS: Any ; ; Dependencies: memory.asm ; ; Notes: Contains: MD5, ADLER32, FNV1b, CRC32 ; ;_________________________________________________________________________________________ module "Hashes library" include "sha1.asm" ; MD5 algorithm. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ struct TContextMD5 .__cntx rb 88 .value rb 16 ends iglobal if used ___MD5InternalData ___MD5InternalData db 0,1,1,5,5,3,0,7, \ 7,5,5,5,5,4,5,6, \ 4,7,5,7,6,4,5,6 end if endg uglobal if used ___MD5SineTable ___MD5SineTable rd 65 end if endg if used md5_Init initialize ___md5_init begin xor eax, eax finit pushd 4F800000h pushd 0 fstcw word [esp+2] fstcw word [esp] or word [esp], 0F3Fh fldcw word [esp] push 1 @@: fild dword [esp] fsin fabs fmul dword [esp+8] fistp qword [eax*4+___MD5SineTable] inc dword [esp] inc eax test al, 40h jz @b fldcw word [esp+6] add esp, 12 return endp end if ;****************************************************** ; Computes MD5 hash of the data block from [.pData] with ; length in [.pLen] ; Returns new string handle in eax containing the hash of ; the data. ;****************************************************** proc DataMD5, .pData, .pLen begin push ebx ecx esi edi stdcall md5_Init mov ebx, eax stdcall md5_Update, ebx, [.pData], [.pLen] stdcall md5_GetValue, ebx stdcall StrNew mov edi, eax lea esi, [ebx+TContextMD5.value] mov ecx, 16 .loop: movzx eax, byte [esi] inc esi stdcall NumToStr, eax, ntsUnsigned or ntsHex or ntsFixedWidth + 2 push eax stdcall StrCat, edi, eax stdcall StrDel ; from the stack loop .loop stdcall StrLCase, edi stdcall FreeMem, ebx mov eax, edi pop edi esi ecx ebx return endp ;............................................................................ ; md5_Init is used to allocate and initialize TContextMD5 structure for use with ; subsequent processing. ; ; Arguments: ; no ; ; Return Value: EAX - pointer to the allocated TContextMD5 structure. ; ; Modifies Registers: EAX ;............................................................................ proc md5_Init begin push edi stdcall GetMem, sizeof.TContextMD5 mov edi, eax push eax mov al, 01h @@: stosb add al, 22h jnc @b mov al, 0FEh @@: stosb sub al, 22h jnc @b xor eax, eax stosd stosd pop eax edi return endp ;............................................................................ ; md5_Update scans a block of data and updates the working context. Call it ; once on a single block of data, or call it multiple times on consecutive ; blocks of data, before retrieving the MD5 signature with MD5_Digest ; ; Arguments: ; lpMD5CTXT - address of an initialized MD5CTXT structure ; lpBuf - address of a contiguous block of data ; bufLen - the size, in bytes, of the block of data ; ; Return Value: None ; ; Modifies Registers: None ;............................................................................ proc md5_Update ;, .lpMD5CTXT, .lpBuf, .bufLen begin pushad mov esi, [esp+40] mov ebp, [esp+36] lea edi, [ebp+24] mov edx, [esp+44] mov ebx, edi mov eax, edx shl eax, 3 mov ecx, edx shr ecx, 29 push dword [ebp+16] add [ebp+16], eax adc [ebp+20], ecx pop eax shr eax, 3 and eax, 3Fh .mn: xor ecx, ecx mov cl, 40h sub ecx, eax cmp ecx, edx jbe @f mov ecx, edx @@: sub edx, ecx add edi, eax add eax, ecx rep movsb mov edi, ebx cmp eax, 40h jb @f stdcall ___md5_BTrnsf, ebp, edi @@: xor eax, eax or edx, edx jnz .mn popad ret 12 endp ;............................................................................ ; md5_GetValue is used to retrieve the MD5 hash for the working context. It may ; be called at any point during a buffer read to get the current MD5 hash for ; all data scanned up to that point. It does not modify the contexutal data, ; so this procedure may be called as many times as needed. ; The value is stored in the context structure TContextMD5.value ; ; Arguments: ; .pContextMD5 - address of an TContextMD5 structure ; ; Return Value: None ; ; Modifies Registers: None ;............................................................................ proc md5_GetValue ;, .pContextMD5 begin pushad mov esi, dword [esp+36] lea edi, [esi+TContextMD5.value] lea ebp, [esi+16] mov ebx, edi sub esp, 64 movsd movsd movsd movsd lodsd shr eax, 3 add esi, 4 and eax, 3Fh mov edi, esp mov ecx, eax rep movsb inc eax sub ecx, eax mov al, 80h stosb xor eax, eax cmp ecx, -56 jae @f xor eax, eax add ecx, 64 rep stosb mov edi, esp stdcall ___md5_BTrnsf, ebx, edi @@: xor eax, eax add ecx, 56 rep stosb mov esi, ebp movsd movsd stdcall ___md5_BTrnsf, ebx, esp add esp, 64 popad ret 4 endp proc ___md5_BTrnsf ;, .phash, .lpBlock begin pushad mov eax, dword [esp+36] xor ecx, ecx mov cl, 4 @@: push dword [eax] add eax, 4 loop @b .mn: mov ebp, ecx shr ebp, 12 add dl, dh and dl, 0Fh test ch, 03h jnz @f xor cl, cl test ch, 0Fh jnz @f mov esi, ___MD5InternalData mov edx, dword [esi+ebp*2] mov ebx, dword [esi+ebp*4+8] @@: add cl, bl ror ebx, 8 push edx push ecx push ebx mov ebx, dword [esp+20] mov ecx, dword [esp+16] mov edx, dword [esp+12] test ebp, 02h jnz .hi test ebp, 01h jnz @f mov eax, ebx and ebx, ecx not eax and eax, edx or eax, ebx jmp .fghi @@: mov eax, edx and edx, ebx not eax and eax, ecx or eax, edx jmp .fghi .hi: test ebp, 01h jnz @f mov eax, ebx xor eax, ecx xor eax, edx jmp .fghi @@: mov eax, edx not eax or eax, ebx xor eax, ecx .fghi: pop ebx pop ecx pop edx add eax, dword [esp+12] mov esi, dword [esp+56] movzx edi, dl add eax, dword [esi+edi*4] movzx esi, ch add eax, dword [___MD5SineTable+esi*4] rol eax, cl add eax, dword [esp+8] mov dword [esp+12], eax mov esi, esp mov edi, esp lodsd movsd movsd movsd stosd inc ch test ch, 40h jz .mn mov eax, dword [esp+52] xor ecx, ecx mov cl, 4 sub eax, ecx @@: pop edx add dword [eax+ecx*4], edx loop @b popad ret 8 endp ; ADLER32 algorithm. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ iAdlerBase = 65521 if used DataAdler32 DataAdler32: ;, .pBuffer, .length pop eax ; return address push 1 ; one more argument push eax end if if used DataAdler32 | used adler32_Update adler32_Update: ;, .adler, .pBuffer, .length virtual at esp+4+32 .adler dd ? .pBuffer dd ? .length dd ? end virtual pushad mov ebx, [.adler] mov eax, ebx and ebx, $ffff ; ebx = s1 shr eax, 16 ; eax = s2 mov esi, [.pBuffer] mov edi, [.length] add edi, esi mov ecx, iAdlerBase .loop: cmp esi, edi jae .mod ; last mod test eax, eax jns .not_yet ; there is still not overflow. .mod: xor edx, edx div ecx mov eax, ebx mov ebx, edx ; ebx is s2 now xor edx, edx div ecx ; edx is s1 now cmp esi, edi jae .end_loop mov eax, ebx ; eax = s2 mov ebx, edx ; ebx = s1 .not_yet: movzx edx, byte [esi] add ebx, edx add eax, ebx inc esi jmp .loop .end_loop: shl ebx, 16 or ebx, edx mov [esp+4*regEAX], ebx popad retn 3*4 end if ; FNV-1b algorithm ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ proc DataFNV1b, .ptrData, .len begin push ecx edx esi mov esi, [.ptrData] mov ecx, [.len] mov eax, $811C9DC5 ; 2166136261 ; FNV offset basis inc ecx .hashloop: dec ecx jz .exit movzx edx, byte [esi] xor eax, edx inc esi imul eax, $01000193 ; ; 16777619 ; FNV prime jmp .hashloop .exit: pop esi edx ecx return endp ; CRC32B algorithm, as needed for PNG handling. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ uglobal if used __CRC32Table __CRC32Table rd 256 end if endg if used crc32_Update initialize InitCRC32Table begin mov edi, __CRC32Table xor ecx, ecx .outer: movzx eax, cl mov ch, 8 .inner: shr eax, 1 jnc @f xor eax, $edb88320 @@: dec ch jnz .inner mov [__CRC32Table+4*ecx], eax dec cl jnz .outer return endp end if proc crc32_Update, .crc, .pBuffer, .length begin push esi edx mov esi, [.pBuffer] add [.length], esi mov eax, [.crc] .loop: cmp esi, [.length] jae .finish movzx edx, byte [esi] inc esi xor dl, al shr eax, 8 mov edx, [__CRC32Table+4*edx] xor eax, edx jmp .loop .finish: pop edx esi return endp proc DataCRC32, .pBuffer, .length begin xor eax, eax dec eax stdcall crc32_Update, eax, [.pBuffer], [.length] not eax return endp ; Pearson hash function. proc PearsonHash, .pData, .DataSize, .pFuncTable, .pResult, .ResultSize begin pushad mov ebx, [.pFuncTable] mov esi, [.pData] mov edi, [.pResult] mov edx, [.ResultSize] xor eax, eax .outer_loop: dec edx js .finish mov ecx, [.DataSize] jecxz .byte_ok add al, dl xor al, [esi] mov al, [ebx+eax] .inner_loop: dec ecx jz .byte_ok xor al, byte [esi+ecx] mov al, [ebx+eax] jmp .inner_loop .byte_ok: mov [edi+edx], al jmp .outer_loop .finish: popad return endp proc StrPearsonHash, .hString, .pFuncTable begin pushad mov ebx, [.pFuncTable] xor edx, edx stdcall StrLen, [.hString] mov ecx, eax jecxz .byte_ok stdcall StrPtr, [.hString] mov esi, eax .loop: lodsb xor dl, al mov dl, [ebx+edx] loop .loop .byte_ok: mov [esp+4*regEAX], edx popad return endp ; ; ; Gets the array of strings and generates a table for PersonHash, that ; allows non-collision hash of the given set. ; ; Arguments: ; ; .pStringArray - TArray of dword containing the strings of the set. ; ; Returns: ; ; eax: pointer to a 256 byte table fill of values for using as a ; .pFuncTable parameter in PearsonHash procedure. ; ; proc GeneratePerfectPearsonFunction, .pStringArray begin int3 return endp if used test_func test_func db 141, 227, 251, 2, 201, 179, 30, 63, 93, 145, 92, 46, 6, 95, 105, 1 db 90, 112, 60, 84, 110, 205, 0, 253, 215, 118, 244, 218, 231, 31, 192, 67 db 189, 23, 66, 144, 59, 115, 248, 237, 216, 82, 217, 72, 147, 143, 125, 170 db 152, 154, 57, 4, 44, 131, 157, 111, 209, 185, 35, 81, 41, 182, 202, 176 db 113, 193, 114, 254, 39, 194, 94, 190, 37, 42, 15, 195, 188, 169, 12, 7 db 175, 88, 245, 127, 203, 135, 181, 178, 99, 164, 76, 235, 21, 86, 160, 243 db 223, 126, 136, 129, 77, 239, 132, 174, 122, 233, 87, 108, 47, 146, 158, 128 db 97, 162, 219, 91, 229, 222, 104, 71, 150, 55, 242, 75, 151, 206, 119, 36 db 58, 236, 117, 43, 74, 155, 246, 116, 153, 148, 68, 159, 210, 161, 19, 64 db 247, 186, 83, 29, 5, 249, 177, 196, 250, 197, 167, 230, 26, 134, 124, 240 db 69, 149, 65, 62, 101, 38, 183, 45, 24, 166, 33, 123, 207, 107, 241, 191 db 208, 85, 78, 184, 32, 89, 20, 165, 27, 22, 11, 130, 98, 80, 17, 198 db 200, 211, 16, 100, 51, 232, 3, 96, 73, 187, 14, 53, 121, 199, 18, 103 db 228, 180, 156, 252, 168, 49, 8, 171, 79, 204, 10, 139, 40, 61, 220, 212 db 13, 221, 109, 25, 255, 120, 70, 28, 48, 213, 234, 50, 138, 9, 52, 142 db 225, 172, 106, 54, 214, 163, 140, 34, 238, 224, 56, 226, 102, 137, 133, 173 end if endmodule |
Added freshlib/data/hashtree.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 | module "Hash tree" ; The hash tree is a TArray of THashTreeNode elements. ; .bit0 and .bit1 elements contain the offset to the next element of the array ; for the hash bit respectively 0 and 1. ; ; The procedure of searching in the tree is by separating the every next bit of the ; hash and jumping to the offset written in the [.bit0] or [.bit1] of the current node. ; ; if on some loop, the [.bitX] is 0 then, the string is not inside the tree. ; ; The offset on the 32th bit points to the THashTreeLeaf element (it takes 2 elements of ; the array). Here, direct comparison with [THashTreeLeaf.hString] element has to be done ; ; If the strings match, then the element has been found. If not, then a hash collision occured. ; In this case, the strings with equal hashes are added in a linear list linked through the ; [THashTreeLeaf.next] field. Follow the links and compare the strings until 0 (string not found) ; or string match. ; ; The searching in the tree is slower than the classic hash table, but is still O(1) ; and has the great advantage, that allows using of 32 bit hashes where the collisions ; are very rare, and still keeps the hash tree pretty small. Something like O(n.log n) ; ; This structure worth to be used when very big amount of strings need to be searched. struct THashTreeNode .bit0 dd ? .bit1 dd ? ends struct THashTreeLeaf .hString dd ? ; a handle of the string stored. .next dd ? ; the next element in the cases of collisions. (well, it is very case, but still happens sometimes). .lparam dd ? ; user defined parameter. .wparam dd ? ; user defined parameter. ends ; Searches the hash tree for the given string. ; if [.fAdd] is TRUE and if the string is not in the tree it will be added. ; ; Arguments: ; .pHashTree - pointer to TArray with elements size sizeof.THashTreeNode (8 bytes) ; .hString - handle/pointer to the string to be searched/added. Notice, that exactly this ; string will be added to the THashTreeLeaf element. The caller is responsible ; to not free this string until the hash tree is needed. ; .fAdd - flag indicating whether to add the string to the tree if is not included. ; ; Returns: ; edx - pointer to the array. Can be reallocated! ; eax - index in the TArray of the THashTreeLeaf of the string. ; CF = 1: the string is already in the tree. ; CF = 0: the string is not in the tree. ; [.fAdd] <> 0: eax contains a pointer to the new added leaf. ; eax == 0 means there is an out of memory error on ; the attempt to add the string. ; [.fAdd] = 0: eax == 0 proc SearchHashTree, .pHashTree, .hString, .fAdd .hash dd ? begin pushad mov edx, [.pHashTree] stdcall StrHash, [.hString] mov [.hash], eax mov ecx, 32 ; the depth of the tree mov ebx, TArray.array cmp [edx+TArray.count], 0 jne .treeseek stdcall AddArrayItems, edx, 1 and dword [eax+THashTreeNode.bit0], 0 and dword [eax+THashTreeNode.bit1], 0 .treeseek: xor edi, edi ror [.hash], 1 adc edi, edi lea edi, [ebx+4*edi] cmp dword [edx + edi], 0 ; edi is offset from the begining of the array. je .notfound mov ebx, [edx + edi] loop .treeseek ; The hash exists in the hash tree. Process the possible collisions. ; here ebx is the offset to the THashTreeLeaf ! .cmp_loop: stdcall StrCompCase, [.hString], [edx+ebx+THashTreeLeaf.hString] jc .finish ; the string is already in the hash tree!!! ; OutputValue "Collision at offset:", ebx, 10, -1 lea edi, [ebx + THashTreeLeaf.next] cmp dword [edx + edi], 0 je .add_in_list mov ebx, [edx + edi] jmp .cmp_loop .add_in_list: cmp [.fAdd], 0 je .finish_zero stdcall AddArrayItems, edx, 2 jc .finish_zero sub eax, edx jmp .do_add .notfound: cmp [.fAdd], 0 je .finish_zero ; edx - pointer to the tree array, ebx - offset of the last found element. ; eax - 0 or 1 depending of the last bit checked. ecx - remaining bits count. ; edi - the offset to the [.bitX] field of the last node. .add_remaining: lea eax, [ecx+1] stdcall AddArrayItems, edx, eax ; add all needed (THashTreeNode) + THashTreeLeaf jc .finish_zero sub eax, edx dec ecx jz .do_add .addloop: mov [edx + edi], eax and dword [edx + eax + THashTreeNode.bit0], 0 and dword [edx + eax + THashTreeNode.bit1], 0 xor edi, edi ror [.hash], 1 adc edi, edi lea edi, [eax + 4*edi] add eax, sizeof.THashTreeNode loop .addloop .do_add: mov [edx + edi], eax lea ebx, [edx+eax] mov ecx, [.hString] xor eax, eax mov [ebx+THashTreeLeaf.hString], ecx mov [ebx+THashTreeLeaf.next], eax mov [ebx+THashTreeLeaf.lparam], eax mov [ebx+THashTreeLeaf.wparam], eax clc .finish: mov [esp+4*regEAX], ebx mov [esp+4*regEDX], edx popad return .finish_zero: xor ebx, ebx clc jmp .finish endp proc FreeHashTree, .pHashTree begin pushad mov edx, [.pHashTree] cmp [edx+TArray.count], 32 jb .free_array pushd 0 0 mov ebx, TArray.array mov ecx, 32 .scan: dec ecx js .free_leaf mov esi, [edx+ebx+THashTreeNode.bit0] mov ebx, [edx+ebx+THashTreeNode.bit1] test ebx, ebx jz .bit0 test esi, esi jz .scan push esi ecx jmp .scan .bit0: mov ebx, esi jmp .scan .free_leaf: .free_loop: mov eax, [edx+ebx+THashTreeLeaf.hString] cmp eax, [StrHandleOffs] jb .free_ok cmp eax, [StrHandleEnd] jae .free_ok stdcall StrDel, eax .free_ok: mov ebx, [edx+ebx+THashTreeLeaf.next] test ebx, ebx jnz .free_loop pop ecx ebx test ebx, ebx jnz .scan .free_array: stdcall FreeMem, edx popad return endp endmodule |
Added freshlib/data/i18n.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Internationalization strings library. ; ; Target OS: Any ; ; Dependencies: None ; ; Notes: ;_________________________________________________________________________________________ ; Switches the itext strings array to some language. ; Arguments: ; .lang - dword containing the language name in human readable char form. For example: "EN", "BG", etc. ; The names of the languages are defined by the user, when creating internationalized strings with ; "itext" macro. ; Returns: ; CF = 0 - the language is switched successfuly. ; CF = 1 - unknown language. ; proc SetLanguage, .lang begin pushad mov esi, I18nLanguages ; search for the language strings set address. .loop: lodsd test eax, eax jz .language_not_found cmp eax, [.lang] je .found lea esi, [esi+4] jmp .loop ; copy the language strings set to the itext placeholder array. .found: lodsd mov esi, eax mov edi, I18nStrings mov ecx, I18nStrings.length rep movsb clc popad return .language_not_found: stc popad return endp |
Added freshlib/data/markdown.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 | module "MiniMagAsm markdown dialect parser" struct TMarkdownResults .hContent dd ? .hIndex dd ? .hKeywords dd ? .hDescription dd ? ends fcloseLink = 1 fcloseImage = 2 fcloseInlineImage = 3 fcloseObject = 4 fblkQuote = 1 fblkTable = 2 fblkUList = 3 fblkOLIst = 4 fblkSpoiler = 5 fstateHeader = $01 fstatePara = $02 fstateWhite = $04 fstateBold = $08 fstateUnderline = $20 fstateStrikeout = $40 fstateItalic = $80 fstateTextNow = $200 ; don't use the second byte for any other flags. fstateTextPrev = $100 fstateInlineSource = $10000 fstateBlockSource = $20000 fstateTable = $100000 ; Translates some markdown text to HTML ; Arguments: ; .markdown - pointer or handler of the markdown text. ; .procFixLink - [proc .ptrLink] procedure that process the link address and returns ; handle to the processed link address. if [.procFixLink]=NULL, the links ; are inserted as they are in the HTML. ; .fBacklinks - flag, that defines whether to insert after the headers back links to the ; table of contents item. ; .pResult - pointer to TMarkdownResults structure where the result strings are returned. ; .lParam - caller supplied parameter that is passed to procFixLink. ; ; Returns: ; The procedure returns 4 string handles in the TMarkdownResults structure pointed by ; .pResult argument. proc TranslateMarkdown2, .markdown, .procFixLink, .fBacklinks, .pResult, .lParam .result dd ? .index dd ? .keywords dd ? .description dd ? ; first and second pass local variables .IdString rb 256 .IdLen dd ? .cntH2 dd ? .cntH3 dd ? .cntH4 dd ? .cntH5 dd ? .cntH6 dd ? .pHashTable dd ? .pHTML dd ? .limit dd ? .blocks rb 1024 .pblock dd ? begin pushad stdcall GetMem, 4*65536 mov [.pHashTable], eax stdcall GetMem, 16384 mov [.pHTML], eax add eax, 8192 mov [.limit], eax stdcall StrNew mov [.result], eax stdcall StrNew mov [.index], eax stdcall StrNew mov [.keywords], eax stdcall StrNew mov [.description], eax stdcall StrPtr, [.markdown] mov esi, eax call .FirstPass stdcall StrPtr, [.markdown] mov esi, eax call .SecondPass stdcall FreeMem, [.pHTML] stdcall FreeMem, [.pHashTable] mov edi, [.pResult] mov eax, [.result] mov edx, [.index] mov ebx, [.keywords] mov ecx, [.description] mov [edi+TMarkdownResults.hContent], eax mov [edi+TMarkdownResults.hIndex], edx mov [edi+TMarkdownResults.hKeywords], ebx mov [edi+TMarkdownResults.hDescription], ecx popad return ;.... start of .FirstPass .......................................... .FirstPass: mov edi, [.pHTML] mov [.cntH2], 0 mov [.cntH3], 0 mov [.cntH4], 0 mov [.cntH5], 0 mov [.cntH6], 0 .line_start: cmp edi, [.limit] jb @f mov dword [edi], 0 stdcall StrCat, [.index], [.pHTML] mov edi, [.pHTML] @@: cmp byte [esi], '#' je .header cmp byte [esi], '[' je .link .skip_to_eol: mov al, [esi] lea esi, [esi+1] cmp al, $0d je .line_start cmp al, $0a je .line_start test al, al jnz .skip_to_eol .end_of_file: mov dword [edi], 0 stdcall StrCat, [.index], [.pHTML] retn ; ----- return from .FirstPass ------------------- ; create table of contents item. .header: xor ecx, ecx .scan_level: inc ecx .scan_space: lea esi, [esi+1] mov al, [esi] cmp al, '#' je .scan_level cmp al, ' ' je .scan_space cmp al, $09 je .scan_space cmp al, $0d je .line_start cmp al, $0a je .line_start cmp ecx, 6 jbe @f mov ecx, 6 @@: call .BuildID mov dword [edi], '<a i' lea edi, [edi+4] mov dword [edi], 'd="B' lea edi, [edi+4] call .InsertID mov dword [edi], '" hr' mov dword [edi+4], 'ef="' mov word [edi+8], '#H' lea edi, [edi+10] call .InsertID mov dword [edi], '" st' mov dword [edi+4], 'yle=' mov dword [edi+8], '"pad' mov dword [edi+12], 'ding' mov dword [edi+16], '-lef' mov word [edi+20], 't:' lea edi, [edi+22] push ecx mov eax, ecx mov ecx, 10 sub eax, 2 jns @f xor eax, eax @@: call _NumToStrU pop ecx mov dword [edi], 'em">' lea edi, [edi+4] cmp ecx, 1 je @f call .InsertID @@: ; copy the header text .copy_loop: mov al, [esi] lea esi, [esi+1] cmp al, $0d je .end_header cmp al, $0a je .end_header test al, al jz .end_header mov [edi], al lea edi, [edi+1] jmp .copy_loop .end_header: dec esi mov dword [edi], '</a>' mov dword [edi+4], '<br ' mov word [edi+8], '/>' lea edi, [edi+10] jmp .line_start ;link processing .link: cmp byte [esi+1], '#' je .skip_to_eol mov edx, $811C9DC5 ; 2166136261 ; FNV offset basis mov ecx, esi and [.link_level], 0 .label_loop: mov al, [esi] lea esi, [esi+1] cmp al, $20 je .label_loop cmp al, $09 je .label_loop cmp al, $0d je .line_start cmp al, $0a je .line_start cmp al, "[" jne @f inc [.link_level] @@: test al, al jz .end_of_file xor dl, al imul edx, $01000193 ; 16777619 ; FNV prime cmp al, ']' jne .label_loop dec [.link_level] jnz .label_loop ; fold the hash to 16 bit value... mov ebx, edx shr ebx, 16 xor ebx, edx and ebx, $ffff mov edx, ebx ; search free slot .search_slot: mov eax, [.pHashTable] xchg ecx, [eax+4*ebx] test ecx, ecx jz .skip_to_eol ; conflict... ; compare the labels on ecx (the old content of the slot) with [HashTable+4*ebx] (the new pointer) push edi ecx mov edi, [eax+4*ebx] and [.link_level], 0 .first: mov al, [ecx] lea ecx, [ecx+1] cmp al, $20 je .first cmp al, $09 je .first .second: mov ah, [edi] lea edi, [edi+1] cmp ah, $20 je .second cmp ah, $09 je .second cmp al, ah jne .add_not_equal cmp ah, '[' jne @f inc [.link_level] @@: cmp ah, ']' jne .first dec [.link_level] jnz .first pop ecx edi jmp .skip_to_eol ; save it to the next slot .add_not_equal: pop ecx edi inc ebx and ebx, $ffff cmp ebx, edx jne .search_slot int3 ; full hash table -> to be implemented error processing ;---- End of .FirstPass -------------------------------- ;.... Start of .SecondPass ............................. locals ; .SecondPass only local variables .state dd ? .last_header dd ? .linkID_end dd ? .link_level dd ? .close_now dd ? .close_index dd ? .close_stack rb 256 ; 256 levels of nested links. endl .SecondPass: mov edi, [.pHTML] xor eax, eax mov [.state], eax mov [.close_index], eax mov [.cntH2], eax mov [.cntH3], eax mov [.cntH4], eax mov [.cntH5], eax mov [.cntH6], eax mov [.pblock], eax .line_start2: shr byte [.state+1], 1 ; fstateTextPrev = fstateTextNow; fStateTextNow = 0 cmp edi, [.limit] jb @f mov dword [edi], 0 stdcall StrCat, [.result], [.pHTML] mov edi, [.pHTML] @@: test [.state], fstateBlockSource jnz .copy_source cmp byte [esi], '[' je .link_definition cmp byte [esi], '#' je .header2 cmp byte [esi], ';' je .block_element cmp dword [esi], '----' je .horiz_rule .scan_line2: lodsb cmp al, ' ' je .white_space cmp al, $09 ; tab je .white_space cmp al, $0d je .end_of_line cmp al, $0a je .end_of_line test al, al jz .end_of_line ; it is not white space character... test [.state], fstateTextPrev or fstateTextNow or fstateHeader jz .start_para .process_char: or [.state], fstateTextNow test [.state], fstateInlineSource jnz .inline_source cmp al, '*' je .process_bold cmp al, '_' je .process_underline cmp al, '-' je .process_strikeout cmp al, '/' je .process_italic cmp al, '[' je .is_link_begin cmp al, ']' je .is_link_end cmp al, '\' je .escape_next .inline_source: cmp al, '`' je .process_inline_code .normal_char: and [.state], not fstateWhite .markup_ok: call .store_char jmp .scan_line2 .escape_next: cmp byte [esi], $20 jbe .normal_char lodsb jmp .normal_char ; stores the char from al in [edi], and ; replaces the invalid HTML characters ; with their &name; representation. .store_char: cmp al, 'A' jb @f mov [edi], al inc edi retn @@: cmp al, '<' je .char_less_then cmp al, '>' je .char_greater_then cmp al, '"' je .char_quote cmp al, '&' je .char_amp ; cmp al, "'" ; je .char_apos mov [edi], al lea edi, [edi+1] retn .char_less_then: mov dword [edi], '<' lea edi, [edi+4] retn .char_greater_then: mov dword [edi], '>' lea edi, [edi+4] retn .char_quote: mov dword [edi], '&quo' mov word [edi+4], 't;' lea edi, [edi+6] retn ;.char_apos: ; mov dword [edi], '&apo' ; mov word [edi+4], 's;' ; lea edi, [edi+6] ; retn .char_amp: mov dword [edi], '&' mov byte [edi+4], ';' lea edi, [edi+5] retn .start_para: test [.state], fstateTable jz .not_td_open mov dword [edi], '<td>' lea edi, [edi+4] cmp al, '(' ; col, row span jne .td_ok dec edi mov dword [edi], ' col' mov dword [edi+4], 'span' mov word [edi+8], '="' lea edi, [edi+10] .copy_span: mov al, [esi] lea esi, [esi+1] cmp al, ',' je .row_span cmp al, ')' je .end_span call .store_char jmp .copy_span .row_span: mov dword [edi], '" ro' mov dword [edi+4], 'wspa' mov dword [edi+8], 'n="' lea edi, [edi+11] jmp .copy_span .end_span: mov word [edi], '">' lea edi, [edi+2] mov al, [esi] lea esi, [esi+1] .td_ok: or [.state], fstatePara jmp .process_char .not_td_open: cmp al, '*' jne .simple_p_tag cmp byte [esi], ' ' jne .simple_p_tag mov dword [edi], '<li>' add edi, 4 or [.state], fstatePara inc esi mov al, [esi] inc esi jmp .process_char .simple_p_tag: mov dword [edi], '<p>' add edi, 3 jmp .process_char .process_inline_code: mov ecx, fstateInlineSource mov ebx, cInlineCodeTag jmp .ProcessTag cInlineCodeTag text "code" .process_bold: mov ecx, fstateBold mov ebx, cBoldTag jmp .ProcessTag cBoldTag text "strong" .process_italic: mov ecx, fstateItalic mov ebx, cItalicTag jmp .ProcessTag cItalicTag text "em" .process_underline: mov ecx, fstateUnderline mov ebx, cUnderlinedTag jmp .ProcessTag cUnderlinedTag text 'span class="underlined"' .process_strikeout: mov ecx, fstateStrikeout mov ebx, cStrikedTag cStrikedTag text "del" ; ecx = state mask ; ebx = pointer to html tag string .ProcessTag: mov dl, al test [.state], ecx jz .start_tag ; close tag not ecx and [.state], ecx mov word [edi], '</' lea edi, [edi+2] jmp .finish_tag .start_tag: test [.state], fstateWhite jz .normal_char cmp byte [esi], $20 je .normal_char cmp byte [esi], $09 je .normal_char cmp byte [esi], $0d je .normal_char cmp byte [esi], $0a je .normal_char or [.state], ecx ; open tag mov byte [edi], '<' lea edi, [edi+1] .copy_start: mov al, [ebx] inc ebx test al, al jz .end_tag stosb jmp .copy_start .finish_tag: mov al, [ebx] lea ebx, [ebx+1] cmp al, " " jbe .end_tag stosb jmp .finish_tag .end_tag: mov byte [edi], '>' lea edi, [edi+1] jmp .scan_line2 .white_space: test [.state], fstateWhite jnz .scan_line2 or [.state], fstateWhite mov [edi], al lea edi, [edi+1] jmp .scan_line2 ; end of line and end of file processing .end_of_line: test al, al jz @f xor al, $0d xor $0a cmp [esi], al jne @f inc esi @@: or [.state], fstateWhite test al, al jz .close_p_eof test [.state], fstateTextNow jnz .para_ok .close_p_eof: call .close_paragraph .para_ok: test [.state], fstateHeader jz .crlf ; insert back link cmp [.fBacklinks], 0 je .backlink_ok mov dword [edi], '<a c' mov dword [edi+4], 'lass' mov dword [edi+8], '="ba' mov dword [edi+12], 'ck" ' lea edi, [edi+16] mov dword [edi], 'href' mov dword [edi+4], '="#B' lea edi, [edi+8] call .InsertID mov word [edi], '">' mov dword [edi+2], '</a>' lea edi, [edi+6] .backlink_ok: mov byte [edi], '<' lea edi, [edi+1] mov ecx, [.last_header] add ecx, '/h0>' mov [edi], ecx lea edi, [edi+4] and [.state], not (fstateHeader or fstateTextNow) ; For the paragraph flow, the header loops like empty line. .crlf: test [.state], fstateTextPrev or fstateTextNow jz @f mov word [edi], $0a0d lea edi, [edi+2] @@: test al, al jnz .line_start2 .finish: mov dword [edi], 0 stdcall StrCat, [.result], [.pHTML] retn .is_link_begin: ; test [.state], fstateWhite ; jz .normal_char .searchID: dec esi ;.SearchLink: push edi push esi ; first compute the hash for the link label mov edx, $811C9DC5 ; 2166136261 ; FNV offset basis and [.link_level], 0 .hashloop: mov al, [esi] lea esi, [esi+1] cmp al, $20 je .hashloop cmp al, $09 je .hashloop cmp al, $0d je .not_a_link cmp al, $0a je .not_a_link test al, al je .not_a_link cmp al, '[' jne @f inc [.link_level] @@: xor dl, al imul edx, $01000193 ; 16777619 ; FNV prime cmp al, ']' jne .hashloop dec [.link_level] jnz .hashloop ; fold the hash to 16 bit value... mov [.linkID_end], esi mov ebx, edx shr ebx, 16 xor ebx, edx dec ebx .hash_table_loop: lea ebx, [ebx+1] and ebx, $ffff mov eax, [.pHashTable] mov edi, [eax+4*ebx] mov esi, [esp] test edi, edi jnz .cmp_labels ;.inline_link: ; the linkID was not found in the hash table. So, it should be inline link address. mov edi, esi ; the address of the link is in esi mov esi, [.linkID_end] ; the address of the end of the linkID. jmp .create_link .not_a_link: pop esi edi mov al, [esi] lea esi, [esi+1] jmp .normal_char ; the link address was not found, so it is not link at all. .cmp_labels: and [.link_level], 0 .cmp_labels_loop: mov al, [esi] lea esi, [esi+1] cmp al, ' ' je .cmp_labels_loop cmp al, $09 je .cmp_labels_loop .target: mov ah, [edi] lea edi, [edi+1] cmp ah, ' ' je .target cmp ah, $09 je .target cmp al, ah jne .hash_table_loop ; it is not the same label - try again. cmp ah, '[' jne @f inc [.link_level] jmp .cmp_labels_loop @@: cmp ah, ']' jne .cmp_labels_loop dec [.link_level] jnz .cmp_labels_loop ; the labels are equal, so search the address. .create_link: mov [.close_now], fcloseLink mov edx, [esp] ; the start of the linkID. cmp byte [esi], '[' ; is the link has separate ID and text? jne @f mov [esp], esi ; replace the source address. @@: inc edx cmp byte [edx], '#' ; is it internal link? je .firstnw ; inline image? cmp byte [edx], '?' ; is it inline image? jne .maybe_block_image mov [.close_now], fcloseInlineImage jmp .firstnw .maybe_block_image: cmp byte [edx], '!' ; is it an image? jne .maybe_object mov [.close_now], fcloseImage jmp .firstnw .maybe_object: cmp byte [edx], '$' jne .firstnw mov [.close_now], fcloseObject .firstnw: and [.link_level], 0 cmp byte [edi], '[' ; inline address. jne .firstnw_loop inc edi .firstnw_loop: mov al, [edi] inc edi cmp al, ' ' je .firstnw_loop cmp al, $09 je .firstnw_loop dec edi mov edx, edi .internal_link_address: pop esi edi cmp [.close_now], fcloseLink je .it_is_link cmp [.close_now], fcloseObject je .it_is_object ; it is image. mov dword [edi], '<img' mov dword [edi+4], ' cla' mov dword [edi+8], 'ss="' cmp [.close_now], fcloseImage je .block_image mov dword [edi+12], 'ico' jmp .check_style .block_image: mov dword [edi+12], 'txt' ; copy the style number if any: .check_style: lea edi, [edi+15] push esi mov esi, edx lodsb cmp al, '!' je .copy_style cmp al, '?' je .copy_style dec esi .copy_style: lodsb cmp al, '0' jb .style_ok cmp al, '9' ja .style_ok stosb jmp .copy_style .style_ok: lea edx, [esi-1] pop esi .img_tag_end: mov dword [edi], '" sr' mov dword [edi+4], 'c="' lea edi, [edi+7] jmp .link_tag_ok .it_is_object: push esi mov esi, edx cmp byte [edx], '$' jne @f inc esi @@: mov dword [edi], '<vid' mov dword [edi+4], 'eo c' mov dword [edi+8], 'ontr' mov dword [edi+12],'ols ' add edi, 16 cmp byte [esi], '0' jb .par_data cmp byte [esi], '9' ja .par_data mov dword [edi], ' wid' mov dword [edi+4],'th="' add edi, 8 .copy_width: lodsb cmp al, 'x' je .width_ok cmp al, ' ' jb .height_ok cmp al, ']' je .height_ok cmp al, '0' jb .height_ok cmp al, '9' ja .height_ok stosb jmp .copy_width .width_ok: mov dword [edi], '" he' mov dword [edi+4], 'ight' mov word [edi+8], '="' add edi, 10 .copy_height: lodsb cmp al, ':' je .height_ok cmp al, ' ' jb .height_ok cmp al, ']' je .height_ok cmp al, '0' jb .height_ok cmp al, '9' ja .height_ok stosb jmp .copy_height .height_ok: mov word [edi], '" ' add edi, 2 .par_data: mov dword [edi], '><so' mov dword [edi+4], 'urce' mov dword [edi+8], ' src' mov word [edi+12], '="' add edi, 14 lea edx, [esi-1] pop esi jmp .link_tag_ok ; yes the link was found. .it_is_link: mov dword [edi], '<a h' mov dword [edi+4], 'ref=' mov byte [edi+8], '"' lea edi, [edi+9] .link_tag_ok: push ecx esi ; push the close flag: mov esi, [.close_index] mov ecx, [.close_now] mov [.close_stack+esi], cl inc [.close_index] ; copy link address mov esi, edx cmp byte [esi], '?' je .skip_img_char cmp byte [esi], ':' je .skip_img_char cmp byte [esi], '$' je .skip_img_char cmp byte [esi], '!' jne .copy_link_prefix .skip_img_char: inc esi .copy_link_prefix: cmp [.procFixLink], 0 je .copy_link_proc stdcall [.procFixLink], esi, edi, [.lParam] mov edi, eax mov esi, edx .copy_link_proc: call .CopyToEndOfLink pop esi ecx cmp [.close_now], fcloseImage je .finalize_image cmp [.close_now], fcloseInlineImage je .finalize_image ; finalize link and object tags. mov word [edi], '">' add edi, 2 .go_link_text: and [.state], not fstateWhite inc esi ; skip the leading "[" cmp byte [esi], '#' jne .scan_line2 inc esi jmp .scan_line2 .finalize_image: mov dword [edi], '" al' mov dword [edi+4], 't="' lea edi, [edi+7] inc esi call .CopyToEndOfLink dec esi jmp .scan_line2 .CopyToEndOfLink: .copy_eol: lodsb cmp al, $0d je .end_link cmp al, $0a je .end_link cmp al, '[' jne @f inc [.link_level] @@: cmp al, ']' je .end_link_check test al, al jz .end_link .store_link_char: call .store_char jmp .copy_eol .end_link_check: cmp [.link_level], 0 je .end_link dec [.link_level] jmp .store_link_char ; jnz .store_link_char .end_link: retn ;.................................................................... .is_link_end: call .close_one_link jc .normal_char jmp .scan_line2 .close_all_links: call .close_one_link jnc .close_all_links retn ; closes one link from the stack. ; returns CF=1 on empty stack. .close_one_link: mov ecx, [.close_index] sub ecx, 1 jnc .close_pop retn .close_pop: mov [.close_index], ecx mov al, [.close_stack+ecx] cmp al, fcloseObject je .close_object_tag cmp al, fcloseLink je .close_link_tag ; close the image tag mov dword [edi], '" />' add edi, 4 .close_end: retn .close_link_tag: mov dword [edi], '</a>' add edi, 4 retn .close_object_tag: mov dword [edi], '</vi' mov dword [edi+4], 'deo>' add edi, 8 retn ;.................................................................... ; Processing of block source code .copy_source: .source_line: cmp edi, [.limit] jb @f mov dword [edi], 0 stdcall StrCat, [.result], [.pHTML] mov edi, [.pHTML] @@: cmp dword [esi], ';end' je .end_source_block .copy_source_line: mov al, [esi] lea esi, [esi+1] call .store_char test al, al jz .end_source_block2 cmp al, $0d je .end_source_line cmp al, $0a jne .copy_source_line .end_source_line: xor al, $0d xor $0a cmp [esi], al jne .source_line inc esi mov [edi], al lea edi, [edi+1] jmp .source_line .end_source_block2: dec esi .end_source_block: mov dword [edi], '</pr' mov word [edi+4], 'e>' mov word [edi+6], $0a0d lea edi, [edi+8] and [.state], not fstateBlockSource jmp .skip2 ;.................................................................... .close_paragraph: ; the <p> and <li> tags are not closed actually. Only the <td> tags. ; test [.state], fstatePara ; jz .close_para_ok call .close_inlines call .close_all_links test [.state], fstateTable jnz .close_td jmp .close_para_ok .close_td: mov dword [edi], '</td' mov dword [edi+4], '>'+($0a0d shl 8) lea edi, [edi+7] .close_para_ok: and [.state], not fstatePara retn ;.................................................................... ; closes all open inline tags. .close_inlines: push esi test [.state], fstateBold jz .bold_ok mov esi, cBoldTag call .copy_one_close_tag .bold_ok: test [.state], fstateItalic jz .italic_ok mov esi, cItalicTag call .copy_one_close_tag .italic_ok: test [.state], fstateUnderline jz .underline_ok mov esi, cUnderlinedTag call .copy_one_close_tag .underline_ok: test [.state], fstateStrikeout jz .strike_ok mov esi, cStrikedTag call .copy_one_close_tag .strike_ok: test [.state], fstateInlineSource jz .inline_source_ok mov esi, cInlineCodeTag call .copy_one_close_tag .inline_source_ok: and [.state], not (fstateBold or fstateItalic or fstateUnderline or fstateStrikeout or fstateInlineSource) pop esi retn .copy_one_close_tag: mov ax, '</' stosw .coct_loop: lodsb cmp al, " " jbe .end_coct stosb jmp .coct_loop .end_coct: mov al, '>' stosb retn ;.................................................................... ; horizontal rule element .horiz_rule: call .close_paragraph mov dword [edi], '<hr ' mov dword [edi+4], '/>'+($0a0d shl 16) lea edi, [edi+8] jmp .skip2 ;.................................................................... ; Processing of the block elements. .block_element: cmp dword [esi], ';end' je .end_block cmp dword [esi], ';kil' jne .not_kill cmp byte [esi+4], 'l' je .end_all_blocks .not_kill: cmp dword [esi], ';beg' jne .not_code cmp word [esi+4], 'in' jne .not_code ; code block call .close_paragraph mov dword [edi], '<pre' mov dword [edi+4], ' cla' mov dword [edi+8], 'ss="' lea edi, [edi+12] push esi add esi, 6 call .CopyName pop esi mov word [edi], '">' lea edi, [edi+2] or [.state], fstateBlockSource jmp .skip2 .not_code: cmp dword [esi], ';tab' jne .not_table cmp word [esi+4], 'le' jne .not_table ; table block; call .close_paragraph mov al, fblkTable call .PushBlock mov dword [edi], '<tab' mov dword [edi+4], 'le>' add edi, 7 or [.state], fstateTable jmp .skip2 .not_table: cmp dword [esi], ';---' jne .not_row .table_row: call .close_paragraph mov dword [edi], '</tr' mov dword [edi+4], '><tr' mov byte [edi+8], '>' lea edi, [edi+9] jmp .skip2 .not_row: cmp dword [esi], ';quo' jne .not_quote cmp word [esi+4], 'te' jne .not_quote ; block quote call .close_paragraph mov al, fblkQuote call .PushBlock mov dword [edi], '<blo' mov dword [edi+4], 'ckqu' mov dword [edi+8], 'ote>' mov dword [edi+12], '<hea' mov dword [edi+16], 'der>' lea edi, [edi+20] push esi add esi, 6 call .CopyName mov dword [edi], '</he' mov dword [edi+4], 'ader' mov byte [edi+8], '>' lea edi, [edi+9] pop esi jmp .skip2 .not_quote: cmp dword [esi], ';uli' jne .not_ulist cmp word [esi+4], 'st' jne .not_ulist ; unnumbered list call .close_paragraph mov al, fblkUList call .PushBlock mov dword [edi], '<ul>' add edi, 4 jmp .skip2 .not_ulist: cmp dword [esi], ';oli' jne .not_olist cmp word [esi+4], 'st' jne .not_olist ; numbered list call .close_paragraph mov al, fblkOLIst call .PushBlock mov dword [edi], '<ol>' add edi, 4 jmp .skip2 .not_olist: cmp dword [esi], ';spo' jne .not_spoiler cmp dword [esi+4], 'iler' jne .not_spoiler ; spoiler call .close_paragraph mov al, fblkSpoiler call .PushBlock mov dword [edi], '<det' ;<details><summary>Spoiler</summary> mov dword [edi+4], 'ails' mov dword [edi+8], '><su' mov dword [edi+12], 'mmar' mov word [edi+16], 'y>' add edi, 18 push esi add esi, 8 call .CopyName mov dword [edi], '</su' mov dword [edi+4], 'mmar' mov word [edi+8], 'y>' add edi, 10 pop esi jmp .skip2 .not_spoiler: cmp dword [esi], ';key' jne .not_keywords cmp dword [esi+4], 'word' jne .not_keywords cmp byte [esi+8], 's' jne .not_keywords add esi, 9 mov ecx, [.keywords] jmp .append_line_to_string .not_keywords: cmp dword [esi], ';des' jne .not_desc cmp dword [esi+4], 'crip' jne .not_desc cmp dword [esi+8], 'tion' jne .not_desc add esi, 12 mov ecx, [.description] .append_line_to_string: push esi ; first argument of nop .seek_eoa: mov al, [esi] lea esi, [esi+1] test al, al jz .end_of_appended cmp al, $0d je .end_of_appended cmp al, $0a jne .seek_eoa .end_of_appended: dec esi mov byte [esi], 0 stdcall StrCat, ecx ; start address from the stack mov [esi], al ; restore the text jmp .skip2 .not_desc: jmp .skip2 ; ";" at the begining without keyword is comment. The line is ignored. .end_block: call .close_paragraph call .do_end_block jmp .skip2 .end_all_blocks: call .close_paragraph .end_all_loop: call .do_end_block jnc .end_all_loop jmp .skip2 .do_end_block: call .PopBlock test eax, eax jnz .what_block stc retn .what_block: cmp eax, fblkQuote je .end_quote cmp eax, fblkTable je .end_table cmp eax, fblkUList je .end_ulist cmp eax, fblkOLIst je .end_olist cmp eax, fblkSpoiler je .end_spoiler clc retn .end_quote: mov dword [edi], '</bl' mov dword [edi+4], 'ockq' mov dword [edi+8], 'uote' mov byte [edi+12], '>' lea edi, [edi+13] clc retn .end_table: mov dword [edi], '</tr' mov dword [edi+4], '>'+($0a0d shl 8) mov dword [edi+7], '</ta' mov dword [edi+11],'ble>' mov word [edi+15], $0a0d lea edi, [edi+17] and [.state], not fstateTable clc retn .end_olist: mov dword [edi], '</ol' jmp .end_list .end_ulist: mov dword [edi], '</ul' .end_list: mov dword [edi+4], '>' + ($0a0d shl 8) add edi, 7 clc retn .end_spoiler: mov dword [edi], '</de' mov dword [edi+4], 'tail' mov word [edi+8], 's>' add edi, 10 clc retn ;.................................................................... .PushBlock: push ecx mov ecx, [.pblock] mov [.blocks+ecx], al inc ecx cmp ecx, 1024 jb @f dec ecx @@: mov [.pblock], ecx pop ecx retn .PopBlock: mov eax, [.pblock] dec eax jns @f xor eax, eax mov [.pblock], eax retn @@: mov [.pblock], eax movzx eax, [.blocks+eax] retn ;.................................................................... ; processing link definitions in the second pass. .link_definition: mov al, [esi+1] cmp al, '#' je .define_anchor cmp al, '^' jne .skip2 ;.define_footnote: jmp .skip2 ; any other variant should be ; stripped from the text. .define_anchor: add esi, 2 mov dword [edi], '<p>' lea edi, [edi+3] or [.state], fstatePara or fstateTextNow mov dword [edi], '<a c' mov dword [edi+4], 'lass' mov dword [edi+8], '="a"' mov dword [edi+12], ' id=' mov byte [edi+16], '"' add edi, 17 push esi call .copy_id mov dword [edi], '" hr' mov dword [edi+4], 'ef="' mov byte [edi+8], '#' lea edi, [edi+9] pop esi call .copy_id mov word [edi], '">' lea edi, [edi+2] mov dword [edi], '</a>' lea edi, [edi+4] mov al, [esi] jmp .normal_char .copy_id: mov [.link_level], 1 .copy_id_loop: mov al, [esi] lea esi, [esi+1] cmp al, '[' jne @f inc [.link_level] @@: cmp al, ']' je .cpid_ok cmp al, $0d je .cpid_ok cmp al, $0a je .cpid_ok test al, al jz .cpid_ok .store: mov [edi], al lea edi, [edi+1] jmp .copy_id_loop .cpid_ok: dec [.link_level] jnz .store retn ;.................................................................... ; processing header items and building of the table of contents. .header2: xor ecx, ecx .scan_level2: inc ecx .scan_space2: lea esi, [esi+1] mov al, [esi] cmp al, '#' je .scan_level2 cmp al, ' ' je .scan_space2 cmp al, $09 je .scan_space2 cmp al, $0d je .end_of_line cmp al, $0a je .end_of_line cmp ecx, 6 jbe @f mov ecx, 6 @@: ; create ID call .BuildID shl ecx, 16 mov [.last_header], ecx add ecx, '<h0 ' mov [edi], ecx mov dword [edi+4], 'id="' mov byte [edi+8], 'H' lea edi, [edi+9] ; insert the id here. call .InsertID mov word [edi], '">' lea edi, [edi+2] cmp [.last_header], 1 shl 16 je @f call .InsertID mov dword [edi], '&nbs' mov word [edi+4], 'p;' lea edi, [edi+6] @@: or [.state], fstateHeader jmp .scan_line2 .skip2: mov al, [esi] lea esi, [esi+1] test al, al jz .finish cmp al, $0d je .skip_eol cmp al, $0a jne .skip2 .skip_eol: xor al, $0d xor $0a cmp [esi], al jne .line_start2 inc esi jmp .line_start2 ;----- End of .SecondPass ------------------------------ ; ecx - level of the header 1..6 .BuildID: push eax ebx ecx edx edi lea edi, [.IdString] cmp ecx, 1 jbe .main sub ecx, 2 push ecx inc [.cntH2+4*ecx] .zero: inc ecx cmp ecx, 5 je .end_zero mov [.cntH2+4*ecx], 0 jmp .zero .end_zero: xor ebx, ebx mov ecx, 10 .loop_numbers: mov eax, [.cntH2+4*ebx] call _NumToStrU mov al, '.' stosb inc ebx cmp ebx, [esp] jbe .loop_numbers dec edi pop ecx jmp .finID .main: mov eax, 'main' stosd .finID: lea eax, [.IdString] sub edi, eax mov [.IdLen], edi pop edi edx ecx ebx eax retn .InsertID: push ecx esi lea esi, [.IdString] mov ecx, [.IdLen] rep movsb pop esi ecx retn .CopyName: push ecx edx .sp_loop: lodsb cmp al, $0a je .end_cp_name cmp al, $0d je .end_cp_name cmp al, ' ' jbe .sp_loop dec esi .found: mov ecx, esi mov edx, esi .name_eof: lodsb test al, al jz .eol cmp al, $0a je .eol cmp al, $0d je .eol cmp al, ' ' jbe .name_eof lea ecx, [esi] jmp .name_eof .eol: sub ecx, edx jz .end_cp_name xchg esi, edx .copy_name_loop: lodsb call .store_char loop .copy_name_loop mov esi, edx .end_cp_name: pop edx ecx retn endp endmodule |
Changes to freshlib/data/memstream.asm.
︙ | ︙ | |||
20 21 22 23 24 25 26 | mov eax, [ebx+TMemoryStream.size] sub eax, edi cmp eax, [.room] ; check for enough room jge .sizeok mov ecx, [ebx+TMemoryStream.size] call [ResizeIt] | < > > > > > > > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | mov eax, [ebx+TMemoryStream.size] sub eax, edi cmp eax, [.room] ; check for enough room jge .sizeok mov ecx, [ebx+TMemoryStream.size] call [ResizeIt] mov eax, [ebx+TMemoryStream.offset] add eax, [.room] add eax, 1024 ; 1k more... cmp eax, ecx jbe @f mov ecx, eax @@: stdcall ResizeMem, ebx, ecx mov ebx, eax mov [esi], eax ; new pointer jc .exit mov [ebx+TMemoryStream.size], ecx ; new size. |
︙ | ︙ |
Added freshlib/data/minimag.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 | module "MiniMag translator" struct TMDItem .type dd ? .indent dd ? ends ;-------------------------------------------------------------- ; Converts MiniMag code into HTML. Starts from the position [.from] ; and ends at the end of the text or at first NULL character. ; ; Arguments: ; .pMiniMag - pointer to the TText structure with the BBCode ; formatted text. ; .from - the position where to start. ; ; Returns: ; edx - The same structure (possibly reallocated) with ; the translated to html code text. ; mmfDontFormat = $80000000 mmfNoInline = $40000000 mmfNoHTML = $20000000 proc TranslateMiniMag, .pText, .from, .procSanitizeURL .pStack dd ? .whspc dd ? ; whitespace symbols count; .flags dd ? .hdr dd ? ; header level .pLinks dd ? .lbl_hash dd ? .tmp_link dd ? .emoj = emoJ ; use this label. begin pushad xor eax, eax mov [.flags], eax stdcall GetMem, 256*4 mov [.pLinks], eax stdcall CreateArray, sizeof.TMDItem mov [.pStack], eax mov edx, [.pText] stdcall TextMoveGap, edx, [.from] mov ecx, [.from] add ecx, [edx+TText.GapEnd] sub ecx, [edx+TText.GapBegin] dec ecx .fp_new_line: inc ecx cmp ecx, [edx+TText.Length] jae .second_pass mov al, [edx+ecx] test al, al jz .second_pass cmp al, '[' je .link_def_found jmp .fp_check_eol .fp_skip_eol: inc ecx cmp ecx, [edx+TText.Length] jae .second_pass mov al, [edx+ecx] test al, al jz .second_pass .fp_check_eol: cmp al, $0d je .fp_new_line cmp al, $0a je .fp_new_line ; encode HTML. test al, al js .fp_skip_eol and eax, $ff movzx eax, byte [tbl_html+eax] test al, al jns .fp_skip_eol .do_encode: lea esi, [eax+tbl_html] lodsb stdcall TextSetGapSize, edx, eax xchg eax, ecx sub eax, [edx+TText.GapEnd] add eax, [edx+TText.GapBegin] stdcall TextMoveGap, edx, eax inc [edx+TText.GapEnd] ; delete the replaced char. mov edi, [edx+TText.GapBegin] add edi, edx add [edx+TText.GapBegin], ecx rep movsb mov ecx, [edx+TText.GapEnd] dec ecx jmp .fp_skip_eol .link_def_found: mov eax, ecx sub eax, [edx+TText.GapEnd] add eax, [edx+TText.GapBegin] stdcall TextMoveGap, edx, eax ; move the gap to the beginning of the link. lea edi, [ecx+1] ; the start of the label. xor esi, esi xor eax, eax .hash_loop: inc ecx cmp ecx, [edx+TText.Length] jae .end_of_lbl ;.second_pass mov al, [edx+ecx] test al, al jz .end_of_lbl ;.second_pass cmp al, ']' je .end_of_lbl test al, al js .add_hash mov al, [tbl_html+eax] test al, al jz .fp_skip_eol ;???????????? jns .add_hash push ecx edx mov edx, esi mov esi, eax add esi, tbl_html lodsb mov ecx, eax .html_hash: lodsb xor edx, eax mov dl, [tpl_func + edx] loop .html_hash mov esi, edx pop edx ecx jmp .hash_loop .add_hash: xor esi, eax movzx esi, byte [tpl_func + esi] jmp .hash_loop .end_of_lbl: mov [.lbl_hash], esi mov esi, ecx inc ecx cmp ecx, [edx+TText.Length] jae .second_pass mov al, [edx+ecx] cmp al, ' ' jne .fp_invalid_link ; valid label has been found... ; first: extract the label. sub esi, edi jz .fp_invalid_link cmp esi, $ff ja .fp_invalid_link lea edi, [edx+edi] stdcall StrNew stdcall StrCharCat, eax, esi stdcall StrCatMemHTML, eax, edi, esi mov [.tmp_link], eax ; fix the label length. stdcall StrPtr, eax mov esi, eax mov eax, [esi+string.len] dec eax cmp eax, $ff ja .free_link mov byte [esi], al .link_url_start: inc ecx cmp ecx, [edx+TText.Length] jae .free_link mov al, [edx+ecx] test al, al jz .free_link cmp al, $0d je .free_link cmp al, $0a je .free_link cmp al, ' ' jbe .link_url_start mov edi, ecx mov esi, ecx .loop_to_end_of_link: inc ecx cmp ecx, [edx+TText.Length] jae .free_link mov al, [edx+ecx] test al, al jz .end_found cmp al, $0d je .end_of_link cmp al, $0a je .end_of_link cmp al, ' ' jbe .loop_to_end_of_link lea esi, [ecx+1] jmp .loop_to_end_of_link .end_of_link: xor al, $0d xor $0a inc ecx cmp ecx, [edx+TText.Length] jae .end_found cmp al, [edx+ecx] jne .end_found inc ecx .end_found: sub esi, edi jz .free_link lea edi, [edx+edi] stdcall StrCatMemHTML, [.tmp_link], edi, esi ; for debugging links handing; ; stdcall FileWriteString, [STDERR], [.tmp_link] ; stdcall FileWriteString, [STDERR], <txt 13, 10> mov eax, [.lbl_hash] mov edi, [.pLinks] mov esi, [.tmp_link] .hash_search_slot: ; resolve possible hash collisions. xchg esi, [edi+4*eax] test esi, esi jz .end_link inc al cmp eax, [.lbl_hash] jne .hash_search_slot stdcall StrDel, esi ; the hash table is full, so simply delete the remaining link. .end_link: mov [edx+TText.GapEnd], ecx ; delete the entire line of the link definition. dec ecx jmp .fp_new_line .free_link: stdcall StrDel, [.tmp_link] .fp_invalid_link: mov ecx, [edx+TText.GapEnd] jmp .fp_skip_eol ; Second processing pass. It will format all the tags. .second_pass: mov ebx, [.from] ; int3 .start_of_line: xor eax, eax mov [.hdr], eax mov byte [.flags], al and [.flags], not mmfNoInline stdcall TextMoveGap, edx, ebx xor eax, eax mov [.whspc], eax .loop: mov ecx, ebx add ecx, [edx+TText.GapEnd] sub ecx, [edx+TText.GapBegin] cmp ecx, [edx+TText.Length] jae .empty_line_found mov al, [edx+ecx] test al, al jz .empty_line_found cmp al, ';' je .command_found test [.flags], mmfDontFormat jnz .non_empty_line_found cmp al, '#' je .header_found cmp al, '*' je .list_item_found cmp al, $0d je .empty_line_found cmp al, $0a je .empty_line_found cmp al, ' ' ja .non_empty_line_found inc [.whspc] inc [edx+TText.GapEnd] jmp .loop .command_found: cmp [.whspc], 0 jne .non_empty_line_found test [.flags], mmfDontFormat jnz .check_for_end lea eax, [ecx+8] ; spoiler cmp eax, [edx+TText.Length] jae .less_than_8 cmp dword [edx+ecx], ';spo' jne .not_spoiler cmp dword [edx+ecx+4], 'iler' jne .not_spoiler cmp byte [edx+ecx+8], ' ' ja .not_spoiler call .close_all_non_minimag push ecx mov eax, tagSpoiler call .add_to_stack pop ecx mov eax, tagSpoiler call .prefix_tag add ecx, 8 add [edx+TText.GapEnd], 8 push ebx call .skip_tag_arg pop eax cmp eax, ebx jne .sum_ok mov ecx, [edx+TText.GapBegin] mov dword [edx+ecx], 'Spoi' mov dword [edx+ecx+4], 'ler ' add [edx+TText.GapBegin], 7 add ebx, 7 .sum_ok: mov eax, tagSpoiler call .suffix_tag jmp .start_of_line .not_spoiler: .less_than_8: lea eax, [ecx+6] cmp eax, [edx+TText.Length] jae .less_than_6 cmp dword [edx+ecx], ';quo' jne .not_quote cmp word [edx+ecx+4], 'te' jne .not_quote cmp byte [edx+ecx+6], ' ' ja .not_quote ; quote command here call .close_all_non_minimag push ecx mov eax, tagQuote call .add_to_stack pop ecx mov eax, tagQuote call .prefix_tag add ecx, 6 add [edx+TText.GapEnd], 6 call .skip_tag_arg_quote mov eax, tagQuote call .suffix_tag jmp .start_of_line .not_quote: cmp dword [edx+ecx], ';tab' jne .not_table cmp word [edx+ecx+4], 'le' jne .not_table cmp byte [edx+ecx+6], ' ' ja .not_table ; table command here call .close_all_non_minimag mov eax, tagTable call .open_tag jmp .delete_to_eol .not_table: cmp dword [edx+ecx], ';beg' jne .not_begin cmp word [edx+ecx+4], 'in' jne .not_begin cmp byte [edx+ecx+6], ' ' ja .not_begin or [.flags], mmfDontFormat call .close_all_non_minimag push ecx mov eax, tagCode call .add_to_stack pop ecx mov eax, tagCode call .prefix_tag add ecx, 6 add [edx+TText.GapEnd], 6 call .skip_tag_arg mov eax, tagCode call .suffix_tag jmp .start_of_line .not_begin: cmp dword [edx+ecx], ';uli' jne .not_ulist cmp word [edx+ecx+4], 'st' jne .not_ulist cmp byte [edx+ecx+6], ' ' ja .not_ulist call .close_all_non_minimag mov eax, tagUL call .open_tag jmp .delete_to_eol .not_ulist: cmp dword [edx+ecx], ';oli' jne .not_olist cmp word [edx+ecx+4], 'st' jne .not_olist cmp byte [edx+ecx+6], ' ' ja .not_olist call .close_all_non_minimag mov eax, tagOL call .open_tag jmp .delete_to_eol .not_olist: .less_than_6: .less_than_5: .check_for_end: lea eax, [ecx+4] cmp eax, [edx+TText.Length] jae .less_than_4 cmp dword [edx+ecx], ';end' jne .not_end cmp byte [edx+ecx+4], ' ' ja .not_end ; end command here call .close_all_non_minimag call .pop_one_tag and [.flags], not mmfDontFormat jmp .delete_to_eol .not_end: test [.flags], mmfDontFormat jnz .non_empty_line_found cmp dword [edx+ecx], ';---' jne .not_ruler ; it is a horizontal ruller command. It can separate paragraphs by <hr> tag, or the table rows by <tr> tags. push ecx mov esi, [.pStack] .row_close: mov ecx, [esi+TArray.count] dec ecx js .put_hr ; empty stack! mov eax, [esi+TArray.array + sizeof.TMDItem * ecx + TMDItem.type] cmp eax, tagTD je .close_this cmp eax, tagTH je .close_this cmp eax, tagTR je .close_this cmp eax, tagTable je .open_tr .put_hr: mov eax, tagHR call .prefix_tag jmp .end_hr .close_this: mov [esi+TArray.count], ecx call .close_tag jmp .row_close .open_tr: mov eax, tagTR call .open_tag .end_hr: pop ecx jmp .delete_to_eol .less_than_4: .not_ruler: ; it is simply a comment. Delete it up to the end of the line. .delete_to_eol: inc ecx cmp ecx, [edx+TText.Length] jae .eol_ok mov al, [edx+ecx] test al, al jz .eol_ok cmp al, $0d je .eol_found2 cmp al, $0a jne .delete_to_eol .eol_found2: inc ecx xor al, $0d xor $0a cmp al, [edx+ecx] jne .eol_ok inc ecx .eol_ok: mov [edx+TText.GapEnd], ecx jmp .start_of_line .list_item_found: inc ecx cmp ecx, [edx+TText.Length] jae .non_empty_line_found cmp byte [edx+ecx], ' ' ja .non_empty_line_found add [edx+TText.GapEnd], 2 ; here list item begins: mov esi, [.pStack] mov ecx, [esi+TArray.count] dec ecx js .add_leaf mov eax, [esi + TArray.array + sizeof.TMDItem * ecx + TMDItem.type] cmp eax, tagUL je .open_li cmp eax, tagOL jne .add_leaf .open_li: mov eax, tagListItem call .open_tag jmp .add_leaf .headers dd tagH1, tagH2, tagH3, tagH4, tagH5, tagH6 .header_found: xor eax, eax .hcnt: inc eax inc ecx cmp ecx, [edx+TText.Length] jae .non_empty_line_found ; not a header? cmp byte [edx+ecx], '#' je .hcnt cmp eax, 6 ja .non_empty_line_found cmp byte [edx+ecx], ' ' jne .non_empty_line_found ; not a header? stc adc [edx+TText.GapEnd], eax mov [.hdr], eax .non_empty_line_found: mov esi, [.pStack] mov ecx, [esi+TArray.count] dec ecx js .add_leaf mov eax, [esi + TArray.array + sizeof.TMDItem * ecx + TMDItem.type] ; don't add paragraphs inside elements that can handle text by themselves. test [eax+TOneTag.flags], fLines jnz .skip_to_eol cmp eax, tagCode je .skip_to_eol cmp eax, tagTable jne .check_for_row mov eax, tagTR call .open_tag jmp .open_td_th .check_for_row: cmp eax, tagTR jne .add_leaf .open_td_th: mov eax, tagTD cmp [.hdr], 0 je .open_td mov eax, tagTH and [.hdr], 0 .open_td: call .open_tag .add_leaf: mov eax, tagPara mov ecx, [.hdr] dec ecx js .do_add_leaf mov eax, [.headers + 4*ecx] .do_add_leaf: call .open_tag jmp .skip_to_eol .empty_line_found: mov esi, [.pStack] mov ecx, [esi+TArray.count] .loop_empty_line: dec ecx js .skip_to_eol ; the empty line is not inside code block because there is no blocks at all. mov eax, [esi + TArray.array + sizeof.TMDItem*ecx + TMDItem.type] test [eax+TOneTag.flags], fLines or fInlineTag jz .check_wrap cmp eax, tagInlineCode jne .inline_code_ok and [.flags], not mmfDontFormat .inline_code_ok: mov [esi+TArray.count], ecx ; close text leaf blocks. call .close_tag jmp .loop_empty_line dec ecx js .skip_to_eol ; the empty line is not inside code block because there is no blocks at all. .check_wrap: cmp eax, tagTD je .close_wrap cmp eax, tagTH je .close_wrap cmp eax, tagListItem jne .skip_to_eol .close_wrap: mov [esi+TArray.count], ecx call .close_tag jmp .skip_to_eol ; Here seems to be a good place for processing the inline formatting elements, together with the HTML encoding. .skip_to_eol: xor eax, eax mov ecx, ebx add ecx, [edx+TText.GapEnd] sub ecx, [edx+TText.GapBegin] cmp ecx, [edx+TText.Length] jae .end_of_text mov al, [edx+ecx] test al, al jz .end_of_text cmp al, $0d je .eol_found cmp al, $0a je .eol_found test [.flags], mmfDontFormat jnz .next cmp al, '>' je .end_int_html test [.flags], mmfNoHTML jnz .next cmp al, '<' je .internal_html cmp al, '`' je .code test [.flags], mmfNoInline jnz .next cmp al, '*' je .bold cmp al, '/' je .italic cmp al, '_' je .underline cmp al, '-' je .del cmp al, $f0 ; emoji? jb .inline_ok stdcall TextMoveGap, edx, ebx mov ecx, [edx+TText.GapEnd] mov esi, ecx ; the start of thet emoji .loop_emoji: stdcall IsEmoji, [edx+ecx] jnc .end_emoji add ecx, eax cmp ecx, [edx+TText.Length] jb .loop_emoji .end_emoji: sub ecx, esi jz .next ; no emoji here... add ebx, ecx mov eax, [emoJ.lOpenP] add eax, [emoJ.lClose] stdcall TextSetGapSize, edx, eax mov edi, [edx+TText.GapBegin] add edi, edx mov esi, [emoJ.pOpenP] mov ecx, [emoJ.lOpenP] add ebx, ecx add [edx+TText.GapBegin], ecx rep movsb stdcall TextMoveGap, edx, ebx mov edi, [edx+TText.GapBegin] add edi, edx mov esi, [emoJ.pClose] mov ecx, [emoJ.lClose] add ebx, ecx add [edx+TText.GapBegin], ecx rep movsb jmp .skip_to_eol .inline_ok: cmp al, '[' je .link mov byte [.flags], al ; the previous character. .next: inc ebx jmp .skip_to_eol .internal_html: or [.flags], mmfNoHTML jmp .next .end_int_html: and [.flags], not mmfNoHTML jmp .next .eol_found: mov ah, al xor ah, $0d xor $0a inc ecx inc ebx cmp [edx+ecx], ah jne .start_of_line inc ebx jmp .start_of_line .link: locals .linkT dd ? .imgW dd ? .imgH dd ? .linkStart dd ? .lblStart dd ? .lblLen dd ? .urlLen dd ? .level dd ? endl mov ebx, ecx sub ebx, [edx+TText.GapEnd] add ebx, [edx+TText.GapBegin] stdcall TextMoveGap, edx, ebx inc ecx cmp ecx, [edx+TText.Length] jae .next xor eax, eax mov [.linkT], eax mov al, [edx+ecx] test al, al jz .next cmp al, '!' je .block_image cmp al, '?' je .inline_image cmp al, '$' je .video cmp al, '#' je .anchor mov [.linkT], tagURL jmp .image_ok .anchor: mov [.linkT], tagAnchor jmp .image_ok .video: mov [.linkT], tagVideoMM jmp .image .block_image: mov [.linkT], tagImgMM jmp .image .inline_image: mov [.linkT], tagInlineImgMM .image: inc ecx cmp ecx, [edx+TText.Length] jae .next mov al, [edx+ecx] test al, al jz .next cmp al, '0' jb .image_ok cmp al, '9' ja .image_ok ; For now... .ignore_size: inc ecx cmp ecx, [edx+TText.Length] jae .next mov al, [edx+ecx] test al, al jz .next cmp al, ':' jne .ignore_size inc ecx cmp ecx, [edx+TText.Length] jae .next mov al, [edx+ecx] test al, al jz .next .image_ok: ; here eax contains the current byte of the address label. ; The first value of the hash is computed outside the hash loop. mov edi, ecx ; the start of the label. movzx esi, byte [tpl_func + eax] ; the initial value of the hash. .hash_loop2: inc ecx cmp ecx, [edx+TText.Length] jae .next mov al, [edx+ecx] test al, al jz .next cmp al, ']' je .end_of_link_lbl xor esi, eax movzx esi, byte [tpl_func + esi] jmp .hash_loop2 .end_of_link_lbl: mov [.lbl_hash], esi mov eax, ecx sub eax, edi mov [.lblStart], edi mov [.lblLen], eax ; search the label in the hash table. push ebx ecx mov ebx, [.lbl_hash] .lbl_search: mov edi, [.pLinks] mov eax, [edi+4*ebx] test eax, eax jz .hash_not_found stdcall StrPtr, eax mov esi, eax mov edi, edx add edi, [.lblStart] mov ecx, [.lblLen] mov eax, [esi+string.len] mov [.urlLen], eax movzx eax, byte [esi] ; the first byte is the length of the label part. inc esi sub [.urlLen], eax dec [.urlLen] cmp ecx, eax jne .not_this_hash repe cmpsb je .insert_link .not_this_hash: inc bl cmp ebx, [.lbl_hash] jne .lbl_search .hash_not_found: ; the link is not in the hash table, so it is a inline link. mov esi, [.lblStart] add esi, edx mov eax, [.lblLen] mov [.urlLen], eax ; here esi point to the URL. [.urlLen] contains the length of the url. .insert_link: ; the label matches! Insert the tag prefix. pop ecx ebx mov eax, [.lblStart] mov [edx+TText.GapEnd], eax ; delete the start "[" mov eax, [.linkT] call .prefix_tag ; copy the URL here stdcall [.procSanitizeURL], esi, [.urlLen] push eax stdcall StrPtr, eax mov esi, eax mov ecx, [eax+string.len] stdcall TextSetGapSize, edx, ecx mov edi, [edx+TText.GapBegin] add edi, edx add ebx, ecx add [edx+TText.GapBegin], ecx rep movsb stdcall StrDel ; from the stack mov eax, [.linkT] call .suffix_tag ; Here check for additional link content/alt content. mov ecx, [edx+TText.GapEnd] add ecx, [.lblLen] inc ecx cmp ecx, [edx+TText.Length] jae .skip_link_content mov al, [edx+ecx] cmp al, '[' jne .skip_link_content lea eax, [ecx+1] mov [.lblStart], eax and [.level], 0 .search_second_end: inc ecx ; How about [] empty label? cmp ecx, [edx+TText.Length] jae .skip_link_content mov al, [edx+ecx] test al, al jz .skip_link_content cmp al, $0d je .skip_link_content cmp al, $0a je .skip_link_content cmp al, '[' ; nested link jne .nested_ok inc [.level] .nested_ok: cmp al, ']' jne .search_second_end cmp [.level], 0 je .second_end dec [.level] jmp .search_second_end .second_end: sub ecx, [.lblStart] mov [.lblLen], ecx mov ecx, [.lblStart] mov [edx+TText.GapEnd], ecx ; delete the link URL/label part, because there is second one. push ebx ; save ebx, because the link text should be processed again for nested structures. add ebx, [.lblLen] stdcall TextMoveGap, edx, ebx inc [edx+TText.GapEnd] mov eax, [.linkT] call .close_tag pop ebx stdcall TextMoveGap, edx, ebx mov eax, [.linkT] test [eax+TOneTag.flags], fDisableTags jz .skip_to_eol or [.flags], mmfNoHTML jmp .skip_to_eol .skip_link_content: cmp [.linkT], tagAnchor jne @f inc [edx+TText.GapEnd] dec [.lblLen] @@: add ebx, [.lblLen] stdcall TextMoveGap, edx, ebx inc [edx+TText.GapEnd] mov eax, [.linkT] call .close_tag and [.flags], not mmfNoInline jmp .skip_to_eol .bold: mov eax, tagStrong jmp .inline_tag .italic: mov eax, tagEm jmp .inline_tag .underline: mov eax, tagIns jmp .inline_tag .del: mov eax, tagDel jmp .inline_tag .code: mov eax, tagInlineCode .inline_tag: stdcall TextMoveGap, edx, ebx mov esi, [.pStack] mov ecx, [esi+TArray.count] dec ecx js .open_inline cmp eax, [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.type] jne .open_inline mov [esi+TArray.count], ecx cmp eax, tagInlineCode jne @f and [.flags], not mmfNoInline @@: call .close_tag jmp .end_inline .open_inline: cmp byte [.flags], ' ' ; the previous character. ja .next mov ecx, ebx add ecx, [edx+TText.GapEnd] sub ecx, [edx+TText.GapBegin] cmp byte [edx+ecx+1], ' ' jbe .next cmp eax, tagInlineCode jne @f or [.flags], mmfNoInline @@: call .open_tag .end_inline: inc [edx+TText.GapEnd] jmp .skip_to_eol .end_of_text: ; Close all not closed tags: stdcall TextMoveGap, edx, ebx mov edi, [.pStack] mov ecx, [edi+TArray.count] .close_all: dec ecx js .finalize mov eax, [edi + TArray.array + sizeof.TMDItem*ecx + TMDItem.type] call .close_tag jmp .close_all .finalize: mov esi, [.pLinks] mov ecx, $ff .freelinks: stdcall StrDel, [esi+4*ecx] dec ecx jns .freelinks stdcall FreeMem, esi stdcall FreeMem, [.pStack] mov [esp + 4*regEDX], edx popad return .close_all_non_minimag: push ecx esi mov esi, [.pStack] mov ecx, [esi+TArray.count] .close_loop: dec ecx js .end_close mov eax, [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.type] test [eax+TOneTag.flags], fMinimagBlock jnz .end_close mov [esi+TArray.count], ecx call .close_tag jmp .close_loop .end_close: pop esi ecx retn .pop_one_tag: push ecx esi mov esi, [.pStack] mov ecx, [esi+TArray.count] dec ecx js .end_pop_one mov [esi+TArray.count], ecx mov eax, [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.type] call .close_tag .end_pop_one: pop esi ecx retn .open_tag: push ecx esi edi push eax eax call .add_to_stack pop eax call .prefix_tag pop eax call .suffix_tag pop edi esi ecx retn .suffix_tag: lea eax, [eax+TOneTag.pOpenS] jmp .copy_tag .close_tag: lea eax, [eax+TOneTag.pClose] .prefix_tag: .copy_tag: push ecx esi edi mov esi, [eax] mov ecx, [eax+4] test esi, esi jz .tag_copy_end add ebx, ecx stdcall TextSetGapSize, edx, ecx mov edi, [edx+TText.GapBegin] add edi, edx add [edx+TText.GapBegin], ecx rep movsb .tag_copy_end: pop edi esi ecx retn .add_to_stack: push edx eax stdcall AddArrayItems, [.pStack], 1 mov [.pStack], edx pop [eax + TMDItem.type] pop edx retn .skip_tag_arg: push eax ecx esi .skip_tag_loop: inc ecx cmp ecx, [edx+TText.Length] jae .end_arg mov al, [edx+ecx] test al, al jz .end_arg cmp al, $0a je .eol1 cmp al, $0d je .eol1 cmp al, ' ' jbe .skip_tag_loop mov [edx+TText.GapEnd], ecx mov esi, ebx dec ecx .search_eol: inc ecx inc esi cmp ecx, [edx+TText.Length] jae .end_arg movzx eax, byte [edx+ecx] test al, al jz .end_arg cmp al, $0a je .eol1 cmp al, $0d je .eol1 cmp al, ' ' cmova ebx, esi jmp .search_eol .eol1: inc ecx xor al, $0d xor $0a cmp al, [edx+ecx] jne .end_arg inc ecx .end_arg: stdcall TextMoveGap, edx, ebx mov [edx+TText.GapEnd], ecx pop esi ecx eax retn .skip_tag_arg_quote: stdcall TextSetGapSize, edx, 16 mov edi, [edx+TText.GapBegin] mov esi, [edx+TText.GapEnd] mov ebx, edi mov ecx, '<u >' dec esi .skip_tag_loop2: inc esi cmp esi, [edx+TText.Length] jae .end_arg2 mov al, [edx+esi] test al, al jz .end_arg2 cmp al, $0a je .eol2 cmp al, $0d je .eol2 cmp al, ' ' jbe .skip_tag_loop2 mov [edx+TText.GapEnd], esi ; delete the spaces on the begining of the arguments. mov ah, al dec esi .search_eol2: inc esi cmp esi, [edx+TText.Length] jae .end_arg2 mov ah, al mov al, [edx+esi] test al, al jz .end_arg2 cmp al, $0a je .eol2 cmp al, $0d je .eol2 xor ah, al jns .store mov [edx+TText.GapBegin], ebx mov [edx+TText.GapEnd], esi stdcall TextSetGapSize, edx, 4 mov esi, [edx+TText.GapEnd] mov [edx+edi], ecx add edi, 4 mov ebx, edi xor ecx, '<u >' xor '</u>' .store: mov [edx+edi], al inc [edx+TText.GapEnd] inc edi cmp al, ' ' cmova ebx, edi ; the last non-space character. jmp .search_eol2 .eol2: inc esi xor al, $0d xor $0a cmp al, [edx+esi] jne .end_arg2 inc esi .end_arg2: cmp ecx, '</u>' jne .fin_arg2 mov [edx+TText.GapBegin], ebx mov [edx+TText.GapEnd], esi stdcall TextSetGapSize, edx, 4 mov esi, [edx+TText.GapEnd] mov [edx+edi], ecx add edi, 4 mov ebx, edi .fin_arg2: mov [edx+TText.GapBegin], ebx ; delete the final whitespace chars. mov [edx+TText.GapEnd], esi ; delete up to the end of the line. retn endp ; Debug procedure. Not used in production. proc DumpStack, .pStack begin pushad mov esi, [.pStack] xor ecx, ecx .loop: cmp ecx, [esi+TArray.count] jae .finish mov edi, [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.type] stdcall FileWrite, [STDERR], [edi+TOneTag.pOpenP], [edi+TOneTag.lOpenP] stdcall FileWrite, [STDERR], [edi+TOneTag.pOpenS], [edi+TOneTag.lOpenS] stdcall FileWriteString, [STDERR], txt ": " stdcall NumToStr, [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.indent], ntsDec push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack stdcall FileWriteString, [STDERR], <txt 13, 10> inc ecx jmp .loop .finish: popad return endp proc StrCatMemHTML, .dest, .psource, .length begin pushad mov esi, [.psource] mov ecx, [.length] stdcall StrLen, [.dest] lea edx, [eax+8*ecx+4] stdcall StrSetCapacity, [.dest], edx mov edi, eax mov ebx, eax add edi, [edi+string.len] xor eax, eax .loop: dec ecx js .finish lodsb test al, al js .store mov al, [tbl_html+eax] test al, al jz .loop js .encode .store: stosb jmp .loop .encode: push esi ecx lea esi, [eax+tbl_html] movzx ecx, byte [esi] inc esi rep movsb pop ecx esi jmp .loop .finish: mov ecx, edi xor eax, eax sub ecx, ebx stosd mov [ebx+string.len], ecx popad return endp proc IsEmoji, .chars begin push edx stdcall DecodeUtf8, [.chars] xchg eax, edx jc .no cmp edx, $200d je .yes cmp edx, $1f300 jb .no cmp edx, $1fae0 ja .no .yes: stc pop edx return .no: clc pop edx return endp ; Not finished, not working!!! proc TranslateMarkdown, .pText, .from .pStack dd ? .qlvl dd ? ; quote level. .whspc dd ? ; whitespace symbols count; .flags dd ? .hdr dd ? ; header level .q_from dd ? .prev dd ? begin pushad stdcall CreateArray, sizeof.TMDItem mov [.pStack], eax mov edx, [.pText] mov ebx, [.from] .start_of_line: xor eax, eax mov [.qlvl], eax mov [.flags], eax mov [.hdr], eax dec eax mov [.q_from], eax ; start from -1 on every line. stdcall TextMoveGap, edx, ebx .zerospc: xor eax, eax mov [.whspc], eax .loop: mov ecx, ebx add ecx, [edx+TText.GapEnd] sub ecx, [edx+TText.GapBegin] mov al, [edx+ecx] test al, al jz .empty_line_found cmp al, '>' je .quote_found cmp al, '-' je .ul_found cmp al, '*' je .ul_found cmp al, '+' je .ul_found cmp al, '#' je .header_found cmp al, $0d je .empty_line_found cmp al, $0a je .empty_line_found cmp al, ' ' ja .non_empty_line_found inc [.whspc] inc [edx+TText.GapEnd] jmp .loop ; closes all tags up to position ecx (excluding the tag on ecx) .close_to_ecx: push eax .ecx_loop: mov eax, [esi+TArray.count] dec eax cmp eax, ecx je .end_close_ecx mov [esi+TArray.count], eax mov eax, [esi+TArray.array + sizeof.TMDItem*eax + TMDItem.type] call .close_tag jmp .ecx_loop .end_close_ecx: pop eax retn ; closes all tags up to position ecx (includig the tag on ecx) .close_to_ecx_inc: push eax .ecx_loop2: mov eax, [esi+TArray.count] dec eax cmp eax, ecx jl .end_close_ecx mov [esi+TArray.count], eax mov eax, [esi+TArray.array + sizeof.TMDItem*eax + TMDItem.type] call .close_tag jmp .ecx_loop2 ; Searches the tags stack for listitem and returns it's index in the stack. ; Arguments: ; esi - pointer to the stack array. ; Returns: ; esi - pointer to the tag stack. ; If the list item has been found: CF = 0; ecx = index in the array; ; If the list item has not been found: CF = 1 ; Modifies eax .search_for_li: mov esi, [.pStack] mov ecx, [esi+TArray.count] .search_li: dec ecx cmp ecx, [.q_from] jle .li_not_found mov eax, [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.type] cmp eax, tagListItem je .li_found cmp eax, tagQuote jne .search_li .li_not_found: stc retn .li_found: clc retn .search_for_bq: mov esi, [.pStack] mov ecx, [.q_from] .search_bq: inc ecx cmp ecx, [esi+TArray.count] jae .bq_not_found cmp [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.type], tagQuote jne .search_bq clc retn .bq_not_found: stc retn .ul_found: call .check_for_code_block jc .skip_to_eol inc ecx cmp ecx, [edx+TText.Length] jae .empty_line_found cmp byte [edx+ecx], ' ' ; mandatory space ja .non_empty_line_found add [edx+TText.GapEnd], 2 ; remove the marker. .search_list: call .search_for_li jnc .list_found call .close_to_ecx jmp .create_new_ul .list_found: OutputValue "List found at: ", [.whspc], 10, -1 mov edi, [.whspc] sub edi, [esi + TArray.array + sizeof.TMDItem*ecx + TMDItem.indent] call .close_to_ecx cmp edi, 4 jge .create_new_ul ; create list one level of nesting up. mov [esi + TArray.count], ecx ; close the current listitem. call .close_tag cmp edi, -4 jg .create_new_li dec ecx mov eax, [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.type] ; eax should be tagUL or tagOL and nothing else! mov [esi+TArray.count], ecx call .close_tag ; close the list as well. (can be UL or OL!) jmp .search_list ; and then search back for the list on the previous level. .create_new_ul: mov eax, tagUL call .open_tag .create_new_li: OutputValue "List item created on:", [.whspc], 10, -1 mov eax, tagListItem call .open_tag jmp .loop ; after creating list items, the whitespace for the current line should not be reset. .check_for_code_block: mov esi, [.pStack] mov eax, [esi+TArray.count] dec eax js .not_a_code_block cmp [esi+TArray.array + sizeof.TMDItem*eax + TMDItem.type], tagCode jne .not_a_code_block ; there is open code block cmp [.whspc], 4 jb .close_code_block stc retn .close_code_block: mov eax, tagCode call .close_tag .not_a_code_block: clc retn .quote_found: DebugMsg "Quote found" mov eax, [.q_from] OutputValue "Search quote from: ", eax, 10, -1 .quote_search: inc eax mov [.q_from], eax cmp eax, [esi+TArray.count] jae .create_new_quote cmp [esi+TArray.array+sizeof.TMDItem*eax+TMDItem.type], tagQuote je .del_marker jmp .quote_search .create_new_quote: DebugMsg "New quote created" call .check_for_code_block jc .skip_to_eol mov eax, tagQuote call .open_tag mov eax, [esi+TArray.count] dec eax mov [.q_from], eax .del_marker: DebugMsg "Delete quote marker." inc [edx+TText.GapEnd] inc ecx cmp ecx, [edx+TText.Length] jae .empty_line_found cmp byte [edx+ecx], ' ' ; optional space. jne .zerospc inc [edx+TText.GapEnd] jmp .zerospc .headers dd tagH1, tagH2, tagH3, tagH4, tagH5, tagH6 .header_found: cmp [.whspc], 4 jae .code_block xor eax, eax .hcnt: inc eax inc ecx cmp ecx, [edx+TText.Length] jae .non_empty_line_found ; not a header? cmp byte [edx+ecx], '#' je .hcnt cmp eax, 6 ja .non_empty_line_found cmp byte [edx+ecx], ' ' jne .non_empty_line_found ; not a header? stc adc [edx+TText.GapEnd], eax mov [.hdr], eax .non_empty_line_found: OutputValue "Non empty line indent: ", [.whspc], 10, -1 mov esi, [.pStack] mov ecx, [esi+TArray.count] dec ecx js .add_leaf mov ecx, [esi + TArray.array + sizeof.TMDItem * ecx + TMDItem.type] ; don't add paragraphs inside elements that can handle text by themselves. test [ecx+TOneTag.flags], fLines jnz .skip_to_eol .add_leaf: call .search_for_bq jc .quote_ok call .close_to_ecx_inc .quote_ok: call .search_for_li mov eax, [.whspc] jc .indent_ok sub eax, [esi + TArray.array + sizeof.TMDItem*ecx+TMDItem.indent] .indent_ok: cmp eax, 4 jge .code_block cmp eax, -4 jg .para call .close_to_ecx_inc dec ecx mov eax, [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.type] mov [esi+TArray.count], ecx call .close_tag jmp .add_leaf .para: mov eax, tagPara mov ecx, [.hdr] dec ecx js .do_add_leaf mov eax, [.headers + 4*ecx] .do_add_leaf: call .open_tag jmp .skip_to_eol .empty_line_found: call .search_for_bq jc .quote_ok2 call .close_to_ecx_inc .quote_ok2: mov esi, [.pStack] mov ecx, [esi+TArray.count] dec ecx js .skip_to_eol ; the empty line is not inside code block because there is no blocks at all. mov eax, [esi + TArray.array + sizeof.TMDItem*ecx + TMDItem.type] test [eax+TOneTag.flags], fLines jz .close_list mov [esi+TArray.count], ecx ; close text leaf blocks. call .close_tag jmp .skip_to_eol .close_list: DebugMsg "Close list on second empty line." cmp eax, tagListItem jne .skip_to_eol call .close_tag mov [esi+TArray.count], ecx dec ecx js .skip_to_eol mov eax, [esi + TArray.array + sizeof.TMDItem*ecx + TMDItem.type] cmp eax, tagUL jne .skip_to_eol call .close_tag mov [esi+TArray.count], ecx jmp .skip_to_eol .code_block: DebugMsg "Code block detected!" mov esi, [.pStack] mov ecx, [esi+TArray.count] dec ecx js .add_new_code_block cmp [esi+TArray.array + sizeof.TMDItem*ecx + TMDItem.type], tagCode je .skip_to_eol .add_new_code_block: mov eax, tagCode call .open_tag ; add [edx+TText.GapEnd], 4 ; the gap should be properly positioned here! jmp .skip_to_eol .open_new: cmp ecx, [esi + TArray.count] ; esi = indicators list jae .skip_to_eol mov eax, [esi + TArray.array + sizeof.TMDItem*ecx + TMDItem.indent] mov [.whspc], eax mov eax, [esi + TArray.array + sizeof.TMDItem*ecx + TMDItem.type] call .open_tag inc ecx jmp .open_new ; Here seems to be a good place for processing the inline formatting elements, together with the HTML encoding. .skip_to_eol: xor eax, eax mov ecx, ebx add ecx, [edx+TText.GapEnd] sub ecx, [edx+TText.GapBegin] cmp ecx, [edx+TText.Length] jae .end_of_text mov al, [edx+ecx] test al, al jz .end_of_text cmp al, $0d je .eol_found cmp al, $0a je .eol_found ; html encoding from here test al, al ; all values > 127 are unicode and should not be encoded. js .next movzx eax, byte [tbl_html+eax] test al, al jns .next ; the same as above lea esi, [eax+tbl_html] ; the address of the replacement string. lodsb movzx ecx, al ; length ; insert the replacement html encoding from esi stdcall TextSetGapSize, edx, ecx stdcall TextMoveGap, edx, ebx inc [edx+TText.GapEnd] ; delete the previous char. mov edi, [edx+TText.GapBegin] add edi, edx add [edx+TText.GapBegin], ecx add ebx, ecx rep movsb .next: inc ebx jmp .skip_to_eol .eol_found: mov ah, al xor ah, $0d xor $0a inc ecx inc ebx cmp [edx+ecx], ah jne .start_of_line inc ebx jmp .start_of_line .end_of_text: ; Close all not closed tags: stdcall TextMoveGap, edx, ebx mov edi, [.pStack] mov ecx, [edi+TArray.count] .close_all: dec ecx js .finalize mov eax, [edi + TArray.array + sizeof.TMDItem*ecx + TMDItem.type] call .close_tag jmp .close_all .finalize: stdcall FreeMem, [.pStack] ; stdcall FreeMem, [.pIList] mov [esp + 4*regEDX], edx popad return .open_tag: push ecx esi edi push eax eax call .add_to_stack pop eax call .prefix_tag pop eax call .suffix_tag pop edi esi ecx retn .suffix_tag: lea eax, [eax+TOneTag.pOpenS] jmp .copy_tag .close_tag: lea eax, [eax+TOneTag.pClose] .prefix_tag: .copy_tag: push ecx esi edi mov esi, [eax] mov ecx, [eax+4] test esi, esi jz .tag_copy_end add ebx, ecx stdcall TextSetGapSize, edx, ecx mov edi, [edx+TText.GapBegin] add edi, edx add [edx+TText.GapBegin], ecx rep movsb .tag_copy_end: pop edi esi ecx retn .add_to_stack: push edx eax [.whspc] stdcall AddArrayItems, [.pStack], 1 mov [.pStack], edx pop [eax+TMDItem.indent] pop [eax + TMDItem.type] pop edx retn endp endmodule |
Added freshlib/data/named_array.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Macros and code for support of NamedArray data structure. ; This is a data array, that contains named fields and can be serialized ; into a text string/file in run-time. ; This structure is aimed to be used in the user settings and interfaces ; that need to be easy for changing by the user, by using GUI interfaces or ; human readable text config files. ; ; Target OS: Any ; ; Dependencies: StrLib, GUI library. ; ;_________________________________________________________________________________________ struct TMetaHeader .pData dd ? ; pointer to the NamedArray data fields. .length dd ? ; total length of the NamedArray structure: fields+static data+meta data. .count dd ? ; count of the TMetaFields following. ends struct TMetaField .pName dd ? .type dw ? .len dw ? ; length of the field in dwords .offset dd ? ; offset of the field, relative to the start of the array. ends ; ; The NamedArray is a type of structure that contains ; the fields names together with the field values. ; This way, the values of the array can be write to ; text files and then restored in runtime, based not ; on the fields offsets (that can differ) but based on ; field names. ; ___natNUM = 0 ; NUM, Stored as decimal, signed. ___natHEX = 1 ; HEX, Stored as hex, unsigned. ___natTXT = 2 ; TXT, Stored as string. Needs postprocessing. ___natFONT = 3 ; FONT, Stored as multivalue: face, size, flags, etc. ___natPNG = 4 ; PNG, Stored as a hex array. Need postprocessing. ___natFILE = 5 ; FILE, Stored as a hex array. macro NamedArray lbl, [name, type, value] { common local ..fake_lbl label ..fake_lbl dword label lbl dword ; data fields forward local ..len, ..fake_name ..len = 0 label ..fake_name dword if used lbl#.#name | (defined options.WholeTheme & options.WholeTheme) label lbl#.#name dword irp val, value \{ ..len = ..len + 1 if (type eq NUM)|(type eq HEX) dd val else if type eq TXT if val eqtype 1 dd val else dd 0 ; will be changed later in the macro end if else if (type eq FONT) | (type eq PNG) dd 0 ; will be changed later in the macro. dd 0 else if type eq FILE dd 0 ; pointer to data else Error! Unknown `type type. end if end if end if end if \} end if ; data for the strings, images, files, etc. forward local ..index ..index = 0 irp val, value \{ \local ..dta, ..len if used lbl\#.\#name | (defined options.WholeTheme & options.WholeTheme) if type eq TXT if ~ val eqtype 1 ..dta db val db 0 end if end if if type eq FONT match face : size : weight : flags, val \\{ ; For the Linux port, this structure is enough and not need FontCreate call. \\local ..font_face ..dta dd ..font_face ; font face string dd size ; NUM dd weight ; NUM dd flags ; HEX ..font_face db face, 0 \\} ..index = ..index + 4 end if if type eq PNG dd ..len ..dta file val ..len = $ - ..dta ..index = ..index + 4 end if if type eq FILE dd ..len ..dta file val ..len = $ - ..dta end if if defined ..dta store dword ..dta at ..fake_name + ..index end if end if ..index = ..index + 4 \} ; Header of the meta data. common local ..cnt, ..total, ..fake_meta ..cnt = 0 if used lbl#.#meta | (defined options.WholeTheme & options.WholeTheme) label lbl#.#meta dword label ..fake_meta dword dd ..fake_lbl dd lbl#.#size dd ..total ; metadata forward local ..namestr ; array with the fields names and offsets. if defined lbl#.#name dd ..namestr dw ___nat#type dw ..len ; dwords dd ..fake_name - ..fake_lbl ..cnt = ..cnt + 1 end if ; field names forward if used ..namestr | (defined options.WholeTheme & options.WholeTheme) ..namestr db `name, 0 end if ; Initialization code common end if if used lbl#.#Init | (defined options.WholeTheme & options.WholeTheme) lbl#.#Init: forward local ..index ..index = 0 irp val, value \{ if used lbl\#.\#name | (defined options.WholeTheme & options.WholeTheme) if type eq FONT mov eax, [..fake_name+..index+4] stdcall FontCreate, [eax+__TFont.hFontFace], [eax+__TFont.height], [eax+__TFont.weight], [eax+__TFont.flags] mov [..fake_name+..index], eax ..index = ..index + 4 end if if (type eq PNG) mov eax, [..fake_name+..index+4] stdcall CreateImagePNG, eax, [eax-4] mov [..fake_name+..index], eax ..index = ..index + 4 end if end if ..index = ..index + 4 \} common retn end if ; Finalization code common if used lbl#.#Finalize | (defined options.WholeTheme & options.WholeTheme) lbl#.#Finalize: forward local ..index ..index = 0 irp val, value \{ if used lbl\#.\#name | (defined options.WholeTheme & options.WholeTheme) if type eq FONT stdcall __metaFontDestroy, ..fake_name+..index ..index = ..index + 4 end if if (type eq PNG) stdcall DestroyImage, [..fake_name+..index] ..index = ..index + 4 end if end if ..index = ..index + 4 \} common retn end if common lbl#.#size = $ - ..fake_lbl ..total = ..cnt } proc __metaFontDestroy, .pFontRec begin push eax mov eax, [.pFontRec] stdcall FontDestroy, [eax] ; the font handle. mov eax, [eax+4] stdcall StrDel, [eax+__TFont.hFontFace] pop eax return endp ; Serializes the NamedArray to a string. ; .pMeta - poitner to the meta data of the named array structure. proc NamedArrayToString, .pMeta .array dd ? .data2string dd ? .datalen dd ? begin pushad mov esi, [.pMeta] stdcall StrNew mov edi, eax lodsd mov [.array], eax lodsd ; TMetaHeader.length lodsd mov ecx, eax ; count of the meta records. .loop: dec ecx js .end_loop lodsd ; pointer to the field name. stdcall StrCat, edi, eax stdcall StrCharCat, edi, " = " lodsw ; data type movzx eax, ax push [.data_handlers+4*eax] push [.data_len+4*eax] pop [.datalen] pop [.data2string] lodsw movzx edx, ax ; number of sub values lodsd ; offset, relative to [.array] mov ebx, eax add ebx, [.array] ; pointer to the values .loop2: dec edx js .end_loop2 stdcall [.data2string], ebx push eax stdcall StrCat, edi, eax stdcall StrDel ; from the stack add ebx, [.datalen] test edx, edx jz .loop2 stdcall StrCharCat, edi, ", " jmp .loop2 .end_loop2: stdcall StrCharCat, edi, $0a0d jmp .loop .end_loop: mov [esp+regEAX*4], edi popad return .data_handlers dd __DataToNum, __DataToHex, __DataToTxt, __DataToFont, __DataToPng, __DataToFile .data_len dd 4, 4, 4, 8, 8, 4 endp proc __DataToNum, .pData begin mov eax, [.pData] stdcall NumToStr, [eax], ntsDec or ntsSigned return endp proc __DataToHex, .pData begin mov eax, [.pData] stdcall NumToStr, [eax], ntsHex or ntsUnsigned stdcall StrCharInsert, eax, '$', 0 return endp proc __DataToTxt, .pData begin mov eax, [.pData] stdcall StrDupMem, [eax] stdcall StrSetQuotes, eax, 0 return endp proc __DataToFont, .pData begin push esi ebx mov esi, [.pData] mov esi, [esi+4] stdcall StrDup, [esi+__TFont.hFontFace] ; face name stdcall StrSetQuotes, eax, 0 mov ebx, eax stdcall StrCharCat, ebx, " : " stdcall NumToStr, [esi+__TFont.height], ntsDec or ntsUnsigned ; size stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall StrCharCat, ebx, " : " stdcall NumToStr, [esi+__TFont.weight], ntsDec or ntsUnsigned ; weight stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall StrCharCat, ebx, " : $" stdcall NumToStr, [esi+__TFont.flags], ntsHex or ntsUnsigned ; flags stdcall StrCat, ebx, eax stdcall StrDel, eax mov eax, ebx pop ebx esi return endp proc __DataToPng, .pData begin pushad mov esi, [.pData] mov esi, [esi+4] ; pointer to the compressed file. mov ecx, [esi-4] ; length jmp __DataToFile.convert_file endp proc __DataToFile, .pData begin pushad mov esi, [.pData] mov esi, [esi] ; pointer to the compressed file. mov ecx, [esi-4] ; length .convert_file: stdcall NumToStr, ecx, ntsDec or ntsUnsigned mov ebx, eax stdcall StrCharCat, ebx, ":" stdcall EncodeBase64, esi, ecx push eax stdcall StrCat, ebx, eax stdcall StrDel ; from the stack mov [esp+regEAX*4], ebx popad return endp proc StringToNamedArray, .pMeta, .hString .string2data dd ? .free_data dd ? .data_start dd ? .data_end dd ? begin pushad mov esi, [.pMeta] mov eax, [esi+TMetaHeader.pData] mov [.data_start], eax add eax, [esi+TMetaHeader.length] mov [.data_end], eax stdcall StrSplitList, [.hString], $0a, FALSE mov esi, eax xor ecx, ecx .loop: cmp ecx, [esi+TArray.count] jae .end_loop stdcall StrSplitList, [esi+TArray.array+4*ecx], "=", TRUE mov edi, eax cmp [edi+TArray.count], 2 je .value_ok ; join the strings mov ebx, 2 .join: cmp ebx, [edi+TArray.count] jae .value_ok stdcall StrCat, [edi+TArray.array+4], txt "=" xor eax, eax xchg eax, [edi+TArray.array+4*ebx] stdcall StrCat, [edi+TArray.array+4], eax stdcall StrDel, eax inc ebx jmp .join .value_ok: stdcall __SearchName, [.pMeta], [edi+TArray.array] test eax, eax jz .free1 push esi ecx mov ebx, eax stdcall StrSplitList, [edi+TArray.array+4], ',', FALSE mov edx, eax movzx ecx, [ebx+TMetaField.len] cmp ecx, [edx+TArray.count] jb .free2 ; there is no place to restore this parameter. movzx eax, [ebx+TMetaField.type] push [.data_handlers+4*eax] push [.free_handlers+4*eax] pop [.free_data] pop [.string2data] mov esi, [ebx+TMetaField.offset] add esi, [.data_start] ; pointer to the data field. xor ecx, ecx .loop2: cmp ecx, [edx+TArray.count] jae .free2 call [.free_data] stdcall [.string2data], [edx+TArray.array+4*ecx] inc ecx jmp .loop2 .free2: stdcall ListFree, edx, StrDel pop ecx esi .free1: stdcall ListFree, edi, StrDel .next_line: inc ecx jmp .loop .end_loop: stdcall ListFree, esi, StrDel popad return .data_handlers dd __NumToData, __NumToData, __TxtToData, __FontToData, __PngToData, __FileToData .free_handlers dd .end_free, .end_free, .free_txt, .free_font, .free_png, .free_file .check_ptr: test eax, eax jz .out cmp eax, [.data_start] jb .out cmp eax, [.data_end] ja .out ;in stc retn .out: clc retn .free_txt: stdcall StrDel, [esi] retn .free_font: cmp dword [esi], 0 je .end_free stdcall FontDestroy, [esi] mov eax, [esi+4] call .check_ptr jnc .end_free ; stdcall StrDel, [eax+__TFont.hFontFace] mov [eax+__TFont.hFontFace], 0 retn .free_png: stdcall DestroyImage, [esi] mov eax, [esi+4] .free_ptr: sub eax, 4 call .check_ptr jc .end_free ; don't free structure internal memory stdcall FreeMem, eax .end_free: retn .free_file: mov eax, [esi] jmp .free_ptr endp proc __NumToData, .hString begin stdcall StrToNumEx, [.hString] mov [esi], eax add esi, 4 return endp proc __TxtToData, .hString begin stdcall StrDup, [.hString] stdcall StrClipQuotes, eax mov [esi], eax add esi, 4 return endp proc __FontToData, .hString begin push ebx ecx edx edi xor eax, eax mov [esi], eax mov edi, [esi+4] ; pointer to the font parameters. stdcall StrSplitList, [.hString], ":", FALSE mov edx, eax cmp [edx+TArray.count], 4 jne .finish stdcall StrClipQuotes, [edx+TArray.array] stdcall StrDup, [edx+TArray.array] xchg eax, [edi+__TFont.hFontFace] stdcall StrDel, eax stdcall StrToNumEx, [edx+TArray.array+4] ; size mov [edi+__TFont.height], eax mov ebx, eax stdcall StrToNumEx, [edx+TArray.array+8] ; weight mov [edi+__TFont.weight], eax mov ecx, eax stdcall StrToNumEx, [edx+TArray.array+12] ; flags mov [edi+__TFont.flags], eax mov edi, eax stdcall StrPtr, [edx+TArray.array] stdcall FontCreate, eax, ebx, ecx, edi stdcall ListFree, edx, StrDel mov [esi], eax add esi, 8 .finish: pop edi edx ecx ebx return endp proc __PngToData, .hString begin push edx stdcall StrSplitList, [.hString], ":", FALSE mov edx, eax cmp [edx+TArray.count], 2 jne .finish stdcall DecodeBase64, [edx+TArray.array+4] mov [esi+4], eax stdcall CreateImagePNG, eax, [eax-4] mov [esi], eax .finish: stdcall ListFree, edx, StrDel add esi, 8 pop edx return endp proc __FileToData, .hString begin push edx stdcall StrSplitList, [.hString], ":", FALSE mov edx, eax cmp [edx+TArray.count], 2 jne .finish stdcall DecodeBase64, [edx+TArray.array+4] mov [esi], eax .finish: stdcall ListFree, edx, StrDel add esi, 4 pop edx return endp ; returns a pointer to the parameter description block: name, count, offset. proc __SearchName, .pMeta, .hName begin push esi ecx mov esi, [.pMeta] mov ecx, [esi+TMetaHeader.count] add esi, sizeof.TMetaHeader .search: dec ecx js .not_found stdcall StrCompCase, [esi+TMetaField.pName], [.hName] jc .found add esi, sizeof.TMetaField jmp .search .not_found: xor esi, esi .found: mov eax, esi pop ecx esi return endp |
Added freshlib/data/random.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS independent part of different random number generators. ; ; Target OS: Any ; ; Dependencies: memory.asm, strlib.asm ; ; Notes: ; ;_________________________________________________________________________________________ module "Random library" ; Cryptographically strong random generator. Possibly slow. OS dependent implementation. ; Returns: ; eax - pointer to memory block of random bytes. interface GetRandomBytes, .count proc GetRandomString, .size begin pushad mov eax, [.size] shr eax, 1 adc eax, 0 jz .error stdcall GetRandomBytes, eax jc .error mov esi, eax mov ebx, eax stdcall StrNew mov [esp+4*regEAX], eax stdcall StrSetCapacity, eax, [.size] mov edi, eax mov ecx, [.size] mov [edi+string.len], ecx xor eax, eax .loop: lodsb mov dl, al and al, $0f shr dl, 4 cmp al,$0a sbb al,$69 das stosb dec ecx jz .string_ok mov al, dl cmp al,$0a sbb al,$69 das stosb dec ecx jnz .loop .string_ok: xor eax, eax stosd stdcall FreeMem, ebx clc popad return .error: stc popad return endp include '%TargetOS%/random.asm' endmodule |
Added freshlib/data/sha1.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | ; Computes the SHA-1 hash for the data in [.pData] with length in [.len] ; The memory buffer in [.pData] must have size higher than [.len] and multiply of 64 bytes (512 bits) ; ; proc DataSHA1, .pData, .len .hash rd 5 ; the h[0]..h[4] accumulators .abcde rd 5 ; the chunk hashes .words rd 80 ; the 80 dword chunks. begin pushad ; init the accumulators mov ecx, 4 .init_acc: mov eax, [.sha1_h + 4*ecx] mov [.hash+4*ecx], eax mov [.abcde+4*ecx], eax dec ecx jns .init_acc ; pad the data mov edx, [.len] mov edi, [.pData] add edi, edx lea ecx, [edx+1] mov al, $80 stosb add edx, $40 and edx, not $3f sub ecx, edx neg ecx sub ecx, 8 jge @f add ecx, $40 add edx, $40 @@: xor eax, eax rep stosb stosd mov eax, [.len] shl eax, 3 ; in bits!!! bswap eax stosd ; edx contains the padded length of the block. multiply of 64 shr edx, 2 ; the size in dwords mov esi, [.pData] .chunk_loop: xor ebx, ebx .get16dw: lodsd bswap eax mov [.words + 4*ebx], eax inc ebx cmp ebx, 16 jne .get16dw .fill80: mov eax, [.words + 4*ebx - 3*4] xor eax, [.words + 4*ebx - 8*4] xor eax, [.words + 4*ebx - 14*4] xor eax, [.words + 4*ebx - 16*4] rol eax, 1 mov [.words + 4*ebx], eax inc ebx cmp ebx, 80 jne .fill80 ; process one chunk. xor ebx, ebx .process0_19: mov ecx, [.abcde + 1*4] ; b mov eax, ecx not ecx ; not b and eax, [.abcde + 2*4] ; c and ecx, [.abcde + 3*4] ; d or ecx, eax ; f mov eax, [.abcde + 0*4] rol eax, 5 ; a rol 5 lea eax, [eax + ecx + $5A827999]; f + k add eax, [.abcde + 4*4] ; e add eax, [.words + 4*ebx] ; temp mov ecx, [.abcde + 1*4] rol ecx, 30 push eax [.abcde + 0*4] ecx [.abcde + 2*4] [.abcde + 3*4] pop [.abcde + 4*4] [.abcde + 3*4] [.abcde + 2*4] [.abcde + 1*4] [.abcde + 0*4] inc ebx cmp ebx, 20 jne .process0_19 .process20_39: mov ecx, [.abcde + 1*4] xor ecx, [.abcde + 2*4] xor ecx, [.abcde + 3*4] ; f mov eax, [.abcde + 0*4] rol eax, 5 lea eax, [eax + ecx + $6ED9EBA1] add eax, [.abcde + 4*4] add eax, [.words + 4*ebx] ; temp mov ecx, [.abcde + 1*4] rol ecx, 30 push eax [.abcde + 0*4] ecx [.abcde + 2*4] [.abcde + 3*4] pop [.abcde + 4*4] [.abcde + 3*4] [.abcde + 2*4] [.abcde + 1*4] [.abcde + 0*4] inc ebx cmp ebx, 40 jne .process20_39 .process40_59: mov ecx, [.abcde+1*4] ; b mov eax, ecx ; b mov edi, [.abcde+2*4] ; c and ecx, edi ; b and c and eax, [.abcde+3*4] ; b and d and edi, [.abcde+3*4] ; c and d or ecx, eax or ecx, edi ; f mov eax, [.abcde+0*4] rol eax, 5 lea eax, [eax+ecx+$8F1BBCDC] add eax, [.abcde+4*4] add eax, [.words+4*ebx] ; temp mov ecx, [.abcde+1*4] rol ecx, 30 push eax [.abcde+0*4] ecx [.abcde+2*4] [.abcde+3*4] pop [.abcde+4*4] [.abcde+3*4] [.abcde+2*4] [.abcde+1*4] [.abcde+0*4] inc ebx cmp ebx, 60 jne .process40_59 .process60_79: mov ecx, [.abcde+1*4] xor ecx, [.abcde+2*4] xor ecx, [.abcde+3*4] ; f mov eax, [.abcde+0*4] rol eax, 5 lea eax, [eax+ecx+$CA62C1D6] add eax, [.abcde+4*4] add eax, [.words+4*ebx] ; temp mov ecx, [.abcde+1*4] rol ecx, 30 push eax [.abcde+0*4] ecx [.abcde+2*4] [.abcde+3*4] pop [.abcde+4*4] [.abcde+3*4] [.abcde+2*4] [.abcde+1*4] [.abcde+0*4] inc ebx cmp ebx, 80 jne .process60_79 ; the word array is processed mov ecx, 4 .add_loop: mov eax, [.abcde+4*ecx] add eax, [.hash+4*ecx] mov [.abcde+4*ecx], eax mov [.hash+4*ecx], eax dec ecx jns .add_loop sub edx, 16 jnz .chunk_loop stdcall GetMem, 20 mov edi, eax mov eax, [.hash+0*4] mov ebx, [.hash+1*4] mov ecx, [.hash+2*4] mov edx, [.hash+3*4] mov esi, [.hash+4*4] bswap eax bswap ebx bswap ecx bswap edx bswap esi mov [edi], eax mov [edi+4], ebx mov [edi+8], ecx mov [edi+12], edx mov [edi+16], esi mov [esp+4*regEAX], edi popad return .sha1_h dd 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0 endp proc StrSHA1, .pSha1 begin push ebx ecx esi mov esi, [.pSha1] stdcall StrNew mov ebx, eax mov ecx, 20 .loop: movzx eax, byte [esi] inc esi stdcall NumToStr, eax, ntsHex or ntsFixedWidth or ntsUnsigned + 2 stdcall StrCat, ebx, eax stdcall StrDel, eax dec ecx jnz .loop mov eax, ebx pop esi ecx ebx return endp |
Changes to freshlib/data/strlib.asm.
|
| | | | | < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < | < < < < | < < < < < < < < < < < < < < < < | < < < < < < < < | < < | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | > | | | < < < < > | > > > > | | | > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | > > > > > > > > > > > < > > > | > > > > > > > | | < | | | | > | | | > > > > > > > > > > | > > > > > < < | > | | > | > > > > | > > > > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS independent string manipulation library. ; ; Target OS: Any ; ; Dependencies: memory.asm; arrays.asm ; ; Notes: ; ;_________________________________________________________________________________________ module "String library" STR_MINSTRLEN = 127 ; must be N*8-1 STR_SEARCH_ONE_ATEMPT = 100 rstruct string .capacity dd ? .len dd ? . rb 0 ends cNewLine text bNEWLINE ; NumToStr flags ntsSigned = $00000 ntsUnsigned = $10000 ntsFixedWidth = $20000 ntsBin = $0200 ntsQuad = $0400 ntsOct = $0800 ntsDec = $0a00 ntsHex = $1000 ; Global variable, storing parameters of dynamic strings list. uglobal if used InitStrings StrHandleOffs dd ? StrHandleCnt dd ? StrHandleEnd dd ? ptrStrHandleSpace dd ? ptrStrTable dd ? ; StrLib strings arrray. Contains pointers to the memory allocated for strings. if options.Threads align 4 StrMutex TMutex ; mutex that allows thread safety of StrLib end if end if endg ; < OS independent library functions > STR_HANDLE_CNT = 32*1024*1024 ;************************************************************************************ ; Allocates memory for string table and allocates memory for strings. ; Start it before any work with strings. (Or better use InitializeAll macro) ; Returns 0 if failed to allocate needed memory. ;************************************************************************************ if used ptrStrTable initialize InitStrings begin StrLib = 1 mov [StrHandleOffs], $c0000000 mov [StrHandleCnt], STR_HANDLE_CNT mov [ptrStrHandleSpace], 0 if TargetOS eq Linux mov eax, sys_personality xor ebx, ebx dec ebx int $80 test eax, ADDR_LIMIT_3GB jnz .space_ok mov eax, sys_mmap2 xor ebx, ebx mov ecx, STR_HANDLE_CNT ; 32M size of the address space for string handles. this memory will never be allocated. mov edx, PROT_NONE mov esi, MAP_ANONYMOUS or MAP_PRIVATE xor edi, edi dec edi xor ebp, ebp int $80 mov [StrHandleOffs], eax mov [ptrStrHandleSpace], eax .space_ok: end if mov eax, [StrHandleOffs] add eax, [StrHandleCnt] mov [StrHandleEnd], eax OutputValue "String handles start from: ", [StrHandleOffs], 16, 8 OutputValue "String handles ends on: ", [StrHandleEnd], 16, 8 if options.Threads stdcall MutexCreate, 0, StrMutex end if stdcall CreateArray, 4 jc .finish mov [ptrStrTable], eax mov [eax+TArray.lparam], 0 ; lParam is the last allocated handle number .finish: if options.Threads stdcall MutexRelease, StrMutex end if return endp end if ;************************************************************************************** ; Frees all memory used for strings library ; Call it before exit of the program or use FinalizeAll macro. ;************************************************************************************** if used InitStrings finalize FreeStrings if defined options.DebugMode & options.DebugMode .allocated dd ? end if begin DebugMsg "Strings finalizing." if options.Threads stdcall WaitForMutex, StrMutex, -1 end if mov esi, [ptrStrTable] mov ecx, [esi+TArray.count] xor ebx,ebx if defined options.DebugMode & options.DebugMode mov [.allocated], ebx end if .freeloop: dec ecx js .endloop cmp [esi+TArray.array+4*ecx], ebx je .freeloop if defined options.DebugMode & options.DebugMode inc [.allocated] mov eax, ecx add eax, [StrHandleOffs] OutputNumber eax, 16, 8 stdcall FileWriteString, [STDERR], txt " >>>" mov eax, [esi+TArray.array+4*ecx] add eax, sizeof.string stdcall FileWriteString, [STDERR], eax stdcall FileWriteString, [STDERR], <txt "<<<", 13, 10> end if stdcall FreeMem, [esi+TArray.array+4*ecx] jmp .freeloop .endloop: stdcall FreeMem, esi mov [ptrStrTable], ebx OutputValue "Not deleted strings: ", [.allocated], 10, -1 DebugMsg "Strings mutex destroy." if options.Threads stdcall MutexDestroy, StrMutex end if if TargetOS eq Linux cmp [ptrStrHandleSpace], 0 je .space_ok mov eax, sys_munmap mov ebx, [StrHandleOffs] mov ecx, [StrHandleCnt] int $80 mov [StrHandleOffs], 0 mov [ptrStrHandleSpace], 0 .space_ok: end if DebugMsg "Strings finalized." return endp end if ;************************************************************************************** ; Returns: ; CF=0 no error; eax = pointer in memory of the hString ; CF=1 on error - hString is handle, but is not in the table.* ;************************************************************************************** proc StrPtr, .hString begin mov eax, [.hString] cmp eax, [StrHandleOffs] jb .pointer cmp eax, [StrHandleEnd] jae .pointer if options.Threads stdcall WaitForMutex, StrMutex, -1 end if push ebx sub eax, [StrHandleOffs] mov ebx, [ptrStrTable] cmp eax, [ebx+TArray.count] jae .notfound mov eax, [ebx+TArray.array+4*eax] test eax, eax jz .notfound add eax, sizeof.string pop ebx clc .finish: if options.Threads stdcall MutexRelease, StrMutex end if return .pointer: clc return .notfound: pop ebx stc if options.Threads jmp .finish else return end if endp ;************************************************************************************** ; Creates new empty string and returns handle ; Return: handle of the new created string. ;************************************************************************************** proc StrNew begin push ecx edx esi if options.Threads stdcall WaitForMutex, StrMutex, -1 end if ; Search for first empty place. mov edx, [ptrStrTable] mov ecx, STR_SEARCH_ONE_ATEMPT ; search only limited count of items cmp ecx, [edx+TArray.count] jb @f mov ecx, [edx+TArray.count] @@: mov esi,[edx+TArray.lparam] xor eax,eax .search: dec ecx js .notfound inc esi cmp esi, [edx+TArray.count] jb @f xor esi,esi @@: cmp [edx+TArray.array+4*esi], eax je .found jmp .search .notfound: mov [edx+TArray.lparam], esi ; store the place where the search ends this time. mov esi, [edx+TArray.count] stdcall AddArrayItems, edx, 1 mov [ptrStrTable], edx .found: mov [edx+TArray.lparam], esi stdcall GetMem, STR_MINSTRLEN + sizeof.string + 4 + 1 mov [edx+TArray.array+4*esi], eax mov [eax+sizeof.string+string.capacity], STR_MINSTRLEN mov eax, esi add eax, [StrHandleOffs] if options.Threads stdcall MutexRelease, StrMutex end if pop esi edx ecx return endp ;************************************************************************** ; Deletes the string if it is possible. ; Preserves EFLAGS. Allows .hString == 0 ;************************************************************************** proc StrDel, .hString begin push ecx mov ecx, [.hString] jecxz .end ; must be jecxz! Because StrDel preserves FLAGS! pushf push eax esi if options.Threads stdcall WaitForMutex, StrMutex, -1 end if mov esi, [ptrStrTable] cmp ecx, [StrHandleOffs] jb .pointer cmp ecx, [StrHandleEnd] jae .pointer sub ecx, [StrHandleOffs] cmp ecx, [esi+TArray.count] jae .finish .free: stdcall FreeMem, [esi+TArray.array+4*ecx] and [esi+TArray.array+4*ecx], 0 .finish: if options.Threads stdcall MutexRelease, StrMutex end if pop esi eax popf .end: pop ecx return .pointer: OutputValue "WARNING: StrDel on pointer: ", ecx, 16, 8 OutputValue " call from: ", [ebp+4], 16, 8 ; search the pointer in the table. lea eax, [ecx-sizeof.string] mov ecx, [esi+TArray.count] .search: dec ecx |
︙ | ︙ | |||
364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 | proc StrDup, .hSource begin stdcall StrNew stdcall StrCopy, eax, [.hSource] return endp ;************************************************************************** ; Arguments: ; hString - handle or pointer to the string (static or dynamic) ; Returns: ; CF=0; eax = length of the string in bytes. ; CF=1; eax = 0 in case, the handle of the string can't be found in the ; string table or the pointer is NULL. ; ; If pointer is passed the the procedure, it should be dword aligned and ; all bytes of the string including zero terminator to be accessed on ; qword boundary. Although, the zero terminator can be single byte zero. ; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > < < < < | < | < | | < | | | < < < < | > > > | > > | | | | > > > > > > | | | > > > > | > > > > > | > > > > > > > > > > > > > > > > > > > > | < > > > | > | > > > > | > > | > > | > | | | | | | > > | > > | > > > | | | | | | | > | | > > > | 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 | proc StrDup, .hSource begin stdcall StrNew stdcall StrCopy, eax, [.hSource] return endp proc StrDupMem, .ptrSource begin pushf push ecx edx esi edi cld mov esi, [.ptrSource] stdcall StrNew mov edx, eax mov ecx, [.ptrSource] .len: cmp byte [ecx], 0 lea ecx, [ecx+1] jne .len sub ecx, esi dec ecx lea eax, [ecx+4] stdcall StrSetCapacity, edx, eax mov edi, eax mov [edi+string.len], ecx rep movsb xor eax, eax stosd mov eax, edx pop edi esi edx ecx popf return endp ;************************************************************************** ; Arguments: ; hString - handle or pointer to the string (static or dynamic) ; Returns: ; CF=0; eax = length of the string in bytes. ; CF=1; eax = 0 in case, the handle of the string can't be found in the ; string table or the pointer is NULL. ; ; If pointer is passed the the procedure, it should be dword aligned and ; all bytes of the string including zero terminator to be accessed on ; qword boundary. Although, the zero terminator can be single byte zero. ; ; The performance of the procedure is very high for pointers and ; instant for handles (the StrLib created string doesn't need any ; search, because the length is precomputed) ; The code depends on the options.DisableMMX option. If set to 1 ; regular x86 code is generated, if not set ot set to 0, MMX code is generated. ; The MMX code is faster and smaller, so it is recommended. ;************************************************************************** proc StrLen, .hString ; proc StrLen [hString] ;.__info.codesize begin mov eax, [.hString] cmp eax, [StrHandleOffs] jb .pointer cmp eax, [StrHandleEnd] jae .pointer stdcall StrPtr, eax jc .error mov eax, [eax+string.len] return .error: xor eax, eax return .pointer: if defined options.DisableMMX & options.DisableMMX ; Regular x86 implementation, optimized by Alexander Yefremov and R22 (FASM forum) push ebx ecx edx esi edi ebp mov ebx, -01010101h mov ebp, $80808080 ; align on dword .byte1: test eax, 3 jz .start_scan cmp byte [eax], 0 je .found inc eax test eax, 3 jz .start_scan cmp byte [eax], 0 je .found inc eax test eax, 3 jz .start_scan cmp byte [eax], 0 je .found inc eax .start_scan: lea eax, [eax-8] .scan: lea eax, [eax+8] mov esi, [eax] mov edi, [eax+4] lea ecx, [esi+ebx] lea edx, [edi+ebx] not esi not edi and ecx, esi and edx, edi and ecx, ebp jnz .bytesearch ; zero in the first dword and edx, ebp jz .scan lea eax, [eax+4] mov ecx, edx .bytesearch: bsf ecx, ecx shr ecx, 3 add eax, ecx .found: pop ebp sub eax, [.hString] clc pop edi esi edx ecx ebx return else ; if MMX is not disabled by an explicit option. ; MMX implementation push ecx pxor mm1, mm1 mov ecx, eax .byte_loop: test eax, $07 jz .inner cmp byte [eax], 0 je .finish inc eax jmp .byte_loop .inner: movq mm0, [ecx] add ecx, 8 pcmpeqb mm0, mm1 packsswb mm0, mm0 movd eax, mm0 test eax, eax jz .inner bsf eax, eax shr eax, 2 lea eax, [ecx+eax-8] .finish: sub eax, [.hString] emms pop ecx return end if endp ; This procedure calculates the length of zero terminated string and "fixes" [string.len] field. ; StrFixLen should be call when the content of the string is created by call to external to StrLib |
︙ | ︙ | |||
492 493 494 495 496 497 498 | ;*************************************************************************** ; If the hString is larger than length - do nothing ; If the hString is smaller than length -> set the length of string to length ; returns pointer to the new (old) string ; ; Arguments: ; hString - string handle. /not pointer!/ | | < < | > | | > > > > > > > | > > > > | | > > > > > > > > > > > | < | < < | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 | ;*************************************************************************** ; If the hString is larger than length - do nothing ; If the hString is smaller than length -> set the length of string to length ; returns pointer to the new (old) string ; ; Arguments: ; hString - string handle. /not pointer!/ ; capacity - new string length. ; Returns: ; eax: pointer to the string. ; CF: error flag. If 1 the pointer to the string is returned, but ; the capacity is not changed. ;*************************************************************************** proc StrSetCapacity, .hString, .capacity begin mov eax, [.hString] cmp eax, [StrHandleOffs] jb .error0 cmp eax, [StrHandleEnd] jae .error0 push ebx ecx esi mov esi, eax sub esi, [StrHandleOffs] if options.Threads stdcall WaitForMutex, StrMutex, -1 end if mov ebx, [ptrStrTable] cmp esi, [ebx+TArray.count] jae .pointer mov eax, [ebx+TArray.array+4*esi] ; pointer to the string. mov ecx, [.capacity] cmp ecx, STR_MINSTRLEN jge @f mov ecx, STR_MINSTRLEN @@: cmp [eax+sizeof.string+string.capacity], ecx jae .sizeok shl ecx, 1 add ecx, sizeof.string+4+7 and cl, $f8 ; align the size to 8 bytes stdcall ResizeMem, eax, ecx jc .error lea ecx, [ecx-(sizeof.string+4)] mov [ebx+TArray.array+4*esi], eax mov [eax+sizeof.string+string.capacity], ecx .sizeok: add eax, sizeof.string clc .finish: if options.Threads stdcall MutexRelease, StrMutex end if pop esi ecx ebx return .error: int3 add eax, sizeof.string .pointer: stc jmp .finish .error0: stc return endp ;*************************************************************************************** ; Copies source to destination string. ; Arguments: ; dest - destination string (handle only) ; source - source string (handle or pointer) ; Returns: nothing ;*************************************************************************************** proc StrCopy, .dest, .source begin push esi edi eax ecx stdcall StrLen, [.source] mov ecx, eax stdcall StrSetCapacity, [.dest], ecx mov edi, eax jc .finish stdcall StrPtr, [.source] mov esi, eax mov [edi+string.len], ecx inc ecx mov eax, ecx shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb clc .finish: pop ecx eax edi esi return endp proc CharLCase, .char begin mov eax, [.char] cmp eax, 'A' jb .end cmp eax, 'Z' ja .end add eax, 'a'-'A' .end: return endp ;*************************************************************************************** ; proc StrMatchPattern ; ; Provides pattern matching of the [.pattern] in the [.string]. ; Returns CF=1 if the pattern MATCH ; CF=0 if the pattern DOES NOT MATCH EAX = the position of the first difference. ; ; In the pattern, "*" char match 0 or more characters and "?" char match ; exactly 1 character. If the characters "*" and "?" have to be directly matched ; they can be escaped with "\". "\\" escapes the backslash itself. If the backslash ; is located at the end of the pattern, it is treated as a normal character. ; ; If a character between "@" and "_" is escaped, a controll code is generated equal ; to the ascii code of the char - $40. ; ;*************************************************************************************** ; StrMatchPattern.__info.codesize proc StrMatchPattern, .pattern, .string begin pushad stdcall StrPtr, [.pattern] mov esi, eax stdcall StrPtr, [.string] mov edi, eax xor ecx, ecx .main_loop: mov ah, [edi] ; from the string inc edi .main_loop2: mov al, [esi] ; from the pattern inc esi test al, al jz .eo_pattern cmp al, '*' jne .not_star mov ecx, esi ; the address after the star. mov ebx, edi jmp .main_loop2 .not_star: test ah, ah jz .not_match ; the string ended, but the pattern not. cmp al, '?' je .main_loop cmp al, '\' jne .compare cmp byte [esi], 0 je .compare mov al, [esi] inc esi cmp al, $40 jb .compare cmp al, $60 jae .compare sub al, $40 ; the control codes escaped. .compare: cmp al, ah je .main_loop jecxz .not_match .char_ne: mov edi, ebx mov esi, ecx inc ebx jmp .main_loop .eo_pattern: test ah, ah jz .match jecxz .not_match cmp byte [ecx], 0 jne .char_ne .match: stc popad return .not_match: stdcall StrPtr, [.string] sub edi, eax dec edi mov [esp+4*regEAX], edi ; where not matches... clc popad return endp ;*************************************************************************************** ; proc StrMatchPattern ; ; Provides pattern matching of the [.pattern] in the [.string]. ; Returns CF=1 if the pattern MATCH ; CF=0 if the pattern DOES NOT MATCH ; ; In the pattern, "*" char match 0 or more characters and "?" char match ; exactly 1 character. If the characters "*" and "?" have to be directly matched ; they can be escaped with "\". "\\" escapes the backslash itself. If the backslash ; is located at the end of the pattern, it is treated as a normal character. ; ; If a character between "@" and "_" is escaped, a controll code is generated equal ; to the ascii code of the char - $40. ; ;*************************************************************************************** ; StrMatchPattern.__info.codesize proc StrMatchPatternNoCase, .pattern, .string begin pushad stdcall StrPtr, [.pattern] mov esi, eax stdcall StrPtr, [.string] mov edi, eax xor ecx, ecx .main_loop: mov ah, [edi] ; from the string inc edi .main_loop2: mov al, [esi] ; from the pattern inc esi test al, al jz .eo_pattern cmp al, '*' jne .not_star mov ecx, esi ; the address after the star. mov ebx, edi jmp .main_loop2 .not_star: test ah, ah jz .not_match ; the string ended, but the pattern not. cmp al, '?' je .main_loop cmp al, '\' jne .compare cmp byte [esi], 0 je .compare mov al, [esi] inc esi cmp al, $40 jb .compare cmp al, $60 jae .compare sub al, $40 ; the control codes escaped. .compare: cmp al, 'A' jb .compare2 cmp al, 'Z' ja .compare2 or al, $20 .compare2: cmp ah, 'A' jb .compare3 cmp ah, 'Z' ja .compare3 or ah, $20 .compare3: cmp al, ah je .main_loop jecxz .not_match .char_ne: mov edi, ebx mov esi, ecx inc ebx jmp .main_loop .eo_pattern: test ah, ah jz .match jecxz .not_match cmp byte [ecx], 0 jne .char_ne .match: stc popad return .not_match: stdcall StrPtr, [.string] sub edi, eax dec edi mov [esp+4*regEAX], edi ; where not matches... clc popad return endp ; Use this procedure as callback for SortArray procedure for arrays of strings. proc StrCompSort, .ppStr1, .ppStr2, .fCaseSensitive begin push eax edx mov eax, [.ppStr1] mov edx, [.ppStr2] stdcall StrCompSort2, [eax], [edx], [.fCaseSensitive] shl eax, 1 pop edx eax return endp ;*************************************************************************************** ; Compares two strings for greater, equal or less. ; Returns eax = 0 if the strings are equal. ; eax = 1 if .str1 is grater than .str2 ; eax = -1 if .str1 is less than .str2 ;*************************************************************************************** proc StrCompSort2, .str1, .str2, .fCaseSensitive begin push ebx ecx edx esi edi mov eax, [.str1] mov ecx, [.str2] cmp eax, ecx je .equal stdcall StrPtr, [.str1] mov esi,eax stdcall StrPtr, [.str2] mov edi,eax .cmp_loop: stdcall DecodeUtf8, [esi] add esi, edx cmp [.fCaseSensitive], 0 jne @f stdcall CharLCase, eax @@: mov ecx, eax stdcall DecodeUtf8, [edi] add edi, edx cmp [.fCaseSensitive], 0 jne @f stdcall CharLCase, eax @@: test ecx, ecx jz .endstr test eax, eax jz .endstr cmp ecx, eax je .cmp_loop ja .greater jmp .less .endstr: cmp ecx, eax ja .greater jb .less .equal: xor eax, eax .finish: pop edi esi edx ecx ebx return .greater: mov eax, 1 jmp .finish .less: mov eax, -1 jmp .finish endp ;*************************************************************************************** ; Compares two strings - case sensitive. ; Returns CARRY = 1 if the strings are equal. ; Returns CARRY = 0 if the strings are different. |
︙ | ︙ | |||
621 622 623 624 625 626 627 | stdcall StrPtr, [.str1] mov esi,eax stdcall StrPtr, [.str2] mov edi,eax mov eax, ecx | | | 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 | stdcall StrPtr, [.str1] mov esi,eax stdcall StrPtr, [.str2] mov edi,eax mov eax, ecx shr ecx, 2 repe cmpsd jne .noteq mov ecx, eax and ecx, 3 repe cmpsb jne .noteq |
︙ | ︙ | |||
756 757 758 759 760 761 762 | mov eax, [esi] test eax, eax jnz @f stdcall StrNew @@: mov [esi], eax | | > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > | > > | > > > > > | | | | 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 | mov eax, [esi] test eax, eax jnz @f stdcall StrNew @@: mov [esi], eax stdcall StrPtr, eax mov dword [eax], 0 mov [eax+string.len], 0 cmp [.ptrSource], 0 je .finish stdcall StrCopy, [esi], [.ptrSource] .finish: pop esi eax return endp ;********************************************************************************** ; StrCat appends one string to another ; Arguments: ; dest - destination string (handle only) ; source - source string ;********************************************************************************** proc StrCat, .dest, .source begin pushad stdcall StrLen, [.dest] mov ebx,eax ; store dest length in ebx stdcall StrLen, [.source] mov esi, eax lea ecx, [eax+ebx] stdcall StrSetCapacity, [.dest], ecx mov [eax+string.len], ecx lea edi, [eax+ebx] stdcall StrPtr, [.source] mov ecx, esi mov esi, eax mov ebx, ecx shr ecx, 2 rep movsd mov ecx, ebx and ecx, 3 rep movsb xor eax, eax stosd popad return endp ;********************************************************************************** ; StrCat appends string from memory buffer, specified by its address and length to ; destination string (handle) ; ; Arguments: ; dest - destination string (handle only) ; psource - source memory buffer ; length - the length in bytes of the source string. ; ;********************************************************************************** proc StrCatMem, .dest, .psource, .length begin pushad stdcall StrLen, [.dest] mov ebx,eax ; store dest length in ebx mov esi, [.length] lea ecx, [esi+ebx] stdcall StrSetCapacity, [.dest], ecx mov [eax+string.len], ecx lea edi, [eax+ebx] mov ecx, esi mov esi, [.psource] mov ebx, ecx shr ecx, 2 rep movsd mov ecx, ebx and ecx, 3 rep movsb xor eax, eax stosd popad return endp ;********************************************************************************** ; StrCharPos returns a pointer to the first occurence of a given char ; in specified string ; Arguments: ; Char - char to look for ; hString - string to search ; Returns: a pointer to the char in source, or NULL if char doesn't occur ; in given string ;********************************************************************************** proc StrCharPos, .hString, .char begin push esi stdcall StrPtr, [.hString] mov esi,eax mov ah, byte [.char] ; xchg al,ah .search: mov al,[esi] inc esi or al,al jz .not_found cmp al,ah jne .search mov eax, esi dec eax pop esi return |
︙ | ︙ | |||
874 875 876 877 878 879 880 | mov ebx,edx ; put str_len(pattern)-1 in ebx dec ebx ; sub ecx, ebx ; there is no need to search to the end, but only to len(string)-len(pattern)-1 .search: repne scasb jne .not_found | | | | 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 | mov ebx,edx ; put str_len(pattern)-1 in ebx dec ebx ; sub ecx, ebx ; there is no need to search to the end, but only to len(string)-len(pattern)-1 .search: repne scasb jne .not_found ; cmp ecx,ebx ; jb .not_found push edi esi ecx or ebx,ebx ; ebx==0 means that we were searching for one jz .got_it ; character. We found it, so we stop. mov ecx,ebx repe cmpsb jne .not_match |
︙ | ︙ | |||
907 908 909 910 911 912 913 | proc StrCopyPart, .dest, .source, .pos, .len begin | | > < < < < | | | < < | > < < < | > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > | > > | | > > | | > > > > | | < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > | > | | | | 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 | proc StrCopyPart, .dest, .source, .pos, .len begin pushad stdcall StrPtr, [.source] mov esi, eax stdcall StrLen, [.source] mov ecx, eax sub ecx, [.pos] jc .cleardest ; ecx = min(ecx, [.len]) cmp ecx, [.len] cmova ecx, [.len] add esi, [.pos] stdcall StrSetCapacity, [.dest], ecx jc .finish mov edi, eax mov [edi+string.len], ecx push ecx shr ecx, 2 rep movsd pop ecx and ecx, 3 rep movsb xor eax, eax stosd clc .finish: popad return .cleardest: stdcall StrSetCapacity, [.dest], STR_MINSTRLEN mov [eax+string.len], 0 mov dword [eax], 0 clc popad return endp ;********************************************************************************** ; StrExtract copies the part of [string] from [index] with lenght in [len] ; Returns handle to new created string. ;********************************************************************************** proc StrExtract, .string, .pos, .len begin stdcall StrNew stdcall StrCopyPart, eax, [.string], [.pos], [.len] return endp proc StrExtractMem, .pMem, .ofs, .len begin push [.len] mov eax, [.pMem] add eax, [.ofs] push eax stdcall StrNew stdcall StrCatMem, eax ; remaining arguments from the stack. return endp ;__________________________________________________________________________________ ; Splits the string on two strings, at position [.pos] ; Arguments: ; .pString - pointer to string to be splitted. ; .pos - position where to split the string. ; Returns: ; eax - handle to the new created string with second part of the string. ; the original string does not reallocate memory and it's capacity ; and the pointer will remains the same. ;__________________________________________________________________________________ proc StrSplit, .hString, .pos begin stdcall StrExtract, [.hString], [.pos], -1 stdcall StrTrim, [.hString], [.pos] return endp ;__________________________________________________________________________________ ; Trims the string at position [.pos] ; Arguments: ; .pString - pointer to string to be splitted. ; .pos - position where to split the string. ; Returns: nothing. ;__________________________________________________________________________________ proc StrTrim, .hString, .pos begin push eax ecx edi mov ecx, [.pos] stdcall StrLen, [.hString] cmp eax, ecx jbe .endtrim stdcall StrPtr, [.hString] mov [eax+string.len], ecx ; new length of the source string. add eax, ecx mov edi, eax lea ecx, [eax+3] and cl, $fc sub ecx, eax jnz @f inc ecx @@: xor eax, eax cld rep stosb .endtrim: pop edi ecx eax return endp ;__________________________________________________________________________________ ; StrInsert inserts one string into another at specified pos ; Arguments: ; dest - destination where the source will be inserted. ; source - string to insert ; pos - where to insert. ; Returns: ; nothing. ;__________________________________________________________________________________ proc StrInsert, .dest, .source, .pos begin push eax stdcall StrSplit, [.dest], [.pos] push eax eax stdcall StrCat, [.dest], [.source] stdcall StrCat, [.dest] ; source from the stack. stdcall StrDel; from the stack. pop eax return endp ; TODO: ; String case functions are giving weird results in linux, so ; here are two functons I wrote some time ago. ; I have tested the following functions in win32 and worked well ; Perhaps it is time to fully support UTF encoded strings. ; These functions here are faster (20-25%), but the results are ; exactly the same as the strlib ones. ; pelaillo ; ----------------------------------------------- ; str_ucase: ; Author: pelaillo ; Date: Jan. 16, 2002 ; Converts also accented characters: ÑÚ <--> ñú ; ----------------------------------------------- proc StrUCase2, .hString begin push eax edx edi stdcall StrPtr, [.hString] mov edi, eax .str_ucase: mov eax, [edi] mov edx, eax and edx, 40404040h ror edx, 1 xor edx, -1 and eax, edx mov [edi], eax add edi, 4 lea edx, [eax-01010101h] xor eax, edx and eax, 80808080h jz .str_ucase and eax, edx jz .str_ucase pop edi edx eax return endp ; ----------------------------------------------- ; str_lcase: ; Author: pelaillo ; Date: Jan. 16, 2002 ; Converts also accented characters: ÑÚ <--> ñú ; ----------------------------------------------- proc StrLCase2, .hString begin push eax edx edi stdcall StrPtr, [.hString] mov edi, eax .str_lcase: mov eax, [edi] mov edx, eax and edx, 40404040h ror edx, 1 or eax, edx mov [edi], eax add edi, 4 lea edx, [eax-01010101h] xor eax, edx and eax, 80808080h jz .str_lcase and eax, edx jz .str_lcase pop edi edx eax return endp ;********************************************************************************** ; Converts strings to Lower Case ;********************************************************************************** proc StrLCase, .hString begin push eax ebx ecx edx edi stdcall StrPtr, [.hString] mov edi, eax stdcall StrLen, [.hString] mov ecx, eax mov ebx, edi add ebx, 7 and ebx, $fffffff8 sub ebx, edi jz .ddword sub ecx, ebx .byte1: test edi, 7 jz .ddword mov al, [edi] and al, $40 shr al, 1 or byte [edi], al inc edi jmp .byte1 .ddword: mov ebx, ecx and ebx, 7 shr ecx, 3 jecxz .byte .qword: mov eax, [edi] mov edx, [edi+4] and eax, $40404040 |
︙ | ︙ | |||
1293 1294 1295 1296 1297 1298 1299 | ; index - Offset in string where to put converted number. ; flags: ; byte 0 - number of digits if ntsFixedWidth is set. ; byte 1 - contains radix for the convertion. ; byte 2,3 - flags. ; Returns: ; eax - handle of the string. | < | 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 | ; index - Offset in string where to put converted number. ; flags: ; byte 0 - number of digits if ntsFixedWidth is set. ; byte 1 - contains radix for the convertion. ; byte 2,3 - flags. ; Returns: ; eax - handle of the string. ;*********************************************************** proc NumToStr, .num, .flags begin push ebx ecx edx esi edi stdcall StrNew push eax |
︙ | ︙ | |||
1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 | .NumToStrFunc dd _NumToStr, _NumToStrU, _NumToStrF, _NumToStrUF endp ;------------------------------------------------------- ; function StrToNum ; Converts specified string into a number ; ; Arguments: ; hString - handle/pointer of the string containing ; number to convert. It doesn't have to be ended by ; NULL, any other character will stop conversion. ; Number to convert must be decimal. ; ; Return: ; eax - converted number ; ; Note: in case of failture (first char of given pointer ; isn't a number) function returns -1. ;------------------------------------------------------- proc StrToNum, .hString begin | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 | .NumToStrFunc dd _NumToStr, _NumToStrU, _NumToStrF, _NumToStrUF endp ;********************************************************************************** ; _NumToStr64 converts the number in esi:ebx to the string in any radix approx. [2..26] ; Arguments: ; [edi] - pointer to the string buffer ; ecx - radix ; esi:ebx - number to convert. ; There is no parameter check, so be careful. ; returns: edi points to the end of a converted number ;********************************************************************************** proc _NumToStr64 begin test esi, esi jns _NumToStrU64 not ebx not esi add ebx, 1 adc esi, 0 mov byte [edi],"-" inc edi endp proc _NumToStrU64 begin xor edx,edx test esi, esi jz .low mov eax, esi ; high order div ecx mov esi, eax .low: mov eax, ebx ; low order test edx, edx jnz .cont cmp eax, ecx jb .lessA .cont: div ecx mov ebx, eax push edx call _NumToStrU64 pop eax .lessA: cmp al, 10 sbb al, 69h das stosb return endp ;***************************************************** ; NumToStrF64: ; Converts signed integer value to string. ; NumToStrUF64: ; Converts unsigned integer value to string. ; ; edi - pointer to string buffer ; esi:ebx - Number to convert ; ecx - radix from 2 to $ff ; edx - length of the number in chars ; ; returns: edi - pointer to the end of converted num ; ; Note: Don't use 1 as radix. ;***************************************************** proc _NumToStrF64 begin test esi,esi jns _NumToStrUF64 not ebx not esi add ebx, 1 adc esi, 0 mov byte [edi],'-' inc edi endp proc _NumToStrUF64 begin dec edi push edi add edi, edx push edi .loopc: xor edx,edx mov eax, esi div ecx mov esi, eax mov eax, ebx div ecx mov ebx, eax mov al, dl cmp al,$0a sbb al,$69 das mov [edi],al dec edi cmp edi, [esp+4] jne .loopc pop edi pop edx sub edx, edi inc edi neg edx return endp proc NumToStr64, .low, .high, .flags begin pushad stdcall StrNew mov [esp+4*regEAX], eax stdcall StrSetCapacity, eax, 80 mov edi, eax push eax ; pointer for the length. ; determine which conversion func to use movzx eax, byte [.flags+2] ; signed/fixed and eax, (ntsUnsigned or ntsFixedWidth) shr 16 mov eax, [.NumToStrFunc+4*eax] movzx ecx, byte [.flags+1] ; load radix into ecx movzx edx, byte [.flags] ; digit number mov ebx, [.low] mov esi, [.high] call eax ; call low-level convertion routine mov dword [edi], 0 pop eax sub edi, eax mov [eax+string.len], edi popad return .NumToStrFunc dd _NumToStr64, _NumToStrU64, _NumToStrF64, _NumToStrUF64 endp proc StrInsertDecimalPoint, .hString, .digits begin pushad stdcall StrNew mov ebx, eax stdcall StrLen, [.hString] mov ecx, eax stdcall StrPtr, [.hString] mov esi, eax cmp byte [esi], '-' jne .sign_ok stdcall StrCharCat, ebx, '-' dec ecx inc esi .sign_ok: sub ecx, [.digits] jg .len_ok neg ecx inc ecx .zero_loop: stdcall StrCharCat, ebx, '0' dec ecx jnz .zero_loop .len_ok: stdcall StrCat, ebx, esi stdcall StrLen, ebx sub eax, [.digits] cmp [.digits], 0 je @f stdcall StrCharInsert, ebx, '.', eax @@: stdcall StrCopy, [.hString], ebx stdcall StrDel, ebx popad return endp ;------------------------------------------------------- ; function StrToNum ; Converts specified string into a number ; ; Arguments: ; hString - handle/pointer of the string containing ; number to convert. It doesn't have to be ended by ; NULL, any other character will stop conversion. ; Number to convert must be decimal. ; ; Return: ; eax - converted number ; edx - offset to the byte where convertion ended. ; ; Note: in case of failture (first char of given pointer ; isn't a number) function returns -1. ;------------------------------------------------------- proc StrToNum, .hString begin push ebx esi edi xor ebx,ebx ; ebx will store our number stdcall StrPtr, [.hString] mov edi, eax mov esi,eax xor eax,eax mov al,[esi] cmp al,'0' jb .error cmp al,'9' jbe .digit |
︙ | ︙ | |||
1377 1378 1379 1380 1381 1382 1383 | ja .finish mov edx,ebx ; multiply ebx by 10 shl ebx,3 add ebx,edx add ebx,edx jmp .digit .finish: | > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > | > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 | ja .finish mov edx,ebx ; multiply ebx by 10 shl ebx,3 add ebx,edx add ebx,edx jmp .digit .finish: mov eax, ebx mov edx, esi sub edx, edi clc pop edi esi ebx return .error: mov eax, -1 stc pop edi esi ebx return endp ; Converts a string to dword integer, using FASM number formats. ; Return: ; CF=0; eax = converted number ; CF=1; eax = 0 on invalid number proc StrToNumEx, .hstring .sign dd ? begin push ebx edx esi edi stdcall StrPtr, [.hstring] test eax, eax jz .finish mov esi, eax mov edi, eax ; search the end: .end_loop: lodsb test al, al jz .end_found cmp al, '$' je .end_loop cmp al, '-' je .end_loop cmp al, '0' jb .end_found cmp al, '9' jbe .end_loop cmp al, '@' ja .end_loop .end_found: dec esi xchg esi, edi cmp esi, edi je .invalid_number ; sign? mov [.sign], 0 cmp byte [esi], '-' jne .radix mov [.sign], -1 inc esi ; determine what is the radix. .radix: cmp byte [esi], '$' je .hex cmp word [esi], '0x' jne .postfix inc esi .hex: inc esi mov edx, 16 jmp .decode .postfix: ; search for 'h' or 'b' or 'o' mov al, [edi-1] or al, $20 mov edx, 16 cmp al, 'h' je .postok mov edx, 8 cmp al, 'o' je .postok mov edx, 2 cmp al, 'b' je .postok mov edx, 10 inc edi .postok: dec edi ; here, edx contains the radix, esi - begin of the number; edi - end of the number. .decode: xor ebx, ebx cmp esi, edi jae .invalid_number .decode_loop: lodsb cmp al, '0' jb .invalid_number cmp al, '9' jbe .digit or al, $20 cmp al, 'z' ; common ja .invalid_number cmp al, 'a' jb .invalid_number sub al, 'a'-'0'-10 .digit: sub al, '0' movzx eax, al cmp eax, edx jae .invalid_number imul ebx, edx add ebx, eax cmp esi, edi jne .decode_loop ; set the sign: xor ebx, [.sign] sub ebx, [.sign] clc mov eax, ebx pop edi esi edx ebx return .invalid_number: xor eax, eax .finish: stc pop edi esi edx ebx return endp ;------------------------------------------------------- ; function StrCharCat ; Appends up to 4 chard at the end of the string. ; ; Arguments: ; hString - string to append ; char - char(s) to add ; Returns: ; nothing ;------------------------------------------------------- proc StrCharCat, .hString, .char begin push eax ecx stdcall StrLen, [.hString] mov ecx, eax add eax, 8 stdcall StrSetCapacity, [.hString], eax jnc @f int3 @@: pushd [.char] popd [eax+ecx] mov dword [eax+ecx+4], 0 dec ecx .goend: inc ecx |
︙ | ︙ | |||
1434 1435 1436 1437 1438 1439 1440 | ; ; Arguments: ; hString - string to append ; char - char to add ; pos - position where to add the char ;------------------------------------------------------------- proc StrCharInsert, .hString, .char, .pos | < > > > | | | > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | < < < < < < < < < < | < < < < | < < > | | > | 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 | ; ; Arguments: ; hString - string to append ; char - char to add ; pos - position where to add the char ;------------------------------------------------------------- proc StrCharInsert, .hString, .char, .pos begin push eax stdcall GetMem, 16 pushd [.char] popd [eax] mov dword [eax+4], 0 mov dword [eax+8], 0 stdcall StrInsert, [.hString], eax, [.pos] stdcall FreeMem, eax pop eax return endp ;_______________________________________________________________________ ; proc StrClipSpacesR ; Removes the spaces and control chars from the right of the string. ; Arguments: ; hString - string to be processed ; Returns: ; CF=1 - invalid string handle. ;_______________________________________________________________________ proc StrClipSpacesR, .hString begin pushad stdcall StrPtr, [.hString] jc .exit mov ebx, eax mov esi, eax add esi, [eax+string.len] .loop: cmp esi, ebx je .finish dec esi call ScanBackUtf8 stdcall DecodeUtf8, [esi] cmp eax, ' ' jbe .loop cmp eax, $85 je .loop cmp eax, $a0 je .loop cmp eax, $180e je .loop cmp eax, $feff je .loop cmp eax, $2000 jb .non_space cmp eax, $200f jbe .loop cmp eax, $2028 jb .non_space cmp eax, $202f jbe .loop cmp eax, $205f jb .non_space cmp eax, $206f jbe .loop .non_space: add esi, edx .finish: xor eax, eax mov dword [esi], eax sub esi, ebx mov [ebx+string.len], esi .exit: popad return endp ;_______________________________________________________________________ ; proc StrClipSpacesL ; Removes the spaces from the left of the string. ; Arguments: ; hString - string to be processed ; Returns: ; CF=1 - invalid string handle. ;_______________________________________________________________________ ;proc StrClipSpacesL, .hString ;begin ; push esi edi eax ecx ; ; stdcall StrPtr, [.hString] ; jc .finish ; ; mov ecx, [eax+string.len] ; mov esi, eax ; mov edi, eax ; ;.loop: ; jecxz .copy ; cmp byte [esi], ' ' ; ja .copy ; ; inc esi ; dec ecx ; jmp .loop ; ;.copy: ; mov [edi+string.len], ecx ; jecxz .finish ; cmp esi, edi ; je .finish ; ; add ecx, 4 ; rep movsb ; ;.finish: ; pop ecx eax edi esi ; return ;endp proc StrClipSpacesL, .hString begin pushad stdcall StrPtr, [.hString] jc .finish mov ecx, [eax+string.len] mov esi, eax mov edi, eax ; search first non whitespace... xor edx, edx .loop: sub ecx, edx ja .decode xor ecx, ecx jmp .copy .decode: add esi, edx stdcall DecodeUtf8, [esi] cmp eax, ' ' jbe .loop cmp eax, $85 je .loop cmp eax, $a0 je .loop cmp eax, $180e je .loop cmp eax, $feff je .loop cmp eax, $2000 jb .copy cmp eax, $200f jbe .loop cmp eax, $2028 jb .copy cmp eax, $202f jbe .loop cmp eax, $205f jb .copy cmp eax, $206f jbe .loop .copy: mov [edi+string.len], ecx jecxz .finish cmp esi, edi je .finish add ecx, 4 rep movsb .finish: popad return endp ;_______________________________________________________________________ ; proc StrClipQuotes ; First removes the spaced from the beginning and from the end of the ; string. Then chech whether the string is quoted string - i.e. starts ; and ends with equal characters single or double quote. If so, removes ; them as well. ; ; Arguments: ; hString - string to be processed ; Returns: ; CF=1 - invalid string handle. ;_______________________________________________________________________ proc StrClipQuotes, .hString begin pushad stdcall StrClipSpacesR, [.hString] jc .finish stdcall StrClipSpacesL, [.hString] jc .finish stdcall StrPtr, [.hString] jc .finish mov ecx, [eax+string.len] mov esi, eax mov edi, eax cmp ecx, 2 jl .finish sub ecx, 2 lodsb cmp al, [esi+ecx] jne .finish cmp al, '"' je .clip cmp al, "'" jne .finish .clip: mov [edi+string.len], ecx rep movsb mov [edi], ecx clc .finish: popad return endp ;_______________________________________________________________________ ; proc SetQuotes, .hString, .char ; ; Encloses the string in quotes marks, if it is necessary, i.e. if the ; string contains spaces, tabs or any other of the provided characters. ; If the string contains single quote, double quote is used. If the ; string contains double quote, single quote is used. ; If the string contains all: single quote, double quote and spaces, the error ; is returned. ;_______________________________________________________________________ proc StrSetQuotes, .hString, .char begin pushad stdcall StrLen, [.hString] jc .error mov ecx, eax jecxz .error stdcall StrPtr, [.hString] mov esi, eax xor edx, edx ; quote flag xor ebx, ebx ; space flag .loop: lodsb cmp al, "'" jne @f mov dl, al @@: cmp al, '"' jne @f mov dh, al @@: cmp al, ' ' jne @f mov bl, al @@: cmp al, $09 ; tab jne @f mov bl, al @@: cmp al, byte [.char] jne @f mov bl, al @@: loop .loop test ebx, ebx jz .finish ; no quotes are necessary. ; do quote test dl, dl jnz @f shr edx, 8 @@: test dh, dh jnz .error ; both dh and dl <> 0 test dl, dl ; both are 0, so set "'" jnz @f mov dl, '"' @@: xor dl, '"' xor "'" ; turn the quote to the other. stdcall StrCharInsert, [.hString], edx, 0 stdcall StrCharCat, [.hString], edx .finish: clc popad return .error: stc popad return endp ;_______________________________________________________________________ ; proc StrCleanDupSpaces ; Removes duplicating spaces from the string. ; Arguments: ; hString - string to be processed ; Returns: ; CF=1 - invalid string handle. ;_______________________________________________________________________ proc StrCleanDupSpaces, .hString begin push esi edi eax ecx edx stdcall StrPtr, [.hString] jc .finish mov ecx, [eax+string.len] lea edx, [eax+string.len] mov esi, eax mov edi, eax jecxz .endcopy .loop: lodsb cmp al, ' ' jne .store cmp byte [esi], ' ' jne .store ; skip dec dword [edx] jmp .next .store: stosb .next: dec ecx jnz .loop .endcopy: xor eax, eax stosd .finish: pop edx ecx eax edi esi return endp ;_______________________________________________________________________ ; ; proc StrHash ; Computes 32 bit hash value from the string. ; This procedure implements the hash algoritm: FNV-1b ; ; Arguments: ; .hString - handle of string. ; ; Return: ; eax - 32bit hash value. ; ; Changes: ; eax ;_______________________________________________________________________ proc StrHash, .hString begin stdcall StrLen, [.hString] push eax stdcall StrPtr, [.hString] push eax call DataFNV1b return endp proc StrURLEncode, .hstr .res dd ? begin push ebx ecx edx esi edi stdcall StrPtr, [.hstr] mov esi, eax stdcall StrLen, esi mov ecx, eax lea edx, [3*eax] ; the encoded string can be max 3x long as original string. stdcall StrNew mov [.res], eax jecxz .finish stdcall StrSetCapacity, eax, edx mov edi, eax xor edx, edx xor ebx, ebx push eax .encode: lodsb cmp al, $80 jae .do_encode ; encode all above $7f mov dl, al mov bl, al shr edx, 5 and ebx, $1f bt dword [URLCharTable+4*edx], ebx jnc .store .do_encode: mov ah, al mov al, '%' stosb mov al, ah shr al, 4 cmp al, $0a sbb al, $69 |
︙ | ︙ | |||
1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 | mov [eax+string.len], edi .finish: mov eax, [.res] pop edi esi edx ecx ebx return endp ; Contains 1 where the character must be % encoded and 0 where it is save to pass it directly URLCharTable db 11111111b ; db 11111111b ; db 11111111b ; db 11111111b ; 0..31 -control chars | encoded db 11111111b ; $27 - $20: '&%$#"! | encoded | > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 | mov [eax+string.len], edi .finish: mov eax, [.res] pop edi esi edx ecx ebx return endp ; Contains 1 where the character must be % encoded and 0 where it is save to pass it directly if used URLCharTable URLCharTable db 11111111b ; db 11111111b ; db 11111111b ; db 11111111b ; 0..31 -control chars | encoded db 11111111b ; $27 - $20: '&%$#"! | encoded db 10011111b ; $2f - $28: /.-,+*)( | encoded db 00000000b ; $37 - $30: 76543210 | not encoded db 11111100b ; $3f - $38: ?>=<;:98 | partially db 00000001b ; $47 - $40: GFEDCBA@ | partially db 00000000b ; $4f - $48: ONMLKJIH | not encoded db 00000000b ; $57 - $50: WVUTSRQP | not encoded db 01111000b ; $5f - $58: _^]\[ZYX | partially db 00000001b ; $67 - $60: gfedcba` | partially db 00000000b ; $6f - $68: onmlkjih | not encoded db 00000000b ; $77 - $70: wvutsrqp | not encoded db 10111000b ; $7f - $78: ~}|{zyx | partially end if ;_______________________________________________________________________ ; ; proc StrURLDecode ; Decodes URL encoded string. Does not change registers. ; Notice, that the string is decoded in place. ; ; Arguments: ; .hString - handle or pointer of string. ; ; Return: ; nothing ; ; Changes: ; flags ;_______________________________________________________________________ proc StrURLDecode, .hstring begin pushad stdcall StrLen, [.hstring] mov ecx, eax jecxz .finish stdcall StrPtr, [.hstring] mov esi, eax mov edi, eax mov ebx, eax .loop: lodsb test al, al jz .end_of_string cmp al, '+' je .space cmp al, '%' jne .store lodsb cmp al, '9' jbe @f add al, $09 @@: shl al, 4 mov ah, al lodsb cmp al, '9' jbe @f add al, $09 @@: and al, $0f or al, ah jmp .store .space: mov al, ' ' .store: stosb loop .loop .end_of_string: mov ecx, edi sub ecx, ebx xor eax, eax stosd mov [ebx+string.len], ecx .finish: popad return endp ; UTF-8 support functions. ; Some of the above functions also need some revision in order to support ; utf-8 strings properly. ; Bug - on [.len]=-1 sometimes in Linux returns error on normal strings. proc StrLenUtf8, .hString, .len begin push ebx ecx edx esi stdcall StrPtr, [.hString] mov esi, eax mov ebx, [.len] test ebx, ebx js @f add ebx, esi @@: xor ecx, ecx .loop: cmp esi, ebx jae .endofstring stdcall DecodeUtf8, [esi] jc .error test eax, eax jz .endofstring add esi, edx inc ecx jmp .loop .endofstring: mov eax, ecx pop esi edx ecx ebx clc return .error: xor eax, eax stc pop esi edx ecx ebx return endp proc StrOffsUtf8, .hString, .pos begin push edx esi stdcall StrPtr, [.hString] mov esi, eax .loop: dec [.pos] js .finish stdcall DecodeUtf8, [esi] jc .error test eax, eax jz .finish add esi, edx jmp .loop .finish: clc mov eax, esi pop esi edx return .error: xor eax, eax pop esi edx return endp proc StrByteUtf8, .hString, .pos begin push edx esi edi stdcall StrPtr, [.hString] mov esi, eax mov edi, eax .loop: dec [.pos] js .finish stdcall DecodeUtf8, [esi] jc .error test eax, eax jz .finish add esi, edx jmp .loop .finish: clc sub esi, edi mov eax, esi pop edi esi edx return .error: xor eax, eax pop edi esi edx return endp proc ScanForwardUtf8 begin push eax mov al, [esi] test al, al jns .finish and al, 11000000b cmp al, 11000000b je .finish ; inc forward .loopf: inc esi mov al, [esi] and al, 11000000b cmp al, 10000000b je .loopf .finish: pop eax return endp proc ScanBackUtf8 begin push eax mov al, [esi] test al, al jns .finish and al, 11000000b cmp al, 11000000b je .finish ; inc back .loopf: dec esi mov al, [esi] and al, 11000000b cmp al, 10000000b je .loopf .finish: pop eax return endp proc ExpandTabs, .hstring, .tabstop .start dd ? .count dd ? .correction dd ? begin pushad mov [.count], 0 mov [.correction], 0 stdcall StrLen, [.hstring] mov ecx, eax stdcall StrPtr, [.hstring] mov [.start], eax mov esi, eax add ecx, eax xor ebx, ebx jecxz .end_scan .scan_loop: stdcall DecodeUtf8, [esi] cmp eax, $09 jne .next mov byte [esi], $20 push edx mov eax, ebx cdq div [.tabstop] imul eax, [.tabstop] pop edx add eax, [.tabstop] sub eax, ebx dec eax jz .next add ebx, eax add [.correction], eax push eax ; space count mov eax, esi sub eax, [.start] push eax ; offset inc [.count] .next: inc ebx add esi, edx cmp esi, ecx jb .scan_loop .end_scan: cmp [.count], 0 je .finish .expand: pop ebx ; offset pop eax ; count .ins_spc: stdcall StrCharInsert, [.hstring], ' ', ebx dec eax jnz .ins_spc .next_tab: dec [.count] jnz .expand .finish: popad mov eax, [.correction] return endp proc StrIP2Num, .hString begin push ebx edx esi xor ebx, ebx stdcall StrPtr, [.hString] mov esi, eax ; string to IP .iploop: stdcall StrToNum, esi cmp eax, $100 jae .invalid_ip cmp ebx, $1000000 jae .invalid_ip shl ebx, 8 or bl, al cmp byte [esi+edx], 0 je .end_of_ip cmp byte [esi+edx], '.' jne .invalid_ip lea esi, [esi+edx+1] jmp .iploop .invalid_ip: stc mov eax, ebx pop esi edx ebx return .end_of_ip: clc mov eax, ebx pop esi edx ebx return endp proc IP2Str, .ip begin push ebx movzx eax, byte [.ip+3] stdcall NumToStr, eax, ntsDec or ntsUnsigned mov ebx, eax stdcall StrCat, ebx, txt '.' movzx eax, byte [.ip+2] stdcall NumToStr, eax, ntsDec or ntsUnsigned stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall StrCat, ebx, txt '.' movzx eax, byte [.ip+1] stdcall NumToStr, eax, ntsDec or ntsUnsigned stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall StrCat, ebx, txt '.' movzx eax, byte [.ip] stdcall NumToStr, eax, ntsDec or ntsUnsigned stdcall StrCat, ebx, eax stdcall StrDel, eax mov eax, ebx pop ebx return endp proc StrEncodeHTML, .hString begin pushad stdcall StrLen, [.hString] mov ecx, eax stdcall StrNew mov [esp+4*regEAX], eax shl ecx, 3 ; memory x8 stdcall StrSetCapacity, eax, ecx mov edi, eax mov ebx, eax stdcall StrPtr, [.hString] mov esi, eax xor eax, eax .loop: lodsb test al, al jz .end_of_string cmp al, '<' je .char_less_then cmp al, '>' je .char_greater_then cmp al, '"' je .char_quote cmp al, '&' je .char_amp stosb jmp .loop .end_of_string: mov [edi], eax sub edi, ebx mov [ebx+string.len], edi popad return .char_less_then: mov dword [edi], '<' add edi, 4 jmp .loop .char_greater_then: mov dword [edi], '>' add edi, 4 jmp .loop .char_quote: mov dword [edi], '&quo' mov word [edi+4],'t;' add edi, 6 jmp .loop .char_amp: mov dword [edi], '&' mov byte [edi+4], ';' add edi, 5 jmp .loop endp proc StrDecodeHTML, .hString begin pushad stdcall StrPtr, [.hString] mov esi, eax mov edi, eax mov ebx, eax .loop: lodsb test al, al jz .end_of_string cmp al, '&' je .collapse .store: stosb jmp .loop .collapse: cmp dword [esi], 'nbsp' jne .not_nbsp cmp byte [esi+4], ';' jne .not_nbsp add esi, 5 mov al, ' ' jmp .store .not_nbsp: mov ecx, [esi] and ecx, $ffffff cmp ecx, 'lt;' je .lessthen cmp ecx, 'gt;' jne .not_gt add esi, 3 mov al, '>' jmp .store .lessthen: add esi, 3 mov al, '<' jmp .store .not_gt: cmp dword [esi], 'quot' jne .not_quote cmp byte [esi+4], ';' jne .not_quote add esi, 5 mov al, '"' jmp .store .not_quote: cmp dword [esi], 'apos' jne .not_apos cmp byte [esi+4], ';' jne .not_apos add esi, 5 mov al, "'" jmp .store .not_apos: cmp dword [esi], 'amp;' jne .store add esi, 4 mov al, '&' jmp .store .end_of_string: mov dword [edi], 0 sub edi, ebx mov [ebx+string.len], edi popad return endp proc DateTimeToStr, .pDateTime, .format begin push ebx esi mov esi, [.pDateTime] ; date stdcall NumToStr, [esi+TDateTime.date], ntsUnsigned or ntsFixedWidth or ntsDec + 2 mov ebx, eax stdcall StrCharCat, ebx, '.' stdcall NumToStr, [esi+TDateTime.month], ntsUnsigned or ntsFixedWidth or ntsDec + 2 stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall StrCharCat, ebx, '.' stdcall NumToStr, [esi+TDateTime.year], ntsSigned or ntsFixedWidth or ntsDec + 4 stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall StrCharCat, ebx, ' ' ; time stdcall NumToStr, [esi+TDateTime.hour], ntsUnsigned or ntsFixedWidth or ntsDec + 2 stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall StrCharCat, ebx, ':' stdcall NumToStr, [esi+TDateTime.minute], ntsUnsigned or ntsFixedWidth or ntsDec + 2 stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall StrCharCat, ebx, ':' stdcall NumToStr, [esi+TDateTime.second], ntsUnsigned or ntsFixedWidth or ntsDec + 2 stdcall StrCat, ebx, eax stdcall StrDel, eax mov eax, ebx pop esi ebx return endp proc StrExtractFilename, .hFilename begin push ebx ecx esi stdcall StrLen, [.hFilename] mov ecx, eax stdcall StrPtr, [.hFilename] lea esi, [eax+ecx] mov ebx, eax .loop: cmp esi, ebx je .found2 dec esi mov al, [esi] cmp al, '/' je .found cmp al, '\' je .found jmp .loop .found: inc esi .found2: stdcall StrExtract, esi, 0, $7fffffff pop esi ecx ebx return endp ; Splits the given [.hFullPath] into path and filename. ; The path remains in the input string, and the filename is returned in eax. proc StrSplitFilename, .hFullPath begin push ebx ecx esi stdcall StrLen, [.hFullPath] mov ecx, eax stdcall StrPtr, [.hFullPath] lea esi, [eax+ecx] mov ebx, eax .loop: cmp esi, ebx je .found2 dec esi mov al, [esi] cmp al, '/' je .found cmp al, '\' je .found jmp .loop .found: inc esi .found2: sub esi, ebx stdcall StrSplit, [.hFullPath], esi pop esi ecx ebx return endp proc StrExtractExt, .hFilename begin pushad stdcall StrLen, [.hFilename] mov ecx, eax mov edx, eax stdcall StrPtr, [.hFilename] mov esi, eax .search: dec ecx jz .no_ext cmp byte [esi+ecx], '/' je .no_ext cmp byte [esi+ecx], '\' je .no_ext cmp byte [esi+ecx], '.' jne .search ; found: sub edx, ecx stdcall StrExtract, [.hFilename], ecx, edx mov [esp+4*regEAX], eax clc popad return .no_ext: stc popad return endp proc StrChangeExt, .hFilename, .hNewExt begin push ecx edx esi stdcall StrDup, [.hFilename] mov edx, eax stdcall StrLen, edx mov ecx, eax stdcall StrPtr, edx mov esi, eax .search: test ecx, ecx jz .append dec ecx cmp byte [esi+ecx], '/' je .append cmp byte [esi+ecx], '\' je .append cmp byte [esi+ecx], '.' jne .search mov dword [esi+ecx], 0 mov [esi+string.len], ecx .append: stdcall StrCat, edx, [.hNewExt] mov eax, edx pop esi edx ecx return endp ; Normalizes some path to the minimal possible path. If the path contains ".." removes the ; previous directory and ".." directory if possible. If not possible converts until it is ; possible and returns CF=1 ; ; Arguments: ; .hPath - handle of string with the path. As long as the string will be changed, it must ; be a handle or static string but in the same format. At least the previous ; dword should contain the length of the string. ; .separators - the first two bytes of this argument specifies two possible directory ; separators. For example "/\" will accept both slashes as a valid separators. ; all separators in the result string will be converted to the first of them. ; These two characters should be equal if only one separator is to be used. ; Returns: ; CF=0 if the path was normalized without errors. ; CF=1 if the path can not be normalized to not contain ".." directory. proc StrNormalizePath, .hPath, .separators begin pushad stdcall StrPtr, [.hPath] mov edx, eax .outer: mov esi, edx mov edi, edx mov eax, [.separators] cmp word [esi], '..' jne .loop add esi, 2 cmp [esi], al je .error cmp [esi], ah je .error .loop: cmp [esi], al je .found cmp [esi], ah je .found cmp byte [esi], 0 je .end_ok inc esi jmp .loop .found: mov [esi], al inc esi cmp word [esi], '..' jne .cont cmp byte [esi+2], al je .back cmp byte [esi+2], ah je .back .cont: mov edi, esi inc esi jmp .loop .back: cmp [edi], al je .inc cmp [edi], ah jne .do_copy .inc: inc edi .do_copy: cmp edi, esi jz .error add esi, 3 .copy: lodsb stosb test al, al jnz .copy dec edi xor eax, eax mov [edi], eax sub edi, edx mov [edx+string.len], edi jmp .outer .error: stc popad return .end_ok: clc .finish: ; pushf ; mov edi, esi ; sub esi, edx ; xor eax, eax ; stosd ; mov [edx+string.len], esi ; popf popad return endp ; Normalizes some path to the minimal possible path. ; Removes ".." and "." from the path in all cases. In the incorrect cases the result path ; is of course not equivalent to the beginning. ; ; Arguments: ; .hPath - handle or pointer of string with the path. The processing is in-place and ; the result string is always shorter or equal to the input string. ; If the string is in memory, it MUST be in the format of FreshLib string ; (i.e. on the offset -4 to be placed the length of the string and the ; string to be terminated at least with dword of 0) The length of the string ; is not used, but is updated with the result string length. ; ; .separators - the first two bytes of this argument specifies two possible directory ; separators. For example "/\" will accept both slashes as a valid separators. ; all separators in the result string will be converted to the first of them. ; These two characters should be equal if only one separator is to be used. ; Returns: ; Nothing. Preserves all registers. ; ; Note: StrNormalizePath2 is more "paranoid" about the invalid paths than StrNormalizePath ; it removes ".." and "." even if the result path is not equivalent. proc StrNormalizePath2, .hPath, .separators .back dd ? begin pushad mov ebx, esp stdcall StrPtr, [.hPath] mov esi, eax mov edi, eax mov edx, eax xor eax, eax mov [.back], eax mov cl, byte [.separators] mov ch, cl mov byte [.back], cl mov byte [.back+2], cl mov al, cl rol ecx, 16 mov cx, '..' mov byte [.back+1], cl rol ecx, 8 .loop: shl eax, 8 lodsb stosb test al, al jz .end_of_string cmp al, byte [.separators] je .separator1 cmp al, byte [.separators+1] jne .loop .separator2: mov al, byte [.separators] mov [edi-1], al .separator1: cmp eax, ecx ;ecx == '/../' je .dir_back and eax, $ffffff cmp eax, [.back] ; [.back] == '/./' je .dir_remove push edi jmp .loop .dir_remove: sub edi, 2 cmp edi, edx cmovb edi, edx jmp .loop .dir_back: cmp esp, ebx cmove edi, edx je .loop add esp, 4 cmp esp, ebx cmove edi, edx je .loop mov edi, [esp] jmp .loop .end_of_string: dec edi and dword [edi], 0 sub edi, edx mov [edx+string.len], edi mov esp, ebx popad return endp ;****************************************************** ; Computes MD5 hash of the string .hString and returns ; new string handle in eax containing the hash of the ; string. ;****************************************************** proc StrMD5, .hString begin stdcall StrLen, [.hString] push eax stdcall StrPtr, [.hString] stdcall DataMD5, eax ; length from the stack. return endp ; Splits the string .hString on multiply items, separated by [.separator] char. ; ; Arguments: ; .hString - handle or pointer to the string that have to be split. ; .Separator - contains UNICODE separator character. ; .fAllowEmpty - if TRUE, empty strings are allowed. if FALSE, the empty strings are not ; included in the list. ; ; Returns: ; EAX: TArray of dword containing the parts of the string. ; If the string does not contains any items, returns empty TArray ; ; The returned array should be freed when not needed with: ; stdcall ListFree, [RetPtr], StrDel ; where [RetPtr] is the pointer, returned by StrSplitList proc StrSplitList, .hString, .Separator, .fAllowEmpty begin pushad stdcall CreateArray, 4 mov edi, eax stdcall StrPtr, [.hString] jc .finish mov esi, eax .outer: mov ebx, esi xor ecx, ecx .loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx test eax, eax jz .split_here test ecx, ecx jz .not_in_quote cmp eax, ecx jne .loop xor ecx, ecx jmp .loop .not_in_quote: cmp eax, '"' je .quote_start cmp eax, "'" jne .continue .quote_start: mov ecx, eax jmp .loop .continue: cmp eax, [.Separator] jne .loop .split_here: push eax mov edx, esi sub edx, ebx dec edx stdcall StrNew stdcall StrCatMem, eax, ebx, edx mov ebx, eax stdcall StrClipSpacesR, ebx stdcall StrClipSpacesL, ebx cmp [.fAllowEmpty], 0 jne .add_it stdcall StrLen, ebx test eax, eax jnz .add_it stdcall StrDel, ebx jmp .next .add_it: stdcall AddArrayItems, edi, 1 mov edi, edx mov [eax], ebx .next: pop eax test eax, eax jnz .outer clc .finish: mov [esp+4*regEAX], edi popad return endp struct TSplitURL .scheme dd ? .host dd ? .port dd ? .path dd ? .query dd ? .fragment dd ? ends proc StrSplitURL, .hURL, .pResult begin push eax push [.pResult] stdcall StrLen, [.hURL] push eax stdcall StrPtr, [.hURL] stdcall StrSplitURLMem, eax ; remaining arguments from the stack. pop eax return endp debug_split_url = 0 proc StrSplitURLMem, .pString, .len, .pResult begin pushad mov edi, [.pResult] xor eax, eax mov ecx, sizeof.TSplitURL/4 rep stosd mov edi, [.pResult] mov ecx, [.len] mov esi, [.pString] test ecx, ecx jz .end_of_url mov ebx, esi ; start of the substring. ; scan for scheme... .parse1: cmp byte [esi], ':' jne .not_scheme cmp byte [esi+1], '0' jb .scheme_here cmp byte [esi+1], '9' ja .scheme_here jmp .host_here .not_scheme: cmp byte [esi], '/' je .host_here cmp byte [esi], '?' je .path_here cmp byte [esi], '#' je .path_here cmp byte [esi], '.' je .parse4 inc esi dec ecx jnz .parse1 jmp .host_here .scheme_here: call .extract mov [edi + TSplitURL.scheme], eax inc esi inc ebx dec ecx jz .end_of_url cmp word [esi], '//' jne .parse4 add esi, 2 add ebx, 2 sub ecx, 2 jle .end_of_url .parse2: cmp byte [esi], '/' je .host_here cmp byte [esi], ':' jne .next cmp byte [esi+1], '0' jb .next cmp byte [esi+1], '9' jbe .host_here .next: inc esi dec ecx jnz .parse2 .host_here: call .extract mov [edi + TSplitURL.host], eax test ecx, ecx jz .end_of_url cmp byte [esi], '/' je .parse4 ; scan for path ;scan for port inc esi inc ebx dec ecx .parse3: cmp byte [esi], '/' je .port_here cmp byte [esi], '?' je .port_here cmp byte [esi], '#' je .port_here inc esi dec ecx jnz .parse3 .port_here: call .extract mov [edi + TSplitURL.port], eax test ecx, ecx jz .end_of_url ; inc esi ; inc ebx ; dec ecx ; jz .end_of_url cmp byte [esi], '?' je .parse5 ; scan for query cmp byte [esi], '#' je .fragment_here ; scan for path .parse4: cmp byte [esi], '?' je .path_here cmp byte [esi], '#' je .path_here inc esi dec ecx jnz .parse4 ; cmp byte [esi-1], '/' ; jne .parse4 .path_here: call .extract mov [edi + TSplitURL.path], eax test ecx, ecx jz .end_of_url inc esi inc ebx dec ecx jz .end_of_url cmp byte [esi-1], '#' je .fragment_here ; scan for query .parse5: cmp byte [esi], '#' je .query_here inc esi dec ecx jnz .parse5 .query_here: call .extract mov [edi + TSplitURL.query], eax test ecx, ecx jz .end_of_url inc esi inc ebx dec ecx jz .end_of_url ; extract the fragment. .fragment_here: add esi, ecx call .extract mov [edi + TSplitURL.fragment], eax .end_of_url: cmp [edi + TSplitURL.path], 0 je @f stdcall StrNormalizePath2, [edi + TSplitURL.path], '/\' @@: if debug_split_url stdcall FileWriteString, [STDERR], 'Scheme: ' cmp [edi+TSplitURL.scheme], 0 je @f stdcall FileWriteString, [STDERR], [edi+TSplitURL.scheme] @@: stdcall FileWriteString, [STDERR], <txt 13, 10> stdcall FileWriteString, [STDERR], 'Host: ' cmp [edi+TSplitURL.host], 0 je @f stdcall FileWriteString, [STDERR], [edi+TSplitURL.host] @@: stdcall FileWriteString, [STDERR], <txt 13, 10> stdcall FileWriteString, [STDERR], 'Port: ' cmp [edi+TSplitURL.port], 0 je @f stdcall FileWriteString, [STDERR], [edi+TSplitURL.port] @@: stdcall FileWriteString, [STDERR], <txt 13, 10> stdcall FileWriteString, [STDERR], 'Path: ' cmp [edi+TSplitURL.path], 0 je @f stdcall FileWriteString, [STDERR], [edi+TSplitURL.path] @@: stdcall FileWriteString, [STDERR], <txt 13, 10> stdcall FileWriteString, [STDERR], 'Query: ' cmp [edi+TSplitURL.query], 0 je @f stdcall FileWriteString, [STDERR], [edi+TSplitURL.query] @@: stdcall FileWriteString, [STDERR], <txt 13, 10> stdcall FileWriteString, [STDERR], 'Fragment: ' cmp [edi+TSplitURL.fragment], 0 je @f stdcall FileWriteString, [STDERR], [edi+TSplitURL.fragment] @@: stdcall FileWriteString, [STDERR], <txt 13, 10, 13, 10, 13, 10> end if popad return .extract: mov eax, esi sub eax, ebx jz .end_extr stdcall StrExtract, ebx, 0, eax mov ebx, esi .end_extr: retn endp include 'encodings.asm' include '%TargetOS%/utf8.asm' endmodule |
Added freshlib/data/trees.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS independent tree library. ; ; Target OS: Any ; ; Dependencies: memory.asm ; ; Notes: ;_________________________________________________________________________________________ module "Tree library" struct TTItem .prev dd ? ; 0 if first. .next dd ? ; 0 if last. .parent dd ? ; 0 if root .firstChild dd ? .lastChild dd ? ends ; Inserts TTItem after the specified TTItem ; .item - pointer to the inserted item. ; .after - pointer to the item after which to insert .item ; Returns: ; Nothing proc TreeInsAfter, .item, .after begin push eax esi edi mov esi, [.item] mov edi, [.after] test edi, edi jz .finish mov eax, [edi+TTItem.next] mov [esi+TTItem.prev], edi mov [esi+TTItem.next], eax mov [edi+TTItem.next], esi test eax, eax jz .next_ok mov [eax+TTItem.prev], esi .next_ok: mov eax, [edi+TTItem.parent] mov [esi+TTItem.parent], eax test eax, eax jz .finish cmp [eax+TTItem.lastChild], edi jne .finish mov [eax+TTItem.lastChild], esi .finish: pop edi esi eax return endp ; Inserts TTItem before the specified TTItem ; .item - pointer to the inserted item. ; .before - pointer to the item after which to insert .item ; Returns: ; Nothing proc TreeInsBefore, .item, .before begin push eax esi edi mov esi, [.item] mov edi, [.before] mov eax, [edi+TTItem.prev] mov [esi+TTItem.prev], eax mov [esi+TTItem.next], edi mov [edi+TTItem.prev], esi test eax, eax jz .prev_ok mov [eax+TTItem.next], esi .prev_ok: mov eax, [edi+TTItem.parent] mov [esi+TTItem.parent], eax test eax, eax jz .finish cmp [eax+TTItem.firstChild], edi jne .finish mov [eax+TTItem.firstChild], esi .finish: pop edi esi eax return endp ; Appends .item as a last child of the .parent element. proc TreeAppendChild, .item, .parent begin push edx esi edi mov edi, [.parent] test edi, edi jz .finish mov esi, [.item] mov edx, [edi+TTItem.lastChild] test edx, edx jnz .insert_after mov [edi+TTItem.firstChild], esi mov [edi+TTItem.lastChild], esi mov [esi+TTItem.parent], edi jmp .finish .insert_after: stdcall TreeInsAfter, esi, edx .finish: pop edi esi edx return endp ; Adds .item as a first child of the .parent element. proc TreePushChild, .item, .parent begin push edx esi edi mov esi, [.item] mov edi, [.parent] mov edx, [edi+TTItem.firstChild] test edx, edx jnz .insert_before mov [edi+TTItem.firstChild], esi mov [edi+TTItem.lastChild], esi mov [esi+TTItem.parent], edi jmp .finish .insert_before: stdcall TreeInsBefore, esi, edx .finish: pop edi esi edx return endp ; Tears the specified item from the tree it belongs to. ; Does not free the memory. ; The specified item becomes root element of its own tree, ; with all its children. ; Returns: ; eax = pointer to the next item after the teared item. ; or if it is NULL, the pointer to the previous ; item. proc TreeTearItem, .item begin pushad mov ecx, [.item] mov esi, [ecx + TTItem.prev] mov edi, [ecx + TTItem.next] mov edx, [ecx + TTItem.parent] ; remove the item from the list. test esi, esi jz @f mov [esi + TTItem.next], edi @@: test edi, edi jz @f mov [edi + TTItem.prev], esi @@: ; fix the first/last children links of the parent if needed. test edx, edx jz .parent_ok mov eax, [edx + TTItem.firstChild] mov ebx, [edx + TTItem.lastChild] cmp eax, ecx cmove eax, edi cmp ebx, ecx cmove ebx, esi mov [edx + TTItem.firstChild], eax mov [edx + TTItem.lastChild], ebx .parent_ok: ; fix the item fields. xor eax, eax mov [ecx + TTItem.prev], eax mov [ecx + TTItem.next], eax mov [ecx + TTItem.parent], eax test edi, edi cmovz edi, esi mov [esp+4*regEAX], edi popad return endp ; Recursively frees all the memory of the item and all its children. interface TreeNodeFree, .item proc TreeFree, .item, .FreeProc begin push eax mov eax, [.item] mov eax, [eax+TTItem.firstChild] .loop: test eax, eax jz .children_ok push [eax+TTItem.next] stdcall TreeFree, eax, [.FreeProc] pop eax jmp .loop .children_ok: pop eax pushad stdcall [.FreeProc], [.item] popad return endp ; Combines TreeTearItem and TreeFree in one procedure. ; Notice that free without first tearing will break the remaining tree. ; Returns the value from TreeTearItem. proc TreeTearAndFree, .item, .FreeProc begin stdcall TreeTearItem, [.item] stdcall TreeFree, [.item], [.FreeProc] return endp ; Destroys the whole root list of the tree and recursively all its children. proc TreeTearAndFreeAll, .item, .FreeProc begin push eax mov eax, [.item] .loop: test eax, eax jz .finish stdcall TreeTearAndFree, eax, [.FreeProc] jmp .loop .finish: pop eax return endp ; Returns the next item in the tree. If there is no such item, ; traces back to the parent and their next item and so on to the root. ; Arguments: ; .item - pointer to TTItem ; Returns: ; CF = 0, eax = pointer to the next TTItem ; CF = 1, eax = 0 - next TTItem does not exists. proc GetNextItem, .item begin push esi mov esi, [.item] .loop: mov eax, [esi+TTItem.next] test eax, eax jnz .exit_ok mov esi, [esi+TTItem.parent] test esi, esi jnz .loop stc pop esi return .exit_ok: clc pop esi return endp endmodule |
Added freshlib/data/uconfig.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS independent micro configuration files library. ; ; Target OS: Any ; ; Dependencies: strlib.asm; arrays.asm; ; ; Notes: ; ;_________________________________________________________________________________________ module "uConfig library" struct TCfgRecord .key dd ? .value dd ? ends iglobal var procCfgMatchPattern = StrMatchPattern ; StrMatchPattern or StrMatchPatternNoCase endg proc CfgFreeSection, .ptrRecordArray begin push eax mov eax, [.ptrRecordArray] cmp [eax+TArray.itemsize], sizeof.TCfgRecord jne .error shl [eax+TArray.count], 1 ; make stdcall ListFree, eax, StrDel clc pop eax return .error: stc pop eax return endp ;****************************************************************** ; Returns CF=0 and eax=pointer to TArray with TCfgRecord elements. ; CF=1 only if the file does not exists. ; ; Notse: ; 1. if the section does not exists, empty array will be returned. ; 2. The user must free the array after use passing the pointer ; to CfgFreeSection - it will free the array and the contained ; strings as well. ; ;****************************************************************** proc CfgGetSection, .cfgFile, .section begin pushad mov eax, [.cfgFile] test eax, $ffff0000 jz .file_ok stdcall FileOpenAccess, eax, faReadOnly jc .finish .file_ok: mov ebx, eax stdcall FileSeek, ebx, 0, fsFromBegin stdcall CreateArray, 8 ; TCfgSectionRecord jc .finish mov edi, eax stdcall StrDup, [.section] mov esi, eax stdcall StrCharCat, esi, '.*' .loop: stdcall _CfgScanForKey, ebx, esi jc .end_of_file push eax push ecx stdcall AddArrayItems, edi, 1 mov edi, edx mov edx, eax pop [edx+TCfgRecord.key] pop [edx+TCfgRecord.value] stdcall [procCfgMatchPattern], [.section], [edx+TCfgRecord.key] jc .loop ;??? inc eax stdcall StrSplit, [edx+TCfgRecord.key], eax xchg [edx+TCfgRecord.key], eax stdcall StrDel, eax jmp .loop .end_of_file: stdcall StrDel, esi test [.cfgFile], $ffff0000 jz .close_ok stdcall FileClose, ebx .close_ok: mov [esp+4*regEAX], edi clc .finish: popad return endp proc CfgSaveSection, .cfgFile, .section, .ptr_array begin pushad ; first clean the whole section: stdcall CfgGetSection, [.cfgFile], [.section] jc .error mov esi, eax ; clean all items: mov ecx, [esi+TArray.count] .clean: dec ecx js .end_clean stdcall CfgSetStr, [.cfgFile], [.section], [esi+TArray.array+8*ecx+TCfgRecord.key], 0 jmp .clean .end_clean: mov esi, [.ptr_array] test esi, esi jz .end_loop cmp [esi+TArray.itemsize], 8 ; two dwords TArray jne .error xor ecx, ecx .loop: cmp ecx, [esi+TArray.count] je .end_loop stdcall CfgSetStr, [.cfgFile], [.section], [esi+8*ecx+TArray.array+TCfgRecord.key], [esi+8*ecx+TArray.array+TCfgRecord.value] inc ecx jmp .loop .end_loop: clc popad return .error: stc popad return endp ;_________________________________________________________________ ; proc CfgGetInt ; ; Reads an integer number from the config file. ; ; If the key is missing, the value is not a number or some ; other error occurs, returns [.default] and CF=1 ; ; If the value has been found and contains a number ; encoded in FASM format, this number is returned and CF=0 ;_________________________________________________________________ proc CfgGetInt, .cfgFile, .section, .key, .default begin stdcall CfgGetStr, [.cfgFile], [.section], [.key] jc .get_default push eax stdcall StrToNumEx, eax stdcall StrDel ; from the stack jc .get_default clc return .get_default: mov eax, [.default] return endp proc CfgSetInt, .cfgFile, .section, .key, .value begin push eax stdcall NumToStr, [.value], ntsDec or ntsSigned push eax stdcall CfgSetStr, [.cfgFile], [.section], [.key], eax stdcall StrDel ; from the stack pop eax return endp ;___________________________________________________________________ ; proc CfgGetStr ; ; Reads a string value from the config file. ; ; Arguments: ; .cfgFile - handle of an open file, or string of filename string. ; .section - string with the section of the value ; .key - string with the key of the value. ; ; Returns: ; CF=0; eax - string with the value of the key. ; CF=1; eax=0 - The key is missing or something is wrong with the file, ;___________________________________________________________________ proc CfgGetStr, .cfgFile, .section, .key begin push ebx ecx edx mov eax, [.cfgFile] ; name or handle test eax, $ffff0000 jz .file_ok ; if defined options.DebugMode & options.DebugMode ; pushad ; stdcall StrPtr, eax ; stdcall Output, "Config file path: " ; stdcall Output, eax ; stdcall Output, cDbgNewLine ; popad ; end if stdcall FileOpenAccess, eax, faReadOnly jc .error ; OutputValue "CfgGetStr file open success. Handle = ", eax, 16, 8 .file_ok: mov ebx, eax stdcall FileSeek, ebx, 0, fsFromBegin stdcall StrDup, [.section] stdcall StrCharCat, eax, '.' stdcall StrCat, eax, [.key] push eax stdcall _CfgScanForKey, ebx, eax stdcall StrDel ; from the stack pushf test [.cfgFile], $ffff0000 jz .close_ok push eax stdcall FileClose, ebx pop eax .close_ok: popf jc .finish stdcall StrDel, ecx .finish: pop edx ecx ebx return .error: DebugMsg "CfgGetStr open file error!" stc jmp .finish endp ;___________________________________________________________________ ; proc CfgSetStr ; ; If the specified key exists in the config file, its value is ; replaced with [.value]. ; ; If the key does not exists, it is appended at the end of the file. ; ; If some error occurs - CF=1; ;___________________________________________________________________ proc CfgSetStr, .cfgFile, .section, .key, .value begin push ebx ecx edx edi mov eax, [.cfgFile] test eax, $ffff0000 jz .file_ok stdcall FileOpenAccess, eax, faReadWrite + faOpenAlways jc .exit .file_ok: mov ebx, eax stdcall FileSeek, ebx, 0, fsFromBegin xor edi, edi stdcall StrDup, [.section] stdcall StrCharCat, eax, '.' stdcall StrCat, eax, [.key] push eax stdcall _CfgScanForKey, ebx, eax jnc .read_remaining pop ecx jmp .append .read_remaining: stdcall StrDel, eax stdcall StrDel ; from the stack stdcall StrNew mov edi, eax .loop: stdcall FileReadLine, ebx jc .end_read test eax, eax jz .end_read stdcall StrCat, edi, eax stdcall StrCharCat, edi, $0a0d ;??? stdcall StrDel, eax jmp .loop .end_read: stdcall FileSeek, ebx, edx, fsFromBegin .append: cmp [.value], 0 je .end_append ; if [.value]==0 then the key is simply deleted. stdcall StrSetQuotes, ecx, '=' stdcall StrCharCat, ecx, ' = ' stdcall StrDup, [.value] stdcall StrSetQuotes, eax, '=' stdcall StrCat, ecx, eax stdcall StrDel, eax stdcall StrCharCat, ecx, $0a0d stdcall FileWriteString, ebx, ecx .end_append: test edi, edi jz .finish stdcall FileWriteString, ebx, edi ; remaining part of the file... stdcall StrDel, edi .finish: stdcall FileTruncate, ebx stdcall StrDel, ecx test [.cfgFile], $ffff0000 jz .close_ok stdcall FileClose, ebx .close_ok: clc .exit: pop edi edx ecx ebx return endp proc CfgDelKey, .cfgFile, .section, .key begin stdcall CfgSetStr, [.cfgFile], [.section], [.key], 0 return endp ;___________________________________________________________________________________ ; proc CfgScanForKey ; ; This is "low-level" procedure that searches already open file for ; a key with the given name. ; ; if the line has been found, returns: ; eax - string handle of the value of the line (the right part of key=value pair). ; ecx - string handle of the key of the line (the left part of key=value pair). ; edx - position in the file where the key/value are located. ; the file is positioned on the start of the next line in the file. ; ; The returned string handle has to be free when not needed. ;___________________________________________________________________________________ proc _CfgScanForKey, .hFile, .fullkey begin .loop: stdcall FileSeek, [.hFile], 0, fsFromCurrent mov edx, eax ; the current possition. stdcall FileReadLine, [.hFile] jc .not_found test eax, eax jz .not_found mov ecx, eax stdcall StrClipSpacesR, ecx stdcall StrClipSpacesL, ecx stdcall StrPtr, ecx cmp byte [eax], ';' jne .not_comment stdcall StrDel, ecx jmp .loop .not_comment: stdcall StrSplitList, ecx, '=', TRUE stdcall StrDel, ecx mov ecx, eax cmp [ecx+TArray.count], 2 jne .next stdcall StrClipQuotes, [ecx+TArray.array] stdcall [procCfgMatchPattern], [.fullkey], [ecx+TArray.array] jc .found .next: stdcall ListFree, ecx, StrDel jmp .loop ; found, eax is a hangle of the value. .found: push dword [ecx+TArray.array+4] push dword [ecx+TArray.array] stdcall FreeMem, ecx pop ecx pop eax stdcall StrClipQuotes, eax clc return .not_found: xor eax, eax stc return endp endmodule |
Added freshlib/equates/Dummy/allequates.inc.
> > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Combined include of all equate files. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ |
Added freshlib/equates/KolibriOS/_geometry.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Different geometry structures. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct RECT .left dd ? .top dd ? .right dd ? .bottom dd ? ends struct POINT .x dd ? .y dd ? ends struct TBounds .x dd ? .y dd ? .width dd ? .height dd ? ends |
Added freshlib/equates/KolibriOS/_libFT.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: FreeType library constants and structures. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ FT_FACE_FLAG_SCALABLE = $0001 FT_FACE_FLAG_FIXED_SIZES = $0002 FT_FACE_FLAG_FIXED_WIDTH = $0004 FT_FACE_FLAG_SFNT = $0008 FT_FACE_FLAG_HORIZONTAL = $0010 FT_FACE_FLAG_VERTICAL = $0020 FT_FACE_FLAG_KERNING = $0040 FT_FACE_FLAG_FAST_GLYPHS = $0080 FT_FACE_FLAG_MULTIPLE_MASTERS = $0100 FT_FACE_FLAG_GLYPH_NAMES = $0200 FT_FACE_FLAG_EXTERNAL_STREAM = $0400 FT_FACE_FLAG_HINTER = $0800 FT_FACE_FLAG_CID_KEYED = $1000 FT_FACE_FLAG_TRICKY = $2000 FT_LOAD_DEFAULT = $0 FT_LOAD_NO_SCALE = $1 FT_LOAD_NO_HINTING = $2 FT_LOAD_RENDER = $4 FT_LOAD_NO_BITMAP = $8 FT_LOAD_VERTICAL_LAYOUT = $10 FT_LOAD_FORCE_AUTOHINT = $20 FT_LOAD_CROP_BITMAP = $40 ; deprecated, ignored FT_LOAD_PEDANTIC = $80 FT_LOAD_ADVANCE_ONLY = $100 FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH = $200 ; deprecated, ignored FT_LOAD_NO_RECURSE = $400 FT_LOAD_IGNORE_TRANSFORM = $800 FT_LOAD_MONOCHROME = $1000 FT_LOAD_LINEAR_DESIGN = $2000 FT_LOAD_SBITS_ONLY = $4000 FT_LOAD_NO_AUTOHINT = $8000 FT_LOAD_COLOR = $100000 FT_ADVANCE_FLAG_FAST_ONLY = $20000000 FT_RENDER_MODE_NORMAL = 0 FT_RENDER_MODE_LIGHT = 1 FT_RENDER_MODE_MONO = 2 FT_RENDER_MODE_LCD = 3 FT_RENDER_MODE_LCD_V = 4 FT_RENDER_MODE_MAX = 5 struc FT_LOAD_TARGET x { . = (x and 15) shl 16 } FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET FT_RENDER_MODE_NORMAL FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET FT_RENDER_MODE_LIGHT FT_LOAD_TARGET_MONO FT_LOAD_TARGET FT_RENDER_MODE_MONO FT_LOAD_TARGET_LCD FT_LOAD_TARGET FT_RENDER_MODE_LCD FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET FT_RENDER_MODE_LCD_V FT_PIXEL_MODE_NONE = 0 FT_PIXEL_MODE_MONO = 1 FT_PIXEL_MODE_GRAY = 2 FT_PIXEL_MODE_GRAY2 = 3 FT_PIXEL_MODE_GRAY4 = 4 FT_PIXEL_MODE_LCD = 5 FT_PIXEL_MODE_LCD_V = 6 FT_PIXEL_MODE_BGRA = 7 struct FT_Generic .data dd ? .finalizer dd ? ; pointer to procedure with one argument. ends struct FT_BBox .xMin dd ? .yMin dd ? .xMax dd ? .yMax dd ? ends struct FT_Vector .x dd ? .y dd ? ends struct FT_Bitmap .rows dd ? .width dd ? .pitch dd ? .buffer dd ? ; pointer to the buffer. .num_grays dw ? .pixel_mode db ? .palette_mode db ? .palette dd ? ; pointer to the palette. ends struct FT_Outline .n_contours dw ? .n_points dw ? .points dd ? ; pointer to array of FT_Vector elements. .tags dd ? ; pointer to byte array. .contours dd ? ; pointer to word array. .flags dd ? ends struct FT_Glyph_Metrics .width dd ? .height dd ? .horiBearingX dd ? .horiBearingY dd ? .horiAdvance dd ? .vertBearingX dd ? .vertBearingY dd ? .vertAdvance dd ? ends struct FT_GlyphSlot .library dd ? .face dd ? ; parent FT_Face object .next dd ? ; pointer tp FT_GlyphSlot .reserved dd ? .generic FT_Generic .metrics FT_Glyph_Metrics .linearHoriAdvance dd ? .linearVertAdvance dd ? .advance FT_Vector .format dd ? .bitmap FT_Bitmap .bitmap_left dd ? .bitmap_top dd ? .outline FT_Outline .num_subglyphs dd ? .subglyphs dd ? ; pointer to array of FT_SubGlyphRec elements. .control_data dd ? .control_len dd ? .lsb_delta dd ? .rsb_delta dd ? .other dd ? .internal dd ? ; pointer to FT_Slot_InternalRec ends struct FT_FaceRec .num_faces dd ? .face_index dd ? .face_flags dd ? .style_flags dd ? .num_glyphs dd ? .family_name dd ? .style_name dd ? .num_fixed_sizes dd ? .available_sizes dd ? .num_charmaps dd ? .charmaps dd ? .generic FT_Generic ; scalable fonts members down to .underline_thickness .bbpx FT_BBox .units_per_EM dw ? .ascender dw ? .descender dw ? .height dw ? .max_advance_width dw ? .max_advance_height dw ? .underline_position dw ? .underline_thickness dw ? .glyph dd ? ; pointer to FT_GlyphSlot .size dd ? ; pointer to FT_Size .charmap dd ? ; pointer to FT_CharMap ; down is the private part. ends struct FT_GlyphRec .library dd ? .clazz dd ? .format dd ? .advance FT_Vector ends struct FT_BitmapGlyphRec .root FT_GlyphRec .left dd ? .top dd ? .bitmap FT_Bitmap ends FT_SIZE_REQUEST_TYPE_NOMINAL = 0 FT_SIZE_REQUEST_TYPE_REAL_DIM = 1 FT_SIZE_REQUEST_TYPE_BBOX = 2 FT_SIZE_REQUEST_TYPE_CELL = 3 FT_SIZE_REQUEST_TYPE_SCALES = 4 struct FT_Size_RequestRec .type dd ? .width dd ? .height dd ? .horiResolution dd ? .vertResolution dd ? ends struct FT_Size_Metrics .x_ppem dw ? ; horizontal pixels per EM .y_ppem dw ? ; vertical pixels per EM .x_scale dd ? ; scaling values used to convert font .y_scale dd ? ; units to 26.6 fractional pixels .ascender dd ? ; ascender in 26.6 frac. pixels .descender dd ? ; descender in 26.6 frac. pixels .height dd ? ; text height in 26.6 frac. pixels .max_advance dd ? ; max horizontal advance, in 26.6 pixels ends struct FT_SizeRec .face dd ? ; parent face object .generic FT_Generic ; generic pointer for client uses .metrics FT_Size_Metrics ; size metrics .internal: ends struct FTC_ScalerRec .face_id dd ? .width dd ? .height dd ? .pixel dd ? .x_res dd ? .y_res dd ? ends struct FTC_ImageType .face_id dd ? .width dd ? .height dd ? .flags dd ? ends interface FT_Face_Requester, .face_id, .library, .request_data, .pFace |
Added freshlib/equates/KolibriOS/_network.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | UNIX_PATH_MAX = 108 ;Protocol family AF_UNSPEC = 0 AF_LOCAL = 1 AF_INET4 = 2 AF_INET6 = 10 AF_PPP = 777 ; FIXME AF_INET = AF_INET4 PF_UNSPEC = AF_UNSPEC PF_LOCAL = AF_LOCAL PF_INET4 = AF_INET4 PF_INET6 = AF_INET6 PF_PPP = AF_PPP PF_INET = AF_INET ; Socket types SOCK_STREAM = 1 SOCK_DGRAM = 2 SOCK_RAW = 3 ; Socket level SOL_SOCKET = 0xffff ; Socket options SO_ACCEPTCON = 1 shl 0 SO_BROADCAST = 1 shl 1 SO_DEBUG = 1 shl 2 SO_DONTROUTE = 1 shl 3 SO_KEEPALIVE = 1 shl 4 SO_OOBINLINE = 1 shl 5 SO_REUSEADDR = 1 shl 6 SO_REUSEPORT = 1 shl 7 SO_USELOOPBACK = 1 shl 8 SO_BINDTODEVICE = 1 shl 9 SO_NONBLOCK = 1 shl 31 SO_RCVBUF = 0 SO_SNDBUF = 0 SO_RCVTIMEO = 0 SO_SNDTIMEO = 0 SO_LINGER = 0 SO_RCVBUF = 0 SO_SNDBUF = 0 SO_RCVTIMEO = 0 SO_SNDTIMEO = 0 SO_LINGER = 0 ; Socket States SS_NOFDREF = 0x0001 ; no file table ref any more SS_ISCONNECTED = 0x0002 ; socket connected to a peer SS_ISCONNECTING = 0x0004 ; in process of connecting to peer SS_ISDISCONNECTING = 0x0008 ; in process of disconnecting SS_CANTSENDMORE = 0x0010 ; can't send more data to peer SS_CANTRCVMORE = 0x0020 ; can't receive more data from peer SS_RCVATMARK = 0x0040 ; at mark on input SS_ISABORTING = 0x0080 ; aborting fd references - close() SS_RESTARTSYS = 0x0100 ; restart blocked system calls SS_ISDISCONNECTED = 0x0800 ; socket disconnected from peer SS_ASYNC = 0x1000 ; async i/o notify SS_ISCONFIRMING = 0x2000 ; deciding to accept connection req SS_MORETOCOME = 0x4000 SS_BLOCKED = 0x8000 SOCKET_MAXDATA = 4096*64 ; must be 4096*(power of 2) where 'power of 2' is at least 8 ; Error Codes ENOBUFS = 1 EINPROGRESS = 2 EOPNOTSUPP = 4 EWOULDBLOCK = 6 ENOTCONN = 9 EALREADY = 10 EINVAL = 11 EMSGSIZE = 12 ENOMEM = 18 EADDRINUSE = 20 ECONNREFUSED = 61 ECONNRESET = 52 EISCONN = 56 ETIMEDOUT = 60 ECONNABORTED = 53 |
Added freshlib/equates/KolibriOS/_syscalls.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license. | ;|_______________________________________________________________________________________| ; ; Description: KolibriOS system functions and related constants. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ sys_drawwindow = 0 ; DrawWindow syscall_setpixel = 1 ; SetPixel sys_getkey = 2 ; GetKey sys_clock = 3 ; GetTime sys_writetext = 4 ; WriteText sys_delay_hs = 5 ; DelayHs sys_openramdiskfile = 6 ; OpenRamdiskFile sys_putimage = 7 ; PutImage sys_button = 8 ; DefineButton sys_cpuusage = 9 ; GetProcessInfo sys_waitforevent = 10 ; WaitForEvent sys_getevent = 11 ; CheckForEvent sys_redrawstat = 12 ; BeginDraw and EndDraw sys_drawrect = 13 ; DrawRect sys_getscreensize = 14 ; GetScreenSize sys_background = 15 ; bgr sys_cachetodiskette = 16 ; FlushFloppyCache sys_getbutton = 17 ; GetButton sys_system = 18 ; System Services sys_midi = 20 ; ResetMidi and OutputMidi sys_setup = 21 ; SetMidiBase,SetKeymap,SetShiftKeymap,. sys_settime = 22 ; setting date,time,clock and alarm ; clock sys_wait_event_timeout = 23 ; TimeOutWaitForEvent sys_cdaudio = 24 ; PlayCdTrack,StopCd and GetCdPlaylist sys_getsetup = 26 ; GetMidiBase,GetKeymap,GetShiftKeymap,. sys_date = 29 ; GetDate sys_current_directory = 30 ; Get/SetCurrentDirectory sys_getpixel = 35 ; GetPixel sys_getarea = 36 ; GetArea sys_readmousepos = 37 ; GetMousePosition_ScreenRelative,. syscall_drawline = 38 ; DrawLine sys_getbackground = 39 ; GetBackgroundSize,ReadBgrData,. sys_set_app_param = 40 ; WantEvents sys_get_irq_owner = 41 ; GetIrqOwner sys_get_irq_data = 42 ; ReadIrqData sys_outport = 43 ; SendDeviceData sys_program_irq = 44 ; ProgramIrqs sys_reserve_free_irq = 45 ; ReserveIrq and FreeIrq sys_reserveportarea = 46 ; ReservePortArea and FreePortArea sys_display_number = 47 ; WriteNum sys_display_settings = 48 ; SetRedrawType and SetButtonType sys_apm = 49 ; Advanced Power Management (APM) sys_random_shaped_window= 50 ; Window shape & scale sys_threads = 51 ; Threads sys_stack_driver_stat = 52 ; Stack driver status sys_socket_old = 53 ; Socket interface sys_sound_interface = 55 ; Sound interface sys_pcibios = 57 ; PCI BIOS32 sys_file_system = 58 ; Common file system interface sys_IPC = 60 ; Inter Process Communication sys_gs = 61 ; Direct graphics access sys_pci = 62 ; PCI functions sys_msg_board = 63 ; System message board sys_resize_app_memory = 64 ; Resize application memory usage sys_putimage_palette = 65 ; PutImagePalette sys_process_def = 66 ; Process definitions - keyboard sys_window_move = 67 ; Window move or resize sys_f68 = 68 ; Some internal services sys_debug_services = 69 ; Debug sys_file_system_lfn = 70 ; Common file system interface, version 2 sys_windowsettings = 71 ; Window settings sys_sendwindowmsg = 72 ; Send window message sys_socket = 75 ; http://wiki.kolibrios.org/wiki/New_network_api sys_end = -1 ; end application ; sys_socket subfunctions sockOpen = 0 sockClose = 1 sockBind = 2 sockListen = 3 sockConnect = 4 sockAccept = 5 sockSend = 6 sockReceive = 7 sockSetOptions = 8 sockGetOptions = 9 sockPair = 10 ; sys_file_system_lfn subfunctions fsfRead = 0 fsfReadDir = 1 fsfCreate = 2 fsfWrite = 3 fsfSetSize = 4 fsfFileInfo = 5 fsfSetAttr = 6 fsfExec = 7 fsfDel = 8 ; for files and directories fsfCreateDir = 9 ; windows/thread events eventRedraw = 1 eventKeyboard = 2 eventGUIButton = 3 eventReserved = 4 ; reserved, not used eventDesktopRepainted = 5 eventMouse = 6 ; move or key pressed eventIPC = 7 eventNetwork = 8 eventDebug = 9 eventIRQ0 = 16 eventIRQ1 = 17 eventIRQ2 = 18 eventIRQ3 = 19 eventIRQ4 = 20 eventIRQ5 = 21 eventIRQ6 = 22 eventIRQ7 = 23 eventIRQ8 = 24 eventIRQ9 = 25 eventIRQ10 = 26 eventIRQ11 = 27 eventIRQ12 = 28 eventIRQ13 = 29 eventIRQ14 = 30 eventIRQ15 = 31 emaskRedraw = 1 emaskKeyboard = 2 emaskGUIButton = 4 emaskReserved = 8 emaskDesktopRedraw = 16 emaskMouse = 32 emaskIPCEvent = 64 emaskNetwork = 128 emaskDebug = 256 struct __TThreadInfo .cpu_usage dd ? .zposWindow dw ? .nWindowSlot dw ? .reserve1 dw ? .ProcessName rb 11 .reserve2 db ? .processAddr dd ? .processSize dd ? .TID dd ? .wndPosX dd ? .wndPosY dd ? .wndSizeX dd ? .wndSizeY dd ? .ThreadState dw ? .reserve3 dw ? .ClientPosX dd ? .ClientPosY dd ? .ClientWidth dd ? .ClientHeight dd ? .WindowState db ? .EventMask dd ? .min_size = $$ - $ rb 1024 - .min_size ends accessRead = 1 accessWrite = 2 ; Error codes errSuccess = 0 errBaseNotDefined = 1 ; base and/or partition of a hard disk is not defined ; (by subfunctions 7, 8 of function 21) errFunctionNotSupported = 2 ; function is not supported for the given file system errUnknownFileSystem = 3 ; unknown file system ;errReserved = 4 ; reserved, is never returned in the current implementation errFileNotFound = 5 ; file not found errEndOfFile = 6 ; end of file, EOF errBadPointer = 7 ; pointer lies outside of application memory errDiskFull = 8 ; disk is full errBadFat = 9 ; FAT table is destroyed errAccessDenied = 10 ; access denied errDeviceError = 11 ; device error errFileAlreadyExists = 100 ; FreshLib error code on faCreateOnly ; Application start functions can return also following errors: errNotEnoughMemory = 30 ; not enough memory errNotExecutable = 31 ; file is not executable errTooManyProcesses = 32 ; too many processes |
Added freshlib/equates/KolibriOS/allequates.inc.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Combined include of all KolibriOS equate files. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ include '_syscalls.inc' include '_geometry.inc' include '_network.inc' include '_libFT.inc' |
Changes to freshlib/equates/Linux/XftCompat.inc.
|
| | | 1 2 3 4 5 6 7 8 | ; ; * $Id: XftCompat.h,v 1.4 2005/07/03 07:00:57 daniels Exp $ ; * ; * Copyright © 2001 Keith Packard ; * ; * Permission to use, copy, modify, distribute, and sell this software and its ; * documentation for any purpose is hereby granted without fee, provided that ; * the above copyright notice appear in all copies and that both that |
︙ | ︙ | |||
16 17 18 19 20 21 22 | ; * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, ; * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO ; * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR ; * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, ; * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ; * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ; * PERFORMANCE OF THIS SOFTWARE. | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | ; * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, ; * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO ; * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR ; * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, ; * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ; * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ; * PERFORMANCE OF THIS SOFTWARE. ; if ~defined _XFTCOMPAT_H_ | defined @f @@: _XFTCOMPAT_H_ = 1 include "X11/Xfuncproto.h" ; ; * Compatibility definitions -- map Fc names to Xft names ; XftChar8 equ FcChar8 XftChar16 equ FcChar16 XftChar32 equ FcChar32 XFT_FAMILY equ FC_FAMILY XFT_STYLE equ FC_STYLE XFT_SLANT equ FC_SLANT XFT_WEIGHT equ FC_WEIGHT XFT_SIZE equ FC_SIZE XFT_PIXEL_SIZE equ FC_PIXEL_SIZE XFT_SPACING equ FC_SPACING XFT_FOUNDRY equ FC_FOUNDRY XFT_ANTIALIAS equ FC_ANTIALIAS XFT_FILE equ FC_FILE XFT_INDEX equ FC_INDEX XFT_RASTERIZER equ FC_RASTERIZER XFT_OUTLINE equ FC_OUTLINE XFT_SCALABLE equ FC_SCALABLE XFT_RGBA equ FC_RGBA ; defaults from resources XFT_SCALE equ FC_SCALE XFT_MINSPACE equ FC_MINSPACE XFT_DPI equ FC_DPI ; specific to FreeType rasterizer XFT_CHAR_WIDTH equ FC_CHAR_WIDTH XFT_CHAR_HEIGHT equ FC_CHAR_HEIGHT XFT_MATRIX equ FC_MATRIX XFT_WEIGHT_LIGHT equ FC_WEIGHT_LIGHT XFT_WEIGHT_MEDIUM equ FC_WEIGHT_MEDIUM XFT_WEIGHT_DEMIBOLD equ FC_WEIGHT_DEMIBOLD XFT_WEIGHT_BOLD equ FC_WEIGHT_BOLD XFT_WEIGHT_BLACK equ FC_WEIGHT_BLACK XFT_SLANT_ROMAN equ FC_SLANT_ROMAN XFT_SLANT_ITALIC equ FC_SLANT_ITALIC XFT_SLANT_OBLIQUE equ FC_SLANT_OBLIQUE XFT_PROPORTIONAL equ FC_PROPORTIONAL XFT_MONO equ FC_MONO XFT_CHARCELL equ FC_CHARCELL XFT_RGBA_UNKNOWN equ FC_RGBA_UNKNOWN XFT_RGBA_RGB equ FC_RGBA_RGB XFT_RGBA_BGR equ FC_RGBA_BGR XFT_RGBA_VRGB equ FC_RGBA_VRGB XFT_RGBA_VBGR equ FC_RGBA_VBGR XFT_RGBA_NONE equ FC_RGBA_NONE ; ; * Old constants ; XFT_ENCODING equ "encoding" XftType equ FcType XftMatrix equ FcMatrix XftResult equ FcResult XftResultMatch equ FcResultMatch XftResultNoMatch equ FcResultNoMatch XftResultTypeMismatch equ FcResultTypeMismatch XftResultNoId equ FcResultNoId XftValue equ FcValue XftPattern equ FcPattern XftFontSet equ FcFontSet XftObjectSet equ FcObjectSet XftGlyphExists equ XftCharExists XftObjectSetCreate equ FcObjectSetCreate XftObjectSetAdd equ FcObjectSetAdd XftObjectSetDestroy equ FcObjectSetDestroy XftObjectSetVaBuild equ FcObjectSetVaBuild XftObjectSetBuild equ FcObjectSetBuild XftFontSetMatch equ FcFontSetMatch XftFontSetDestroy equ FcFontSetDestroy XftMatrixEqual equ FcMatrixEqual XftMatrixMultiply equ FcMatrixMultiply XftMatrixRotate equ FcMatrixRotate XftMatrixScale equ FcMatrixScale XftMatrixShear equ FcMatrixShear XftPatternCreate equ FcPatternCreate XftPatternDuplicate equ FcPatternDuplicate XftValueDestroy equ FcValueDestroy XftValueListDestroy equ FcValueListDestroy XftPatternDestroy equ FcPatternDestroy XftPatternFind equ FcPatternFind XftPatternAdd equ FcPatternAdd XftPatternGet equ FcPatternGet XftPatternDel equ FcPatternDel XftPatternAddInteger equ FcPatternAddInteger XftPatternAddDouble equ FcPatternAddDouble XftPatternAddMatrix equ FcPatternAddMatrix XftPatternAddBool equ FcPatternAddBool XftPatternGetInteger equ FcPatternGetInteger XftPatternGetDouble equ FcPatternGetDouble XftPatternGetMatrix equ FcPatternGetMatrix XftPatternGetBool equ FcPatternGetBool XftPatternVaBuild equ FcPatternVaBuild XftPatternBuild equ FcPatternBuild XftUtf8ToUcs = 4 FcUtf8ToUcs4 XftUtf = 8 Len FcUtf8Len XftTypeVoid equ FcTypeVoid XftTypeInteger equ FcTypeInteger XftTypeDouble equ FcTypeDouble XftTypeString equ FcTypeString XftTypeBool equ FcTypeBool XftTypeMatrix equ FcTypeMatrix end if |
Added freshlib/equates/Linux/_XLib.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: XLib specific constants and structures. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; X Protocol X_PROTOCOL = 11 X_PROTOCOL_REVISION = 0 ;X Constants None = 0 ParentRelative = 1 CopyFromParent = 0 PointerWindow = 0 InputFocus = 1 PointerRoot = 1 AnyPropertyType = 0 AnyKey = 0 AnyButton = 0 AllTemporary = 0 CurrentTime = 0 NoSymbol = 0 ;Event Masks NoEventMask = 0h KeyPressMask = 1h KeyReleaseMask = 2h ButtonPressMask = 4h ButtonReleaseMask = 8h EnterWindowMask = 10h LeaveWindowMask = 20h PointerMotionMask = 40h PointerMotionHintMask = 80h Button1MotionMask = 100h Button2MotionMask = 200h Button3MotionMask = 400h Button4MotionMask = 800h Button5MotionMask = 1000h ButtonMotionMask = 2000h KeymapStateMask = 4000h ExposureMask = 8000h VisibilityChangeMask = 10000h StructureNotifyMask = 20000h ResizeRedirectMask = 40000h SubstructureNotifyMask = 80000h SubstructureRedirectMask = 100000h FocusChangeMask = 200000h PropertyChangeMask = 400000h ColormapChangeMask = 800000h OwnerGrabButtonMask = 1000000h AllEventsMask = 1fbff7fh ;1ffffffh QueuedAlready = 0 QueuedAfterReading = 1 QueuedAfterFlush = 2 ;Event Names KeyPress = 2 KeyRelease = 3 ButtonPress = 4 ButtonRelease = 5 MotionNotify = 6 EnterNotify = 7 LeaveNotify = 8 FocusIn = 9 FocusOut = 10 KeymapNotify = 11 Expose = 12 GraphicsExpose = 13 NoExpose = 14 VisibilityNotify = 15 CreateNotify = 16 DestroyNotify = 17 UnmapNotify = 18 MapNotify = 19 MapRequest = 20 ReparentNotify = 21 ConfigureNotify = 22 ConfigureRequest = 23 GravityNotify = 24 ResizeRequest = 25 CirculateNotify = 26 CirculateRequest = 27 PropertyNotify = 28 SelectionClear = 29 SelectionRequest = 30 SelectionNotify = 31 ColormapNotify = 32 ClientMessage = 33 MappingNotify = 34 LASTEvent = 35 ;Key Masks ShiftMask = 1h LockMask = 2h ControlMask = 4h Mod1Mask = 8h Mod2Mask = 10h Mod3Mask = 20h Mod4Mask = 40h Mod5Mask = 80h ;Modifier Names ShiftMapIndex = 0 LockMapIndex = 1 ControlMapIndex = 2 Mod1MapIndex = 3 Mod2MapIndex = 4 Mod3MapIndex = 5 Mod4MapIndex = 6 Mod5MapIndex = 7 ;Button Masks Button1Mask = 100h Button2Mask = 200h Button3Mask = 400h Button4Mask = 800h Button5Mask = 1000h AnyModifier = 10000h ;Button Names Button1 = 1 Button2 = 2 Button3 = 3 Button4 = 4 Button5 = 5 ;Notify Modes NotifyNormal = 0 NotifyGrab = 1 NotifyUngrab = 2 NotifyWhileGrabbed = 3 NotifyHint = 1 ;Notify Detail NotifyAncestor = 0 NotifyVirtual = 1 NotifyInferior = 2 NotifyNonlinear = 3 NotifyNonlinearVirtual = 4 NotifyPointer = 5 NotifyPointerRoot = 6 NotifyDetailNone = 7 ;Visibility Notify VisibilityUnobscured = 0 VisibilityPartiallyObscured = 1 VisibilityFullyObscured = 2 ;Circulation request PlaceOnTop = 0 PlaceOnBottom = 1 ;Protocol Families FamilyInternet = 0 FamilyDECnet = 1 FamilyChaos = 2 FamilyInternet6 = 6 ;Unspecific authentication families FamilyServerInterpreted = 5 ;Property Notification PropertyNewValue = 0 PropertyDelete = 1 ;Color Map notification ColormapUninstalled = 0 ColormapInstalled = 1 ;Grab Modes GrabModeSync = 0 GrabModeAsync = 1 ;Grab reply status GrabSuccess = 0 AlreadyGrabbed = 1 GrabInvalidTime = 2 GrabNotViewable = 3 GrabFrozen = 4 ;AllowEvents modes AsyncPointer = 0 SyncPointer = 1 ReplayPointer = 2 AsyncKeyboard = 3 SyncKeyboard = 4 ReplayKeyboard = 5 AsyncBoth = 6 SyncBoth = 7 ;InputFocus specific RevertToNone = None RevertToPointerRoot = PointerRoot RevertToParent = 2 ;Error Codes Success = 0 BadRequest = 1 BadValue = 2 BadWindow = 3 BadPixmap = 4 BadAtom = 5 BadCursor = 6 BadFont = 7 BadMatch = 8 BadDrawable = 9 BadAccess = 10 BadAlloc = 11 BadColor = 12 BadGC = 13 BadIDChoice = 14 BadName = 15 BadLength = 16 BadImplementation = 17 FirstExtensionError = 128 LastExtensionError = 255 ;Window Classes InputOutput = 1 InputOnly = 2 ;Window Attributes CWBackPixmap = 1h CWBackPixel = 2h CWBorderPixmap = 4h CWBorderPixel = 8h CWBitGravity = 10h CWWinGravity = 20h CWBackingStore = 40h CWBackingPlanes = 80h CWBackingPixel = 100h CWOverrideRedirect = 200h CWSaveUnder = 400h CWEventMask = 800h CWDontPropagate = 1000h CWColormap = 2000h CWCursor = 4000h ;ConfigureWindow Structure CWX = 1h CWY = 2h CWWidth = 4h CWHeight = 8h CWBorderWidth = 10h CWSibling = 20h CWStackMode = 40h ;Bit Gravity ForgetGravity = 0 NorthWestGravity = 1 NorthGravity = 2 NorthEastGravity = 3 WestGravity = 4 CenterGravity = 5 EastGravity = 6 SouthWestGravity = 7 SouthGravity = 8 SouthEastGravity = 9 StaticGravity = 10 ;Window Gravity UnmapGravity = 0 ;CreateWindow backing-store hint NotUseful = 0 WhenMapped = 1 Always = 2 ;GetWindowAttributes reply IsUnmapped = 0 IsUnviewable = 1 IsViewable = 2 ;Used in ChangeSaveSet SetModeInsert = 0 SetModeDelete = 1 ;Used in ChangeCloseDownMode DestroyAll = 0 RetainPermanent = 1 RetainTemporary = 2 ;Window stacking method (in configureWindow) Above = 0 Below = 1 TopIf = 2 BottomIf = 3 Opposite = 4 ;Circulation direction RaiseLowest = 0 LowerHighest = 1 ;Property modes PropModeReplace = 0 PropModePrepend = 1 PropModeAppend = 2 ;Graphics Functions GXclear = 0 GXand = 1 GXandReverse = 2 GXcopy = 3 GXandInverted = 4 GXnoop = 5 GXxor = 6 GXor = 7 GXnor = 8 GXequiv = 9 GXinvert = 10 GXorReverse = 11 GXcopyInverted = 12 GXorInverted = 13 GXnand = 14 GXset = 15 ;LineStyle LineSolid = 0 LineOnOffDash = 1 LineDoubleDash = 2 ;capStyle CapNotLast = 0 CapButt = 1 CapRound = 2 CapProjecting = 3 ;joinStyle JoinMiter = 0 JoinRound = 1 JoinBevel = 2 ;fillStyle FillSolid = 0 FillTiled = 1 FillStippled = 2 FillOpaqueStippled = 3 ;fillRule EvenOddRule = 0 WindingRule = 1 ;subwindow mode ClipByChildren = 0 IncludeInferiors = 1 ;SetClipRectangles ordering Unsorted = 0 YSorted = 1 YXSorted = 2 YXBanded = 3 ;CoordinateMode for drawing routines CoordModeOrigin = 0 CoordModePrevious = 1 ;Polygon shapes Complex = 0 Nonconvex = 1 Convex = 2 ;Arc modes for PolyFillArc ArcChord = 0 ArcPieSlice = 1 ;GC components GCFunction = 1h GCPlaneMask = 2h GCForeground = 4h GCBackground = 8h GCLineWidth = 10h GCLineStyle = 20h GCCapStyle = 40h GCJoinStyle = 80h GCFillStyle = 100h GCFillRule = 200h GCTile = 400h GCStipple = 800h GCTileStipXOrigin = 1000h GCTileStipYOrigin = 2000h GCFont = 4000h GCSubwindowMode = 8000h GCGraphicsExposures = 10000h GCClipXOrigin = 20000h GCClipYOrigin = 40000h GCClipMask = 80000h GCDashOffset = 100000h GCDashList = 200000h GCArcMode = 400000h GCLastBit = 22 struct XRectangle .x dw ? .y dw ? .width dw ? .height dw ? ends GCAll = (1 shl (GCLastBit+1)) -1 struct XGCValues .function dd ? ; logical operation .plane_mask dd ? ; plane mask .foreground dd ? ; foreground pixel .background dd ? ; background pixel .line_width dd ? ; line width (in pixels) .line_style dd ? ; LineSolid, LineOnOffDash, LineDoubleDash .cap_style dd ? ; CapNotLast, CapButt, CapRound, CapProjecting .join_style dd ? ; JoinMiter, JoinRound, JoinBevel .fill_style dd ? ; FillSolid, FillTiled, FillStippled FillOpaqueStippled .fill_rule dd ? ; EvenOddRule, WindingRule .arc_mode dd ? ; ArcChord, ArcPieSlice .tile dd ? ; tile pixmap for tiling operations .stipple dd ? ; stipple 1 plane pixmap for stippling .ts_x_origin dd ? ; offset for tile or stipple operations .ts_y_origin dd ? .font dd ? ; default text font for text operations .subwindow_mode dd ? ; ClipByChildren, IncludeInferiors .fraphics_exposures dd ? ; boolean, should exposures be generated .clip_x_origin dd ? ; origin for clipping .clip_y_origin dd ? .clip_mask dd ? ; bitmap clipping; other calls for rects .dash_offset dd ? ; patterned/dashed line information .dashes dd ? ends ;used in QueryFont -- draw direction FontLeftToRight = 0 FontRightToLeft = 1 FontChange = 255 ;ImageFormat -- PutImage, GetImage XYBitmap = 0 XYPixmap = 1 ZPixmap = 2 ;For CreateColormap AllocNone = 0 AllocAll = 1 ;Flags used in StoreNamedColor, StoreColors DoRed = 1h DoGreen = 2h DoBlue = 4h ;QueryBestSize Class CursorShape = 0 TileShape = 1 StippleShape = 2 ;Keyboard pointer stuff AutoRepeatModeOff = 0 AutoRepeatModeOn = 1 AutoRepeatModeDefault = 2 LedModeOff = 0 LedModeOn = 1 ;masks for ChangeKeyboardControl KBKeyClickPercent = 1h KBBellPercent = 2h KBBellPitch = 4h KBBellDuration = 8h KBLed = 10h KBLedMode = 20h KBKey = 40h KBAutoRepeatMode = 80h MappingSuccess = 0 MappingBusy = 1 MappingFailed = 2 MappingModifier = 0 MappingKeyboard = 1 MappingPointer = 2 ;Screensaver stuff DontPreferBlanking = 0 PreferBlanking = 1 DefaultBlanking = 2 DisableScreenSaver = 0 DisableScreenInterval = 0 DontAllowExposures = 0 AllowExposures = 1 DefaultExposures = 2 ;for ForceScreenSaver ScreenSaverReset = 0 ScreenSaverActive = 1 ;for ChangeHosts HostInsert = 0 HostDelete = 1 ;for ChangeAccessControl EnableAccess = 1 DisableAccess = 0 ;display classes StaticGray = 0 GrayScale = 1 StaticColor = 2 PseudoColor = 3 TrueColor = 4 DirectColor = 5 ;Byte order used in imageByteOrder and bitmapBitOrder LSBFirst = 0 MSBFirst = 1 ;Keyboard and Pointer Event Structures struct XButtonEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .root rd 1 .subwindow rd 1 .time rd 1 .x rd 1 .y rd 1 .x_root rd 1 .y_root rd 1 .state rd 1 .button rd 1 .same_screen rd 1 ends struct XButtonPressedEvent . XButtonEvent ends struct XButtonReleasedEvent . XButtonEvent ends struct XKeyEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .root rd 1 .subwindow rd 1 .time rd 1 .x rd 1 .y rd 1 .x_root rd 1 .y_root rd 1 .state rd 1 .keycode rd 1 .same_screen rd 1 ends struct XKeyPressedEvent . XKeyEvent ends struct XKeyReleasedEvent . XKeyEvent ends struct XMotionEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .root rd 1 .subwindow rd 1 .time rd 1 .x rd 1 .y rd 1 .x_root rd 1 .y_root rd 1 .state rd 1 .is_hint rb 1 .same_screen rd 1 ends struct XPointerMovedEvent . XMotionEvent ends ;Window Entry/Exit Events struct XCrossingEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .root rd 1 .subwindow rd 1 .time rd 1 .x rd 1 .y rd 1 .x_root rd 1 .y_root rd 1 .mode rd 1 .detail rd 1 .same_screen rd 1 .focus rd 1 .state rd 1 ends struct XEnterWindowEvent . XCrossingEvent ends struct XLeaveWindowEvent . XCrossingEvent ends ; Input Focus Events struct XFocusChangeEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .mode rd 1 .detail rd 1 ends struct XFocusInEvent . XFocusChangeEvent ends struct XFocusOutEvent . XFocusChangeEvent ends ; Keymap Notification Events struct XKeymapEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .key_vector rb 32 ends ; Exposure/Update Events struct XExposeEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .x rd 1 .y rd 1 .width rd 1 .height rd 1 .count rd 1 ends struct XGraphicsExposeEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .drawable rd 1 .x rd 1 .y rd 1 .width rd 1 .height rd 1 .count rd 1 .major_code rd 1 .minor_code rd 1 ends struct XNoExposeEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .drawable rd 1 .major_code rd 1 .minor_code rd 1 ends ; CirculateNotify Events struct XCirculateEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .event rd 1 .window rd 1 .place rd 1 ends struct XCirculateRequestEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .parent rd 1 .window rd 1 .place rd 1 ends ; Configuration Change Events struct XConfigureEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .event rd 1 .window rd 1 .x rd 1 .y rd 1 .width rd 1 .height rd 1 .border_width rd 1 .above rd 1 .override_redirect rd 1 ends struct XConfigureRequestEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .parent rd 1 .window rd 1 .x rd 1 .y rd 1 .width rd 1 .height rd 1 .border_width rd 1 .above rd 1 .detail rd 1 .value_mask rd 1 ends struct XPropertyEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .atom rd 1 .time rd 1 .state rd 1 ends struct XResizeEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .width rd 1 .height rd 1 ends struct XColormapEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .colormap rd 1 .new rd 1 .state rd 1 ends ; Creation/Destruction Notifications struct XCreateWindowEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .parent rd 1 .window rd 1 .x rd 1 .y rd 1 .width rd 1 .heigth rd 1 .border_width rd 1 .override_redirect rd 1 ends struct XDestroyWindowEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .event rd 1 .window rd 1 ends ; Parent Movement Events struct XGravityEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .event rd 1 .window rd 1 .x rd 1 .y rd 1 ends ; Mapping Events struct XMapEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .event rd 1 .window rd 1 .override_redirect rd 1 ends struct XMappingEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .request rd 1 .first_keycode rd 1 .count rd 1 ends struct XMapRequestEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .parent rd 1 .window rd 1 ends ; Parent Change Events struct XReparentEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .event rd 1 .window rd 1 .parent rd 1 .x rd 1 .y rd 1 .override_redirect rd 1 ends struct XSelectionClearEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .selection rd 1 .time rd 1 ends struct XSelectionRequestEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .owner rd 1 .requestor rd 1 .selection rd 1 .target rd 1 .property rd 1 .time rd 1 ends struct XSelectionEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .requestor rd 1 .selection rd 1 .target rd 1 .property rd 1 .time rd 1 ends ; Hidden Window Events struct XUnmapEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .event rd 1 .window rd 1 .from_configure rd 1 ends struct XVisibilityEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .state rd 1 ends ; Client Messages (XSendEvent) struct XClientMessageEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 .message_type rd 1 .format rd 1 .data rb 20 ends struct XErrorEvent .type dd ? .display dd ? .resourceid dd ? .serial dd ? .error_code db ? .request_code db ? .minor_code db ? ends struct XAnyEvent .type rd 1 .serial rd 1 .send_event rd 1 .display rd 1 .window rd 1 ends struct XEvent .xany XAnyEvent .pad rb 24*4 - sizeof.XAnyEvent virtual at .xany . XAnyEvent end virtual ; ; ; virtual at .xany ; .xkey XKeyEvent ; end virtual ; ; virtual at .xany ; .xbutton XButtonEvent ; end virtual ; ; virtual at .xany ; .xmotion XMotionEvent ; end virtual ; ; virtual at .xany ; .xcrossing XCrossingEvent ; end virtual ; ; virtual at .xany ; .xfocus XFocusChangeEvent ; end virtual ; ; virtual at .xany ; .xexpose XExposeEvent ; end virtual ; ; virtual at .xany ; .xgraphicsexpose XGraphicsExposeEvent ; end virtual ; ; virtual at .xany ; .xnoexpose XNoExposeEvent ; end virtual ; ; virtual at .xany ; .xvisibility XVisibilityEvent ; end virtual ; ; virtual at .xany ; .xcreatewindow XCreateWindowEvent ; end virtual ; ; virtual at .xany ; .xdestroywindow XDestroyWindowEvent ; end virtual ; ; virtual at .xany ; .xunmap XUnmapEvent ; end virtual ; ; virtual at .xany ; .xmap XMapEvent ; end virtual ; ; virtual at .xany ; .xmaprequest XMapRequestEvent ; end virtual ; ; virtual at .xany ; .xreparent XReparentEvent ; end virtual ; ; virtual at .xany ; .xconfigure XConfigureEvent ; end virtual ; ; virtual at .xany ; .xgravity XGravityEvent ; end virtual ; ; virtual at .xany ; .xresizerequest XResizeEvent ; end virtual ; ; virtual at .xany ; .xconfigurerequest XConfigureRequestEvent ; end virtual ; ; virtual at .xany ; .xcirculate XCirculateEvent ; end virtual ; ; virtual at .xany ; .xcirculaterequest XCirculateRequestEvent ; end virtual ; ; virtual at .xany ; .xproperty XPropertyEvent ; end virtual ; ; virtual at .xany ; .xselectionclear XSelectionClearEvent ; end virtual ; ; virtual at .xany ; .xselectionrequest XSelectionRequestEvent ; end virtual ; ; virtual at .xany ; .xselection XSelectionEvent ; end virtual ; ; virtual at .xany ; .xcolormap XColormapEvent ; end virtual ; ; virtual at .xany ; .xclient XClientMessageEvent ; end virtual ; ; virtual at .xany ; .xmapping XMappingEvent ; end virtual ; ; virtual at .xany ; .xerror XErrorEvent ; end virtual ; ; virtual at .xany ; .xkeymap XKeymapEvent ; end virtual ends ; Misc. Structures struct XKeyboardControl .key_click_percent rd 1 .bell_percent rd 1 .bell_pitch rd 1 .bell_duration rd 1 .led rd 1 .led_mode rd 1 .key rd 1 .auto_repeat_mode rd 1 ends struct XModifierKeymap .max_keypermod rd 1 .modifiermap rd 1 ends struct XVisualInfo .Visual dd ? .VisualID dd ? .screen dd ? .depth dd ? .class dd ? .red_mask dd ? .green_mask dd ? .blue_mask dd ? .colormap_size dd ? .bits_per_rgb dd ? ends struct XWindowAttributes .x dd ? ; location of window .y dd ? ; .width dd ? ; width and height of window .height dd ? ; .border_width dd ? ; border width of window .depth dd ? ; depth of window .pVisual dd ? ; the associated visual structure .root dd ? ; root of screen containing window .class dd ? ; InputOutput, InputOnly .bit_gravity dd ? ; one of the bit gravity values .win_gravity dd ? ; one of the window gravity values .backing_store dd ? ; NotUseful, WhenMapped, Always .backing_planes dd ? ; planes to be preserved if possible .backing_pixel dd ? ; value to be used when restoring planes .save_under dd ? ; boolean, should bits under be saved? .colormap dd ? ; color map to be associated with window .map_installed dd ? ; boolean, is color map currently installed .map_state dd ? ; IsUnmapped, IsUnviewable, IsViewable .all_event_masks dd ? ; set of events all people have interest in .your_event_mask dd ? ; my event mask .do_not_propagate_mask dd ? ; set of events that should not propagate .override_redirect dd ? ; boolean value for override-redirect .pScreen dd ? ; back pointer to correct screen ends struct XSetWindowAttributes .background_pixmap dd ? ; background, None, or ParentRelative .background_pixel dd ? ; background pixel .border_pixmap dd ? ; border of the window or CopyFromParent .border_pixel dd ? ; border pixel value .bit_gravity dd ? ; one of bit gravity values .win_gravity dd ? ; one of the window gravity values .backing_store dd ? ; NotUseful, WhenMapped, Always .backing_planes dd ? ; planes to be preserved if possible .backing_pixel dd ? ; value to use in restoring planes .save_under dd ? ; should bits under be saved? (popups) .event_mask dd ? ; set of events that should be saved .do_not_propagate_mask dd ? ; set of events that should not propagate .override_redirect dd ? ; boolean value for override_redirect .colormap dd ? ; color map to be associated with window .cursor dd ? ; cursor to be displayed (or None) ends struct XCharStruct .lbearing dw ? ; origin to left edge of raster .rbearing dw ? ; origin to right edge of raster .width dw ? ; advance to next char's origin .ascent dw ? ; baseline to top edge of raster .descent dw ? ; baseline to bottom edge of raster .attributes dw ? ; per char flags (not predefined) ends struct XFontStruct .ext_data dd ? ; hook for extension to hang data .fid dd ? ; Font id for this font .direction dd ? ; hint about the direction font is painted .min_char_or_byte2 dd ? ; first character .max_char_or_byte2 dd ? ; last character .min_byte1 dd ? ; first row that exists .max_byte1 dd ? ; last row that exists .all_chars_exist dd ? ; flag if all characters have nonzero size .default_char dd ? ; char to print for undefined character .n_properties dd ? ; how many properties there are .properties dd ? ; pointer to array of additional properties .min_bounds XCharStruct ; minimum bounds over all existing char .max_bounds XCharStruct ; maximum bounds over all existing char .per_char dd ? ; first_char to last_char information .ascent dd ? ; logical extent above baseline for spacing .descent dd ? ; logical decent below baseline for spacing ends struct XWindowChanges .x dd ? .y dd ? .width dd ? .height dd ? .border_width dd ? .sibling dd ? .stack_mode dd ? ends struct XImage .width dd ? ; size of image .height dd ? .xoffset dd ? ; number of pixels offset in X direction .format dd ? ; XYBitmap, XYPixmap, ZPixmap .pData dd ? ; pointer to image data .byte_order dd ? ; data byte order, LSBFirst=0, MSBFirst=1 .bitmap_unit dd ? ; quantity of scan line 8, 16, 32 .bitmap_bit_order dd ? ; LSBFirst, MSBFirst .bitmap_pad dd ? ; 8, 16, 32 either XY or ZPixmap .depth dd ? ; depth of image .bytes_per_line dd ? ; accelerator to next line .bits_per_pixel dd ? ; bits per pixel (ZPixmap) .red_mask dd ? ; bits in z arrangment .green_mask dd ? ; bits in z arrangment .blue_mask dd ? ; bits in z arrangment .ptrObData dd ? ; hook for object routines to hang on .funcCreateImage dd ? ; image manipulation routines .funcDestroyImage dd ? ; .funcGetPixel dd ? .funcPutPixel dd ? .funcSubImage dd ? .funcAddPixel dd ? ends struct XWMHints .flags dd ? .input dd ? .initial_state dd ? .icon_pixmap dd ? .icon_window dd ? .icon_x dd ? .icon_y dd ? .icon_mask dd ? .window_group dd ? ends InputHint = 1 StateHint = 2 IconPixmapHint = 4 IconWindowHint = 8 IconPositionHint= 16 IconMaskHint = 32 WindowGroupHint = 64 UrgencyHint = 128 AllHints = InputHint or StateHint or IconPixmapHint or IconWindowHint or IconPositionHint or IconMaskHint or WindowGroupHint or UrgencyHint WithdrawnState = 0 NormalState = 1 IconicState = 3 ; RequestCodes Xrequests = 0 .CreateWindow =1 .ChangeWindowAttributes =2 .GetWindowAttributes =3 .DestroyWindow =4 .DestroySubwindows =5 .ChangeSaveSet =6 .ReparentWindow =7 .MapWindow =8 .MapSubwindows =9 .UnmapWindow =10 .UnmapSubwindows =11 .ConfigureWindow =12 .CirculateWindow =13 .GetGeometry =14 .QueryTree =15 .InternAtom =16 .GetAtomName =17 .ChangeProperty =18 .DeleteProperty =19 .GetProperty =20 .ListProperties =21 .SetSelectionOwner =22 .GetSelectionOwner =23 .ConvertSelection =24 .SendEvent =25 .GrabPointer =26 .UngrabPointer =27 .GrabButton =28 .UngrabButton =29 .ChangeActivePointerGrab =30 .GrabKeyboard =31 .UngrabKeyboard =32 .GrabKey =33 .UngrabKey =34 .AllowEvents =35 .GrabServer =36 .UngrabServer =37 .QueryPointer =38 .GetMotionEvents =39 .TranslateCoords =40 .WarpPointer =41 .SetInputFocus =42 .GetInputFocus =43 .QueryKeymap =44 .OpenFont =45 .CloseFont =46 .QueryFont =47 .QueryTextExtents =48 .ListFonts =49 .ListFontsWithInfo =50 .SetFontPath =51 .GetFontPath =52 .CreatePixmap =53 .FreePixmap =54 .CreateGC =55 .ChangeGC =56 .CopyGC =57 .SetDashes =58 .SetClipRectangles =59 .FreeGC =60 .ClearArea =61 .CopyArea =62 .CopyPlane =63 .PolyPoint =64 .PolyLine =65 .PolySegment =66 .PolyRectangle =67 .PolyArc =68 .FillPoly =69 .PolyFillRectangle =70 .PolyFillArc =71 .PutImage =72 .GetImage =73 .PolyText8 =74 .PolyText16 =75 .ImageText8 =76 .ImageText16 =77 .CreateColormap =78 .FreeColormap =79 .CopyColormapAndFree =80 .InstallColormap =81 .UninstallColormap =82 .ListInstalledColormaps =83 .AllocColor =84 .AllocNamedColor =85 .AllocColorCells =86 .AllocColorPlanes =87 .FreeColors =88 .StoreColors =89 .StoreNamedColor =90 .QueryColors =91 .LookupColor =92 .CreateCursor =93 .CreateGlyphCursor =94 .FreeCursor =95 .RecolorCursor =96 .QueryBestSize =97 .QueryExtension =98 .ListExtensions =99 .ChangeKeyboardMapping =100 .GetKeyboardMapping =101 .ChangeKeyboardControl =102 .GetKeyboardControl =103 .Bell =104 .ChangePointerControl =105 .GetPointerControl =106 .SetScreenSaver =107 .GetScreenSaver =108 .ChangeHosts =109 .ListHosts =110 .SetAccessControl =111 .SetCloseDownMode =112 .KillClient =113 .RotateProperties =114 .ForceScreenSaver =115 .SetPointerMapping =116 .GetPointerMapping =117 .SetModifierMapping =118 .GetModifierMapping =119 .NoOperation =127 ; Predefined atoms from the X server. XA_PRIMARY = 1 XA_SECONDARY = 2 XA_ARC = 3 XA_ATOM = 4 XA_BITMAP = 5 XA_CARDINAL = 6 XA_COLORMAP = 7 XA_CURSOR = 8 XA_CUT_BUFFER0 = 9 XA_CUT_BUFFER1 = 10 XA_CUT_BUFFER2 = 11 XA_CUT_BUFFER3 = 12 XA_CUT_BUFFER4 = 13 XA_CUT_BUFFER5 = 14 XA_CUT_BUFFER6 = 15 XA_CUT_BUFFER7 = 16 XA_DRAWABLE = 17 XA_FONT = 18 XA_INTEGER = 19 XA_PIXMAP = 20 XA_POINT = 21 XA_RECTANGLE = 22 XA_RESOURCE_MANAGER = 23 XA_RGB_COLOR_MAP = 24 XA_RGB_BEST_MAP = 25 XA_RGB_BLUE_MAP = 26 XA_RGB_DEFAULT_MAP = 27 XA_RGB_GRAY_MAP = 28 XA_RGB_GREEN_MAP = 29 XA_RGB_RED_MAP = 30 XA_STRING = 31 XA_VISUALID = 32 XA_WINDOW = 33 XA_WM_COMMAND = 34 XA_WM_HINTS = 35 XA_WM_CLIENT_MACHINE = 36 XA_WM_ICON_NAME = 37 XA_WM_ICON_SIZE = 38 XA_WM_NAME = 39 XA_WM_NORMAL_HINTS = 40 XA_WM_SIZE_HINTS = 41 XA_WM_ZOOM_HINTS = 42 XA_MIN_SPACE = 43 XA_NORM_SPACE = 44 XA_MAX_SPACE = 45 XA_END_SPACE = 46 XA_SUPERSCRIPT_X = 47 XA_SUPERSCRIPT_Y = 48 XA_SUBSCRIPT_X = 49 XA_SUBSCRIPT_Y = 50 XA_UNDERLINE_POSITION = 51 XA_UNDERLINE_THICKNESS = 52 XA_STRIKEOUT_ASCENT = 53 XA_STRIKEOUT_DESCENT = 54 XA_ITALIC_ANGLE = 55 XA_X_HEIGHT = 56 XA_QUAD_WIDTH = 57 XA_WEIGHT = 58 XA_POINT_SIZE = 59 XA_RESOLUTION = 60 XA_COPYRIGHT = 61 XA_NOTICE = 62 XA_FONT_NAME = 63 XA_FAMILY_NAME = 64 XA_FULL_NAME = 65 XA_CAP_HEIGHT = 66 XA_WM_CLASS = 67 XA_WM_TRANSIENT_FOR = 68 XA_LAST_PREDEFINED = 68 |
Changes to freshlib/equates/Linux/_geometry.inc.
1 2 3 4 5 6 7 8 9 10 11 | struct RECT .left dd ? .top dd ? .right dd ? .bottom dd ? ends struct POINT .x dd ? .y dd ? ends | > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Different geometry structures. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct TBounds .x dd ? .y dd ? .width dd ? .height dd ? ends struct RECT .left dd ? .top dd ? .right dd ? .bottom dd ? ends struct POINT .x dd ? .y dd ? ends |
Added freshlib/equates/Linux/_ipc.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: IPC constants for libC functions. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ IPC_PRIVATE = 0 IPC_W = $080 IPC_R = $100 IPC_CREAT = $200 IPC_EXCL = $400 IPC_NOWAIT = $800 IPC_RMID = 0 ; remove identifier IPC_SET = 1 ; set options IPC_STAT = 2 ; get options IPC_INFO = 3 IPC_64 = $100 struct ipc_perm .key dd ? .uid dw ? ; owner euid and egid .gid dw ? ; .cuid dw ? ; creator euid and egid .cgid dw ? ; .mode dw ? ; access modes see mode flags below .seq dw ? ; slot usage sequence number ends struct shmid_ds .shm_perm ipc_perm ; Ownership and permissions .shm_segsz dd ? ; Size of segment (bytes) .shm_atime dd ? ; Last attach time .shm_dtime dd ? ; Last detach time .shm_ctime dd ? ; Last change time .shm_cpid dw ? ; PID of creator .shm_lpid dw ? ; PID of last SHMAT/SHMDT .shm_nattch dw ? ; Number of current attaches .shm_unused dw ? ; Not used .shm_unused2 dd ? ; Not used .shm_unused3 dd ? ; Not used ends struct ipc64_perm .key dd ? .uid dd ? ; owner euid and egid .gid dd ? ; .cuid dd ? ; creator euid and egid .cgid dd ? ; .mode dd ? ; access modes see mode flags below (only lower 16 bit are used) .seq dd ? ; slot usage sequence number (only lower 16 bit are used) dd ? dd ? ends struct shmid64_ds .shm_perm ipc64_perm ; Ownership and permissions .shm_segsz dd ? ; Size of segment (bytes) .shm_atime dq ? ; Last attach time .shm_dtime dq ? ; Last detach time .shm_ctime dq ? ; Last change time .shm_cpid dd ? ; PID of creator .shm_lpid dd ? ; PID of last SHMAT/SHMDT .shm_nattch dd ? ; Number of current attaches dd ? ; Not used dd ? ; Not used ends |
Added freshlib/equates/Linux/_libFT.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: FreeType library constants and structures. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ FT_FACE_FLAG_SCALABLE = $0001 FT_FACE_FLAG_FIXED_SIZES = $0002 FT_FACE_FLAG_FIXED_WIDTH = $0004 FT_FACE_FLAG_SFNT = $0008 FT_FACE_FLAG_HORIZONTAL = $0010 FT_FACE_FLAG_VERTICAL = $0020 FT_FACE_FLAG_KERNING = $0040 FT_FACE_FLAG_FAST_GLYPHS = $0080 FT_FACE_FLAG_MULTIPLE_MASTERS = $0100 FT_FACE_FLAG_GLYPH_NAMES = $0200 FT_FACE_FLAG_EXTERNAL_STREAM = $0400 FT_FACE_FLAG_HINTER = $0800 FT_FACE_FLAG_CID_KEYED = $1000 FT_FACE_FLAG_TRICKY = $2000 FT_LOAD_DEFAULT = $0 FT_LOAD_NO_SCALE = $1 FT_LOAD_NO_HINTING = $2 FT_LOAD_RENDER = $4 FT_LOAD_NO_BITMAP = $8 FT_LOAD_VERTICAL_LAYOUT = $10 FT_LOAD_FORCE_AUTOHINT = $20 FT_LOAD_CROP_BITMAP = $40 ; deprecated, ignored FT_LOAD_PEDANTIC = $80 FT_LOAD_ADVANCE_ONLY = $100 FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH = $200 ; deprecated, ignored FT_LOAD_NO_RECURSE = $400 FT_LOAD_IGNORE_TRANSFORM = $800 FT_LOAD_MONOCHROME = $1000 FT_LOAD_LINEAR_DESIGN = $2000 FT_LOAD_SBITS_ONLY = $4000 FT_LOAD_NO_AUTOHINT = $8000 FT_LOAD_COLOR = $100000 FT_ADVANCE_FLAG_FAST_ONLY = $20000000 FT_RENDER_MODE_NORMAL = 0 FT_RENDER_MODE_LIGHT = 1 FT_RENDER_MODE_MONO = 2 FT_RENDER_MODE_LCD = 3 FT_RENDER_MODE_LCD_V = 4 FT_RENDER_MODE_MAX = 5 struc FT_LOAD_TARGET x { . = (x and 15) shl 16 } FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET FT_RENDER_MODE_NORMAL FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET FT_RENDER_MODE_LIGHT FT_LOAD_TARGET_MONO FT_LOAD_TARGET FT_RENDER_MODE_MONO FT_LOAD_TARGET_LCD FT_LOAD_TARGET FT_RENDER_MODE_LCD FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET FT_RENDER_MODE_LCD_V FT_PIXEL_MODE_NONE = 0 FT_PIXEL_MODE_MONO = 1 FT_PIXEL_MODE_GRAY = 2 FT_PIXEL_MODE_GRAY2 = 3 FT_PIXEL_MODE_GRAY4 = 4 FT_PIXEL_MODE_LCD = 5 FT_PIXEL_MODE_LCD_V = 6 FT_PIXEL_MODE_BGRA = 7 struct FT_Generic .data dd ? .finalizer dd ? ; pointer to procedure with one argument. ends struct FT_BBox .xMin dd ? .yMin dd ? .xMax dd ? .yMax dd ? ends struct FT_Vector .x dd ? .y dd ? ends struct FT_Bitmap .rows dd ? .width dd ? .pitch dd ? .buffer dd ? ; pointer to the buffer. .num_grays dw ? .pixel_mode db ? .palette_mode db ? .palette dd ? ; pointer to the palette. ends struct FT_Bitmap_Size .height dw ? .width dw ? .size dd ? ; 26.6 fixed size format. .x_ppem dd ? ; 26.6 fixed size format. .y_ppem dd ? ; 26.6 fixed size format. ends struct FT_Outline .n_contours dw ? .n_points dw ? .points dd ? ; pointer to array of FT_Vector elements. .tags dd ? ; pointer to byte array. .contours dd ? ; pointer to word array. .flags dd ? ends struct FT_Glyph_Metrics .width dd ? .height dd ? .horiBearingX dd ? .horiBearingY dd ? .horiAdvance dd ? .vertBearingX dd ? .vertBearingY dd ? .vertAdvance dd ? ends struct FT_GlyphSlot .library dd ? .face dd ? ; parent FT_Face object .next dd ? ; pointer tp FT_GlyphSlot .reserved dd ? .generic FT_Generic .metrics FT_Glyph_Metrics .linearHoriAdvance dd ? .linearVertAdvance dd ? .advance FT_Vector .format dd ? .bitmap FT_Bitmap .bitmap_left dd ? .bitmap_top dd ? .outline FT_Outline .num_subglyphs dd ? .subglyphs dd ? ; pointer to array of FT_SubGlyphRec elements. .control_data dd ? .control_len dd ? .lsb_delta dd ? .rsb_delta dd ? .other dd ? .internal dd ? ; pointer to FT_Slot_InternalRec ends struct FT_FaceRec .num_faces dd ? .face_index dd ? .face_flags dd ? .style_flags dd ? .num_glyphs dd ? .family_name dd ? .style_name dd ? .num_fixed_sizes dd ? .available_sizes dd ? .num_charmaps dd ? .charmaps dd ? .generic FT_Generic ; scalable fonts members down to .underline_thickness .bbpx FT_BBox .units_per_EM dw ? .ascender dw ? .descender dw ? .height dw ? .max_advance_width dw ? .max_advance_height dw ? .underline_position dw ? .underline_thickness dw ? .glyph dd ? ; pointer to FT_GlyphSlot .size dd ? ; pointer to FT_Size .charmap dd ? ; pointer to FT_CharMap ; down is the private part. ends struct FT_GlyphRec .library dd ? .clazz dd ? .format dd ? .advance FT_Vector ends struct FT_BitmapGlyphRec .root FT_GlyphRec .left dd ? .top dd ? .bitmap FT_Bitmap ends FT_SIZE_REQUEST_TYPE_NOMINAL = 0 FT_SIZE_REQUEST_TYPE_REAL_DIM = 1 FT_SIZE_REQUEST_TYPE_BBOX = 2 FT_SIZE_REQUEST_TYPE_CELL = 3 FT_SIZE_REQUEST_TYPE_SCALES = 4 struct FT_Size_RequestRec .type dd ? .width dd ? .height dd ? .horiResolution dd ? .vertResolution dd ? ends struct FT_Size_Metrics .x_ppem dw ? ; horizontal pixels per EM .y_ppem dw ? ; vertical pixels per EM .x_scale dd ? ; scaling values used to convert font .y_scale dd ? ; units to 26.6 fractional pixels .ascender dd ? ; ascender in 26.6 frac. pixels .descender dd ? ; descender in 26.6 frac. pixels .height dd ? ; text height in 26.6 frac. pixels .max_advance dd ? ; max horizontal advance, in 26.6 pixels ends struct FT_SizeRec .face dd ? ; parent face object .generic FT_Generic ; generic pointer for client uses .metrics FT_Size_Metrics ; size metrics .internal: ends struct FTC_ScalerRec .face_id dd ? .width dd ? .height dd ? .pixel dd ? .x_res dd ? .y_res dd ? ends struct FTC_ImageType .face_id dd ? .width dd ? .height dd ? .flags dd ? ends interface FT_Face_Requester, .face_id, .library, .request_data, .pFace |
Added freshlib/equates/Linux/_libXrender.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: libXrender constants and structures. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct XRenderDirectFormat .red dw ? .redMask dw ? .green dw ? .greenMask dw ? .blue dw ? .blueMask dw ? .alpha dw ? .alphaMask dw ? ends struct XRenderPictFormat .id dd ? .type dd ? .depth dd ? .direct XRenderDirectFormat .colormap dd ? ends PictFormatID = (1 shl 0) PictFormatType = (1 shl 1) PictFormatDepth = (1 shl 2) PictFormatRed = (1 shl 3) PictFormatRedMask = (1 shl 4) PictFormatGreen = (1 shl 5) PictFormatGreenMask = (1 shl 6) PictFormatBlue = (1 shl 7) PictFormatBlueMask = (1 shl 8) PictFormatAlpha = (1 shl 9) PictFormatAlphaMask = (1 shl 10) PictFormatColormap = (1 shl 11) struct XRenderPictureAttributes .repeat dd ? .alpha_map dd ? .alpha_x_origin dd ? .alpha_y_origin dd ? .clip_x_origin dd ? .clip_y_origin dd ? .clip_mask dd ? .graphics_exposures dd ? .subwindow_mode dd ? .poly_edge dd ? .poly_mode dd ? .dither dd ? .component_alpha dd ? ends struct XRenderColor .red dw ? .green dw ? .blue dw ? .alpha dw ? ends struct XGlyphInfo .width dw ? .height dw ? .x dw ? .y dw ? .xOff dw ? .yOff dw ? ends struct XGlyphElt .glyphset dd ? .chars dd ? ; pointer to an array of bytes .nchars dd ? .xOff dd ? .yOff dd ? ends struct XPointDouble .x dq ? ; double floating point .y dq ? ends struct XPointFixed ; the coordinate multiplied by 65536. .x dd ? .y dd ? ends struct XLineFixed .p1 XPointFixed .p2 XPointFixed ends struct XTriangle .p1 XPointFixed .p2 XPointFixed .p3 XPointFixed ends struct XCircle .x dd ? .y dd ? .radius dd ? ends struct XTrapezoid .top dd ? .bottom dd ? .left XLineFixed .right XLineFixed ends struct XTransform .matrix rd 9 ends struct XFilters .nfilter dd ? .filter dd ? ; **char .nalias dd ? .alias dd ? ; pointer to an array of word ends struct XIndexValue .pixel dd ? .red dw ? .green dw ? .blue dw ? .alpha dw ? ends struct XAnimCursor .cursor dd ? .delay dd ? ends struct XSpanFix .left dd ? .right dd ? .y dd ? ends struct XTrap .top XSpanFix .botton XSpanFix ends struct XLinearGradient .p1 XPointFixed .p2 XPointFixed ends struct XRadialGradient .inner XCircle .outer XCircle ends struct XConicalGradient .center XPointFixed .angle dd ? ; in degrees ends PictStandardARGB32 = 0 PictStandardRGB24 = 1 PictStandardA8 = 2 PictStandardA4 = 3 PictStandardA1 = 4 PictStandardNUM = 5 X_RenderQueryVersion = 0 X_RenderQueryPictFormats = 1 X_RenderQueryPictIndexValues = 2 ; 0.7 X_RenderQueryDithers = 3 X_RenderCreatePicture = 4 X_RenderChangePicture = 5 X_RenderSetPictureClipRectangles = 6 X_RenderFreePicture = 7 X_RenderComposite = 8 X_RenderScale = 9 X_RenderTrapezoids = 10 X_RenderTriangles = 11 X_RenderTriStrip = 12 X_RenderTriFan = 13 X_RenderColorTrapezoids = 14 X_RenderColorTriangles = 15 ; X_RenderTransform = 16 X_RenderCreateGlyphSet = 17 X_RenderReferenceGlyphSet = 18 X_RenderFreeGlyphSet = 19 X_RenderAddGlyphs = 20 X_RenderAddGlyphsFromPicture = 21 X_RenderFreeGlyphs = 22 X_RenderCompositeGlyphs8 = 23 X_RenderCompositeGlyphs16 = 24 X_RenderCompositeGlyphs32 = 25 X_RenderFillRectangles = 26 ; 0.5 X_RenderCreateCursor = 27 ; 0.6 X_RenderSetPictureTransform = 28 X_RenderQueryFilters = 29 X_RenderSetPictureFilter = 30 ; 0.8 X_RenderCreateAnimCursor = 31 ; 0.9 X_RenderAddTraps = 32 ; 0.10 X_RenderCreateSolidFill = 33 X_RenderCreateLinearGradient = 34 X_RenderCreateRadialGradient = 35 X_RenderCreateConicalGradient = 36 RenderNumberRequests = (X_RenderCreateConicalGradient+1) BadPictFormat = 0 BadPicture = 1 BadPictOp = 2 BadGlyphSet = 3 BadGlyph = 4 RenderNumberErrors = (BadGlyph+1) PictTypeIndexed = 0 PictTypeDirect = 1 PictOpMinimum = 0 PictOpClear = 0 PictOpSrc = 1 PictOpDst = 2 PictOpOver = 3 PictOpOverReverse = 4 PictOpIn = 5 PictOpInReverse = 6 PictOpOut = 7 PictOpOutReverse = 8 PictOpAtop = 9 PictOpAtopReverse = 10 PictOpXor = 11 PictOpAdd = 12 PictOpSaturate = 13 PictOpMaximum = 13 ; Operators only available in version 0.2 PictOpDisjointMinimum = $10 PictOpDisjointClear = $10 PictOpDisjointSrc = $11 PictOpDisjointDst = $12 PictOpDisjointOver = $13 PictOpDisjointOverReverse = $14 PictOpDisjointIn = $15 PictOpDisjointInReverse = $16 PictOpDisjointOut = $17 PictOpDisjointOutReverse = $18 PictOpDisjointAtop = $19 PictOpDisjointAtopReverse = $1a PictOpDisjointXor = $1b PictOpDisjointMaximum = $1b PictOpConjointMinimum = $20 PictOpConjointClear = $20 PictOpConjointSrc = $21 PictOpConjointDst = $22 PictOpConjointOver = $23 PictOpConjointOverReverse = $24 PictOpConjointIn = $25 PictOpConjointInReverse = $26 PictOpConjointOut = $27 PictOpConjointOutReverse = $28 PictOpConjointAtop = $29 PictOpConjointAtopReverse = $2a PictOpConjointXor = $2b PictOpConjointMaximum = $2b ; Operators only available in version 0.11 PictOpBlendMinimum = $30 PictOpMultiply = $30 PictOpScreen = $31 PictOpOverlay = $32 PictOpDarken = $33 PictOpLighten = $34 PictOpColorDodge = $35 PictOpColorBurn = $36 PictOpHardLight = $37 PictOpSoftLight = $38 PictOpDifference = $39 PictOpExclusion = $3a PictOpHSLHue = $3b PictOpHSLSaturation = $3c PictOpHSLColor = $3d PictOpHSLLuminosity = $3e PictOpBlendMaximum = $3e PolyEdgeSharp = 0 PolyEdgeSmooth = 1 PolyModePrecise = 0 PolyModeImprecise = 1 CPRepeat = (1 shl 0) CPAlphaMap = (1 shl 1) CPAlphaXOrigin = (1 shl 2) CPAlphaYOrigin = (1 shl 3) CPClipXOrigin = (1 shl 4) CPClipYOrigin = (1 shl 5) CPClipMask = (1 shl 6) CPGraphicsExposure = (1 shl 7) CPSubwindowMode = (1 shl 8) CPPolyEdge = (1 shl 9) CPPolyMode = (1 shl 10) CPDither = (1 shl 11) CPComponentAlpha = (1 shl 12) CPLastBit = 12 ; Filters included in 0.6 FilterNearest text "nearest" FilterBilinear text "bilinear" ; Filters included in 0.10 FilterConvolution text "convolution" FilterFast text "fast" FilterGood text "good" FilterBest text "best" FilterAliasNone = -1 ; Subpixel orders included in 0.6 SubPixelUnknown = 0 SubPixelHorizontalRGB = 1 SubPixelHorizontalBGR = 2 SubPixelVerticalRGB = 3 SubPixelVerticalBGR = 4 SubPixelNone = 5 ; Extended repeat attributes included in 0.10 RepeatNone = 0 RepeatNormal = 1 RepeatPad = 2 RepeatReflect = 3 |
Added freshlib/equates/Linux/_libdl.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Common LibDL constants and definitions. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; constants for runtime dynamic linking functions. RTLD_LAZY = 1 RTLD_NOW = 2 RTLD_BINDING_MASK = 3 RTLD_NOLOAD = 4 RTLD_DEEPBIND = 8 RTLD_LOCAL = 0 RTLD_GLOBAL = $100 RTLD_NODELETE = $1000 ; pseudo-handles for dlsym() RTLD_DEFAULT = 0 RTLD_NEXT = -1 |
Added freshlib/equates/Linux/_linux.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Common Linux equates. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ UNIX_PATH_MAX = 108 ; Error numbers from the kernel EPERM = 1 ; Operation not permitted ENOENT = 2 ; No such file or directory ESRCH = 3 ; No such process EINTR = 4 ; Interrupted system call EIO = 5 ; I/O error ENXIO = 6 ; No such device or address E2BIG = 7 ; Argument list too long ENOEXEC = 8 ; Exec format error EBADF = 9 ; Bad file number ECHILD = 10 ; No child processes EAGAIN = 11 ; Try again ENOMEM = 12 ; Out of memory EACCES = 13 ; Permission denied EFAULT = 14 ; Bad address ENOTBLK = 15 ; Block device required EBUSY = 16 ; Device or resource busy EEXIST = 17 ; File exists EXDEV = 18 ; Cross-device link ENODEV = 19 ; No such device ENOTDIR = 20 ; Not a directory EISDIR = 21 ; Is a directory EINVAL = 22 ; Invalid argument ENFILE = 23 ; File table overflow EMFILE = 24 ; Too many open files ENOTTY = 25 ; Not a typewriter ETXTBSY = 26 ; Text file busy EFBIG = 27 ; File too large ENOSPC = 28 ; No space left on device ESPIPE = 29 ; Illegal seek EROFS = 30 ; Read-only file system EMLINK = 31 ; Too many links EPIPE = 32 ; Broken pipe EDOM = 33 ; Math argument out of domain of func ERANGE = 34 ; Math result not representable EDEADLK = 35 ; Resource deadlock would occur ENAMETOOLONG = 36 ; File name too long ENOLCK = 37 ; No record locks available ENOSYS = 38 ; Function not implemented ENOTEMPTY = 39 ; Directory not empty ELOOP = 40 ; Too many symbolic links encountered EWOULDBLOCK = EAGAIN ; Operation would block ENOMSG = 42 ; No message of desired type EIDRM = 43 ; Identifier removed ECHRNG = 44 ; Channel number out of range EL2NSYNC = 45 ; Level 2 not synchronized EL3HLT = 46 ; Level 3 halted EL3RST = 47 ; Level 3 reset ELNRNG = 48 ; Link number out of range EUNATCH = 49 ; Protocol driver not attached ENOCSI = 50 ; No CSI structure available EL2HLT = 51 ; Level 2 halted EBADE = 52 ; Invalid exchange EBADR = 53 ; Invalid request descriptor EXFULL = 54 ; Exchange full ENOANO = 55 ; No anode EBADRQC = 56 ; Invalid request code EBADSLT = 57 ; Invalid slot EDEADLOCK = EDEADLK EBFONT = 59 ; Bad font file format ENOSTR = 60 ; Device not a stream ENODATA = 61 ; No data available ETIME = 62 ; Timer expired ENOSR = 63 ; Out of streams resources ENONET = 64 ; Machine is not on the network ENOPKG = 65 ; Package not installed EREMOTE = 66 ; Object is remote ENOLINK = 67 ; Link has been severed EADV = 68 ; Advertise error ESRMNT = 69 ; Srmount error ECOMM = 70 ; Communication error on send EPROTO = 71 ; Protocol error EMULTIHOP = 72 ; Multihop attempted EDOTDOT = 73 ; RFS specific error EBADMSG = 74 ; Not a data message EOVERFLOW = 75 ; Value too large for defined data type ENOTUNIQ = 76 ; Name not unique on network EBADFD = 77 ; File descriptor in bad state EREMCHG = 78 ; Remote address changed ELIBACC = 79 ; Can not access a needed shared library ELIBBAD = 80 ; Accessing a corrupted shared library ELIBSCN = 81 ; .lib section in a.out corrupted ELIBMAX = 82 ; Attempting to link in too many shared libraries ELIBEXEC = 83 ; Cannot exec a shared library directly EILSEQ = 84 ; Illegal byte sequence ERESTART = 85 ; Interrupted system call should be restarted ESTRPIPE = 86 ; Streams pipe error EUSERS = 87 ; Too many users ENOTSOCK = 88 ; Socket operation on non-socket EDESTADDRREQ = 89 ; Destination address required EMSGSIZE = 90 ; Message too long EPROTOTYPE = 91 ; Protocol wrong type for socket ENOPROTOOPT = 92 ; Protocol not available EPROTONOSUPPORT =93 ; Protocol not supported ESOCKTNOSUPPORT =94 ; Socket type not supported EOPNOTSUPP =95 ; Operation not supported on transport endpoint EPFNOSUPPORT = 96 ; Protocol family not supported EAFNOSUPPORT = 97 ; Address family not supported by protocol EADDRINUSE = 98 ; Address already in use EADDRNOTAVAIL = 99 ; Cannot assign requested address ENETDOWN = 100 ; Network is down ENETUNREACH = 101 ; Network is unreachable ENETRESET = 102 ; Network dropped connection because of reset ECONNABORTED = 103 ; Software caused connection abort ECONNRESET = 104 ; Connection reset by peer ENOBUFS = 105 ; No buffer space available EISCONN = 106 ; Transport endpoint is already connected ENOTCONN = 107 ; Transport endpoint is not connected ESHUTDOWN = 108 ; Cannot send after transport endpoint shutdown ETOOMANYREFS = 109 ; Too many references: cannot splice ETIMEDOUT = 110 ; Connection timed out ECONNREFUSED = 111 ; Connection refused EHOSTDOWN = 112 ; Host is down EHOSTUNREACH = 113 ; No route to host EALREADY = 114 ; Operation already in progress EINPROGRESS = 115 ; Operation now in progress ESTALE = 116 ; Stale NFS file handle EUCLEAN = 117 ; Structure needs cleaning ENOTNAM = 118 ; Not a XENIX named type file ENAVAIL = 119 ; No XENIX semaphores available EISNAM = 120 ; Is a named type file EREMOTEIO = 121 ; Remote I/O error EDQUOT = 122 ; Quota exceeded ENOMEDIUM = 123 ; No medium found EMEDIUMTYPE = 124 ; Wrong medium type ECANCELED = 125 ; Operation Canceled ENOKEY = 126 ; Required key not available EKEYEXPIRED = 127 ; Key has expired EKEYREVOKED = 128 ; Key has been revoked EKEYREJECTED = 129 ; Key was rejected by service ; for robust mutexes EOWNERDEAD = 130 ; Owner died ENOTRECOVERABLE= 131 ; State not recoverable ; System functions ( int $80 ) ; Name EAX sys_restart_syscall = $00 sys_exit = $01 sys_fork = $02 sys_read = $03 sys_write = $04 sys_open = $05 sys_close = $06 sys_waitpid = $07 sys_creat = $08 sys_link = $09 sys_unlink = $0a sys_execve = $0b sys_chdir = $0c sys_time = $0d sys_mknod = $0e sys_chmod = $0f sys_lchown16 = $10 sys_stat = $12 sys_lseek = $13 sys_getpid = $14 sys_mount = $15 sys_oldumount = $16 sys_setuid16 = $17 sys_getuid16 = $18 sys_stime = $19 sys_ptrace = $1a sys_alarm = $1b sys_fstat = $1c sys_pause = $1d sys_utime = $1e sys_access = $21 sys_nice = $22 sys_sync = $24 sys_kill = $25 sys_rename = $26 sys_mkdir = $27 sys_rmdir = $28 sys_dup = $29 sys_pipe = $2a sys_times = $2b sys_brk = $2d sys_setgid16 = $2e sys_getgid16 = $2f sys_signal = $30 sys_geteuid16 = $31 sys_getegid16 = $32 sys_acct = $33 sys_umount = $34 sys_ioctl = $36 sys_fcntl = $37 sys_setpgid = $39 sys_olduname = $3b sys_umask = $3c sys_chroot = $3d sys_ustat = $3e sys_dup2 = $3f sys_getppid = $40 sys_getpgrp = $41 sys_setsid = $42 sys_sigaction = $43 sys_sgetmask = $44 sys_ssetmask = $45 sys_setreuid16 = $46 sys_setregid16 = $47 sys_sigsuspend = $48 sys_sigpending = $49 sys_sethostname = $4a sys_setrlimit = $4b sys_old_getrlimit = $4c sys_getrusage = $4d sys_gettimeofday = $4e sys_settimeofday = $4f sys_getgroups16 = $50 sys_setgroups16 = $51 sys_old_select = $52 sys_symlink = $53 sys_lstat = $54 sys_readlink = $55 sys_uselib = $56 sys_swapon = $57 sys_reboot = $58 sys_old_readdir = $59 sys_old_mmap = $5a sys_munmap = $5b sys_truncate = $5c sys_ftruncate = $5d sys_fchmod = $5e sys_fchown16 = $5f sys_getpriority = $60 sys_setpriority = $61 sys_statfs = $63 sys_fstatfs = $64 sys_ioperm = $65 sys_socketcall = $66 sys_syslog = $67 sys_setitimer = $68 sys_getitimer = $69 sys_newstat = $6a sys_newlstat = $6b sys_newfstat = $6c sys_uname = $6d sys_iopl = $6e sys_vhangup = $6f sys_vm86old = $71 sys_wait4 = $72 sys_swapoff = $73 sys_sysinfo = $74 sys_ipc = $75 sys_fsync = $76 sys_sigreturn = $77 sys_clone = $78 sys_setdomainname = $79 sys_newuname = $7a sys_modify_ldt = $7b sys_adjtimex = $7c sys_mprotect = $7d sys_sigprocmask = $7e sys_init_module = $80 sys_delete_module = $81 sys_quotactl = $83 sys_getpgid = $84 sys_fchdir = $85 sys_bdflush = $86 sys_sysfs = $87 sys_personality = $88 sys_setfsuid16 = $8a sys_setfsgid16 = $8b sys_llseek = $8c sys_getdents = $8d sys_select = $8e sys_flock = $8f sys_msync = $90 sys_readv = $91 sys_writev = $92 sys_getsid = $93 sys_fdatasync = $94 sys_sysctl = $95 sys_mlock = $96 sys_munlock = $97 sys_mlockall = $98 sys_munlockall = $99 sys_sched_setparam = $9a sys_sched_getparam = $9b sys_sched_setscheduler = $9c sys_sched_getscheduler = $9d sys_sched_yield = $9e sys_sched_get_priority_m = $9f sys_sched_get_priority_m = $a0 sys_sched_rr_get_interva = $a1 sys_nanosleep = $a2 sys_mremap = $a3 sys_setresuid16 = $a4 sys_getresuid16 = $a5 sys_vm86 = $a6 sys_poll = $a8 sys_nfsservctl = $a9 sys_setresgid16 = $aa sys_getresgid16 = $ab sys_prctl = $ac sys_rt_sigreturn = $ad sys_rt_sigaction = $ae sys_rt_sigprocmask = $af sys_rt_sigpending = $b0 sys_rt_sigtimedwait = $b1 sys_rt_sigqueueinfo = $b2 sys_rt_sigsuspend = $b3 sys_pread64 = $b4 sys_pwrite64 = $b5 sys_chown16 = $b6 sys_getcwd = $b7 sys_capget = $b8 sys_capset = $b9 sys_sigaltstack = $ba sys_sendfile = $bb sys_vfork = $be sys_getrlimit = $bf sys_mmap2 = $c0 sys_truncate64 = $c1 sys_ftruncate64 = $c2 sys_stat64 = $c3 sys_lstat64 = $c4 sys_fstat64 = $c5 sys_lchown = $c6 sys_getuid = $c7 sys_getgid = $c8 sys_geteuid = $c9 sys_getegid = $ca sys_setreuid = $cb sys_setregid = $cc sys_getgroups = $cd sys_setgroups = $ce sys_fchown = $cf sys_setresuid = $d0 sys_getresuid = $d1 sys_setresgid = $d2 sys_getresgid = $d3 sys_chown = $d4 sys_setuid = $d5 sys_setgid = $d6 sys_setfsuid = $d7 sys_setfsgid = $d8 sys_pivot_root = $d9 sys_mincore = $da sys_madvise = $db sys_getdents64 = $dc sys_fcntl64 = $dd sys_gettid = $e0 sys_readahead = $e1 sys_setxattr = $e2 sys_lsetxattr = $e3 sys_fsetxattr = $e4 sys_getxattr = $e5 sys_lgetxattr = $e6 sys_fgetxattr = $e7 sys_listxattr = $e8 sys_llistxattr = $e9 sys_flistxattr = $ea sys_removexattr = $eb sys_lremovexattr = $ec sys_fremovexattr = $ed sys_tkill = $ee sys_sendfile64 = $ef sys_futex = $f0 sys_sched_setaffinity = $f1 sys_sched_getaffinity = $f2 sys_set_thread_area = $f3 sys_get_thread_area = $f4 sys_io_setup = $f5 sys_io_destroy = $f6 sys_io_getevents = $f7 sys_io_submit = $f8 sys_io_cancel = $f9 sys_fadvise64 = $fa sys_exit_group = $fc sys_lookup_dcookie = $fd sys_epoll_create = $fe sys_epoll_ctl = $ff sys_epoll_wait = $100 sys_remap_file_pages = $101 sys_set_tid_address = $102 sys_timer_create = $103 sys_timer_settime = $104 sys_timer_gettime = $105 sys_timer_getoverrun = $106 sys_timer_delete = $107 sys_clock_settime = $108 sys_clock_gettime = $109 sys_clock_getres = $10a sys_clock_nanosleep = $10b sys_statfs64 = $10c sys_fstatfs64 = $10d sys_tgkill = $10e sys_utimes = $10f sys_fadvise64_64 = $110 sys_mbind = $112 sys_get_mempolicy = $113 sys_set_mempolicy = $114 sys_mq_open = $115 sys_mq_unlink = $116 sys_mq_timedsend = $117 sys_mq_timedreceive = $118 sys_mq_notify = $119 sys_mq_getsetattr = $11a sys_kexec_load = $11b sys_waitid = $11c sys_add_key = $11e sys_request_key = $11f sys_keyctl = $120 sys_ioprio_set = $121 sys_ioprio_get = $122 sys_inotify_init = $123 sys_inotify_add_watch = $124 sys_inotify_rm_watch = $125 sys_migrate_pages = $126 sys_openat = $127 sys_mkdirat = $128 sys_mknodat = $129 sys_fchownat = $12a sys_futimesat = $12b sys_fstatat64 = $12c sys_unlinkat = $12d sys_renameat = $12e sys_linkat = $12f sys_symlinkat = $130 sys_readlinkat = $131 sys_fchmodat = $132 sys_faccessat = $133 sys_pselect6 = $134 sys_ppoll = $135 sys_unshare = $136 sys_set_robust_list = $137 sys_get_robust_list = $138 sys_splice = $139 sys_sync_file_range = $13a sys_tee = $13b sys_vmsplice = $13c sys_move_pages = $13d sys_getcpu = $13e sys_epoll_pwait = $13f sys_utimensat = $140 sys_signalfd = $141 sys_timerfd_create = $142 sys_eventfd = $143 sys_fallocate = $144 sys_timerfd_settime = $145 sys_timerfd_gettime = $146 sys_signalfd4 = $147 sys_eventfd2 = $148 sys_epoll_create1 = $149 sys_dup3 = $14a sys_pipe2 = $14b sys_inotify_init1 = $14c sys_preadv = $14d sys_pwritev = $14e sys_rt_tgsigqueueinfo = $14f sys_perf_event_open = $150 sys_recvmmsg = $151 ; file open access flags to be used with sys_open and other file functions. O_ACCMODE = 0003o O_RDONLY = 00o O_WRONLY = 01o O_RDWR = 02o O_CREAT = 0100o O_EXCL = 0200o O_NOCTTY = 0400o O_TRUNC = 01000o O_APPEND = 02000o O_NONBLOCK = 04000o O_NDELAY = O_NONBLOCK O_SYNC = 010000o ;specific to ext2 fs and block devices FASYNC = 020000o ;fcntl, for BSD compatibility O_DIRECT = 040000o ;direct disk access hint - currently ignored O_LARGEFILE = 0100000o O_DIRECTORY = 0200000o ;must be a directory O_NOFOLLOW = 0400000o ;don't follow links O_NOATIME = 01000000o ; file permissions flags S_ISUID = 04000o ;set user ID on execution S_ISGID = 02000o ;set group ID on execution S_ISVTX = 01000o ;sticky bit S_IRUSR = 00400o ;read by owner (S_IREAD) S_IWUSR = 00200o ;write by owner (S_IWRITE) S_IXUSR = 00100o ;execute/search by owner (S_IEXEC) S_IRGRP = 00040o ;read by group S_IWGRP = 00020o ;write by group S_IXGRP = 00010o ;execute/search by group S_IROTH = 00004o ;read by others (R_OK) S_IWOTH = 00002o ;write by others (W_OK) S_IXOTH = 00001o ;execute/search by others (X_OK) ;socket commands SYS_SOCKET = 1 SYS_BIND = 2 SYS_CONNECT = 3 SYS_LISTEN = 4 SYS_ACCEPT = 5 SYS_GETSOCKNAME = 6 SYS_GETPEERNAME = 7 SYS_SOCKETPAIR = 8 SYS_SEND = 9 SYS_RECV = 10 SYS_SENDTO = 11 SYS_RECVFROM = 12 SYS_SHUTDOWN = 13 SYS_SETSOCKOPT = 14 SYS_GETSOCKOPT = 15 SYS_SENDMSG = 16 SYS_RECVMSG = 17 ;socket constants ; SYS_SHUTDOWN argument: SHUT_RD = 0 SHUT_WR = 1 SHUT_RDWR = 2 ; AF_UNSPEC = 0 AF_UNIX = 1 AF_LOCAL = 1 AF_INET = 2 AF_AX25 = 3 AF_IPX = 4 AF_APPLETALK = 5 AF_NETROM = 6 AF_BRIDGE = 7 AF_ATMPVC = 8 AF_X25 = 9 AF_INET6 = 10 AF_ROSE = 11 AF_DECnet = 12 AF_NETBEUI = 13 AF_SECURITY = 14 AF_KEY = 15 AF_NETLINK = 16 AF_ROUTE = AF_NETLINK AF_PACKET = 17 AF_ASH = 18 AF_ECONET = 19 AF_ATMSVC = 20 AF_SNA = 22 AF_IRDA = 23 AF_PPPOX = 24 AF_WANPIPE = 25 AF_LLC = 26 AF_TIPC = 30 AF_BLUETOOTH = 31 AF_MAX = 32 PF_UNSPEC = AF_UNSPEC PF_UNIX = AF_UNIX PF_LOCAL = AF_LOCAL PF_INET = AF_INET PF_AX25 = AF_AX25 PF_IPX = AF_IPX PF_APPLETALK = AF_APPLETALK PF_NETROM = AF_NETROM PF_BRIDGE = AF_BRIDGE PF_ATMPVC = AF_ATMPVC PF_X25 = AF_X25 PF_INET6 = AF_INET6 PF_ROSE = AF_ROSE PF_DECnet = AF_DECnet PF_NETBEUI = AF_NETBEUI PF_SECURITY = AF_SECURITY PF_KEY = AF_KEY PF_NETLINK = AF_NETLINK PF_ROUTE = AF_ROUTE PF_PACKET = AF_PACKET PF_ASH = AF_ASH PF_ECONET = AF_ECONET PF_ATMSVC = AF_ATMSVC PF_SNA = AF_SNA PF_IRDA = AF_IRDA PF_PPPOX = AF_PPPOX PF_WANPIPE = AF_WANPIPE PF_LLC = AF_LLC PF_TIPC = AF_TIPC PF_BLUETOOTH = AF_BLUETOOTH PF_MAX = AF_MAX SOCK_STREAM = 1 SOCK_DGRAM = 2 SOCK_RAW = 3 SOCK_RDM = 4 SOCK_SEQPACKET = 5 SOCK_DCCP = 6 SOCK_PACKET = 10 ; socket flags MSG_OOB = 1 MSG_PEEK = 2 MSG_DONTROUTE = 4 MSG_TRYHARD = 4 MSG_CTRUNC = 8 MSG_PROBE = 0x10 MSG_TRUNC = 0x20 MSG_DONTWAIT = 0x40 MSG_EOR = 0x80 MSG_WAITALL = 0x100 MSG_FIN = 0x200 MSG_SYN = 0x400 MSG_CONFIRM = 0x800 MSG_RST = 0x1000 MSG_ERRQUEUE = 0x2000 MSG_NOSIGNAL = 0x4000 MSG_MORE = 0x8000 SOL_SOCKET = 1 SO_DEBUG = 1 SO_REUSEADDR = 2 SO_TYPE = 3 SO_ERROR = 4 SO_DONTROUTE = 5 SO_BROADCAST = 6 SO_SNDBUF = 7 SO_RCVBUF = 8 SO_SNDBUFFORCE = 32 SO_RCVBUFFORCE = 33 SO_KEEPALIVE = 9 SO_OOBINLINE = 10 SO_NO_CHECK = 11 SO_PRIORITY = 12 SO_LINGER = 13 SO_BSDCOMPAT = 14 SO_PASSCRED = 16 SO_PEERCRED = 17 SO_RCVLOWAT = 18 SO_SNDLOWAT = 19 SO_RCVTIMEO = 20 SO_SNDTIMEO = 21 IPPROTO_IP = 0 ; dummy for IP IPPROTO_HOPOPTS = 0 ; IPv6 hop-by-hop options IPPROTO_ICMP = 1 ; control message protocol IPPROTO_IGMP = 2 ; group mgmt protocol IPPROTO_IPV4 = 4 IPPROTO_TCP = 6 ; tcp IPPROTO_EGP = 8 ; exterior gateway protocol IPPROTO_PIGP = 9 IPPROTO_UDP = 17 ; user datagram protocol IPPROTO_DCCP = 33 ; datagram congestion control protocol IPPROTO_IPV6 = 41 IPPROTO_ROUTING = 43 ; IPv6 routing header IPPROTO_FRAGMENT = 44 ; IPv6 fragmentation header IPPROTO_RSVP = 46 ; resource reservation IPPROTO_GRE = 47 ; General Routing Encap. IPPROTO_ESP = 50 ; SIPP Encap Sec. Payload IPPROTO_AH = 51 ; SIPP Auth Header IPPROTO_MOBILE = 55 IPPROTO_ICMPV6 = 58 ; ICMPv6 IPPROTO_NONE = 59 ; IPv6 no next header IPPROTO_DSTOPTS = 60 ; IPv6 destination options IPPROTO_MOBILITY_OLD = 62 IPPROTO_ND = 77 ; Sun net disk proto (temp.) IPPROTO_EIGRP = 88 ; Cisco/GXS IGRP IPPROTO_OSPF = 89 IPPROTO_PIM = 103 IPPROTO_IPCOMP = 108 IPPROTO_VRRP = 112 IPPROTO_PGM = 113 IPPROTO_SCTP = 132 IPPROTO_MOBILITY = 135 ; sys_ipc commands and constants SEMOP = 1 SEMGET = 2 SEMCTL = 3 SEMTIMEDOP = 4 MSGSND = 11 MSGRCV = 12 MSGGET = 13 MSGCTL = 14 SHMAT = 21 SHMDT = 22 SHMGET = 23 SHMCTL = 24 ; shm_mode upper byte flags SHM_DEST = $200 ; segment will be destroyed on last detach SHM_LOCKED = $400 ; segment will not be swapped SHM_HUGETLB = $800 ; segment is mapped via hugetlb SHM_NORESERVE = $1000 ; don't check for reservations ; Signal values ; default action is: "Term" - terminate; "Core" - terminate with core dump; "Ign" - ignore; "Stop" - stop the process; "Cont" - continue the process. macro signal name, value { name = value name#.mask = 1 shl value } signal SIGHUP , 1 ; Term Hangup detected on controlling terminal or death of controlling process signal SIGINT , 2 ; Term Interrupt from keyboard signal SIGQUIT , 3 ; Core Quit from keyboard signal SIGILL , 4 ; Core Illegal Instruction signal SIGTRAP , 5 ; Core Trace/breakpoint trap signal SIGABRT , 6 ; Core Abort signal from abort(3) signal SIGIOT , 6 ; Core IOT trap. A synonym for SIGABRT signal SIGBUS , 7 ; Core Bus error (bad memory access) signal SIGFPE , 8 ; Core Floating point exception signal SIGKILL , 9 ; Term Kill signal signal SIGUSR1 , 10 ; Term User-defined signal 1 signal SIGSEGV , 11 ; Core Invalid memory reference signal SIGUSR2 , 12 ; Term User-defined signal 2 signal SIGPIPE , 13 ; Term Broken pipe: write to pipe with no readers signal SIGALRM , 14 ; Term Timer signal from alarm(2) signal SIGTERM , 15 ; Term Termination signal signal SIGSTKFLT, 16 ; Term Stack fault on coprocessor (unused) signal SIGCHLD , 17 ; Ign Child stopped or terminated signal SIGCONT , 18 ; Cont Continue if stopped signal SIGSTOP , 19 ; Stop Stop process signal SIGTSTP , 20 ; Stop Stop typed at tty signal SIGTTIN , 21 ; Stop tty input for background process signal SIGTTOU , 22 ; Stop tty output for background process signal SIGURG , 23 ; Ign Urgent condition on socket (4.2BSD) signal SIGXCPU , 24 ; Core CPU time limit exceeded (4.2BSD) signal SIGXFSZ , 25 ; Core File size limit exceeded (4.2BSD) signal SIGVTALRM, 26 ; Term Virtual alarm clock (4.2BSD) signal SIGPROF , 27 ; Term Profiling timer expired signal SIGWINCH , 28 ; Ign Window resize signal (4.3BSD, Sun) signal SIGIO , 29 ; Term I/O now possible (4.2BSD) signal SIGPWR , 30 ; Term Power failure (System V) signal SIGSYS , 31 ; Core Bad argument to routine (SVr4) signal SIGUNUSED, 31 ; Core Synonymous with SIGSYS SIGRTMIN = 34 SIGRTMAX = 64 ; signal flags SA_ONSTACK = $00000001 ; Call the signal handler on an alternate signal stack provided by ; sigaltstack(2). If an alternate stack is not available, the ; default stack will be used. This flag is only meaningful when ; establishing a signal handler. SA_RESETHAND = $00000004 ; Restore the signal action to the default state once the signal ; handler has been called. This flag is only meaningful when ; establishing a signal handler. SA_ONESHOT is an obsolete, ; nonstandard synonym for this flag. SA_NOCLDSTOP = $00000008 ; If signum is SIGCHLD, do not receive notification when child ; processes stop (i.e., when they receive one of SIGSTOP, SIGTSTP, ; SIGTTIN or SIGTTOU) or resume (i.e., they receive SIGCONT) (see ; wait(2)). This flag is only meaningful when establishing a handler ; for SIGCHLD. SA_SIGINFO = $00000010 ; The signal handler takes 3 arguments, not one. In this case, ; sa_sigaction should be set instead of sa_handler. This flag is ; only meaningful when establishing a signal handler. SA_NODEFER = $00000020 ; Do not prevent the signal from being received from within its own ; signal handler. This flag is only meaningful when establishing a ; signal handler. SA_NOMASK is an obsolete, nonstandard synonym for ; this flag. SA_RESTART = $00000040 ; Provide behavior compatible with BSD signal semantics by making ; certain system calls restartable across signals. This flag is only ; meaningful when establishing a signal handler. See signal(7) for a ; discussion of system call restarting. SA_NOCLDWAIT = $00000080 ; If signum is SIGCHLD, do not transform children into zombies when ; they terminate. See also waitpid(2). This flag is only meaningful ; when establishing a handler for SIGCHLD, or when setting that ; signal's disposition to SIG_DFL. ; ; If the SA_NOCLDWAIT flag is set when establishing a handler for ; SIGCHLD, POSIX.1 leaves it unspecified whether a SIGCHLD signal is ; generated when a child process terminates. On Linux, a SIGCHLD ; signal is generated in this case; on some other implementations, it ; is not. SA_NOMASK = SA_NODEFER SA_ONESHOT = SA_RESETHAND SA_INTERRUPT = $20000000 ; dummy -- ignored SA_RESTORER = $04000000 ; obsolete -- ignored ; Signals hanlers constants SIG_DFL = 0 ; default signal handling SIG_IGN = 1 ; ignore signal SIG_ERR = -1 ; error return from signal ; Interval timers structures ITIMER_REAL = 0 ITIMER_VIRTUAL = 1 ITIMER_PROF = 2 struct lnx_sigaction .sa_handler dd ? ; SIG_DFL, SIG_IGN or ptr proc Handler, .signal .sa_sigaction dd ? ; ptr proc SigAction, .signal, .ptrSignalInfo, .ptr .sa_mask dd ? ; mask of the signals .sa_flags dd ? ; .sa_restorer dd ? ; obsolete, don't use ends struct sig_context .gs dd ? .fs dd ? .es dd ? .ds dd ? .edi dd ? .esi dd ? .ebp dd ? .esp dd ? .ebx dd ? .edx dd ? .ecx dd ? .eax dd ? .trapno dd ? .err dd ? .eip dd ? .cs dd ? .eflags dd ? .esp_at_signal dd ? .ss dd ? .fpstate dd ? .oldmask dd ? .cr2 dd ? ends struct lnx_timeval .tv_sec dd ? .tv_usec dd ? ends struct lnx_timezone .tz_minuteswest dd ? .tz_dsttime dd ? ends struct lnx_itimerval .it_interval lnx_timeval .it_value lnx_timeval ends ; structures and equates for timer_xxxx POSIX functions CLOCK_REALTIME = 0 ; Identifier for system-wide realtime clock. CLOCK_MONOTONIC = 1 ; Monotonic system-wide clock. CLOCK_PROCESS_CPUTIME_ID = 2 ; High-resolution timer from the CPU. CLOCK_THREAD_CPUTIME_ID = 3 ; Thread-specific CPU-time clock. SIGEV_SIGNAL = 0 ; Notify via signal. SIGEV_NONE = 1 ; Other notification: meaningless. SIGEV_THREAD = 2 ; Deliver via thread creation. SIGEV_THREAD_ID = 4 ; Send signal to specific thread. struct lnx_sigval .sival_int dd ? virtual at .sival_int .sival_ptr dd ? end virtual ends struct lnx_sigev_thread .function dd ? .attribute dd ? ends struct lnx_sigevent .value lnx_sigval .signo dd ? .notify dd ? ._pad rd 13 virtual at ._pad ._tid dd ? end virtual virtual at ._pad .thread lnx_sigev_thread end virtual ends struct lnx_timespec .tv_sec dd ? ; time in seconds .tv_nsec dd ? ; time is nano seconds ends struct lnx_itimerspec .it_interval lnx_timespec .it_value lnx_timespec ends ; sys_clone function flags CLONE_VM = $00000100 ; set if VM shared between processes CLONE_FS = $00000200 ; set if fs info shared between processes CLONE_FILES = $00000400 ; set if open files shared between processes CLONE_SIGHAND = $00000800 ; set if signal handlers and blocked signals shared CLONE_PTRACE = $00002000 ; set if we want to let tracing continue on the child too CLONE_VFORK = $00004000 ; set if the parent wants the child to wake it up on mm_release CLONE_PARENT = $00008000 ; set if we want to have the same parent as the cloner CLONE_THREAD = $00010000 ; Same thread group? CLONE_NEWNS = $00020000 ; New namespace group? CLONE_SYSVSEM = $00040000 ; share system V SEM_UNDO semantics CLONE_SETTLS = $00080000 ; create a new TLS for the child CLONE_PARENT_SETTID = $00100000 ; set the TID in the parent CLONE_CHILD_CLEARTID = $00200000 ; clear the TID in the child CLONE_DETACHED = $00400000 ; Unused, ignored CLONE_UNTRACED = $00800000 ; set if the tracing process can't force CLONE_PTRACE on this clone CLONE_CHILD_SETTID = $01000000 ; set the TID in the child CLONE_STOPPED = $02000000 ; Start in stopped state CLONE_NEWUTS = $04000000 ; New utsname group? CLONE_NEWIPC = $08000000 ; New ipcs CLONE_NEWUSER = $10000000 ; New user namespace CLONE_NEWPID = $20000000 ; New pid namespace CLONE_NEWNET = $40000000 ; New network namespace CLONE_IO = $80000000 ; Clone io context ; Memory constants ; Protections are chosen from these bits, OR'd together. The ; implementation does not necessarily support PROT_EXEC or PROT_WRITE ; without PROT_READ. The only guarantees are that no writing will be ; allowed without PROT_WRITE and no access will be allowed for PROT_NONE. PROT_READ = $1 ; Page can be read. PROT_WRITE = $2 ; Page can be written. PROT_EXEC = $4 ; Page can be executed. PROT_NONE = $0 ; Page can not be accessed. PROT_GROWSDOWN = $01000000 ; Extend change to start of ; growsdown vma (mprotect only). PROT_GROWSUP = $02000000 ; Extend change to start of ; growsup vma (mprotect only). ; Sharing types (must choose one and only one of these). MAP_SHARED = $01 ; Share changes. MAP_PRIVATE = $02 ; Changes are private. MAP_TYPE = $0f ; Mask for type of mapping. ; Other flags. MAP_FIXED = $10 ; Interpret addr exactly. MAP_ANONYMOUS = $20 ; Don't use a file. MAP_32BIT = $40 ; Only give out 32-bit addresses. ; These are Linux-specific. MAP_GROWSDOWN = $00100 ; Stack-like segment. MAP_DENYWRITE = $00800 ; ETXTBSY MAP_EXECUTABLE = $01000 ; Mark it as an executable. MAP_LOCKED = $02000 ; Lock the mapping. MAP_NORESERVE = $04000 ; Don't check for reservations. MAP_POPULATE = $08000 ; Populate (prefault) pagetables. MAP_NONBLOCK = $10000 ; Do not block on IO. MAP_STACK = $20000 ; Allocation is for a stack. ; Flags to `msync'. MS_ASYNC = 1 ; Sync memory asynchronously. MS_SYNC = 4 ; Synchronous memory sync. MS_INVALIDATE = 2 ; Invalidate the caches. ; Flags for `mlockall'. MCL_CURRENT = 1 ; Lock all currently mapped pages. MCL_FUTURE = 2 ; Lock all additions to address space. ; Flags for `mremap'. MREMAP_MAYMOVE = 1 MREMAP_FIXED = 2 ; Advice to `madvise'. MADV_NORMAL = 0 ; No further special treatment. MADV_RANDOM = 1 ; Expect random page references. MADV_SEQUENTIAL = 2 ; Expect sequential page references. MADV_WILLNEED = 3 ; Will need these pages. MADV_DONTNEED = 4 ; Don't need these pages. MADV_REMOVE = 9 ; Remove these pages and resources. MADV_DONTFORK = 10 ; Do not inherit across fork. MADV_DOFORK = 11 ; Do inherit across fork. ; The POSIX people had to invent similar names for the same things. POSIX_MADV_NORMAL = 0 ; No further special treatment. POSIX_MADV_RANDOM = 1 ; Expect random page references. POSIX_MADV_SEQUENTIAL = 2 ; Expect sequential page references. POSIX_MADV_WILLNEED = 3 ; Will need these pages. POSIX_MADV_DONTNEED = 4 ; Don't need these pages. ; sys_futex constants FUTEX_WAIT = 0 FUTEX_WAKE = 1 FUTEX_FD = 2 FUTEX_REQUEUE = 3 FUTEX_CMP_REQUEUE = 4 FUTEX_WAKE_OP = 5 FUTEX_LOCK_PI = 6 FUTEX_UNLOCK_PI = 7 FUTEX_TRYLOCK_PI = 8 FUTEX_WAIT_BITSET = 9 FUTEX_WAKE_BITSET = 10 FUTEX_PRIVATE_FLAG = $80 ; sys_fstat and similar structures struct STAT .st_dev dw ? ; ID of device containing file .pad1 dw ? .st_ino dd ? ; inode number .st_mode dw ? ; protection .st_nlink dw ? ; number of hard links .st_uid dw ? ; user ID of owner .st_gid dw ? ; group ID of owner .st_rdev dw ? ; device ID (if special file) .pad2 dw ? .st_size dd ? ; total size, in bytes .st_blksize dd ? ; block size .st_blocks dd ? .st_atime dd ? ; time of last access .unused1 dd ? .st_mtime dd ? ; time of last modification .unused2 dd ? .st_ctime dd ? ; time of last status change .unused3 dd ? .unused4 dd ? .unused5 dd ? ends struct STAT64 .st_dev rq 1 .__pad0 rb 4 .__st_ino rd 1 .st_mode rd 1 .st_nlink rd 1 .st_uid rd 1 .st_gid rd 1 .st_rdev rq 1 .__pad3 rb 4 .st_size rq 1 .st_blksize rd 1 .st_blocks rq 1 .st_atime rd 1 .st_atime_nsec rd 1 .st_mtime rd 1 .st_mtime_nsec rd 1 .st_ctime rd 1 .st_ctime_nsec rd 1 .st_ino rq 1 ends ; sys_getdents ; it is variable length structure. struct linux_dirent .d_ino dd ? .d_off dd ? .d_reclen dw ? label .d_name byte ends struct linux_dirent64 .d_ino dq ? .d_off dq ? .d_reclen dw ? .d_type db ? label .d_name byte ends ; file types for the above structure. ; this value is written at the last byte of the structure. (linux_dirent.d_reclen-1) DT_UNKNOWN = 0 DT_FIFO = 1 DT_CHR = 2 DT_DIR = 4 DT_BLK = 6 DT_REG = 8 ; regular file DT_LNK = 10 DT_SOCK = 12 DT_WHT = 14 ; sys_ioctl constants and structures. _IOC_NONE = 0 _IOC_WRITE = 1 _IOC_READ = 2 _IOC_NRBITS = 8 _IOC_TYPEBITS = 8 _IOC_SIZEBITS = 14 _IOC_DIRBITS = 2 _IOC_NRSHIFT = 0 _IOC_TYPESHIFT = (_IOC_NRSHIFT+_IOC_NRBITS) _IOC_SIZESHIFT = (_IOC_TYPESHIFT+_IOC_TYPEBITS) _IOC_DIRSHIFT = (_IOC_SIZESHIFT+_IOC_SIZEBITS) TCGETS = 0x5401 TCSETS = 0x5402 TCSETSW = 0x5403 TCSETSF = 0x5404 TCGETA = 0x5405 TCSETA = 0x5406 TCSETAW = 0x5407 TCSETAF = 0x5408 TCSBRK = 0x5409 TCXONC = 0x540A TCFLSH = 0x540B TIOCEXCL = 0x540C TIOCNXCL = 0x540D TIOCSCTTY = 0x540E TIOCGPGRP = 0x540F TIOCSPGRP = 0x5410 TIOCOUTQ = 0x5411 TIOCSTI = 0x5412 TIOCGWINSZ = 0x5413 TIOCSWINSZ = 0x5414 TIOCMGET = 0x5415 TIOCMBIS = 0x5416 TIOCMBIC = 0x5417 TIOCMSET = 0x5418 TIOCGSOFTCAR = 0x5419 TIOCSSOFTCAR = 0x541A FIONREAD = 0x541B TIOCINQ = FIONREAD TIOCLINUX = 0x541C TIOCCONS = 0x541D TIOCGSERIAL = 0x541E TIOCSSERIAL = 0x541F TIOCPKT = 0x5420 FIONBIO = 0x5421 TIOCNOTTY = 0x5422 TIOCSETD = 0x5423 TIOCGETD = 0x5424 TCSBRKP = 0x542 TIOCSBRK = 0x5427 TIOCCBRK = 0x5428 TIOCGSID = 0x5429 TIOCGPTN = ((_IOC_READ shl _IOC_DIRSHIFT) or ("T" shl _IOC_TYPESHIFT) or (0x30 shl _IOC_NRSHIFT) or (4 shl _IOC_SIZESHIFT)) TIOCSPTLCK = ((_IOC_WRITE shl _IOC_DIRSHIFT) or ("T" shl _IOC_TYPESHIFT) or (0x31 shl _IOC_NRSHIFT) or (4 shl _IOC_SIZESHIFT)) FIONCLEX = 0x5450 FIOCLEX = 0x5451 FIOASYNC = 0x5452 TIOCSERCONFIG = 0x5453 TIOCSERGWILD = 0x5454 TIOCSERSWILD = 0x5455 TIOCGLCKTRMIOS = 0x5456 TIOCSLCKTRMIOS = 0x5457 TIOCSERGSTRUCT = 0x5458 TIOCSERGETLSR = 0x5459 TIOCSERGETMULTI = 0x545A TIOCSERSETMULTI = 0x545B TIOCMIWAIT = 0x545C TIOCGICOUNT = 0x545D TIOCGHAYESESP = 0x545E TIOCSHAYESESP = 0x545F FIOQSIZE = 0x5460 NCCS = 19 struct termios .c_iflag rd 1 ; input mode flags .c_oflag rd 1 ; output mode flags .c_cflag rd 1 ; control mode flags .c_lflag rd 1 ; local mode flags .c_line rb 1 ; line discipline .c_cc rb NCCS ; control characters ends ;termios entries. ; c_cc characters VINTR = 0 VQUIT = 1 VERASE = 2 VKILL = 3 VEOF = 4 VTIME = 5 VMIN = 6 VSWTC = 7 VSTART = 8 VSTOP = 9 VSUSP = 10 VEOL = 11 VREPRINT = 12 VDISCARD = 13 VWERASE = 14 VLNEXT = 15 VEOL2 = 16 ; c_iflag bits IGNBRK = 0000001o BRKINT = 0000002o IGNPAR = 0000004o PARMRK = 0000010o INPCK = 0000020o ISTRIP = 0000040o INLCR = 0000100o IGNCR = 0000200o ICRNL = 0000400o IUCLC = 0001000o IXON = 0002000o IXANY = 0004000o IXOFF = 0010000o IMAXBEL = 0020000o IUTF8 = 0040000o ; c_oflag bits OPOST = 0000001o OLCUC = 0000002o ONLCR = 0000004o OCRNL = 0000010o ONOCR = 0000020o ONLRET = 0000040o OFILL = 0000100o OFDEL = 0000200o NLDLY = 0000400o NL0 = 0000000o NL1 = 0000400o CRDLY = 0003000o cCR0 = 0000000o cCR1 = 0001000o cCR2 = 0002000o cCR3 = 0003000o TABDLY = 0014000o TAB0 = 0000000o TAB1 = 0004000o TAB2 = 0010000o TAB3 = 0014000o XTABS = 0014000o BSDLY = 0020000o BS0 = 0000000o BS1 = 0020000o VTDLY = 0040000o VT0 = 0000000o VT1 = 0040000o FFDLY = 0100000o FF0 = 0000000o FF1 = 0100000o ; c_cflag bit meaning CBAUD = 0010017o B0 = 0000000o B50 = 0000001o B75 = 0000002o B110 = 0000003o B134 = 0000004o B150 = 0000005o B200 = 0000006o B300 = 0000007o B600 = 0000010o B1200 = 0000011o B1800 = 0000012o B2400 = 0000013o B4800 = 0000014o B9600 = 0000015o B19200 = 0000016o B38400 = 0000017o EXTA = B19200 EXTB = B38400 CSIZE = 0000060o CS5 = 0000000o CS6 = 0000020o CS7 = 0000040o CS8 = 0000060o CSTOPB = 0000100o CREAD = 0000200o PARENB = 0000400o PARODD = 0001000o HUPCL = 0002000o CLOCAL = 0004000o CBAUDEX = 0010000o B57600 = 0010001o B115200 = 0010002o B230400 = 0010003o B460800 = 0010004o B500000 = 0010005o B576000 = 0010006o B921600 = 0010007o B1000000 = 0010010o B1152000 = 0010011o B1500000 = 0010012o B2000000 = 0010013o B2500000 = 0010014o B3000000 = 0010015o B3500000 = 0010016o B4000000 = 0010017o CIBAUD = 002003600000o CMSPAR = 010000000000o CRTSCTS = 020000000000o ; c_lflag bits ISIG = 0000001o ICANON = 0000002o XCASE = 0000004o ECHO = 0000010o ECHOE = 0000020o ECHOK = 0000040o ECHONL = 0000100o NOFLSH = 0000200o TOSTOP = 0000400o ECHOCTL = 0001000o ECHOPRT = 0002000o ECHOKE = 0004000o FLUSHO = 0010000o PENDIN = 0040000o IEXTEN = 0100000o ;end of termios entries. ; Constants for sys_personality ADDR_NO_RANDOMIZE = $00040000 MMAP_PAGE_ZERO = $00100000 ADDR_COMPAT_LAYOUT = $00200000 READ_IMPLIES_EXEC = $00400000 ADDR_LIMIT_32BIT = $00800000 SHORT_INODE = $01000000 WHOLE_SECONDS = $02000000 STICKY_TIMEOUTS = $04000000 ADDR_LIMIT_3GB = $08000000 ; Personality types. ; These go in the low byte. Avoid using the top bit, it will conflict with error returns. PER_LINUX = $0000 PER_LINUX_32BIT = $0000 or ADDR_LIMIT_32BIT PER_SVR4 = $0001 or STICKY_TIMEOUTS or MMAP_PAGE_ZERO PER_SVR3 = $0002 or STICKY_TIMEOUTS or SHORT_INODE PER_SCOSVR3 = $0003 or STICKY_TIMEOUTS or WHOLE_SECONDS or SHORT_INODE PER_OSR5 = $0003 or STICKY_TIMEOUTS or WHOLE_SECONDS PER_WYSEV386 = $0004 or STICKY_TIMEOUTS or SHORT_INODE PER_ISCR4 = $0005 or STICKY_TIMEOUTS PER_BSD = $0006 PER_SUNOS = $0006 or STICKY_TIMEOUTS PER_XENIX = $0007 or STICKY_TIMEOUTS or SHORT_INODE PER_LINUX32 = $0008 PER_LINUX32_3GB = $0008 or ADDR_LIMIT_3GB PER_IRIX32 = $0009 or STICKY_TIMEOUTS ; IRIX5 32-bit PER_IRIXN32 = $000a or STICKY_TIMEOUTS ; IRIX6 new 32-bit PER_IRIX64 = $000b or STICKY_TIMEOUTS ; IRIX6 64-bit PER_RISCOS = $000c PER_SOLARIS = $000d or STICKY_TIMEOUTS PER_UW7 = $000e or STICKY_TIMEOUTS or MMAP_PAGE_ZERO PER_OSF4 = $000f PER_HPUX = $0010 PER_MASK = $00ff ; sys_flock operations LOCK_SH = $01 ; shared file lock LOCK_EX = $02 ; exclusive file lock LOCK_NB = $04 ; don't block when locking LOCK_UN = $08 ; unlock file |
Added freshlib/equates/Linux/_pthreads.inc.
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Equates for pthread library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; mutex types. PTHREAD_MUTEX_NORMAL = 0 PTHREAD_MUTEX_RECURSIVE = 1 PTHREAD_MUTEX_ERRORCHECK = 2 PTHREAD_MUTEX_ERRORCHECK_NP = PTHREAD_MUTEX_ERRORCHECK PTHREAD_MUTEX_RECURSIVE_NP = PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL |
Changes to freshlib/equates/Linux/_x.inc.
1 |
| > | > > | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > | | | | | | > > > > > | > > | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | > | | | > > > > > | > > > > | > > > > > | | > | > > > > | | > > > > > | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | | | | | | < | | > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | ; Predefined atoms atomPRIMARY = 1 atomSECONDARY = 2 atomARC = 3 atomATOM = 4 atomBITMAP = 5 atomCARDINAL = 6 atomCOLORMAP = 7 atomCURSOR = 8 atomCUT_BUFFER0 = 9 atomCUT_BUFFER1 = 10 atomCUT_BUFFER2 = 11 atomCUT_BUFFER3 = 12 atomCUT_BUFFER4 = 13 atomCUT_BUFFER5 = 14 atomCUT_BUFFER6 = 15 atomCUT_BUFFER7 = 16 atomDRAWABLE = 17 atomFONT = 18 atomINTEGER = 19 atomPIXMAP = 20 atomPOINT = 21 atomRECTANGLE = 22 atomRESOURCE_MANAGER = 23 atomRGB_COLOR_MAP = 24 atomRGB_BEST_MAP = 25 atomRGB_BLUE_MAP = 26 atomRGB_DEFAULT_MAP = 27 atomRGB_GRAY_MAP = 28 atomRGB_GREEN_MAP = 29 atomRGB_RED_MAP = 30 atomSTRING = 31 atomVISUALID = 32 atomWINDOW = 33 atomWM_COMMAND = 34 atomWM_HINTS = 35 atomWM_CLIENT_MACHINE = 36 atomWM_ICON_NAME = 37 atomWM_ICON_SIZE = 38 atomWM_NAME = 39 atomWM_NORMAL_HINTS = 40 atomWM_SIZE_HINTS = 41 atomWM_ZOOM_HINTS = 42 atomMIN_SPACE = 43 atomNORM_SPACE = 44 atomMAX_SPACE = 45 atomEND_SPACE = 46 atomSUPERSCRIPT_X = 47 atomSUPERSCRIPT_Y = 48 atomSUBSCRIPT_X = 49 atomSUBSCRIPT_Y = 50 atomUNDERLINE_POSITION = 51 atomUNDERLINE_THICKNESS= 52 atomSTRIKEOUT_ASCENT = 53 atomSTRIKEOUT_DESCENT = 54 atomITALIC_ANGLE = 55 atomX_HEIGHT = 56 atomQUAD_WIDTH = 57 atomWEIGHT = 58 atomPOINT_SIZE = 59 atomRESOLUTION = 60 atomCOPYRIGHT = 61 atomNOTICE = 62 atomFONT_NAME = 63 atomFAMILY_NAME = 64 atomFULL_NAME = 65 atomCAP_HEIGHT = 66 atomWM_CLASS = 67 atomWM_TRANSIENT_FOR = 68 ;display classes StaticGray = 0 GrayScale = 1 StaticColor = 2 PseudoColor = 3 TrueColor = 4 DirectColor = 5 ; Window classes. CopyFromParent = 0 InputOutput = 1 InputOnly = 2 ; Image byte order LSBFirst = 0 MSBFirst = 1 ; Bitmap format bit order LeastSignificant = 0 MostSignificant = 1 ;ImageFormat -- PutImage, GetImage XYBitmap = 0 XYPixmap = 1 ZPixmap = 2 ;For CreateColormap AllocNone = 0 AllocAll = 1 ; X major opcodes opCreateWindow = 1 opChangeWindowAttributes= 2 opDestroyWindow = 4 opMapWindow = 8 opConfigureRequest = 12 opInternAtom = 16 opChangeProperty = 18 opDeleteProperty = 19 opGetProperty = 20 opSetSelectionOwner = 22 opGetSelectionOwner = 23 opConvertSelection = 24 opSendEvent = 25 opWarpPointer = 41 opSetInputFocus = 42 opOpenFont = 45 opCloseFont = 46 opCreatePixmap = 53 opFreePixmap = 54 opCreateGC = 55 opFreeGC = 60 opClearArea = 61 opPutImage = 72 opCreateColorMap = 78 opCreateCursor = 93 opCreateGlyphCursor = 94 opFreeCursor = 95 opQueryExtension = 98 opGetKeyboardMapping = 101 ; XFIXES minor opcodes opfixQueryVersion = 0 ; SYNC minor opcodes opCreateCounter = 2 opDestroyCounter = 6 opSetCounter = 3 ; XKB minor opcodes opXkbUseExtension = 0 opXkbSelectEvents = 1 opXkbGetMap = 8 ; Xkb KB_DEVICESPEC values xkbUseCoreKbd = $100 xkbUseCorePtr = $200 xkbDfltXIClass = $300 xkbDfltXIId = $400 xkbAllXIClass = $500 xkbAllXIId = $600 xkbXINone = $ff00 ; Xkb map parts mxkbKeyTypes = 1 mxkbKeySyms = 2 mxkbModifierMap = 4 mxkbExplicitComponents = 8 mxkbKeyActions = 16 mxkbKeyBehaviors = 32 mxkbVirtualMods = 64 mxkbVirtualModMap = 128 ; Xkb EventType mask mxkbNewKeyboardNotify = 1 mxkbMapNotify = 2 mxkbStateNotify = 4 mxkbControlsNotify = 8 mxkbIndicatorStateNotify = 16 mxkbIndicatorMapNotify = 32 mxkbNamesNotify = 64 mxkbCompatMapNotify = 128 mxkbBellNotify = 256 mxkbActionMessage = 512 mxkbAccessXNotify = 1024 mxkbExtensionDeviceNotify = 2048 ; XKB map structure ; treatment of the out-of-range groups. xkbWrapIntoRange = 0 xkbClampIntoRange = $40 xkbRedirectIntoRange = $80 ; These values represents the standard key types, written in the xkbKeysymMapItem.ktIndex array ; separately for every key group. The group count is (.nSyms div .width) xkbOneLevelIndex = 0 xkbTwoLevelIndex = 1 xkbAlphabeticIndex = 2 xkbKeypadIndex = 3 struct xkbKeysymMapItem .ktIndex rb 4 ; array[0..3] the keytype for every of up to 4 groups. .groupInfo db ? ; how to treat out-of-range groups. .width db ? ; count of the keysyms in a group. .nSyms dw ? ; count of the dword keysyms in the array .keysyms: ends ; ID identifiers for xGetID if there is no pointer associated objColorMap = 1 objCounter = 2 objContext = 3 objCursor = 4 objXFont = 5 objPixmap = 6 objMax = 6 ; bit masks for window attributes maskBkPixmap = $0001 maskBkPixel = $0002 maskBorderPixmap = $0004 maskBorderPixel = $0008 maskBitGravity = $0010 maskWinGravity = $0020 maskBackingStore = $0040 maskBackingPlains = $0080 maskBackingPixel = $0100 maskOverrideRedirect = $0200 maskSaveUnder = $0400 maskEventMask = $0800 maskDontPropagateMask = $1000 maskColorMap = $2000 maskCursor = $4000 ; event masks maskNoEvent = 0h maskKeyPress = 1h maskKeyRelease = 2h maskButtonPress = 4h maskButtonRelease = 8h maskEnterWindow = 10h maskLeaveWindow = 20h maskPointerMotion = 40h maskPointerMotionHint = 80h maskButton1Motion = 100h maskButton2Motion = 200h maskButton3Motion = 400h maskButton4Motion = 800h maskButton5Motion = 1000h maskButtonMotion = 2000h maskKeymapState = 4000h maskExposure = 8000h maskVisibilityChange = 10000h maskStructureNotify = 20000h maskResizeRedirect = 40000h maskSubstructureNotify = 80000h maskSubstructureRedirect = 100000h maskFocusChange = 200000h maskPropertyChange = 400000h maskColormapChange = 800000h maskOwnerGrabButton = 1000000h ;Property modes PropModeReplace = 0 PropModePrepend = 1 PropModeAppend = 2 ; Event codes KeyPress = 2 KeyRelease = 3 ButtonPress = 4 ButtonRelease = 5 MotionNotify = 6 EnterNotify = 7 |
︙ | ︙ | |||
85 86 87 88 89 90 91 | SelectionRequest = 30 SelectionNotify = 31 ColormapNotify = 32 ClientMessage = 33 MappingNotify = 34 LASTEvent = 35 | | < < < < < < < < < < < | | > | | > > > | < > > | | | < < < < | > > | > | | | | | | | | | | | | | | < < < < < < < > < > > | < < | > > | | | | | | | | | | | | | < > | | | | | | < < | | | < | < | | | | < | | < | < < < < < < < < < < > | > > | | | > | | | | | | | < | | > | > | | | | | < > | | | | > > > > > | | | | < < < < < < < | < < < < | | | | < < < < | | < < | | | | | < < < < < < | | | > | | | | | | | | | | > > | | < < | | | | | < < > < < < > | > | | | > | > | | | | | | | | | | < < < < | | | < | | | > < < < < < | | | < | < | | | | | | < < | | | | < | | | | | > > < < < | | | | < | | < | < > | > > | > > > > < | | | | | | | | < < < < < < < < < < < < < < < < | < | | | | < > > | | | > | | > > | | | | | | < | < < < > | | | | | | < < < < < < > | | | | | | | | | | > < < < > > | | | | | | | | | | | < | < | | | | | | < | | | < < | < > | | | | | < | < < < < | | < | | | | < | < | | < < | | < | | | | | | | < | > > > > > > > > > | | > | | | < | | | | | | | | | | | < < < < < < | | < < | | < < | < | | | | | | | | | | | | | < | < > | < < | < | | | < < | | < | | | | | | | < < < < < < < | < < < | < | < | | < < | < < > | | | > > > > > > > < < < < < | | | < | | < < < < > | | | > | | | < < < < < < > < | | | | | | | | | | | | | | | | | | | | | | > | | | | < | < < < < < | | > | | | | | < | | | | | < < < < < < | | < < < < < | | | > | | | < | | | | | | | > | | | < | | | < < < | | | > | | > | | | | | | | | | | | | < | > | | | | | | | | | | > > | < | | < < < < < < < < < < < | < < < | < > | | | > | | < | | | | | < | > < < < < | | | < | | > | | | | | | | < | | | | | | | | | | < < < | < | | | | | < < | < < > | | < < < | < < > | < < > | | < | < < < > < > > > > > | > > | | | > | > > | | > > | | < < < < < < > < | | < | | < | | < | < | | < < < < < | | | > > | | | | | > | | | | < < | | | < < | < < < < < < < | | > > | | > | > > | | | | < | < < < | | | | < < > | | | < | < < < | | | | < < < | < > | | | > | < | < < < | | | | < > | | | > | < | < < < | | | | < > | > > | < < < > > | > > | > | < < < | | | | > > | | | < < < < < < < | | < < | | > | | < > | | | | | | | | < | | | | > | > | > > < < | | > | < | | | | | | | | | < < < < < < < | < | | > > > > | | | < > < < < < | | | < | < | | < | | > | | | > | | | < | | | | | < < < > | 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 | SelectionRequest = 30 SelectionNotify = 31 ColormapNotify = 32 ClientMessage = 33 MappingNotify = 34 LASTEvent = 35 struct __xBeginReq .byte_order db ? db ? .ver_major dw ? .ver_minor dw ? .auth_proto_len dw ? .auth_data_len dw ? dw ? ends struct __xConnectServerInfo .resp db ? ; 1 == Success. .not_used1 db ? .major_ver dw ? .minor_ver dw ? .data_length dw ? ; additional data length in dword units. ends struct __xConnectAdditionalInfo .release_num dd ? .res_id_base dd ? .res_id_mask dd ? .motion_buffer_size dd ? .len_vendor dw ? .max_request_len dw ? .screen_num db ? .format_num db ? .img_byte_order db ? .bmp_format_bit_order db ? .bmp_scanline_unit db ? .bmp_scanline_pad db ? .min_keycode db ? .max_keycode db ? .not_used2 dd ? .stream_data: ends struct __xscreen .root_window dd ? .colormap dd ? .white_pixel dd ? .black_pixel dd ? .event_mask dd ? .width_px dw ? .height_px dw ? .width_mm dw ? .height_mm dw ? .min_maps dw ? .max_maps dw ? .root_visual dd ? .back_store db ? .save_under db ? .root_depth db ? .num_depths db ? .depths: ends struct __xdepth .depth db ? db ? .num_visual dw ? dd ? .visual_types: ends struct __xvisualtype .id dd ? .class db ? .bits_per_rgb db ? .map_entries dw ? .red_mask dd ? .green_mask dd ? .blue_mask dd ? dd ? ends struct __xCreateColorMapReq .op db ? ; must be 78 = opCreateColorMap .alloc db ? ; AllocNone = 0, AllocAll = 1 .length dw ? ; must be 4 .map_id dd ? ; map id .win_id dd ? ; window id .vis_id dd ? ; visual id ends struct __xCreatePixmapReq .op db ? ; opCreatePixmap == 53 .depth db ? ; .length dw ? ; == 4 .pid dd ? ; Pixmap ID .drawable dd ? ; .width dw ? .height dw ? ends struct __xFreePixmapReq .op db ? ; opFreePixmap == 54 db ? .length dw ? ; == 2 .pid dd ? ; Pixmap ID ends struct __xCreateContextReq .op db ? ; opCreateGC == 55 db ? .length dw ? ; 4 + n .gcID dd ? ; .drawable dd ? ; ? .value_mask dd ? ; can be 0? label .data dword ends struct __xFreeContextReq .op db ? ; op db ? .length dw ? ; = 2 .gcID dd ? ends struct __xClearAreaReq .op db ? ; opClearArea == 61 .exposures db ? ; .length dw ? ; == 4 .window dd ? .x dw ? .y dw ? .width dw ? .height dw ? ends struct __xCreateWindowReq .op db ? ;opCreateWindow .depth db ? ; 32 .length dw ? ; 8 + N ; length in dword .wid dd ? ; window ID .parent dd ? ; parent window ID .x dw ? .y dw ? .w dw ? .h dw ? .border dw ? ; 0 usually .class dw ? ; 1 = InputOutput .visid dd ? ; visual ID .attr_mask dd ? .values: ends struct __xChangeWindowAttributesReq .op db ? ; opChangeWindowAttributes db ? .length dw ? .window dd ? .mask dd ? ; maskXXXX as in CreateWindow label .values dword ends struct __xDestroyWindowReq .op db ? ; opDestroyWindow db ? .length dw ? ; == 2 .wid dd ? ends struct __xMapWindowReq .op db ? ; opMapWindow db ? .length dw ? ; == 2 .wid dd ? ; window ID ends struct __xChangePropertyReq .op db ? ; opChangeProperty .mode db ? ; PropModeXXXXX .length dw ? ; length in dword .wid dd ? ; window ID .prop dd ? ; atom .type dd ? ; atom .format db ? ; 8, 16, 32 rb 3 ; .datalen dd ? ; In format units .data: ends struct __xGetPropertyReq .op db ? ; opGetProperty == 20 .delete db ? ; BOOL .length dw ? ; 6 .window dd ? .property dd ? ; ATOM .type dd ? ; ATOM 0 == AnyPropertyType .data_ofs dd ? ; .data_len dd ? ; ends struct __xGetPropertyRep .reply db ? ; == 1 .format db ? ; 0, 8, 16, 32 .seq dw ? .length dd ? ; (n+p)/4 .type dd ? ; ATOM 0 == None .bytesafter dd ? .datalen dd ? ; in format units! rb 12 .data: ends cwmX = $01 cwmY = $02 cwmWidth = $04 cwmHeight = $08 cwmBorderWidth = $10 cwmSibling = $20 cwmStackMode = $40 struct __xConfigureWindowReq .op db ? ; opConfigureRequest db ? .length dw ? ; 3 + n depending of the set bits in the value_mask .window dd ? .value_mask dw ? ; 1=x, 2=y, dw ? .params: ends struct __xCreateCounterReq .op db ? ; Sync extension major opcode .minor db ? ; = opCreateCounter = 2 .length dw ? ; = 4 .counterID dd ? ; ID .valueHi dd ? .valueLo dd ? ends struct __xDestroyCounterReq .op db ? ; Sync extension major opcode .minor db ? ; = opDestroyCounter = 6 .length dw ? ; = 2 .counterID dd ? ; ID ends struct __xSetCounterReq .op db ? ; Sync extension major opcode .minor db ? ; = opSetCounter = 3 .length dw ? ; = 4 .counterID dd ? ; ID .valueHi dd ? .valueLo dd ? ends struct __xGetKeyboardMappingReq .op db ? ; opGetKeyboardMapping db ? .length dw ? ; = 2 in dword .first db ? .count db ? rb 2 ends struct __xGetKeyboardMappingRep .op db ? ; = 1 Replay .row_len db ? ; keysyms per keycode .seq dw ? ; .length dd ? ; in dwords rb 24 ends struct __xXkbSelectEventsReq .op db ? .minor db ? ; = opXkbSelectEvents .length dw ? ; 4 + (V+p)/4 .deviceSpec dw ? .affectWhich dw ? .clear dw ? .selectAll dw ? .affectMap dw ? .map dw ? .details: ; V bytes and p pad ends struct __xXkbGetMapReq .op db ? .minor db ? .length dw ? ; == 7 .deviceSpec dw ? .full dw ? ; what full maps to be returned. .partial dw ? ; what partial maps to be returned. .firstType db ? .nTypes db ? .firstKeySym db ? .nKeySyms db ? .firstKeyAction db ? .nKeyActions db ? .firstKeyBehavior db ? .nKeyBehaviors db ? .virtualMods dw ? .firstKeyExplicit db ? .nKeyExplicit db ? .firstModMapKey db ? .nModMapKeys db ? .firstVModMapKey db ? .nVModMapKeys db ? rb 2 ends struct __xXkbGetMapRep .op db ? ; = 1 Reply .deviceID db ? .seq dw ? .length dd ? ; in dwords rb 2 .minKeyCode db ? .maxKeyCode db ? .present dw ? .firstType db ? .nTypes db ? .totalTypes db ? .firstKeySym db ? .totalSyms dw ? .nKeySyms db ? .firstKeyAction db ? .totalActions dw ? .nKeyActions db ? .firstKeyBehavior db ? .nKeyBehaviors db ? .totalKeyBehaviors db ? .firstKeyExplicit db ? .nKeyExplicit db ? .totalKeyExplicit db ? .firstModMapKey db ? ends ; this is the header of the remaining part of the reply, ; transmitted with the [__xXkbGetMapRep.length] long extra ; part of the reply. struct __xXkbGetMapRep2 .nModMapKeys db ? .totalModMapKeys db ? .firstVModMapKey db ? .nVModMapKeys db ? .totalVModMapKeys db ? rb 1 .virtualMods dw ? .map: ends struct __xPutImageReq .op db ? ; = opPutImage .format db ? ; 0 bitmap, 1 XYpixmap, 2 Zpixmap .length dw ? ; 0 == BIG_REQUEST .long_len dd ? ; BIG REQUEST Length .drawable dd ? ; where to draw the image .gc dd ? .width dw ? .height dw ? .dst_x dw ? .dst_y dw ? .left_pad db ? .depth db ? rb 2 label .data dword ends struct __xPutImageShortReq .op db ? ; = opPutImage .format db ? ; 0 bitmap, 1 XYpixmap, 2 Zpixmap .length dw ? ; 6 + datalen .drawable dd ? ; where to draw the image .gc dd ? .width dw ? .height dw ? .dst_x dw ? .dst_y dw ? .left_pad db ? .depth db ? rb 2 label .data dword ends struct __xSetSelectionOwnerReq .op db ? ; opSetSelectionOwner == 22 db ? .length dw ? ; == 4 .owner dd ? ; 0 == None .selection dd ? ; ATOM .time dd ? ; 0 == CurrentTime (server time) ends struct __xGetSelectionOwnerReq .op db ? ; opGetSelectionOwner == 23 db ? .length dw ? ; ==2 .selection dd ? ; ATOM ends struct __xGetSelectionOwnerRep .reply db ? ; == 1 db ? .seq dw ? .length dd ? ; == 0 .owner dd ? ; Window ID, 0 == None rb 20 ends struct __xConvertSelectionReq .op db ? ; opConvertSelection == 24 db ? .length dw ? ; 6 .requestor dd ? ; Window, requestor .selection dd ? ; ATOM, usually "Clipboard" .target dd ? ; ATOM, requested data type. For example "UTF8_STRING" .property dd ? ; ATOM, where to put the data. 0 == None .time dd ? ; timestamp. 0 == current server time. ends struct __xSetInputFocus .op db ? ; opSetInputFocus .revert_to db ? ; 0 - None, 1 - PointerRoot, 2 - Parent .length dw ? ; == 3 .wid dd ? ; Window ID; 0 - None, 1 - PointerRoot .timestamp dd ? ; timestamp; 0 = CurrentTime ends struct __xSendEventReq .op db ? .propagate db ? .length dw ? ; == 11 .dest dd ? ; window ID .event_mask dd ? ; ? .event: ends struct __xWarpPointerReq .op db ? db ? .length dw ? ; == 6 .srcWin dd ? ; 0 == none .dstWin dd ? ; 0 == none .srcX dw ? .srcY dw ? .srcW dw ? .srcH dw ? .dstX dw ? .dstY dw ? ends struct __xOpenFontReq .op db ? ; == opOpenFont == 45 db ? .length dw ? ; 3 + namelen/4 + pad .fontid dd ? ; client allocates it. .namelen dw ? dw ? label .name byte ends ; notice, that __xCloseFontReq is the same as __xOpenFontReq in the first 2 dwords. struct __xCloseFontReq .op db ? ; == opCloseFont == 46 db ? .length dw ? ; 2 .fontid dd ? ends struct __xCreateCursorReq .op db ? ; == opCreateCursor == 93 db ? .length dw ? ; 8 .cursorid dd ? .source dd ? ; pixmap .mask dd ? ; 0 == none .fg_red dw ? .fg_green dw ? .fg_blue dw ? .bg_red dw ? .bg_green dw ? .bg_blue dw ? .x dw ? .y dw ? ends struct __xCreateGlyphCursorReq .op db ? ; == opCreateGlyphCursor == 94 db ? .length dw ? ; 8 .cursorid dd ? .src_font dd ? .mask_font dd ? .src_char dw ? .mask_char dw ? .fg_red dw ? .fg_green dw ? .fg_blue dw ? .bg_red dw ? .bg_green dw ? .bg_blue dw ? ends struct __xFreeCursorReq .op db ? ; == opFreeCursor == 95 db ? .length dw ? ; 2 .cursor dd ? ends ; Structure for _MOTIF_WM_HINTS type of window property. struct __MwmHints .flags dd ? .functions dd ? .decorations dd ? .input_mode dd ? .status dd ? ends MWM_HINTS_FUNCTIONS = 1 MWM_HINTS_DECORATIONS = 2 MWM_FUNC_ALL = $01 MWM_FUNC_RESIZE = $02 MWM_FUNC_MOVE = $04 MWM_FUNC_MINIMIZE = $08 MWM_FUNC_MAXIMIZE = $10 MWM_FUNC_CLOSE = $20 struc xQueryExtension name { .@here = 1 if used . label . byte local ..n, ..p .op db opQueryExtension ; opQueryExtension db 0 .req_len dw 2 + ..p .name_len dw ..n ; N in chars dw ? .name db name ..n = $ - .name rb ((..n + 3) and $fffffffc) - ..n ..p = ($ - .name)/4 .length = $ - .op end if } struct xReply .reply db ? ; 1 = Success, 0 = Error db ? .sequence dw ? .length dd ? .data rb 24 ends struct xRespQueryExt .reply db ? ; 1 = Success, 0 = Error, 2 = db ? .sequence dw ? .length dd ? .present db ? ; bool. .OpCode db ? .first_event db ? .first_error db ? rb 20 ends struct xExtension .Active dd ? ; boolean .OpCode dd ? ; Major OpCode .FirstEvent dd ? ; First event number .FirstError dd ? ; First error number ends ; X events structures struct evKeyPress .event db ? ; = 2, 3, 4, 5 or 6 .detail db ? .seq dw ? .time dd ? .root dd ? ; the root window. .window dd ? ; the event window ID .child dd ? ; ??? .root_x dw ? ; .root_y dw ? ; .x dw ? .y dw ? .state dw ? ; bitmask .same_scr db ? db ? ends struct evKeyRelease . evKeyPress ends struct evButtonPress . evKeyPress ends struct evButtonRelease . evKeyPress ends struct evMotionNotify . evKeyPress ends enAncestor = 0 enVirtual = 1 enInferior = 2 enNonlinear = 3 enNonlinearVirtual = 4 struct evEnterNotify .event db ? ; = 7 or 8 .detail db ? ; enAncestor .. enNonlinearVirtual .seq dw ? .time dd ? .root dd ? ; the root window. .window dd ? ; the event window ID .child dd ? ; ??? .root_x dw ? ; .root_y dw ? ; .x dw ? .y dw ? .state dw ? ; bitmask .mode db ? ; Normal, Grab, Ungrab .same_scr db ? ; ? ends struct evLeaveNotify . evEnterNotify ends struct evFocusIn .event db ? .detail db ? .seq dw ? .window dd ? .mode db ? rb 23 ends struct evFocusOut . evFocusIn ends struct evExpose .event db ? db ? .seq dw ? .window dd ? .x dw ? .y dw ? .width dw ? .height dw ? .count dw ? rb 14 ends struct evDestroyNotify .event db ? db ? .seq dw ? .window dd ? .dst_win dd ? rb 20 ends struct evConfigureNotify .event db ? ; == 22 db ? .seq dw ? .window dd ? .conf_win dd ? .above dd ? .x dw ? .y dw ? .width dw ? .height dw ? .border dw ? .ovr_red db ? rb 5 ends struct evSelectionClear .event db ? ; == 29 db ? .seq dw ? .time dd ? ; TIMESTAMP .owner dd ? ; WINDOW .selection dd ? ; ATOM rb 16 ends struct evSelectionRequest .event db ? ; == 30 db ? .seq dw ? .time dd ? ; TIMESTAMP 0 == CurrentTime .owner dd ? ; WINDOW .requestor dd ? ; WINDOW .selection dd ? ; ATOM .target dd ? ; ATOM (the type of the data) .property dd ? ; ATOM (where to place the data) 0 == None dd ? ends struct evSelectionNotify .event db ? ; == 31 db ? .seq dw ? .time dd ? ; TIMESTAMP 0 == CurrentTime .requestor dd ? ; WINDOW .selection dd ? ; ATOM .target dd ? ; ATOM (the type of the data) .property dd ? ; ATOM (where to place the data) 0 == None rd 2 ends struct evPropertyChanged .event db ? ; PropertyNotify = 28 db ? .seq dw ? .window dd ? .property dd ? ; atom of the property changed. .timestamp dd ? .state db ? ; 0 == NewValue, 1 == Deleted ends struct evClientMessage .event db ? ; == 33 .format db ? .seq dw ? .window dd ? .type dd ? ; ATOM .data rd 5 ends struct evMappingNotify .event db ? ; == 34 db ? .seq dw ? .request db ? ; Modifier, Keyboard, Pointer .keycode db ? .count db ? rb 25 ends struct evXkbMapNotify .event db ? .detail db ? ; == 1 .seq dw ? .time dd ? ; timestamp. .deviceID db ? .btnAction db ? ; mask of BUTMASK .changed dw ? ; set of KB_MAPPART - what is changed .minkeycode db ? .maxkeycode db ? .firstType db ? .nTypes db ? .firstKeySym db ? .nKeySyms db ? .firstKeyAct db ? .nKeyActs db ? .firstKeyBehavior db ? .nKeyBehavior db ? .firstKeyExplicit db ? .nKeyExplicit db ? .firstModMapKey db ? .nModMapKeys db ? .firstVModMapKey db ? .nVModMapKeys db ? .virtualMods dw ? ; set of KB_VMOD dw ? ends ; Common X structures. struct xRequest .op db ? ; X operation code (major part) .minor db ? ; minor X operation code. .length dw ? ; length of the request in dword units. label .data dword ends struct xBigRequest .op db ? ; X operation code (major part) .minor db ? ; minor X operation code. .length dw ? ; must be 0 for BIG_REQUEST request. .biglen dd ? ; length of the request in dword units. label .data dword ends rspError = 0 rspReply = 1 rspFirstEvent = 2 struct xResponse .code db ? .data rb 31 ends struct xAnyError .code db ? ; 0 == error .error db ? ; the error code .seq dw ? ; sequence number .bad_num dd ? ; the value that causes the problem. Not on all errors. .minor dw ? ; minor opcode of the operation .major db ? ; major opcode of the operation .data rb 21 ends struct xAnyReply .code db ? ; 1 == reply .detail db ? .seq dw ? .length dd ? ; in dwords .data rb 24 ends struct xAnyEvent .event db ? ; >= 2 .detail db ? .seq dw ? .data rb 28 ends |
Added freshlib/equates/Linux/_xcb.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | ; Pre-defined constants ; Current protocol version X_PROTOCOL = 11 ; Current minor version X_PROTOCOL_REVISION = 0 ; X_TCP_PORT + display number = server port for TCP transport X_TCP_PORT = 6000 ; xcb connection errors because of socket, pipe and other stream errors. XCB_CONN_ERROR = 1 ; xcb connection shutdown because of extension not supported XCB_CONN_CLOSED_EXT_NOTSUPPORTED = 2 ; malloc(), calloc() and realloc() error upon failure, for eg ENOMEM XCB_CONN_CLOSED_MEM_INSUFFICIENT = 3 ; Connection closed, exceeding request length that server accepts. XCB_CONN_CLOSED_REQ_LEN_EXCEED = 4 ; Connection closed, error during parsing display string. XCB_CONN_CLOSED_PARSE_ERR = 5 ; Connection closed because the server does not have a screen matching the display. XCB_CONN_CLOSED_INVALID_SCREEN = 6 ; Connection closed because some FD passing operation failed XCB_CONN_CLOSED_FDPASSING_FAILED = 7 ; Opaque structures ; XCB Connection structure. ; A structure that contain all data that XCB needs to communicate with an X server. ; Other types ; Generic iterator. ; A generic iterator structure. struct xcb_generic_iterator_t .p_data dd ? ; Data of the current iterator .rem dd ? ; remaining elements .index dd ? ; index of the current iterator ends ; Generic reply. ; A generic reply structure. struct xcb_generic_reply_t .response_type db ? ; Type of the response .pad0 db ? ; Padding .sequence dw ? ; Sequence number .length dd ? ; Length of the response ends ; Generic event. ; A generic event structure. struct xcb_generic_event_t .response_type db ? ; Type of the response .pad0 db ? ; Padding .sequence dw ? ; Sequence number .pad rd 7 ; Padding .full_sequence dd ? ; full sequence ends ; Raw Generic event. ; A generic event structure as used on the wire, i.e., without the full_sequence field struct xcb_raw_generic_event_t .response_type db ? ; Type of the response .pad0 db ? ; Padding .sequence dw ? ; Sequence number .pad rd 7 ; Padding ends ; GE event ; ; An event as sent by the XGE extension. The length field specifies the ; number of 4-byte blocks trailing the struct. ; ; DEPRECATED: Since some fields in this struct have unfortunate names, it is ; recommended to use xcb_ge_generic_event_t instead. struct xcb_ge_event_t .response_type db ? ; Type of the response .pad0 db ? ; Padding .sequence dw ? ; Sequence number .length dd ? .event_type dw ? .pad1 dw ? .pad rd 5 ; Padding .full_sequence dd ? ; full sequence ends ; Generic error. ; A generic error structure. struct xcb_generic_error_t .response_type db ? ; Type of the response .error_code db ? ; Error code .sequence dw ? ; Sequence number .resource_id dd ? ; Resource ID for requests with side effects only .minor_code dw ? ; Minor opcode of the failed request .major_code db ? ; Major opcode of the failed request .pad0 db ? ; .pad rd 5 ; Padding .full_sequence dd ? ; full sequence ends ; XCB_NONE is the universal null resource or null atom parameter value for many core X requests XCB_NONE = 0 ; XCB_COPY_FROM_PARENT can be used for many xcb_create_window parameters XCB_COPY_FROM_PARENT = 0 ; XCB_CURRENT_TIME can be used in most requests that take an xcb_timestamp_t XCB_CURRENT_TIME = 0 ; XCB_NO_SYMBOL fills in unused entries in xcb_keysym_t tables XCB_NO_SYMBOL = 0 ; Container for authorization information. ; A container for authorization information to be sent to the X server. struct xcb_auth_info_t .namelen dd ? ; Length of the string name (as returned by strlen). .p_name dd ? ; String containing the authentication protocol name, such as "MIT-MAGIC-COOKIE-1" or "XDM-AUTHORIZATION-1". .datalen dd ? ; Length of the data member. .p_data dd ? ; Data interpreted in a protocol-specific manner. ends struct xcb_screen_t .root dd ? ; Window ID .default_colormap dd ? .white_pixel dd ? .black_pixel dd ? .current_input_masks dd ? .width_in_pixels dw ? .height_in_pixels dw ? .width_in_millimeters dw ? .height_in_millimeters dw ? .min_installed_maps dw ? .max_installed_maps dw ? .root_visual dd ? .backing_stores db ? .save_unders db ? .root_depth db ? .allowed_depths_len db ? ends struct xcb_screen_iterator_t .p_data dd ? ; xcb_screen_t record pointer. .rem dd ? .index dd ? ends ; XCB extensions const and structures. struct xcb_extension_t .p_name dd ? .global_id dd ? ends struct xcb_protocol_request_t .count dd ? .ext dd ? .opcode db ? .isvoid db ? ends XCB_REQUEST_CHECKED = 1 XCB_REQUEST_RAW = 2 XCB_REQUEST_DISCARD_REPLY = 4 XCB_REQUEST_REPLY_FDS = 8 struct xcb_query_extension_reply_t .response_type db ? .pad0 db ? .sesequence dw ? .length dd ? .present db ? .major_opcode db ? .first_event db ? .first_error db ? ends ; XCB SHM extensions. XCB_SHM_COMPLETION = 0 |
Added freshlib/equates/Linux/_xfixes.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: MIT_SHM extension equates. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; XFIXES minor opcodes ; ver 1 opFixQueryVersion = 0 opFixChangeSaveSet = 1 opFixSelectSelectionInput = 2 opFixSelectCursorInput = 3 opFixGetCursorImage = 4 ; ver 2 opFixCreateRegion = 5 opFixCreateRegionFromBitmap = 6 opFixCreateRegionFromWindow = 7 opFixCreateRegionFromGC = 8 opFixCreateRegionFromPicture = 9 opFixDestroyRegion = 10 opFixSetRegion = 11 opFixCopyRegion = 12 opFixUnionRegion = 13 opFixIntersectRegion = 14 opFixSubtractRegion = 15 opFixInvertRegion = 16 opFixTranslateRegion = 17 opFixRegionExtents = 18 opFixFetchRegion = 19 opFixSetGCClipRegion = 20 opFixSetWindowShapeRegion = 21 opFixSetPictureClipRegion = 22 opFixSetCursorName = 23 opFixGetCursorName = 24 opFixGetCursorImageAndName = 25 opFixChangeCursor = 26 opFixChangeCursorByName = 27 ; ver 3 opFixExpandRegion = 28 opFixHideCursor = 29 opFixShowCursor = 30 ; Event subcodes evFixSetSelectionOwner = 0 evFixSelectionWindowDestroy = 1 evFixSelectionClientClose = 2 ; Event selection mask maskFixSetSelectionOwner = 1 shl evFixSetSelectionOwner maskFixSelectionWindowDestroy = 1 shl evFixSelectionWindowDestroy maskFixSelectionClientClose = 1 shl evFixSelectionClientClose ; Structures struct __xfixQueryVersionReq .op db ? .minor db ? .length dw ? .client_major_version dd ? .client_minor_version dd ? ends struct __xfixQueryVersionRep .code db ? ; 1 == reply .detail db ? .seq dw ? .length dd ? ; in dwords == 0 .major_version dd ? .minor_version dd ? rb 16 ends struct __xfixSelectSelectionInputReq .op db ? .minor db ? ; == opFixSelectSelectionInput == 2 .length dw ? ; == 4 .window dd ? ; Window ID .selection dd ? ; ATOM .event_mask dd ? ; set of maskFixXXXXXXXXXXXX masks ends struct evFixSelectionNotify .event db ? ; .subtype db ? ; .seq dw ? .window dd ? ; window ID .owner dd ? ; window ID or None .selection dd ? ; ATOM .timestamp dd ? .sel_timestamp dd ? ends |
Changes to freshlib/equates/Linux/_xft.inc.
|
| | > > > > > > | > | > | > | < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: XFT library constants and structures. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ XFT_MAJOR = 2 XFT_MINOR = 1 XFT_REVISION = 8 XftVersion equ XFT_VERSION XFT_CORE equ "core" XFT_RENDER equ "render" XFT_XLFD equ "xlfd" XFT_MAX_GLYPH_MEMORY equ "maxglyphmemory" XFT_MAX_UNREF_FONTS equ "maxunreffonts" FcTypeVoid = 0 FcTypeInteger = 1 FcTypeDouble = 2 FcTypeString = 3 FcTypeBool = 4 FcTypeMatrix = 5 FcTypeCharSet = 6 FcTypeFTFace = 7 FcTypeLangSet = 8 XftTypeVoid = FcTypeVoid XftTypeInteger = FcTypeInteger XftTypeDouble = FcTypeDouble XftTypeString = FcTypeString XftTypeBool = FcTypeBool XftTypeMatrix = FcTypeMatrix XftTypeCharSet = FcTypeCharSet XftTypeFTFace = FcTypeFTFace XftTypeLangSet = FcTypeLangSet FC_SLANT_ROMAN = 0 FC_SLANT_ITALIC = 100 FC_SLANT_OBLIQUE = 110 XFT_SLANT_ROMAN = FC_SLANT_ROMAN XFT_SLANT_ITALIC = FC_SLANT_ITALIC XFT_SLANT_OBLIQUE = FC_SLANT_OBLIQUE FC_PROPORTIONAL = 0 FC_DUAL = 90 FC_MONO = 100 FC_CHARCELL = 110 XFT_PROPORTIONAL = FC_PROPORTIONAL XFT_DUAL = FC_DUAL XFT_MONO = FC_MONO XFT_CHARCELL = FC_CHARCELL struct _XftFont .ascent dd ? .descent dd ? .height dd ? .max_advance_width dd ? .charset dd ? |
︙ | ︙ |
Added freshlib/equates/Linux/_xshm.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: MIT_SHM extension equates. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; MIT-SHM minor opcodes opShmEnable = 0 opShmAttach = 1 opShmDetach = 2 opShmPutImage = 3 struct evShmCompletion .event db ? db ? .seq dw ? .drawable dd ? .minor_event dw ? .major_event db ? db ? .segID dd ? .offset dd ? rd 3 ends struct __xShmAttachReq .op db ? ; SHM extension major opcode. .minor db ? ; = opShmAttach .length dw ? ; = 4 .shmSeg dd ? ; X ID of the segment. .shmID dd ? ; .read_only dd ? ends struct __xShmDetachReq .op db ? ; SHM extension major opcode. .minor db ? ; = opShmDetach .length dw ? ; = 2 .shmSeg dd ? ends struct __xShmPutImageReq .op db ? ; SHM extension major opcode. .minor db ? ; = opShmAttach = 1 .length dw ? ; = 10 .drawable dd ? ; where to draw .context dd ? .total_w dw ? .total_h dw ? .src_x dw ? .src_y dw ? .src_w dw ? .src_h dw ? .dst_x dw ? .dst_y dw ? .depth db ? .format db ? .send_event db ? db ? .shmSeg dd ? .offset dd ? ends ShmCompletion = 0 |
Changes to freshlib/equates/Linux/allequates.inc.
1 2 3 | ; Linux programming constants include '_geometry.inc' include '_x.inc' | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Combined include of all Linux equates. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; New line symbol bNEWLINE equ $0a wNEWLINE equ $000a dNEWLINE equ $0000000a ; Linux programming constants include '_libdl.inc' include '_geometry.inc' include '_linux.inc' include '_ipc.inc' include '_libXrender.inc' include '_xft.inc' include '_libFT.inc' include '_pthreads.inc' include '_x.inc' include '_xshm.inc' include '_xfixes.inc' |
Changes to freshlib/equates/Win32/_COMCTL32.INC.
|
| > > > > | | > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: COMCTL32.DLL structures and constants ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct PROPSHEETPAGE .dwSize dd ? .dwFlags dd ? .hInstance dd ? .pszTemplate dd ? .pszIcon dd ? |
︙ | ︙ | |||
1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 | .lpszText dd ? .char rb 80 .hinst dd ? .uFlags dd ? ends ; Status bar styles SBARS_SIZEGRIP = 100h | > > > > > > > | 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 | .lpszText dd ? .char rb 80 .hinst dd ? .uFlags dd ? ends struct TOOLTIPTEXTW .hdr NMHDR .lpszText dd ? .char rw 80 .hinst dd ? .uFlags dd ? ends ; Status bar styles SBARS_SIZEGRIP = 100h |
︙ | ︙ |
Changes to freshlib/equates/Win32/_COMDLG32.INC.
|
| > > > > | | > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: COMDLG32.DLL structures and constants ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct OPENFILENAME .lStructSize dd ? .hwndOwner dd ? .hInstance dd ? .lpstrFilter dd ? .lpstrCustomFilter dd ? |
︙ | ︙ |
Changes to freshlib/equates/Win32/_GDI32.INC.
|
| > > > > | | > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: GDI32.DLL structures and constants ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct SIZE .cx dd ? .cy dd ? ends struct BITMAP |
︙ | ︙ | |||
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | .biCompression dd ? .biSizeImage dd ? .biXPelsPerMeter dd ? .biYPelsPerMeter dd ? .biClrUsed dd ? .biClrImportant dd ? ends struct BITMAPFILEHEADER .bfType dw ? .bfSize dd ? .bfReserved1 dw ? .bfReserved2 dw ? .bfOffBits dd ? ends struct TEXTMETRIC .tmHeight dd ? .tmAscent dd ? .tmDescent dd ? .tmInternalLeading dd ? .tmExternalLeading dd ? | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | .biCompression dd ? .biSizeImage dd ? .biXPelsPerMeter dd ? .biYPelsPerMeter dd ? .biClrUsed dd ? .biClrImportant dd ? ends struct CIEXYZ .ciexyzX dd ? .ciexyzY dd ? .ciexyzZ dd ? ends struct CIEXYZTRIPLE .ciexyzRed CIEXYZ .ciexyzGreen CIEXYZ .ciexyzBlue CIEXYZ ends struct BITMAPV4HEADER .biSize dd ? .biWidth dd ? .biHeight dd ? .biPlanes dw ? .biBitCount dw ? .biCompression dd ? .biSizeImage dd ? .biXPelsPerMeter dd ? .biYPelsPerMeter dd ? .biClrUsed dd ? .biClrImportant dd ? .RedMask dd ? .GreenMask dd ? .BlueMask dd ? .AlphaMask dd ? .CSType dd ? .Endpoints CIEXYZTRIPLE .GamaRed dd ? .GammaGreen dd ? .GammaBlue dd ? ends struct BITMAPFILEHEADER .bfType dw ? .bfSize dd ? .bfReserved1 dw ? .bfReserved2 dw ? .bfOffBits dd ? ends struct TEXTMETRIC .tmHeight dd ? .tmAscent dd ? .tmDescent dd ? .tmInternalLeading dd ? .tmExternalLeading dd ? |
︙ | ︙ | |||
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | .tmDefaultChar db ? .tmBreakChar db ? .tmItalic db ? .tmUnderlined db ? .tmStruckOut db ? .tmPitchAndFamily db ? .tmCharSet db ? ends struct LOGBRUSH .lbStyle dd ? .lbColor dd ? .lbHatch dd ? ends struct LOGPEN .lopnStyle dd ? .lopnWidth POINT .lopnColor dd ? ends | > > > > > | 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | .tmDefaultChar db ? .tmBreakChar db ? .tmItalic db ? .tmUnderlined db ? .tmStruckOut db ? .tmPitchAndFamily db ? .tmCharSet db ? .__align rb 7 ends struct LOGBRUSH .lbStyle dd ? .lbColor dd ? .lbHatch dd ? ends struct LOGPEN .lopnStyle dd ? .lopnWidth POINT .lopnColor dd ? ends |
︙ | ︙ | |||
103 104 105 106 107 108 109 110 111 112 113 114 115 116 | .lfCharSet db ? .lfOutPrecision db ? .lfClipPrecision db ? .lfQuality db ? .lfPitchAndFamily db ? .lfFaceName rb 32 ends struct ENUMLOGFONT .elfLogFont LOGFONT .elfFullName rb 64 .elfStyle rb 32 ends | > > > > > > > > > > > > > > > > > > > | 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | .lfCharSet db ? .lfOutPrecision db ? .lfClipPrecision db ? .lfQuality db ? .lfPitchAndFamily db ? .lfFaceName rb 32 ends struct LOGFONTW .lfHeight dd ? .lfWidth dd ? .lfEscapement dd ? .lfOrientation dd ? .lfWeight dd ? .lfItalic db ? .lfUnderline db ? .lfStrikeOut db ? .lfCharSet db ? .lfOutPrecision db ? .lfClipPrecision db ? .lfQuality db ? .lfPitchAndFamily db ? .lfFaceName rw 32 ends struct ENUMLOGFONT .elfLogFont LOGFONT .elfFullName rb 64 .elfStyle rb 32 ends |
︙ | ︙ | |||
145 146 147 148 149 150 151 152 153 154 155 156 157 158 | .cAuxBuffers db ? .iLayerType db ? .bReserved db ? .dwLayerMask dd ? .dwVisibleMask dd ? .dwDamageMask dd ? ends ; General constants GDI_ERROR = 0FFFFFFFFh HGDI_ERROR = 0FFFFFFFFh ; Binary raster operations | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | .cAuxBuffers db ? .iLayerType db ? .bReserved db ? .dwLayerMask dd ? .dwVisibleMask dd ? .dwDamageMask dd ? ends ; This must be in _USER32.INC, but it uses LOGFONT and this caused circular dependencies. struct NONCLIENTMETRICS .cbSize dd ? .iBorderWidth dd ? .iScrollWidth dd ? .iScrollHeight dd ? .iCaptionWidth dd ? .iCaptionHeight dd ? .lfCaptionFont LOGFONT .iSmCaptionWidth dd ? .iSmCaptionHeight dd ? .lfSmCaptionFont LOGFONT .iMenuWidth dd ? .iMenuHeight dd ? .lfMenuFont LOGFONT .lfStatusFont LOGFONT .lfMessageFont LOGFONT ends struct NONCLIENTMETRICSW .cbSize dd ? .iBorderWidth dd ? .iScrollWidth dd ? .iScrollHeight dd ? .iCaptionWidth dd ? .iCaptionHeight dd ? .lfCaptionFont LOGFONTW .iSmCaptionWidth dd ? .iSmCaptionHeight dd ? .lfSmCaptionFont LOGFONTW .iMenuWidth dd ? .iMenuHeight dd ? .lfMenuFont LOGFONTW .lfStatusFont LOGFONTW .lfMessageFont LOGFONTW ends ; General constants GDI_ERROR = 0FFFFFFFFh HGDI_ERROR = 0FFFFFFFFh ; Binary raster operations |
︙ | ︙ | |||
476 477 478 479 480 481 482 | ; Object types for GetCurrentObject OBJ_PEN = 1 OBJ_BRUSH = 2 OBJ_PAL = 5 OBJ_FONT = 6 OBJ_BITMAP = 7 | > > > > | 594 595 596 597 598 599 600 601 602 603 604 | ; Object types for GetCurrentObject OBJ_PEN = 1 OBJ_BRUSH = 2 OBJ_PAL = 5 OBJ_FONT = 6 OBJ_BITMAP = 7 ; Additional constants for GetObjectType OBJ_DC = $03 OBJ_MEMDC = $0a |
Changes to freshlib/equates/Win32/_HTMLHELP.INC.
|
| > > > > > | < > > > | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: HtmlHelp constants and structures. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; Commands to pass to HtmlHelp() HH_DISPLAY_TOPIC = 0x0000 HH_HELP_FINDER = 0x0000 ; WinHelp equivalent HH_DISPLAY_TOC = 0x0001 HH_DISPLAY_INDEX = 0x0002 |
︙ | ︙ |
Changes to freshlib/equates/Win32/_KERNEL32.INC.
|
| > > > > | | > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: KERNEL32.DLL structures and constants ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct SYSTEM_INFO .wProcessorArchitecture dw ? .wReserved dw ? .dwPageSize dd ? .lpMinimumApplicationAddress dd ? .lpMaximumApplicationAddress dd ? |
︙ | ︙ | |||
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | .nFileSizeLow dd ? .dwReserved0 dd ? .dwReserved1 dd ? .cFileName rb 260 .cAlternateFileName rb 14 ends struct PROCESSINFO .hProcess dd ? .hThread dd ? .dwProcessId dd ? .dwThreadId dd ? ends ; General constants NULL = 0 TRUE = 1 FALSE = 0 | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | .nFileSizeLow dd ? .dwReserved0 dd ? .dwReserved1 dd ? .cFileName rb 260 .cAlternateFileName rb 14 ends struct FINDDATAW .dwFileAttributes dd ? .ftCreationTime FILETIME .ftLastAccessTime FILETIME .ftLastWriteTime FILETIME .nFileSizeHigh dd ? .nFileSizeLow dd ? .dwReserved0 dd ? .dwReserved1 dd ? .cFileName rw 260 .cAlternateFileName rw 14 ends ; findnext error ERROR_NO_MORE_FILES = 18 struct PROCESSINFO .hProcess dd ? .hThread dd ? .dwProcessId dd ? .dwThreadId dd ? ends struct TIME_ZONE_INFORMATION .bias dd ? .StandardName rw 32 .StandardDate SYSTEMTIME .StandardBias dd ? .DaylightName rw 32 .DaylightDate SYSTEMTIME .DaylightBias dd ? ends TIME_ZODE_ID_UNKNOWN = 0 TIME_ZONE_ID_STANDARD = 1 TIME_ZONE_ID_DAYLIGHT = 2 ; General constants NULL = 0 TRUE = 1 FALSE = 0 |
︙ | ︙ | |||
305 306 307 308 309 310 311 312 313 314 315 316 317 318 | PIPE_READMODE_MESSAGE = 2 PIPE_TYPE_BYTE = 0 PIPE_TYPE_MESSAGE = 4 PIPE_UNLIMITED_INSTANCES = 255 ; file/pipe error codes ERROR_MORE_DATA = 234 ; Global memory flags GMEM_FIXED = 0000h GMEM_MOVEABLE = 0002h GMEM_NOCOMPACT = 0010h | > > | 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 | PIPE_READMODE_MESSAGE = 2 PIPE_TYPE_BYTE = 0 PIPE_TYPE_MESSAGE = 4 PIPE_UNLIMITED_INSTANCES = 255 ; file/pipe error codes ERROR_FILE_NOT_FOUND = 2 ERROR_PATH_NOT_FOUND = 3 ERROR_MORE_DATA = 234 ; Global memory flags GMEM_FIXED = 0000h GMEM_MOVEABLE = 0002h GMEM_NOCOMPACT = 0010h |
︙ | ︙ | |||
747 748 749 750 751 752 753 | VFT2_DRV_SOUND = 00000009h VFT2_DRV_COMM = 0000000Ah VFT2_DRV_INPUTMETHOD = 0000000Bh VFT2_DRV_VERSIONED_PRINTER = 0000000Ch VFT2_FONT_RASTER = 00000001h VFT2_FONT_VECTOR = 00000002h VFT2_FONT_TRUETYPE = 00000003h | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 | VFT2_DRV_SOUND = 00000009h VFT2_DRV_COMM = 0000000Ah VFT2_DRV_INPUTMETHOD = 0000000Bh VFT2_DRV_VERSIONED_PRINTER = 0000000Ch VFT2_FONT_RASTER = 00000001h VFT2_FONT_VECTOR = 00000002h VFT2_FONT_TRUETYPE = 00000003h ; MultiByteToWideChar constants CP_ACP = 0 CP_OEMCP = 1 CP_MACCP = 2 CP_THREAD_ACP = 3 CP_SYMBOL = 42 CP_UTF7 = 65000 CP_UTF8 = 65001 ; .flags: MB_PRECOMPOSED = $00000001 ; use precomposed chars MB_COMPOSITE = $00000002 ; use composite chars MB_USEGLYPHCHARS = $00000004 ; use glyph chars, not ctrl chars MB_ERR_INVALID_CHARS = $00000008 ; error for invalid chars dcb_Binary = 1 dcb_ParityCheck = 2 dcb_OutxCtsFlow = 4 dcb_OutxDsrFlow = 8 dcb_DtrControlMask = $30 dcb_DtrControlDisable = $00; dcb_DtrControlEnable = $10; dcb_DtrControlHandshake = $20; dcb_DsrSensivity = $40; dcb_TXContinueOnXoff = $80; dcb_OutX = $100; dcb_InX = $200; dcb_ErrorChar = $400; dcb_NullStrip = $800; dcb_RtsControlMask = $3000; dcb_RtsControlDisable = $0000; dcb_RtsControlEnable = $1000; dcb_RtsControlHandshake = $2000; dcb_RtsControlToggle = $3000; dcb_AbortOnError = $4000; dcb_ReservedBits = $FFFF8000; struct DCB .DCBLength dd ? ; // sizeof(DCB) .BaudRate dd ? ; // current baud rate .Flags dd ? .wReserved1 dw ? ; .XonLim dw ? .XoffLim dw ? .ByteSize db ? .Parity db ? .StopBits db ? .XonChar db ? .XoffChar db ? .ErrorChar db ? .EofChar db ? .EvtChar db ? .wReserved2 dw ? ends struct COMMTIMEOUTS .ReadIntervalTimeout dd ? .ReadTotalTimeoutMultiplier dd ? .ReadTotalTimeoutConstant dd ? .WriteTotalTimeoutMultiplier dd ? .WriteTotalTimeoutConstant dd ? ends struct CRITICAL_SECTION .DebugInfo dd ? .LockCount dd ? .RecursionCount dd ? .OwningThread dd ? .LockSemaphore dd ? .SpinCount dd ? ends |
Changes to freshlib/equates/Win32/_ODBC32.INC.
1 2 3 4 5 6 7 | SQL_NULL_DATA = -1 SQL_DATA_AT_EXEC = -2 SQL_SUCCESS = 0 SQL_SUCCESS_WITH_INFO = 1 SQL_NODATA = 100 SQL_ERROR = -1 SQL_INVALID_HANDLE = -2 | > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: ODBC constants and structures. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ SQL_NULL_DATA = -1 SQL_DATA_AT_EXEC = -2 SQL_SUCCESS = 0 SQL_SUCCESS_WITH_INFO = 1 SQL_NODATA = 100 SQL_ERROR = -1 SQL_INVALID_HANDLE = -2 |
︙ | ︙ |
Changes to freshlib/equates/Win32/_RichEdit32.inc.
1 2 3 4 5 6 7 | MAX_TAB_STOPS = 32 struct CHARFORMAT .cbSize dd ? .dwMask dd ? .dwEffects dd ? | > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: RichEdit32.dll constants and structures. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ MAX_TAB_STOPS = 32 struct CHARFORMAT .cbSize dd ? .dwMask dd ? .dwEffects dd ? |
︙ | ︙ |
Changes to freshlib/equates/Win32/_SHELL32.INC.
|
| > > > > | | > > > > > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SHELL32.DLL structures and constants ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct NOTIFYICONDATA .cbSize dd ? .hWnd dd ? .uID dd ? .uFlags dd ? .uCallbackMessage dd ? .hIcon dd ? .szTip du 64 ends ; Taskbar icon messages NIM_ADD = 0 NIM_MODIFY = 1 NIM_DELETE = 2 |
︙ | ︙ |
Changes to freshlib/equates/Win32/_USER32.INC.
|
| > > > > | | > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: USER32.DLL structures and constants ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct POINT .x dd ? .y dd ? ends struct RECT |
︙ | ︙ | |||
128 129 130 131 132 133 134 | struct COPYDATASTRUCT .dwData dd ? .cbData dd ? .lpData dd ? ends struct ACCEL | | | | | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | struct COPYDATASTRUCT .dwData dd ? .cbData dd ? .lpData dd ? ends struct ACCEL .fVirt dw ? .key dw ? .cmd dw ? ends struct PAINTSTRUCT .hdc dd ? .fErase dd ? .rcPaint RECT .fRestore dd ? |
︙ | ︙ | |||
197 198 199 200 201 202 203 204 205 206 207 208 209 210 | .lpszCaption dd ? .dwStyle dd ? .lpszIcon dd ? .dwContextHelpId dd ? .lpfnMsgBoxCallback dd ? .dwLanguageId dd ? ends ; MessageBox type flags MB_OK = 000000h MB_OKCANCEL = 000001h MB_ABORTRETRYIGNORE = 000002h MB_YESNOCANCEL = 000003h | > > > > > > > > > | 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | .lpszCaption dd ? .dwStyle dd ? .lpszIcon dd ? .dwContextHelpId dd ? .lpfnMsgBoxCallback dd ? .dwLanguageId dd ? ends struct MONITORINFO .cbSize dd ? .rcMonitor RECT .rcWork RECT .dwFlags dd ? ends ; MessageBox type flags MB_OK = 000000h MB_OKCANCEL = 000001h MB_ABORTRETRYIGNORE = 000002h MB_YESNOCANCEL = 000003h |
︙ | ︙ | |||
299 300 301 302 303 304 305 | WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW WS_TILED = WS_OVERLAPPED WS_ICONIC = WS_MINIMIZE WS_SIZEBOX = WS_THICKFRAME ; Extended Window Styles | | | | | | | | | | | | | | | | | | | | | | > | 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 | WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW WS_TILED = WS_OVERLAPPED WS_ICONIC = WS_MINIMIZE WS_SIZEBOX = WS_THICKFRAME ; Extended Window Styles WS_EX_DLGMODALFRAME = 00000001h WS_EX_DRAGOBJECT = 00000002h WS_EX_NOPARENTNOTIFY = 00000004h WS_EX_TOPMOST = 00000008h WS_EX_ACCEPTFILES = 00000010h WS_EX_TRANSPARENT = 00000020h WS_EX_MDICHILD = 00000040h WS_EX_TOOLWINDOW = 00000080h WS_EX_WINDOWEDGE = 00000100h WS_EX_CLIENTEDGE = 00000200h WS_EX_CONTEXTHELP = 00000400h WS_EX_RIGHT = 00001000h WS_EX_LEFT = 00000000h WS_EX_RTLREADING = 00002000h WS_EX_LTRREADING = 00000000h WS_EX_LEFTSCROLLBAR = 00004000h WS_EX_RIGHTSCROLLBAR = 00000000h WS_EX_CONTROLPARENT = 00010000h WS_EX_STATICEDGE = 00020000h WS_EX_APPWINDOW = 00040000h WS_EX_LAYERED = 00080000h WS_EX_NOACTIVATE = 08000000h WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE or WS_EX_CLIENTEDGE WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE or WS_EX_TOOLWINDOW or WS_EX_TOPMOST ; MDI client style bits MDIS_ALLCHILDSTYLES = 1 |
︙ | ︙ | |||
382 383 384 385 386 387 388 389 390 391 392 393 394 395 | GW_HWNDFIRST = 0 GW_HWNDLAST = 1 GW_HWNDNEXT = 2 GW_HWNDPREV = 3 GW_OWNER = 4 GW_CHILD = 5 ; RedrawWindow flags RDW_INVALIDATE = 0001h RDW_INTERNALPAINT = 0002h RDW_ERASE = 0004h RDW_VALIDATE = 0008h | > > > > > > | 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 | GW_HWNDFIRST = 0 GW_HWNDLAST = 1 GW_HWNDNEXT = 2 GW_HWNDPREV = 3 GW_OWNER = 4 GW_CHILD = 5 ; GetAncestor constants GA_PARENT = 1 GA_ROOT = 2 GA_ROOTOWNER = 3 ; RedrawWindow flags RDW_INVALIDATE = 0001h RDW_INTERNALPAINT = 0002h RDW_ERASE = 0004h RDW_VALIDATE = 0008h |
︙ | ︙ | |||
403 404 405 406 407 408 409 410 411 412 413 414 415 416 | RDW_NOFRAME = 0800h ; PeekMessage Options PM_NOREMOVE = 0000h PM_REMOVE = 0001h PM_NOYIELD = 0002h ; Window state messages WM_STATE = 0000h WM_NULL = 0000h WM_CREATE = 0001h WM_DESTROY = 0002h | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 | RDW_NOFRAME = 0800h ; PeekMessage Options PM_NOREMOVE = 0000h PM_REMOVE = 0001h PM_NOYIELD = 0002h ; MsgWaitForMultipleObjectsEx for .dwFlags: MWMO_ALERTABLE = 0x0002 ; The function also returns if an APC has been queued to the thread with QueueUserAPC while the thread is in the waiting state. MWMO_INPUTAVAILABLE = 0x0004 ; The function returns if input exists for the queue, even if the input has been seen (but not removed) using a call to another function, such as PeekMessage. MWMO_WAITALL = 0x0001 ; The function returns when all objects in the pHandles array are signaled and an input event has been received, all at the same time. ; MsgWaitForMultipleObjectsEx for .dwWakeMask: QS_ALLEVENTS = 0x04BF ; An input, WM_TIMER, WM_PAINT, WM_HOTKEY, or posted message is in the queue. ; This value is a combination of QS_INPUT, QS_POSTMESSAGE, QS_TIMER, QS_PAINT, and QS_HOTKEY. QS_ALLINPUT = 0x04FF ; Any message is in the queue. ; This value is a combination of QS_INPUT, QS_POSTMESSAGE, QS_TIMER, QS_PAINT, QS_HOTKEY, and QS_SENDMESSAGE. QS_ALLPOSTMESSAGE = 0x0100 ; A posted message is in the queue. ; This value is cleared when you call GetMessage or PeekMessage without filtering messages. QS_HOTKEY = 0x0080 ; A WM_HOTKEY message is in the queue. QS_INPUT = 0x0407 ; An input message is in the queue. ; This value is a combination of QS_MOUSE, QS_KEY, and QS_RAWINPUT. QS_KEY = 0x0001 ; A WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP, or WM_SYSKEYDOWN message is in the queue. QS_MOUSE = 0x0006 ; A WM_MOUSEMOVE message or mouse-button message (WM_LBUTTONUP, WM_RBUTTONDOWN, and so on). ; This value is a combination of QS_MOUSEMOVE and QS_MOUSEBUTTON. QS_MOUSEBUTTON = 0x0004 ; A mouse-button message (WM_LBUTTONUP, WM_RBUTTONDOWN, and so on). QS_MOUSEMOVE = 0x0002 ; A WM_MOUSEMOVE message is in the queue. QS_PAINT = 0x0020 ; A WM_PAINT message is in the queue. QS_POSTMESSAGE = 0x0008 ; A posted message is in the queue. ; This value is cleared when you call GetMessage or PeekMessage, whether or not you are filtering messages. QS_RAWINPUT = 0x0400 ; A raw input message is in the queue. QS_SENDMESSAGE = 0x0040 ; A message sent by another thread or application is in the queue. QS_TIMER = 0x0010 ; A WM_TIMER message is in the queue. ; Window state messages WM_STATE = 0000h WM_NULL = 0000h WM_CREATE = 0001h WM_DESTROY = 0002h |
︙ | ︙ | |||
736 737 738 739 740 741 742 | PRF_ERASEBKGND = 08h PRF_CHILDREN = 10h PRF_OWNED = 20h ; Virtual key codes VK_LBUTTON = 001h | < > | 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 | PRF_ERASEBKGND = 08h PRF_CHILDREN = 10h PRF_OWNED = 20h ; Virtual key codes VK_LBUTTON = 001h VK_RBUTTON = 002h VK_CANCEL = 003h VK_MBUTTON = 004h VK_BACK = 008h VK_TAB = 009h VK_CLEAR = 00Ch VK_RETURN = 00Dh VK_SHIFT = 010h VK_CONTROL = 011h |
︙ | ︙ |
Changes to freshlib/equates/Win32/_WSOCK32.INC.
|
| > > > > | | > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: WSOCK32.DLL structures and constants ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct WSADATA .wVersion dw ? .wHighVersion dw ? .szDescription rb 256+1 .szSystemStatus rb 128+1 .iMaxSockets dw ? |
︙ | ︙ | |||
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | .sin_zero rb 8 ends struct sockaddr .sa_family dw ? .sa_data rb 14 ends ; Socket types SOCK_STREAM = 1 SOCK_DGRAM = 2 SOCK_RAW = 3 SOCK_RDM = 4 SOCK_SEQPACKET = 5 ; Address formats AF_UNSPEC = 0 AF_UNIX = 1 AF_INET = 2 AF_IMPLINK = 3 AF_PUP = 4 AF_CHAOS = 5 AF_NS = 6 | > > > > > > > > | > > > > > > > > > > | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | .sin_zero rb 8 ends struct sockaddr .sa_family dw ? .sa_data rb 14 ends ; Socket error SOCKET_ERROR = -1 INVALID_SOCKET = -1 UNIX_PATH_MAX = 108 ; Socket types SOCK_STREAM = 1 SOCK_DGRAM = 2 SOCK_RAW = 3 SOCK_RDM = 4 SOCK_SEQPACKET = 5 ; Address formats AF_UNSPEC = 0 AF_UNIX = 1 AF_INET = 2 AF_IMPLINK = 3 AF_PUP = 4 AF_CHAOS = 5 AF_NS = 6 AF_IPX = AF_NS AF_ISO = 7 AF_OSI = AF_ISO AF_ECMA = 8 AF_DATAKIT = 9 AF_CCITT = 10 AF_SNA = 11 AF_DECnet = 12 AF_DLI = 13 AF_LAT = 14 AF_HYLINK = 15 AF_APPLETALK = 16 AF_NETBIOS = 17 AF_VOICEVIEW = 18 ; VoiceView AF_FIREFOX = 19 ; Protocols from Firefox AF_UNKNOWN1 = 20 ; Somebody is using this! AF_BAN = 21 ; Banyan AF_ATM = 22 ; Native ATM Services AF_INET6 = 23 ; Internetwork Version 6 AF_CLUSTER = 24 ; Microsoft Wolfpack AF_12844 = 25 ; IEEE 1284.4 WG AF AF_MAX = 26 ; Protocol formats PF_UNSPEC = 0 PF_UNIX = 1 PF_INET = 2 PF_IMPLINK = 3 |
︙ | ︙ | |||
80 81 82 83 84 85 86 87 88 89 90 91 92 93 | PF_SNA = 11 PF_DECnet = 12 PF_DLI = 13 PF_LAT = 14 PF_HYLINK = 15 PF_APPLETALK = 16 PF_NETBIOS = 17 ; IP Ports IPPORT_ECHO = 7 IPPORT_DISCARD = 9 IPPORT_SYSTAT = 11 IPPORT_DAYTIME = 13 | > > > > > > > > > > > > > > > > > > | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | PF_SNA = 11 PF_DECnet = 12 PF_DLI = 13 PF_LAT = 14 PF_HYLINK = 15 PF_APPLETALK = 16 PF_NETBIOS = 17 ; IPPROTO_ constants ; Protocols IPPROTO_IP = 0 ; dummy for IP IPPROTO_ICMP = 1 ; control message protocol IPPROTO_IGMP = 2 ; internet group management protocol IPPROTO_GGP = 3 ; gateway^2 (deprecated) IPPROTO_TCP = 6 ; tcp IPPROTO_PUP = 12 ; pup IPPROTO_UDP = 17 ; user datagram protocol IPPROTO_IDP = 22 ; xns idp IPPROTO_ND = 77 ; UNOFFICIAL net disk proto IPPROTO_RAW = 255 ; raw IP packet IPPROTO_MAX = 256 ; IP Ports IPPORT_ECHO = 7 IPPORT_DISCARD = 9 IPPORT_SYSTAT = 11 IPPORT_DAYTIME = 13 |
︙ | ︙ | |||
123 124 125 126 127 128 129 | FD_CLOSE = 20h ; commands for ioctlsocket FIONBIO = 8004667Eh FIONSYNC = 8004667Dh FIONREAD = 4004667Fh | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | FD_CLOSE = 20h ; commands for ioctlsocket FIONBIO = 8004667Eh FIONSYNC = 8004667Dh FIONREAD = 4004667Fh ; Commands for shutdown SD_RECEIVE = 0 SD_SEND = 1 SD_BOTH = 2 ; flags MSG_OOB = 1 MSG_PEEK = 2 MSG_DONTROUTE = 4 MSG_MAXIOVLEN = 16 MSG_PARTIAL = 0x8000 ; options SOL_SOCKET = $FFFF SO_DEBUG = $01 SO_ACCEPTCONN = $02 SO_REUSEADDR = $04 SO_KEEPALIVE = $08 SO_DONTROUTE = $10 SO_BROADCAST = $20 SO_USELOOPBACK = $40 SO_LINGER = $80 SO_OOBINLINE = $100 SO_SNDBUF = $1001 SO_RCVBUF = $1002 SO_SNDTIMEO = $1005 SO_RCVTIMEO = $1006 WSA_INVALID_HANDLE = 6 WSA_NOT_ENOUGH_MEMORY = 8 WSA_INVALID_PARAMETER = 87 WSA_OPERATION_ABORTED = 995 WSA_IO_INCOMPLETE = 996 WSA_IO_PENDING = 997 WSABASEERR = 10000 WSAEINTR = WSABASEERR+4 WSAEBADF = WSABASEERR+9 WSAEACCES = WSABASEERR+13 WSAEFAULT = WSABASEERR+14 WSAEINVAL = WSABASEERR+22 WSAEMFILE = WSABASEERR+24 WSAEWOULDBLOCK = WSABASEERR+35 WSAEINPROGRESS = WSABASEERR+36 WSAEALREADY = WSABASEERR+37 WSAENOTSOCK = WSABASEERR+38 WSAEDESTADDRREQ = WSABASEERR+39 WSAEMSGSIZE = WSABASEERR+40 WSAEPROTOTYPE = WSABASEERR+41 WSAENOPROTOOPT = WSABASEERR+42 WSAEPROTONOSUPPORT = WSABASEERR+43 WSAESOCKTNOSUPPORT = WSABASEERR+44 WSAEOPNOTSUPP = WSABASEERR+45 WSAEPFNOSUPPORT = WSABASEERR+46 WSAEAFNOSUPPORT = WSABASEERR+47 WSAEADDRINUSE = WSABASEERR+48 WSAEADDRNOTAVAIL = WSABASEERR+49 WSAENETDOWN = WSABASEERR+50 WSAENETUNREACH = WSABASEERR+51 WSAENETRESET = WSABASEERR+52 WSAECONNABORTED = WSABASEERR+53 WSAECONNRESET = WSABASEERR+54 WSAENOBUFS = WSABASEERR+55 WSAEISCONN = WSABASEERR+56 WSAENOTCONN = WSABASEERR+57 WSAESHUTDOWN = WSABASEERR+58 WSAETOOMANYREFS = WSABASEERR+59 WSAETIMEDOUT = WSABASEERR+60 WSAECONNREFUSED = WSABASEERR+61 WSAELOOP = WSABASEERR+62 WSAENAMETOOLONG = WSABASEERR+63 WSAEHOSTDOWN = WSABASEERR+64 WSAEHOSTUNREACH = WSABASEERR+65 WSAENOTEMPTY = WSABASEERR+66 WSAEUSERS = WSABASEERR+68 WSAEDQUOT = WSABASEERR+69 WSAESTALE = WSABASEERR+70 WSAEREMOTE = WSABASEERR+71 ; Extended Windows Sockets error codes WSASYSNOTREADY = WSABASEERR+91 WSAVERNOTSUPPORTED = WSABASEERR+92 WSANOTINITIALISED = WSABASEERR+93 WSAEDISCON = WSABASEERR+101 WSAENOMORE = WSABASEERR+102 WSAECANCELLED = WSABASEERR+103 WSAEINVALIDPROCTABLE = WSABASEERR+104 WSAEINVALIDPROVIDER = WSABASEERR+105 WSAEPROVIDERFAILEDINIT = WSABASEERR+106 WSASYSCALLFAILURE = WSABASEERR+107 WSASERVICE_NOT_FOUND = WSABASEERR+108 WSATYPE_NOT_FOUND = WSABASEERR+109 WSA_E_NO_MORE = WSABASEERR+110 WSA_E_CANCELLED = WSABASEERR+111 WSAEREFUSED = WSABASEERR+112 WSAHOST_NOT_FOUND = WSABASEERR+1001 WSATRY_AGAIN = WSABASEERR+1002 WSANO_RECOVERY = WSABASEERR+1003 WSANO_DATA = WSABASEERR+1004 WSANO_ADDRESS = WSANO_DATA |
Added freshlib/equates/Win32/_com32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: COM interfaces. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; error codes S_OK = 0 S_FALSE = 1 E_NOTIMPL = $80004001 ; Not implemented E_NOINTERFACE = $80004002 ; No such interface supported E_ABORT = $80004004 ; Operation aborted E_ACCESSDENIED = $80070005 ; General access denied error E_FAIL = $80004005 ; Unspecified failure E_HANDLE = $80070006 ; Handle that is not valid E_INVALIDARG = $80070057 ; One or more arguments are not valid E_OUTOFMEMORY = $8007000E ; Failed to allocate necessary memory E_POINTER = $80004003 ; Pointer that is not valid E_UNEXPECTED = $8000FFFF ; Unexpected failure OLECLOSE_SAVEIFDIRTY = 0 OLECLOSE_NOSAVE = 1 OLECLOSE_PROMPTSAVE = 2 CLSCTX_INPROC_SERVER = 1 CLSCTX_INPROC_HANDLER = 2 CLSCTX_INPROC = CLSCTX_INPROC_SERVER or CLSCTX_INPROC_HANDLER OLEIVERB_SHOW = -1 OLEIVERB_OPEN = -2 OLEIVERB_HIDE = -3 OLEIVERB_UIACTIVATE = -4 OLEIVERB_INPLACEACTIVATE = -5 OLEIVERB_DISCARDUNDOSTATE = -6 ; VARIANT TYPE VT_EMPTY = 0 VT_NULL = 1 VT_I2 = 2 VT_I4 = 3 VT_R4 = 4 VT_R8 = 5 VT_CY = 6 VT_DATE = 7 VT_BSTR = 8 VT_DISPATCH = 9 VT_ERROR = 10 VT_BOOL = 11 VT_VARIANT = 12 VT_UNKNOWN = 13 VT_DECIMAL = 14 VT_I1 = 16 VT_UI1 = 17 VT_UI2 = 18 VT_UI4 = 19 VT_I8 = 20 VT_UI8 = 21 VT_INT = 22 VT_UINT = 23 VT_VOID = 24 VT_HRESULT = 25 VT_PTR = 26 VT_SAFEARRAY = 27 VT_CARRAY = 28 VT_USERDEFINED = 29 VT_LPSTR = 30 VT_LPWSTR = 31 VT_RECORD = 36 VT_INT_PTR = 37 VT_UINT_PTR = 38 VT_FILETIME = 64 VT_BLOB = 65 VT_STREAM = 66 VT_STORAGE = 67 VT_STREAMED_OBJECT = 68 VT_STORED_OBJECT = 69 VT_BLOB_OBJECT = 70 VT_CF = 71 VT_CLSID = 72 VT_VERSIONED_STREAM = 73 VT_BSTR_BLOB = $fff VT_VECTOR = $1000 VT_ARRAY = $2000 VT_BYREF = $4000 struct VARIANT .vType dw ? .res_zero rb 6 .Data0 dd ? .Data1 dd ? ends com_interface IWebBrowser2, \ QueryInterface,\ AddRef,\ Release,\ \ GetTypeInfoCount, \ GetTypeInfo, \ GetIDsOfNames, \ xInvoke, \ GoBack, \ GoForward, \ GoHome, \ GoSearch, \ Navigate, \ Refresh, \ Refresh2, \ Stop, \ get_Application, \ get_Parent, \ get_Container, \ get_Document, \ get_TopLevelContainer, \ get_Type, \ get_Left, \ put_Left, \ get_Top, \ put_Top, \ get_Width, \ put_Width, \ get_Height, \ put_Height, \ get_LocationName, \ get_LocationURL, \ get_Busy, \ Quit, \ ClientToWindow, \ PutProperty, \ GetProperty, \ get_Name, \ get_HWND, \ get_FullName, \ get_Path, \ get_Visible, \ put_Visible, \ get_StatusBar, \ put_StatusBar, \ get_StatusText, \ put_StatusText, \ get_ToolBar, \ put_ToolBar, \ get_MenuBar, \ put_MenuBar, \ get_FullScreen, \ put_FullScreen, \ Navigate2, \ QueryStatusWB, \ ExecWB, \ ShowBrowserBar, \ get_ReadyState, \ get_Offline, \ put_Offline, \ get_Silent, \ put_Silent, \ get_RegisterAsBrowser, \ put_RegisterAsBrowser, \ get_RegisterAsDropTarget, \ put_RegisterAsDropTarget, \ get_TheaterMode, \ put_TheaterMode, \ get_AddressBar, \ put_AddressBar, \ get_Resizable, \ put_Resizable ; IWebBrowser2 ready states: READYSTATE_UNINITIALIZED = 0 READYSTATE_LOADING = 1 READYSTATE_LOADED = 2 READYSTATE_INTERACTIVE = 3 READYSTATE_COMPLETE = 4 com_interface IOleObject, \ QueryInterface, \ AddRef, \ Release, \ \ SetClientSite, \ GetClientSite, \ SetHostNames, \ Close, \ SetMoniker, \ GetMoniker, \ InitFromData, \ GetClipboardData, \ DoVerb, \ EnumVerbs, \ Update, \ IsUpToDate, \ GetUserClassID, \ GetUserType, \ SetExtent, \ GetExtent, \ Advise, \ Unadvise, \ EnumAdvise, \ GetMiscStatus, \ SetColorScheme struct OLEINPLACEFRAMEINFO .cb dd ? .fMDIApp dd ? .hwndFrame dd ? .haccel dd ? .cAccelEntries dd ? ends com_interface IOleInPlaceObject, \ QueryInterface, \ AddRef, \ Release, \ \ GetWindow, \ ContextSensitiveHelp, \ InPlaceDeactivate, \ UIDeactivate, \ SetObjectRects, \ ReactivateAndUndo com_interface IHTMLDocument2, \ QueryInterface, \ AddRef, \ Release, \ \ GetTypeInfoCount, \ GetTypeInfo, \ GetIDsOfNames, \ Invoke, \ \ get_Script, \ \ get_all, \ get_body, \ get_activeElement, \ get_images, \ get_applets, \ get_links, \ get_forms, \ get_anchors, \ put_title, \ get_title, \ get_scripts, \ put_designMode, \ get_designMode, \ get_selection, \ get_readyState, \ get_frames, \ get_embeds, \ get_plugins, \ put_alinkColor, \ get_alinkColor, \ put_bgColor, \ get_bgColor, \ put_fgColor, \ get_fgColor, \ put_linkColor, \ get_linkColor, \ put_vlinkColor, \ get_vlinkColor, \ get_referrer, \ get_location, \ get_lastModified, \ put_URL, \ get_URL, \ put_domain, \ get_domain, \ put_cookie, \ get_cookie, \ put_expands, \ get_expands, \ put_charset, \ get_charset, \ put_defaultCharset, \ get_defaultCharset, \ get_mimeType, \ get_fileSize, \ get_fileCreatedDate, \ get_fileModifiedDate, \ get_fileUpdatedDate, \ get_security, \ get_protocol, \ get_nameProp, \ write, \ writeln, \ open, \ close, \ clear, \ queryCommandSupported, \ queryCommandEnabled, \ queryCommandState, \ queryCommandIndeterm, \ queryCommandText, \ queryCommandValue, \ execCommand, \ execCommandShowHelp, \ createElement, \ put_onhelp, \ get_onhelp, \ put_onclick, \ get_onclick, \ put_ondblclick, \ get_ondblclick, \ put_onkeyup, \ get_onkeyup, \ put_onkeydown, \ get_onkeydown, \ put_onkeypress, \ get_onkeypress, \ put_onmouseup, \ get_onmouseup, \ put_onmousedown, \ get_onmousedown, \ put_onmousemove, \ get_onmousemove, \ put_onmouseout, \ get_onmouseout, \ put_onmouseover, \ get_onmouseover, \ put_onreadystatechange, \ get_onreadystatechange, \ put_onafterupdate, \ get_onafterupdate, \ put_onrowexit, \ get_onrowexit, \ put_onrowenter, \ get_onrowenter, \ put_ondragstart, \ get_ondragstart, \ put_onselectstart, \ get_onselectstart, \ elementFromPoint, \ get_parentWindow, \ get_styleSheets, \ put_onbeforeupdate, \ get_onbeforeupdate, \ put_onerrorupdate, \ get_onerrorupdate, \ toString, \ createStyleSheet struct SAFEARRAYBOUND .cElements dd ? .lLbound dd ? ends struct SAFEARRAY .fFeatures dw ? .cbElements dd ? .cLocks dd ? .pvData dd ? .rgsabound0 SAFEARRAYBOUND .rgsabound1 SAFEARRAYBOUND ends com_interface IDispatch, \ QueryInterface, \ AddRef, \ Release, \ \ .GetTypeInfoCount, \ .GetTypeInfo, \ .GetIDsOfNames, \ .Invoke com_interface IClassFactory, \ QueryInterface, \ AddRef, \ Release, \ \ CreateInstance, \ LockServer ;com_interface IHTMLElement, \ ; QueryInterface, \ ; AddRef, \ ; Release, \ ;\ |
Changes to freshlib/equates/Win32/_exceptions.inc.
1 2 3 4 5 6 7 | EXCEPTION_MAXIMUM_PARAMETERS = 15 DBG_CONTINUE = 00010002h DBG_TERMINATE_THREAD = 40010003h DBG_TERMINATE_PROCESS = 40010004h DBG_CONTROL_C = 40010005h DBG_CONTROL_BREAK = 40010008h | > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Exception handling constants and structures. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ EXCEPTION_MAXIMUM_PARAMETERS = 15 DBG_CONTINUE = 00010002h DBG_TERMINATE_THREAD = 40010003h DBG_TERMINATE_PROCESS = 40010004h DBG_CONTROL_C = 40010005h DBG_CONTROL_BREAK = 40010008h |
︙ | ︙ |
Added freshlib/equates/Win32/_geometry.inc.
> > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Different geometry structures. ; ; Target OS: Windows ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct TBounds .x dd ? .y dd ? .width dd ? .height dd ? ends |
Added freshlib/equates/Win32/_mshtmhst.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Some equates for HTML control COM interfaces. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ DOCHOSTUIFLAG_DIALOG = $00000001 DOCHOSTUIFLAG_DISABLE_HELP_MENU = $00000002 DOCHOSTUIFLAG_NO3DBORDER = $00000004 DOCHOSTUIFLAG_SCROLL_NO = $00000008 DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE = $00000010 DOCHOSTUIFLAG_OPENNEWWIN = $00000020 DOCHOSTUIFLAG_DISABLE_OFFSCREEN = $00000040 DOCHOSTUIFLAG_FLAT_SCROLLBAR = $00000080 DOCHOSTUIFLAG_DIV_BLOCKDEFAULT = $00000100 DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY = $00000200 DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY = $00000400 DOCHOSTUIFLAG_CODEPAGELINKEDFONTS = $00000800 DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8 = $00001000 DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8 = $00002000 DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE = $00004000 DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION = $00010000 DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION = $00020000 DOCHOSTUIFLAG_THEME = $00040000 DOCHOSTUIFLAG_NOTHEME = $00080000 DOCHOSTUIFLAG_NOPICS = $00100000 DOCHOSTUIFLAG_NO3DOUTERBORDER = $00200000 DOCHOSTUIFLAG_DISABLE_EDIT_NS_FIXUP = $00400000 DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK = $00800000 DOCHOSTUIFLAG_DISABLE_UNTRUSTEDPROTOCOL = $01000000 DOCHOSTUIFLAG_HOST_NAVIGATES = $02000000 DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION = $04000000 DOCHOSTUIFLAG_USE_WINDOWLESS_SELECTCONTROL = $08000000 DOCHOSTUIFLAG_USE_WINDOWED_SELECTCONTROL = $10000000 DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE = $20000000 DOCHOSTUIFLAG_DPI_AWARE = $40000000 DOCHOSTUIDBLCLK_DEFAULT = 0 DOCHOSTUIDBLCLK_SHOWPROPERTIES = 1 DOCHOSTUIDBLCLK_SHOWCODE = 2 struct DOCHOSTUIINFO .cbSize dd ? .dwFlags dd ? .dwDoubleClick dd ? .pchHostCss dd ? .pchHostNS dd ? ends |
Deleted freshlib/equates/Win32/_string_apia.inc.
|
| < < < < < |
Deleted freshlib/equates/Win32/_string_apiw.inc.
|
| < < < < < |
Changes to freshlib/equates/Win32/allequates.inc.
|
| > > > > > > > | > > > > > | > > > | | | | | | | > | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Combined include of all Win32 equate files. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ bNEWLINE equ $0d, $0a wNEWLINE equ $0a0d dNEWLINE equ $00000a0d include '_geometry.inc' include '_KERNEL32.INC' include '_USER32.INC' include '_GDI32.INC' include '_COMCTL32.INC' include '_COMDLG32.INC' include '_SHELL32.INC' include '_WSOCK32.INC' include '_RichEdit32.inc' include '_ODBC32.INC' include '_HTMLHELP.INC' include '_exceptions.inc' include '_com32.inc' include '_mshtmhst.inc' |
Added freshlib/equates/_sdl.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SDL v1.2.11 equates definitions. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ; ; SDL 1.2.11 includes written by Raedwulf ; a.k.a. Tai Chi Minh Ralph Eastwood ; ; There's no warranty for the correctness nor completeness of this file ; However, please mail me at tcmreastwood@ntlworld.com if you spot ; any errors in here. ; ; Version Date: 07/11/2006 (dd/mm/yyyy) ; ; Note: Thanks to gunblade about the padding ;) ; ;_________________________________________________________________________________________ SDL_INIT_TIMER = 00000001h SDL_INIT_AUDIO = 00000010h SDL_INIT_VIDEO = 00000020h SDL_INIT_CDROM = 00000100h SDL_INIT_JOYSTICK = 00000200h SDL_INIT_NOPARACHUTE = 00100000h SDL_INIT_EVENTTHREAD = 01000000h SDL_INIT_EVERYTHING = 0000FFFFh SDL_APPMOUSEFOCUS = 01h SDL_APPINPUTFOCUS = 02h SDL_APPACTIVE = 04h struct SDL_AudioSpec .freq rd 1 .format rw 1 .channels rb 1 .silence rb 1 .samples rw 1 .padding rw 1 .size rd 1 .callback rd 1 .userdata rd 1 ends AUDIO_U8 = 0008h AUDIO_S8 = 8008h AUDIO_U16LSB = 0010h AUDIO_S16LSB = 8010h AUDIO_U16MSB = 1010h AUDIO_S16MSB = 9010h AUDIO_U16 = AUDIO_U16LSB AUDIO_S16 = AUDIO_S16LSB AUDIO_U16SYS = AUDIO_U16LSB AUDIO_S16SYS = AUDIO_S16LSB struct SDL_AudioCVT .needed rd 1 .src_format rw 1 .dst_format rw 1 .rate_incr rq 1 .buf rd 1 .len rd 1 .len_cvt rd 1 .len_mult rd 1 .len_ratio rq 1 .filters rd 10 .filter_index rd 1 ends SDL_MIX_MAXVOLUME = 128 SDL_MAX_TRACKS = 99 SDL_AUDIO_TRACK = 00h SDL_DATA_TRACK = 04h CD_TRAYEMPTY = 0 CD_STOPPED = 1 CD_PLAYING = 2 CD_PAUSED = 3 CD_ERROR = -1 struct SDL_CDtrack .id rb 1 .type rb 1 .unused rw 1 .length rd 1 .offset rd 1 ends TRACK_COUNT = (SDL_MAX_TRACKS+1) struct SDL_CD .id rd 1 .status rd 1 .numtracks rd 1 .cur_track rd 1 .cur_frame rd 1 .track SDL_CDtrack rb sizeof.SDL_CDtrack * SDL_MAX_TRACKS ends SDL_LIL_ENDIAN = 1234 SDL_BIG_ENDIAN = 4321 SDL_BYTEORDER equ SDL_LIL_ENDIAN SDL_ENOMEM = 0 SDL_EFREAD = 1 SDL_EFWRITE = 2 SDL_EFSEEK = 3 SDL_UNSUPPORTED = 4 SDL_LASTERROR = 5 SDL_RELEASED = 0 SDL_PRESSED = 1 SDL_NOEVENT = 0 SDL_ACTIVEEVENT = 1 SDL_KEYDOWN = 2 SDL_KEYUP = 3 SDL_MOUSEMOTION = 4 SDL_MOUSEBUTTONDOWN = 5 SDL_MOUSEBUTTONUP = 6 SDL_JOYAXISMOTION = 7 SDL_JOYBALLMOTION = 8 SDL_JOYHATMOTION = 9 SDL_JOYBUTTONDOWN = 10 SDL_JOYBUTTONUP = 11 SDL_QUIT = 12 SDL_SYSWMEVENT = 13 SDL_EVENT_RESERVEDA = 14 SDL_EVENT_RESERVEDB = 15 SDL_VIDEORESIZE = 16 SDL_VIDEOEXPOSE = 17 SDL_EVENT_RESERVED2 = 18 SDL_EVENT_RESERVED3 = 19 SDL_EVENT_RESERVED4 = 20 SDL_EVENT_RESERVED5 = 21 SDL_EVENT_RESERVED6 = 22 SDL_EVENT_RESERVED7 = 23 SDL_USEREVENT = 24 SDL_NUMEVENTS = 32 SDL_ACTIVEEVENTMASK = 2 SDL_KEYDOWNMASK = 4 SDL_KEYUPMASK = 8 SDL_KEYEVENTMASK = 12 SDL_MOUSEMOTIONMASK = 16 SDL_MOUSEBUTTONDOWNMASK = 32 SDL_MOUSEBUTTONUPMASK = 64 SDL_MOUSEEVENTMASK = 102 SDL_JOYAXISMOTIONMASK = 128 SDL_JOYBALLMOTIONMASK = 256 SDL_JOYHATMOTIONMASK = 512 SDL_JOYBUTTONDOWNMASK = 1024 SDL_JOYBUTTONUPMASK = 2048 SDL_JOYEVENTMASK = 3968 SDL_VIDEORESIZEMASK = 65536 SDL_VIDEOEXPOSEMASK = 131072 SDL_QUITMASK = 4096 SDL_SYSWMEVENTMASK = 8192 SDL_ALLEVENTS = 0FFFFFFFFh struct SDL_keysym .scancode rb 1 .pad0 rb 3 .sym rd 1 .mod rd 1 .unicode rw 1 ends struct SDL_ActiveEvent .type rb 1 .gain rb 1 .state rb 1 .pad0 rb 1 ends struct SDL_KeyboardEvent .type rb 1 .which rb 1 .state rb 1 .pad0 rb 1 .keysym SDL_keysym ends struct SDL_MouseMotionEvent .type rb 1 .which rb 1 .state rb 1 .pad0 rb 1 .x rw 1 .y rw 1 .xrel rw 1 .yrel rw 1 ends struct SDL_MouseButtonEvent .type rb 1 .which rb 1 .button rb 1 .state rb 1 .x rw 1 .y rw 1 ends struct SDL_JoyAxisEvent .type rb 1 .which rb 1 .axis rb 1 .pad0 rb 1 .value rw 1 ends struct SDL_JoyBallEvent .type rb 1 .which rb 1 .ball rb 1 .pad0 rb 1 .xrel rw 1 .yrel rw 1 ends struct SDL_JoyHatEvent .type rb 1 .which rb 1 .hat rb 1 .value rb 1 ends struct SDL_JoyButtonEvent .type rb 1 .which rb 1 .button rb 1 .state rb 1 ends struct SDL_ResizeEvent .type rb 1 .pad0 rb 3 .w rd 1 .h rd 1 ends struct SDL_ExposeEvent .type rb 1 ends struct SDL_QuitEvent .type rb 1 ends struct SDL_UserEvent .type rb 1 .pad0 rb 3 .code rd 1 .data1 rd 1 .data2 rd 1 ends SDL_SysWMmsg equ SDL_SysWMmsg struct SDL_SysWMEvent .type rb 1 .pad0 rb 3 .msg rd 1 ends struc SDL_Event { virtual .type rb 1 end virtual virtual .active SDL_ActiveEvent end virtual virtual .key SDL_KeyboardEvent end virtual virtual .motion SDL_MouseMotionEvent end virtual virtual .button SDL_MouseButtonEvent end virtual virtual .jaxis SDL_JoyAxisEvent end virtual virtual .jball SDL_JoyBallEvent end virtual virtual .jhat SDL_JoyHatEvent end virtual virtual .jbutton SDL_JoyButtonEvent end virtual virtual .resize SDL_ResizeEvent end virtual virtual .expose SDL_ExposeEvent end virtual virtual .quit SDL_QuitEvent end virtual virtual .user SDL_UserEvent end virtual .syswm SDL_SysWMEvent } SDL_ADDEVENT = 0 SDL_PEEKEVENT = 1 SDL_GETEVENT = 2 SDL_QUERY = -1 SDL_IGNORE = 0 SDL_DISABLE = 0 SDL_ENABLE = 1 SDL_HAT_CENTERED = 00h SDL_HAT_UP = 01h SDL_HAT_RIGHT = 02h SDL_HAT_DOWN = 04h SDL_HAT_LEFT = 08h SDL_ALL_HOTKEYS = 0FFFFFFFFh SDL_DEFAULT_REPEAT_DELAY = 500 SDL_DEFAULT_REPEAT_INTERVAL = 30 SDLK_UNKNOWN = 0 SDLK_FIRST = 0 SDLK_BACKSPACE = 8 SDLK_TAB = 9 SDLK_CLEAR = 12 SDLK_RETURN = 13 SDLK_PAUSE = 19 SDLK_ESCAPE = 27 SDLK_SPACE = 32 SDLK_EXCLAIM = 33 SDLK_QUOTEDBL = 34 SDLK_HASH = 35 SDLK_DOLLAR = 36 SDLK_AMPERSAND = 38 SDLK_QUOTE = 39 SDLK_LEFTPAREN = 40 SDLK_RIGHTPAREN = 41 SDLK_ASTERISK = 42 SDLK_PLUS = 43 SDLK_COMMA = 44 SDLK_MINUS = 45 SDLK_PERIOD = 46 SDLK_SLASH = 47 SDLK_0 = 48 SDLK_1 = 49 SDLK_2 = 50 SDLK_3 = 51 SDLK_4 = 52 SDLK_5 = 53 SDLK_6 = 54 SDLK_7 = 55 SDLK_8 = 56 SDLK_9 = 57 SDLK_COLON = 58 SDLK_SEMICOLON = 59 SDLK_LESS = 60 SDLK_EQUALS = 61 SDLK_GREATER = 62 SDLK_QUESTION = 63 SDLK_AT = 64 SDLK_LEFTBRACKET = 91 SDLK_BACKSLASH = 92 SDLK_RIGHTBRACKET = 93 SDLK_CARET = 94 SDLK_UNDERSCORE = 95 SDLK_BACKQUOTE = 96 SDLK_a = 97 SDLK_b = 98 SDLK_c = 99 SDLK_d = 100 SDLK_e = 101 SDLK_f = 102 SDLK_g = 103 SDLK_h = 104 SDLK_i = 105 SDLK_j = 106 SDLK_k = 107 SDLK_l = 108 SDLK_m = 109 SDLK_n = 110 SDLK_o = 111 SDLK_p = 112 SDLK_q = 113 SDLK_r = 114 SDLK_s = 115 SDLK_t = 116 SDLK_u = 117 SDLK_v = 118 SDLK_w = 119 SDLK_x = 120 SDLK_y = 121 SDLK_z = 122 SDLK_DELETE = 127 SDLK_WORLD_0 = 160 SDLK_WORLD_1 = 161 SDLK_WORLD_2 = 162 SDLK_WORLD_3 = 163 SDLK_WORLD_4 = 164 SDLK_WORLD_5 = 165 SDLK_WORLD_6 = 166 SDLK_WORLD_7 = 167 SDLK_WORLD_8 = 168 SDLK_WORLD_9 = 169 SDLK_WORLD_10 = 170 SDLK_WORLD_11 = 171 SDLK_WORLD_12 = 172 SDLK_WORLD_13 = 173 SDLK_WORLD_14 = 174 SDLK_WORLD_15 = 175 SDLK_WORLD_16 = 176 SDLK_WORLD_17 = 177 SDLK_WORLD_18 = 178 SDLK_WORLD_19 = 179 SDLK_WORLD_20 = 180 SDLK_WORLD_21 = 181 SDLK_WORLD_22 = 182 SDLK_WORLD_23 = 183 SDLK_WORLD_24 = 184 SDLK_WORLD_25 = 185 SDLK_WORLD_26 = 186 SDLK_WORLD_27 = 187 SDLK_WORLD_28 = 188 SDLK_WORLD_29 = 189 SDLK_WORLD_30 = 190 SDLK_WORLD_31 = 191 SDLK_WORLD_32 = 192 SDLK_WORLD_33 = 193 SDLK_WORLD_34 = 194 SDLK_WORLD_35 = 195 SDLK_WORLD_36 = 196 SDLK_WORLD_37 = 197 SDLK_WORLD_38 = 198 SDLK_WORLD_39 = 199 SDLK_WORLD_40 = 200 SDLK_WORLD_41 = 201 SDLK_WORLD_42 = 202 SDLK_WORLD_43 = 203 SDLK_WORLD_44 = 204 SDLK_WORLD_45 = 205 SDLK_WORLD_46 = 206 SDLK_WORLD_47 = 207 SDLK_WORLD_48 = 208 SDLK_WORLD_49 = 209 SDLK_WORLD_50 = 210 SDLK_WORLD_51 = 211 SDLK_WORLD_52 = 212 SDLK_WORLD_53 = 213 SDLK_WORLD_54 = 214 SDLK_WORLD_55 = 215 SDLK_WORLD_56 = 216 SDLK_WORLD_57 = 217 SDLK_WORLD_58 = 218 SDLK_WORLD_59 = 219 SDLK_WORLD_60 = 220 SDLK_WORLD_61 = 221 SDLK_WORLD_62 = 222 SDLK_WORLD_63 = 223 SDLK_WORLD_64 = 224 SDLK_WORLD_65 = 225 SDLK_WORLD_66 = 226 SDLK_WORLD_67 = 227 SDLK_WORLD_68 = 228 SDLK_WORLD_69 = 229 SDLK_WORLD_70 = 230 SDLK_WORLD_71 = 231 SDLK_WORLD_72 = 232 SDLK_WORLD_73 = 233 SDLK_WORLD_74 = 234 SDLK_WORLD_75 = 235 SDLK_WORLD_76 = 236 SDLK_WORLD_77 = 237 SDLK_WORLD_78 = 238 SDLK_WORLD_79 = 239 SDLK_WORLD_80 = 240 SDLK_WORLD_81 = 241 SDLK_WORLD_82 = 242 SDLK_WORLD_83 = 243 SDLK_WORLD_84 = 244 SDLK_WORLD_85 = 245 SDLK_WORLD_86 = 246 SDLK_WORLD_87 = 247 SDLK_WORLD_88 = 248 SDLK_WORLD_89 = 249 SDLK_WORLD_90 = 250 SDLK_WORLD_91 = 251 SDLK_WORLD_92 = 252 SDLK_WORLD_93 = 253 SDLK_WORLD_94 = 254 SDLK_WORLD_95 = 255 SDLK_KP0 = 256 SDLK_KP1 = 257 SDLK_KP2 = 258 SDLK_KP3 = 259 SDLK_KP4 = 260 SDLK_KP5 = 261 SDLK_KP6 = 262 SDLK_KP7 = 263 SDLK_KP8 = 264 SDLK_KP9 = 265 SDLK_KP_PERIOD = 266 SDLK_KP_DIVIDE = 267 SDLK_KP_MULTIPLY = 268 SDLK_KP_MINUS = 269 SDLK_KP_PLUS = 270 SDLK_KP_ENTER = 271 SDLK_KP_EQUALS = 272 SDLK_UP = 273 SDLK_DOWN = 274 SDLK_RIGHT = 275 SDLK_LEFT = 276 SDLK_INSERT = 277 SDLK_HOME = 278 SDLK_END = 279 SDLK_PAGEUP = 280 SDLK_PAGEDOWN = 281 SDLK_F1 = 282 SDLK_F2 = 283 SDLK_F3 = 284 SDLK_F4 = 285 SDLK_F5 = 286 SDLK_F6 = 287 SDLK_F7 = 288 SDLK_F8 = 289 SDLK_F9 = 290 SDLK_F10 = 291 SDLK_F11 = 292 SDLK_F12 = 293 SDLK_F13 = 294 SDLK_F14 = 295 SDLK_F15 = 296 SDLK_NUMLOCK = 300 SDLK_CAPSLOCK = 301 SDLK_SCROLLOCK = 302 SDLK_RSHIFT = 303 SDLK_LSHIFT = 304 SDLK_RCTRL = 305 SDLK_LCTRL = 306 SDLK_RALT = 307 SDLK_LALT = 308 SDLK_RMETA = 309 SDLK_LMETA = 310 SDLK_LSUPER = 311 SDLK_RSUPER = 312 SDLK_MODE = 313 SDLK_COMPOSE = 314 SDLK_HELP = 315 SDLK_PRINT = 316 SDLK_SYSREQ = 317 SDLK_BREAK = 318 SDLK_MENU = 319 SDLK_POWER = 320 SDLK_EURO = 321 SDLK_UNDO = 322 SDLK_LAST = 324 KMOD_NONE = 0000h KMOD_LSHIFT = 0001h KMOD_RSHIFT = 0002h KMOD_LCTRL = 0040h KMOD_RCTRL = 0080h KMOD_LALT = 0100h KMOD_RALT = 0200h KMOD_LMETA = 0400h KMOD_RMETA = 0800h KMOD_NUM = 1000h KMOD_CAPS = 2000h KMOD_MODE = 4000h KMOD_RESERVED = 8000h KMOD_CTRL = 00C0h KMOD_SHIFT = 0003h KMOD_ALT = 0300h KMOD_META = 0C00h WMcursor equ WMcursor struct SDL_Rect .x rw 1 .y rw 1 .w rw 1 .h rw 1 ends struct SDL_Cursor .area SDL_Rect .hot_x rw 1 .hot_y rw 1 .data rd 1 .mask rd 1 .save rd 2 .wm_cursor rd 1 ends SDL_BUTTON_LEFT = 1 SDL_BUTTON_MIDDLE = 2 SDL_BUTTON_RIGHT = 3 SDL_BUTTON_WHEELUP = 4 SDL_BUTTON_WHEELDOWN = 5 SDL_BUTTON_LMASK = 1 SDL_BUTTON_MMASK = 2 SDL_BUTTON_RMASK = 4 SDL_MUTEX_TIMEDOUT = 1 RW_SEEK_SET = 0 RW_SEEK_CUR = 1 RW_SEEK_END = 2 struct SDL_RWops .seek rd 1 .read rd 1 .write rd 1 .close rd 1 .type rd 1 .append rd 1 .h rd 1 ends SDL_MAJOR_VERSION = 1 SDL_MINOR_VERSION = 2 SDL_PATCHLEVEL = 11 struct SDL_version .major rb 1 .minor rb 1 .patch rb 1 .pad0 rb 1 ends SDL_ALPHA_OPAQUE = 255 SDL_ALPHA_TRANSPARENT = 0 struct SDL_Color .r rb 1 .g rb 1 .b rb 1 .unused rb 1 ends SDL_Colour equ SDL_Color struct SDL_Palette .ncolors rd 1 .colors rd 1 ends struct SDL_PixelFormat .palette rd 1 .BitsPerPixel rb 1 .BytesPerPixel rb 1 .Rloss rb 1 .Gloss rb 1 .Bloss rb 1 .Aloss rb 1 .Rshift rb 1 .Gshift rb 1 .Bshift rb 1 .Ashift rb 1 .pad0 rb 2 .Rmask rd 1 .Gmask rd 1 .Bmask rd 1 .Amask rd 1 .colorkey rd 1 .alpha rb 1 .pad1 rb 3 ends struct SDL_Surface .flags rd 1 .format rd 1 .w rd 1 .h rd 1 .pitch rw 1 .pad0 rb 2 .pixels rd 1 .offset rd 1 .hwdata rd 1 .clip_rect SDL_Rect .unused1 rd 1 .locked rd 1 .map rd 1 .format_version rd 1 .refcount rd 1 ends SDL_SWSURFACE = 00000000h SDL_HWSURFACE = 00000001h SDL_ASYNCBLIT = 00000004h SDL_ANYFORMAT = 10000000h SDL_HWPALETTE = 20000000h SDL_DOUBLEBUF = 40000000h SDL_FULLSCREEN = 80000000h SDL_OPENGL = 00000002h SDL_OPENGLBLIT = 0000000Ah SDL_RESIZABLE = 00000010h SDL_NOFRAME = 00000020h SDL_HWACCEL = 00000100h SDL_SRCCOLORKEY = 00001000h SDL_RLEACCELOK = 00002000h SDL_RLEACCEL = 00004000h SDL_SRCALPHA = 00010000h SDL_PREALLOC = 01000000h SDL_YV12_OVERLAY = 32315659h SDL_IYUV_OVERLAY = 56555949h SDL_YUY2_OVERLAY = 32595559h SDL_UYVY_OVERLAY = 59565955h SDL_YVYU_OVERLAY = 55595659h struct SDL_Overlay .format rd 1 .w rd 1 .h rd 1 .planes rd 1 .pitches rd 1 .pixels rd 1 .hwfuncs rd 1 .hwdata rd 1 .hw_overlay rd 1 .UnusedBits rd 1 ends SDL_GL_RED_SIZE = 0 SDL_GL_GREEN_SIZE = 1 SDL_GL_BLUE_SIZE = 2 SDL_GL_ALPHA_SIZE = 3 SDL_GL_BUFFER_SIZE = 4 SDL_GL_DOUBLEBUFFER = 5 SDL_GL_DEPTH_SIZE = 6 SDL_GL_STENCIL_SIZE = 7 SDL_GL_ACCUM_RED_SIZE = 8 SDL_GL_ACCUM_GREEN_SIZE = 9 SDL_GL_ACCUM_BLUE_SIZE = 10 SDL_GL_ACCUM_ALPHA_SIZE = 11 SDL_GL_STEREO = 12 SDL_GL_MULTISAMPLEBUFFERS = 13 SDL_GL_MULTISAMPLESAMPLES = 14 SDL_GL_ACCELERATED_VISUAL = 15 SDL_GL_SWAP_CONTROL = 16 SDL_LOGPAL = 01h SDL_PHYSPAL = 02h SDL_GRAB_QUERY = -1 SDL_GRAB_OFF = 0 SDL_GRAB_ON = 1 SDL_GRAB_FULLSCREEN = 2 macro SDL_MUSTLOCK reg, surfaceptr { local surface if reg in <eax,ebx,ecx,edx,esi,edi> virtual at surfaceptr surface SDL_Surface end virtual mov reg, [surface.flags] and reg, SDL_HWSURFACE or SDL_ASYNCBLIT or SDL_RLEACCEL or reg, [surface.offset] test reg, reg else display 'SDL_MUSTLOCK error' error end if } |
Changes to freshlib/equates/_sqlite3.inc.
1 2 3 4 5 6 7 | ; SQLite result codes SQLITE_OK = 0 ; Successful result SQLITE_ERROR = 1 ; SQL error or missing database SQLITE_INTERNAL = 2 ; An internal logic error in SQLite SQLITE_PERM = 3 ; Access permission denied SQLITE_ABORT = 4 ; Callback routine requested an abort | > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SQLite equates definitions. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; SQLite result codes SQLITE_OK = 0 ; Successful result SQLITE_ERROR = 1 ; SQL error or missing database SQLITE_INTERNAL = 2 ; An internal logic error in SQLite SQLITE_PERM = 3 ; Access permission denied SQLITE_ABORT = 4 ; Callback routine requested an abort |
︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | SQLITE_SCHEMA = 17 ; The database schema changed SQLITE_TOOBIG = 18 ; Too much data for one row of a table SQLITE_CONSTRAINT = 19 ; Abort due to constraint violation SQLITE_MISMATCH = 20 ; Data type mismatch SQLITE_MISUSE = 21 ; Library used incorrectly SQLITE_NOLFS = 22 ; Uses OS features not supported on host SQLITE_AUTH = 23 ; Authorization denied SQLITE_ROW = 100 ; sqlite_step() has another row ready SQLITE_DONE = 101 ; sqlite_step() has finished executing SQLITE_CREATE_INDEX = 1 ; // Index Name Table Name */ SQLITE_CREATE_TABLE = 2 ; // Table Name NULL */ SQLITE_CREATE_TEMP_INDEX = 3 ; // Index Name Table Name */ SQLITE_CREATE_TEMP_TABLE = 4 ; // Table Name NULL */ SQLITE_CREATE_TEMP_TRIGGER = 5 ; // Trigger Name Table Name */ | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | SQLITE_SCHEMA = 17 ; The database schema changed SQLITE_TOOBIG = 18 ; Too much data for one row of a table SQLITE_CONSTRAINT = 19 ; Abort due to constraint violation SQLITE_MISMATCH = 20 ; Data type mismatch SQLITE_MISUSE = 21 ; Library used incorrectly SQLITE_NOLFS = 22 ; Uses OS features not supported on host SQLITE_AUTH = 23 ; Authorization denied SQLITE_FORMAT = 24 ; Auxiliary database format error SQLITE_RANGE = 25 ; 2nd parameter to sqlite3_bind out of range SQLITE_NOTADB = 26 ; File opened that is not a database file SQLITE_NOTICE = 27 ; Notifications from sqlite3_log() SQLITE_WARNING = 28 ; Warnings from sqlite3_log() SQLITE_ROW = 100 ; sqlite_step() has another row ready SQLITE_DONE = 101 ; sqlite_step() has finished executing ; SQLite extended result codes. SQLITE_IOERR_READ = SQLITE_IOERR or (1 shl 8) SQLITE_IOERR_SHORT_READ = SQLITE_IOERR or (2 shl 8) SQLITE_IOERR_WRITE = SQLITE_IOERR or (3 shl 8) SQLITE_IOERR_FSYNC = SQLITE_IOERR or (4 shl 8) SQLITE_IOERR_DIR_FSYNC = SQLITE_IOERR or (5 shl 8) SQLITE_IOERR_TRUNCATE = SQLITE_IOERR or (6 shl 8) SQLITE_IOERR_FSTAT = SQLITE_IOERR or (7 shl 8) SQLITE_IOERR_UNLOCK = SQLITE_IOERR or (8 shl 8) SQLITE_IOERR_RDLOCK = SQLITE_IOERR or (9 shl 8) SQLITE_IOERR_DELETE = SQLITE_IOERR or (10 shl 8) SQLITE_IOERR_BLOCKED = SQLITE_IOERR or (11 shl 8) SQLITE_IOERR_NOMEM = SQLITE_IOERR or (12 shl 8) SQLITE_IOERR_ACCESS = SQLITE_IOERR or (13 shl 8) SQLITE_IOERR_CHECKRESERVEDLOCK = SQLITE_IOERR or (14 shl 8) SQLITE_IOERR_LOCK = SQLITE_IOERR or (15 shl 8) SQLITE_IOERR_CLOSE = SQLITE_IOERR or (16 shl 8) SQLITE_IOERR_DIR_CLOSE = SQLITE_IOERR or (17 shl 8) SQLITE_IOERR_SHMOPEN = SQLITE_IOERR or (18 shl 8) SQLITE_IOERR_SHMSIZE = SQLITE_IOERR or (19 shl 8) SQLITE_IOERR_SHMLOCK = SQLITE_IOERR or (20 shl 8) SQLITE_IOERR_SHMMAP = SQLITE_IOERR or (21 shl 8) SQLITE_IOERR_SEEK = SQLITE_IOERR or (22 shl 8) SQLITE_IOERR_DELETE_NOENT = SQLITE_IOERR or (23 shl 8) SQLITE_IOERR_MMAP = SQLITE_IOERR or (24 shl 8) SQLITE_IOERR_GETTEMPPATH = SQLITE_IOERR or (25 shl 8) SQLITE_IOERR_CONVPATH = SQLITE_IOERR or (26 shl 8) SQLITE_IOERR_VNODE = SQLITE_IOERR or (27 shl 8) SQLITE_IOERR_AUTH = SQLITE_IOERR or (28 shl 8) SQLITE_LOCKED_SHAREDCACHE = SQLITE_LOCKED or (1 shl 8) SQLITE_BUSY_RECOVERY = SQLITE_BUSY or (1 shl 8) SQLITE_BUSY_SNAPSHOT = SQLITE_BUSY or (2 shl 8) SQLITE_CANTOPEN_NOTEMPDIR = SQLITE_CANTOPEN or (1 shl 8) SQLITE_CANTOPEN_ISDIR = SQLITE_CANTOPEN or (2 shl 8) SQLITE_CANTOPEN_FULLPATH = SQLITE_CANTOPEN or (3 shl 8) SQLITE_CANTOPEN_CONVPATH = SQLITE_CANTOPEN or (4 shl 8) SQLITE_CORRUPT_VTAB = SQLITE_CORRUPT or (1 shl 8) SQLITE_READONLY_RECOVERY = SQLITE_READONLY or (1 shl 8) SQLITE_READONLY_CANTLOCK = SQLITE_READONLY or (2 shl 8) SQLITE_READONLY_ROLLBACK = SQLITE_READONLY or (3 shl 8) SQLITE_READONLY_DBMOVED = SQLITE_READONLY or (4 shl 8) SQLITE_ABORT_ROLLBACK = SQLITE_ABORT or (2 shl 8) SQLITE_CONSTRAINT_CHECK = SQLITE_CONSTRAINT or (1 shl 8) SQLITE_CONSTRAINT_COMMITHOOK = SQLITE_CONSTRAINT or (2 shl 8) SQLITE_CONSTRAINT_FOREIGNKEY = SQLITE_CONSTRAINT or (3 shl 8) SQLITE_CONSTRAINT_FUNCTION = SQLITE_CONSTRAINT or (4 shl 8) SQLITE_CONSTRAINT_NOTNULL = SQLITE_CONSTRAINT or (5 shl 8) SQLITE_CONSTRAINT_PRIMARYKEY = SQLITE_CONSTRAINT or (6 shl 8) SQLITE_CONSTRAINT_TRIGGER = SQLITE_CONSTRAINT or (7 shl 8) SQLITE_CONSTRAINT_UNIQUE = SQLITE_CONSTRAINT or (8 shl 8) SQLITE_CONSTRAINT_VTAB = SQLITE_CONSTRAINT or (9 shl 8) SQLITE_CONSTRAINT_ROWID = SQLITE_CONSTRAINT or (10 shl 8) SQLITE_NOTICE_RECOVER_WAL = SQLITE_NOTICE or (1 shl 8) SQLITE_NOTICE_RECOVER_ROLLBACK = SQLITE_NOTICE or (2 shl 8) SQLITE_WARNING_AUTOINDEX = SQLITE_WARNING or (1 shl 8) SQLITE_AUTH_USER = SQLITE_AUTH or (1 shl 8) SQLITE_CREATE_INDEX = 1 ; // Index Name Table Name */ SQLITE_CREATE_TABLE = 2 ; // Table Name NULL */ SQLITE_CREATE_TEMP_INDEX = 3 ; // Index Name Table Name */ SQLITE_CREATE_TEMP_TABLE = 4 ; // Table Name NULL */ SQLITE_CREATE_TEMP_TRIGGER = 5 ; // Trigger Name Table Name */ |
︙ | ︙ | |||
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | ; sqliteCreateCollation and sqliteCreateFunction. SQLITE_UTF8 = 1 SQLITE_UTF16LE = 2 SQLITE_UTF16BE = 3 SQLITE_UTF16 = 4 ; Use native byte order SQLITE_ANY = 5 ; values returned by sqliteColumnType SQLITE_INTEGER = 1 SQLITE_FLOAT = 2 SQLITE_TEXT = 3 SQLITE_BLOB = 4 SQLITE_NULL = 5 SQLITE_STATIC = 0 SQLITE_TRANSIENT = -1 | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | ; sqliteCreateCollation and sqliteCreateFunction. SQLITE_UTF8 = 1 SQLITE_UTF16LE = 2 SQLITE_UTF16BE = 3 SQLITE_UTF16 = 4 ; Use native byte order SQLITE_ANY = 5 SQLITE_DETERMINISTIC = $800 ; values returned by sqliteColumnType SQLITE_INTEGER = 1 SQLITE_FLOAT = 2 SQLITE_TEXT = 3 SQLITE_BLOB = 4 SQLITE_NULL = 5 SQLITE_STATIC = 0 SQLITE_TRANSIENT = -1 ; SQLITE configuration parameters SQLITE_CONFIG_SINGLETHREAD = 1 ; nil SQLITE_CONFIG_MULTITHREAD = 2 ; nil SQLITE_CONFIG_SERIALIZED = 3 ; nil SQLITE_CONFIG_MALLOC = 4 ; sqlite3_mem_methods* SQLITE_CONFIG_GETMALLOC = 5 ; sqlite3_mem_methods* SQLITE_CONFIG_SCRATCH = 6 ; void*, int sz, int N SQLITE_CONFIG_PAGECACHE = 7 ; void*, int sz, int N SQLITE_CONFIG_HEAP = 8 ; void*, int nByte, int min SQLITE_CONFIG_MEMSTATUS = 9 ; boolean SQLITE_CONFIG_MUTEX = 10 ; sqlite3_mutex_methods* SQLITE_CONFIG_GETMUTEX = 11 ; sqlite3_mutex_methods* ; SQLite open_v2 flags: SQLITE_OPEN_READONLY = $00000001 ; Ok for sqlite3_open_v2() SQLITE_OPEN_READWRITE = $00000002 ; Ok for sqlite3_open_v2() SQLITE_OPEN_CREATE = $00000004 ; Ok for sqlite3_open_v2() SQLITE_OPEN_DELETEONCLOSE = $00000008 ; VFS only SQLITE_OPEN_EXCLUSIVE = $00000010 ; VFS only SQLITE_OPEN_AUTOPROXY = $00000020 ; VFS only SQLITE_OPEN_URI = $00000040 ; Ok for sqlite3_open_v2() SQLITE_OPEN_MEMORY = $00000080 ; Ok for sqlite3_open_v2() SQLITE_OPEN_MAIN_DB = $00000100 ; VFS only SQLITE_OPEN_TEMP_DB = $00000200 ; VFS only SQLITE_OPEN_TRANSIENT_DB = $00000400 ; VFS only SQLITE_OPEN_MAIN_JOURNAL = $00000800 ; VFS only SQLITE_OPEN_TEMP_JOURNAL = $00001000 ; VFS only SQLITE_OPEN_SUBJOURNAL = $00002000 ; VFS only SQLITE_OPEN_MASTER_JOURNAL = $00004000 ; VFS only SQLITE_OPEN_NOMUTEX = $00008000 ; Ok for sqlite3_open_v2() SQLITE_OPEN_FULLMUTEX = $00010000 ; Ok for sqlite3_open_v2() SQLITE_OPEN_SHAREDCACHE = $00020000 ; Ok for sqlite3_open_v2() SQLITE_OPEN_PRIVATECACHE = $00040000 ; Ok for sqlite3_open_v2() SQLITE_OPEN_WAL = $00080000 ; VFS only ; These constants define all valid values for the "checkpoint mode" passed ; as the third parameter to the [sqlite3_wal_checkpoint_v2()] interface. ; See the sqlite3_wal_checkpoint_v2() documentation for details on the ; meaning of each of these checkpoint modes. SQLITE_CHECKPOINT_PASSIVE = 0 ; Do as much as possible w/o blocking SQLITE_CHECKPOINT_FULL = 1 ; Wait for writers, then checkpoint SQLITE_CHECKPOINT_RESTART = 2 ; Like FULL but wait for readers SQLITE_CHECKPOINT_TRUNCATE = 3 ; Like RESTART but also truncate WAL |
Changes to freshlib/equates/_zlib1.inc.
1 2 3 4 5 6 7 | ; zlib.h -- interface of the 'zlib' general purpose compression library ; version 1.2.3, July 18th, 2005 ; ; Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler ; ; This software is provided 'as-is', without any express or implied ; warranty. In no event will the authors be held liable for any damages | > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Constants and structures definitions for ZLIB library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; zlib.h -- interface of the 'zlib' general purpose compression library ; version 1.2.3, July 18th, 2005 ; ; Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler ; ; This software is provided 'as-is', without any express or implied ; warranty. In no event will the authors be held liable for any damages |
︙ | ︙ | |||
39 40 41 42 43 44 45 | ZLIB_VERSION equ "1.2.3" ZLIB_VERNUM = $1230 struct z_stream | | | | | | | | | | | | | | | | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | ZLIB_VERSION equ "1.2.3" ZLIB_VERNUM = $1230 struct z_stream .ptrNextIn dd ? ; next input byte .AvailIn dd ? ; number of bytes available at next_in .TotalIn dd ? ; total nb of input bytes read so far .ptrNextOut dd ? ; next output byte should be put there .AvailOut dd ? ; remaining free space at next_out .TotalOut dd ? ; total nb of bytes output so far .ptrMsg dd ? ; last error message, NULL if no error .ptrState dd ? ; not visible by applications .zalloc dd ? ; used to allocate the internal state .zfree dd ? ; used to free the internal state .opaque dd ? ; private data object passed to zalloc and zfree .data_type dd ? ; best guess about the data type: binary or text .adler dd ? ; adler32 value of the uncompressed data .reserved dd ? ; reserved for future use ends ; constants ; Allowed flush values; see deflate() and inflate() below for details Z_NO_FLUSH = 0 |
︙ | ︙ |
Changes to freshlib/equates/allequates.inc.
|
| > > > > > > > > > > > > > | > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Combined include of all equates. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; Very generic constants! TRUE = 1 FALSE = 0 NULL = 0 regEDI = 0 regESI = 1 regEBP = 2 regESP = 3 regEBX = 4 regEDX = 5 regECX = 6 regEAX = 7 include '%TargetOS%/allequates.inc' include '_sqlite3.inc' include '_zlib1.inc' include '_sdl.inc' |
Added freshlib/freshlib.asm.
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: FreshLib amalgamation include file for the library code. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ include 'simpledebug/debug.asm' include 'system/all.asm' include 'data/all.asm' match =GUI, LIB_MODE { include 'graphics/all.asm' include 'gui/all.asm' } |
Added freshlib/freshlib.inc.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: FreshLib amalgamation include file for the non code definitions. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ LIB_MODE equ GUI include 'macros/allmacros.inc' include 'equates/allequates.inc' |
Added freshlib/graphics/Dummy/draw.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Draw library contains procedures for drawing oprtations. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ lsEndCapRound = 0 lsEndCapSquare = 0 lsEndCapFlat = 0 lsJoinRound = 0 lsJoinBevel = 0 lsJoinMiter = 0 proc DrawLine, .context, .x1, .y1, .x2, .y2 begin return endp proc DrawFillRect, .context, .x, .y, .width, .height, .color begin return endp proc Draw, .raster, .pDrawPoints begin return endp |
Added freshlib/graphics/Dummy/fonts.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Fonts managing library. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ proc FontCreate, .fontface, .size, .weight, .flags begin stc return endp proc FontDestroy, .font begin return endp |
Added freshlib/graphics/Dummy/images.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Memory based images manipulation library. ; ; Target OS: Dummy ; ; Dependencies: memory.asm ; ; Notes: ;_________________________________________________________________________________________ ; only 16, 24 and 32 bpp are supported. ; It is stupid to support palleted modes and even 24bpp is not good... body CreateImage begin stc return endp body DestroyImage begin return endp body DrawImage begin return endp |
Added freshlib/graphics/Dummy/text.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Text drawing library. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ proc DrawString, .context, .ptrString, .len, .x, .y, .font, .color begin return endp proc DrawStringOpaque, .context, .ptrString, .len, .x, .y, .font, .color, .background begin return endp proc DrawColoredString, .context, .ptrString, .pCharAttr, .str_len_bytes, .x, .y, .char_offs, .fontwidth, .fontheight begin return endp proc GetTextBounds, .context, .ptrString, .len, .font begin return endp ; returns: ; eax - x offset of the baseline of the string. ; edx - y offset of the baseline of the string. proc GetTextOffset, .context, .ptrString, .len, .font begin return endp |
Added freshlib/graphics/KolibriOS/draw.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Draw library contains procedures for drawing oprtations. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ lsEndCapRound = 0 lsEndCapSquare = 0 lsEndCapFlat = 0 lsJoinRound = 0 lsJoinBevel = 0 lsJoinMiter = 0 proc DrawLine, .context, .x1, .y1, .x2, .y2 begin mov ebx, [.x1] mov ecx, [.y1] shl ebx, 16 shl ecx, 16 mov bx, word [.x2] mov cx, word [.y2] mov edx, [.context] mov edx, [edx+TContext.drawmode] return endp proc DrawFillRect, .context, .x, .y, .width, .height, .color begin return endp proc Draw, .raster, .pDrawPoints begin return endp |
Added freshlib/graphics/KolibriOS/fonts.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Fonts managing library. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; needed for FreeType support. proc FTCRequester as FT_Face_Requester begin return endp body FontCreate begin return endp body FontDestroy begin return endp body GetFontMetrics begin return endp |
Added freshlib/graphics/KolibriOS/images.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Memory based images manipulation library. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ body CreateImage begin pushad stdcall GetMem, sizeof.TImage jc .finish mov esi, eax xor eax, eax xor ebx, ebx inc eax mov ecx, [.width] mov edx, [.height] cmp ecx, ebx cmovle ecx, eax cmp edx, ebx cmovle edx, eax mov [esi+TImage.width], ecx mov [esi+TImage.height], edx mov [esi+TImage.orgX], ebx mov [esi+TImage.orgY], ebx mov [esi+TImage.wrapW], ecx mov [esi+TImage.wrapH], edx lea eax, [4*ecx] imul eax, edx stdcall GetMem, eax jc .error mov [esi+TImage.pPixels], eax mov [esp+4*regEAX], esi lea esi, [esi+TImage.lock] stdcall MutexCreate, 0, esi stdcall MutexRelease, esi clc .finish: popad return .error: stdcall FreeMem, esi stc jmp .finish endp body DestroyImage begin pushad mov esi, [.ptrImage] test esi, esi jz .finish stdcall FreeMem, [esi+TImage.pPixels] lea edi, [esi+TImage.lock] stdcall MutexDestroy, edi stdcall FreeMem, esi .finish: popad return endp body DrawImageRect begin return endp |
Added freshlib/graphics/KolibriOS/text.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Text drawing library. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ iglobal var flagFreeTypeLoadFlags = FT_LOAD_RENDER or FT_LOAD_TARGET_LCD or FT_LOAD_NO_AUTOHINT or FT_LOAD_COLOR endg uglobal var FTC_CMapCache_Lookup = 0 var FTC_ImageCache_LookupScaler = 0 endg body DrawDecomposedString ;, .pImage, .pArray, .x, .y, .font, .color .scaler FTC_ScalerRec .glyph dd ? .startX dd ? begin pushad mov edx, [.font] xor ecx, ecx mov [.scaler.face_id], edx mov [.scaler.width], ecx mov eax, [edx+__TFont.height] inc ecx mov [.scaler.height], eax mov [.scaler.pixel], ecx ; ecx = 1 mov eax, [.x] mov [.startX], eax mov esi, [.pArray] xor edi, edi dec edi .char_loop: inc edi cmp edi, [esi+TArray.count] jae .finish cmp word [esi+TArray.array+8*edi+TTextChar.width], 0 je .char_ok cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, [esi+TArray.array+8*edi+TTextChar.code] lea ecx, [.scaler] lea edx, [.glyph] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [flagFreeTypeLoadFlags], eax, edx, 0 test eax, eax jnz .char_ok mov ebx, [.glyph] mov ecx, [.x] mov edx, [.y] add ecx, [ebx+FT_BitmapGlyphRec.left] sub edx, [ebx+FT_BitmapGlyphRec.top] lea eax, [ebx+FT_BitmapGlyphRec.bitmap] stdcall __DrawGlyph, [.pImage], eax, ecx, edx, [.color] movzx eax, word [esi+TArray.array+8*edi+TTextChar.width] add [.x], eax .char_ok: ; check for new line. movzx eax, word [esi+TArray.array+8*edi+TTextChar.height] test eax, eax jz .char_loop add [.y], eax mov eax, [.startX] mov [.x], eax jmp .char_loop .finish: popad return endp ; Draws the string on the image using the specified font and color. ; The string is drawn in one line. The control symbols are not ; processed. The tabs are not expanded or replaced with spaces. ; ; Arguments: ; .pImage - pointer to the image where to draw the text. ; .pString - pointer to a UTF-8 string. ; .len - how many bytes from the string to be drawn. If -1, the whole string will be drawn. ; .x - X coordinate, where to start drawing. ; .y - Y coordinate of the baseline where to draw the string. ; .font - the font to be used. ; .color - ARGB color to draw the glyphs. ; ;;;;;;;; Returns: ;;;;;;;; EAX - the width of the string in pixels. ;;;;;;;; EBX - the ascender of the string. It is negative. ;;;;;;;; EDX - the height of the string in pixels. body DrawString ;, .pImage, .pString, .len, .x, .y, .font, .color .scaler FTC_ScalerRec .glyph dd ? .miny dd ? .maxy dd ? .startX dd ? begin pushad mov edx, [.font] xor ecx, ecx mov [.scaler.face_id], edx mov [.scaler.width], ecx mov eax, [edx+__TFont.height] inc ecx mov [.scaler.height], eax mov [.scaler.pixel], ecx ; ecx = 1 ror ecx, 1 ; ecx = $80000000 mov [.maxy], ecx dec ecx mov [.miny], ecx ; ecx = $7fffffff mov eax, [.x] mov [.startX], eax mov esi, [.pString] .char_loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx sub [.len], edx jb .finish test eax, eax jz .finish cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, eax lea ecx, [.scaler] lea edx, [.glyph] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [flagFreeTypeLoadFlags], eax, edx, 0 test eax, eax jnz .char_loop mov ebx, [.glyph] mov ecx, [.x] mov edx, [.y] add ecx, [ebx+FT_BitmapGlyphRec.left] sub edx, [ebx+FT_BitmapGlyphRec.top] cmp edx, [.miny] jge @f mov [.miny], edx @@: mov eax, edx add eax, [ebx+FT_BitmapGlyphRec.bitmap.rows] cmp eax, [.maxy] jle @f mov [.maxy], eax @@: lea eax, [ebx+FT_BitmapGlyphRec.bitmap] stdcall __DrawGlyph, [.pImage], eax, ecx, edx, [.color] mov eax, [ebx+FT_BitmapGlyphRec.root.advance.x] sar eax, 16 ; format 16.16 fixed decimal point. add [.x], eax jmp .char_loop .finish: ; mov eax, [.x] ; mov edx, [.maxy] ; mov ebx, [.miny] ; sub eax, [.startX] ; sub edx, ebx ; sub ebx, [.y] ; mov [esp+4*regEAX], eax ; mov [esp+4*regEBX], ebx ; mov [esp+4*regEDX], edx popad return endp ; returns: ; EAX - array with decomposed string. ; EDX - maximal bearing_Y of the string. ; ECX - maximal descender of the string. body TextDecompose ;, .hString, .font .scaler FTC_ScalerRec .glyph dd ? .miny dd ? .maxy dd ? begin pushad mov edx, [.font] xor ecx, ecx mov [.scaler.face_id], edx mov [.scaler.width], ecx mov eax, [edx+__TFont.height] inc ecx mov [.scaler.height], eax mov [.scaler.pixel], ecx ; ecx = 1 ror ecx, 1 ; ecx = $80000000 mov [.maxy], ecx dec ecx mov [.miny], ecx ; ecx = $7fffffff stdcall StrPtr, [.hString] mov esi, eax stdcall CreateArray, sizeof.TTextChar mov edi, eax .char_loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx mov ebx, eax test eax, eax jz .end cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, eax lea ecx, [.scaler] lea edx, [.glyph] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [flagFreeTypeLoadFlags], eax, edx, 0 xor ecx, ecx test eax, eax jnz .glyph_size_ok ; zero width glyph ???? mov ecx, [.glyph] mov eax, [ecx+FT_BitmapGlyphRec.top] neg eax cmp eax, [.miny] jge @f mov [.miny], eax @@: add eax, [ecx+FT_BitmapGlyphRec.bitmap.rows] cmp eax, [.maxy] jle @f mov [.maxy], eax @@: mov ecx, [ecx+FT_BitmapGlyphRec.root.advance.x] ; format 16.16 fixed decimal point. sar ecx, 16 ; format 16.16 .glyph_size_ok: stdcall AddArrayItems, edi, 1 mov edi, edx mov dword [eax+TTextChar.width], ecx mov [eax+TTextChar.code], ebx jmp .char_loop .end: clc .finish: mov [esp+4*regEAX], edi mov eax, [.miny] neg eax mov ecx, [.maxy] mov [esp+4*regEDX], eax mov [esp+4*regECX], ecx add ecx, eax mov [edi+TArray.lparam], ecx popad return endp ; Returns an array with the widths from the begining of the text to the every character inside the string. proc GetTextWidthsArray, .hString, .font .scaler FTC_ScalerRec .glyph dd ? .x dd ? begin pushad mov edx, [.font] xor ecx, ecx mov [.scaler.face_id], edx mov [.scaler.width], ecx mov eax, [edx+__TFont.height] inc ecx mov [.scaler.height], eax mov [.scaler.pixel], ecx ; ecx = 1 stdcall StrPtr, [.hString] mov esi, eax stdcall CreateArray, 4 mov edi, eax xor ebx, ebx .char_loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx test eax, eax jz .end cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, eax lea ecx, [.scaler] lea edx, [.glyph] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [flagFreeTypeLoadFlags], eax, edx, 0 test eax, eax jnz .glyph_size_ok ; zero width glyph ???? mov ecx, [.glyph] mov ecx, [ecx+FT_BitmapGlyphRec.root.advance.x] ; format 16.16 fixed decimal point. add ebx, ecx .glyph_size_ok: stdcall AddArrayItems, edi, 1 mov edi, edx mov edx, ebx sar edx, 16 ; format 16.16 mov [eax], edx jmp .char_loop .end: clc .finish: mov [esp+4*regEAX], edi popad return .error: stc popad return endp ; Computes the width and height of the text. ; ; Arguments: ; .pString - pointer to a UTF-8 string. ; .len - how many bytes from the string to be used. If -1 the whole string will be scanned. ; .font - the font to be used for the computations. ; ; Returns: ; EAX - the width of the string in pixels. ; EBX - the ascender of the string. It is negative. ; EDX - the height of the string in pixels. body GetTextBounds ;, .pString, .len, .font .scaler FTC_ScalerRec .glyph dd ? .x dd ? .miny dd ? .maxy dd ? .charlen dd ? begin pushad mov edx, [.font] xor ecx, ecx mov [.scaler.face_id], edx mov [.scaler.width], ecx mov [.x], ecx mov eax, [edx+__TFont.height] inc ecx mov [.scaler.height], eax mov [.scaler.pixel], ecx ; ecx = 1 ror ecx, 1 ; ecx = $80000000 mov [.maxy], ecx dec ecx mov [.miny], ecx ; ecx = $7fffffff mov esi, [.pString] .char_loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx mov [.charlen], edx test eax, eax jz .finish cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, eax lea ecx, [.scaler] lea edx, [.glyph] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [flagFreeTypeLoadFlags], eax, edx, 0 test eax, eax jnz .char_loop mov ebx, [.glyph] sub eax, [ebx+FT_BitmapGlyphRec.top] ; eax = 0 here mov edx, eax add edx, [ebx+FT_BitmapGlyphRec.bitmap.rows] cmp eax, [.miny] jge @f mov [.miny], eax @@: cmp edx, [.maxy] jle @f mov [.maxy], edx @@: mov eax, [ebx+FT_GlyphRec.advance.x] sar eax, 16 ; format 16.16 fixed decimal point. add [.x], eax mov eax, [.charlen] sub [.len], eax ja .char_loop .finish: mov eax, [.x] mov edx, [.maxy] mov ebx, [.miny] sub edx, ebx mov [esp+4*regEAX], eax mov [esp+4*regEBX], ebx mov [esp+4*regEDX], edx popad return endp proc __DrawGlyph, .pImage, .pFTBitmap, .x, .y, .color .spitch dd ? .dpitch dd ? .drect RECT .srect RECT .pixel_mode dd ? .sstart dd ? .dstart dd ? .xsize dd ? .bpp dd ? .bit_ofs dd ? begin pushad stdcall __fix_color, [.color], regEAX mov [.color], eax mov ebx, [.pImage] mov edi, [.pFTBitmap] ; the glyph pixel mode handling. movzx eax, [edi+FT_Bitmap.pixel_mode] cmp eax, FT_PIXEL_MODE_BGRA ja .finish mov [.pixel_mode], eax movzx eax, [.bpp_const+eax] mov [.bpp], eax ; Clip the glyph to the image surface. mov eax, [ebx+TImage.width] mov ecx, [ebx+TImage.height] mov [.drect.right], eax mov [.drect.bottom], ecx xor eax, eax mov [.drect.left], eax mov [.drect.top], eax mov eax, [.x] mov ecx, [.y] mov [.srect.left], eax mov [.srect.top], ecx mov eax, [edi+FT_Bitmap.width] cmp [.pixel_mode], FT_PIXEL_MODE_LCD jne @f cdq mov ecx, 3 div ecx @@: add eax, [.srect.left] mov [.srect.right], eax mov eax, [.srect.top] add eax, [edi+FT_Bitmap.rows] mov [.srect.bottom], eax lea eax, [.srect] lea ecx, [.drect] stdcall RectIntersect, ecx, eax, ecx jc .finish ; the rectangles does not intersect! mov eax, [.drect.left] mov ecx, [.drect.top] sub eax, [.x] sub ecx, [.y] mov [.srect.left], eax mov [.srect.top], ecx mov eax, [.drect.right] mov ecx, [.drect.bottom] sub eax, [.drect.left] sub ecx, [.drect.top] mov [.srect.right], eax ; width! mov [.srect.bottom], ecx ; height! ; End of clipping code - [.srect] contains the rectangle of the glyph that have to be drawn (left, top, width, height). ; [.drect] contains the destination rectangle. Both have the same size. mov ecx, [edi+FT_Bitmap.pitch] mov [.spitch], ecx ; glyph pixel pointer mov esi, [edi+FT_Bitmap.buffer] test esi, esi jz .finish mov eax, [.srect.top] mov ecx, [.srect.left] imul eax, [.spitch] imul ecx, [.bpp] mov [.bit_ofs], ecx shr ecx, 3 ; byte offs and [.bit_ofs], 7 ; bit offs add esi, ecx add esi, eax ; TImage destination pixel pointer mov edi, [ebx+TImage.pPixels] mov ecx, [ebx+TImage.width] mov eax, [.drect.top] imul eax, ecx add eax, [.drect.left] lea edi, [edi+4*eax] ; in bytes. shl ecx, 2 mov [.dpitch], ecx ; prepare MMX constants pxor mm0, mm0 ; mm0 = 0000 0000 0000 0000 pcmpeqw mm1, mm1 ; mm1 = ffff ffff ffff ffff psrlw mm1, 15 ; mm1 = 0001 0001 0001 0001 psllw mm1, 8 ; mm1 = 0100 0100 0100 0100 movq mm2, mm1 ; mm2 = 0001 0001 0001 0001 psllq mm2, 48 ; mm2 = 0100 0000 0000 0000 .loopy: mov [.sstart], esi mov [.dstart], edi mov eax, [.srect.right] ; width! mov [.xsize], eax cmp [.pixel_mode], FT_PIXEL_MODE_BGRA je .loopx32 cmp [.pixel_mode], FT_PIXEL_MODE_LCD je .loopx24 cmp [.pixel_mode], FT_PIXEL_MODE_GRAY je .loopx8 cmp [.pixel_mode], FT_PIXEL_MODE_MONO jne .finish lodsd bswap eax mov ch, 32 mov cl, byte [.bit_ofs] shl eax, cl sub ch, cl .loopx1: shl eax, 1 dec ch jnz @f lodsd bswap eax mov ch, 32 @@: jnc .next_x movd mm7, [.color] ; source pixel. movd mm6, [edi] ; destination pixel. movq mm5, mm7 psrlq mm5, 24 ; alpha source punpckldq mm5, mm5 ; punpcklbw mm6, mm0 ; byte to word destination pixel packssdw mm5, mm5 ; mm5 = As, As, As, As punpcklbw mm7, mm0 ; byte to word source pixel movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) psrlq mm5, 16 ; mm5 = 0 As As As por mm5, mm2 ; mm5 = $100 As As As pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) pmullw mm7, mm5 ; Cs = Cs * As (For alpha As = $100*As ) paddusw mm6, mm7 ; Cd = Cs + Cd (For alpha Ad = $100*As + Ad*Bs) psrlw mm6, 8 ; Cd = Cd/256 (For alpha Ad = As + Ad*Bs/$100) packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi], mm6 .next_x: add edi, 4 dec [.xsize] jnz .loopx1 jmp .nexty .loopx8: movzx eax, byte [esi] ; intensity add esi, 1 movd mm6, [.color] movd mm7, eax punpcklbw mm6, mm0 ; byte to word color. punpckldq mm7, mm7 ; packssdw mm7, mm7 ; mm7 = I, I, I, I pmullw mm7, mm6 ; mm7 is the color to blend = Cs*256 movd mm6, [edi] ; Destination color punpcklbw mm6, mm0 ; byte to word destination pixel movq mm5, mm7 psrlq mm5, 56 ; alpha source punpckldq mm5, mm5 packssdw mm5, mm5 ; mm5 = As, As, As, As movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs paddusw mm6, mm7 ; Cd = 256*Cs + Cd*(256-As) psrlw mm6, 8 ; Cd = Cd/256 packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi], mm6 add edi, 4 dec [.xsize] jnz .loopx8 jmp .nexty .loopx24: movzx eax, byte [esi] movzx edx, byte [esi+1] lea eax, [eax+2*edx] movzx edx, byte [esi+2] add eax, edx shr eax, 2 ; grayscale. movd mm6, [.color] movd mm7, eax punpcklbw mm6, mm0 ; byte to word color. punpckldq mm7, mm7 ; packssdw mm7, mm7 ; mm7 = I, I, I, I pmullw mm7, mm6 ; mm7 is the color to blend = Cs*256 movd mm6, [edi] ; Destination color punpcklbw mm6, mm0 ; byte to word destination pixel movq mm5, mm7 psrlq mm5, 56 ; alpha source punpckldq mm5, mm5 packssdw mm5, mm5 ; mm5 = As, As, As, As movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs paddusw mm6, mm7 ; Cd = 256*Cs + Cd*(256-As) psrlw mm6, 8 ; Cd = Cd/256 packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi], mm6 add esi, 3 add edi, 4 dec [.xsize] jnz .loopx24 jmp .nexty .loopx32: movd mm7, [esi] ; source pixel. movd mm6, [edi] ; destination pixel. movq mm5, mm7 psrlq mm5, 24 ; alpha source punpckldq mm5, mm5 ; punpcklbw mm6, mm0 ; byte to word destination pixel packssdw mm5, mm5 ; mm5 = As, As, As, As punpcklbw mm7, mm0 ; byte to word source pixel movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) psrlq mm5, 16 ; mm5 = 0 As As As por mm5, mm2 ; mm5 = $100 As As As pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) pmullw mm7, mm5 ; Cs = Cs * As (For alpha As = $100*As ) paddusw mm6, mm7 ; Cd = Cs + Cd (For alpha Ad = $100*As + Ad*Bs) psrlw mm6, 8 ; Cd = Cd/256 (For alpha Ad = As + Ad*Bs/$100) packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi], mm6 add edi, 4 add esi, 4 dec [.xsize] jnz .loopx32 jmp .nexty .nexty: mov esi, [.sstart] add esi, [.spitch] mov edi, [.dstart] add edi, [.dpitch] dec [.srect.bottom] ; height jnz .loopy .finish: emms popad return .bpp_const db 0, 1, 8, 2, 4, 24, 8, 32 endp |
Deleted freshlib/graphics/Linux/draw.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added freshlib/graphics/Linux/fonts.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Fonts managing library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ iglobal if used FontAttr.mono | used FontAttr.size | used FontAttr.weight | used FontAttr.italic label FontAttr byte .mono db ':spacing=mono', 0 .size db ':pixelsize=', 0 .weight db ':weight=', 0 .italic db ':slant=italic', 0 .regular db ':slant=roman', 0 ;fwLight = 0 ;fwDemilight = 1 ;fwNormal = 2 ;fwMedium = 3 ;fwDemibold = 4 ;fwBold = 5 ;fwExtraBold = 6 ;fwBlack = 7 .font_weights db 0, 55, 80, 100, 180, 200, 205, 210 end if endg ;initialize InitFonts ;begin ; cinvoke FcInit ; return ;endp ; ; ;finalize FinalizeFonts ;begin ; cinvoke FcFini ; return ;endp proc FTCRequester as FT_Face_Requester .res dd ? .idx dd ? .face dd ? begin pushad mov esi, [.face_id] stdcall StrDup, [esi+__TFont.hFontFace] mov ebx, eax test [esi+__TFont.flags], ffMonospaced jz @f stdcall StrCat, ebx, FontAttr.mono @@: mov eax, [esi+__TFont.weight] and eax, 7 movzx eax, byte [FontAttr.font_weights+eax] stdcall StrCat, ebx, FontAttr.weight stdcall NumToStr, eax, ntsDec or ntsUnsigned push eax stdcall StrCat, ebx, eax stdcall StrDel ; from the stack mov eax, FontAttr.regular test [esi+__TFont.flags], ffItalic jz @f mov eax, FontAttr.italic @@: stdcall StrCat, ebx, eax stdcall StrPtr, ebx ; OutputLn eax cinvoke FcNameParse, eax stdcall StrDel, ebx test eax, eax jnz @f cinvoke FcNameParse, txt "Helvetica" DebugMsg "Error: Bad pattern fallback." @@: mov ebx, eax cinvoke FcDefaultSubstitute, ebx cinvoke FcConfigSubstitute, 0, ebx, 0 lea eax, [.res] cinvoke FcFontMatch, 0, ebx, eax push eax cinvoke FcPatternDestroy, ebx pop ebx ; if defined options.DebugMode & options.DebugMode ; cinvoke FcPatternPrint, ebx ; end if lea eax, [.res] cinvoke FcPatternGetString, ebx, FC_FILE, 0, eax OutputLn [.res] lea eax, [.idx] cinvoke FcPatternGetInteger, ebx, FC_INDEX, 0, eax mov edi, [.pFace] mov eax, [.res] cinvoke FT_New_Face, [FTLibrary], eax, [.idx], edi .finish: mov [esp+4*regEAX], eax cinvoke FcPatternDestroy, ebx popad cret endp FC_FILE text 'file' FC_INDEX text 'index' FC_PIXEL_SIZE text 'pixelsize' body FontCreate begin push edx stdcall GetMem, sizeof.__TFont mov edx, eax stdcall StrDup, [.font_name] mov [edx+__TFont.hFontFace], eax mov eax, [.size] mov [edx+__TFont.height], eax mov eax, [.weight] mov [edx+__TFont.weight], eax mov eax, [.flags] mov [edx+__TFont.flags], eax mov eax, edx pop edx return endp body FontDestroy begin pushad mov edi, [.pFont] cinvoke FTC_Manager_RemoveFaceID, [FTCManager], edi stdcall StrDel, [edi+__TFont.hFontFace] stdcall FreeMem, edi popad return endp ; returns some font metrics ; ; Arguments: ; .font - the font ; Returns: ; EAX - the line height of the font. ; EBX - the ascender of the font. ; EDX - the descender of the font. body GetFontMetrics .face dd ? .scaler FTC_ScalerRec .size dd ? begin push esi ecx mov edx, [.font] mov ecx, [edx+__TFont.height] xor eax, eax mov [.scaler.face_id], edx mov [.scaler.width], eax mov [.scaler.height], ecx mov [.scaler.pixel], 1 mov [.scaler.x_res], eax mov [.scaler.y_res], eax lea eax, [.scaler] lea edx, [.size] cinvoke FTC_Manager_LookupSize, [FTCManager], eax, edx test eax, eax jnz .error .size_found: mov edx, [.size] mov eax, [edx+FT_SizeRec.metrics.height] mov ebx, [edx+FT_SizeRec.metrics.ascender] mov edx, [edx+FT_SizeRec.metrics.descender] sar eax, 6 sar ebx, 6 sar edx, 6 .finish: clc pop ecx esi return .error: OutputValue "FTC_Manager_LookupSize error: $", eax, 16, -1 lea eax, [.face] cinvoke FTC_Manager_LookupFace, [FTCManager], [.font], eax test eax, eax jnz .fall_back mov edx, [.face] mov esi, [edx+FT_FaceRec.num_fixed_sizes] dec esi js .fall_back imul esi, sizeof.FT_Bitmap_Size add esi, [edx+FT_FaceRec.available_sizes] movzx eax, [esi+FT_Bitmap_Size.height] mov [.scaler.height], eax mov edx, [.font] mov [edx+__TFont.height], eax lea eax, [.scaler] lea edx, [.size] cinvoke FTC_Manager_LookupSize, [FTCManager], eax, edx test eax, eax jz .size_found ; Very stupid fallback. movzx eax, [esi+FT_Bitmap_Size.height] mov edx, -2 lea ebx, [eax-2] jmp .finish ; Event more stupid fallback... .fall_back: mov eax, 1 mov ebx, 1 mov edx, 1 jmp .finish endp struct _FcFontSet .nFont dd ? .sFont dd ? .pList dd ? ends body GetFontList ;, .font .pPat dd ? ; pattern .pOs dd ? ; object set .res dd ? begin pushad stdcall CreateArray, 4 mov edi, eax mov esi, [.font] cinvoke FcPatternCreate mov [.pPat], eax cinvoke FcObjectSetBuild, txt "family", 0 mov [.pOs], eax cinvoke FcFontList, 0, [.pPat], [.pOs] mov esi, eax mov ebx, [esi+_FcFontSet.pList] mov ecx, [esi+_FcFontSet.nFont] .loop: dec ecx js .end_loop push ecx lea eax, [.res] cinvoke FcPatternGetString, [ebx], txt "family", 0, eax pop ecx test eax, eax jnz .next call .search_list jc .next stdcall StrDupMem, [.res] ; Some font structure??? push eax stdcall AddArrayItems, edi, 1 mov edi, edx pop dword [eax] .next: lea ebx, [ebx+4] jmp .loop .end_loop: cinvoke FcFontSetDestroy, esi cinvoke FcObjectSetDestroy, [.pOs] cinvoke FcPatternDestroy, [.pPat] stdcall SortArray, edi, StrCompSort, FALSE mov [esp+4*regEAX], edi popad return ; Returns CF = 1 if the string is already in the list. .search_list: push ecx mov ecx, [edi+TArray.count] clc .sloop: dec ecx js .ends ; CF here is always 0 stdcall StrCompNoCase, [.res], [edi+TArray.array+4*ecx] jnc .sloop .ends: pop ecx retn endp |
Changes to freshlib/graphics/Linux/images.asm.
|
| > > > > > > > > > > > > > | | > > | > | > > > > > > > | | < < < > > | | | > | | > | > | > > > > > > > > > > > > > > | | > > > > > > | | > | > > > | > | > > > | > > > > > > > > > > > > > > > > > > | | | > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > | > > | > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > > | > > | > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Memory based images manipulation library. ; ; Target OS: Linux ; ; Dependencies: memory.asm ; ; Notes: ;_________________________________________________________________________________________ struct TLinuxImage . TImage ; os dependent data .readonly dd ? .shmSeg dd ? .shmID dd ? ends body CreateImage2 .atch __xShmAttachReq begin pushad stdcall GetMem, sizeof.TLinuxImage jc .finish mov esi, eax xor eax, eax xor ebx, ebx inc eax mov ecx, [.width] mov edx, [.height] test ecx, ecx cmovz ecx, eax cmp edx, ebx cmovle edx, eax mov [esi+TLinuxImage.width], ecx mov [esi+TLinuxImage.height], edx mov [esi+TLinuxImage.orgX], ebx mov [esi+TLinuxImage.orgY], ebx mov [esi+TLinuxImage.wrapW], ecx mov [esi+TLinuxImage.wrapH], edx mov [esi+TLinuxImage.shmSeg], ebx mov [esi+TLinuxImage.shmID], ebx mov [esi+TLinuxImage.readonly], ebx lea eax, [4*ecx] imul eax, edx cmp [flagSharedMemory], 0 je .fall_back cmp [.fScreen], 0 je .fall_back cinvoke shmget, IPC_PRIVATE, eax, IPC_CREAT or 666o test eax, eax js .error mov [esi+TLinuxImage.shmID], eax cinvoke shmat, eax, 0, 0 cmp eax, -1 je .error mov [esi+TLinuxImage.pPixels], eax cinvoke shmctl, [esi+TLinuxImage.shmID], IPC_RMID, 0 stdcall xGetID, appConn, esi mov [esi+TLinuxImage.shmSeg], eax mov ecx, [appConn.exShm.OpCode] mov edx, [esi+TLinuxImage.shmID] mov [.atch.op], cl mov [.atch.minor], opShmAttach mov [.atch.length], sizeof.__xShmAttachReq/4 mov [.atch.shmSeg], eax mov [.atch.shmID], edx mov [.atch.read_only], 0 lea eax, [.atch] stdcall xSend, appConn, eax .exit_ok: mov [esp+4*regEAX], esi lea esi, [esi+TLinuxImage.lock] stdcall MutexCreate, 0, esi stdcall MutexRelease, esi clc .finish: popad return .error: ; int3 stdcall FreeMem, esi stc jmp .finish .fall_back: stdcall GetMem, eax mov [esi+TLinuxImage.pPixels], eax test eax, eax jz .error jmp .exit_ok endp body DestroyImage .dtch __xShmDetachReq begin pushad mov esi, [.ptrImage] test esi, esi jz .finish .lock_wait: stdcall LockImg, esi jc .lock_wait ; possible hang! mov edx, [esi+TLinuxImage.shmSeg] test edx, edx jz .fall_back mov eax, [appConn.exShm.OpCode] mov [.dtch.op], al mov [.dtch.minor], opShmDetach mov [.dtch.length], sizeof.__xShmDetachReq/4 mov [.dtch.shmSeg], edx ; DebugMsg ; OutputValue "Dettach ShmID: ", [esi+TLinuxImage.shmID], 16, 8 ; OutputValue " Shm address: ", [esi+TLinuxImage.pPixels], 16, 8 lea eax, [.dtch] stdcall xSend, appConn, eax ; OutputValue "DestroyImage Sequence: ", [appConn.Sequence], 10, -1 ; DebugMsg xor eax, eax xchg eax, [esi+TLinuxImage.pPixels] cinvoke shmdt, eax test eax, eax jz @f int3 @@: stdcall xFreeID, appConn, [esi+TLinuxImage.shmSeg] .exit_ok: lea edi, [esi+TLinuxImage.lock] stdcall MutexDestroy, edi stdcall FreeMem, esi .finish: popad return .fall_back: xor eax, eax xchg eax, [esi+TLinuxImage.pPixels] stdcall FreeMem, eax jmp .exit_ok endp body LockImg ;, .pImage begin push eax edx mov edx, [.pImage] lea eax, [edx+TLinuxImage.lock] stdcall WaitForMutex, eax, -1 pop edx eax return endp body UnlockImg ;, .pImage begin push eax mov eax, [.pImage] test eax, eax jz .unlocked lea eax, [eax+TLinuxImage.lock] stdcall MutexRelease, eax .unlocked: clc pop eax return endp body DrawImageRect .maskUL RECT ; upper left .maskUR RECT ; upper right .maskLL RECT ; lower left .maskLR RECT ; lower right .sRect RECT ; the rectangle used for intersecting the source rectangle. .fDraw rd 1 begin pushad mov esi, [.pImage] test esi, esi jz .finish lea eax, [esi+TImage.lock] stdcall WaitForMutex, eax, -1 jc .finish inc [esi+TLinuxImage.readonly] xor eax, eax mov [.fDraw], eax mov ecx, [esi+TImage.wrapW] mov edx, [esi+TImage.wrapH] mov [.maskUL.left], eax ; UL mov [.maskUL.top], eax ; UL mov [.maskLL.left], eax ; LL mov [.maskUR.top], eax ; UR mov [.maskUL.right], ecx ; UL mov [.maskUL.bottom], edx ; UL mov [.maskLR.left], ecx ; LR mov [.maskLR.top], edx ; LR mov [.maskLL.top], edx ; LL mov [.maskLL.right], ecx ; LL mov [.maskUR.left], ecx ; UR mov [.maskUR.bottom], edx ; UR shl ecx, 1 shl edx, 1 mov [.maskUR.right], ecx ; UR mov [.maskLL.bottom], edx ; LL mov [.maskLR.right], ecx ; LR mov [.maskLR.bottom], edx ; LR mov ecx, [.xSrc] mov edx, [.ySrc] mov [.sRect.left], ecx mov [.sRect.top], edx add ecx, [.width] add edx, [.height] mov [.sRect.right], ecx mov [.sRect.bottom], edx lea eax, [.sRect] lea edx, [.maskUL] stdcall RectIntersect2, eax, edx jc .exit ; at least some part of the image, has to be drawn. mov ebx, [esi+TImage.orgX] mov edx, [esi+TImage.orgY] add [.sRect.left], ebx add [.sRect.top], edx add [.sRect.right], ebx add [.sRect.bottom], edx mov ebx, [esi+TImage.wrapW] mov edx, [esi+TImage.wrapH] lea edi, [.maskUL] lea ecx, [.sRect] mov eax, 3 .loop_rect: stdcall RectIntersect2, edi, ecx cmc rcl [.fDraw], 1 test eax, 1 ; horizontal jnz .h_ok sub [edi+RECT.left], ebx sub [edi+RECT.right], ebx .h_ok: test eax, 2 ; vertical jnz .v_ok sub [edi+RECT.top], edx sub [edi+RECT.bottom], edx .v_ok: stdcall RectToBounds, edi, edi add edi, sizeof.RECT dec eax jns .loop_rect ; Now draw the rectangles. lea ebx, [.maskLR] mov edi, 3 .draw_loop: shr [.fDraw], 1 jnc .next setz cl ; is it the last rectangle to draw? movzx ecx, cl mov eax, [.xDst] mov edx, [.yDst] test edi, 1 jz .x_ok add eax, [.maskUL.right] .x_ok: test edi, 2 jz .y_ok add edx, [.maskUR.bottom] .y_ok: stdcall xPutImage, [.where], esi, [ebx+RECT.left], [ebx+RECT.top], eax, edx, [ebx+RECT.right], [ebx+RECT.bottom], ecx .next: cmp [.fDraw], 0 je .end_draw sub ebx, sizeof.RECT dec edi jns .draw_loop .end_draw: cmp [esi+TLinuxImage.shmSeg], 0 ; The image will be unlocked elsewhere, when the X server finish drawing. jne .finish .exit: mov [esi+TLinuxImage.readonly], 0 .finish: stdcall UnlockImg, esi popad return endp proc xPutImage, .drawable, .image, .srcX, .srcY, .dstX, .dstY, .width, .height, .events .shm __xShmPutImageReq .put __xPutImageReq .gc __xCreateContextReq .fc __xFreeContextReq begin pushad mov esi, [.image] mov ecx, [esi+TLinuxImage.shmSeg] test ecx, ecx jz .fall_back mov ebx, [.drawable] stdcall xGetObj, appConn, ebx jc .finish mov edx, [eax+TWindow.context] mov eax, [appConn.exShm.OpCode] mov [.shm.op], al mov [.shm.minor], opShmPutImage mov [.shm.length], sizeof.__xShmPutImageReq/4 mov [.shm.drawable], ebx mov [.shm.context], edx mov [.shm.shmSeg], ecx mov [.shm.offset], 0 mov eax, [esi+TLinuxImage.width] mov ebx, [esi+TLinuxImage.height] mov [.shm.total_w], ax mov [.shm.total_h], bx mov eax, [.srcX] mov ebx, [.srcY] mov ecx, [.width] mov edx, [.height] mov [.shm.src_x], ax mov [.shm.src_y], bx mov [.shm.src_w], cx mov [.shm.src_h], dx mov eax, [.dstX] mov ebx, [.dstY] mov ecx, [.events] mov [.shm.dst_x], ax mov [.shm.dst_y], bx mov [.shm.depth], $20 mov [.shm.format], ZPixmap mov [.shm.send_event], cl lea eax, [.shm] stdcall xSend, appConn, eax .finish: popad return .fall_back: mov [.gc.op], 0 mov [.fc.op], 0 mov [.put.op], opPutImage mov [.put.format], ZPixmap mov [.put.length], 0 mov ebx, [.drawable] stdcall xGetObj, appConn, ebx jc .finish cmp eax, objPixmap jne .window call .create_context jmp .context_ok .window: mov eax, [eax+TWindow.context] .context_ok: mov [.put.drawable], ebx mov [.put.gc], eax mov ecx, [.width] mov edx, [.height] mov eax, [.dstX] mov ebx, [.dstY] mov [.put.width], cx mov [.put.height], dx imul ecx, edx add ecx, sizeof.__xPutImageReq/4 mov [.put.long_len], ecx mov [.put.dst_x], ax mov [.put.dst_y], bx mov [.put.left_pad], 0 mov [.put.depth], $20 mov ebx, [.image] mov esi, [ebx+TImage.pPixels] mov eax, [.srcY] mov edx, [ebx+TImage.width] imul eax, edx add eax, [.srcX] lea esi, [esi+4*eax] mov ecx, [.width] shl ecx, 2 mov ebx, [.height] stdcall xReqStart, appConn lea eax, [.put] stdcall xReqSend, appConn, eax, sizeof.__xPutImageReq .row_loop: stdcall xReqSend, appConn, esi, ecx lea esi, [esi+4*edx] dec ebx jnz .row_loop stdcall xReqEnd, appConn cmp [.fc.op], 0 je .finish lea eax, [.fc] stdcall xSend, appConn, eax stdcall xFreeID, appConn, [.fc.gcID] jmp .finish .create_context: stdcall xGetID, appConn, objContext mov edx, [.drawable] mov [.gc.op], opCreateGC mov [.fc.op], opFreeGC mov [.gc.length], sizeof.__xCreateContextReq/4 mov [.fc.length], sizeof.__xFreeContextReq/4 mov [.gc.gcID], eax mov [.fc.gcID], eax mov [.gc.drawable], edx mov [.gc.value_mask], 0 ; foreground and background lea edx, [.gc] stdcall xSend, appConn, edx retn endp proc __xPutImageToBitmap, .pixmap, .image, .srcX, .srcY, .dstX, .dstY, .width, .height .gc __xCreateContextReq .fc __xFreeContextReq .put __xPutImageShortReq .data dd ? begin pushad ; create graphic context. stdcall xGetID, appConn, objContext mov edx, [.pixmap] mov [.gc.op], opCreateGC mov [.fc.op], opFreeGC mov [.gc.length], sizeof.__xCreateContextReq/4 mov [.fc.length], sizeof.__xFreeContextReq/4 mov [.gc.gcID], eax mov [.fc.gcID], eax mov [.put.gc], eax mov [.gc.drawable], edx mov [.put.drawable], edx mov [.gc.value_mask], 0 ; foreground and background lea edx, [.gc] stdcall xSend, appConn, edx ; put the image mov eax, [.width] add eax, 31 and eax, $ffffffe0 mov edx, [.height] mov ecx, eax imul ecx, edx shr ecx, 5 add ecx, 6 mov [.put.op], opPutImage mov [.put.format], 0 ; mov [.put.length], cx mov [.put.width], ax mov [.put.height], dx mov eax, [.dstX] mov edx, [.dstY] mov [.put.dst_x], ax mov [.put.dst_y], dx mov [.put.left_pad], 0 mov [.put.depth], 1 stdcall xReqStart, appConn lea eax, [.put] stdcall xReqSend, appConn, eax, sizeof.__xPutImageShortReq mov esi, [.image] mov eax, [.srcY] mov edx, [.srcX] imul eax, [esi+TImage.width] add edx, eax lea edx, [4*edx] add edx, [esi+TImage.pPixels] mov edi, [.height] .loopy: xor ecx, ecx mov ebx, [.width] .loopx: cmp byte [edx+4*ecx], $80 rcr [.data], 1 inc ecx dec ebx test ebx, $1f jnz .loopx lea eax, [.data] stdcall xReqSend, appConn, eax, 4 test ebx, ebx jnz .loopx mov eax, [esi+TImage.width] lea edx, [edx+4*eax] dec edi jnz .loopy stdcall xReqEnd, appConn ; free the context lea eax, [.fc] stdcall xSend, appConn, eax stdcall xFreeID, appConn, [.fc.gcID] popad return endp |
Changes to freshlib/graphics/Linux/text.asm.
|
| > > > > > > > > > > > > > > > > > | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > | > > > > | > | > > > > > > > > > > > > > > > > > | | > | | > > | > > | > > | | | > | > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > > > | > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > > > > > > > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > | | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > > > > > > > > > > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > > > > > > > > > > | > > | > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Text drawing library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Uses XFT library to renter the text. ;_________________________________________________________________________________________ uses libFT, libFC iglobal if used FTLoadFlags FTLoadFlags dd FT_LOAD_RENDER or FT_LOAD_COLOR or FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LIGHT dd FT_LOAD_RENDER or FT_LOAD_COLOR or FT_LOAD_TARGET_NORMAL dd FT_LOAD_RENDER or FT_LOAD_COLOR or FT_LOAD_TARGET_MONO dd FT_LOAD_RENDER or FT_LOAD_COLOR or FT_LOAD_TARGET_LCD_V end if endg body DrawDecomposedString ;, .pImage, .pArray, .x, .y, .font, .color .scaler FTC_ScalerRec .glyph dd ? .startX dd ? .flags dd ? begin pushad stdcall LockImg, [.pImage] jc .exit mov eax, [TextRenderOptions] and eax, 3 mov eax, [FTLoadFlags+4*eax] mov [.flags], eax mov edx, [.font] xor ecx, ecx mov [.scaler.face_id], edx mov [.scaler.width], ecx mov eax, [edx+__TFont.height] inc ecx mov [.scaler.height], eax mov [.scaler.pixel], ecx ; ecx = 1 mov eax, [.x] mov [.startX], eax mov esi, [.pArray] xor edi, edi dec edi .char_loop: inc edi cmp edi, [esi+TArray.count] jae .finish cmp word [esi+TArray.array+8*edi+TTextChar.width], 0 je .char_ok cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, [esi+TArray.array+8*edi+TTextChar.code] lea ecx, [.scaler] lea edx, [.glyph] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [.flags], eax, edx, 0 test eax, eax jnz .char_ok mov ebx, [.glyph] mov ecx, [.x] mov edx, [.y] add ecx, [ebx+FT_BitmapGlyphRec.left] sub edx, [ebx+FT_BitmapGlyphRec.top] lea eax, [ebx+FT_BitmapGlyphRec.bitmap] stdcall __DrawGlyph, [.pImage], eax, ecx, edx, [.color] movzx eax, word [esi+TArray.array+8*edi+TTextChar.width] add [.x], eax .char_ok: ; check for new line. movzx eax, word [esi+TArray.array+8*edi+TTextChar.height] test eax, eax jz .char_loop add [.y], eax mov eax, [.startX] mov [.x], eax jmp .char_loop .finish: stdcall UnlockImg, [.pImage] .exit: popad return endp ; Draws the string on the image using the specified font and color. ; The string is drawn in one line. The control symbols are not ; processed. The tabs are not expanded or replaced with spaces. ; ; Arguments: ; .pImage - pointer to the image where to draw the text. ; .pString - pointer to a UTF-8 string. ; .len - how many bytes from the string to be drawn. If -1, the whole string will be drawn. ; .x - X coordinate, where to start drawing. ; .y - Y coordinate of the baseline where to draw the string. ; .font - the font to be used. ; .color - ARGB color to draw the glyphs. ; ;;;;;;;; Returns: ;;;;;;;; EAX - the width of the string in pixels. ;;;;;;;; EBX - the ascender of the string. ;;;;;;;; EDX - the height of the string in pixels. body DrawString ;, .pImage, .pString, .len, .x, .y, .font, .color .scaler FTC_ScalerRec .glyph dd ? .miny dd ? .maxy dd ? .startX dd ? .flags dd ? begin pushad stdcall LockImg, [.pImage] jc .exit mov eax, [TextRenderOptions] and eax, 3 mov eax, [FTLoadFlags+4*eax] mov [.flags], eax mov edx, [.font] xor ecx, ecx mov [.scaler.face_id], edx mov [.scaler.width], ecx mov eax, [edx+__TFont.height] inc ecx mov [.scaler.height], eax mov [.scaler.pixel], ecx ; ecx = 1 ror ecx, 1 ; ecx = $80000000 mov [.maxy], ecx dec ecx mov [.miny], ecx ; ecx = $7fffffff mov eax, [.x] mov [.startX], eax mov esi, [.pString] .char_loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx sub [.len], edx jc .finish test eax, eax jz .finish cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, eax lea ecx, [.scaler] lea edx, [.glyph] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [.flags], eax, edx, 0 test eax, eax jnz .char_loop mov ebx, [.glyph] mov ecx, [.x] mov edx, [.y] add ecx, [ebx+FT_BitmapGlyphRec.left] sub edx, [ebx+FT_BitmapGlyphRec.top] cmp edx, [.miny] jge @f mov [.miny], edx @@: mov eax, edx add eax, [ebx+FT_BitmapGlyphRec.bitmap.rows] cmp eax, [.maxy] jle @f mov [.maxy], eax @@: lea eax, [ebx+FT_BitmapGlyphRec.bitmap] stdcall __DrawGlyph, [.pImage], eax, ecx, edx, [.color] mov eax, [ebx+FT_BitmapGlyphRec.root.advance.x] sar eax, 16 ; format 16.16 fixed decimal point. add [.x], eax jmp .char_loop .finish: stdcall UnlockImg, [.pImage] mov eax, [.x] mov ebx, [.miny] mov edx, [.maxy] sub eax, [.startX] sub edx, ebx sub ebx, [.y] neg ebx mov [esp+4*regEAX], eax mov [esp+4*regEBX], ebx mov [esp+4*regEDX], edx .exit: popad return endp ; returns: ; EAX - TArray of TTextChar with decomposed string. ; EDX - maximal bearing_Y of the string. ; ECX - maximal descender of the string. body TextDecompose ;, .hString, .font .scaler FTC_ScalerRec .glyph dd ? .flags dd ? begin pushad mov eax, [TextRenderOptions] and eax, 3 mov eax, [FTLoadFlags+4*eax] mov [.flags], eax mov edx, [.font] xor ecx, ecx mov [.scaler.face_id], edx mov [.scaler.width], ecx mov eax, [edx+__TFont.height] inc ecx mov [.scaler.height], eax mov [.scaler.pixel], ecx ; ecx = 1 stdcall StrPtr, [.hString] mov esi, eax stdcall CreateArray, sizeof.TTextChar mov edi, eax .char_loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx mov ebx, eax test eax, eax jz .end cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, eax lea ecx, [.scaler] lea edx, [.glyph] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [.flags], eax, edx, 0 xor ecx, ecx test eax, eax jnz .glyph_size_ok ; zero width glyph ???? mov ecx, [.glyph] mov eax, [ecx+FT_BitmapGlyphRec.top] neg eax add eax, [ecx+FT_BitmapGlyphRec.bitmap.rows] mov ecx, [ecx+FT_BitmapGlyphRec.root.advance.x] ; format 16.16 fixed decimal point. sar ecx, 16 ; format 16.16 .glyph_size_ok: stdcall AddArrayItems, edi, 1 mov edi, edx mov dword [eax+TTextChar.width], ecx mov [eax+TTextChar.code], ebx jmp .char_loop .end: clc .finish: mov [esp+4*regEAX], edi popad return endp ; Returns an array with the widths from the begining of the text to the every character inside the string. proc GetTextWidthsArray, .hString, .font .scaler FTC_ScalerRec .glyph dd ? .x dd ? begin pushad mov edx, [.font] xor ecx, ecx mov [.scaler.face_id], edx mov [.scaler.width], ecx mov eax, [edx+__TFont.height] inc ecx mov [.scaler.height], eax mov [.scaler.pixel], ecx ; ecx = 1 stdcall StrPtr, [.hString] mov esi, eax stdcall CreateArray, 4 mov edi, eax xor ebx, ebx .char_loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx test eax, eax jz .end cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, eax lea ecx, [.scaler] lea edx, [.glyph] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [flagFreeTypeLoadFlags], eax, edx, 0 test eax, eax jnz .glyph_size_ok ; zero width glyph ???? mov ecx, [.glyph] mov ecx, [ecx+FT_BitmapGlyphRec.root.advance.x] ; format 16.16 fixed decimal point. add ebx, ecx .glyph_size_ok: stdcall AddArrayItems, edi, 1 mov edi, edx mov edx, ebx sar edx, 16 ; format 16.16 mov [eax], edx jmp .char_loop .end: clc .finish: mov [esp+4*regEAX], edi popad return .error: stc popad return endp ; Computes the width and height of the text. ; ; Arguments: ; .pString - pointer to a UTF-8 string. ; .len - how many bytes from the string to be used. If -1 the whole string will be scanned. ; .font - the font to be used for the computations. ; ; Returns: ; EAX - the width of the string in pixels. ; EDX - the height of the string in pixels. body GetTextBounds ;, .pString, .len, .font .scaler FTC_ScalerRec .glyph dd ? .x dd ? .miny dd ? .maxy dd ? .charlen dd ? .flags dd ? begin pushad mov eax, [TextRenderOptions] and eax, 3 mov eax, [FTLoadFlags+4*eax] mov [.flags], eax mov edx, [.font] xor ecx, ecx mov eax, [edx+__TFont.height] mov [.scaler.face_id], edx mov [.scaler.width], ecx mov [.scaler.height], eax mov [.scaler.pixel], 1 mov [.x], ecx stc rcr ecx, 1 ; ecx = $80000000 mov [.maxy], ecx dec ecx mov [.miny], ecx ; ecx = $7fffffff mov esi, [.pString] .char_loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx mov [.charlen], edx test eax, eax jz .finish cinvoke FTC_CMapCache_Lookup, [FTCCMapCache], [.font], -1, eax lea edx, [.glyph] lea ecx, [.scaler] cinvoke FTC_ImageCache_LookupScaler, [FTCImageCache], ecx, [.flags], eax, edx, 0 test eax, eax jnz .char_loop mov ebx, [.glyph] sub eax, [ebx+FT_BitmapGlyphRec.top] ; eax = 0 here mov edx, eax add edx, [ebx+FT_BitmapGlyphRec.bitmap.rows] cmp eax, [.miny] jge @f mov [.miny], eax @@: cmp edx, [.maxy] jle @f mov [.maxy], edx @@: mov eax, [ebx+FT_GlyphRec.advance.x] add eax, $8000 sar eax, 16 ; format 16.16 fixed decimal point. add [.x], eax mov eax, [.charlen] sub [.len], eax ja .char_loop .finish: mov eax, [.x] mov edx, [.maxy] sub edx, [.miny] mov [esp+4*regEAX], eax mov [esp+4*regEDX], edx popad return endp proc __DrawGlyph, .pImage, .pFTBitmap, .x, .y, .color .spitch dd ? .dpitch dd ? .drect RECT .srect RECT .pixel_mode dd ? .sstart dd ? .dstart dd ? .xsize dd ? .bpp dd ? .bit_ofs dd ? .wrapx dd ? .wrapy dd ? begin pushad stdcall __fix_color, [.color], regEAX mov [.color], eax mov ebx, [.pImage] mov edi, [.pFTBitmap] ; the glyph pixel mode handling. movzx eax, [edi+FT_Bitmap.pixel_mode] cmp eax, FT_PIXEL_MODE_BGRA ja .finish mov [.pixel_mode], eax movzx eax, [.bpp_const+eax] mov [.bpp], eax ; Clip the glyph to the image surface. mov eax, [ebx+TImage.wrapW] mov ecx, [ebx+TImage.wrapH] mov [.drect.right], eax mov [.drect.bottom], ecx xor eax, eax mov [.drect.left], eax mov [.drect.top], eax mov eax, [.x] mov ecx, [.y] mov [.srect.left], eax mov [.srect.top], ecx mov eax, [edi+FT_Bitmap.width] cmp [.pixel_mode], FT_PIXEL_MODE_LCD jne @f cdq mov ecx, 3 div ecx @@: add eax, [.srect.left] mov [.srect.right], eax mov eax, [.srect.top] add eax, [edi+FT_Bitmap.rows] mov [.srect.bottom], eax lea eax, [.srect] lea ecx, [.drect] stdcall RectIntersect, ecx, eax, ecx jc .finish ; the rectangles does not intersect! mov eax, [.drect.left] mov ecx, [.drect.top] sub eax, [.x] sub ecx, [.y] mov [.srect.left], eax mov [.srect.top], ecx mov eax, [.drect.right] mov ecx, [.drect.bottom] sub eax, [.drect.left] sub ecx, [.drect.top] mov [.srect.right], eax ; width! mov [.srect.bottom], ecx ; height! ; End of clipping code - [.srect] contains the rectangle of the glyph that have to be drawn (left, top, width, height). ; [.drect] contains the destination rectangle. Both have the same size. mov ecx, [edi+FT_Bitmap.pitch] mov [.spitch], ecx ; glyph pixel pointer mov esi, [edi+FT_Bitmap.buffer] test esi, esi jz .finish mov eax, [.srect.top] mov ecx, [.srect.left] imul eax, [.spitch] imul ecx, [.bpp] mov [.bit_ofs], ecx shr ecx, 3 ; byte offs and [.bit_ofs], 7 ; bit offs add esi, ecx add esi, eax ; TImage destination pixel pointer mov edi, [ebx+TImage.pPixels] mov edx, [ebx+TImage.wrapH] mov ecx, [ebx+TImage.width] mov eax, [.drect.top] add eax, [ebx+TImage.orgY] cmp eax, edx jb @f sub eax, edx @@: imul eax, ecx imul edx, ecx lea edx, [edi+4*edx] ; pointer to wrapy point. lea edi, [edi+4*eax] ; pointer to the start of character line. shl ecx, 2 mov [.wrapy], edx mov [.dpitch], ecx ; prepare MMX constants pxor mm0, mm0 ; mm0 = 0000 0000 0000 0000 pcmpeqw mm1, mm1 ; mm1 = ffff ffff ffff ffff psrlw mm1, 15 ; mm1 = 0001 0001 0001 0001 psllw mm1, 8 ; mm1 = 0100 0100 0100 0100 movq mm2, mm1 ; mm2 = 0001 0001 0001 0001 psllq mm2, 48 ; mm2 = 0100 0000 0000 0000 .loopy: mov [.sstart], esi mov edx, [.drect.left] ; X coordinate mov ecx, [ebx+TImage.wrapW] add edx, [ebx+TImage.orgX] cmp edx, ecx jb @f sub edx, ecx @@: mov ecx, [.srect.right] ; width! mov [.xsize], ecx cmp [.pixel_mode], FT_PIXEL_MODE_BGRA je .loopx32 cmp [.pixel_mode], FT_PIXEL_MODE_LCD je .loopx24 cmp [.pixel_mode], FT_PIXEL_MODE_GRAY je .loopx8 cmp [.pixel_mode], FT_PIXEL_MODE_MONO jne .finish lodsd bswap eax mov ch, 32 mov cl, byte [.bit_ofs] shl eax, cl sub ch, cl .loopx1: shl eax, 1 dec ch jnz @f lodsd bswap eax mov ch, 32 @@: jnc .next_x movd mm7, [.color] ; source pixel. movd mm6, [edi+4*edx] ; destination pixel. movq mm5, mm7 psrlq mm5, 24 ; alpha source punpckldq mm5, mm5 ; punpcklbw mm6, mm0 ; byte to word destination pixel packssdw mm5, mm5 ; mm5 = As, As, As, As punpcklbw mm7, mm0 ; byte to word source pixel movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) psrlq mm5, 16 ; mm5 = 0 As As As por mm5, mm2 ; mm5 = $100 As As As pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) pmullw mm7, mm5 ; Cs = Cs * As (For alpha As = $100*As ) paddusw mm6, mm7 ; Cd = Cs + Cd (For alpha Ad = $100*As + Ad*Bs) psrlw mm6, 8 ; Cd = Cd/256 (For alpha Ad = As + Ad*Bs/$100) packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi+4*edx], mm6 .next_x: inc edx cmp edx, [ebx+TImage.wrapW] jb @f xor edx, edx @@: dec [.xsize] jnz .loopx1 jmp .nexty .loopx8: movzx eax, byte [esi] ; intensity add esi, 1 movd mm6, [.color] movd mm7, eax punpcklbw mm6, mm0 ; byte to word color. punpckldq mm7, mm7 ; packssdw mm7, mm7 ; mm7 = I, I, I, I pmullw mm7, mm6 ; mm7 is the color to blend = Cs*256 movd mm6, [edi+4*edx] ; Destination color punpcklbw mm6, mm0 ; byte to word destination pixel movq mm5, mm7 psrlq mm5, 56 ; alpha source punpckldq mm5, mm5 packssdw mm5, mm5 ; mm5 = As, As, As, As movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs paddusw mm6, mm7 ; Cd = 256*Cs + Cd*(256-As) psrlw mm6, 8 ; Cd = Cd/256 packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi+4*edx], mm6 inc edx cmp edx, [ebx+TImage.wrapW] jb @f xor edx, edx @@: dec [.xsize] jnz .loopx8 jmp .nexty .loopx24: movzx eax, byte [.color+3] ; color alpha. movd mm5, eax ; mm5 = 00 00 00 00 00 00 00 Ac mov eax, [esi] ; source alpha Ab, Ag, Ar (for RGB display, for BGR is in reverse order.) bswap eax shr eax, 8 or eax, $ff000000 ; eax = $ff Ar Ag Ab add esi, 3 movd mm6, eax ; mm6 = 00 00 00 00 ff Ar Ag Ab punpckldq mm5, mm5 ; punpcklbw mm6, mm0 ; mm6 = ff Ar Ag Ab ; byte to word source alpha. packssdw mm5, mm5 ; mm5 = Ac Ac Ac Ac pmullw mm5, mm6 psrlw mm5, 8 ; mm5 = Ac, Ac*Ar, Ac*Ag, Ac*Ab ; total alpha. movd mm6, [edi+4*edx] ; destination pixel. movd mm7, [.color] ; source pixel. punpcklbw mm6, mm0 ; byte to word destination pixel punpcklbw mm7, mm0 ; byte to word source pixel movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) psllq mm5, 16 ; mm5 = Ac*Ar Ac*Ag Ac*Ab 0 psrlq mm5, 16 ; mm5 = 0 Ac*Ar Ac*Ag Ac*Ab por mm5, mm2 ; mm5 = $100 Ac*Ar Ac*Ag Ac*Ab pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) pmullw mm7, mm5 ; Cs = Cs * As (For alpha As = $100*As ) paddusw mm6, mm7 ; Cd = Cs + Cd (For alpha Ad = $100*As + Ad*Bs) psrlw mm6, 8 ; Cd = Cd/256 (For alpha Ad = As + Ad*Bs/$100) packuswb mm6, mm0 movd [edi+4*edx], mm6 inc edx cmp edx, [ebx+TImage.wrapW] jb @f xor edx, edx @@: dec ecx jnz .loopx24 jmp .nexty .loopx32: movd mm7, [esi] ; source pixel. movd mm6, [edi+4*edx] ; destination pixel. movq mm5, mm7 psrlq mm5, 24 ; alpha source punpckldq mm5, mm5 ; punpcklbw mm6, mm0 ; byte to word destination pixel packssdw mm5, mm5 ; mm5 = As, As, As, As punpcklbw mm7, mm0 ; byte to word source pixel movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) psrlq mm5, 16 ; mm5 = 0 As As As por mm5, mm2 ; mm5 = $100 As As As pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) pmullw mm7, mm5 ; Cs = Cs * As (For alpha As = $100*As ) paddusw mm6, mm7 ; Cd = Cs + Cd (For alpha Ad = $100*As + Ad*Bs) psrlw mm6, 8 ; Cd = Cd/256 (For alpha Ad = As + Ad*Bs/$100) packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi], mm6 add esi, 4 inc edx cmp edx, [ebx+TImage.wrapW] jb @f xor edx, edx @@: dec [.xsize] jnz .loopx32 jmp .nexty .nexty: mov esi, [.sstart] add esi, [.spitch] add edi, [.dpitch] cmp edi, [.wrapy] jne @f mov edi, [ebx+TImage.pPixels] @@: dec [.srect.bottom] ; height jnz .loopy .finish: emms popad return .bpp_const db 0, 1, 8, 2, 4, 24, 8, 32 endp |
Deleted freshlib/graphics/Win32/draw.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added freshlib/graphics/Win32/fonts.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Fonts managing library. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ iglobal if used FontAttr.font_weights ;fwLight = 0 ;fwDemilight = 1 ;fwNormal = 2 ;fwMedium = 3 ;fwDemibold = 4 ;fwBold = 5 ;fwExtraBold = 6 ;fwBlack = 7 FontAttr: .font_weights dw FW_THIN, FW_EXTRALIGHT, FW_NORMAL, FW_MEDIUM, FW_SEMIBOLD, FW_BOLD, FW_EXTRABOLD, FW_HEAVY end if endg body FontCreate .pwc dd ? begin push ebx ecx edx esi edi mov eax, [.weight] and eax, 7 movzx eax, [FontAttr.font_weights+2*eax] mov [.weight], eax neg [.size] stdcall StrLen, [.font_name] mov ebx, eax stdcall StrPtr, [.font_name] mov [.font_name], eax lea ecx, [8*ebx] stdcall GetMem, ecx mov edi, eax invoke MultiByteToWideChar, CP_UTF8, 0, [.font_name], ebx, edi, ecx mov eax, [.flags] mov ebx, eax mov ecx, eax mov edx, eax and ebx, ffItalic and ecx, ffUnderline and edx, ffStrikeOut and eax, ffMonospaced jz @f mov eax, FIXED_PITCH @@: invoke CreateFontW, [.size], 0, 0, 0, [.weight], ebx, ecx, edx, \ DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, \ CLIP_DEFAULT_PRECIS, PROOF_QUALITY, eax, \ edi if defined options.DebugMode & options.DebugMode pushad mov esi, eax invoke CreateCompatibleDC, 0 mov ebx, eax invoke SelectObject, ebx, esi push eax invoke GetTextFaceA, ebx, 1024, fontName OutputLn fontName invoke SelectObject, ebx ; from the stack invoke DeleteObject, ebx popad end if stdcall FreeMem, edi pop edi esi edx ecx ebx return endp uglobal if defined options.DebugMode & options.DebugMode fontName rb 1024 end if endg body FontDestroy begin push eax ecx edx invoke DeleteObject, [.pFont] pop edx ecx eax return endp ; returns some font metrics ; ; Arguments: ; .font - the font ; Returns: ; EAX - the line height of the font. ; EBX - the ascender of the font. ; EDX - the descender of the font. body GetFontMetrics .tm TEXTMETRIC begin push ecx invoke CreateCompatibleDC, 0 mov ebx, eax invoke SelectObject, ebx, [.font] push eax lea eax, [.tm] invoke GetTextMetricsW, ebx, eax invoke SelectObject, ebx ; from the stack invoke DeleteDC, ebx mov eax, [.tm.tmHeight] mov ebx, [.tm.tmAscent] mov edx, [.tm.tmDescent] pop ecx return endp body GetFontList ;, .font .list dd ? begin pushad invoke CreateCompatibleDC, 0 mov ebx, eax stdcall CreateArray, 4 mov [.list], eax lea eax, [.list] invoke EnumFontFamiliesExW, ebx, 0, __enum_fonts, eax, 0 mov eax, [.list] mov [esp+4*regEAX], eax invoke DeleteObject, ebx popad return endp proc __enum_fonts, .pLogFont, .pAttr, .FontType, .lparam begin push esi edi mov eax, [.pLogFont] lea eax, [eax+LOGFONTW.lfFaceName] stdcall WideCharToUtf8, eax push eax mov esi, [.lparam] mov edx, [esi] stdcall ListIndexOfStr, edx, eax jnc .exists stdcall AddArrayItems, edx, 1 pop dword [eax] mov [esi], edx or eax, -1 pop edi esi return .exists: stdcall StrDel ; from the stack or eax, -1 pop edi esi return endp |
Changes to freshlib/graphics/Win32/images.asm.
|
| > > > > > > > > > > > > > | > | > > > > > > > > > | | | | | > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > | > > > > | | | > > > > > > > > > | | | > > > > > > > > > > | > > | | | | > > > > > > > > > | | < > > > | > > | > > > | | > | > > > | > > > > > > > > > > | > > > > > > > > > > > > > > > > | > | | > > | > > > | > > > > > > > > > > > > > > | > > > > | > > > > > > > > | > > > > > > > | > > | > > | > > > > > | > | > > > > | > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > | > | > | > > | > > > > | | > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Memory based images manipulation library. ; ; Target OS: Win32 ; ; Dependencies: memory.asm ; ; Notes: ;_________________________________________________________________________________________ uses msimg32, gdi32 struct TWinImage . TImage ; os dependent data .hBitmap dd ? ends body CreateImage2 .bmi BITMAPV4HEADER begin pushad stdcall GetMem, sizeof.TWinImage jc .finish mov esi, eax xor eax, eax lea edi, [.bmi] mov ecx, sizeof.BITMAPV4HEADER/4 rep stosd inc eax mov ecx, [.width] mov edx, [.height] cmp ecx, 0 cmovle ecx, eax cmp edx, 0 cmovle edx, eax mov [esi+TWinImage.width], ecx mov [esi+TWinImage.height], edx mov [esi+TWinImage.wrapW], ecx mov [esi+TWinImage.wrapH], edx mov [.bmi.biSize], sizeof.BITMAPV4HEADER mov [.bmi.biPlanes], 1 ; it is already 0 ; mov [.bmi.biCompression], BI_RGB ; mov [.bmi.biSizeImage], 0 ; mov [.bmi.biClrUsed], 0 ; mov [.bmi.biClrImportant], 0 mov [.bmi.BlueMask], $000000ff mov [.bmi.GreenMask], $0000ff00 mov [.bmi.RedMask], $00ff0000 mov [.bmi.AlphaMask], $ff000000 mov [.bmi.biBitCount], 32 neg edx mov [.bmi.biWidth], ecx mov [.bmi.biHeight], edx lea eax, [.bmi] lea ecx, [esi+TWinImage.pPixels] xor edx, edx invoke CreateDIBSection, edx, eax, DIB_RGB_COLORS, ecx, edx, edx mov [esi+TWinImage.hBitmap], eax mov [esp+4*regEAX], esi lea esi, [esi+TWinImage.lock] stdcall MutexCreate, 0, esi stdcall MutexRelease, esi clc .finish: popad return endp body DestroyImage begin pushad mov esi, [.ptrImage] test esi, esi jz .finish .lock_wait: stdcall LockImg, esi jc .lock_wait invoke GdiFlush invoke DeleteObject, [esi+TWinImage.hBitmap] lea edi, [esi+TWinImage.lock] stdcall MutexDestroy, edi stdcall FreeMem, esi .finish: popad return endp body LockImg ;, .pImage begin push eax mov eax, [.pImage] lea eax, [eax+TImage.lock] stdcall WaitForMutex, eax, -1 pop eax return endp body UnlockImg ;, .pImage begin push eax mov eax, [.pImage] test eax, eax jz .unlocked lea eax, [eax+TImage.lock] stdcall MutexRelease, eax .unlocked: pop eax return endp ;;AC_SRC_OVER = $00000000 ;;AC_SRC_ALPHA = $01000000 ;; ;;struct BLENDFUNCTION ;; .BlendOp db ? ;; .BlendFlags db ? ;; .SourceConstantAlpha db ? ;; .AlphaFormat db ? ;;ends ; ;body DrawImageRect ;begin ; push eax ecx edx esi edi ; ; mov esi, [.pImage] ; test esi, esi ; jz .exit ; ; stdcall LockImg, esi ; jc .exit ; ; invoke CreateCompatibleDC, 0 ; mov ebx, eax ; ; invoke SelectObject, ebx, [esi+TWinImage.hBitmap] ; push eax ; ; invoke BitBlt, [.where], [.xDst], [.yDst], [.width], [.height], ebx, [.xSrc], [.ySrc], SRCCOPY ; ; invoke SelectObject, ebx ; from the stack ; invoke DeleteDC, ebx ; ; stdcall UnlockImg, esi ; ;.exit: ; pop edi esi edx ecx eax ; return ;endp ; body DrawImageRect .maskUL RECT ; upper left .maskUR RECT ; upper right .maskLL RECT ; lower left .maskLR RECT ; lower right .sRect RECT ; the rectangle used for intersecting the source rectangle. .dc dd ? .oldbmp dd ? begin pushad mov esi, [.pImage] test esi, esi jz .finish stdcall LockImg, esi jc .finish xor eax, eax mov ecx, [esi+TImage.wrapW] mov edx, [esi+TImage.wrapH] mov [.maskUL.left], eax ; UL mov [.maskUL.top], eax ; UL mov [.maskLL.left], eax ; LL mov [.maskUR.top], eax ; UR mov [.maskUL.right], ecx ; UL mov [.maskUL.bottom], edx ; UL mov [.maskLR.left], ecx ; LR mov [.maskLR.top], edx ; LR mov [.maskLL.top], edx ; LL mov [.maskLL.right], ecx ; LL mov [.maskUR.left], ecx ; UR mov [.maskUR.bottom], edx ; UR shl ecx, 1 shl edx, 1 mov [.maskUR.right], ecx ; UR mov [.maskLL.bottom], edx ; LL mov [.maskLR.right], ecx ; LR mov [.maskLR.bottom], edx ; LR mov ecx, [.xSrc] mov edx, [.ySrc] mov [.sRect.left], ecx mov [.sRect.top], edx add ecx, [.width] add edx, [.height] mov [.sRect.right], ecx mov [.sRect.bottom], edx lea eax, [.sRect] lea edx, [.maskUL] stdcall RectIntersect, eax, eax, edx jc .exit ; at least some part of the image, has to be drawn. invoke CreateCompatibleDC, 0 mov [.dc], eax invoke SelectObject, [.dc], [esi+TWinImage.hBitmap] mov [.oldbmp], eax mov ebx, [esi+TImage.orgX] mov edx, [esi+TImage.orgY] add [.sRect.left], ebx add [.sRect.top], edx add [.sRect.right], ebx add [.sRect.bottom], edx mov ebx, [esi+TImage.wrapW] mov edx, [esi+TImage.wrapH] lea ecx, [.sRect] lea eax, [.maskUL] stdcall RectIntersect2, eax, ecx jc .upper_left_ok call .DoDraw ; the upper left rect is always drawn .upper_left_ok: lea eax, [.maskUR] stdcall RectIntersect2, eax, ecx jc .upper_right_ok sub [.maskUR.left], ebx sub [.maskUR.right], ebx mov edi, [.maskUL.right] ; width sub edi, [.maskUL.left] add [.xDst], edi call .DoDraw sub [.xDst], edi .upper_right_ok: lea eax, [.maskLL] stdcall RectIntersect2, eax, ecx jc .lower_left_ok sub [.maskLL.top], edx sub [.maskLL.bottom], edx mov edi, [.maskUR.bottom] sub edi, [.maskUR.top] add [.yDst], edi call .DoDraw sub [.yDst], edi .lower_left_ok: lea eax, [.maskLR] stdcall RectIntersect2, eax, ecx jc .lower_right_ok sub [.maskLR.left], ebx sub [.maskLR.top], edx sub [.maskLR.right], ebx sub [.maskLR.bottom], edx mov edi, [.maskUL.right] sub edi, [.maskUL.left] add [.xDst], edi mov edi, [.maskUR.bottom] sub edi, [.maskUR.top] add [.yDst], edi call .DoDraw .lower_right_ok: invoke SelectObject, [.dc], [.oldbmp] invoke DeleteDC, [.dc] .exit: stdcall UnlockImg, esi .finish: popad return ; Draws the rectangle pointed by EAX .DoDraw: pushad ; computes in right/bottom, width/height mov ebx, [eax+RECT.bottom] mov edx, [eax+RECT.right] sub ebx, [eax+RECT.top] sub edx, [eax+RECT.left] ; draws invoke BitBlt, [.where], [.xDst], [.yDst], edx, ebx, [.dc], [eax+RECT.left], [eax+RECT.top], SRCCOPY popad retn endp |
Changes to freshlib/graphics/Win32/text.asm.
|
| > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > | < > | > > > > > > > > | | > > < > | > > | | | > | | > > > | > | > | > > > > > > > > > > > | < < < < < < < < < < < < < < < < | > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Text drawing library. ; ; Target OS: Win32 ; ; Dependencies: memory.asm ; ; Notes: ;_________________________________________________________________________________________ body DrawDecomposedString ;, .pImage, .pArray, .x, .y, .font, .color .startX dd ? .old_font dd ? .old_bmp dd ? .img dd ? begin pushad mov eax, [.x] mov [.startX], eax stdcall GetFontMetrics, [.font] sub [.y], ebx mov ebx, [.pImage] stdcall CreateImage2, 100, 100, FALSE mov [.img], eax invoke CreateCompatibleDC, 0 mov ebx, eax mov eax, [.img] invoke SelectObject, ebx, [eax+TWinImage.hBitmap] mov [.old_bmp], eax invoke SelectObject, ebx, [.font] mov [.old_font], eax invoke SetBkMode, ebx, TRANSPARENT invoke SelectClipRgn, ebx, 0 invoke SetTextColor, ebx, $ffffff invoke SetTextAlign, ebx, TA_TOP or TA_LEFT mov esi, [.pArray] xor edi, edi dec edi .char_loop: inc edi cmp edi, [esi+TArray.count] jae .finish cmp word [esi+TArray.array+8*edi+TTextChar.width], 0 je .char_ok movzx ecx, word [esi+TArray.array+8*edi+TTextChar.width] stdcall DrawSolidRect, [.img], 0, 0, ecx, [esi+TArray.lparam], 0 lea eax, [esi+TArray.array+8*edi+TTextChar.code] movzx ecx, word [esi+TArray.array+8*edi+TTextChar.width] invoke ExtTextOutW, ebx, 0, 0, 0, 0, eax, 1, 0 movzx ecx, word [esi+TArray.array+8*edi+TTextChar.width] stdcall __BlendAlphaMask, [.pImage], [.x], [.y], [.img], 0, 0, ecx, [esi+TArray.lparam], [.color] movzx eax, word [esi+TArray.array+8*edi+TTextChar.width] add [.x], eax .char_ok: ; check for new line. movzx eax, word [esi+TArray.array+8*edi+TTextChar.height] test eax, eax jz .char_loop add [.y], eax mov eax, [.startX] mov [.x], eax jmp .char_loop .finish: invoke SelectObject, ebx, [.old_font] invoke SelectObject, ebx, [.old_bmp] invoke DeleteDC, ebx stdcall DestroyImage, [.img] popad return endp body TextDecompose ;, .hString, .font .miny dd ? .maxy dd ? .more dd ? .string rd 2 .code dd ? .size SIZE .old_font dd ? begin pushad invoke CreateCompatibleDC, 0 mov ebx, eax invoke SelectClipRgn, ebx, 0 invoke SelectObject, ebx, [.font] mov [.old_font], eax xor ecx, ecx mov [.string], ecx mov [.string+4], ecx inc ecx ror ecx, 1 ; ecx = $80000000 mov [.maxy], ecx dec ecx mov [.miny], ecx ; ecx = $7fffffff mov word [.string], '|' mov word [.string+2], '|' lea ecx, [.string] lea eax, [.size] invoke GetTextExtentPoint32W, ebx, ecx, 1, eax mov eax, [.size.cx] mov [.more], eax stdcall StrPtr, [.hString] mov esi, eax stdcall CreateArray, sizeof.TTextChar mov edi, eax .char_loop: stdcall DecodeUtf8, [esi] jc .finish add esi, edx test eax, eax jz .end mov [.code], eax mov word [.string], ax lea ecx, [.string] lea eax, [.size] invoke GetTextExtentPoint32W, ebx, ecx, 2, eax stdcall AddArrayItems, edi, 1 mov edi, edx mov ecx, [.size.cx] sub ecx, [.more] mov dword [eax+TTextChar.width], ecx mov ecx, [.code] mov [eax+TTextChar.code], ecx jmp .char_loop .end: clc .finish: pushf invoke SelectObject, ebx, [.old_font] ; old font from the stack. invoke DeleteDC, ebx stdcall GetFontMetrics, [.font] popf mov [esp+4*regEDX], ebx ; font ascent mov [esp+4*regECX], edx ; font descent mov [edi+TArray.lparam], eax ; line height mov [esp+4*regEAX], edi popad return endp ;interface DrawString, .pImage, .pString, .len, .x, .y, .font, .color body DrawString ;, .pImage, .pString, .len, .x, .y, .font, .color .pwc dd ? .charlen dd ? .img dd ? .size SIZE .tm TEXTMETRIC begin push eax ebx ecx edx invoke CreateCompatibleDC, 0 mov ebx, eax invoke SelectObject, ebx, [.font] push eax invoke SetBkMode, ebx, TRANSPARENT invoke SetTextAlign, ebx, TA_TOP or TA_LEFT invoke SelectClipRgn, ebx, 0 invoke SetTextColor, ebx, $ffffff lea eax, [.tm] invoke GetTextMetricsW, ebx, eax mov eax, [.tm.tmAscent] sub [.y], eax ; convert the string: mov ecx, [.len] shl ecx, 2 stdcall GetMem, ecx mov [.pwc], eax shr ecx, 1 invoke MultiByteToWideChar, CP_UTF8, 0, [.pString], [.len], [.pwc], ecx mov [.charlen], eax lea eax, [.size] invoke GetTextExtentPoint32W, ebx, [.pwc], [.charlen], eax stdcall CreateImage2, [.size.cx], [.size.cy], FALSE mov [.img], eax invoke SelectObject, ebx, [eax+TWinImage.hBitmap] push eax xor eax, eax invoke ExtTextOutW, ebx, eax, eax, eax, eax, [.pwc], [.charlen], eax invoke SelectObject, ebx ; old bitmap from the stack. invoke SelectObject, ebx ; old font from the stack. invoke DeleteDC, ebx stdcall __BlendAlphaMask, [.pImage], [.x], [.y], [.img], 0, 0, [.size.cx], [.size.cy], [.color] stdcall DestroyImage, [.img] stdcall FreeMem, [.pwc] pop edx ecx ebx eax mov eax, [.size.cx] mov ebx, [.tm.tmAscent] mov edx, [.size.cy] return endp proc __BlendAlphaMask, .pDstImage, .xDst, .yDst, .pSrcImage, .xSrc, .ySrc, .width, .height, .color .srect RECT .drect RECT .rect RECT .stepSrc dd ? .stepDst dd ? .wrapY dd ? begin pushad stdcall __fix_color, [.color], regEAX mov [.color], eax mov esi, [.pSrcImage] mov edi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.width] mov edx, [esi+TImage.height] mov [.srect.left], eax mov [.srect.top], eax mov [.srect.right], ecx mov [.srect.bottom], edx mov ecx, [edi+TImage.wrapW] mov edx, [edi+TImage.wrapH] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.xSrc] mov edx, [.ySrc] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.srect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish mov ecx, [.xSrc] mov edx, [.ySrc] sub ecx, [.xDst] sub edx, [.yDst] ; convert the rect to the destination coordinates. sub [.srect.left], ecx sub [.srect.top], edx sub [.srect.right], ecx sub [.srect.bottom], edx lea eax, [.srect] lea ebx, [.drect] stdcall RectIntersect, ebx, ebx, eax jc .finish stdcall RectCopy, eax, ebx ; srect = drect ;convert back to source coordinates. add [.srect.left], ecx add [.srect.top], edx add [.srect.right], ecx add [.srect.bottom], edx ; here [.srect] contains the source rectange ; [.drect] contains the destination rectangle ; the width and height of the rectangles is the same. mov ecx, [.srect.left] mov edx, [.srect.top] sub [.srect.right], ecx sub [.srect.bottom], edx mov ecx, [esi+TImage.width] mov edx, [edi+TImage.width] shl ecx, 2 shl edx, 2 mov [.stepSrc], ecx mov [.stepDst], edx mov ecx, [.srect.top] imul ecx, [esi+TImage.width] add ecx, [.srect.left] mov esi, [esi+TImage.pPixels] lea esi, [esi+4*ecx] mov eax, [edi+TImage.wrapH] imul eax, [.stepDst] add eax, [edi+TImage.pPixels] mov [.wrapY], eax mov edx, [.drect.top] add edx, [edi+TImage.orgY] cmp edx, [edi+TImage.wrapH] jb @f sub edx, [edi+TImage.wrapH] @@: imul edx, [.stepDst] add edx, [edi+TImage.pPixels] ; prepare MMX constants pxor mm0, mm0 ; mm0 = 0000 0000 0000 0000 pcmpeqw mm1, mm1 ; mm1 = ffff ffff ffff ffff psrlw mm1, 15 ; mm1 = 0001 0001 0001 0001 psllw mm1, 8 ; mm1 = 0100 0100 0100 0100 .loopY: xor ebx, ebx mov ecx, [.drect.left] ; the width of the source rectangle add ecx, [edi+TImage.orgX] cmp ecx, [edi+TImage.wrapW] jb .loopX sub ecx, [edi+TImage.wrapW] .loopX: push edx movzx eax, byte [esi+4*ebx] movzx edx, byte [esi+4*ebx+1] lea eax, [eax+2*edx] movzx edx, byte [esi+4*ebx+2] add eax, edx shr eax, 2 ; grayscale. pop edx movd mm6, [.color] movd mm7, eax punpcklbw mm6, mm0 ; byte to word color. punpckldq mm7, mm7 ; packssdw mm7, mm7 ; mm7 = I, I, I, I pmullw mm7, mm6 ; mm7 is the color to blend = Cs*256 movd mm6, [edx+4*ecx] ; Destination color punpcklbw mm6, mm0 ; byte to word destination pixel movq mm5, mm7 psrlq mm5, 56 ; alpha source punpckldq mm5, mm5 packssdw mm5, mm5 ; mm5 = As, As, As, As movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs paddusw mm6, mm7 ; Cd = 256*Cs + Cd*(256-As) psrlw mm6, 8 ; Cd = Cd/256 packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edx+4*ecx], mm6 inc ecx cmp ecx, [edi+TImage.wrapW] jb @f xor ecx, ecx @@: inc ebx cmp ebx, [.srect.right] jne .loopX ; next Y add esi, [.stepSrc] add edx, [.stepDst] cmp edx, [.wrapY] jb @f mov edx, [edi+TImage.pPixels] @@: dec [.srect.bottom] jnz .loopY .finish: emms popad return endp ;interface GetTextBounds, .pString, .len, .font body GetTextBounds ;, .pString, .len, .font .size SIZE .pwc dd ? .charlen dd ? begin push ebx ecx invoke CreateCompatibleDC, 0 mov ebx, eax ; first convert the string: mov ecx, [.len] test ecx, ecx jns @f stdcall StrLen, [.pString] mov ecx, eax @@: shl ecx, 3 stdcall GetMem, ecx mov [.pwc], eax invoke MultiByteToWideChar, CP_UTF8, 0, [.pString], [.len], [.pwc], ecx mov [.charlen], eax invoke SelectClipRgn, ebx, 0 invoke SelectObject, ebx, [.font] push eax lea eax, [.size] invoke GetTextExtentPoint32W, ebx, [.pwc], [.charlen], eax invoke SelectObject, ebx ; from the stack. invoke DeleteDC, ebx mov eax, [.size.cx] mov edx, [.size.cy] stdcall FreeMem, [.pwc] pop ecx ebx return endp ; returns: ; eax - x offset of the baseline of the string. ; edx - y offset of the baseline of the string. proc GetTextOffset, .context, .ptrString, .len, .font .metrics TEXTMETRIC .pwc dd ? .charlen dd ? begin push ebx ecx ; first convert the string: mov ecx, [.len] shl ecx, 3 stdcall GetMem, ecx mov [.pwc], eax invoke MultiByteToWideChar, CP_UTF8, 0, [.ptrString], [.len], [.pwc], ecx mov [.charlen], eax mov ebx, [.context] cmp [.font], 0 jne @f invoke GetStockObject, DEFAULT_GUI_FONT mov [.font], eax @@: invoke SelectObject, [ebx+TContext.handle], [.font] push eax lea eax, [.metrics] invoke GetTextMetricsW, [ebx+TContext.handle], eax invoke SelectObject, [ebx+TContext.handle] ; from the stack. xor eax, eax mov edx, [.metrics.tmAscent] sub edx, [.metrics.tmInternalLeading] stdcall FreeMem, [.pwc] pop ecx ebx return endp |
Added freshlib/graphics/all.asm.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Graphics amalgamation include file. ; Includes all graphic libraries of FreshLib ; ; Target OS: Any ;_________________________________________________________________________________________ include 'rectangles.asm' include 'images.asm' include 'draw.asm' include 'giflib.asm' include 'pnglib.asm' include 'fonts.asm' include 'text.asm' include 'recycler.asm' |
Changes to freshlib/graphics/draw.asm.
|
| > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > | > > > > > > > > > > | > > > > | > > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | | | | > > | | | | | > > > < | | > | > > | | | > > > > > | > | < | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > | > > > > | | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Draw library contains procedures for drawing oprtations. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: This file contains OS independent part and includes OS dependent files. ;_________________________________________________________________________________________ module "Draw library" proc DrawSolidRect, .pDstImage, .x, .y, .width, .height, .color .drect RECT .rect RECT .stepy dd ? begin pushad mov esi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.wrapW] mov edx, [esi+TImage.wrapH] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.x] mov edx, [.y] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.drect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish stdcall LockImg, esi jc .finish ; [.drect] contains the destination rectangle mov eax, [esi+TImage.width] shl eax, 2 mov [.stepy], eax mov edi, [.drect.top] add edi, [esi+TImage.orgY] cmp edi, [esi+TImage.wrapH] jb @f sub edi, [esi+TImage.wrapH] @@: imul edi, [.stepy] add edi, [esi+TImage.pPixels] ; the address of the starting line of the rectangle. mov eax, [.drect.left] mov edx, [.drect.right] add eax, [esi+TImage.orgX] add edx, [esi+TImage.orgX] cmp eax, [esi+TImage.wrapW] jbe @f sub eax, [esi+TImage.wrapW] @@: cmp edx, [esi+TImage.wrapW] jbe @f sub edx, [esi+TImage.wrapW] @@: mov [.drect.left], eax mov [.drect.right], edx mov ecx, [.drect.bottom] add ecx, [esi+TImage.orgY] cmp ecx, [esi+TImage.wrapH] jb @f sub ecx, [esi+TImage.wrapH] @@: imul ecx, [.stepy] add ecx, [esi+TImage.pPixels] ; the address of the end of the rectangle. mov edx, [esi+TImage.wrapH] imul edx, [.stepy] add edx, [esi+TImage.pPixels] ; the address of the Y wrap stdcall __fix_color, [.color], regEAX .loopY: mov ebx, [.drect.right] ; the end of the rect. .loopX: dec ebx cmovs ebx, [esi+TImage.wrapW] mov [edi+4*ebx], eax ; fill the color, does not affect the flags. cmp ebx, [.drect.left] jne .loopX add edi, [.stepy] cmp edi, edx jb @f mov edi, [esi+TImage.pPixels] @@: cmp edi, ecx jne .loopY stdcall UnlockImg, [.pDstImage] clc .finish: popad return endp proc BlendSolidRect, .pDstImage, .x, .y, .width, .height, .color .drect RECT .rect RECT .stepY dd ? .wrapY dd ? begin pushad mov esi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.wrapW] mov edx, [esi+TImage.wrapH] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.x] mov edx, [.y] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.drect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish stdcall LockImg, esi jc .finish ; [.drect] contains the destination rectangle mov ecx, [.drect.left] mov edx, [.drect.top] sub [.drect.right], ecx sub [.drect.bottom], edx mov ebx, [esi+TImage.width] mov ecx, [esi+TImage.wrapH] shl ebx, 2 mov [.stepY], ebx mov edi, [.drect.top] add edi, [esi+TImage.orgY] cmp edi, ecx jb @f sub edi, ecx @@: imul edi, ebx imul ecx, ebx add edi, [esi+TImage.pPixels] add ecx, [esi+TImage.pPixels] mov [.wrapY], ecx mov edx, [esi+TImage.wrapW] mov ecx, [.drect.left] add ecx, [esi+TImage.orgX] cmp ecx, edx jb @f sub ecx, edx @@: mov [.drect.left], ecx stdcall __fix_color, [.color], regEAX ; prepare MMX constants pxor mm0, mm0 ; mm0 = 0000 0000 0000 0000 pcmpeqw mm1, mm1 ; mm1 = ffff ffff ffff ffff psrlw mm1, 8 ; mm1 = 00ff 00ff 00ff 00ff ; the color movd mm7, eax movq mm5, mm7 psrlq mm5, 24 ; alpha source punpckldq mm5, mm5 packssdw mm5, mm5 ; mm5 = As, As, As, As movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) punpcklbw mm7, mm0 ; byte to word source pixel psllw mm7, 8 ; Cs = Cs*256 xor edx, edx .loopY: mov ecx, [.drect.right] mov ebx, [.drect.left] .loopX: movd mm6, [edi+4*ebx] ; destination pixel. punpcklbw mm6, mm0 ; byte to word destination pixel pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) paddusw mm6, mm7 ; Cd = Cs + Cd psrlw mm6, 8 ; Cd = Cd/256 packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi+4*ebx], mm6 inc ebx cmp ebx, [esi+TImage.wrapW] cmove ebx, edx dec ecx jnz .loopX ; next Y add edi, [.stepY] cmp edi, [.wrapY] cmove edi, [esi+TImage.pPixels] dec [.drect.bottom] jnz .loopY emms stdcall UnlockImg, [.pDstImage] .finish: popad return endp proc XorRect, .pDstImage, .x, .y, .width, .height, .mask .drect RECT .rect RECT .stepy dd ? begin pushad mov esi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.wrapW] mov edx, [esi+TImage.wrapH] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.x] mov edx, [.y] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.drect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish stdcall LockImg, esi jc .finish ; [.drect] contains the destination rectangle mov eax, [esi+TImage.width] shl eax, 2 mov [.stepy], eax mov edi, [.drect.top] add edi, [esi+TImage.orgY] cmp edi, [esi+TImage.wrapH] jb @f sub edi, [esi+TImage.wrapH] @@: imul edi, [.stepy] add edi, [esi+TImage.pPixels] ; the address of the starting line of the rectangle. mov eax, [.drect.left] mov edx, [.drect.right] add eax, [esi+TImage.orgX] add edx, [esi+TImage.orgX] cmp eax, [esi+TImage.wrapW] jbe @f sub eax, [esi+TImage.wrapW] @@: cmp edx, [esi+TImage.wrapW] jbe @f sub edx, [esi+TImage.wrapW] @@: mov [.drect.left], eax mov [.drect.right], edx mov ecx, [.drect.bottom] add ecx, [esi+TImage.orgY] cmp ecx, [esi+TImage.wrapH] jb @f sub ecx, [esi+TImage.wrapH] @@: imul ecx, [.stepy] add ecx, [esi+TImage.pPixels] ; the address of the end of the rectangle. mov edx, [esi+TImage.wrapH] imul edx, [.stepy] add edx, [esi+TImage.pPixels] ; the address of the Y wrap mov eax, [.mask] .loopY: mov ebx, [.drect.right] ; the end of the rect. .loopX: dec ebx cmovs ebx, [esi+TImage.wrapW] xor dword [edi+4*ebx], eax ; fill the color, does not affect the flags. cmp ebx, [.drect.left] jne .loopX add edi, [.stepy] cmp edi, edx jb @f mov edi, [esi+TImage.pPixels] @@: cmp edi, ecx jne .loopY stdcall UnlockImg, [.pDstImage] clc .finish: popad return endp proc __fix_color, .color, .reg begin pushad movzx ebx, byte [.color+3] ; alpha mov ecx, ebx mov esi, $ff movzx eax, byte [.color+2] ; red mul ebx div esi shl ecx, 8 mov cl, al movzx eax, byte [.color+1] ; green mul ebx div esi shl ecx, 8 mov cl, al movzx eax, byte [.color] ; blue mul ebx div esi shl ecx, 8 mov cl, al mov eax, [.reg] lea eax, [esp+4*eax] mov [eax], ecx popad return endp trtUpper = 0 trtLower = 1 trtLeft = 0 trtRight = 2 proc BlendTriangle, .pDstImage, .x, .y, .size, .kind, .color .drect RECT .rect RECT .back dd ? begin pushad mov esi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.width] mov edx, [esi+TImage.height] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.x] mov edx, [.y] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.size] add edx, [.size] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.drect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish stdcall LockImg, esi jc .finish ; [.drect] contains the destination rectangle mov ecx, [.drect.right] mov edx, [.drect.bottom] sub ecx, [.drect.left] sub edx, [.drect.top] mov edi, [.drect.top] imul edi, [esi+TImage.width] add edi, [.drect.left] lea edi, [edi*4] add edi, [esi+TImage.pPixels] mov esi, [esi+TImage.width] lea esi, [4*esi] stdcall __fix_color, [.color], regEAX mov [.color], eax and [.back], 0 .loopY: mov ebx, ecx ; the width of the source rectangle .loopX: dec ebx js .next_y cmp [.kind], trtUpper or trtLeft ; 0 je .upperleft cmp [.kind], trtLower or trtLeft ; 1 je .lowerleft cmp [.kind], trtUpper or trtRight ; 2 je .upperright cmp [.kind], trtLower or trtRight ; 3 je .lowerright .put_pixel: stdcall _BlendPixel, [edi+4*ebx], [.color] mov [edi+4*ebx], eax jmp .loopX .upperleft: cmp ebx, edx jae .loopX jmp .put_pixel .lowerleft: cmp ebx, [.back] jae .loopX jmp .put_pixel .upperright: cmp ebx, [.back] jb .loopX jmp .put_pixel .lowerright: cmp ebx, edx jb .loopX jmp .put_pixel .next_y: add edi, esi inc [.back] dec edx jnz .loopY stdcall UnlockImg, [.pDstImage] .finish: popad return endp ; Draws horizontal line from .x1 to .x2 on y with color [.color] proc DrawHLine, .pImage, .x1, .x2, .y, .color begin pushad mov esi, [.pImage] xor eax, eax mov ecx, [.x1] mov edx, [.x2] cmp ecx, eax cmovl ecx, eax cmp ecx, [esi+TImage.wrapW] cmovg ecx, [esi+TImage.wrapW] cmp edx, eax cmovl edx, eax cmp edx, [esi+TImage.wrapW] cmovg edx, [esi+TImage.wrapW] cmp ecx, edx je .finish jl .xok xchg ecx, edx .xok: sub edx, ecx ; length X add ecx, [esi+TImage.orgX] ; start X cmp ecx, [esi+TImage.wrapW] jb @f sub ecx, [esi+TImage.wrapW] @@: mov ebx, [esi+TImage.width] shl ebx, 2 mov edi, [.y] cmp edi, eax cmovl edi, eax cmp edi, [esi+TImage.wrapH] cmovg edi, [esi+TImage.wrapH] add edi, [esi+TImage.orgY] cmp edi, [esi+TImage.wrapH] jb @f sub edi, [esi+TImage.wrapH] @@: imul edi, ebx add edi, [esi+TImage.pPixels] stdcall LockImg, esi jc .finish stdcall __fix_color, [.color], regEAX ; prepare MMX constants pxor mm0, mm0 ; mm0 = 0000 0000 0000 0000 pcmpeqw mm1, mm1 ; mm1 = ffff ffff ffff ffff psrlw mm1, 8 ; mm1 = 00ff 00ff 00ff 00ff ; the color movd mm7, eax movq mm5, mm7 psrlq mm5, 24 ; alpha source punpckldq mm5, mm5 packssdw mm5, mm5 ; mm5 = As, As, As, As movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) punpcklbw mm7, mm0 ; byte to word source pixel psllw mm7, 8 ; Cs = Cs*256 xor ebx, ebx .loopX: movd mm6, [edi+4*ecx] ; destination pixel. punpcklbw mm6, mm0 ; byte to word destination pixel pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) paddusw mm6, mm7 ; Cd = Cs + Cd psrlw mm6, 8 ; Cd = Cd/256 packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi+4*ecx], mm6 inc ecx cmp ecx, [esi+TImage.wrapW] cmove ecx, ebx dec edx jnz .loopX emms stdcall UnlockImg, [.pImage] .finish: popad return endp proc DrawVLine, .pImage, .y1, .y2, .x, .color begin pushad mov esi, [.pImage] xor eax, eax mov ecx, [.y1] mov edx, [.y2] cmp ecx, eax cmovl ecx, eax cmp ecx, [esi+TImage.wrapH] cmovg ecx, [esi+TImage.wrapH] cmp edx, eax cmovl edx, eax cmp edx, [esi+TImage.wrapH] cmovg edx, [esi+TImage.wrapH] cmp ecx, edx je .finish jl .yok xchg ecx, edx .yok: sub edx, ecx add ecx, [esi+TImage.orgY] ; start Y cmp ecx, [esi+TImage.wrapH] jb @f sub ecx, [esi+TImage.wrapH] @@: mov ebx, [esi+TImage.width] shl ebx, 2 add ecx, [esi+TImage.orgY] cmp ecx, [esi+TImage.wrapH] jb @f sub ecx, [esi+TImage.wrapH] @@: mov edi, [.x] cmp edi, eax cmovl edi, eax cmp edi, [esi+TImage.wrapW] cmovg edi, [esi+TImage.wrapW] add edi, [esi+TImage.orgX] cmp edi, [esi+TImage.wrapW] jb @f sub edi, [esi+TImage.wrapW] @@: shl edi, 2 mov [.x], edi ; offset X imul ecx, ebx add ecx, [.x] add ecx, [esi+TImage.pPixels] mov edi, [esi+TImage.wrapH] imul edi, ebx add edi, [esi+TImage.pPixels] stdcall LockImg, esi jc .finish stdcall __fix_color, [.color], regEAX ; prepare MMX constants pxor mm0, mm0 ; mm0 = 0000 0000 0000 0000 pcmpeqw mm1, mm1 ; mm1 = ffff ffff ffff ffff psrlw mm1, 8 ; mm1 = 00ff 00ff 00ff 00ff ; the color movd mm7, eax movq mm5, mm7 psrlq mm5, 24 ; alpha source punpckldq mm5, mm5 packssdw mm5, mm5 ; mm5 = As, As, As, As movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) punpcklbw mm7, mm0 ; byte to word source pixel psllw mm7, 8 ; Cs = Cs*256 .loopY: movd mm6, [ecx] ; destination pixel. punpcklbw mm6, mm0 ; byte to word destination pixel pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) paddusw mm6, mm7 ; Cd = Cs + Cd psrlw mm6, 8 ; Cd = Cd/256 packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [ecx], mm6 add ecx, ebx cmp ecx, edi jb @f mov ecx, [.x] add ecx, [esi+TImage.pPixels] @@: dec edx jnz .loopY emms stdcall UnlockImg, [.pImage] .finish: popad return endp proc ScrollImageH, .pImage, .dist begin pushad mov esi, [.pImage] mov ecx, [esi+TImage.wrapW] mov eax, [esi+TImage.orgX] add eax, [.dist] jns @f add eax, ecx @@: cmp eax, ecx jl @f sub eax, ecx @@: mov [esi+TImage.orgX], eax popad return endp proc ScrollImageV, .pImage, .dist begin pushad mov esi, [.pImage] mov ecx, [esi+TImage.wrapH] mov eax, [esi+TImage.orgY] add eax, [.dist] jns @f add eax, ecx @@: cmp eax, ecx jl @f sub eax, ecx @@: mov [esi+TImage.orgY], eax popad return endp proc ScrollRectUp2, .pDstImage, .x, .y, .width, .height, .lines .drect RECT .rect RECT begin pushad mov esi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.width] mov edx, [esi+TImage.height] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.x] mov edx, [.y] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.drect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish stdcall LockImg, esi jc .finish ; here [.srect] contains the source rectange ; [.drect] contains the destination rectangle ; the width and height of the rectangles is the same. mov ebx, [.drect.right] mov edx, [.drect.bottom] sub ebx, [.drect.left] ; width of the rect in pixels. sub edx, [.drect.top] sub edx, [.lines] ; height of the rect. jc .end_scroll mov edi, [.drect.top] imul edi, [esi+TImage.width] add edi, [.drect.left] lea edi, [edi*4] add edi, [esi+TImage.pPixels] mov eax, [esi+TImage.width] mov ecx, eax sub eax, ebx lea eax, [4*eax] ; the skip count in bytes. imul ecx, [.lines] lea esi, [edi+4*ecx] ; the source address. .loopY: mov ecx, ebx rep movsd ; loop X lea esi, [esi+eax] lea edi, [edi+eax] dec edx jnz .loopY .end_scroll: stdcall UnlockImg, [.pDstImage] .finish: popad return endp proc ScrollRectDn2, .pDstImage, .x, .y, .width, .height, .lines .drect RECT .rect RECT begin pushad mov esi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.width] mov edx, [esi+TImage.height] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.x] mov edx, [.y] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.drect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish stdcall LockImg, esi jc .finish mov ebx, [.drect.right] mov edx, [.drect.bottom] sub ebx, [.drect.left] ; width of the rect in pixels. sub edx, [.drect.top] sub edx, [.lines] ; height of the rect. jc .end_scroll mov edi, [.drect.bottom] dec edi imul edi, [esi+TImage.width] add edi, [.drect.left] lea edi, [edi*4] add edi, [esi+TImage.pPixels] mov eax, [esi+TImage.width] mov ecx, eax add eax, ebx lea eax, [4*eax] ; the skip count in bytes. neg eax imul ecx, [.lines] neg ecx lea esi, [edi+4*ecx] ; the source address. neg ecx .loopY: mov ecx, ebx rep movsd ; loop X lea esi, [esi+eax] lea edi, [edi+eax] dec edx jnz .loopY .end_scroll: cld stdcall UnlockImg, [.pDstImage] .finish: popad return endp proc ScrollRectLeft2, .pDstImage, .x, .y, .width, .height, .cols .drect RECT .rect RECT begin pushad mov esi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.width] mov edx, [esi+TImage.height] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.x] mov edx, [.y] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.drect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish stdcall LockImg, esi jc .finish ; [.drect] contains the destination rectangle mov ebx, [.drect.bottom] mov edx, [.drect.right] sub ebx, [.drect.top] ; height of the rect. sub edx, [.drect.left] ; width of the rect in pixels. sub edx, [.cols] jc .end_scroll mov edi, [.drect.top] imul edi, [esi+TImage.width] add edi, [.drect.left] lea edi, [edi*4] add edi, [esi+TImage.pPixels] ; pointer to the begining of the drect mov eax, [esi+TImage.width] mov ecx, [.cols] sub eax, edx lea esi, [edi+4*ecx] ; the source address. .loopY: mov ecx, edx rep movsd ; loop X lea esi, [esi+4*eax] lea edi, [edi+4*eax] dec ebx jnz .loopY .end_scroll: stdcall UnlockImg, [.pDstImage] .finish: popad return endp proc ScrollRectRight2, .pDstImage, .x, .y, .width, .height, .cols .drect RECT .rect RECT begin pushad mov esi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.width] mov edx, [esi+TImage.height] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.x] mov edx, [.y] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.drect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish stdcall LockImg, esi jc .finish ; [.drect] contains the destination rectangle mov ebx, [.drect.bottom] mov edx, [.drect.right] sub ebx, [.drect.top] ; height of the rect. sub edx, [.drect.left] ; width of the rect in pixels. sub edx, [.cols] jc .end_scroll mov edi, [.drect.top] imul edi, [esi+TImage.width] add edi, [.drect.left] add edi, edx lea edi, [edi*4-4] add edi, [esi+TImage.pPixels] ; pointer to the begining of the drect mov eax, [esi+TImage.width] mov ecx, [.cols] add eax, edx neg ecx lea esi, [edi+4*ecx] ; the source address. std .loopY: mov ecx, edx rep movsd ; loop X lea esi, [esi+4*eax] lea edi, [edi+4*eax] dec ebx jnz .loopY cld .end_scroll: stdcall UnlockImg, [.pDstImage] .finish: popad return endp proc ApplyAlphaRect, .pImage, .x, .y, .width, .height, .alpha .drect RECT .rect RECT begin pushad mov edi, [.pImage] xor eax, eax mov ecx, [edi+TImage.width] mov edx, [edi+TImage.height] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.x] mov edx, [.y] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.drect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish stdcall LockImg, edi ; here [.drect] contains the destination rectangle mov ecx, [.drect.left] mov edx, [.drect.top] sub [.drect.right], ecx sub [.drect.bottom], edx imul edx, [edi+TImage.width] add edx, [.drect.left] shl edx, 2 add edx, [edi+TImage.pPixels] ; pointer to the upper left corner of the rect. mov edi, [edi+TImage.width] lea edi, [4*edi] .loopY: mov ebx, [.drect.right] ; the width of the source rectangle .loopX: dec ebx ; The ZF will not be changed later in the inner loop. js .nextY movzx eax, byte [edx+4*ebx+3] ; dest alpha. movzx ecx, byte [.alpha] ; Ad = Ad * [.alpha]/256 imul eax, ecx sar eax, 8 mov [edx+4*ebx+3], al jmp .loopX .nextY: add edx, edi dec [.drect.bottom] jnz .loopY stdcall UnlockImg, [.pImage] .finish: popad return endp proc FilterDisabled, .pImage, .no_alpha .gray dd ? .alpha dd ? begin pushad mov edi, [.pImage] stdcall LockImg, edi mov ebx, [edi+TImage.width] mov ecx, [edi+TImage.height] mov edi, [edi+TImage.pPixels] .outloop: dec ecx js .finish mov esi, ebx ; Counter from 0 to IconWidth-1 inc esi .inloop: dec esi jz .outloop movzx eax, byte [edi] ; blue movzx edx, byte [edi+1] ; green lea edx, [edx+2*eax] ; 2*Blue + Green movzx eax, byte [edi+2] add edx, eax ; + Red movzx eax, byte [edi+3] ; Alpha mov [.alpha], eax shr edx, 2 ; div 4 -> Grayscale pixel. ; This formula gives more realistic view. mov [.gray], edx ; blend alpha cmp [.no_alpha], 0 jne .store imul eax, esi cdq div ebx mov [.alpha], eax mov eax, [.gray] imul eax, esi cdq div ebx mov [.gray], eax .store: mov al, byte [.alpha] shl eax, 8 mov al ,byte [.gray] shl eax, 8 mov al ,byte [.gray] shl eax, 8 mov al ,byte [.gray] stosd jmp .inloop .finish: stdcall UnlockImg, [.pImage] popad return endp endmodule |
Added freshlib/graphics/fonts.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Fonts managing library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: This file contains OS independent part of the library and includes respective ; OS dependent files. ;_________________________________________________________________________________________ module "Fonts library" ffItalic = 1 ffUnderline = 2 ffStrikeOut = 4 ffMonospaced = $80 fwLight = 0 fwDemilight = 1 fwNormal = 2 fwMedium = 3 fwDemibold = 4 fwBold = 5 fwExtraBold = 6 fwBlack = 7 fwMask = 7 struct __TFont .hFontFace dd ? ; The name of the font face. .height dd ? ; The character height in pixels. .weight dd ? ; The weight of the characters. .flags dd ? ; ffItalic, ffMonospaced, etc. ends interface FontCreate, .font_name, .size, .weight, .flags interface FontDestroy, .pFont ; returns some font metrics ; ; Arguments: ; .font - the font ; Returns: ; EAX - the line height of the font. ; EBX - the ascender of the font. ; EDX - the descender of the font. interface GetFontMetrics, .font ; returns TArray of fontface names. interface GetFontList, .font include '%TargetOS%/fonts.asm' endmodule |
Changes to freshlib/graphics/giflib.asm.
|
| < < > | > | < > | > > > > > | | | < < < < < | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: GIF images decoding library. ; ; Target OS: Any ; ; Dependencies: memory.asm; files.asm ; ; Notes: ; Original source code by Exagone ; http://exagone.cjb.net | http://www.exagone.org ; _thomas_@mailroom.com ;_________________________________________________________________________________________ module "GIF library" struct TGifInfo ;--- Header --- .GIFVersion rb 3 ; 3 byte string (not 0-terminated) that identifies ; the GIF Version (like 97a or 98a) ; --- Logical screen descriptor --- .dwLSWidth dd ? ; Logical screen width |
︙ | ︙ | |||
101 102 103 104 105 106 107 | stdcall _GIFInitalizeDecoder, esi jz .quit stdcall CreateImage, [esi+TGifInfo.dwImageWidth], [esi+TGifInfo.dwImageHeight], 32 jc .error mov edi, eax | | | 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | stdcall _GIFInitalizeDecoder, esi jz .quit stdcall CreateImage, [esi+TGifInfo.dwImageWidth], [esi+TGifInfo.dwImageHeight], 32 jc .error mov edi, eax push [edi+TImage.pPixels] pop [esi+TGifInfo.lpImageData] stdcall _GIFDecompress, esi jz .quit stdcall _GIFCleanup, esi |
︙ | ︙ | |||
123 124 125 126 127 128 129 | ;=============================================================================== ; GIFLoadFile ;=============================================================================== ; Loads gif data from a file ; returns pointer to TImage | | | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | ;=============================================================================== ; GIFLoadFile ;=============================================================================== ; Loads gif data from a file ; returns pointer to TImage proc ImageGifLoadFromFile, .lpFile begin push ecx stdcall LoadBinaryFile, [.lpFile] push eax stdcall CreateImageGIF, eax, ecx |
︙ | ︙ | |||
306 307 308 309 310 311 312 313 314 315 316 317 318 319 | push ebx shl ebx, 2 ; --- If no space left, make the table bigger: cmp ebx, ecx jne .sizeok shl ecx, 1 ;Table size doubles mov [esi+TGifInfo.dwLZWTableSize], ecx ; --- Reallocate memory --- stdcall ResizeMem, [esi+TGifInfo.lpLZWTable], ecx mov [esi+TGifInfo.lpLZWTable], eax | > > | 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 | push ebx shl ebx, 2 ; --- If no space left, make the table bigger: cmp ebx, ecx jne .sizeok ; lea ecx, [3*ecx] ; shr ecx, 1 shl ecx, 1 ;Table size doubles mov [esi+TGifInfo.dwLZWTableSize], ecx ; --- Reallocate memory --- stdcall ResizeMem, [esi+TGifInfo.lpLZWTable], ecx mov [esi+TGifInfo.lpLZWTable], eax |
︙ | ︙ | |||
945 946 947 948 949 950 951 | .endloop: inc eax return endp | | | 948 949 950 951 952 953 954 955 | .endloop: inc eax return endp endmodule |
Changes to freshlib/graphics/images.asm.
1 | struct TImage | > > > > > > > > > > > > > > > | | | | > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Memory based images manipulation library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Include respective OS dependent files. ;_________________________________________________________________________________________ module "Images library" struct TImage .width dd ? ; width in pixels. .height dd ? ; height in pixels. .pPixels dd ? ; pointer to the pixel memory. .orgX dd ? .orgY dd ? .wrapW dd ? .wrapH dd ? .lock TMutex ends ; Creates memory image with parameters specified. interface CreateImage2, .width, .height, .fScreen interface DestroyImage, .ptrImage ; Draws the image on a OS provided window surface. interface DrawImageRect, .where, .pImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height interface LockImg, .pImage interface UnlockImg, .pImage ; Sets the wrap parameters of the image. ; Arguments: ; .pImage - pointer to the TImage ; .newWrapW - new wrap width ; .newWrapH - new wrap height ; ; After this operation, the orgX and orgY of the image are set both to 0 ; without affecting the image itself. ; ; As long as on moving orgX and orgY, the image need to be rearanged, ; the operation is relatively slow. ; So, use it carefully. proc SetImageWrap, .pImage, .newWrapW, .newWrapH begin pushad mov ebx, [.pImage] test ebx, ebx jz .finish stdcall LockImg, ebx jc .finish stdcall ZeroOrgImage, ebx mov ecx, [.newWrapW] mov edx, [.newWrapH] cmp ecx, [ebx+TImage.width] cmova ecx, [ebx+TImage.width] cmp edx, [ebx+TImage.height] cmova edx, [ebx+TImage.height] mov eax, 1 test ecx, ecx cmovz ecx, eax test edx, edx cmovz edx, eax mov [ebx+TImage.wrapW], ecx mov [ebx+TImage.wrapH], edx stdcall UnlockImg, ebx clc .finish: popad return endp proc ZeroOrgImage, .pImage .imgL dd ? .imgU dd ? begin pushad mov ebx, [.pImage] test ebx, ebx jz .finish xor edx, edx mov [.imgL], edx mov [.imgU], edx cmp [ebx+TImage.orgX], edx je .imgL_ok stdcall CreateImage2, [ebx+TImage.orgX], [ebx+TImage.wrapH], FALSE jc .imgL_ok mov [.imgL], eax stdcall CopyImageRect, eax, 0, 0, ebx, 0, 0, [ebx+TImage.orgX], [ebx+TImage.wrapH] .imgL_ok: cmp [ebx+TImage.orgY], edx je .imgU_ok stdcall CreateImage2, [ebx+TImage.wrapW], [ebx+TImage.orgY], FALSE jc .imgU_ok mov [.imgU], eax mov ecx, [ebx+TImage.wrapW] sub ecx, [ebx+TImage.orgX] stdcall CopyImageRect, eax, 0, 0, ebx, [ebx+TImage.orgX], 0, ecx, [ebx+TImage.orgY] .imgU_ok: mov ecx, [ebx+TImage.wrapW] mov edi, [ebx+TImage.wrapH] sub ecx, [ebx+TImage.orgX] sub edi, [ebx+TImage.orgY] xor esi, esi cmp [ebx+TImage.orgX], edx je .scrollx_ok inc esi stdcall ScrollRectLeft2, ebx, 0, [ebx+TImage.orgY], [ebx+TImage.wrapW], edi, [ebx+TImage.orgX] stdcall CopyImageRect, ebx, ecx, [ebx+TImage.orgY], [.imgL], 0, [ebx+TImage.orgY], [ebx+TImage.orgX], edi .scrollx_ok: cmp [ebx+TImage.orgY], edx je .scrolly_ok inc esi stdcall ScrollRectUp2, ebx, 0, 0, [ebx+TImage.wrapW], [ebx+TImage.wrapH], [ebx+TImage.orgY] stdcall CopyImageRect, ebx, 0, edi, [.imgU], 0, 0, ecx, [ebx+TImage.orgY] .scrolly_ok: cmp esi, 2 jne .lower_right_ok stdcall CopyImageRect, ebx, ecx, edi, [.imgL], 0, 0, [ebx+TImage.orgX], [ebx+TImage.orgY] .lower_right_ok: mov [ebx+TImage.orgX], edx mov [ebx+TImage.orgY], edx stdcall DestroyImage, [.imgL] stdcall DestroyImage, [.imgU] .finish: popad return endp proc BlendImage, .pDstImage, .xDst, .yDst, .pSrcImage, .xSrc, .ySrc, .width, .height .srect RECT .drect RECT .rect RECT .srcYstep dd ? .dstYstep dd ? .srcWrapX dd ? .dstWrapX dd ? .srcWrapY dd ? .dstWrapY dd ? .srcStartX dd ? .dstStartX dd ? begin pushad mov esi, [.pSrcImage] mov edi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.wrapW] mov edx, [esi+TImage.wrapH] mov [.srect.left], eax mov [.srect.top], eax mov [.srect.right], ecx mov [.srect.bottom], edx mov ecx, [edi+TImage.wrapW] mov edx, [edi+TImage.wrapH] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.xSrc] mov edx, [.ySrc] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.srect] lea edx, [.rect] stdcall RectIntersect2, ecx, edx jc .finish mov ecx, [.xSrc] mov edx, [.ySrc] sub ecx, [.xDst] sub edx, [.yDst] ; convert the rect to the destination coordinates. sub [.srect.left], ecx sub [.srect.top], edx sub [.srect.right], ecx sub [.srect.bottom], edx lea eax, [.srect] lea ebx, [.drect] stdcall RectIntersect2, ebx, eax jc .finish stdcall RectCopy, eax, ebx ; srect = drect ;convert back to source coordinates. add [.srect.left], ecx add [.srect.top], edx add [.srect.right], ecx add [.srect.bottom], edx ; here [.srect] contains the source rectange ; [.drect] contains the destination rectangle ; the width and height of the rectangles is the same. mov eax, [.srect.top] sub [.srect.bottom], eax ; only the rect height is important. mov ecx, [esi+TImage.width] mov edx, [edi+TImage.width] lea ecx, [4*ecx] lea edx, [4*edx] mov [.srcYstep], ecx mov [.dstYstep], edx mov ecx, [esi+TImage.wrapH] mov edx, [edi+TImage.wrapH] imul ecx, [.srcYstep] imul edx, [.dstYstep] add ecx, [esi+TImage.pPixels] add edx, [edi+TImage.pPixels] mov [.srcWrapY], ecx mov [.dstWrapY], edx mov eax, [.srect.right] mov ebx, [.drect.right] add eax, [esi+TImage.orgX] add ebx, [edi+TImage.orgY] cmp eax, [esi+TImage.wrapW] jb @f sub eax, [esi+TImage.wrapW] @@: cmp ebx, [edi+TImage.wrapW] jb @f sub ebx, [edi+TImage.wrapW] @@: mov [.srcStartX], eax mov [.dstStartX], ebx mov eax, [esi+TImage.wrapW] mov ebx, [edi+TImage.wrapW] dec eax dec ebx mov [.srcWrapX], eax mov [.dstWrapX], ebx mov ecx, [.srect.top] mov edx, [.drect.top] add ecx, [esi+TImage.orgY] add edx, [edi+TImage.orgY] cmp ecx, [esi+TImage.wrapH] jb @f sub ecx, [esi+TImage.wrapH] @@: cmp edx, [edi+TImage.wrapH] jb @f sub edx, [edi+TImage.wrapH] @@: imul ecx, [.srcYstep] imul edx, [.dstYstep] add ecx, [esi+TImage.pPixels] add edx, [edi+TImage.pPixels] ; lock the images. stdcall LockImg, esi jc .finish stdcall LockImg, edi jc .finish2 ; prepare MMX constants pxor mm0, mm0 ; mm0 = 0000 0000 0000 0000 pcmpeqw mm1, mm1 ; mm1 = ffff ffff ffff ffff psrlw mm1, 8 ; mm1 = 00ff 00ff 00ff 00ff ; psrlw mm1, 15 ; mm1 = 0001 0001 0001 0001 ; psllw mm1, 8 ; mm1 = 0100 0100 0100 0100 .loopY: mov eax, [.srect.right] sub eax, [.srect.left] mov [.width], eax mov eax, [.srcStartX] mov ebx, [.dstStartX] .loopX: dec eax cmovs eax, [.srcWrapX] dec ebx cmovs ebx, [.dstWrapX] movd mm7, [ecx+4*eax] ; source pixel. movd mm6, [edx+4*ebx] ; destination pixel. movq mm5, mm7 psrlq mm5, 24 ; alpha source punpckldq mm5, mm5 packssdw mm5, mm5 ; mm5 = As, As, As, As movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) punpcklbw mm6, mm0 ; byte to word destination pixel punpcklbw mm7, mm0 ; byte to word source pixel psllw mm7, 8 ; Cs = Cs*256 pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) paddusw mm6, mm7 ; Cd = Cs + Cd psrlw mm6, 8 ; Cd = Cd/256 packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edx+4*ebx], mm6 dec [.width] jnz .loopX .nextY: add ecx, [.srcYstep] cmp ecx, [.srcWrapY] cmove ecx, [esi+TImage.pPixels] add edx, [.dstYstep] cmp edx, [.dstWrapY] cmove edx, [edi+TImage.pPixels] dec [.srect.bottom] jnz .loopY emms ; unlock the images. stdcall UnlockImg, edi .finish2: stdcall UnlockImg, esi .finish: popad return endp proc BlendImageTileWrap, .pDstImage, .xDst, .yDst, .wDst, .hDst, .pSrcImage .srcXOffs dd ? .srcXwrap dd ? .srcYoffs dd ? .srcYwrap dd ? .dstXbegn dd ? .dstXwrap dd ? .dstYoffs dd ? .dstYwrap dd ? .stepYSrc dd ? .stepYDst dd ? .srcY0 dd ? .dstY0 dd ? begin pushad mov esi, [.pSrcImage] mov edi, [.pDstImage] ; lock the images. stdcall LockImg, esi jc .finish stdcall LockImg, edi jc .finish2 ; step Y, source, destination mov ecx, [esi+TImage.width] mov edx, [edi+TImage.width] shl ecx, 2 shl edx, 2 mov [.stepYSrc], ecx mov [.stepYDst], edx ; Destination Y offset + wrap: mov eax, [.yDst] mov ebx, [edi+TImage.wrapH] add eax, [edi+TImage.orgY] cmp eax, ebx jb @f sub eax, ebx @@: mov ecx, [edi+TImage.pPixels] imul eax, edx imul ebx, edx add eax, ecx add ebx, ecx mov [.dstYoffs], eax mov [.dstYwrap], ebx mov [.dstY0], ecx mov ecx, [edi+TImage.wrapW] mov [.dstXwrap], ecx ; Destination X start: mov eax, [.xDst] add eax, [edi+TImage.orgX] cmp eax, ecx jb @f sub eax, ecx @@: mov [.dstXbegn], eax ; Source offset X,Y mov eax, [.xDst] mov ecx, [esi+TImage.wrapW] cdq div ecx add edx, [esi+TImage.orgX] cmp edx, ecx jb @f sub edx, ecx @@: mov [.srcXOffs], edx mov [.srcXwrap], ecx mov eax, [.yDst] mov ecx, [esi+TImage.wrapH] mov ebx, [esi+TImage.pPixels] cdq div ecx add edx, [esi+TImage.orgY] cmp edx, ecx jb @f sub edx, ecx @@: imul edx, [.stepYSrc] imul ecx, [.stepYSrc] add edx, ebx add ecx, ebx mov [.srcYoffs], edx mov [.srcYwrap], ecx mov [.srcY0], ebx ; prepare MMX constants pxor mm0, mm0 ; mm0 = 0000 0000 0000 0000 pcmpeqw mm1, mm1 ; mm1 = ffff ffff ffff ffff psrlw mm1, 8 ; mm1 = 00ff 00ff 00ff 00ff ; psrlw mm1, 15 ; mm1 = 0001 0001 0001 0001 ; psllw mm1, 8 ; mm1 = 0100 0100 0100 0100 xor ebx, ebx mov esi, [.srcYoffs] mov edi, [.dstYoffs] .loopY: dec [.hDst] js .exit mov ecx, [.srcXOffs] mov edx, [.dstXbegn] mov eax, [.wDst] .loopX: dec eax js .nextY movd mm7, [esi+4*ecx] ; source pixel. movd mm6, [edi+4*edx] ; destination pixel. movq mm5, mm7 psrlq mm5, 24 ; alpha source punpckldq mm5, mm5 packssdw mm5, mm5 ; mm5 = As, As, As, As movq mm4, mm1 psubw mm4, mm5 ; mm4 = Bs Bs Bs Bs (Bs = $100 - As) punpcklbw mm6, mm0 ; byte to word destination pixel punpcklbw mm7, mm0 ; byte to word source pixel psllw mm7, 8 ; Cs = Cs*256 pmullw mm6, mm4 ; mm6 = Cd = Cd * (256-As) = Cd * Bs (For alpha Ad = Ad*Bs) paddusw mm6, mm7 ; Cd = Cs + Cd psrlw mm6, 8 ; Cd = Cd/256 packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB movd [edi+4*edx], mm6 inc ecx inc edx cmp ecx, [.srcXwrap] cmovae ecx, ebx cmp edx, [.dstXwrap] cmovae edx, ebx jmp .loopX .nextY: add esi, [.stepYSrc] cmp esi, [.srcYwrap] cmovae esi, [.srcY0] add edi, [.stepYDst] cmp edi, [.dstYwrap] cmovae edi, [.dstY0] jmp .loopY .exit: emms ; unlock the images. stdcall UnlockImg, [.pDstImage] .finish2: stdcall UnlockImg, [.pSrcImage] .finish: popad return endp proc CopyImageRect, .pDstImage, .xDst, .yDst, .pSrcImage, .xSrc, .ySrc, .width, .height .srect RECT .drect RECT .rect RECT begin pushad mov esi, [.pSrcImage] mov edi, [.pDstImage] xor eax, eax mov ecx, [esi+TImage.width] mov edx, [esi+TImage.height] mov [.srect.left], eax mov [.srect.top], eax mov [.srect.right], ecx mov [.srect.bottom], edx mov ecx, [edi+TImage.width] mov edx, [edi+TImage.height] mov [.drect.left], eax mov [.drect.top], eax mov [.drect.right], ecx mov [.drect.bottom], edx mov ecx, [.xSrc] mov edx, [.ySrc] mov [.rect.left], ecx mov [.rect.top], edx add ecx, [.width] add edx, [.height] mov [.rect.right], ecx mov [.rect.bottom], edx lea ecx, [.srect] lea edx, [.rect] stdcall RectIntersect, ecx, ecx, edx jc .finish mov ecx, [.xSrc] mov edx, [.ySrc] sub ecx, [.xDst] sub edx, [.yDst] ; convert the rect to the destination coordinates. sub [.srect.left], ecx sub [.srect.top], edx sub [.srect.right], ecx sub [.srect.bottom], edx lea eax, [.srect] lea ebx, [.drect] stdcall RectIntersect, ebx, ebx, eax jc .finish stdcall RectCopy, eax, ebx ; srect = drect ;convert back to source coordinates. add [.srect.left], ecx add [.srect.top], edx add [.srect.right], ecx add [.srect.bottom], edx ; here [.srect] contains the source rectange ; [.drect] contains the destination rectangle ; the width and height of the rectangles is the same. mov ecx, [.srect.left] mov edx, [.srect.top] sub [.srect.right], ecx sub [.srect.bottom], edx mov ecx, [.srect.top] mov edx, [.drect.top] imul ecx, [esi+TImage.width] imul edx, [edi+TImage.width] add ecx, [.srect.left] add edx, [.drect.left] shl ecx, 2 shl edx, 2 add ecx, [esi+TImage.pPixels] add edx, [edi+TImage.pPixels] stdcall LockImg, esi jc .finish stdcall LockImg, edi jc .finish2 mov esi, [esi+TImage.width] mov edi, [edi+TImage.width] lea esi, [4*esi] lea edi, [4*edi] .loopY: mov ebx, [.srect.right] ; the width of the source rectangle test ebx, 1 jz .loopX ; copy 1 dword dec ebx mov eax, [ecx+4*ebx] mov [edx+4*ebx], eax jz .nextY .loopX: sub ebx, 2 movq mm0, [ecx+4*ebx] movq [edx+4*ebx], mm0 jnz .loopX .nextY: add ecx, esi add edx, edi dec [.srect.bottom] jnz .loopY emms stdcall UnlockImg, [.pDstImage] .finish2: stdcall UnlockImg, [.pSrcImage] .finish: popad return endp ;proc ImageMulAlpha2, .pImage, .x, .y, .width, .height ;.drect RECT ;.rect RECT ;begin ; pushad ; ; mov edi, [.pImage] ; ; xor eax, eax ; mov ecx, [edi+TImage.width] ; mov edx, [edi+TImage.height] ; ; mov [.drect.left], eax ; mov [.drect.top], eax ; mov [.drect.right], ecx ; mov [.drect.bottom], edx ; ; mov ecx, [.x] ; mov edx, [.y] ; ; mov [.rect.left], ecx ; mov [.rect.top], edx ; ; add ecx, [.width] ; add edx, [.height] ; ; mov [.rect.right], ecx ; mov [.rect.bottom], edx ; ; lea ecx, [.drect] ; lea edx, [.rect] ; stdcall RectIntersect, ecx, ecx, edx ; jc .finish ; ; mov ecx, [.drect.left] ; mov edx, [.drect.top] ; sub [.drect.right], ecx ; sub [.drect.bottom], edx ; ; mov esi, [.drect.top] ; imul esi, [edi+TImage.width] ; ; add esi, [.drect.left] ; lea esi, [4*esi] ; add esi, [edi+TImage.pPixels] ; ; mov edi, [edi+TImage.width] ; lea edi, [4*edi] ; ;; prepare MMX constants ; ; pxor mm0, mm0 ; mm0 = 0000 0000 0000 0000 ; pcmpeqw mm1, mm1 ; mm1 = ffff ffff ffff ffff ; psrlw mm1, 15 ; mm1 = 0001 0001 0001 0001 ; psllw mm1, 8 ; mm1 = 0100 0100 0100 0100 ; psllq mm1, 48 ; mm1 = 0100 0000 0000 0000 ; ;.loopY: ; mov ebx, [.drect.right] ; the width of the source rectangle ; ;.loopX: ; dec ebx ; The ZF will not be changed later in the inner loop. ; ; movd mm6, [esi+4*ebx] ; destination pixel. ; ; movq mm5, mm6 ; psrlq mm5, 24 ; alpha ; ; punpckldq mm5, mm5 ; ; punpcklbw mm6, mm0 ; byte to word destination pixel ; packssdw mm5, mm5 ; mm5 = Ad, Ad, Ad, Ad ; ; psrlq mm5, 16 ; mm5 = 0 Ad Ad Ad ; por mm5, mm1 ; mm5 = $100 Ad Ad Ad ; ; pmullw mm6, mm5 ; mm6 = Cd = Cd * Ad (For alpha Ad = Ad * 256) ; psrlw mm6, 8 ; Cd = Cd/256 (For alpha Ad = Ad) ; ; packuswb mm6, mm0 ; pack words to bytes 0A 0R 0G 0B -> 0000ARGB ; movd [esi+4*ebx], mm6 ; ; jnz .loopX ; ;.nextY: ; add esi, edi ; ; dec [.drect.bottom] ; jnz .loopY ; ;.finish: ; emms ; popad ; return ;endp ; the colors must be pre-multiplied ARGB. proc _BlendPixel, .dstColor, .srcColor begin pushad movzx ecx, byte [.srcColor+3] ; As mov ebx, $ff mov esi, ebx sub ebx, ecx ; 1 - As movzx eax, byte [.dstColor+3] ; Ad imul ecx, esi mul ebx add eax, ecx adc edx, 0 div esi mov byte [esp+4*regEAX+3], al movzx eax, byte [.dstColor] ; Bd movzx ecx, byte [.srcColor] ; Bs imul ecx, esi mul ebx add eax, ecx adc edx, 0 div esi mov byte [esp+4*regEAX], al movzx eax, byte [.dstColor+1] ; Gd movzx ecx, byte [.srcColor+1] ; Gs imul ecx, esi mul ebx add eax, ecx adc edx, 0 div esi mov byte [esp+4*regEAX+1], al movzx eax, byte [.dstColor+2] ; Rd movzx ecx, byte [.srcColor+2] ; Rs imul ecx, esi mul ebx add eax, ecx adc edx, 0 div esi mov byte [esp+4*regEAX+2], al popad return endp include '%TargetOS%/images.asm' endmodule |
Added freshlib/graphics/pnglib.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: PNG images decoding library. ; ; Target OS: Any ; ; Dependencies: memory.asm; files.asm ; ; Notes: ;_________________________________________________________________________________________ module "PNG library" ;struct TPNGChunk ; .length dd ? ; .type dd ? ; 4 bytes ascii data - chunk name. Such as 'IDAT', 'iTXt', etc. ; .data: ; data itself. [.lenght] bytes. ;ends ; dword check sum follows the variable length data field. ; ALL integers in PNG are big-endian! struct TchunkIHDR .Width dd ? .Height dd ? .BitDepth db ? .ColorType db ? .Compression db ? .Filter db ? .Interlaced db ? ends ctPngGrayscale = 0 ; .BitDepth = 1, 2, 4, 8 and 16 ctPngTrueColor = 2 ; .BitDepth = 8, 16 ctPngIndexedColor = 3 ; .BitDepth = 1, 2, 4, 8 ctPngAlphaGrayscale = 4 ; .BitDepth = 8, 16 ctPngAlphaTrueColor = 6 ; .BitDepth = 8, 16 pngCTPalette = 1 pngCTColor = 2 pngCTAlpha = 4 pngFilterNone = 0 pngFilterSub = 1 pngFilterUp = 2 pngFilterAverage = 3 pngFilterPaeth = 4 pngFilterCount = 5 ; Creates TImage from the compressed PNG image. ; ; Arguments: ; .pPNGImage - pointer to memory, where compressed image resides. ; .size - size of the image in bytes. ; ; Returns: ; CF=1 if error; ; CF=0 and eax=TImage if success. proc CreateImagePNG, .pPNGImage, .size .pEnd dd ? .start: .Width dd ? ; .Height dd ? .BitDepth dd ? .ColorType dd ? .flags dd ? .pPalette dd ? .PaletteCnt dd ? .pData dd ? ; compressed data. .DataSize dd ? .DataCapacity dd ? .BitsPerPixel dd ? .SampleMask dd ? ; bit mask of one sample. .BytesPerPixel dd ? ; for the filtering algorithms. rounded up to 1 bytes always. .BytesPerLine dd ? .end: .i dd ? ; loop counter. .j dd ? begin pushad ; OutputValue "CreateImagePNG called from: ", [ebp+4], 16, 8 mov ecx, (.end - .start)/4 lea edi, [.start] xor eax, eax rep stosd mov esi, [.pPNGImage] mov edx, [.size] and edx, $7fffffff ; allows using of -1 for images with undefined size. cmp edx, 8 + 12 + 13 + 12 ; header + IHDR + IEND the minimal size. jb .error_unexpected_end add edx, esi ; the end pointer of the image. mov [.pEnd], edx ; first, check the header. xor ecx, ecx add ecx, 4 mov edi, .hdrPNGImage repe cmpsd jne .error_structure ; we are now in IHDR chunk - it is always the first after the signature! lea eax, [esi-4] stdcall DataCRC32, eax, sizeof.TchunkIHDR + 4 bswap eax cmp eax, [esi+sizeof.TchunkIHDR] jne .error_checksum cmp [esi+TchunkIHDR.Filter], 0 jne .error_structure ; unsupported filter type! cmp [esi+TchunkIHDR.Compression], 0 jne .error_structure ; unsupported compression method! ; The following is my (johnfound) decision, as long as this library will never be used for progressive image display. ; Support of Adam-7 interlacing will cost a lot of code, work and speed. The interlaced images are bigger, so ; there is no single argument for supporting them. cmp [esi+TchunkIHDR.Interlaced], 0 jne .error_structure ; unsupported Interlaced images! movzx ecx, [esi+TchunkIHDR.BitDepth] movzx eax, [esi+TchunkIHDR.ColorType] mov [.BitDepth], ecx mov [.ColorType], eax ; OutputValue "Color type:", eax, 10, 2 ; OutputValue "Bit depth:", ecx, 10, 2 xor edx, edx dec edx shr edx, cl not edx mov [.SampleMask], edx mov edx, ecx test [.ColorType], pngCTPalette jnz .size_raw_ok test [.ColorType], pngCTColor jz .raw_color_ok lea edx, [3*edx] .raw_color_ok: test [.ColorType], pngCTAlpha jz .size_raw_ok add edx, ecx ; one more sample for the alpha channel. .size_raw_ok: mov [.BitsPerPixel], edx mov eax, edx shr eax, 3 jnz .bytes_per_pixel inc eax .bytes_per_pixel: mov [.BytesPerPixel], eax ; Image size: mov eax, [esi+TchunkIHDR.Width] mov ecx, [esi+TchunkIHDR.Height] bswap eax bswap ecx mov [.Width], eax mov [.Height], ecx imul eax, edx ; line length in bits. add eax, 7 shr eax, 3 ; align to byte mov [.BytesPerLine], eax ; end of IHDR chunk: add esi, sizeof.TchunkIHDR + 4 .chunk_loop: cmp esi, [.pEnd] jae .error_unexpected_end lodsd bswap eax mov ecx, eax ; chunk length in bytes lea edx, [eax+4] lea eax, [esi+edx] cmp eax, [.pEnd] jae .error_unexpected_end stdcall DataCRC32, esi, edx bswap eax cmp eax, [esi+edx] jne .error_checksum lodsd cmp eax, 'PLTE' je .PLTE cmp eax, 'IDAT' je .IDAT cmp eax, 'IEND' je .IEND cmp eax, 'tRNS' je .tRNS ; ignore chunk if unknown add esi, ecx .next_chunk: add esi, 4 ; check sum jmp .chunk_loop .tRNS: mov edi, [.pPalette] test edi, edi jz .error_structure cmp ecx, [.PaletteCnt] ja .error_structure .trns_loop: lodsb mov [edi+3], al add edi, 4 loop .trns_loop jmp .next_chunk .PLTE: cmp [.pPalette], 0 jne .error_structure ; the palette can be only one! ; But for the way of processing in this library, this is not mandatory, actually. ; cmp [.pData], 0 ; jne .error_structure ; the palette must resides before the first IDAT! mov eax, ecx cdq mov ebx, 3 div ebx test edx, edx jnz .error_structure ; the palette must contains multiple of 3 bytes. mov [.PaletteCnt], eax mov ecx, eax shl eax, 2 ; we need 4 bytes palette entries. stdcall GetMem, eax jc .error_memory_allocation mov [.pPalette], eax mov edi, eax .pal_loop: or ah, -1 ; alpha. lodsb ; red. shl eax, 8 lodsb ; green. shl eax, 8 lodsb ; blue. stosd loop .pal_loop jmp .next_chunk .IDAT: mov edi, [.pData] test edi, edi jnz .buffer_allocated lea eax, [ecx*2] mov [.DataCapacity], eax stdcall GetMem, eax jc .error_memory_allocation mov edi, eax mov [.pData], eax .buffer_allocated: mov eax, ecx add eax, [.DataSize] cmp eax, [.DataCapacity] jbe .capacity_enough shl eax, 1 mov [.DataCapacity], eax stdcall ResizeMem, edi, eax jc .error_memory_allocation mov [.pData], eax mov edi, eax .capacity_enough: add edi, [.DataSize] add [.DataSize], ecx rep movsb jmp .next_chunk .IEND: ; so, all data must be collected - process it. cmp [.pData], 0 je .error_no_image ; decompressed data buffer: mov edx, [.Width] imul edx, [.BitsPerPixel] add edx, 7 shr edx, 3 ; round up and compute the byte count. inc edx ; one more byte for the filter byte. imul edx, [.Height] stdcall GetMem, edx mov edi, eax mov esi, [.pData] mov ecx, [.DataSize] add esi, 2 ; first 2 bytes are ZLIB data format header. Ignore them. sub ecx, 2+4 ; the last 4 bytes stdcall Inflate, edi, edx, esi, ecx jc .error_decompression stdcall FreeMem, [.pData] mov [.pData], edi mov [.DataSize], edx ; Apply filters xor esi, esi ; previous line. mov eax, [.Height] mov [.i], eax .outer: movzx eax, byte [edi] inc edi xor ecx, ecx ; x coordinate cmp eax, pngFilterCount jae .error_invalid_filter mov edx, [.filters+4*eax] ; filter procedure. .inner: call edx inc ecx cmp ecx, [.BytesPerLine] jne .inner mov esi, edi add edi, [.BytesPerLine] dec [.i] jnz .outer ; convert to 32 bit TImage stdcall CreateImage2, [.Width], [.Height], FALSE jc .error_memory_allocation mov [esp+4*regEAX], eax mov edi, [eax+TImage.pPixels] ; the TImage pixels array. mov esi, [.pData] ; the png image pixels. mov eax, [.Height] mov [.i], eax mov ecx, [.BitDepth] .outer2: mov eax, [.Width] mov [.j], eax inc esi ; one byte for the filter. lodsd bswap eax mov ch, $20 .inner2: xor edx, edx mov ebx, eax and ebx, [.SampleMask] shl eax, cl sub ch, cl jnz @f mov ch, $20 lodsd bswap eax @@: test [.ColorType], pngCTPalette jnz .get_palette_color push ecx mov ch, 8 xor edx, edx .pxloop1: or edx, ebx shr ebx, cl sub ch, cl jge .pxloop1 and edx, $ff000000 mov ebx, edx pop ecx test [.ColorType], pngCTColor jnz .read_more ; duplicate gray value two more times. rol edx, 8 or edx, ebx rol edx, 8 or edx, ebx jmp .color_ok .read_more: mov ebx, eax and ebx, [.SampleMask] shl eax, cl sub ch, cl jnz @f mov ch, $20 lodsd bswap eax @@: push ecx edx mov ch, 8 mov edx, ebx .pxloop2: or ebx, edx shr edx, cl sub ch, cl jge .pxloop2 and ebx, $ff000000 pop edx ecx rol edx, 8 or edx, ebx mov ebx, eax and ebx, [.SampleMask] shl eax, cl sub ch, cl jnz @f mov ch, $20 lodsd bswap eax @@: push ecx edx mov ch, 8 mov edx, ebx .pxloop3: or ebx, edx shr edx, cl sub ch, cl jge .pxloop3 and ebx, $ff000000 pop edx ecx rol edx, 8 or edx, ebx .color_ok: test [.ColorType], pngCTAlpha jnz .read_alpha rol edx, 8 or edx, $ff000000 jmp .store_px .read_alpha: mov ebx, eax and ebx, [.SampleMask] shl eax, cl sub ch, cl jnz @f mov ch, $20 lodsd bswap eax @@: push ecx edx mov ch, 8 mov edx, ebx .pxloop4: or ebx, edx shr edx, cl sub ch, cl jge .pxloop4 and ebx, $ff000000 pop edx ecx rol edx, 8 or edx, ebx jmp .store_px .get_palette_color: rol ebx, cl shl ebx, 2 add ebx, [.pPalette] mov edx, [ebx] .store_px: stdcall __fix_color, edx, regEDX ; pre-multiply alpha mov [edi], edx add edi, 4 dec [.j] jnz .inner2 movzx eax, ch shr eax, 3 sub esi, eax dec [.i] jnz .outer2 ; cleanup the allocated buffers... stdcall FreeMem, [.pPalette] stdcall FreeMem, [.pData] clc popad return .error_invalid_filter: dbrk .error_decompression: dbrk .error_no_image: dbrk .error_memory_allocation: dbrk .error_checksum: dbrk .error_structure: dbrk .error_unexpected_end: dbrk stc popad return .hdrPNGImage dd $474e5089, $0a1a0a0d, $0d000000, 'IHDR' .filters dd .none, .sub, .up, .average, .paeth ; sub filter. .sub: mov ebx, ecx sub ebx, [.BytesPerPixel] jl .none mov al, [edi+ebx] add [edi+ecx], al .none: retn ; up filter .up: test esi, esi jz .none mov al, [esi+ecx] add [edi+ecx], al retn ; average filter .average: xor eax, eax mov ebx, ecx sub ebx, [.BytesPerPixel] jl .left_ok add al, [edi+ebx] .left_ok: test esi, esi jz .up_ok add al, [esi+ecx] .up_ok: rcr al, 1 ; 9-bit average add [edi+ecx], al retn ; paeth filter .paeth: push ecx edx xor eax, eax ; A - left mov ebx, ecx sub ebx, [.BytesPerPixel] jl .left_ok2 movzx eax, byte [edi+ebx] .left_ok2: xor edx, edx ; B - above xor ebx, ebx ; C - left, above test esi, esi jz .up_ok2 movzx edx, byte [esi+ecx] sub ecx, [.BytesPerPixel] jl .up_ok2 movzx ebx, byte [esi+ecx] .up_ok2: push ebx edx eax mov ecx, eax add ecx, edx sub ecx, ebx ; p sub [esp], ecx ; pa sub [esp+4], ecx ; pb sub [esp+8], ecx ; pc .abs1: neg dword [esp] jl .abs1 .abs2: neg dword [esp+4] jl .abs2 .abs3: neg dword [esp+8] jl .abs3 mov ecx, [esp] ; pa cmp ecx, [esp+4] ; pb ja .not_a cmp ecx, [esp+8] ; pc jbe .end_pp .not_a: mov ecx, [esp+4] cmp ecx, [esp+8] ja .not_b mov eax, edx jmp .end_pp .not_b: mov eax, ebx .end_pp: add esp, 12 ; free temp variables. pop edx ecx add [edi+ecx], al retn endp endmodule |
Added freshlib/graphics/rectangles.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TGrid object class ; ; Target OS: Any ; ; Dependencies: ; Notes: ;_________________________________________________________________________________________ module "Rectangles library" ; Calculates the bounding rectangle of two source rectangles, pointed by [.src1] and [.src2] ; The result rectangle is placed in RECT structure pointed by [.dest] ; ; All three rectangles may point to the same structures. ; ; Procedure preserves all registers. proc RectBounding, .dest, .src1, .src2 begin pushad mov esi, [.src1] mov edi, [.src2] mov ebx, [.dest] ; min left1, left2 mov eax, [esi+RECT.left] mov edx, [edi+RECT.left] sub edx, eax sbb ecx, ecx and ecx, edx add eax, ecx mov [ebx+RECT.left], eax ; min top1, top2 mov eax, [esi+RECT.top] mov edx, [edi+RECT.top] sub edx, eax sbb ecx, ecx and ecx, edx add eax, ecx mov [ebx+RECT.top], eax ; max right1, right2 mov eax, [esi+RECT.right] mov edx, [edi+RECT.right] sub edx, eax sbb ecx, ecx not ecx and ecx, edx add eax, ecx mov [ebx+RECT.right], eax ; max bottom1, bottom2 mov eax, [esi+RECT.bottom] mov edx, [edi+RECT.bottom] sub edx, eax sbb ecx, ecx not ecx and ecx, edx add eax, ecx mov [ebx+RECT.bottom], eax popad return endp ; Calculates the intersection of two source rectangles, pointed by [.src1] and [.src2] ; The result rectangle is placed in RECT structure pointed by [.dest] ; All three rectangles may point to the same structures. ; ; Returns CF=0 if rectangles intersect and CF=1 if not. ; If the rectangles does not intersect, the [.dest] rectangle will contain all fields = 0 ; ; Procedure preserves all registers. proc RectIntersect, .dest, .src1, .src2 begin pushad mov esi, [.src1] mov edi, [.src2] mov ebx, [.dest] ; max left1, left2 mov ecx, [esi+RECT.left] mov eax, [edi+RECT.left] cmp ecx, eax cmovl ecx, eax mov [ebx+RECT.left], ecx ; min right1, right2 mov edx, [esi+RECT.right] mov eax, [edi+RECT.right] cmp edx, eax cmovg edx, eax mov [ebx+RECT.right], edx cmp ecx, edx jge .null ; max top1, top2 mov ecx, [esi+RECT.top] mov eax, [edi+RECT.top] cmp ecx, eax cmovl ecx, eax mov [ebx+RECT.top], ecx ; min bottom1, bottom2 mov edx, [esi+RECT.bottom] mov eax, [edi+RECT.bottom] cmp edx, eax cmovg edx, eax mov [ebx+RECT.bottom], edx cmp ecx, edx jge .null clc popad return .null: xor eax, eax mov [ebx+RECT.left], eax mov [ebx+RECT.top], eax mov [ebx+RECT.right], eax mov [ebx+RECT.bottom], eax stc popad return endp ; Calculates the intersection of two source rectangles, pointed by [.dst] and [.src] ; The result rectangle is placed in RECT structure pointed by [.dest] ; ; Returns CF=0 if rectangles intersect and CF=1 if not. ; If the rectangles does not intersect, the [.dest] rectangle will contain all fields = 0 ; ; Procedure preserves all registers. proc RectIntersect2, .dest, .src begin pushad mov esi, [.src] mov edi, [.dest] xor ebx, ebx ; the result ; max left1, left2 mov ecx, [esi+RECT.left] mov eax, [edi+RECT.left] cmp ecx, eax cmovl ecx, eax mov [edi+RECT.left], ecx ; min right1, right2 mov edx, [esi+RECT.right] mov eax, [edi+RECT.right] cmp edx, eax cmovg edx, eax mov [edi+RECT.right], edx cmp ecx, edx jl .width_ok xor ecx, ecx mov [edi+RECT.right], ecx mov [edi+RECT.left], ecx dec ebx .width_ok: ; max top1, top2 mov ecx, [esi+RECT.top] mov eax, [edi+RECT.top] cmp ecx, eax cmovl ecx, eax mov [edi+RECT.top], ecx ; min bottom1, bottom2 mov edx, [esi+RECT.bottom] mov eax, [edi+RECT.bottom] cmp edx, eax cmovg edx, eax mov [edi+RECT.bottom], edx cmp ecx, edx jl .finish xor ecx, ecx mov [edi+RECT.top], ecx mov [edi+RECT.bottom], ecx dec ebx .finish: shl ebx, 1 ; set CF popad return endp proc RectCopy, .dest, .src begin pushad mov esi, [.src] mov edi, [.dest] mov eax, [esi+RECT.left] mov ecx, [esi+RECT.top] mov edx, [esi+RECT.right] mov ebx, [esi+RECT.bottom] mov [edi+RECT.left], eax mov [edi+RECT.top], ecx mov [edi+RECT.right], edx mov [edi+RECT.bottom], ebx popad return endp proc RectSort, .src begin push eax ecx esi mov esi, [.src] mov eax, [esi+RECT.left] mov ecx, [esi+RECT.right] cmp ecx, eax jge @f mov [esi+RECT.right], eax mov [esi+RECT.left],ecx @@: mov eax, [esi+RECT.top] mov ecx, [esi+RECT.bottom] cmp ecx, eax jg @f mov [esi+RECT.top],ecx mov [esi+RECT.bottom], eax @@: pop esi ecx eax return endp proc PointInRect, .pRect, .x, .y begin push eax esi mov esi, [.pRect] mov eax, [.x] cmp eax, [esi+RECT.left] jl .no cmp eax, [esi+RECT.right] jge .no mov eax, [.y] cmp eax, [esi+RECT.top] jl .no cmp eax, [esi+RECT.bottom] jge .no stc pop esi eax return .no: clc pop esi eax return endp ; converts RECT to TBounds structure. proc RectToBounds, .ptrBounds, .ptrRect begin pushad mov esi, [.ptrRect] mov edi, [.ptrBounds] mov ebx, [esi+RECT.left] mov edx, [esi+RECT.top] mov eax, [esi+RECT.right] mov ecx, [esi+RECT.bottom] sub eax, ebx sub ecx, edx mov [edi+TBounds.x], ebx mov [edi+TBounds.y], edx mov [edi+TBounds.width], eax mov [edi+TBounds.height], ecx popad return endp proc IsRectZero, .pRect begin pushad mov eax, [.pRect] mov ecx, [eax+RECT.right] mov edx, [eax+RECT.bottom] sub ecx, [eax+RECT.left] jz .zero sub edx, [eax+RECT.top] jz .zero clc popad return .zero: stc popad return endp ; See RectListAdd proc RectListAddXY, .pList, .x, .y, .width, .height begin push eax mov edx, [.x] mov eax, [.y] add [.width], edx add [.height], eax lea eax, [.x] stdcall RectListAdd, [.pList], eax pop eax return endp ; ; Adds new rect to the rectangles list (region). ; Only non intersecting part of the rectangle is added and the resulting ; set of rectangles is always optimal. ; ; As a result some previously added rectangles can be changed or removed. ; The total count of rectangles after this operation can be any. ; ; All rectangles in the array are sorted - i.e. defined by their top/left ; and bottom/right corner, even if [.pRect] contains not sorted rectangle. ; ; Arguments: ; .pList - pointer to TArray of RECT. ; .pRect - pointer to RECT to be added to the array. ; ; Returns: ; edx - pointer to the resulting TArray. Can be the same or reallocated [.pList], depending on the operations. ; proc RectListAdd, .pList, .pRect .end dd ? .sRect RECT begin pushad lea eax, [.sRect] stdcall RectCopy, eax, [.pRect] stdcall RectSort, eax push 0 ; end of queued commands. xor ecx, ecx ; from where to start. .main_loop: mov esi, [.pList] mov edx, [esi+TArray.count] shl ecx, 4 shl edx, 4 lea edx, [esi+TArray.array+edx] ; the end of the array. lea esi, [esi+TArray.array+ecx] ; the start element. mov [.end], edx .loop: cmp esi, [.end] jae .end_loop .again: mov eax, [.sRect.right] mov ecx, [.sRect.bottom] cmp eax, [.sRect.left] je .rect_added ; empty rectangle. cmp ecx, [.sRect.top] je .rect_added ; empty rectangle. dec eax dec ecx stdcall PointToRect, eax, ecx, esi lea ecx, [9*eax] stdcall PointToRect, [.sRect.left], [.sRect.top], esi add ecx, eax movzx eax, byte [.cases+ecx] ; what case for this rectangle? test eax, eax jnz .process_it stdcall RectSort, esi jmp .again .process_it: cmp eax, 1 je .rect_added ; the rectangle is entirely inside the target rectangle. No need to be added. cmp eax, 2 je .try_to_join cmp eax, 6 jbe .case_3456 cmp eax, 7 je .case_7 ; remove the old rectangle. cmp eax, 11 jbe .case_89ab ; clip the new rectangle. cmp eax, 15 jbe .case_cdef ; split the new rectangle on two rectangles. ; case_gh: ;Split the new rectangle on two rectangles another way sub eax, 16 ; dest index. lea ecx, [eax+2] ; src index and ecx, 3 pushd [.sRect.bottom] [.sRect.right] [.sRect.top] [.sRect.left] ; the remaning rectangle. mov edx, [esi+4*ecx] mov [esp+4*eax], edx ; fix remaining rectangle. mov edx, [esi+4*eax] mov [.sRect + 4*ecx], edx lea eax, [esi-TArray.array] sub eax, [.pList] sar eax, 4 inc eax push eax ; from where to start. push 2 ; add rect command. jmp .try_to_join .case_3456: ; clip the target rectangle. sub eax, 3 ; offset in target rect. mov edx, [.sRect+4*eax] ; (X0,Y0,X1,Y1) lea eax, [eax+2] and eax, 3 mov [esi+4*eax], edx ; (A0,B0,A1,B1) ; If the resulting rectangle is zero rectange, it is case_7 (remove the target rectangle) mov eax, [esi+RECT.right] cmp eax, [esi+RECT.left] je .case_7 mov eax, [esi+RECT.bottom] cmp eax, [esi+RECT.top] je .case_7 jmp .try_to_join .case_7: ; the target rectanlge should be removed from the list. The comparison continues with the next rect in the list. lea eax, [esi-TArray.array] sub eax, [.pList] sar eax, 4 ; sizeof.RECT = 16 push eax ; the index of the rectangle that have to be deleted. push 1 ; delete command. jmp .next_rect .case_89ab: ; clip the inserted rectangle and continue to the next target rectangle sub eax, 8 ; offset in target rect. mov edx, [esi+4*eax] lea eax, [eax+2] and eax, 3 mov [.sRect+4*eax], edx jmp .try_to_join .case_cdef: ; split the new rectangle on two rectangles. sub eax, 12 ; src index lea ecx, [eax+2] ; dest index and ecx, 3 pushd [.sRect.bottom] [.sRect.right] [.sRect.top] [.sRect.left] ; the remaning rectangle. mov edx, [esi+4*eax] mov [esp+4*eax], edx ; fix remaining first value. mov [.sRect + 4*ecx], edx ; fix current rectangle inc eax and eax, 3 lea ecx, [eax+2] and ecx, 3 mov edx, [esi+4*eax] mov [esp+4*ecx], edx ; fix remaining second value. lea eax, [esi-TArray.array] sub eax, [.pList] sar eax, 4 inc eax push eax ; from where to start. push 2 ; add rect command. jmp .next_rect ; try to join the rectangle to the current rectangle .try_to_join: ; can be optimized for SIZE!!! mov eax, [.sRect.right] mov ecx, [.sRect.bottom] dec eax dec ecx stdcall PointToRect, eax, ecx, esi mov ecx, eax stdcall PointToRect, [.sRect.left], [.sRect.top], esi cmp ecx, eax jne .next_rect shr ecx, 1 jnc .next_rect ; only odd numbers can be joined. jz .jcase_0 dec ecx jz .jcase_1 dec ecx jz .jcase_2 ; join case 3 mov eax, [.sRect.left] mov ecx, [.sRect.right] mov edx, [.sRect.top] cmp eax, [esi+RECT.left] jne .next_rect cmp ecx, [esi+RECT.right] jne .next_rect cmp edx, [esi+RECT.bottom] jne .next_rect push [esi+RECT.top] pop [.sRect.top] jmp .del_the_current .jcase_2: mov eax, [.sRect.top] mov ecx, [.sRect.bottom] mov edx, [.sRect.left] cmp eax, [esi+RECT.top] jne .next_rect cmp ecx, [esi+RECT.bottom] jne .next_rect cmp edx, [esi+RECT.right] jne .next_rect push [esi+RECT.left] pop [.sRect.left] jmp .del_the_current .jcase_1: mov eax, [.sRect.top] mov ecx, [.sRect.bottom] mov edx, [.sRect.right] cmp eax, [esi+RECT.top] jne .next_rect cmp ecx, [esi+RECT.bottom] jne .next_rect cmp edx, [esi+RECT.left] jne .next_rect push [esi+RECT.right] pop [.sRect.right] jmp .del_the_current .jcase_0: mov eax, [.sRect.left] mov ecx, [.sRect.right] mov edx, [.sRect.bottom] cmp eax, [esi+RECT.left] jne .next_rect cmp ecx, [esi+RECT.right] jne .next_rect cmp edx, [esi+RECT.top] jne .next_rect push [esi+RECT.bottom] pop [.sRect.bottom] .del_the_current: ; queue the current rect for deleting. lea eax, [esi-TArray.array] sub eax, [.pList] sar eax, 4 ; sizeof.RECT = 16 push eax ; the index of the rectangle that have to be deleted. push 1 ; delete command. .next_rect: add esi, sizeof.RECT jmp .loop .end_loop: ; here add the rectangle mov eax, [.sRect.right] sub eax, [.sRect.left] jz .rect_added mov eax, [.sRect.bottom] sub eax, [.sRect.top] jz .rect_added stdcall AddArrayItems, [.pList], 1 mov [.pList], edx ; add the new rectangle to the list. pushd [.sRect.bottom] [.sRect.right] [.sRect.top] [.sRect.left] popd [eax+RECT.left] [eax+RECT.top] [eax+RECT.right] [eax+RECT.bottom] .rect_added: pop eax ; pop the command test eax, eax jz .finish_ok cmp eax, 1 je .delete_element pop ecx ; from index? popd [.sRect+RECT.left] [.sRect+RECT.top] [.sRect+RECT.right] [.sRect+RECT.bottom] jmp .main_loop .delete_element: pop eax ; the index of the element that have to be removed. stdcall DeleteArrayItems, [.pList], eax, 1 mov [.pList], edx jmp .rect_added .finish_ok: popad mov edx, [.pList] ; OutputValue "Rectangles list count:", [edx+TArray.count], 10, -1 return .cases db 2, 0, 0, 0, 0, 0, 0, 0, 0 db 2, 2, 0, 0, 0, 0, 0, 0, 0 db 2, 2, 2, 0, 0, 0, 0, 0, 0 db 2, 0, 0, 2, 0, 0, 0, 0, 0 db 12, 9, 0, 8, 1, 0, 0, 0, 0 db 6, 13, 2, 16, 10, 2, 0, 0, 0 db 2, 0, 0, 2, 0, 0, 2, 0, 0 db 5, 17, 0, 15, 11, 0, 2, 2, 0 db 7, 3, 2, 4, 14, 2, 2, 2, 2 endp ; Computes where [.pPoint] is located relative to [.pRect] ; and returns one of the following values: (4 is the rectangle itself) ; ; +---+---+---+ ; | 0 | 1 | 2 | ; +---+---+---+ ; | 3 | 4 | 5 | ; +---+---+---+ ; | 6 | 7 | 8 | ; +---+---+---+ proc PointToRect, .x, .y, .pRect begin pushad mov edi, [.pRect] xor ecx, ecx mov eax, [.x] mov edx, [.y] cmp eax, [edi+RECT.left] jl .x_ok inc ecx cmp eax, [edi+RECT.right] jl .x_ok inc ecx .x_ok: cmp edx, [edi+RECT.top] jl .y_ok add ecx, 3 cmp edx, [edi+RECT.bottom] jl .y_ok add ecx, 3 .y_ok: mov [esp+4*regEAX], ecx popad return endp proc PrintRectList, .pRectList begin pushad mov esi, [.pRectList] mov ecx, [esi+TArray.count] lea esi, [esi+TArray.array] stdcall FileWriteString, [STDERR], <txt 13, 10, 13, 10> .loop: dec ecx js .end_of_loop stdcall FileWriteString, [STDERR], txt "Rectangle: " stdcall NumToStr, [esi+RECT.left], ntsDec or ntsSigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack. stdcall FileWriteString, [STDERR], txt ", " stdcall NumToStr, [esi+RECT.top], ntsDec or ntsSigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack. stdcall FileWriteString, [STDERR], txt ", " mov eax, [esi+RECT.right] sub eax, [esi+RECT.left] stdcall NumToStr, eax, ntsDec or ntsSigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack. stdcall FileWriteString, [STDERR], txt ", " mov eax, [esi+RECT.bottom] sub eax, [esi+RECT.top] stdcall NumToStr, eax, ntsDec or ntsSigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack. stdcall FileWriteString, [STDERR], <txt 13, 10> add esi, sizeof.RECT jmp .loop .end_of_loop: stdcall FileWriteString, [STDERR], <txt 13, 10, 13, 10> .finish: popad return endp endmodule |
Added freshlib/graphics/recycler.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Small library that allows already allocated images to be recycled in order ; to avoid frequent allocation/deallocation of memory. ; ; Target OS: Any ; ; Dependencies: ;_________________________________________________________________________________________ module "Image recycling library" uglobal align 4 var pFirstRecycledImage = ? endg ; proc RecycleImage ; stores the image in the image pool for recycling. proc RecycleImage, .pImage begin push esi edi mov esi, [.pImage] test esi, esi jz .finish and [esi+TImage.wrapW], 0 mov edi, esi lock xchg edi, [pFirstRecycledImage] mov [esi+TImage.wrapW], edi .finish: pop edi esi return endp griExactWidth = 0 griMoreWidth = 1 griExactHeight = 0 griMoreHeight = 2 ; Searches the image pool for image having desired width and height. ; Notice, that this search is a fuzzy process. The returned image ; is guaranteed to have width and height greater or equal to the desired. ; the TImage.wrapW and TImage.wrapH are set to be exactly equal to .w and .h ; arguments. TImage.orgX and TImage.orgY are set to 0. ; The image pixel data can be random and should be considered invalid. ; ; Notice, that if the relevant image is not found in the pool, new ; image will be allocated. I.e. in the worst case scenario, the speed of ; this procedure degrades to the default CreateImage. ; proc GetRecycledImage, .w, .h, .flags if defined options.RecyclerBenchmark & options.RecyclerBenchmark .start dd ? end if begin pushad xor edi, edi if defined options.RecyclerBenchmark & options.RecyclerBenchmark stdcall GetFineTimestamp mov [.start], eax end if mov ecx, [.w] test [.flags], griMoreWidth jz .max_width_ok lea ecx, [ecx*3+32] shr ecx, 1 .max_width_ok: mov edx, [.h] test [.flags], griMoreHeight jz .max_height_ok lea edx, [edx*3+32] shr edx, 1 .max_height_ok: mov ebx, pFirstRecycledImage .search: mov esi, [ebx] test esi, esi jz .not_found mov eax, [.w] cmp [esi+TImage.width], eax jl .next cmp [esi+TImage.width], ecx jg .next mov eax, [.h] cmp [esi+TImage.height], eax jl .next cmp [esi+TImage.height], edx jle .found .next: inc edi lea ebx, [esi+TImage.wrapW] ; the previous image. jmp .search .not_found: stdcall CreateImage2, ecx, edx, FALSE mov esi, eax jmp .set_size .found: ; remove from the list. mov eax, [esi+TImage.wrapW] ; the .next field. mov [ebx], eax .set_size: mov eax, [.w] mov ecx, [.h] xor edx, edx mov [esi+TImage.orgX], edx mov [esi+TImage.orgY], edx mov [esi+TImage.wrapW], eax mov [esi+TImage.wrapH], ecx mov [esp+4*regEAX], esi if defined options.RecyclerBenchmark & options.RecyclerBenchmark stdcall GetFineTimestamp sub eax, [.start] OutputValue "Image recycler work[us]: ", eax, 10, -1 OutputValue "Searched images: ", edi, 10, -1 end if popad return endp ; Frees all images from the pool. proc FreeImagePool begin push esi mov esi, [pFirstRecycledImage] .free_loop: test esi, esi jz .finish push esi mov esi, [esi+TImage.wrapW] stdcall DestroyImage ; from the stack jmp .free_loop .finish: mov [pFirstRecycledImage], 0 pop esi return endp endmodule |
Changes to freshlib/graphics/text.asm.
|
| > > > > > > > | | > | > > > > | > | > > > > | > > > | | > | > > | > > > > > | | > > > > | | > > > > > | > | > > > > > > > > < | > | | > | < < < < < | > | | > > | < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < < < < < < < < < < < < < | < | < < < < < < < < < < < < < | < < | < < < < < < < | < < < < < < < < < < < < < < < < | < < < < < < < < < < < < | < < < < < < | < < | | < < < < < < | < < < < < < < < < < < < | < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < | | < < < < | < | | < < < < < < < < < < | | | | < < < | < | < < | | < | | < | < < | | < | | < | | < < < < < < | | > | | | | < < | < > > > | > > | > > | > > > > > > > > | | | > > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Text drawing library. ; ; Target OS: Any ; ; Dependencies: StrLib ; ; Notes: This file contains OS independent part of the library and includes respective ; OS dependent files. ;_________________________________________________________________________________________ module "Text library" ; troXXXX - text rendering options. troSubpixel = 0 troGrayscale = 1 troMonochrome = 2 troSubpixelV = 3 iglobal var TextRenderOptions = troSubpixel ;troGrayscale endg ; dtfXXX means "draw text flag" dtfHAlignMask = $3 dtfVAlignMask = $c ; horizontal align dtfAlignLeft = 0 dtfAlignRight = 1 dtfAlignCenter = 2 dtfAlignJustify = 3 ; vertical align dtfAlignTop = 0 shl 2 dtfAlignBottom = 1 shl 2 dtfAlignMiddle = 2 shl 2 ; Text layout dtfCRLF = $0100 dtfWordWrap = $0200 dtfTableTabs = $0400 dtfSingleLine = $0800 ; Text suppress dtfNone = $80000000 struct TTextExtent .width dd ? .height dd ? .OffsX dd ? .OffsY dd ? ends struct TCharAttr .font dd ? .color dd ? .background dd ? .flags dd ? ; for free use of the client. ends struct TChunkFormat .length dd ? .font dd ? .color dd ? .flags dd ? ends struct TChunkColor .length dd ? .color dd ? .bkgnd dd ? .flags dd ? ends struct _TTextChunk .y dd ? .width dd ? .len dd ? .ptr dd ? ends struct TTextChar .code dd ? ; unicode of the character. .width dw ? ; width increment in pixels. .height dw ? ; height increment in pixels - if <> 0 this char must be written on new line. ends interface DrawString, .pImage, .pString, .len, .x, .y, .font, .color interface TextDecompose, .hString, .font interface DrawDecomposedString, .pImage, .pArray, .x, .y, .font, .color interface GetTextBounds, .pString, .len, .font ; Draws a rectangle of TText object with monospaced font. ; ; .pImage - where to draw. ; .pText - pointer to TText structure. ; ; .pColors - pointer to TArray of TChunkColor to be used for drawing. ; .pFont - font to be used. Must be monospaced. ; .wChar, .hChar - width and height of the font characters. ; ; .xOrg, .yOrg - the upper left corner in pixels of the whole text. ; .xFrom, .yFrom - the upper left corner in characters from where to draw. ; .width, height - the width and height in characters of the rectangle to draw. interface DrawFormattedMonoText, .pImage, .pText, .pColors, .pFont, .wChar, .hChar, .xOrg, .yOrg, .xFrom, .yFrom, .width, .height proc AdjustCountUtf8 begin push esi lea esi, [esi+ebx] stdcall ScanBackUtf8 mov ebx, esi pop esi sub ebx, esi return endp proc JustifyLine, .CharArray, .from, .to, .current_width, .align_width begin pushad dec [.to] ; don't change the last character width. mov edi, [.CharArray] mov ecx, [.to] sub ecx, [.from] jle .finish mov edx, [.align_width] sub edx, [.current_width] jle .finish mov esi, edx mov ebx, [.from] .align_loop: inc ebx cmp ebx, [.to] jae .finish cmp word [edi+TArray.array+8*ebx+TTextChar.width], 0 je .skip_this .sub: test esi, esi js .negative sub esi, ecx inc word [edi+TArray.array+8*ebx+TTextChar.width] jmp .sub .negative: add esi, edx jmp .align_loop .skip_this: dec ecx jnz .align_loop .finish: popad return endp proc DrawTextBox, .pImage, .text, .x, .y, .width, .height, .extra_line, .flags, .font, .color .ascender dd ? .descender dd ? .line_height dd ? .txt_height dd ? .last_word dd ? .lw_width dd ? .no_just dd ? begin pushad stdcall GetFontMetrics, [.font] mov [.line_height], eax mov [.ascender], ebx mov [.descender], edx add [.y], ebx stdcall TextDecompose, [.text], [.font] mov edi, eax xor ecx, ecx mov [.txt_height], ecx cmp [edi+TArray.count], ecx je .finish .main_loop: ; start of new line xor ebx, ebx ; current X coordinate. or [.last_word], -1 ; end of the word -1 means there is no word from the beginning of the line. mov eax, [.txt_height] cmp eax, [.height] jb .format_it mov eax, [.extra_line] sub [.txt_height], eax mov [edi+TArray.count], ecx jmp .draw_all2 .format_it: stdcall InsertArrayItems, edi, ecx, 1 mov edi, edx mov [eax+TTextChar.code], $20 mov dword [eax+TTextChar.width], ebx ; Set to zero TTextChar.height as well! mov esi, ecx ; start of the line! inc ecx .slice_loop: ; Is it end of a word? cmp [edi+TArray.array+8*ecx+TTextChar.code], $20 ja .white_ok test ecx, ecx jz .white_ok cmp [edi+TArray.array+8*ecx-8+TTextChar.code], $20 ; previous character jbe .white_ok mov [.last_word], ecx ; edx is a pointer to the end of the last word. mov [.lw_width], ebx .white_ok: test [.flags], dtfCRLF jz .crlf_ok mov [.no_just], 1 cmp [edi+TArray.array+8*ecx+TTextChar.code], $0d je .new_line cmp [edi+TArray.array+8*ecx+TTextChar.code], $0a je .new_line .crlf_ok: mov [.no_just], 0 test [.flags], dtfTableTabs jz .tabs_ok ; implement here check for tab and tabs expanding. .tabs_ok: ; check the current line width movzx eax, word [edi+TArray.array+8*ecx+TTextChar.width] add eax, ebx cmp eax, [.width] ja .wider mov ebx, eax inc ecx cmp ecx, [edi+TArray.count] jb .slice_loop mov [.no_just], 1 call .RowAlign jmp .draw_all .wider: test [.flags], dtfSingleLine jnz .del_remaining mov eax, ecx sub eax, esi cmp eax, 1 jbe .finish ; Even single char can not be displayed on this [.width] ; next line .new_line: test [.flags], dtfWordWrap jz .word_ok ; word wrap cmp [.last_word], 0 jl .word_ok ; there is no previous word, so split on the current pos. mov ecx, [.last_word] mov ebx, [.lw_width] .word_ok: call .RowAlign mov eax, [.line_height] add eax, [.extra_line] add [.txt_height], eax mov word [edi+TArray.array+8*ecx-8+TTextChar.height], ax test [.flags], dtfCRLF jz .skip_ws_loop mov eax, [edi+TArray.array+8*ecx+TTextChar.code] cmp eax, $0d je .skip_cr cmp eax, $0a jne .skip_ws_loop .skip_cr: mov word [edi+TArray.array+8*ecx+TTextChar.width], 0 ; zero width, skip it. inc ecx cmp ecx, [edi+TArray.count] je .draw_all xor eax, $0d xor $0a cmp [edi+TArray.array+8*ecx+TTextChar.code], eax jne .main_loop mov word [edi+TArray.array+8*ecx+TTextChar.width], 0 ; zero width, skip it. inc ecx cmp ecx, [edi+TArray.count] jae .draw_all jmp .main_loop .del_remaining: mov eax, [edi+TArray.count] sub eax, ecx stdcall DeleteArrayItems, edi, ecx, eax jmp .draw_all .skip_ws_loop: cmp [edi+TArray.array+8*ecx+TTextChar.code], $20 ja .main_loop mov word [edi+TArray.array+8*ecx+TTextChar.width], 0 ; zero width, skip it. inc ecx cmp ecx, [edi+TArray.count] jb .skip_ws_loop .draw_all: ; compute the vertical align. mov eax, [.line_height] add [.txt_height], eax .draw_all2: mov ecx, [.height] sub ecx, [.txt_height] mov eax, [.flags] and eax, dtfVAlignMask cmp eax, dtfAlignTop je .drawit add [.y], ecx cmp eax, dtfAlignBottom je .drawit sar ecx, 1 sub [.y], ecx .drawit: stdcall DrawDecomposedString, [.pImage], edi, [.x], [.y], [.font], [.color] .finish: stdcall FreeMem, edi popad return .RowAlign: mov eax, [.flags] and eax, dtfHAlignMask cmp eax, dtfAlignLeft je .align_ok ; no need for extra space cmp eax, dtfAlignJustify jne .align_center_right cmp [.no_just], 1 je .align_ok stdcall JustifyLine, edi, esi, ecx, ebx, [.width] jmp .align_ok .align_center_right: mov edx, [.width] sub edx, ebx cmp eax, dtfAlignRight je .set_align sar edx, 1 .set_align: mov word [edi+TArray.array+8*esi+TTextChar.width], dx .align_ok: retn endp proc DrawStringFormatted, .pImage, .pString, .len, .x, .y, .pFormat begin pushad mov esi, [.pString] mov edi, [.pFormat] mov ecx, [.len] test ecx, ecx jns .loop stdcall StrLen, esi mov ecx, eax .loop: mov eax, [edi+TChunkFormat.length] test eax, eax jns @f stdcall StrLen, esi @@: stdcall DrawString, [.pImage], esi, eax, [.x], [.y], [edi+TChunkFormat.font], [edi+TChunkFormat.color] add [.x], eax mov eax, [edi+TChunkFormat.length] test eax, eax js .finish add edi, sizeof.TChunkFormat add esi, eax sub ecx, eax jae .loop .finish: popad return endp proc GetTextBounds2D, .pText, .font .line dd ? begin pushad stdcall GetFontMetrics, [.font] mov [.line], eax xor ebx, ebx xor ecx, ecx mov esi, [.pText] .loopy: mov edi, esi ; start of the line. .loopx: lodsb test al, al jz .eol cmp al, $0d je .eol cmp al, $a0 jne .loopx .eol: lea edx, [esi-1] sub edx, edi ; the string length xor al, $0d xor $0a cmp al, byte [esi] jne .cr_ok inc esi .cr_ok: cmp al, $0d xor $0a pushf stdcall GetTextBounds, edi, edx, [.font] cmp ebx, eax cmovb ebx, eax add ecx, [.line] popf jne .loopy .end: mov [esp+4*regEAX], ebx mov [esp+4*regEDX], ecx popad return endp include "%TargetOS%/text.asm" endmodule |
Added freshlib/gui/Dummy/Main.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Main procedure of GUI application library. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: Organize the main message/event loop needed by every GUI engine. ;_________________________________________________________________________________________ proc ProcessSystemEvents begin stc return endp proc WaitForSystemEvent begin return endp ;---------------------------------------------------------------------------------------------------------- ; This procedure makes following: ; 1. Takes as arguments one windows message ; 2. Converts this message to FreshLib system event (or not, depending on the message) ; 3. Calls SysEventHandler procedures for the given object (if any) with the created event structure. ; 4. returns CF=0 if the event was properly processed. ; 5. returns CF=1 if the event was not processed. ; ; The event can be not processed in the following cases: ; 1. The window that receives the message is not FreshLib object. ; 2. TObjectClass.procSysEventHandler = 0 for the given class and all parents. ; 3. All procSysEventHandler procedures refuse to process the event (CF=1) ;---------------------------------------------------------------------------------------------------------- dproc __ProcessOneSystemEvent, .hwnd, .wmsg, .wparam, .lparam begin dispatch [.wmsg] .ondefault: stc return oncase 0 clc return enddp |
Added freshlib/gui/Dummy/TApplication.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TApplication object class. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ proc TApplication.Create, .obj begin clc return endp proc TApplication.Get, .obj, .paramID begin stc return endp proc TApplication.Set, .obj, .paramID, .value begin stc return endp proc TApplication.SysEventHandler, .obj, .event begin stc return endp |
Added freshlib/gui/Dummy/keycodes.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This file contains scan code values for control keyboard keys. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ keyHomeNumpad = $47 keyUpNumpad = $48 keyPgUpNumpad = $49 keyLeftNumpad = $4b key5Numpad = $4c keyRightNumpad = $4d keyEndNumpad = $4f keyDownNumpad = $50 keyPgDnNumpad = $51 keyInsNumpad = $52 keyDelNumpad = $53 keyEnterNumpad = $1c ; it is ASCII $0d keyPlusNumpad = $4e keyMinusNumpad = $4a keyAsteriskNumpad = $37 keySlashNumpad = $35 keyNumLock = $45 keyScrollLock = $46 keyPause = $45 keyPrtScr = $37 keyLeft = $4b keyRight = $4d keyUp = $48 keyDown = $50 keyInsert = $52 keyDelete = $53 keyHome = $47 keyEnd = $4f keyPgUp = $49 keyPgDown = $51 keyF1 = $3b keyF2 = $3c keyF3 = $3d keyF4 = $3e keyF5 = $3f keyF6 = $40 keyF7 = $41 keyF8 = $42 keyF9 = $43 keyF10 = $44 ; used for menu and does not generate WM_KEYDOWN. keyF11 = $57 keyF12 = $58 keyCapsLock = $3a keyShiftLeft = $2a keyCtrlLeft = $1d keyWndLeft = $5b keyWndRight = $5c keyAltLeft = $38 keyAltRight = $38 keyPopupMenu = $5d keyShiftRight = $36 keyCtrlRight = $1d keyBackSpace = $0e |
Added freshlib/gui/Dummy/mouse.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Provides unified access to standard mouse cursors. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ proc SetMouseCursor, .hCursor begin return endp proc GetStockCursor, .index begin return endp proc MouseCapture, .hwnd begin return endp |
Added freshlib/gui/Dummy/windows.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Window management OS interface functions. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ;_________________________________________________________________________________________ proc _CreateNullWindow begin return endp ;_________________________________________________________________________________________ proc _DestroyWindow, .hwnd begin return endp ;_________________________________________________________________________________________ proc _GetParent, .hwnd begin return endp ;_________________________________________________________________________________________ proc _GetChildren, .hwnd begin return endp ;_________________________________________________________________________________________ proc _GetVisible, .hwnd begin return endp ;_________________________________________________________________________________________ proc _GetWindowBounds, .hwnd, .pBounds begin return endp ;_________________________________________________________________________________________ proc _SetWindowBounds, .hwnd, .pBounds begin return endp ;_________________________________________________________________________________________ proc _SetWindowBorder, .hwnd, .brdType begin return endp ;_________________________________________________________________________________________ proc _ShowWindow, .hwnd, .flag begin return endp ;_________________________________________________________________________________________ proc _RefreshWindow, .hwnd begin return endp ;_________________________________________________________________________________________ proc _SetFocus, .hwnd begin return endp ;_________________________________________________________________________________________ proc _AddChild, .hwnd, .child begin return endp ;_________________________________________________________________________________________ ; Common utility procedures. ;_________________________________________________________________________________________ ; ; Returns the window TObject structure, from the window handle. ;_________________________________________________________________________________________ proc _GetWindowStruct, .hwin begin return endp ;_________________________________________________________________________________________ proc _SetWindowStruct, .hwin, .value begin return endp ;_________________________________________________________________________________________ proc _SetWindowTextUtf8, .hwnd, .ptrUtf8 begin return endp ;_________________________________________________________________________________________ proc _GetWindowTextUtf8, .hwnd, .ptrUtf8 begin return endp ;_________________________________________________________________________________________ proc _EnableWindow, .hwnd, .flag begin return endp ;_________________________________________________________________________________________ proc _SetModalTowards, .hwnd, .hwndParent begin return endp ;_________________________________________________________________________________________ proc _FinalizeModal, .hwnd, .hwndParent begin return endp ;_________________________________________________________________________________________ proc __CommonWindowProc, .hwnd, .wmsg, .wparam, .lparam begin return endp |
Added freshlib/gui/KolibriOS/Main.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Main procedure of GUI application library. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: Organize the main message/event loop needed by every GUI engine. ;_________________________________________________________________________________________ proc ProcessSystemEvents begin stc return endp proc WaitForSystemEvent begin return endp ;---------------------------------------------------------------------------------------------------------- ; This procedure makes following: ; 1. Takes as arguments one windows message ; 2. Converts this message to FreshLib system event (or not, depending on the message) ; 3. Calls SysEventHandler procedures for the given object (if any) with the created event structure. ; 4. returns CF=0 if the event was properly processed. ; 5. returns CF=1 if the event was not processed. ; ; The event can be not processed in the following cases: ; 1. The window that receives the message is not FreshLib object. ; 2. TObjectClass.procSysEventHandler = 0 for the given class and all parents. ; 3. All procSysEventHandler procedures refuse to process the event (CF=1) ;---------------------------------------------------------------------------------------------------------- proc __ProcessOneSystemEvent, .hwnd, .wmsg, .wparam, .lparam begin dispatch [.wmsg] .ondefault: stc return oncase 0 clc return enddispatch endp |
Added freshlib/gui/KolibriOS/application.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TApplication object class. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ uglobal var FTLibrary = ? var FTCManager = ? var FTCImageCache = ? var FTCCMapCache = ? endg proc InitGUIApplication begin return endp proc TerminateGUI begin return endp |
Added freshlib/gui/KolibriOS/clipboard.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Clipboard management library. ; ; Target OS: KolibriOS ; ; Dependencies: ;_________________________________________________________________________________________ ; returns eax = handle to string with the clipboard data. body ClipboardRead begin return endp ; writes the string .hstring to the clipboard. ; returns nothing. body ClipboardWrite;, .hstring begin return endp |
Added freshlib/gui/KolibriOS/keycodes.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This file contains scan code values for control keyboard keys. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ keyHomeNumpad = $47 keyUpNumpad = $48 keyPgUpNumpad = $49 keyLeftNumpad = $4b key5Numpad = $4c keyRightNumpad = $4d keyEndNumpad = $4f keyDownNumpad = $50 keyPgDnNumpad = $51 keyInsNumpad = $52 keyDelNumpad = $53 keyEnterNumpad = $1c ; it is ASCII $0d keyPlusNumpad = $4e keyMinusNumpad = $4a keyAsteriskNumpad = $37 keySlashNumpad = $35 keyNumLock = $45 keyScrollLock = $46 keyPause = $45 keyPrtScr = $37 keyLeft = $4b keyRight = $4d keyUp = $48 ; 72 keyDown = $50 keyInsert = $52 keyDelete = $53 keyHome = $47 keyEnd = $4f keyPgUp = $49 keyPgDown = $51 keyF1 = $3b keyF2 = $3c keyF3 = $3d keyF4 = $3e keyF5 = $3f keyF6 = $40 keyF7 = $41 keyF8 = $42 keyF9 = $43 keyF10 = $44 ; used for menu and does not generate WM_KEYDOWN. keyF11 = $57 keyF12 = $58 keyCapsLock = $3a keyShiftLeft = $2a keyCtrlLeft = $1d keyWndLeft = $5b keyWndRight = $5c keyAltLeft = $38 keyAltRight = $38 keyPopupMenu = $5d keyShiftRight = $36 keyCtrlRight = $1d keyBackSpace = $0e keyTab = $ff00 keyA = 'a' keyB = 'b' keyC = 'c' keyD = 'd' keyE = 'e' keyF = 'f' keyG = 'g' keyH = 'h' keyI = 'i' keyJ = 'j' keyK = 'k' keyL = 'l' keyM = 'm' keyN = 'n' keyO = 'o' keyP = 'p' keyQ = 'q' keyR = 'r' keyS = 's' keyT = 't' keyU = 'u' keyV = 'v' keyW = 'w' keyX = 'x' keyY = 'y' keyZ = 'z' |
Added freshlib/gui/KolibriOS/mouse.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Provides unified access to standard mouse cursors. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ body SetMouseCursor ;, .hWindow, .hCursor begin return endp body GetStockCursor ;, .index begin return endp body __MouseCapture ;, .hwnd begin return endp body ZeroMouseMove begin return endp |
Added freshlib/gui/KolibriOS/windows.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Window management OS interface functions. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ body _CreateWindow begin return endp ;_________________________________________________________________________________________ body _DestroyWindow begin return endp ;_________________________________________________________________________________________ body _ClientToScreen begin return endp ;_________________________________________________________________________________________ body _RefreshWindowRect begin return endp ;_________________________________________________________________________________________ body _SetWindowTextUtf8 begin return endp ;_________________________________________________________________________________________ body _SetModalTowards begin return endp body _FinalizeModal begin return endp ;_________________________________________________________________________________________ ; Common utility procedures. ;_________________________________________________________________________________________ ; ; Returns the window TObject structure, from the window handle. ;_________________________________________________________________________________________ body _GetWindowStruct begin return endp ;_________________________________________________________________________________________ body _SetWindowStruct begin return endp ;_________________________________________________________________________________________ |
Added freshlib/gui/Linux/Main.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Main procedure of GUI application library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Organize the main message/event loop needed by every GUI engine. ;_________________________________________________________________________________________ uglobal if used fGlobalTerminate fGlobalTerminate dd ? end if if used __PrevClick __PrevClick evButtonPress end if if used __pExposeList __pExposeList dd ? end if if used __pMotionEvent __pMotionEvent dd ? end if endg body ProcessSystemEvents .evExpose evExpose begin pushad xor eax, eax xchg eax, [__pMotionEvent] test eax, eax jz .event_loop stdcall FreeMem, eax .event_loop: cmp [fGlobalTerminate], 0 ; check for quit jne .terminate stdcall xRecv, appConn, FALSE jc .noevents test eax, eax jz .noevents ; because of some reason the read mutex can't be locked. Try the next time. mov ebx, eax ;.process: cmp [ebx+xResponse.code], rspError ; error je .error cmp [ebx+xResponse.code], rspReply ; reply je .reply ; its event here cmp [ebx+xAnyEvent.event], Expose jne .expose_ok ; expose event. mov edx, [__pExposeList] test edx, edx jnz .lst_ok stdcall CreateArray, sizeof.RECT mov edx, eax .lst_ok: mov eax, [ebx+evExpose.window] cmp eax, [edx+TArray.lparam] je .add_expose call .flush_expose .add_expose: movzx eax, [ebx+evExpose.x] movzx ecx, [ebx+evExpose.y] movzx esi, [ebx+evExpose.width] movzx edi, [ebx+evExpose.height] stdcall RectListAddXY, edx, eax, ecx, esi, edi mov eax, [ebx+evExpose.window] mov [edx+TArray.lparam], eax mov [__pExposeList], edx jmp .next .expose_ok: cmp [ebx+xAnyEvent.event], MotionNotify jne .process_event mov eax, [ebx+evMotionNotify.window] xchg ebx, [__pMotionEvent] test ebx, ebx jz .event_loop cmp eax, [ebx+evMotionNotify.window] je .next .process_event: stdcall __ProcessOneSystemEvent, ebx .next: stdcall FreeMem, ebx jmp .event_loop .flush_expose: push edx mov edi, [edx+TArray.count] mov eax, [edx+TArray.lparam] mov [.evExpose.window], eax mov [.evExpose.event], Expose mov [.evExpose.count], 0 mov [.evExpose.seq], 0 lea edx, [edx+TArray.array] .flush_loop: dec edi js .end_flush mov eax, [edx+RECT.left] mov ecx, [edx+RECT.top] mov [.evExpose.x], ax mov [.evExpose.y], cx mov eax, [edx+RECT.right] mov ecx, [edx+RECT.bottom] sub eax, [edx+RECT.left] sub ecx, [edx+RECT.top] mov [.evExpose.width], ax mov [.evExpose.height], cx lea eax, [.evExpose] stdcall __ProcessOneSystemEvent, eax add edx, sizeof.RECT jmp .flush_loop .end_flush: pop edx mov [edx+TArray.count], 0 retn ; process replies. .reply: ; Dispatch the replies to the callbacks if any. Else, discard. movzx ecx, [ebx+xAnyReply.seq] OutputValue "Reply for sequence: ", ecx, 10, -1 xor esi, esi xchg [appConn.pFCallback], esi ;(xchg is always atomic regardless of lock prefix) test esi, esi jz .next ; there is no records in the queue .loop_forward: cmp cx, word [esi+xCallback.sequence] jl .processed ; it is too early for this callback, restore the queue. jg .discard ; ; call the callback pushad stdcall [esi+xCallback.proc], ebx, [esi+xCallback.lparam] popad .discard: push esi ; for calling FreeMem below. mov eax, esi ; Either it was the last record (esi == .pLCallback) so lea edx, [appConn.pFCallback] ; reset the queue, or it is not the last and it is safe to lock cmpxchg [appConn.pLCallback], edx ; manipulate the .p_next field and write to the .pFCallback field. je .free ; possible race condition here if new pointer is written to .pLCallback, but ; the previous element xCallback.p_next is not updated yet. xor eax, eax .wait: pause xchg [esi+xCallback.p_next], eax test eax, eax jz .wait mov esi, eax ; next element in the queue stdcall FreeMem ; from the stack jmp .loop_forward .free: stdcall FreeMem ; from the stack jmp .next .processed: mov [appConn.pFCallback], esi ; it is safe to write here, because there is at least one element in the queue jmp .next ; so, the pFCallback field should not be written from another thread. .error: stdcall OutputErrorMessage, ebx jmp .next .noevents: xor edx, edx xchg edx, [__pExposeList] test edx, edx jz .exp_ok call .flush_expose stdcall FreeMem, edx .exp_ok: xor ebx, ebx xchg ebx, [__pMotionEvent] test ebx, ebx jz .finish stdcall __ProcessOneSystemEvent, ebx stdcall FreeMem, ebx .finish: clc popad return .terminate: stc popad return endp ; call this function on freeing window ID (in xFreeID). proc __CleanupDeferedEvents, .id begin push eax edx mov eax, [.id] mov edx, [__pExposeList] test edx, edx jz .expose_ok cmp eax, [edx+TArray.lparam] jne .expose_ok xor edx, edx xchg edx, [__pExposeList] stdcall FreeMem, edx .expose_ok: mov edx, [__pMotionEvent] test edx, edx jz .finish cmp eax, [edx+evMotionNotify.window] jne .finish xor edx, edx xchg edx, [__pMotionEvent] stdcall FreeMem, edx .finish: pop edx eax return endp proc OutputErrorMessage, .xerror begin pushad stdcall DebugLock mov esi, [.xerror] stdcall FileWriteString, [STDERR], txt "XError code: " movzx ecx, [ebx+xAnyError.error] cmp ecx, .count ja .show_number stdcall FileWriteString, [STDERR], txt "Bad" lea ecx, [2*ecx] lea ecx, [8*ecx+.noerror] stdcall FileWrite, [STDERR], ecx, 16 jmp .errnum_ok .show_number: stdcall NumToStr, eax, ntsDec or ntsUnsigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack .errnum_ok: stdcall FileWrite, [STDERR], <txt 13, 10>, 2 ; bad sequence stdcall FileWriteString, [STDERR], "Sequence number: " movzx eax, [ebx+xAnyError.seq] stdcall NumToStr, eax, ntsDec or ntsUnsigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack stdcall FileWrite, [STDERR], <txt 13, 10>, 2 ; on operation: stdcall FileWriteString, [STDERR], "Operation opcode: " movzx eax, [ebx+xAnyError.major] stdcall NumToStr, eax, ntsDec or ntsUnsigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack stdcall FileWriteString, [STDERR], txt "." movzx eax, [ebx+xAnyError.minor] stdcall NumToStr, eax, ntsDec or ntsUnsigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack stdcall FileWrite, [STDERR], <txt 13, 10>, 2 ; Bad value movzx eax, [ebx+xAnyError.error] cmp [.hasval + eax], 0 je .value_ok stdcall FileWriteString, [STDERR], "Bad value: $" mov eax, [ebx+xAnyError.bad_num] stdcall NumToStr, eax, ntsHex or ntsUnsigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack stdcall FileWriteString, [STDERR], txt " (" mov eax, [ebx+xAnyError.bad_num] stdcall NumToStr, eax, ntsDec or ntsSigned push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack stdcall FileWriteString, [STDERR], <txt ")", 13, 10> .value_ok: stdcall FileWrite, [STDERR], <txt 13, 10>, 2 stdcall DebugUnlock popad return .noerror dq "NoError ", " " .request dq "Request ", " " .value dq "Value ", " " .window dq "Window ", " " .pixmap dq "Pixmap ", " " .atom dq "Atom ", " " .cursor dq "Cursor ", " " .font dq "Font ", " " .match dq "Match ", " " .drawable dq "Drawable", " " .access dq "Access ", " " .alloc dq "Alloc ", " " .colormap dq "Colormap", " " .gcontext dq "GContext", " " .idchoice dq "IDChoise", " " .name dq "Name ", " " .length dq "Length ", " " .implem dq "Implemen", "tation " .count = ($ - .noerror)/16 .hasval db 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0 endp ; Wait for events, but with timeout. ; Somehow tricky implementation. body WaitForSystemEvent .timeout lnx_timeval .fd_set rb 128 begin pushad lea edi, [.fd_set] xor eax, eax mov ecx, 32 rep stosd mov [.timeout.tv_sec], eax mov [.timeout.tv_usec], 50000 mov ecx, [appConn.socket] mov eax, ecx and ecx, 11111b shr eax, 5 bts dword [.fd_set+4*eax], ecx mov eax, sys_select mov ebx, [appConn.socket] inc ebx lea ecx, [.fd_set] xor edx, edx xor esi, esi lea edi, [.timeout] int 80h test eax, eax jz .its_timeout .finish_ok: clc popad return .its_timeout: stc popad return endp proc __ProcessOneSystemEvent, .xevent begin pushad mov ebx, [.xevent] .base: movzx ecx, [ebx+xAnyEvent.event] and ecx, $7f ; the bit 7 indicates messages sent by SendMessage. ; clipboard events cmp ecx, [appConn.exFixes.FirstEvent] je .sel_owner_changed cmp ecx, SelectionRequest je .sel_req_event cmp ecx, SelectionNotify je .sel_notify_event ; events without window cmp ecx, [appConn.exKbd.FirstEvent] je .xkb_event cmp ecx, [appConn.exShm.FirstEvent] je .shm_complete cmp ecx, MappingNotify je .mapping_notify ; events with window cmp ecx, LASTEvent jae .notprocessed movzx eax, [.jump_table+4*ecx+2] movzx ecx, [.jump_table+4*ecx] jecxz .notprocessed test eax, eax jz .notprocessed ; the event is not about window add ecx, .base mov esi, dword [ebx+eax] ; eax is the offset inside the raw event structure of the window ID stdcall xGetObj, appConn, esi jc .notprocessed mov esi, eax jmp ecx .notprocessed: popad stc return .finish: popad clc return .xkb_event: OutputValue "XKB Event #", ecx, 10, -1 OutputMemoryByte ebx, 32 jmp .mapping_notify .shm_complete: stdcall xGetObj, appConn, [ebx+evShmCompletion.segID] jc .finish mov [eax+TLinuxImage.readonly], 0 jmp .finish ; refreshes keyboard mapping information, stored locally. .mapping_notify: locals .getmap __xXkbGetMapReq endl mov eax, [appConn.exKbd.OpCode] mov [.getmap.op], al mov [.getmap.minor], opXkbGetMap mov [.getmap.length], sizeof.__xXkbGetMapReq/4 mov [.getmap.deviceSpec], xkbUseCoreKbd mov [.getmap.full], mxkbKeySyms mov [.getmap.partial], 0 lea eax, [.getmap] stdcall xSendWithCallback, appConn, eax, __IndexKeymap, 0 jmp .finish ;......................................................................... ; seMove and seResize events. ;------------------------------------------------------------------------- .moveresize: ; ConfigureNotify event test [ebx+evConfigureNotify.event], $80 jz .is_resize ; the correct move events are only from the window manager, i.e. through SendEvent movsx eax, [ebx+evConfigureNotify.x] movsx edx, [ebx+evConfigureNotify.y] cmp eax, [esi+TWindow._x] jne .move cmp edx, [esi+TWindow._y] je .is_resize .move: exec esi, TWindow:ExtMove, eax, edx ; resize event... .is_resize: movzx eax, [ebx+evConfigureNotify.width] movzx edx, [ebx+evConfigureNotify.height] cmp eax, [esi+TWindow._width] jne .resize cmp edx, [esi+TWindow._height] je .finish .resize: exec esi, TWindow:ExtResize, eax, edx jmp .finish ;......................................................................... ; DestroyNotify handler it invalidates the handle in TWindow structure and then destroys TWindow. ; Do we need it??? .destroy: test esi, esi jz .finish ; mov [esi+TWindow.handle], 0 ; destroy esi jmp .finish ;......................................................................... ; Mouse event handlers .mousemove: movsx ecx, [ebx+evMotionNotify.x] movsx edx, [ebx+evMotionNotify.y] movzx eax, [ebx+evMotionNotify.state] stdcall ServeMenuMouseMove, esi, ecx, edx, eax jc .finish mov edi, [__MouseTarget] test edi, edi jz .search_target_move ; returns coordinates in ecx, edx stdcall __GetRelativeXY, edi, ecx, edx jmp .target_move .search_target_move: ; returns coordinates in ecx, edx exec esi, TWindow:ChildByXY, ecx, edx, TRUE mov edi, eax .target_move: cmp edi, [__LastPointedWindow] je .move_event cmp [__LastPointedWindow], 0 je .leave_ok exec [__LastPointedWindow], TWindow:EventMouseLeave .leave_ok: mov [__LastPointedWindow], edi exec edi, TWindow:EventMouseEnter .move_event: movzx eax, [ebx+evMotionNotify.state] exec edi, TWindow:EventMouseMove, ecx, edx, eax jmp .finish .mouseleave: xor eax, eax xchg eax, [__LastPointedWindow] test eax, eax jz .finish exec eax, TWindow:EventMouseLeave jmp .finish ;......................................................................... .mouse_btn_press: movsx ecx, [ebx+evButtonPress.x] movsx edx, [ebx+evButtonPress.y] movzx eax, [ebx+evButtonPress.state] movzx edi, [ebx+evButtonPress.detail] stdcall ServeMenuButtonPress, esi, edi, eax, ecx, edx jc .finish mov edi, [__MouseTarget] test edi, edi jz .search_target_press stdcall __GetRelativeXY, edi, ecx, edx jmp .target_press .search_target_press: exec esi, TWindow:ChildByXY, ecx, edx, TRUE mov edi, eax .target_press: get eax, edi, TWindow:GlobalEnabled test eax, eax jz .finish cmp [ebx+evButtonPress.detail], mbScrollUp ; the codes for the scroll are 4, 5, 6 and 7 jae .wheelscroll ; deal with focus stdcall __SetIntFocused, edi ; now detect double clicks: mov al, [ebx+evButtonPress.detail] cmp al, [__PrevClick.detail] jne .single mov eax, [ebx+evButtonPress.time] sub eax, [__PrevClick.time] cmp eax, [GUI.DoubleClickTime] ja .single xor eax, eax mov ax, [ebx+evButtonPress.x] sub ax, [__PrevClick.x] jns @f neg ax @@: cmp eax, [GUI.DoubleClickDistance] ja .single mov ax, [ebx+evButtonPress.y] sub ax, [__PrevClick.y] jns @f neg ax @@: cmp eax, [GUI.DoubleClickDistance] ja .single ; double click detected movzx eax, [ebx+evButtonPress.detail] movzx ebx, [ebx+evButtonPress.state] push eax exec edi, TWindow:EventButtonPress, eax, ebx, ecx, edx pop eax exec edi, TWindow:EventButtonDoubleClick, eax, ebx, ecx, edx ;clear the previous mov edi, __PrevClick mov ecx, sizeof.evButtonPress / 4 xor eax, eax rep stosd jmp .finish .single: movzx eax, [ebx+evButtonPress.detail] movzx ebx, [ebx+evButtonPress.state] exec edi, TWindow:EventButtonPress, eax, ebx, ecx, edx ; copy the previous event mov esi, [.xevent] mov edi, __PrevClick mov ecx, sizeof.evButtonPress / 4 rep movsd jmp .finish .wheelscroll: movzx ecx, [ebx+evButtonPress.detail] mov edx, scrollY cmp ecx, mbScrollLeft jae .scrollx test [ebx+evButtonPress.state], maskShift ; generate horizontal scroll events when the Shift button is pressed during the scroll. jz .dir_ok .scrollx: mov edx, scrollX and ecx, $5 ; converts mbScrollLeft/mbScrollRight to scWheelUp/scWheelDn (number magic!!!) .dir_ok: exec edi, TWindow:EventScroll, edx, ecx, 1 jmp .finish ;......................................................................... .mouse_btn_release: mov edi, [__MouseTarget] test edi, edi jz .search_target_release ; OutputValue "Release mouse target: ", edi, 16, 8 movsx ecx, [ebx+evButtonRelease.x] movsx edx, [ebx+evButtonRelease.y] stdcall __GetRelativeXY, edi, ecx, edx jmp .target_release .search_target_release: ; OutputValue "Search for mouse target in: ", esi, 16, 8 movsx ecx, [ebx+evButtonRelease.x] movsx edx, [ebx+evButtonRelease.y] exec esi, TWindow:ChildByXY, ecx, edx, TRUE mov edi, eax .target_release: ; OutputValue "Release mouse target found: ", edi, 16, 8 get eax, eax, TWindow:GlobalEnabled test eax, eax jz .finish movzx eax, [ebx+evButtonRelease.detail] movzx ebx, [ebx+evButtonRelease.state] exec edi, TWindow:EventButtonRelease, eax, ebx, ecx, edx jmp .finish ;......................................................................... ; Window paint event .expose: get edi, esi, TWindow:Screen test edi, edi jz .finish if defined Caret stdcall __PaintCaret, esi, edi end if movzx eax, [ebx+evExpose.count] movzx ecx, [ebx+evExpose.width] movzx edx, [ebx+evExpose.height] movsx eax, [ebx+evExpose.x] movsx ebx, [ebx+evExpose.y] ; OutputValue "Expose width: ", ecx, 10, -1 ; OutputValue "Expose height: ", edx, 10, -1 stdcall DrawImageRect, [esi+TWindow.handle], edi, eax, ebx, eax, ebx, ecx, edx mov eax, [.xevent] movzx eax, [eax+evExpose.count] test eax, eax jnz .finish ; there are other expose events waiting. if defined options.DebugMode.ComputeFPS & options.DebugMode.ComputeFPS stdcall FramesPerSecond end if xor eax, eax xor edx, edx xchg eax, [esi+TWindow.sync_valueLo] xchg edx, [esi+TWindow.sync_valueHi] test eax, eax jnz .set_counter test edx, edx jz .finish ; XSYNC handling of the window resize by the window manager. .set_counter: locals .cnt __xSetCounterReq endl mov ecx, [esi+TWindow.sync_counter] test ecx, ecx jz .finish mov [.cnt.counterID], ecx OutputValue "SetCounter valueLo: ", eax, 10, -1 OutputValue "SetCounter valueHi: ", edx, 10, -1 mov [.cnt.valueHi], edx mov [.cnt.valueLo], eax mov eax, [appConn.exSync.OpCode] mov [.cnt.op], al mov [.cnt.minor], opSetCounter mov [.cnt.length], sizeof.__xSetCounterReq/4 lea eax, [.cnt] stdcall xSend, appConn, eax jmp .finish ;......................................................................... ; Keyboard events. .key_press: movzx eax, [ebx+evKeyPress.detail] movzx edx, [ebx+evKeyPress.state] stdcall KeycodeToKeysym, [appConn.pKeymap], eax, edx mov ecx, eax stdcall KeysymToUnicode, eax, edx stdcall EncodeUtf8, eax mov edx, eax mov edi, [__ActiveMenu] test edi, edi jnz .send_key_event mov edi, [__FocusedWindow] test edi, edi jz .active_form .send_key_event: movzx eax, [ebx+evKeyPress.state] exec edi, TWindow:EventKeyPress, edx, ecx, eax jc .finish .active_form: cmp [__ActiveForm], 0 je .finish get edi, [__ActiveForm], TForm:ActionList test edi, edi jz .finish movzx eax, [ebx+evKeyPress.state] exec edi, TActionList:EventKeyPress, edx, ecx, eax jmp .finish ;......................................................................... .key_release: cmp [__FocusedWindow], 0 je .finish movzx eax, [ebx+evKeyRelease.detail] movzx ebx, [ebx+evKeyRelease.state] stdcall KeycodeToKeysym, [appConn.pKeymap], eax, ebx mov ecx, eax stdcall KeysymToUnicode, eax, ebx stdcall EncodeUtf8, eax mov edx, eax exec [__FocusedWindow], TWindow:EventKeyRelease, edx, ecx, ebx jmp .finish ;......................................................................... ; Some property was changed. Check for the Window state .property_changed: locals .pget __xGetPropertyReq endl ;options.DebugMode = 1 ; OutputValue "Property changed event: ", [ebx+evPropertyChanged.property], 16, 8 ; OutputValue "_NET_WM_STATE = ", [cNetWMState], 16, 8 ; DebugMsg ;options.DebugMode = 0 mov eax, [ebx+evPropertyChanged.property] cmp eax, [atomState] jne .finish mov ecx, [ebx+evPropertyChanged.window] mov [.pget.op], opGetProperty mov [.pget.delete], FALSE mov [.pget.length], sizeof.__xGetPropertyReq/4 mov [.pget.window], ecx mov [.pget.property], eax mov [.pget.type], atomATOM mov [.pget.data_ofs], 0 mov [.pget.data_len], 4 lea eax, [.pget] stdcall xSendWithCallback, appConn, eax, WindowStateChanged, ecx jmp .finish ;......................................................................... ; This event is sent from the window manager or other X client application .clientmessage: mov eax, dword [ebx+evClientMessage.data] ; data[0] cmp eax, [wmProtocols.atomWMPing] jne .maybe_delete ; _NET_WM_PING protocol handling locals .ping __xSendEventReq endl mov eax, [appConn.rootID] mov [ebx+evClientMessage.window], eax mov [.ping.op], opSendEvent mov [.ping.propagate], 0 mov [.ping.length], sizeof.evClientMessage/4 + sizeof.__xSendEventReq/4 mov [.ping.dest], eax mov [.ping.event_mask], maskSubstructureNotify or maskSubstructureRedirect stdcall xReqStart, appConn lea eax, [.ping] stdcall xReqSend, appConn, eax, sizeof.__xSendEventReq stdcall xReqSend, appConn, ebx, sizeof.evClientMessage stdcall xReqEnd, appConn OutputValue "_NET_WM_PING sequence: ", [appConn.Sequence], 10, -1 jmp .finish .maybe_delete: cmp eax, [wmProtocols.atomWMDelete] jne .maybe_sync ; The window is closed by click on close button or by pressing Alt+F4 or by other WM method ;.close_from_wm: exec esi, TWindow:CloseRequest, cerFromUser jmp .finish .maybe_sync: cmp eax, [wmProtocols.atomWMSyncRequest] jne .unknown_client_msg ; XSYNC protocol message. It contains a value for the counter that ; to be set when all the repaints of the window are finished. ; See the .expose handling above. ;if defined options.DebugMode & options.DebugMode ; stdcall NumToStr64, [ebx+evClientMessage.data + 8], [ebx+evClientMessage.data + 12], ntsDec or ntsSigned ; push eax ; stdcall FileWriteString, [STDERR], <txt 13, 10, "_NET_WM_SYNC_REQUEST counter: "> ; mov eax, [esp] ; stdcall FileWriteString, [STDERR], eax ; stdcall FileWriteString, [STDERR], <txt 13, 10> ; stdcall StrDel ; from the stack ;end if ; store the value for later XSyncSetCounter mov eax, [ebx+evClientMessage.data + 8] mov edx, [ebx+evClientMessage.data + 12] xchg eax, [esi+TWindow.sync_valueLo] xchg edx, [esi+TWindow.sync_valueHi] ;if defined options.DebugMode & options.DebugMode ; test eax, eax ; jnz .err_prev ; ; test edx, edx ; jz .finish ; ;.err_prev: ; OutputValue "ERROR! Previous value not set to the counter: ", eax, 10, -1 ;end if jmp .finish .unknown_client_msg: jmp .finish ;......................................................................... ; Focus handling events. .focusin: call .hide_menu istype esi, TForm jne @f mov [__ActiveForm], esi @@: stdcall __SetIntFocused, esi jmp .finish .focusout: call .hide_menu stdcall __SetIntFocused, 0 istype esi, TForm jne .finish mov [__ActiveForm], 0 jmp .finish .hideall: set eax, TMenu:Visible, FALSE .hide_menu: xor eax, eax xchg eax, [__ActiveMenu] test eax, eax jnz .hideall retn .sel_owner_changed: DebugMsg "SelectionOwnerChanged event!" cmp [ebx+evFixSelectionNotify.subtype], evFixSetSelectionOwner jne .notprocessed mov eax, [ebx+evFixSelectionNotify.owner] cmp eax, [__idClipboardWindow] je .finish ; we already have this selection. locals .conv __xConvertSelectionReq endl mov eax, [atomClipboard] cmp [ebx+evFixSelectionNotify.selection], eax jne .finish ; we are working only with Clipboard selection. mov ebx, [__idClipboardWindow] mov ecx, [atomTargets] mov [.conv.op], opConvertSelection mov [.conv.length], sizeof.__xConvertSelectionReq/4 mov [.conv.requestor], ebx mov [.conv.selection], eax mov [.conv.target], ecx mov [.conv.property], atomCUT_BUFFER0 ; reuse predefined atoms! and [.conv.time], 0 lea eax, [.conv] stdcall xSend, appConn, eax jmp .finish .sel_notify_event: DebugMsg "SelectionNotify event!" locals .getprop __xGetPropertyReq endl cmp [ebx+evSelectionNotify.property], 0 ; not converted. je .empty mov [.getprop.op], opGetProperty mov [.getprop.delete], TRUE mov [.getprop.length], sizeof.__xGetPropertyReq/4 mov eax, [ebx+evSelectionNotify.requestor] mov edx, [ebx+evSelectionNotify.property] mov ecx, [ebx+evSelectionNotify.target] mov [.getprop.window], eax mov [.getprop.property], edx mov [.getprop.type], 0 ; ecx mov [.getprop.data_ofs], 0 mov [.getprop.data_len], $7fffffff lea eax, [.getprop] stdcall xSendWithCallback, appConn, eax, GetClipboardCallback, [ebx+evSelectionNotify.target] jmp .finish .empty: xor eax, eax xchg eax, [pClipboard] stdcall __ClipboardFree, eax jmp .finish ; ; For proper handling of the SelectionRequest event, carefully read the following article: ; ; [Peer-to-Peer Communication by Means of Selections] https://tronche.com/gui/x/icccm/sec-2.html ; .sel_req_event: locals .chprop __xChangePropertyReq .targets rd 3 .selntf __xSendEventReq .selntfev evSelectionNotify endl DebugMsg "SelectionRequest event!" OutputValue "Selection request selection: ", [ebx+evSelectionRequest.selection], 16, 8 OutputValue " owner: ", [ebx+evSelectionRequest.owner], 16, 8 OutputValue " requestor: ", [ebx+evSelectionRequest.requestor], 16, 8 OutputValue " target: ", [ebx+evSelectionRequest.target], 10, -1 OutputValue " property: ", [ebx+evSelectionRequest.property], 10, -1 mov eax, [ebx+evSelectionRequest.requestor] mov edx, [ebx+evSelectionRequest.selection] mov [.selntf.op], opSendEvent mov [.selntf.propagate], FALSE mov [.selntf.length], (sizeof.__xSendEventReq + sizeof.evSelectionNotify)/4 mov [.selntf.dest], eax mov [.selntf.event_mask], 0 mov [.selntfev.event], SelectionNotify mov [.selntfev.requestor], eax mov [.selntfev.time], 0 mov [.selntfev.selection], edx mov [.chprop.op], opChangeProperty mov [.chprop.mode], PropModeReplace mov [.chprop.wid], eax cmp edx, [atomClipboard] jne .refuse mov eax, [ebx+evSelectionRequest.property] mov ecx, [ebx+evSelectionRequest.target] test eax, eax cmovz eax, ecx ; obsolete clients support. mov [.selntfev.property], eax mov [.selntfev.target], ecx mov [.chprop.prop], eax cmp ecx, [atomTargets] je .send_targets cmp ecx, [atomStringUtf8] je .target_ok cmp ecx, atomSTRING jne .refuse .target_ok: mov [.chprop.type], ecx mov [.chprop.format], 8 mov ebx, [pClipboard] stdcall __ClipboardLock, ebx mov eax, [ebx+TClipboard.Length] mov [.chprop.datalen], eax lea ecx, [eax+3] and ecx, $fffffffc ; align to 4 bytes mov eax, ecx shr eax, 2 add eax, sizeof.__xChangePropertyReq/4 mov [.chprop.length], ax ; sent opChangeProperty request stdcall xReqStart, appConn lea eax, [.chprop] stdcall xReqSend, appConn, eax, sizeof.__xChangePropertyReq lea eax, [ebx+TClipboard.data] stdcall xReqSend, appConn, eax, ecx stdcall xReqEnd, appConn stdcall __ClipboardUnlock, ebx jmp .send_event .refuse: mov [.selntfev.property], 0 ; None ; send SelectionNotify event to the requestor. .send_event: lea eax, [.selntf] stdcall xSend, appConn, eax jmp .finish .send_targets: mov [.chprop.type], atomATOM mov [.chprop.format], 32 mov [.chprop.length], 3 + sizeof.__xChangePropertyReq/4 mov [.chprop.datalen], 3 ; in format units. mov eax, [atomTargets] mov [.targets], eax mov [.targets+4], atomSTRING mov eax, [atomStringUtf8] mov [.targets+8], eax lea eax, [.chprop] stdcall xSend, appConn, eax jmp .send_event ;......................................................................... .jump_table dw 0, 0 ; event 0 dw 0, 0 ; event 1 dw .key_press - .base, evKeyPress.window ; KeyPress = 2 dw .key_release - .base, evKeyRelease.window ; KeyRelease = 3 dw .mouse_btn_press - .base, evButtonPress.window ; ButtonPress = 4 dw .mouse_btn_release - .base, evButtonRelease.window ; ButtonRelease = 5 dw .mousemove - .base, evMotionNotify.window ; MotionNotify = 6 dw 0, 0 ; EnterNotify = 7 dw .mouseleave - .base, evLeaveNotify.window ; LeaveNotify = 8 dw .focusin - .base, evFocusIn.window ; FocusIn = 9 dw .focusout - .base, evFocusOut.window ; FocusOut = 10 dw 0, 0 ; KeymapNotify = 11 dw .expose - .base, evExpose.window ; Expose = 12 dw 0, 0 ; GraphicsExpose = 13 dw 0, 0 ; NoExpose = 14 dw 0, 0 ; VisibilityNotify = 15 dw 0, 0 ; CreateNotify = 16 dw .destroy - .base, evDestroyNotify.window ; DestroyNotify = 17 dw 0, 0 ; UnmapNotify = 18 dw 0, 0 ; MapNotify = 19 dw 0, 0 ; MapRequest = 20 dw 0, 0 ; ReparentNotify = 21 dw .moveresize - .base, evConfigureNotify.window ; ConfigureNotify = 22 dw 0, 0 ; ConfigureRequest = 23 dw 0, 0 ; GravityNotify = 24 dw 0, 0 ; ResizeRequest = 25 dw 0, 0 ; CirculateNotify = 26 dw 0, 0 ; CirculateRequest = 27 dw .property_changed - .base, evPropertyChanged.window ; PropertyNotify = 28 dw 0, 0 ; SelectionClear = 29 dw 0, 0 ; SelectionRequest = 30 dw 0, 0 ; SelectionNotify = 31 dw 0, 0 ; ColormapNotify = 32 dw .clientmessage - .base, evClientMessage.window ; ClientMessage = 33 dw 0, 0 ; MappingNotify = 34 endp proc __IndexKeymap as xCallbackProc .size dd ? begin DebugMsg "Keymap callback procedure." mov ebx, [.pReply] lea esi, [ebx + sizeof.__xXkbGetMapRep] ; the start of the keymap mov eax, [ebx + __xXkbGetMapRep.length] mov ecx, eax lea eax, [4*eax + 256*4] mov [.size], eax stdcall GetMem, eax jc .memory_error push eax lea edi, [eax + 256*4] ; the keymap in the allocated buffer. rep movsd mov edi, eax ; the start of the index lea esi, [eax + 256*4] ; the start of the copied keymap movzx ecx, [ebx + __xXkbGetMapRep.minKeyCode] movzx edx, [ebx + __xXkbGetMapRep.maxKeyCode] sub edx, ecx ; the total count of keycodes in the map - 1 xor eax, eax rep stosd ; fill the first ECX index items with 0 mov ecx, edx lea esi, [esi + sizeof.__xXkbGetMapRep2] ; the remaining header of the reply. we don't need it. .loop: dec ecx js .end_loop mov [edi], esi add edi, 4 movzx eax, [esi + xkbKeysymMapItem.nSyms] lea esi, [esi + 4*eax + sizeof.xkbKeysymMapItem] jmp .loop .end_loop: pop eax xchg eax, [appConn.pKeymap] stdcall FreeMem, eax return .memory_error: int3 return endp proc GetClipboardCallback as xCallbackProc .conv __xConvertSelectionReq begin DebugMsg "GetClipboardCallback" mov edi, [.pReply] mov eax, [atomTargets] cmp eax, [.lparam] je .get_targets xor eax, eax movzx edx, [edi+__xGetPropertyRep.format] shr edx, 3 ; from bits to bytes, size of the data elements. jz .finish lea eax, [edi+__xGetPropertyRep.data] mov ecx, [edi+__xGetPropertyRep.datalen] imul ecx, edx stdcall __ClipboardFromMem, eax, ecx, clipboardString jnc .finish xor eax, eax .finish: xchg eax, [pClipboard] stdcall __ClipboardFree, eax return .get_targets: lea esi, [edi+__xGetPropertyRep.data] mov ecx, [edi+__xGetPropertyRep.datalen] xor ebx, ebx .loop: dec ecx js .end_loop lodsd cmp eax, [atomStringUtf8] cmove ebx, eax test ebx, ebx jnz .loop cmp eax, atomSTRING cmove ebx, eax jmp .loop .end_loop: test ebx, ebx jnz .get_string ; Clear the clipboard. There is no compatible target. xor eax, eax jmp .finish .get_string: mov eax, [__idClipboardWindow] mov ecx, [atomClipboard] mov [.conv.op], opConvertSelection mov [.conv.length], sizeof.__xConvertSelectionReq/4 mov [.conv.requestor], eax mov [.conv.selection], ecx mov [.conv.target], ebx mov [.conv.property], atomCUT_BUFFER0 ; reuse predefined atoms! and [.conv.time], 0 lea eax, [.conv] stdcall xSend, appConn, eax .exit: return endp proc WindowStateChanged as xCallbackProc begin mov esi, [.pReply] DebugMsg "Window state changed" stdcall xGetObj, appConn, [.lparam] jc .finish test eax, eax jz .finish mov edi, eax mov ecx, [esi+__xGetPropertyRep.datalen] xor ebx, ebx ; the new window state .loop: dec ecx js .endloop mov eax, [esi+__xGetPropertyRep.data+4*ecx] cmp eax, [atomStateMaximizedVert] jne .not_vert or ebx, wstMaximizedVert jmp .loop .not_vert: cmp eax, [atomStateMaximizedHorz] jne .not_horz or ebx, wstMaximizedHorz jmp .loop .not_horz: cmp eax, [atomStateHidden] jne .loop or ebx, wstMinimized jmp .loop .endloop: mov [edi+TWindow._window_state], ebx .finish: return endp |
Added freshlib/gui/Linux/__encodings/BuildKeysymTable.fpr.
cannot compute difference between binary files
Added freshlib/gui/Linux/__encodings/build.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console options.DebugMode = 0 include "%lib%/freshlib.asm" options.DebugMode = 1 ; include your includes here. start: InitializeAll mov ecx, 65536/2 mov edi, Table xor eax, eax mov [TableLen], eax rep stosd mov [MaxKeycode], eax dec eax mov [MinKeycode], eax stdcall GetCmdArguments jc .error_arg mov edi, eax .check_params: cmp [edi+TArray.count], 2 jb .error_arg stdcall FileOpen, [edi+TArray.array+4] ; "keysyms_encoding.txt" jc .file_not_found mov [hSourceFile], eax .line_loop: stdcall FileReadLine, [hSourceFile] jc .error_read test eax, eax jz .end_of_file stdcall ProcessOneLine, eax stdcall StrDel, eax jmp .line_loop .end_of_file: stdcall FileClose, ebx cmp [edi+TArray.count], 3 jb .default_file mov eax, [edi+TArray.array+8] jmp .save .default_file: mov eax, cDefaultOutput .save: stdcall SaveSimpleTable, eax ; mov ecx, [TableLen] ; inc ecx ; shl ecx, 1 ; OutputValue "Table length: ", ecx, 10, -1 ; OutputMemoryByte Table, ecx ; ; stdcall SaveBinaryFile, eax, Table, ecx stdcall ListFree, edi, StrDel jmp .finish cDefaultOutput text 'table.bin' .error_read: stdcall FileWriteString, [STDERR], <'Source file read error.', 13, 10> jmp .end_of_file .file_not_found: stdcall FileWriteString, [STDERR], <'Source file not found.', 13, 10> jmp .finish .error_arg: stdcall FileWriteString, [STDERR], <'Use: build.exe SOURCE DESTINATION', 13, 10> .finish: FinalizeAll stdcall TerminateAll, 0 proc ProcessOneLine, .hString begin pushad mov eax, [.hString] stdcall StrClipSpacesR, eax stdcall StrClipSpacesL, eax stdcall StrCleanDupSpaces, eax stdcall StrLCase, eax ; push eax ; stdcall FileWriteString, [STDOUT], [.hString] ; stdcall FileWriteString, [STDOUT], cCRLF ; pop eax stdcall StrPtr, eax mov esi, eax cmp byte [esi], '#' je .finish ; comment line mov edi, esi .loop1: lodsb cmp al, ' ' ja .loop1 test al, al jz .finish ; the string is invalid, skip it. dec esi mov eax, esi sub eax, edi stdcall StrExtract, edi, 0, eax push eax stdcall StrToNumEx, eax stdcall StrDel ; from the stack jc .finish ; invalid number mov ebx, eax ; remember for now. ; OutputValue "Keysym: ", ebx, 16, 8 .loop2: lodsb test al, al jz .finish ; there is no second number cmp al, ' ' jbe .loop2 dec esi mov edi, esi .loop3: lodsb cmp al, ' ' ja .loop3 dec esi mov eax, esi sub eax, edi stdcall StrExtract, edi, 0, eax push eax stdcall StrToNumEx, eax stdcall StrDel ; from the stack jc .finish ; invalid second number - undefined character. ; OutputValue "Unicode: ", eax, 16, 8 cmp eax, $ffff ja .finish ; too big unicode letter. Should be fixed maybe, but the tables are 16 bit. ; stdcall AddToHashTable, ebx, eax, 7 stdcall AddToSimpleTable, ebx, eax .finish: popad return endp proc AddToSimpleTable, .keysym, .unicode begin pushad movzx eax, byte [.keysym] movzx edx, word [.unicode] mov word [Table+2*eax], dx mov ebx, [MinKeycode] mov ecx, [MaxKeycode] cmp ebx, eax cmova ebx, eax cmp ecx, eax cmovb ecx, eax mov [MinKeycode], ebx mov [MaxKeycode], ecx popad return endp proc SaveSimpleTable, .hFilename begin pushad mov ebx, [MinKeycode] mov ecx, [MaxKeycode] sub ecx, ebx lea edi, [Table+2*ebx-2] mov [edi], bl mov [edi+1], cl ; sub ecx, ebx add ecx, 2 add ecx, ecx OutputValue "Table length: ", ecx, 10, -1 OutputMemoryByte edi, ecx stdcall SaveBinaryFile, [.hFilename], edi, ecx popad return endp proc AddToHashTable, .keysym, .unicode, .bits begin pushad xor ebx, ebx mov ecx, [.bits] .loop: dec ecx js .end_loop xor eax, eax bt [.keysym], ecx adc eax, eax movzx edx, byte [Table+2*ebx+eax] test edx, edx jnz .offset_ok inc [TableLen] mov edx, [TableLen] sub edx, ebx mov byte [Table+2*ebx+eax], dl test dh, dh jz .offset_ok OutputValue "Keysym: ", [.keysym], 16, 8 OutputValue "Bit:", ecx, 10, -1 OutputValue "Offset: ", edx, 10, -1 .offset_ok: add ebx, edx jmp .loop .end_loop: mov eax, [.unicode] mov word [Table+2*ebx], ax popad return endp uglobal hSourceFile dd ? TableLen dd ? MinKeycode dd ? MaxKeycode dd ? Table rw 65536 endg |
Added freshlib/gui/Linux/__encodings/build.sh.
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/sh ./build ./keysyms1.txt ./keysyms1.tbl ./build ./keysyms2.txt ./keysyms2.tbl ./build ./keysyms3.txt ./keysyms3.tbl ./build ./keysyms4.txt ./keysyms4.tbl ./build ./keysyms5.txt ./keysyms5.tbl ./build ./keysyms6.txt ./keysyms6.tbl ./build ./keysyms7.txt ./keysyms7.tbl ./build ./keysyms10.txt ./keysyms10.tbl ./build ./keysyms12.txt ./keysyms12.tbl ./build ./keysyms13.txt ./keysyms13.tbl |
Added freshlib/gui/Linux/__encodings/keysyms1.tbl.
cannot compute difference between binary files
Added freshlib/gui/Linux/__encodings/keysyms1.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 0x01A1 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK 0x01A2 0x02D8 #BREVE 0x01A3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE 0x01A5 0x013D #LATIN CAPITAL LETTER L WITH CARON 0x01A6 0x015A #LATIN CAPITAL LETTER S WITH ACUTE 0x01A9 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0x01AA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA 0x01AB 0x0164 #LATIN CAPITAL LETTER T WITH CARON 0x01AC 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE 0x01AE 0x017D #LATIN CAPITAL LETTER Z WITH CARON 0x01AF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE 0x01B1 0x0105 #LATIN SMALL LETTER A WITH OGONEK 0x01B2 0x02DB #OGONEK 0x01B3 0x0142 #LATIN SMALL LETTER L WITH STROKE 0x01B5 0x013E #LATIN SMALL LETTER L WITH CARON 0x01B6 0x015B #LATIN SMALL LETTER S WITH ACUTE 0x01B7 0x02C7 #CARON 0x01B9 0x0161 #LATIN SMALL LETTER S WITH CARON 0x01BA 0x015F #LATIN SMALL LETTER S WITH CEDILLA 0x01BB 0x0165 #LATIN SMALL LETTER T WITH CARON 0x01BC 0x017A #LATIN SMALL LETTER Z WITH ACUTE 0x01BD 0x02DD #DOUBLE ACUTE ACCENT 0x01BE 0x017E #LATIN SMALL LETTER Z WITH CARON 0x01BF 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE 0x01C0 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE 0x01C3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE 0x01C5 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE 0x01C6 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE 0x01C8 0x010C #LATIN CAPITAL LETTER C WITH CARON 0x01CA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK 0x01CC 0x011A #LATIN CAPITAL LETTER E WITH CARON 0x01CF 0x010E #LATIN CAPITAL LETTER D WITH CARON 0x01D0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE 0x01D1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE 0x01D2 0x0147 #LATIN CAPITAL LETTER N WITH CARON 0x01D5 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0x01D8 0x0158 #LATIN CAPITAL LETTER R WITH CARON 0x01D9 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE 0x01DB 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0x01DE 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA 0x01E0 0x0155 #LATIN SMALL LETTER R WITH ACUTE 0x01E3 0x0103 #LATIN SMALL LETTER A WITH BREVE 0x01E5 0x013A #LATIN SMALL LETTER L WITH ACUTE 0x01E6 0x0107 #LATIN SMALL LETTER C WITH ACUTE 0x01E8 0x010D #LATIN SMALL LETTER C WITH CARON 0x01EA 0x0119 #LATIN SMALL LETTER E WITH OGONEK 0x01EC 0x011B #LATIN SMALL LETTER E WITH CARON 0x01EF 0x010F #LATIN SMALL LETTER D WITH CARON 0x01F0 0x0111 #LATIN SMALL LETTER D WITH STROKE 0x01F1 0x0144 #LATIN SMALL LETTER N WITH ACUTE 0x01F2 0x0148 #LATIN SMALL LETTER N WITH CARON 0x01F5 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE 0x01F8 0x0159 #LATIN SMALL LETTER R WITH CARON 0x01F9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE 0x01FB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE 0x01FE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA 0x01FF 0x02D9 #DOT ABOVE |
Added freshlib/gui/Linux/__encodings/keysyms10.tbl.
cannot compute difference between binary files
Added freshlib/gui/Linux/__encodings/keysyms10.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 0x0AA1 0x2003 #EM SPACE Publish 0x0AA2 0x2002 #EN SPACE Publish 0x0AA3 0x2004 #3/EM SPACE Publish 0x0AA4 0x2005 #4/EM SPACE Publish 0x0AA5 0x2007 #DIGIT SPACE Publish 0x0AA6 0x2008 #PUNCTUATION SPACE Publish 0x0AA7 0x2009 #THIN SPACE Publish 0x0AA8 0x200A #HAIR SPACE Publish 0x0AA9 0x2014 #EM DASH Publish 0x0AAA 0x2013 #EN DASH Publish 0x0AAC 0x2423 #SIGNIFICANT BLANK SYMBOL Publish 0x0AAE 0x2026 #ELLIPSIS Publish 0x0AAF 0x2025 #DOUBLE BASELINE DOT Publish 0x0AB0 0x2153 #VULGAR FRACTION ONE THIRD Publish 0x0AB1 0x2154 #VULGAR FRACTION TWO THIRDS Publish 0x0AB2 0x2155 #VULGAR FRACTION ONE FIFTH Publish 0x0AB3 0x2156 #VULGAR FRACTION TWO FIFTHS Publish 0x0AB4 0x2157 #VULGAR FRACTION THREE FIFTHS Publish 0x0AB5 0x2158 #VULGAR FRACTION FOUR FIFTHS Publish 0x0AB6 0x2159 #VULGAR FRACTION ONE SIXTH Publish 0x0AB7 0x215A #VULGAR FRACTION FIVE SIXTHS Publish 0x0AB8 0x2105 #CARE OF Publish 0x0ABB 0x2012 #FIGURE DASH Publish 0x0ABC 0x3008 #LEFT ANGLE BRACKET Publish 0x0ABD 0x002e #DECIMAL POINT Publish 0x0ABE 0x3009 #RIGHT ANGLE BRACKET Publish 0x0AC3 0x215B #VULGAR FRACTION ONE EIGHTH Publish 0x0AC4 0x215C #VULGAR FRACTION THREE EIGHTHS Publish 0x0AC5 0x215D #VULGAR FRACTION FIVE EIGHTHS Publish 0x0AC6 0x215E #VULGAR FRACTION SEVEN EIGHTHS Publish 0x0AC9 0x2122 #TRADEMARK SIGN Publish 0x0AD0 0x2018 #LEFT SINGLE QUOTATION MARK Publish 0x0AD1 0x2019 #RIGHT SINGLE QUOTATION MARK Publish 0x0AD2 0x201C #LEFT DOUBLE QUOTATION MARK Publish 0x0AD3 0x201D #RIGHT DOUBLE QUOTATION MARK Publish 0x0AD4 0x211E #PRESCRIPTION, TAKE, RECIPE Publish 0x0AD5 0x2030 #PER MILLE SIGN Publish 0x0AD6 0x2032 #MINUTES Publish 0x0AD7 0x2033 #SECONDS Publish 0x0AD9 0x271D #LATIN CROSS Publish 0x0AEC 0x2663 #CLUB Publish 0x0AED 0x2666 #DIAMOND Publish 0x0AEE 0x2665 #HEART Publish 0x0AF0 0x2720 #MALTESE CROSS Publish 0x0AF1 0x2020 #DAGGER Publish 0x0AF2 0x2021 #DOUBLE DAGGER Publish 0x0AF3 0x2713 #CHECK MARK, TICK Publish 0x0AF4 0x2717 #BALLOT CROSS Publish 0x0AF5 0x266F #MUSICAL SHARP Publish 0x0AF6 0x266D #MUSICAL FLAT Publish 0x0AF7 0x2642 #MALE SYMBOL Publish 0x0AF8 0x2640 #FEMALE SYMBOL Publish 0x0AF9 0x260E #TELEPHONE SYMBOL Publish 0x0AFA 0x2315 #TELEPHONE RECORDER SYMBOL Publish 0x0AFB 0x2117 #PHONOGRAPH COPYRIGHT SIGN Publish 0x0AFC 0x2038 #CARET Publish 0x0AFD 0x201A #SINGLE LOW QUOTATION MARK Publish 0x0AFE 0x201E #DOUBLE LOW QUOTATION MARK Publish |
Added freshlib/gui/Linux/__encodings/keysyms12.tbl.
> | 1 | ß ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéê |
Added freshlib/gui/Linux/__encodings/keysyms12.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 0x0CDF 0x2017 #DOUBLE LOW LINE 0x0CE0 0x05D0 #HEBREW LETTER ALEF 0x0CE1 0x05D1 #HEBREW LETTER BET 0x0CE2 0x05D2 #HEBREW LETTER GIMEL 0x0CE3 0x05D3 #HEBREW LETTER DALET 0x0CE4 0x05D4 #HEBREW LETTER HE 0x0CE5 0x05D5 #HEBREW LETTER VAV 0x0CE6 0x05D6 #HEBREW LETTER ZAYIN 0x0CE7 0x05D7 #HEBREW LETTER HET 0x0CE8 0x05D8 #HEBREW LETTER TET 0x0CE9 0x05D9 #HEBREW LETTER YOD 0x0CEA 0x05DA #HEBREW LETTER FINAL KAF 0x0CEB 0x05DB #HEBREW LETTER KAF 0x0CEC 0x05DC #HEBREW LETTER LAMED 0x0CED 0x05DD #HEBREW LETTER FINAL MEM 0x0CEE 0x05DE #HEBREW LETTER MEM 0x0CEF 0x05DF #HEBREW LETTER FINAL NUN 0x0CF0 0x05E0 #HEBREW LETTER NUN 0x0CF1 0x05E1 #HEBREW LETTER SAMEKH 0x0CF2 0x05E2 #HEBREW LETTER AYIN 0x0CF3 0x05E3 #HEBREW LETTER FINAL PE 0x0CF4 0x05E4 #HEBREW LETTER PE 0x0CF5 0x05E5 #HEBREW LETTER FINAL TSADI 0x0CF6 0x05E6 #HEBREW LETTER TSADI 0x0CF7 0x05E7 #HEBREW LETTER QOF 0x0CF8 0x05E8 #HEBREW LETTER RESH 0x0CF9 0x05E9 #HEBREW LETTER SHIN 0x0CFA 0x05EA #HEBREW LETTER TAV |
Added freshlib/gui/Linux/__encodings/keysyms13.tbl.
cannot compute difference between binary files
Added freshlib/gui/Linux/__encodings/keysyms13.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 0x0DA1 0x0E01 #THAI CHARACTER KO KAI 0x0DA2 0x0E02 #THAI CHARACTER KHO KHAI 0x0DA3 0x0E03 #THAI CHARACTER KHO KHUAT 0x0DA4 0x0E04 #THAI CHARACTER KHO KHWAI 0x0DA5 0x0E05 #THAI CHARACTER KHO KHON 0x0DA6 0x0E06 #THAI CHARACTER KHO RAKHANG 0x0DA7 0x0E07 #THAI CHARACTER NGO NGU 0x0DA8 0x0E08 #THAI CHARACTER CHO CHAN 0x0DA9 0x0E09 #THAI CHARACTER CHO CHING 0x0DAA 0x0E0A #THAI CHARACTER CHO CHANG 0x0DAB 0x0E0B #THAI CHARACTER SO SO 0x0DAC 0x0E0C #THAI CHARACTER CHO CHOE 0x0DAD 0x0E0D #THAI CHARACTER YO YING 0x0DAE 0x0E0E #THAI CHARACTER DO CHADA 0x0DAF 0x0E0F #THAI CHARACTER TO PATAK 0x0DB0 0x0E10 #THAI CHARACTER THO THAN 0x0DB1 0x0E11 #THAI CHARACTER THO NANGMONTHO 0x0DB2 0x0E12 #THAI CHARACTER THO PHUTHAO 0x0DB3 0x0E13 #THAI CHARACTER NO NEN 0x0DB4 0x0E14 #THAI CHARACTER DO DEK 0x0DB5 0x0E15 #THAI CHARACTER TO TAO 0x0DB6 0x0E16 #THAI CHARACTER THO THUNG 0x0DB7 0x0E17 #THAI CHARACTER THO THAHAN 0x0DB8 0x0E18 #THAI CHARACTER THO THONG 0x0DB9 0x0E19 #THAI CHARACTER NO NU 0x0DBA 0x0E1A #THAI CHARACTER BO BAIMAI 0x0DBB 0x0E1B #THAI CHARACTER PO PLA 0x0DBC 0x0E1C #THAI CHARACTER PHO PHUNG 0x0DBD 0x0E1D #THAI CHARACTER FO FA 0x0DBE 0x0E1E #THAI CHARACTER PHO PHAN 0x0DBF 0x0E1F #THAI CHARACTER FO FAN 0x0DC0 0x0E20 #THAI CHARACTER PHO SAMPHAO 0x0DC1 0x0E21 #THAI CHARACTER MO MA 0x0DC2 0x0E22 #THAI CHARACTER YO YAK 0x0DC3 0x0E23 #THAI CHARACTER RO RUA 0x0DC4 0x0E24 #THAI CHARACTER RU 0x0DC5 0x0E25 #THAI CHARACTER LO LING 0x0DC6 0x0E26 #THAI CHARACTER LU 0x0DC7 0x0E27 #THAI CHARACTER WO WAEN 0x0DC8 0x0E28 #THAI CHARACTER SO SALA 0x0DC9 0x0E29 #THAI CHARACTER SO RUSI 0x0DCA 0x0E2A #THAI CHARACTER SO SUA 0x0DCB 0x0E2B #THAI CHARACTER HO HIP 0x0DCC 0x0E2C #THAI CHARACTER LO CHULA 0x0DCD 0x0E2D #THAI CHARACTER O ANG 0x0DCE 0x0E2E #THAI CHARACTER HO NOKHUK 0x0DCF 0x0E2F #THAI CHARACTER PAIYANNOI 0x0DD0 0x0E30 #THAI CHARACTER SARA A 0x0DD1 0x0E31 #THAI CHARACTER MAI HAN-AKAT 0x0DD2 0x0E32 #THAI CHARACTER SARA AA 0x0DD3 0x0E33 #THAI CHARACTER SARA AM 0x0DD4 0x0E34 #THAI CHARACTER SARA I 0x0DD5 0x0E35 #THAI CHARACTER SARA II 0x0DD6 0x0E36 #THAI CHARACTER SARA UE 0x0DD7 0x0E37 #THAI CHARACTER SARA UEE 0x0DD8 0x0E38 #THAI CHARACTER SARA U 0x0DD9 0x0E39 #THAI CHARACTER SARA UU 0x0DDA 0x0E3A #THAI CHARACTER PHINTHU 0x0DDF 0x0E3F #THAI CURRENCY SYMBOL BAHT 0x0DE0 0x0E40 #THAI CHARACTER SARA E 0x0DE1 0x0E41 #THAI CHARACTER SARA AE 0x0DE2 0x0E42 #THAI CHARACTER SARA O 0x0DE3 0x0E43 #THAI CHARACTER SARA AI MAIMUAN 0x0DE4 0x0E44 #THAI CHARACTER SARA AI MAIMALAI 0x0DE5 0x0E45 #THAI CHARACTER LAKKHANGYAO 0x0DE6 0x0E46 #THAI CHARACTER MAIYAMOK 0x0DE7 0x0E47 #THAI CHARACTER MAITAIKHU 0x0DE8 0x0E48 #THAI CHARACTER MAI EK 0x0DE9 0x0E49 #THAI CHARACTER MAI THO 0x0DEA 0x0E4A #THAI CHARACTER MAI TRI 0x0DEB 0x0E4B #THAI CHARACTER MAI CHATTAWA 0x0DEC 0x0E4C #THAI CHARACTER THANTHAKHAT 0x0DED 0x0E4D #THAI CHARACTER NIKHAHIT 0x0DF0 0x0E50 #THAI DIGIT ZERO 0x0DF1 0x0E51 #THAI DIGIT ONE 0x0DF2 0x0E52 #THAI DIGIT TWO 0x0DF3 0x0E53 #THAI DIGIT THREE 0x0DF4 0x0E54 #THAI DIGIT FOUR 0x0DF5 0x0E55 #THAI DIGIT FIVE 0x0DF6 0x0E56 #THAI DIGIT SIX 0x0DF7 0x0E57 #THAI DIGIT SEVEN 0x0DF8 0x0E58 #THAI DIGIT EIGHT 0x0DF9 0x0E59 #THAI DIGIT NINE |
Added freshlib/gui/Linux/__encodings/keysyms2.tbl.
cannot compute difference between binary files
Added freshlib/gui/Linux/__encodings/keysyms2.txt.
> > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 0x02A1 0x0126 #LATIN CAPITAL LETTER H WITH STROKE 0x02A6 0x0124 #LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0x02A9 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE 0x02AB 0x011E #LATIN CAPITAL LETTER G WITH BREVE 0x02AC 0x0134 #LATIN CAPITAL LETTER J WITH CIRCUMFLEX 0x02B1 0x0127 #LATIN SMALL LETTER H WITH STROKE 0x02B6 0x0125 #LATIN SMALL LETTER H WITH CIRCUMFLEX 0x02B9 0x0131 #LATIN SMALL LETTER DOTLESS I 0x02BB 0x011F #LATIN SMALL LETTER G WITH BREVE 0x02BC 0x0135 #LATIN SMALL LETTER J WITH CIRCUMFLEX 0x02C5 0x010A #LATIN CAPITAL LETTER C WITH DOT ABOVE 0x02C6 0x0108 #LATIN CAPITAL LETTER C WITH CIRCUMFLEX 0x02D5 0x0120 #LATIN CAPITAL LETTER G WITH DOT ABOVE 0x02D8 0x011C #LATIN CAPITAL LETTER G WITH CIRCUMFLEX 0x02DD 0x016C #LATIN CAPITAL LETTER U WITH BREVE 0x02DE 0x015C #LATIN CAPITAL LETTER S WITH CIRCUMFLEX 0x02E5 0x010B #LATIN SMALL LETTER C WITH DOT ABOVE 0x02E6 0x0109 #LATIN SMALL LETTER C WITH CIRCUMFLEX 0x02F5 0x0121 #LATIN SMALL LETTER G WITH DOT ABOVE 0x02F8 0x011D #LATIN SMALL LETTER G WITH CIRCUMFLEX 0x02FD 0x016D #LATIN SMALL LETTER U WITH BREVE 0x02FE 0x015D #LATIN SMALL LETTER S WITH CIRCUMFLEX |
Added freshlib/gui/Linux/__encodings/keysyms3.tbl.
cannot compute difference between binary files
Added freshlib/gui/Linux/__encodings/keysyms3.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 0x03A2 0x0138 #LATIN SMALL LETTER KRA 0x03A3 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA 0x03A5 0x0128 #LATIN CAPITAL LETTER I WITH TILDE 0x03A6 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA 0x03AA 0x0112 #LATIN CAPITAL LETTER E WITH MACRON 0x03AB 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA 0x03AC 0x0166 #LATIN CAPITAL LETTER T WITH STROKE 0x03B3 0x0157 #LATIN SMALL LETTER R WITH CEDILLA 0x03B5 0x0129 #LATIN SMALL LETTER I WITH TILDE 0x03B6 0x013C #LATIN SMALL LETTER L WITH CEDILLA 0x03BA 0x0113 #LATIN SMALL LETTER E WITH MACRON 0x03BB 0x0123 #LATIN SMALL LETTER G WITH CEDILLA 0x03BC 0x0167 #LATIN SMALL LETTER T WITH STROKE 0x03BD 0x014A #LATIN CAPITAL LETTER ENG 0x03BF 0x014B #LATIN SMALL LETTER ENG 0x03C0 0x0100 #LATIN CAPITAL LETTER A WITH MACRON 0x03C7 0x012E #LATIN CAPITAL LETTER I WITH OGONEK 0x03CC 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE 0x03CF 0x012A #LATIN CAPITAL LETTER I WITH MACRON 0x03D1 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA 0x03D2 0x014C #LATIN CAPITAL LETTER O WITH MACRON 0x03D3 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA 0x03D9 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK 0x03DD 0x0168 #LATIN CAPITAL LETTER U WITH TILDE 0x03DE 0x016A #LATIN CAPITAL LETTER U WITH MACRON 0x03E0 0x0101 #LATIN SMALL LETTER A WITH MACRON 0x03E7 0x012F #LATIN SMALL LETTER I WITH OGONEK 0x03EC 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE 0x03EF 0x012B #LATIN SMALL LETTER I WITH MACRON 0x03F1 0x0146 #LATIN SMALL LETTER N WITH CEDILLA 0x03F2 0x014D #LATIN SMALL LETTER O WITH MACRON 0x03F3 0x0137 #LATIN SMALL LETTER K WITH CEDILLA 0x03F9 0x0173 #LATIN SMALL LETTER U WITH OGONEK 0x03FD 0x0169 #LATIN SMALL LETTER U WITH TILDE 0x03FE 0x016B #LATIN SMALL LETTER U WITH MACRON |
Added freshlib/gui/Linux/__encodings/keysyms4.tbl.
cannot compute difference between binary files
Added freshlib/gui/Linux/__encodings/keysyms4.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 0x047E 0x203E #OVERLINE 0x04A1 0x3002 #KANA FULL STOP 0x04A2 0x300C #KANA OPENING BRACKET 0x04A3 0x300D #KANA CLOSING BRACKET 0x04A4 0x3001 #KANA COMMA 0x04A5 0x30FB #KANA CONJUNCTIVE 0x04A6 0x30F2 #KANA LETTER WO 0x04A7 0x30A1 #KANA LETTER SMALL A 0x04A8 0x30A3 #KANA LETTER SMALL I 0x04A9 0x30A5 #KANA LETTER SMALL U 0x04AA 0x30A7 #KANA LETTER SMALL E 0x04AB 0x30A9 #KANA LETTER SMALL O 0x04AC 0x30E3 #KANA LETTER SMALL YA 0x04AD 0x30E5 #KANA LETTER SMALL YU 0x04AE 0x30E7 #KANA LETTER SMALL YO 0x04AF 0x30C3 #KANA LETTER SMALL TSU 0x04B0 0x30FC #PROLONGED SOUND SYMBOL 0x04B1 0x30A2 #KANA LETTER A 0x04B2 0x30A4 #KANA LETTER I 0x04B3 0x30A6 #KANA LETTER U 0x04B4 0x30A8 #KANA LETTER E 0x04B5 0x30AA #KANA LETTER O 0x04B6 0x30AB #KANA LETTER KA 0x04B7 0x30AD #KANA LETTER KI 0x04B8 0x30AF #KANA LETTER KU 0x04B9 0x30B1 #KANA LETTER KE 0x04BA 0x30B3 #KANA LETTER KO 0x04BB 0x30B5 #KANA LETTER SA 0x04BC 0x30B7 #KANA LETTER SHI 0x04BD 0x30B9 #KANA LETTER SU 0x04BE 0x30BB #KANA LETTER SE 0x04BF 0x30BD #KANA LETTER SO 0x04C0 0x30BF #KANA LETTER TA 0x04C1 0x30C1 #KANA LETTER CHI 0x04C2 0x30C4 #KANA LETTER TSU 0x04C3 0x30C6 #KANA LETTER TE 0x04C4 0x30C8 #KANA LETTER TO 0x04C5 0x30CA #KANA LETTER NA 0x04C6 0x30CB #KANA LETTER NI 0x04C7 0x30CC #KANA LETTER NU 0x04C8 0x30CD #KANA LETTER NE 0x04C9 0x30CE #KANA LETTER NO 0x04CA 0x30CF #KANA LETTER HA 0x04CB 0x30D2 #KANA LETTER HI 0x04CC 0x30D5 #KANA LETTER FU 0x04CD 0x30D8 #KANA LETTER HE 0x04CE 0x30DB #KANA LETTER HO 0x04CF 0x30DE #KANA LETTER MA 0x04D0 0x30DF #KANA LETTER MI 0x04D1 0x30E0 #KANA LETTER MU 0x04D2 0x30E1 #KANA LETTER ME 0x04D3 0x30E2 #KANA LETTER MO 0x04D4 0x30E4 #KANA LETTER YA 0x04D5 0x30E6 #KANA LETTER YU 0x04D6 0x30E8 #KANA LETTER YO 0x04D7 0x30E9 #KANA LETTER RA 0x04D8 0x30EA #KANA LETTER RI 0x04D9 0x30EB #KANA LETTER RU 0x04DA 0x30EC #KANA LETTER RE 0x04DB 0x30ED #KANA LETTER RO 0x04DC 0x30EF #KANA LETTER WA 0x04DD 0x30F3 #KANA LETTER N 0x04DE 0x309B #VOICED SOUND SYMBOL 0x04DF 0x309C #SEMIVOICED SOUND SYMBOL |
Added freshlib/gui/Linux/__encodings/keysyms5.tbl.
cannot compute difference between binary files
Added freshlib/gui/Linux/__encodings/keysyms5.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 0x05AC 0x060C #ARABIC COMMA 0x05BB 0x061B #ARABIC SEMICOLON 0x05BF 0x061F #ARABIC QUESTION MARK 0x05C1 0x0621 #ARABIC LETTER HAMZA 0x05C2 0x0622 #ARABIC LETTER ALEF WITH MADDA ABOVE 0x05C3 0x0623 #ARABIC LETTER ALEF WITH HAMZA ABOVE 0x05C4 0x0624 #ARABIC LETTER WAW WITH HAMZA ABOVE 0x05C5 0x0625 #ARABIC LETTER ALEF WITH HAMZA BELOW 0x05C6 0x0626 #ARABIC LETTER YEH WITH HAMZA ABOVE 0x05C7 0x0627 #ARABIC LETTER ALEF 0x05C8 0x0628 #ARABIC LETTER BEH 0x05C9 0x0629 #ARABIC LETTER TEH MARBUTA 0x05CA 0x062A #ARABIC LETTER TEH 0x05CB 0x062B #ARABIC LETTER THEH 0x05CC 0x062C #ARABIC LETTER JEEM 0x05CD 0x062D #ARABIC LETTER HAH 0x05CE 0x062E #ARABIC LETTER KHAH 0x05CF 0x062F #ARABIC LETTER DAL 0x05D0 0x0630 #ARABIC LETTER THAL 0x05D1 0x0631 #ARABIC LETTER REH 0x05D2 0x0632 #ARABIC LETTER ZAIN 0x05D3 0x0633 #ARABIC LETTER SEEN 0x05D4 0x0634 #ARABIC LETTER SHEEN 0x05D5 0x0635 #ARABIC LETTER SAD 0x05D6 0x0636 #ARABIC LETTER DAD 0x05D7 0x0637 #ARABIC LETTER TAH 0x05D8 0x0638 #ARABIC LETTER ZAH 0x05D9 0x0639 #ARABIC LETTER AIN 0x05DA 0x063A #ARABIC LETTER GHAIN 0x05E0 0x0640 #ARABIC TATWEEL 0x05E1 0x0641 #ARABIC LETTER FEH 0x05E2 0x0642 #ARABIC LETTER QAF 0x05E3 0x0643 #ARABIC LETTER KAF 0x05E4 0x0644 #ARABIC LETTER LAM 0x05E5 0x0645 #ARABIC LETTER MEEM 0x05E6 0x0646 #ARABIC LETTER NOON 0x05E7 0x0647 #ARABIC LETTER HEH 0x05E8 0x0648 #ARABIC LETTER WAW 0x05E9 0x0649 #ARABIC LETTER ALEF MAKSURA 0x05EA 0x064A #ARABIC LETTER YEH 0x05EB 0x064B #ARABIC FATHATAN 0x05EC 0x064C #ARABIC DAMMATAN 0x05ED 0x064D #ARABIC KASRATAN 0x05EE 0x064E #ARABIC FATHA 0x05EF 0x064F #ARABIC DAMMA 0x05F0 0x0650 #ARABIC KASRA 0x05F1 0x0651 #ARABIC SHADDA 0x05F2 0x0652 #ARABIC SUKUN |
Added freshlib/gui/Linux/__encodings/keysyms6.tbl.
> > | 1 2 | ¡^RSQTUVWXYZ[\‘^_! N01F45D3E89:;<=>?O@ABC62LK7HMIGJ.&$%/ !"#,+(-)'* |
Added freshlib/gui/Linux/__encodings/keysyms6.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | 0x06A1 0x0452 #CYRILLIC SMALL LETTER DJE 0x06A2 0x0453 #CYRILLIC SMALL LETTER GJE 0x06A3 0x0451 #CYRILLIC SMALL LETTER IO 0x06A4 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE 0x06A5 0x0455 #CYRILLIC SMALL LETTER DZE 0x06A6 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 0x06A7 0x0457 #CYRILLIC SMALL LETTER YI 0x06A8 0x0458 #CYRILLIC SMALL LETTER JE 0x06A9 0x0459 #CYRILLIC SMALL LETTER LJE 0x06AA 0x045A #CYRILLIC SMALL LETTER NJE 0x06AB 0x045B #CYRILLIC SMALL LETTER TSHE 0x06AC 0x045C #CYRILLIC SMALL LETTER KJE 0x06AD 0x0491 #CYRILLIC SMALL LETTER GHE WITH UPTURN 0x06AE 0x045E #CYRILLIC SMALL LETTER SHORT U 0x06AF 0x045F #CYRILLIC SMALL LETTER DZHE 0x06B0 0x2116 #NUMERO SIGN 0x06B1 0x0402 #CYRILLIC CAPITAL LETTER DJE 0x06B2 0x0403 #CYRILLIC CAPITAL LETTER GJE 0x06B3 0x0401 #CYRILLIC CAPITAL LETTER IO 0x06B4 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE 0x06B5 0x0405 #CYRILLIC CAPITAL LETTER DZE 0x06B6 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0x06B7 0x0407 #CYRILLIC CAPITAL LETTER YI 0x06B8 0x0408 #CYRILLIC CAPITAL LETTER JE 0x06B9 0x0409 #CYRILLIC CAPITAL LETTER LJE 0x06BA 0x040A #CYRILLIC CAPITAL LETTER NJE 0x06BB 0x040B #CYRILLIC CAPITAL LETTER TSHE 0x06BC 0x040C #CYRILLIC CAPITAL LETTER KJE 0x06BD 0x0490 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN 0x06BE 0x040E #CYRILLIC CAPITAL LETTER SHORT U 0x06BF 0x040F #CYRILLIC CAPITAL LETTER DZHE 0x06C0 0x044E #CYRILLIC SMALL LETTER YU 0x06C1 0x0430 #CYRILLIC SMALL LETTER A 0x06C2 0x0431 #CYRILLIC SMALL LETTER BE 0x06C3 0x0446 #CYRILLIC SMALL LETTER TSE 0x06C4 0x0434 #CYRILLIC SMALL LETTER DE 0x06C5 0x0435 #CYRILLIC SMALL LETTER IE 0x06C6 0x0444 #CYRILLIC SMALL LETTER EF 0x06C7 0x0433 #CYRILLIC SMALL LETTER GHE 0x06C8 0x0445 #CYRILLIC SMALL LETTER HA 0x06C9 0x0438 #CYRILLIC SMALL LETTER I 0x06CA 0x0439 #CYRILLIC SMALL LETTER SHORT I 0x06CB 0x043A #CYRILLIC SMALL LETTER KA 0x06CC 0x043B #CYRILLIC SMALL LETTER EL 0x06CD 0x043C #CYRILLIC SMALL LETTER EM 0x06CE 0x043D #CYRILLIC SMALL LETTER EN 0x06CF 0x043E #CYRILLIC SMALL LETTER O 0x06D0 0x043F #CYRILLIC SMALL LETTER PE 0x06D1 0x044F #CYRILLIC SMALL LETTER YA 0x06D2 0x0440 #CYRILLIC SMALL LETTER ER 0x06D3 0x0441 #CYRILLIC SMALL LETTER ES 0x06D4 0x0442 #CYRILLIC SMALL LETTER TE 0x06D5 0x0443 #CYRILLIC SMALL LETTER U 0x06D6 0x0436 #CYRILLIC SMALL LETTER ZHE 0x06D7 0x0432 #CYRILLIC SMALL LETTER VE 0x06D8 0x044C #CYRILLIC SMALL LETTER SOFT SIGN 0x06D9 0x044B #CYRILLIC SMALL LETTER YERU 0x06DA 0x0437 #CYRILLIC SMALL LETTER ZE 0x06DB 0x0448 #CYRILLIC SMALL LETTER SHA 0x06DC 0x044D #CYRILLIC SMALL LETTER E 0x06DD 0x0449 #CYRILLIC SMALL LETTER SHCHA 0x06DE 0x0447 #CYRILLIC SMALL LETTER CHE 0x06DF 0x044A #CYRILLIC SMALL LETTER HARD SIGN 0x06E0 0x042E #CYRILLIC CAPITAL LETTER YU 0x06E1 0x0410 #CYRILLIC CAPITAL LETTER A 0x06E2 0x0411 #CYRILLIC CAPITAL LETTER BE 0x06E3 0x0426 #CYRILLIC CAPITAL LETTER TSE 0x06E4 0x0414 #CYRILLIC CAPITAL LETTER DE 0x06E5 0x0415 #CYRILLIC CAPITAL LETTER IE 0x06E6 0x0424 #CYRILLIC CAPITAL LETTER EF 0x06E7 0x0413 #CYRILLIC CAPITAL LETTER GHE 0x06E8 0x0425 #CYRILLIC CAPITAL LETTER HA 0x06E9 0x0418 #CYRILLIC CAPITAL LETTER I 0x06EA 0x0419 #CYRILLIC CAPITAL LETTER SHORT I 0x06EB 0x041A #CYRILLIC CAPITAL LETTER KA 0x06EC 0x041B #CYRILLIC CAPITAL LETTER EL 0x06ED 0x041C #CYRILLIC CAPITAL LETTER EM 0x06EE 0x041D #CYRILLIC CAPITAL LETTER EN 0x06EF 0x041E #CYRILLIC CAPITAL LETTER O 0x06F0 0x041F #CYRILLIC CAPITAL LETTER PE 0x06F1 0x042F #CYRILLIC CAPITAL LETTER YA 0x06F2 0x0420 #CYRILLIC CAPITAL LETTER ER 0x06F3 0x0421 #CYRILLIC CAPITAL LETTER ES 0x06F4 0x0422 #CYRILLIC CAPITAL LETTER TE 0x06F5 0x0423 #CYRILLIC CAPITAL LETTER U 0x06F6 0x0416 #CYRILLIC CAPITAL LETTER ZHE 0x06F7 0x0412 #CYRILLIC CAPITAL LETTER VE 0x06F8 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN 0x06F9 0x042B #CYRILLIC CAPITAL LETTER YERU 0x06FA 0x0417 #CYRILLIC CAPITAL LETTER ZE 0x06FB 0x0428 #CYRILLIC CAPITAL LETTER SHA 0x06FC 0x042D #CYRILLIC CAPITAL LETTER E 0x06FD 0x0429 #CYRILLIC CAPITAL LETTER SHCHA 0x06FE 0x0427 #CYRILLIC CAPITAL LETTER CHE 0x06FF 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN |
Added freshlib/gui/Linux/__encodings/keysyms7.tbl.
cannot compute difference between binary files
Added freshlib/gui/Linux/__encodings/keysyms7.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 0x07A1 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS 0x07A2 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS 0x07A3 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS 0x07A4 0x038A #GREEK CAPITAL LETTER IOTA WITH TONOS 0x07A5 0x03AA #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 0x07A7 0x038C #GREEK CAPITAL LETTER OMICRON WITH TONOS 0x07A8 0x038E #GREEK CAPITAL LETTER UPSILON WITH TONOS 0x07A9 0x03AB #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 0x07AB 0x038F #GREEK CAPITAL LETTER OMEGA WITH TONOS 0x07AE 0x0385 #GREEK DIALYTIKA TONOS 0x07AF 0x2015 #HORIZONTAL BAR 0x07B1 0x03AC #GREEK SMALL LETTER ALPHA WITH TONOS 0x07B2 0x03AD #GREEK SMALL LETTER EPSILON WITH TONOS 0x07B3 0x03AE #GREEK SMALL LETTER ETA WITH TONOS 0x07B4 0x03AF #GREEK SMALL LETTER IOTA WITH TONOS 0x07B5 0x03CA #GREEK SMALL LETTER IOTA WITH DIALYTIKA 0x07B6 0x0390 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 0x07B7 0x03CC #GREEK SMALL LETTER OMICRON WITH TONOS 0x07B8 0x03CD #GREEK SMALL LETTER UPSILON WITH TONOS 0x07B9 0x03CB #GREEK SMALL LETTER UPSILON WITH DIALYTIKA 0x07BA 0x03B0 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 0x07BB 0x03CE #GREEK SMALL LETTER OMEGA WITH TONOS 0x07C1 0x0391 #GREEK CAPITAL LETTER ALPHA 0x07C2 0x0392 #GREEK CAPITAL LETTER BETA 0x07C3 0x0393 #GREEK CAPITAL LETTER GAMMA 0x07C4 0x0394 #GREEK CAPITAL LETTER DELTA 0x07C5 0x0395 #GREEK CAPITAL LETTER EPSILON 0x07C6 0x0396 #GREEK CAPITAL LETTER ZETA 0x07C7 0x0397 #GREEK CAPITAL LETTER ETA 0x07C8 0x0398 #GREEK CAPITAL LETTER THETA 0x07C9 0x0399 #GREEK CAPITAL LETTER IOTA 0x07CA 0x039A #GREEK CAPITAL LETTER KAPPA 0x07CB 0x039B #GREEK CAPITAL LETTER LAMDA 0x07CC 0x039C #GREEK CAPITAL LETTER MU 0x07CD 0x039D #GREEK CAPITAL LETTER NU 0x07CE 0x039E #GREEK CAPITAL LETTER XI 0x07CF 0x039F #GREEK CAPITAL LETTER OMICRON 0x07D0 0x03A0 #GREEK CAPITAL LETTER PI 0x07D1 0x03A1 #GREEK CAPITAL LETTER RHO 0x07D2 0x03A3 #GREEK CAPITAL LETTER SIGMA 0x07D4 0x03A4 #GREEK CAPITAL LETTER TAU 0x07D5 0x03A5 #GREEK CAPITAL LETTER UPSILON 0x07D6 0x03A6 #GREEK CAPITAL LETTER PHI 0x07D7 0x03A7 #GREEK CAPITAL LETTER CHI 0x07D8 0x03A8 #GREEK CAPITAL LETTER PSI 0x07D9 0x03A9 #GREEK CAPITAL LETTER OMEGA 0x07E1 0x03B1 #GREEK SMALL LETTER ALPHA 0x07E2 0x03B2 #GREEK SMALL LETTER BETA 0x07E3 0x03B3 #GREEK SMALL LETTER GAMMA 0x07E4 0x03B4 #GREEK SMALL LETTER DELTA 0x07E5 0x03B5 #GREEK SMALL LETTER EPSILON 0x07E6 0x03B6 #GREEK SMALL LETTER ZETA 0x07E7 0x03B7 #GREEK SMALL LETTER ETA 0x07E8 0x03B8 #GREEK SMALL LETTER THETA 0x07E9 0x03B9 #GREEK SMALL LETTER IOTA 0x07EA 0x03BA #GREEK SMALL LETTER KAPPA 0x07EB 0x03BB #GREEK SMALL LETTER LAMDA 0x07EC 0x03BC #GREEK SMALL LETTER MU 0x07ED 0x03BD #GREEK SMALL LETTER NU 0x07EE 0x03BE #GREEK SMALL LETTER XI 0x07EF 0x03BF #GREEK SMALL LETTER OMICRON 0x07F0 0x03C0 #GREEK SMALL LETTER PI 0x07F1 0x03C1 #GREEK SMALL LETTER RHO 0x07F2 0x03C3 #GREEK SMALL LETTER SIGMA 0x07F3 0x03C2 #GREEK SMALL LETTER FINAL SIGMA 0x07F4 0x03C4 #GREEK SMALL LETTER TAU 0x07F5 0x03C5 #GREEK SMALL LETTER UPSILON 0x07F6 0x03C6 #GREEK SMALL LETTER PHI 0x07F7 0x03C7 #GREEK SMALL LETTER CHI 0x07F8 0x03C8 #GREEK SMALL LETTER PSI 0x07F9 0x03C9 #GREEK SMALL LETTER OMEGA |
Added freshlib/gui/Linux/__encodings/keysyms_encoding.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 | 0x01A1 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK 0x01A2 0x02D8 #BREVE 0x01A3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE 0x01A5 0x013D #LATIN CAPITAL LETTER L WITH CARON 0x01A6 0x015A #LATIN CAPITAL LETTER S WITH ACUTE 0x01A9 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0x01AA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA 0x01AB 0x0164 #LATIN CAPITAL LETTER T WITH CARON 0x01AC 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE 0x01AE 0x017D #LATIN CAPITAL LETTER Z WITH CARON 0x01AF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE 0x01B1 0x0105 #LATIN SMALL LETTER A WITH OGONEK 0x01B2 0x02DB #OGONEK 0x01B3 0x0142 #LATIN SMALL LETTER L WITH STROKE 0x01B5 0x013E #LATIN SMALL LETTER L WITH CARON 0x01B6 0x015B #LATIN SMALL LETTER S WITH ACUTE 0x01B7 0x02C7 #CARON 0x01B9 0x0161 #LATIN SMALL LETTER S WITH CARON 0x01BA 0x015F #LATIN SMALL LETTER S WITH CEDILLA 0x01BB 0x0165 #LATIN SMALL LETTER T WITH CARON 0x01BC 0x017A #LATIN SMALL LETTER Z WITH ACUTE 0x01BD 0x02DD #DOUBLE ACUTE ACCENT 0x01BE 0x017E #LATIN SMALL LETTER Z WITH CARON 0x01BF 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE 0x01C0 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE 0x01C3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE 0x01C5 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE 0x01C6 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE 0x01C8 0x010C #LATIN CAPITAL LETTER C WITH CARON 0x01CA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK 0x01CC 0x011A #LATIN CAPITAL LETTER E WITH CARON 0x01CF 0x010E #LATIN CAPITAL LETTER D WITH CARON 0x01D0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE 0x01D1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE 0x01D2 0x0147 #LATIN CAPITAL LETTER N WITH CARON 0x01D5 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0x01D8 0x0158 #LATIN CAPITAL LETTER R WITH CARON 0x01D9 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE 0x01DB 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0x01DE 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA 0x01E0 0x0155 #LATIN SMALL LETTER R WITH ACUTE 0x01E3 0x0103 #LATIN SMALL LETTER A WITH BREVE 0x01E5 0x013A #LATIN SMALL LETTER L WITH ACUTE 0x01E6 0x0107 #LATIN SMALL LETTER C WITH ACUTE 0x01E8 0x010D #LATIN SMALL LETTER C WITH CARON 0x01EA 0x0119 #LATIN SMALL LETTER E WITH OGONEK 0x01EC 0x011B #LATIN SMALL LETTER E WITH CARON 0x01EF 0x010F #LATIN SMALL LETTER D WITH CARON 0x01F0 0x0111 #LATIN SMALL LETTER D WITH STROKE 0x01F1 0x0144 #LATIN SMALL LETTER N WITH ACUTE 0x01F2 0x0148 #LATIN SMALL LETTER N WITH CARON 0x01F5 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE 0x01F8 0x0159 #LATIN SMALL LETTER R WITH CARON 0x01F9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE 0x01FB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE 0x01FE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA 0x01FF 0x02D9 #DOT ABOVE 0x02A1 0x0126 #LATIN CAPITAL LETTER H WITH STROKE 0x02A6 0x0124 #LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0x02A9 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE 0x02AB 0x011E #LATIN CAPITAL LETTER G WITH BREVE 0x02AC 0x0134 #LATIN CAPITAL LETTER J WITH CIRCUMFLEX 0x02B1 0x0127 #LATIN SMALL LETTER H WITH STROKE 0x02B6 0x0125 #LATIN SMALL LETTER H WITH CIRCUMFLEX 0x02B9 0x0131 #LATIN SMALL LETTER DOTLESS I 0x02BB 0x011F #LATIN SMALL LETTER G WITH BREVE 0x02BC 0x0135 #LATIN SMALL LETTER J WITH CIRCUMFLEX 0x02C5 0x010A #LATIN CAPITAL LETTER C WITH DOT ABOVE 0x02C6 0x0108 #LATIN CAPITAL LETTER C WITH CIRCUMFLEX 0x02D5 0x0120 #LATIN CAPITAL LETTER G WITH DOT ABOVE 0x02D8 0x011C #LATIN CAPITAL LETTER G WITH CIRCUMFLEX 0x02DD 0x016C #LATIN CAPITAL LETTER U WITH BREVE 0x02DE 0x015C #LATIN CAPITAL LETTER S WITH CIRCUMFLEX 0x02E5 0x010B #LATIN SMALL LETTER C WITH DOT ABOVE 0x02E6 0x0109 #LATIN SMALL LETTER C WITH CIRCUMFLEX 0x02F5 0x0121 #LATIN SMALL LETTER G WITH DOT ABOVE 0x02F8 0x011D #LATIN SMALL LETTER G WITH CIRCUMFLEX 0x02FD 0x016D #LATIN SMALL LETTER U WITH BREVE 0x02FE 0x015D #LATIN SMALL LETTER S WITH CIRCUMFLEX 0x03A2 0x0138 #LATIN SMALL LETTER KRA 0x03A3 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA 0x03A5 0x0128 #LATIN CAPITAL LETTER I WITH TILDE 0x03A6 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA 0x03AA 0x0112 #LATIN CAPITAL LETTER E WITH MACRON 0x03AB 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA 0x03AC 0x0166 #LATIN CAPITAL LETTER T WITH STROKE 0x03B3 0x0157 #LATIN SMALL LETTER R WITH CEDILLA 0x03B5 0x0129 #LATIN SMALL LETTER I WITH TILDE 0x03B6 0x013C #LATIN SMALL LETTER L WITH CEDILLA 0x03BA 0x0113 #LATIN SMALL LETTER E WITH MACRON 0x03BB 0x0123 #LATIN SMALL LETTER G WITH CEDILLA 0x03BC 0x0167 #LATIN SMALL LETTER T WITH STROKE 0x03BD 0x014A #LATIN CAPITAL LETTER ENG 0x03BF 0x014B #LATIN SMALL LETTER ENG 0x03C0 0x0100 #LATIN CAPITAL LETTER A WITH MACRON 0x03C7 0x012E #LATIN CAPITAL LETTER I WITH OGONEK 0x03CC 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE 0x03CF 0x012A #LATIN CAPITAL LETTER I WITH MACRON 0x03D1 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA 0x03D2 0x014C #LATIN CAPITAL LETTER O WITH MACRON 0x03D3 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA 0x03D9 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK 0x03DD 0x0168 #LATIN CAPITAL LETTER U WITH TILDE 0x03DE 0x016A #LATIN CAPITAL LETTER U WITH MACRON 0x03E0 0x0101 #LATIN SMALL LETTER A WITH MACRON 0x03E7 0x012F #LATIN SMALL LETTER I WITH OGONEK 0x03EC 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE 0x03EF 0x012B #LATIN SMALL LETTER I WITH MACRON 0x03F1 0x0146 #LATIN SMALL LETTER N WITH CEDILLA 0x03F2 0x014D #LATIN SMALL LETTER O WITH MACRON 0x03F3 0x0137 #LATIN SMALL LETTER K WITH CEDILLA 0x03F9 0x0173 #LATIN SMALL LETTER U WITH OGONEK 0x03FD 0x0169 #LATIN SMALL LETTER U WITH TILDE 0x03FE 0x016B #LATIN SMALL LETTER U WITH MACRON 0x047E 0x203E #OVERLINE 0x04A1 0x3002 #KANA FULL STOP 0x04A2 0x300C #KANA OPENING BRACKET 0x04A3 0x300D #KANA CLOSING BRACKET 0x04A4 0x3001 #KANA COMMA 0x04A5 0x30FB #KANA CONJUNCTIVE 0x04A6 0x30F2 #KANA LETTER WO 0x04A7 0x30A1 #KANA LETTER SMALL A 0x04A8 0x30A3 #KANA LETTER SMALL I 0x04A9 0x30A5 #KANA LETTER SMALL U 0x04AA 0x30A7 #KANA LETTER SMALL E 0x04AB 0x30A9 #KANA LETTER SMALL O 0x04AC 0x30E3 #KANA LETTER SMALL YA 0x04AD 0x30E5 #KANA LETTER SMALL YU 0x04AE 0x30E7 #KANA LETTER SMALL YO 0x04AF 0x30C3 #KANA LETTER SMALL TSU 0x04B0 0x30FC #PROLONGED SOUND SYMBOL 0x04B1 0x30A2 #KANA LETTER A 0x04B2 0x30A4 #KANA LETTER I 0x04B3 0x30A6 #KANA LETTER U 0x04B4 0x30A8 #KANA LETTER E 0x04B5 0x30AA #KANA LETTER O 0x04B6 0x30AB #KANA LETTER KA 0x04B7 0x30AD #KANA LETTER KI 0x04B8 0x30AF #KANA LETTER KU 0x04B9 0x30B1 #KANA LETTER KE 0x04BA 0x30B3 #KANA LETTER KO 0x04BB 0x30B5 #KANA LETTER SA 0x04BC 0x30B7 #KANA LETTER SHI 0x04BD 0x30B9 #KANA LETTER SU 0x04BE 0x30BB #KANA LETTER SE 0x04BF 0x30BD #KANA LETTER SO 0x04C0 0x30BF #KANA LETTER TA 0x04C1 0x30C1 #KANA LETTER CHI 0x04C2 0x30C4 #KANA LETTER TSU 0x04C3 0x30C6 #KANA LETTER TE 0x04C4 0x30C8 #KANA LETTER TO 0x04C5 0x30CA #KANA LETTER NA 0x04C6 0x30CB #KANA LETTER NI 0x04C7 0x30CC #KANA LETTER NU 0x04C8 0x30CD #KANA LETTER NE 0x04C9 0x30CE #KANA LETTER NO 0x04CA 0x30CF #KANA LETTER HA 0x04CB 0x30D2 #KANA LETTER HI 0x04CC 0x30D5 #KANA LETTER FU 0x04CD 0x30D8 #KANA LETTER HE 0x04CE 0x30DB #KANA LETTER HO 0x04CF 0x30DE #KANA LETTER MA 0x04D0 0x30DF #KANA LETTER MI 0x04D1 0x30E0 #KANA LETTER MU 0x04D2 0x30E1 #KANA LETTER ME 0x04D3 0x30E2 #KANA LETTER MO 0x04D4 0x30E4 #KANA LETTER YA 0x04D5 0x30E6 #KANA LETTER YU 0x04D6 0x30E8 #KANA LETTER YO 0x04D7 0x30E9 #KANA LETTER RA 0x04D8 0x30EA #KANA LETTER RI 0x04D9 0x30EB #KANA LETTER RU 0x04DA 0x30EC #KANA LETTER RE 0x04DB 0x30ED #KANA LETTER RO 0x04DC 0x30EF #KANA LETTER WA 0x04DD 0x30F3 #KANA LETTER N 0x04DE 0x309B #VOICED SOUND SYMBOL 0x04DF 0x309C #SEMIVOICED SOUND SYMBOL 0x05AC 0x060C #ARABIC COMMA 0x05BB 0x061B #ARABIC SEMICOLON 0x05BF 0x061F #ARABIC QUESTION MARK 0x05C1 0x0621 #ARABIC LETTER HAMZA 0x05C2 0x0622 #ARABIC LETTER ALEF WITH MADDA ABOVE 0x05C3 0x0623 #ARABIC LETTER ALEF WITH HAMZA ABOVE 0x05C4 0x0624 #ARABIC LETTER WAW WITH HAMZA ABOVE 0x05C5 0x0625 #ARABIC LETTER ALEF WITH HAMZA BELOW 0x05C6 0x0626 #ARABIC LETTER YEH WITH HAMZA ABOVE 0x05C7 0x0627 #ARABIC LETTER ALEF 0x05C8 0x0628 #ARABIC LETTER BEH 0x05C9 0x0629 #ARABIC LETTER TEH MARBUTA 0x05CA 0x062A #ARABIC LETTER TEH 0x05CB 0x062B #ARABIC LETTER THEH 0x05CC 0x062C #ARABIC LETTER JEEM 0x05CD 0x062D #ARABIC LETTER HAH 0x05CE 0x062E #ARABIC LETTER KHAH 0x05CF 0x062F #ARABIC LETTER DAL 0x05D0 0x0630 #ARABIC LETTER THAL 0x05D1 0x0631 #ARABIC LETTER REH 0x05D2 0x0632 #ARABIC LETTER ZAIN 0x05D3 0x0633 #ARABIC LETTER SEEN 0x05D4 0x0634 #ARABIC LETTER SHEEN 0x05D5 0x0635 #ARABIC LETTER SAD 0x05D6 0x0636 #ARABIC LETTER DAD 0x05D7 0x0637 #ARABIC LETTER TAH 0x05D8 0x0638 #ARABIC LETTER ZAH 0x05D9 0x0639 #ARABIC LETTER AIN 0x05DA 0x063A #ARABIC LETTER GHAIN 0x05E0 0x0640 #ARABIC TATWEEL 0x05E1 0x0641 #ARABIC LETTER FEH 0x05E2 0x0642 #ARABIC LETTER QAF 0x05E3 0x0643 #ARABIC LETTER KAF 0x05E4 0x0644 #ARABIC LETTER LAM 0x05E5 0x0645 #ARABIC LETTER MEEM 0x05E6 0x0646 #ARABIC LETTER NOON 0x05E7 0x0647 #ARABIC LETTER HEH 0x05E8 0x0648 #ARABIC LETTER WAW 0x05E9 0x0649 #ARABIC LETTER ALEF MAKSURA 0x05EA 0x064A #ARABIC LETTER YEH 0x05EB 0x064B #ARABIC FATHATAN 0x05EC 0x064C #ARABIC DAMMATAN 0x05ED 0x064D #ARABIC KASRATAN 0x05EE 0x064E #ARABIC FATHA 0x05EF 0x064F #ARABIC DAMMA 0x05F0 0x0650 #ARABIC KASRA 0x05F1 0x0651 #ARABIC SHADDA 0x05F2 0x0652 #ARABIC SUKUN 0x06A1 0x0452 #CYRILLIC SMALL LETTER DJE 0x06A2 0x0453 #CYRILLIC SMALL LETTER GJE 0x06A3 0x0451 #CYRILLIC SMALL LETTER IO 0x06A4 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE 0x06A5 0x0455 #CYRILLIC SMALL LETTER DZE 0x06A6 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 0x06A7 0x0457 #CYRILLIC SMALL LETTER YI 0x06A8 0x0458 #CYRILLIC SMALL LETTER JE 0x06A9 0x0459 #CYRILLIC SMALL LETTER LJE 0x06AA 0x045A #CYRILLIC SMALL LETTER NJE 0x06AB 0x045B #CYRILLIC SMALL LETTER TSHE 0x06AC 0x045C #CYRILLIC SMALL LETTER KJE 0x06AD 0x0491 #CYRILLIC SMALL LETTER GHE WITH UPTURN 0x06AE 0x045E #CYRILLIC SMALL LETTER SHORT U 0x06AF 0x045F #CYRILLIC SMALL LETTER DZHE 0x06B0 0x2116 #NUMERO SIGN 0x06B1 0x0402 #CYRILLIC CAPITAL LETTER DJE 0x06B2 0x0403 #CYRILLIC CAPITAL LETTER GJE 0x06B3 0x0401 #CYRILLIC CAPITAL LETTER IO 0x06B4 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE 0x06B5 0x0405 #CYRILLIC CAPITAL LETTER DZE 0x06B6 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0x06B7 0x0407 #CYRILLIC CAPITAL LETTER YI 0x06B8 0x0408 #CYRILLIC CAPITAL LETTER JE 0x06B9 0x0409 #CYRILLIC CAPITAL LETTER LJE 0x06BA 0x040A #CYRILLIC CAPITAL LETTER NJE 0x06BB 0x040B #CYRILLIC CAPITAL LETTER TSHE 0x06BC 0x040C #CYRILLIC CAPITAL LETTER KJE 0x06BD 0x0490 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN 0x06BE 0x040E #CYRILLIC CAPITAL LETTER SHORT U 0x06BF 0x040F #CYRILLIC CAPITAL LETTER DZHE 0x06C0 0x044E #CYRILLIC SMALL LETTER YU 0x06C1 0x0430 #CYRILLIC SMALL LETTER A 0x06C2 0x0431 #CYRILLIC SMALL LETTER BE 0x06C3 0x0446 #CYRILLIC SMALL LETTER TSE 0x06C4 0x0434 #CYRILLIC SMALL LETTER DE 0x06C5 0x0435 #CYRILLIC SMALL LETTER IE 0x06C6 0x0444 #CYRILLIC SMALL LETTER EF 0x06C7 0x0433 #CYRILLIC SMALL LETTER GHE 0x06C8 0x0445 #CYRILLIC SMALL LETTER HA 0x06C9 0x0438 #CYRILLIC SMALL LETTER I 0x06CA 0x0439 #CYRILLIC SMALL LETTER SHORT I 0x06CB 0x043A #CYRILLIC SMALL LETTER KA 0x06CC 0x043B #CYRILLIC SMALL LETTER EL 0x06CD 0x043C #CYRILLIC SMALL LETTER EM 0x06CE 0x043D #CYRILLIC SMALL LETTER EN 0x06CF 0x043E #CYRILLIC SMALL LETTER O 0x06D0 0x043F #CYRILLIC SMALL LETTER PE 0x06D1 0x044F #CYRILLIC SMALL LETTER YA 0x06D2 0x0440 #CYRILLIC SMALL LETTER ER 0x06D3 0x0441 #CYRILLIC SMALL LETTER ES 0x06D4 0x0442 #CYRILLIC SMALL LETTER TE 0x06D5 0x0443 #CYRILLIC SMALL LETTER U 0x06D6 0x0436 #CYRILLIC SMALL LETTER ZHE 0x06D7 0x0432 #CYRILLIC SMALL LETTER VE 0x06D8 0x044C #CYRILLIC SMALL LETTER SOFT SIGN 0x06D9 0x044B #CYRILLIC SMALL LETTER YERU 0x06DA 0x0437 #CYRILLIC SMALL LETTER ZE 0x06DB 0x0448 #CYRILLIC SMALL LETTER SHA 0x06DC 0x044D #CYRILLIC SMALL LETTER E 0x06DD 0x0449 #CYRILLIC SMALL LETTER SHCHA 0x06DE 0x0447 #CYRILLIC SMALL LETTER CHE 0x06DF 0x044A #CYRILLIC SMALL LETTER HARD SIGN 0x06E0 0x042E #CYRILLIC CAPITAL LETTER YU 0x06E1 0x0410 #CYRILLIC CAPITAL LETTER A 0x06E2 0x0411 #CYRILLIC CAPITAL LETTER BE 0x06E3 0x0426 #CYRILLIC CAPITAL LETTER TSE 0x06E4 0x0414 #CYRILLIC CAPITAL LETTER DE 0x06E5 0x0415 #CYRILLIC CAPITAL LETTER IE 0x06E6 0x0424 #CYRILLIC CAPITAL LETTER EF 0x06E7 0x0413 #CYRILLIC CAPITAL LETTER GHE 0x06E8 0x0425 #CYRILLIC CAPITAL LETTER HA 0x06E9 0x0418 #CYRILLIC CAPITAL LETTER I 0x06EA 0x0419 #CYRILLIC CAPITAL LETTER SHORT I 0x06EB 0x041A #CYRILLIC CAPITAL LETTER KA 0x06EC 0x041B #CYRILLIC CAPITAL LETTER EL 0x06ED 0x041C #CYRILLIC CAPITAL LETTER EM 0x06EE 0x041D #CYRILLIC CAPITAL LETTER EN 0x06EF 0x041E #CYRILLIC CAPITAL LETTER O 0x06F0 0x041F #CYRILLIC CAPITAL LETTER PE 0x06F1 0x042F #CYRILLIC CAPITAL LETTER YA 0x06F2 0x0420 #CYRILLIC CAPITAL LETTER ER 0x06F3 0x0421 #CYRILLIC CAPITAL LETTER ES 0x06F4 0x0422 #CYRILLIC CAPITAL LETTER TE 0x06F5 0x0423 #CYRILLIC CAPITAL LETTER U 0x06F6 0x0416 #CYRILLIC CAPITAL LETTER ZHE 0x06F7 0x0412 #CYRILLIC CAPITAL LETTER VE 0x06F8 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN 0x06F9 0x042B #CYRILLIC CAPITAL LETTER YERU 0x06FA 0x0417 #CYRILLIC CAPITAL LETTER ZE 0x06FB 0x0428 #CYRILLIC CAPITAL LETTER SHA 0x06FC 0x042D #CYRILLIC CAPITAL LETTER E 0x06FD 0x0429 #CYRILLIC CAPITAL LETTER SHCHA 0x06FE 0x0427 #CYRILLIC CAPITAL LETTER CHE 0x06FF 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN 0x07A1 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS 0x07A2 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS 0x07A3 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS 0x07A4 0x038A #GREEK CAPITAL LETTER IOTA WITH TONOS 0x07A5 0x03AA #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 0x07A7 0x038C #GREEK CAPITAL LETTER OMICRON WITH TONOS 0x07A8 0x038E #GREEK CAPITAL LETTER UPSILON WITH TONOS 0x07A9 0x03AB #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 0x07AB 0x038F #GREEK CAPITAL LETTER OMEGA WITH TONOS 0x07AE 0x0385 #GREEK DIALYTIKA TONOS 0x07AF 0x2015 #HORIZONTAL BAR 0x07B1 0x03AC #GREEK SMALL LETTER ALPHA WITH TONOS 0x07B2 0x03AD #GREEK SMALL LETTER EPSILON WITH TONOS 0x07B3 0x03AE #GREEK SMALL LETTER ETA WITH TONOS 0x07B4 0x03AF #GREEK SMALL LETTER IOTA WITH TONOS 0x07B5 0x03CA #GREEK SMALL LETTER IOTA WITH DIALYTIKA 0x07B6 0x0390 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 0x07B7 0x03CC #GREEK SMALL LETTER OMICRON WITH TONOS 0x07B8 0x03CD #GREEK SMALL LETTER UPSILON WITH TONOS 0x07B9 0x03CB #GREEK SMALL LETTER UPSILON WITH DIALYTIKA 0x07BA 0x03B0 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 0x07BB 0x03CE #GREEK SMALL LETTER OMEGA WITH TONOS 0x07C1 0x0391 #GREEK CAPITAL LETTER ALPHA 0x07C2 0x0392 #GREEK CAPITAL LETTER BETA 0x07C3 0x0393 #GREEK CAPITAL LETTER GAMMA 0x07C4 0x0394 #GREEK CAPITAL LETTER DELTA 0x07C5 0x0395 #GREEK CAPITAL LETTER EPSILON 0x07C6 0x0396 #GREEK CAPITAL LETTER ZETA 0x07C7 0x0397 #GREEK CAPITAL LETTER ETA 0x07C8 0x0398 #GREEK CAPITAL LETTER THETA 0x07C9 0x0399 #GREEK CAPITAL LETTER IOTA 0x07CA 0x039A #GREEK CAPITAL LETTER KAPPA 0x07CB 0x039B #GREEK CAPITAL LETTER LAMDA 0x07CC 0x039C #GREEK CAPITAL LETTER MU 0x07CD 0x039D #GREEK CAPITAL LETTER NU 0x07CE 0x039E #GREEK CAPITAL LETTER XI 0x07CF 0x039F #GREEK CAPITAL LETTER OMICRON 0x07D0 0x03A0 #GREEK CAPITAL LETTER PI 0x07D1 0x03A1 #GREEK CAPITAL LETTER RHO 0x07D2 0x03A3 #GREEK CAPITAL LETTER SIGMA 0x07D4 0x03A4 #GREEK CAPITAL LETTER TAU 0x07D5 0x03A5 #GREEK CAPITAL LETTER UPSILON 0x07D6 0x03A6 #GREEK CAPITAL LETTER PHI 0x07D7 0x03A7 #GREEK CAPITAL LETTER CHI 0x07D8 0x03A8 #GREEK CAPITAL LETTER PSI 0x07D9 0x03A9 #GREEK CAPITAL LETTER OMEGA 0x07E1 0x03B1 #GREEK SMALL LETTER ALPHA 0x07E2 0x03B2 #GREEK SMALL LETTER BETA 0x07E3 0x03B3 #GREEK SMALL LETTER GAMMA 0x07E4 0x03B4 #GREEK SMALL LETTER DELTA 0x07E5 0x03B5 #GREEK SMALL LETTER EPSILON 0x07E6 0x03B6 #GREEK SMALL LETTER ZETA 0x07E7 0x03B7 #GREEK SMALL LETTER ETA 0x07E8 0x03B8 #GREEK SMALL LETTER THETA 0x07E9 0x03B9 #GREEK SMALL LETTER IOTA 0x07EA 0x03BA #GREEK SMALL LETTER KAPPA 0x07EB 0x03BB #GREEK SMALL LETTER LAMDA 0x07EC 0x03BC #GREEK SMALL LETTER MU 0x07ED 0x03BD #GREEK SMALL LETTER NU 0x07EE 0x03BE #GREEK SMALL LETTER XI 0x07EF 0x03BF #GREEK SMALL LETTER OMICRON 0x07F0 0x03C0 #GREEK SMALL LETTER PI 0x07F1 0x03C1 #GREEK SMALL LETTER RHO 0x07F2 0x03C3 #GREEK SMALL LETTER SIGMA 0x07F3 0x03C2 #GREEK SMALL LETTER FINAL SIGMA 0x07F4 0x03C4 #GREEK SMALL LETTER TAU 0x07F5 0x03C5 #GREEK SMALL LETTER UPSILON 0x07F6 0x03C6 #GREEK SMALL LETTER PHI 0x07F7 0x03C7 #GREEK SMALL LETTER CHI 0x07F8 0x03C8 #GREEK SMALL LETTER PSI 0x07F9 0x03C9 #GREEK SMALL LETTER OMEGA 0x0AA1 0x2003 #EM SPACE Publish 0x0AA2 0x2002 #EN SPACE Publish 0x0AA3 0x2004 #3/EM SPACE Publish 0x0AA4 0x2005 #4/EM SPACE Publish 0x0AA5 0x2007 #DIGIT SPACE Publish 0x0AA6 0x2008 #PUNCTUATION SPACE Publish 0x0AA7 0x2009 #THIN SPACE Publish 0x0AA8 0x200A #HAIR SPACE Publish 0x0AA9 0x2014 #EM DASH Publish 0x0AAA 0x2013 #EN DASH Publish 0x0AAC 0x2423 #SIGNIFICANT BLANK SYMBOL Publish 0x0AAE 0x2026 #ELLIPSIS Publish 0x0AAF 0x2025 #DOUBLE BASELINE DOT Publish 0x0AB0 0x2153 #VULGAR FRACTION ONE THIRD Publish 0x0AB1 0x2154 #VULGAR FRACTION TWO THIRDS Publish 0x0AB2 0x2155 #VULGAR FRACTION ONE FIFTH Publish 0x0AB3 0x2156 #VULGAR FRACTION TWO FIFTHS Publish 0x0AB4 0x2157 #VULGAR FRACTION THREE FIFTHS Publish 0x0AB5 0x2158 #VULGAR FRACTION FOUR FIFTHS Publish 0x0AB6 0x2159 #VULGAR FRACTION ONE SIXTH Publish 0x0AB7 0x215A #VULGAR FRACTION FIVE SIXTHS Publish 0x0AB8 0x2105 #CARE OF Publish 0x0ABB 0x2012 #FIGURE DASH Publish 0x0ABC 0x3008 #LEFT ANGLE BRACKET Publish 0x0ABD 0x002e #DECIMAL POINT Publish 0x0ABE 0x3009 #RIGHT ANGLE BRACKET Publish 0x0AC3 0x215B #VULGAR FRACTION ONE EIGHTH Publish 0x0AC4 0x215C #VULGAR FRACTION THREE EIGHTHS Publish 0x0AC5 0x215D #VULGAR FRACTION FIVE EIGHTHS Publish 0x0AC6 0x215E #VULGAR FRACTION SEVEN EIGHTHS Publish 0x0AC9 0x2122 #TRADEMARK SIGN Publish 0x0AD0 0x2018 #LEFT SINGLE QUOTATION MARK Publish 0x0AD1 0x2019 #RIGHT SINGLE QUOTATION MARK Publish 0x0AD2 0x201C #LEFT DOUBLE QUOTATION MARK Publish 0x0AD3 0x201D #RIGHT DOUBLE QUOTATION MARK Publish 0x0AD4 0x211E #PRESCRIPTION, TAKE, RECIPE Publish 0x0AD5 0x2030 #PER MILLE SIGN Publish 0x0AD6 0x2032 #MINUTES Publish 0x0AD7 0x2033 #SECONDS Publish 0x0AD9 0x271D #LATIN CROSS Publish 0x0AEC 0x2663 #CLUB Publish 0x0AED 0x2666 #DIAMOND Publish 0x0AEE 0x2665 #HEART Publish 0x0AF0 0x2720 #MALTESE CROSS Publish 0x0AF1 0x2020 #DAGGER Publish 0x0AF2 0x2021 #DOUBLE DAGGER Publish 0x0AF3 0x2713 #CHECK MARK, TICK Publish 0x0AF4 0x2717 #BALLOT CROSS Publish 0x0AF5 0x266F #MUSICAL SHARP Publish 0x0AF6 0x266D #MUSICAL FLAT Publish 0x0AF7 0x2642 #MALE SYMBOL Publish 0x0AF8 0x2640 #FEMALE SYMBOL Publish 0x0AF9 0x260E #TELEPHONE SYMBOL Publish 0x0AFA 0x2315 #TELEPHONE RECORDER SYMBOL Publish 0x0AFB 0x2117 #PHONOGRAPH COPYRIGHT SIGN Publish 0x0AFC 0x2038 #CARET Publish 0x0AFD 0x201A #SINGLE LOW QUOTATION MARK Publish 0x0AFE 0x201E #DOUBLE LOW QUOTATION MARK Publish 0x0CDF 0x2017 #DOUBLE LOW LINE 0x0CE0 0x05D0 #HEBREW LETTER ALEF 0x0CE1 0x05D1 #HEBREW LETTER BET 0x0CE2 0x05D2 #HEBREW LETTER GIMEL 0x0CE3 0x05D3 #HEBREW LETTER DALET 0x0CE4 0x05D4 #HEBREW LETTER HE 0x0CE5 0x05D5 #HEBREW LETTER VAV 0x0CE6 0x05D6 #HEBREW LETTER ZAYIN 0x0CE7 0x05D7 #HEBREW LETTER HET 0x0CE8 0x05D8 #HEBREW LETTER TET 0x0CE9 0x05D9 #HEBREW LETTER YOD 0x0CEA 0x05DA #HEBREW LETTER FINAL KAF 0x0CEB 0x05DB #HEBREW LETTER KAF 0x0CEC 0x05DC #HEBREW LETTER LAMED 0x0CED 0x05DD #HEBREW LETTER FINAL MEM 0x0CEE 0x05DE #HEBREW LETTER MEM 0x0CEF 0x05DF #HEBREW LETTER FINAL NUN 0x0CF0 0x05E0 #HEBREW LETTER NUN 0x0CF1 0x05E1 #HEBREW LETTER SAMEKH 0x0CF2 0x05E2 #HEBREW LETTER AYIN 0x0CF3 0x05E3 #HEBREW LETTER FINAL PE 0x0CF4 0x05E4 #HEBREW LETTER PE 0x0CF5 0x05E5 #HEBREW LETTER FINAL TSADI 0x0CF6 0x05E6 #HEBREW LETTER TSADI 0x0CF7 0x05E7 #HEBREW LETTER QOF 0x0CF8 0x05E8 #HEBREW LETTER RESH 0x0CF9 0x05E9 #HEBREW LETTER SHIN 0x0CFA 0x05EA #HEBREW LETTER TAV 0x0DA1 0x0E01 #THAI CHARACTER KO KAI 0x0DA2 0x0E02 #THAI CHARACTER KHO KHAI 0x0DA3 0x0E03 #THAI CHARACTER KHO KHUAT 0x0DA4 0x0E04 #THAI CHARACTER KHO KHWAI 0x0DA5 0x0E05 #THAI CHARACTER KHO KHON 0x0DA6 0x0E06 #THAI CHARACTER KHO RAKHANG 0x0DA7 0x0E07 #THAI CHARACTER NGO NGU 0x0DA8 0x0E08 #THAI CHARACTER CHO CHAN 0x0DA9 0x0E09 #THAI CHARACTER CHO CHING 0x0DAA 0x0E0A #THAI CHARACTER CHO CHANG 0x0DAB 0x0E0B #THAI CHARACTER SO SO 0x0DAC 0x0E0C #THAI CHARACTER CHO CHOE 0x0DAD 0x0E0D #THAI CHARACTER YO YING 0x0DAE 0x0E0E #THAI CHARACTER DO CHADA 0x0DAF 0x0E0F #THAI CHARACTER TO PATAK 0x0DB0 0x0E10 #THAI CHARACTER THO THAN 0x0DB1 0x0E11 #THAI CHARACTER THO NANGMONTHO 0x0DB2 0x0E12 #THAI CHARACTER THO PHUTHAO 0x0DB3 0x0E13 #THAI CHARACTER NO NEN 0x0DB4 0x0E14 #THAI CHARACTER DO DEK 0x0DB5 0x0E15 #THAI CHARACTER TO TAO 0x0DB6 0x0E16 #THAI CHARACTER THO THUNG 0x0DB7 0x0E17 #THAI CHARACTER THO THAHAN 0x0DB8 0x0E18 #THAI CHARACTER THO THONG 0x0DB9 0x0E19 #THAI CHARACTER NO NU 0x0DBA 0x0E1A #THAI CHARACTER BO BAIMAI 0x0DBB 0x0E1B #THAI CHARACTER PO PLA 0x0DBC 0x0E1C #THAI CHARACTER PHO PHUNG 0x0DBD 0x0E1D #THAI CHARACTER FO FA 0x0DBE 0x0E1E #THAI CHARACTER PHO PHAN 0x0DBF 0x0E1F #THAI CHARACTER FO FAN 0x0DC0 0x0E20 #THAI CHARACTER PHO SAMPHAO 0x0DC1 0x0E21 #THAI CHARACTER MO MA 0x0DC2 0x0E22 #THAI CHARACTER YO YAK 0x0DC3 0x0E23 #THAI CHARACTER RO RUA 0x0DC4 0x0E24 #THAI CHARACTER RU 0x0DC5 0x0E25 #THAI CHARACTER LO LING 0x0DC6 0x0E26 #THAI CHARACTER LU 0x0DC7 0x0E27 #THAI CHARACTER WO WAEN 0x0DC8 0x0E28 #THAI CHARACTER SO SALA 0x0DC9 0x0E29 #THAI CHARACTER SO RUSI 0x0DCA 0x0E2A #THAI CHARACTER SO SUA 0x0DCB 0x0E2B #THAI CHARACTER HO HIP 0x0DCC 0x0E2C #THAI CHARACTER LO CHULA 0x0DCD 0x0E2D #THAI CHARACTER O ANG 0x0DCE 0x0E2E #THAI CHARACTER HO NOKHUK 0x0DCF 0x0E2F #THAI CHARACTER PAIYANNOI 0x0DD0 0x0E30 #THAI CHARACTER SARA A 0x0DD1 0x0E31 #THAI CHARACTER MAI HAN-AKAT 0x0DD2 0x0E32 #THAI CHARACTER SARA AA 0x0DD3 0x0E33 #THAI CHARACTER SARA AM 0x0DD4 0x0E34 #THAI CHARACTER SARA I 0x0DD5 0x0E35 #THAI CHARACTER SARA II 0x0DD6 0x0E36 #THAI CHARACTER SARA UE 0x0DD7 0x0E37 #THAI CHARACTER SARA UEE 0x0DD8 0x0E38 #THAI CHARACTER SARA U 0x0DD9 0x0E39 #THAI CHARACTER SARA UU 0x0DDA 0x0E3A #THAI CHARACTER PHINTHU 0x0DDF 0x0E3F #THAI CURRENCY SYMBOL BAHT 0x0DE0 0x0E40 #THAI CHARACTER SARA E 0x0DE1 0x0E41 #THAI CHARACTER SARA AE 0x0DE2 0x0E42 #THAI CHARACTER SARA O 0x0DE3 0x0E43 #THAI CHARACTER SARA AI MAIMUAN 0x0DE4 0x0E44 #THAI CHARACTER SARA AI MAIMALAI 0x0DE5 0x0E45 #THAI CHARACTER LAKKHANGYAO 0x0DE6 0x0E46 #THAI CHARACTER MAIYAMOK 0x0DE7 0x0E47 #THAI CHARACTER MAITAIKHU 0x0DE8 0x0E48 #THAI CHARACTER MAI EK 0x0DE9 0x0E49 #THAI CHARACTER MAI THO 0x0DEA 0x0E4A #THAI CHARACTER MAI TRI 0x0DEB 0x0E4B #THAI CHARACTER MAI CHATTAWA 0x0DEC 0x0E4C #THAI CHARACTER THANTHAKHAT 0x0DED 0x0E4D #THAI CHARACTER NIKHAHIT 0x0DF0 0x0E50 #THAI DIGIT ZERO 0x0DF1 0x0E51 #THAI DIGIT ONE 0x0DF2 0x0E52 #THAI DIGIT TWO 0x0DF3 0x0E53 #THAI DIGIT THREE 0x0DF4 0x0E54 #THAI DIGIT FOUR 0x0DF5 0x0E55 #THAI DIGIT FIVE 0x0DF6 0x0E56 #THAI DIGIT SIX 0x0DF7 0x0E57 #THAI DIGIT SEVEN 0x0DF8 0x0E58 #THAI DIGIT EIGHT 0x0DF9 0x0E59 #THAI DIGIT NINE 0x13BC 0x0152 #LATIN CAPITAL LIGATURE OE 0x13BD 0x0153 #LATIN SMALL LIGATURE OE 0x13BE 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS 0x20A0 0x20A0 #CURRENCY ECU SIGN 0x20A1 0x20A1 #CURRENCY COLON SIGN 0x20A2 0x20A2 #CURRENCY CRUZEIRO SIGN 0x20A3 0x20A3 #CURRENCY FRENCH FRANC SIGN 0x20A4 0x20A4 #CURRENCY LIRA SIGN 0x20A5 0x20A5 #CURRENCY MILL SIGN 0x20A6 0x20A6 #CURRENCY NAIRA SIGN 0x20A7 0x20A7 #CURRENCY PESETA SIGN 0x20A8 0x20A8 #CURRENCY RUPEE SIGN 0x20A9 0x20A9 #CURRENCY WON SIGN 0x20AA 0x20AA #CURRENCY NEW SHEQEL SIGN 0x20AB 0x20AB #CURRENCY DONG SIGN 0x20AC 0x20AC #CURRENCY EURO SIGN |
Added freshlib/gui/Linux/__images/cursors.png.
cannot compute difference between binary files
Added freshlib/gui/Linux/application.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TApplication object class. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: TApplication by the idea is the base of GUI application, but the implementation ; somehow need fixing... ;_________________________________________________________________________________________ uglobal if used appConn appConn xConnection var flagSharedMemory = ? var atomWMProtocols = ? wmProtocols: .atomWMDelete dd ? .atomWMSyncRequest dd ? .atomWMPing dd ? .count = ($ - wmProtocols)/4 var atomWMSyncCounter = ? var atomState = ? var atomStateAbove = ? var atomStateModal = ? var atomStateMaximizedVert = ? var atomStateMaximizedHorz = ? var atomStateHidden = ? var atomStateSkipTaskbar = ? var atomStateSkipPager = ? var atomAllowedActions = ? var atomActionMove = ? var atomActionResize = ? var atomActionMinimize = ? var atomActionShade = ? var atomActionStick = ? var atomActionMaximizeHorz = ? var atomActionMaximizeVert = ? var atomActionFullscreen = ? var atomActionChangeDesktop = ? var atomActionClose = ? var atomWindowType = ? var atomWindowTypePopupMenu = ? var atomWindowTypeUtility = ? var atomWindowTypeToolbar = ? var atomWindowTypeMenu = ? var atomWindowTypeDialog = ? var atomWindowTypeNormal = ? var atomWindowTypeDock = ? var atomWindowName = ? var atomIcon = ? var atomClientLeader = ? var atomClipboard = ? var atomTargets = ? var atomStringUtf8 = ? var FTLibrary = ? var FTCManager = ? var FTCImageCache = ? var FTCCMapCache = ? var applicationClass = ? ; contains the application class name to be set to WM_CLASS property of the windows. end if endg iglobal if used allAtoms allAtoms dd cWMProtocols, atomWMProtocols dd cWMDeleteWindow, wmProtocols.atomWMDelete dd cNetWMSyncRequest, wmProtocols.atomWMSyncRequest dd cNetWMPing, wmProtocols.atomWMPing dd cNetWMSyncRequestCounter, atomWMSyncCounter dd cNetWMState, atomState dd cNetWMStateAbove, atomStateAbove dd cNetWMStateModal, atomStateModal dd cNetWMStateSkipTaskbar, atomStateSkipTaskbar dd cNetWMStateSkipPager, atomStateSkipPager dd cNetWMStateMaximizedVert, atomStateMaximizedVert dd cNetWMStateMaximizedHorz, atomStateMaximizedHorz dd cNetWMStateHidden, atomStateHidden dd cNetWMWindowType, atomWindowType dd cNetWMWindowTypePopupMenu, atomWindowTypePopupMenu dd cNetWMWindowTypeUtility, atomWindowTypeUtility dd cNetWMWindowTypeToolbar, atomWindowTypeToolbar dd cNetWMWindowTypeMenu, atomWindowTypeMenu dd cNetWMWindowTypeDialog, atomWindowTypeDialog dd cNetWMWindowTypeNormal, atomWindowTypeNormal dd cNetWMWindowTypeDock, atomWindowTypeDock dd cNetWMWindowName, atomWindowName dd cNetWMIcon, atomIcon dd cWMClientLeader, atomClientLeader dd cClipboard, atomClipboard dd cTargets, atomTargets dd cStringUtf8, atomStringUtf8 .count = ($ - allAtoms)/8 end if cWMProtocols xAtom "WM_PROTOCOLS" cWMDeleteWindow xAtom "WM_DELETE_WINDOW" cNetWMSyncRequest xAtom "_NET_WM_SYNC_REQUEST" cNetWMPing xAtom "_NET_WM_PING" cNetWMSyncRequestCounter xAtom "_NET_WM_SYNC_REQUEST_COUNTER" cNetWMState xAtom "_NET_WM_STATE" cNetWMStateAbove xAtom "_NET_WM_STATE_ABOVE" cNetWMStateModal xAtom "_NET_WM_STATE_MODAL" cNetWMStateSkipTaskbar xAtom "_NET_WM_STATE_SKIP_TASKBAR" cNetWMStateSkipPager xAtom "_NET_WM_STATE_SKIP_PAGER" cNetWMStateMaximizedVert xAtom "_NET_WM_STATE_MAXIMIZED_VERT" cNetWMStateMaximizedHorz xAtom "_NET_WM_STATE_MAXIMIZED_HORZ" cNetWMStateHidden xAtom "_NET_WM_STATE_HIDDEN" cNetWMWindowType xAtom "_NET_WM_WINDOW_TYPE" cNetWMWindowTypePopupMenu xAtom "_NET_WM_WINDOW_TYPE_POPUP_MENU" cNetWMWindowTypeUtility xAtom "_NET_WM_WINDOW_TYPE_UTILITY" cNetWMWindowTypeToolbar xAtom "_NET_WM_WINDOW_TYPE_TOOLBAR" cNetWMWindowTypeMenu xAtom "_NET_WM_WINDOW_TYPE_MENU" cNetWMWindowTypeDialog xAtom "_NET_WM_WINDOW_TYPE_DIALOG" cNetWMWindowTypeNormal xAtom "_NET_WM_WINDOW_TYPE_NORMAL" cNetWMWindowTypeDock xAtom "_NET_WM_WINDOW_TYPE_DOCK" cNetWMWindowName xAtom "_NET_WM_NAME" cNetWMIcon xAtom "_NET_WM_ICON" cWMClientLeader xAtom "WM_CLIENT_LEADER" cClipboard xAtom "CLIPBOARD" cTargets xAtom "TARGETS" cStringUtf8 xAtom "UTF8_STRING" endg proc InitGUIApplication .ptr dd ? .getmap __xXkbGetMapReq .selevents __xXkbSelectEventsReq begin stdcall xOpenConnection, appConn, 32 jc .error_disp OutputValue "X server connection opened. Socket: ", [appConn.socket], 10, -1 OutputValue "Root window: ", [appConn.rootID], 16, 8 ; Creating InternAtom's that to be used with Window manager of the application windows... mov esi, allAtoms mov ecx, allAtoms.count .atom_loop: stdcall xInternAtom, [esi] jc .next_atom mov edx, [esi+4] mov [edx], eax .next_atom: add esi, 8 loop .atom_loop ; stdcall InitMouseCursors stdcall InitMouseCursors2 ; Extract the application filename and use it as WM_CLASS stdcall GetCmdArguments push StrDel push eax stdcall StrExtractFilename, [eax+TArray.array] ; the first argument is the application name. stdcall ListFree ; from the stack mov [applicationClass], eax ; XShm extension check if defined options.DebugMode.DisableSHM & options.DebugMode.DisableSHM mov [flagSharedMemory], 0 else mov eax, [appConn.exShm.Active] mov [flagSharedMemory], eax end if OutputValue "MIT-SHM extension available:", [flagSharedMemory], 10, -1 mov eax, [appConn.exKbd.OpCode] mov [.selevents.op], al mov [.selevents.minor], opXkbSelectEvents mov [.selevents.length], sizeof.__xXkbSelectEventsReq/4 mov [.selevents.deviceSpec], xkbUseCoreKbd mov [.selevents.affectWhich], mxkbMapNotify; or mxkbCompatMapNotify mov [.selevents.clear], 0 mov [.selevents.selectAll], mxkbMapNotify; or mxkbCompatMapNotify mov [.selevents.affectMap], mxkbKeySyms mov [.selevents.map], mxkbKeySyms lea eax, [.selevents] stdcall xSend, appConn, eax ; Get the keyboard mapping mov eax, [appConn.exKbd.OpCode] mov [.getmap.op], al mov [.getmap.minor], opXkbGetMap mov [.getmap.length], sizeof.__xXkbGetMapReq/4 mov [.getmap.deviceSpec], xkbUseCoreKbd mov [.getmap.full], mxkbKeySyms mov [.getmap.partial], 0 lea eax, [.getmap] stdcall xSendWithCallback, appConn, eax, __IndexKeymap, 0 ; Init freetype library. cinvoke FT_Init_FreeType, FTLibrary test eax, eax jnz .error_ft cinvoke FTC_Manager_New, [FTLibrary], 0, 0, 0, FTCRequester, 0, FTCManager cinvoke FTC_ImageCache_New, [FTCManager], FTCImageCache cinvoke FTC_CMapCache_New, [FTCManager], FTCCMapCache ; clipboard initialization. if __UseClipboard = 1 stdcall __InitLinuxClipboard end if clc return .error_ft: DebugMsg 'Error initializing FreeType library.' jmp .exit_error .error_disp: DebugMsg 'Error open display.' .exit_error: stc return endp proc TerminateGUI begin DebugMsg "Terminate GUI" stdcall FreeMouseCursors stdcall xCloseConnection, appConn stdcall StrDel, [applicationClass] return endp proc CloseGUIApplication begin inc [fGlobalTerminate] return endp |
Added freshlib/gui/Linux/clipboard.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Clipboard management library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ if used ClipboardRead | used ClipboardWrite __UseClipboard = 1 else __UseClipboard = 0 end if ; Clipboard data type constants. clipboardNull = 0 ; empty clipboard. clipboardString = 1 clipboardBinary = 2 struct TClipboard .type dd ? .Length dd ? .mutex TMutex label .data byte ends uglobal var pClipboard = 0 ; String handle with the clipboard text. var __idClipboardWindow = 0 endg body ClipboardType begin mov eax, [pClipboard] test eax, eax jz .finish mov eax, [eax+TClipboard.type] .finish: return endp body ClipboardRead begin stdcall __StringFromClipboard, [pClipboard] return endp body ClipboardWrite ; .hstring .sso __xSetSelectionOwnerReq begin pushad stdcall StrLen, [.hstring] mov ecx, eax stdcall StrPtr, [.hstring] stdcall __ClipboardFromMem, eax, ecx, clipboardString jc .finish xchg eax, [pClipboard] stdcall __ClipboardFree, eax mov eax, [__idClipboardWindow] mov edx, [atomClipboard] mov [.sso.op], opSetSelectionOwner mov [.sso.length], sizeof.__xSetSelectionOwnerReq/4 mov [.sso.owner], eax mov [.sso.selection], edx mov [.sso.time], 0 ; CurrentTime lea eax, [.sso] stdcall xSend, appConn, eax clc .finish: popad return endp proc __ClipboardCreate, .datalength begin push ecx mov ecx, [.datalength] lea eax, [ecx+sizeof.TClipboard] add eax, 3 and al, $fc ; align 4 bytes stdcall GetMem, eax jc .finish lea ecx, [eax+TClipboard.mutex] stdcall MutexCreate, 0, ecx stdcall MutexRelease, ecx clc .finish: pop ecx return endp proc __ClipboardFree, .pClipboard begin push eax ebx esi mov esi, [.pClipboard] test esi, esi jz .finish lea ebx, [esi+TClipboard.mutex] stdcall WaitForMutex, ebx, 1000 stdcall MutexDestroy, ebx stdcall FreeMem, esi .finish: pop esi ebx eax return endp proc __ClipboardLock, .pClipboard begin push eax mov eax, [.pClipboard] lea eax, [eax+TClipboard.mutex] stdcall WaitForMutex, eax, 1000 pop eax return endp proc __ClipboardUnlock, .pClipboard begin push eax mov eax, [.pClipboard] lea eax, [eax+TClipboard.mutex] stdcall MutexRelease, eax pop eax return endp proc __ClipboardFromMem, .pMemory, .length, .type begin pushad mov ecx, [.length] mov esi, [.pMemory] stdcall __ClipboardCreate, ecx jc .finish mov ebx, [.type] mov [eax+TClipboard.type], ebx mov [eax+TClipboard.Length], ecx lea edi, [eax+TClipboard.data] mov ebx, ecx shr ecx, 2 rep movsd mov ecx, ebx and ecx, 3 rep movsb mov [esp+4*regEAX], eax clc .finish: popad return endp proc __StringFromClipboard, .pClipboard begin push esi xor eax, eax mov esi, [.pClipboard] test esi, esi jz .error stdcall __ClipboardLock, esi jc .error stdcall StrExtractMem, esi, TClipboard.data, [esi+TClipboard.Length] stdcall __ClipboardUnlock, esi clc pop esi return .error: stc pop esi return endp proc __InitLinuxClipboard .win __xCreateWindowReq .ev __xfixSelectSelectionInputReq .conv __xConvertSelectionReq begin pushad mov [.win.op], opCreateWindow mov [.win.depth], 0 mov [.win.length], sizeof.__xCreateWindowReq/4 stdcall xGetID, appConn, __idClipboardWindow push eax mov ebx, [appConn.rootID] xor ecx, ecx mov edx, [appConn.visualID] mov [.win.wid], eax mov [.win.parent], ebx mov [.win.x], cx mov [.win.y], cx mov [.win.border], cx inc ecx mov [.win.w], cx mov [.win.h], cx mov [.win.class], InputOnly mov [.win.visid], edx mov [.win.attr_mask], 0 mov [.ev.window], eax lea eax, [.win] stdcall xSend, appConn, eax mov eax, [appConn.exFixes.OpCode] mov edx, [atomClipboard] mov [.ev.op], al mov [.ev.minor], opFixSelectSelectionInput mov [.ev.length], sizeof.__xfixSelectSelectionInputReq/4 mov [.ev.selection], edx mov [.ev.event_mask], maskFixSetSelectionOwner ; subscribe for XFIXES event SetSelectionOwner lea eax, [.ev] stdcall xSend, appConn, eax pop [__idClipboardWindow] OutputValue "Clipboard window created: ", [__idClipboardWindow], 16, 8 ; Send the first opConvertSelection request in order to start the clipboard engine. mov eax, [__idClipboardWindow] mov ebx, [atomClipboard] mov ecx, [atomStringUtf8] mov [.conv.op], opConvertSelection mov [.conv.length], sizeof.__xConvertSelectionReq/4 mov [.conv.requestor], eax mov [.conv.selection], ebx mov [.conv.target], ecx mov [.conv.property], atomCUT_BUFFER0 ; reuse predefined atoms! and [.conv.time], 0 lea eax, [.conv] stdcall xSend, appConn, eax popad return endp |
Added freshlib/gui/Linux/keycodes.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This file contains scan code values for control keyboard keys. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ keyHomeNumpad = $ff95 keyUpNumpad = $ff97 keyPgUpNumpad = $ff9a keyLeftNumpad = $ff96 key5Numpad = $ff9d keyRightNumpad = $ff98 keyEndNumpad = $ff9c keyDownNumpad = $ff99 keyPgDnNumpad = $ff9b keyInsNumpad = $ff9e keyDelNumpad = $ff9f keyEnterNumpad = $ff8d keyPlusNumpad = $ffab keyMinusNumpad = $ffad keyAsteriskNumpad = $ffaa keySlashNumpad = $ffaf keyNumLock = $ff7f keyScrollLock = $ff14 keyPause = $ff13 keyLeft = $ff51 keyRight = $ff53 keyUp = $ff52 keyDown = $ff54 keyInsert = $ff63 keyDelete = $ffff keyHome = $ff50 keyEnd = $ff57 keyPgUp = $ff55 keyPgDown = $ff56 keyF1 = $ffbe keyF2 = $ffbf keyF3 = $ffc0 keyF4 = $ffc1 keyF5 = $ffc2 keyF6 = $ffc3 keyF7 = $ffc4 keyF8 = $ffc5 keyF9 = $ffc6 keyF10 = $ffc7 keyF11 = $ffc8 keyF12 = $ffc9 keyCapsLock = $ffe5 keyShiftLeft = $ffe1 keyCtrlLeft = $ffe3 ;keyWndLeft = ;keyWndRight = keyAltLeft = $ffe9 keyAltRight = $ffea keyPopupMenu = $ff67 keyShiftRight = $ffe2 keyCtrlRight = $ffe4 keyBackSpace = $ff08 keyTab = $ff09 keyLeftTab = $fe20 keyEscape = $ff1b keyEnter = $ff0d keySpace = ' ' keyA = 'a' keyB = 'b' keyC = 'c' keyD = 'd' keyE = 'e' keyF = 'f' keyG = 'g' keyH = 'h' keyI = 'i' keyJ = 'j' keyK = 'k' keyL = 'l' keyM = 'm' keyN = 'n' keyO = 'o' keyP = 'p' keyQ = 'q' keyR = 'r' keyS = 's' keyT = 't' keyU = 'u' keyV = 'v' keyW = 'w' keyX = 'x' keyY = 'y' keyZ = 'z' |
Added freshlib/gui/Linux/mouse.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Provides unified access to standard mouse cursors. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ uses xcursor iglobal if used _Xcursors _Xcursors db 68, 152, 34, 108, 116, 40, 40, 150, 58, 52, 86 ; X standard cursor font end if getfile _Xcursors2, "%lib%/gui/Linux/__images/cursors.png" _XcursorsXY db 1, 1 ; mcArrow db 3, 8 ; mcText db 11,11 ; mcCross db 13,13 ; mcSizeH db 13,13 ; mcSizeV db 13,13 ; mcSizeUL_LR db 13,13 ; mcSizeLL_UR db 7, 11 ; mcWait db 1, 1 ; mcArrowWait db 6, 3 ; mcHand db 12, 3 ; mcDragHand db 1, 30 ; mcPencil endg uglobal if used StockCursors StockCursors rd mcCount end if endg proc InitMouseCursors .fnt __xOpenFontReq rd 2 .cc __xCreateGlyphCursorReq begin push eax ebx ecx edx stdcall xGetID, appConn, objXFont mov ecx, eax mov [.fnt.op], opOpenFont mov [.fnt.length], sizeof.__xOpenFontReq/4 + 2 mov [.fnt.fontid], ecx mov [.fnt.namelen], 6 ;'cursor' mov dword [.fnt.name], 'curs' mov dword [.fnt.name+4], 'or' lea eax, [.fnt] stdcall xSend, appConn, eax xor eax, eax dec eax mov [.cc.op], opCreateGlyphCursor mov [.cc.length], sizeof.__xCreateGlyphCursorReq/4 mov [.cc.cursorid], eax mov [.cc.src_font], ecx mov [.cc.mask_font], ecx mov [.cc.fg_red], ax mov [.cc.fg_green], ax mov [.cc.fg_blue], ax inc eax mov [.cc.bg_red], ax mov [.cc.bg_green], ax mov [.cc.bg_blue], ax mov ebx, mcCount-1 .create_cursor_loop: movzx eax, [_Xcursors+ebx] mov [.cc.src_char], ax inc ax mov [.cc.mask_char], ax stdcall xGetID, appConn, objCursor mov [StockCursors+4*ebx], eax mov [.cc.cursorid], eax lea eax, [.cc] stdcall xSend, appConn, eax dec ebx jns .create_cursor_loop ; close the font. mov [.fnt.op], opCloseFont mov [.fnt.length], sizeof.__xFreeCursorReq/4 lea eax, [.fnt] stdcall xSend, appConn, eax stdcall xFreeID, appConn, ecx pop edx ecx ebx eax return endp proc InitMouseCursors2 .cc __xCreateCursorReq .px __xCreatePixmapReq .pxm __xCreatePixmapReq .fr __xFreePixmapReq .frm __xFreePixmapReq .img dd ? begin push eax ebx ecx edx stdcall CreateImagePNG, _Xcursors2, _Xcursors2.size mov [.img], eax ; create pixmaps mov [.px.op], opCreatePixmap mov [.pxm.op], opCreatePixmap mov [.fr.op], opFreePixmap mov [.frm.op], opFreePixmap mov [.px.depth], 1 mov [.pxm.depth], 1 mov [.px.length], sizeof.__xCreatePixmapReq/4 mov [.pxm.length], sizeof.__xCreatePixmapReq/4 mov [.fr.length], sizeof.__xFreePixmapReq/4 mov [.frm.length], sizeof.__xFreePixmapReq/4 stdcall xGetID, appConn, objPixmap mov [.px.pid], eax mov [.fr.pid], eax mov [.cc.source], eax stdcall xGetID, appConn, objPixmap mov [.pxm.pid], eax mov [.frm.pid], eax mov [.cc.mask], eax mov edx, [appConn.rootID] mov [.px.drawable], edx mov [.pxm.drawable], edx mov [.px.width], 32 mov [.px.height], 32 mov [.pxm.width], 32 mov [.pxm.height], 32 lea eax, [.px] stdcall xSend, appConn, eax lea eax, [.pxm] stdcall xSend, appConn, eax xor edi, edi xor ebx, ebx .loop: ; put the image on the pixmaps. stdcall __xPutImageToBitmap, [.px.pid], [.img], edi, 0, 0, 0, 32, 32 add edi, 32 stdcall __xPutImageToBitmap, [.pxm.pid], [.img], edi, 0, 0, 0, 32, 32 add edi, 32 ; create the cursor from the pixmap. stdcall xGetID, appConn, objCursor mov [.cc.op], opCreateCursor mov [.cc.length], sizeof.__xCreateCursorReq/4 mov [.cc.cursorid], eax mov [StockCursors+4*ebx], eax mov [.cc.fg_red], $ffff mov [.cc.fg_green], $ffff mov [.cc.fg_blue], $ffff mov [.cc.bg_red], $0000 mov [.cc.bg_green], $0000 mov [.cc.bg_blue], $0000 movzx eax, [_XcursorsXY+2*ebx] movzx edx, [_XcursorsXY+2*ebx+1] mov [.cc.x], ax mov [.cc.y], dx lea eax, [.cc] stdcall xSend, appConn, eax inc ebx cmp ebx, mcCount jne .loop ; free the image stdcall DestroyImage, [.img] ; free the pixmaps lea eax, [.fr] stdcall xSend, appConn, eax lea eax, [.frm] stdcall xSend, appConn, eax stdcall xFreeID, appConn, [.fr.pid] stdcall xFreeID, appConn, [.frm.pid] pop edx ecx ebx eax return endp proc FreeMouseCursors .fc __xFreeCursorReq begin mov ebx, mcCount-1 mov [.fc.op], opFreeCursor mov [.fc.length], sizeof.__xFreeCursorReq/4 lea esi, [.fc] .free_cursor_loop: mov eax, [StockCursors+4*ebx] mov [.fc.cursor], eax stdcall xFreeID, appConn, eax stdcall xSend, appConn, esi dec ebx jns .free_cursor_loop DebugMsg "Mouse cursors destroyed." return endp body SetMouseCursor ;, .hWindow, .hCursor .attr __xChangeWindowAttributesReq dd ? begin push eax edx mov eax, [.hWindow] mov edx, [.hCursor] mov [.attr.op], opChangeWindowAttributes mov [.attr.length], sizeof.__xChangeWindowAttributesReq/4 + 1 mov [.attr.window], eax mov [.attr.mask], maskCursor mov [.attr.values], edx lea eax, [.attr] stdcall xSend, appConn, eax pop edx eax return endp body GetStockCursor ;, .index begin mov eax, [.index] cmp eax, mcCount jb @f xor eax, eax @@: mov eax, [StockCursors+4*eax] return endp body __MouseCapture ; .hwnd begin return endp body ZeroMouseMove .wrp __xWarpPointerReq begin push eax ecx edi mov ecx, sizeof.__xWarpPointerReq/4 lea edi, [.wrp] xor eax, eax rep stosd mov [.wrp.op], opWarpPointer mov [.wrp.length], sizeof.__xWarpPointerReq/4 lea edi, [.wrp] stdcall xSend, appConn, edi pop edi ecx eax return endp |
Added freshlib/gui/Linux/windows.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Window management OS interface functions. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ include "xraw.asm" struct __xCreateFreshWindowReq . __xCreateWindowReq .BrPixel dd ? ; border color .ovr_redir dd ? ; override redirect .event_mask dd ? ; event mask .colormap dd ? ; color map ID .cursor dd ? ends body _CreateWindow .create __xCreateFreshWindowReq .map __xMapWindowReq .cnt __xCreateCounterReq .gc __xCreateContextReq .change __xChangePropertyReq .prop rd 16 ; MUST be immediately after .change begin pushad mov esi, [.pWindow] ; OutputValue "_CreateWindow for TWindow: ", esi, 16, 8 ; create the window stdcall xGetID, appConn, esi mov [.create.wid], eax mov [.map.wid], eax mov [.change.wid], eax mov [.gc.drawable], eax mov [esp+4*regEAX], eax ; return value mov [.create.op], opCreateWindow mov [.map.op], opMapWindow mov [.map.length], sizeof.__xMapWindowReq/4 mov eax, [appConn.colormap] mov ecx, [appConn.visualID] mov edx, [appConn.rootID] mov [.create.colormap], eax mov [.create.visid], ecx mov [.create.parent], edx mov [.create.attr_mask], maskBorderPixel or maskOverrideRedirect or maskEventMask or maskColorMap or maskCursor mov [.create.length], sizeof.__xCreateFreshWindowReq/4 ; border mov ecx, [esi+TWindow._border] test ecx, ecx ; borderNone = 0 setz al movzx eax, al mov [.create.ovr_redir], eax and ecx, $3 mov eax, [.types+4*ecx] mov eax, [eax] mov [.prop], eax mov [.create.event_mask], maskExposure or maskFocusChange or \ maskKeyPress or maskKeyRelease or \ maskButtonPress or maskButtonRelease or \ maskEnterWindow or maskLeaveWindow or \ maskPointerMotion or maskStructureNotify or \ maskPropertyChange mov eax, [GUI.clDialogBk] mov [.create.BrPixel], eax mov eax, [esi+TWindow._x] mov ebx, [esi+TWindow._y] mov ecx, [esi+TWindow._width] mov edx, [esi+TWindow._height] mov [.create.x], ax mov [.create.y], bx mov [.create.w], cx mov [.create.h], dx stdcall GetStockCursor, [esi+TWindow._cursor] mov [.create.cursor], eax mov [.create.depth], $20 mov [.create.border], 0 mov [.create.class], InputOutput lea eax, [.create] stdcall xSend, appConn, eax ; Set _NET_WM_WINDOW_TYPE mov [.change.op], opChangeProperty mov [.change.mode], PropModeReplace mov [.change.length], 7 mov eax, [atomWindowType] ; _NET_WM_WINDOW_TYPE mov [.change.prop], eax mov [.change.type], atomATOM mov [.change.format], 32 mov [.change.datalen], 1 lea eax, [.change] stdcall xSend, appConn, eax ; Set WM_NORMAL_HINTS ; mov [.change.prop], atomWM_NORMAL_HINTS ; mov [.change.type], atomWM_SIZE_HINTS ; mov [.change.length], 3 + 6 ; mov [.change.datalen], 3 ; mov [.prop], 4 ; PProgram - program specified position ; mov eax, [esi+TWindow._x] ; mov ecx, [esi+TWindow._y] ; mov [.prop+4], eax ; mov [.prop+8], ecx ; ; lea eax, [.change] ; stdcall xSend, appConn, eax ; Set window protocols. mov eax, [atomWMProtocols] mov [.change.prop], eax mov [.change.type], atomATOM mov [.change.length], 6 + wmProtocols.count mov [.change.datalen], wmProtocols.count stdcall xReqStart, appConn lea eax, [.change] stdcall xReqSend, appConn, eax, sizeof.__xChangePropertyReq stdcall xReqSend, appConn, wmProtocols, 4*wmProtocols.count stdcall xReqEnd, appConn ; Set window caption. mov [.change.prop], atomWM_NAME mov [.change.type], atomSTRING mov [.change.format], 8 mov eax, [esi+TWindow._caption] test eax, eax jz .caption_ok stdcall StrLen, eax test eax, eax jz .caption_ok lea ecx, [eax+3] shr ecx, 2 mov [.change.datalen], eax ; in bytes lea eax, [ecx+6] mov [.change.length], ax stdcall xReqStart, appConn lea eax, [.change] stdcall xReqSend, appConn, eax, sizeof.__xChangePropertyReq shl ecx, 2 stdcall StrPtr, [esi+TWindow._caption] stdcall xReqSend, appConn, eax, ecx stdcall xReqEnd, appConn .caption_ok: ; set window class cmp [applicationClass], 0 je .class_ok mov [.change.mode], PropModeAppend mov [.change.prop], atomWM_CLASS stdcall StrLen, [applicationClass] inc eax lea ecx, [eax+3] shr ecx, 2 mov [.change.datalen], eax ; in bytes lea eax, [ecx+6] mov [.change.length], ax stdcall xReqStart, appConn lea eax, [.change] stdcall xReqSend, appConn, eax, sizeof.__xChangePropertyReq shl ecx, 2 jz .class_ok1 stdcall StrPtr, [applicationClass] stdcall xReqSend, appConn, eax, ecx .class_ok1: stdcall xReqEnd, appConn stdcall xReqStart, appConn lea eax, [.change] stdcall xReqSend, appConn, eax, sizeof.__xChangePropertyReq stdcall StrPtr, [applicationClass] stdcall xReqSend, appConn, eax, ecx stdcall xReqEnd, appConn .class_ok: ; Set window icons mov edx, [esi+TWindow._winicons] test edx, edx jz .icons_ok mov ecx, [edx+TArray.count] .loop: dec ecx js .icons_ok stdcall _AddWindowIcon, [.change.wid], [edx+TArray.array + 4*ecx] jmp .loop .icons_ok: ; create graphic context mov [.gc.op], opCreateGC mov [.gc.length], sizeof.__xCreateContextReq/4 stdcall xGetID, appConn, objContext mov [.gc.gcID], eax mov [esi+TWindow.context], eax mov [.gc.value_mask], 0 ; DebugMsg "Graphic context is about to be created." lea eax, [.gc] stdcall xSend, appConn, eax ; DebugMsg "Graphic context created." ; create sync counter mov eax, [appConn.exSync.OpCode] mov [.cnt.op], al mov [.cnt.minor], opCreateCounter mov [.cnt.length], sizeof.__xCreateCounterReq/4 stdcall xGetID, appConn, objCounter mov [.cnt.counterID], eax mov [esi+TWindow.sync_counter], eax mov [.prop], eax xor eax, eax mov [.cnt.valueHi], eax mov [.cnt.valueLo], eax lea eax, [.cnt] stdcall xSend, appConn, eax ; set property _NET_WM_SYNC_REQUEST_COUNTER mov eax, [atomWMSyncCounter] mov [.change.mode], PropModeReplace mov [.change.prop], eax mov [.change.type], atomCARDINAL mov [.change.format], 32 mov [.change.datalen], 1 mov [.change.length], 7 lea eax, [.change] stdcall xSend, appConn, eax ; Set transient-for if the owner is set. mov ebx, [esi+TWindow.__owner] test ebx, ebx jz .no_owner istype ebx, TWindow jne .no_owner mov eax, [ebx+TWindow.handle] test eax, eax jz .no_owner mov [.prop], eax mov [.change.prop], atomWM_TRANSIENT_FOR mov [.change.type], atomWINDOW mov [.change.length], 7 mov [.change.datalen], 1 lea eax, [.change] stdcall xSend, appConn, eax .no_owner: ; map the window at the end. lea eax, [.map] stdcall xSend, appConn, eax popad return .types dd atomWindowTypePopupMenu, atomWindowTypeNormal, atomWindowTypeDialog, atomWindowTypeToolbar endp ;_________________________________________________________________________________________ body _MoveWindow .conf __xConfigureWindowReq .params rd 4 begin pushad mov esi, [.pWindow] mov eax, [esi+TWindow.handle] test eax, eax jz .error mov [.conf.op], opConfigureRequest mov [.conf.length], 3+2 mov [.conf.window], eax mov [.conf.value_mask], cwmX or cwmY mov ecx, [esi+TWindow._x] mov edx, [esi+TWindow._y] mov [.conf.params], ecx mov [.conf.params+4], edx lea eax, [.conf] stdcall xSend, appConn, eax clc popad return .error: stc popad return endp body _ResizeWindow .conf __xConfigureWindowReq .params rd 4 begin pushad mov esi, [.pWindow] mov eax, [esi+TWindow.handle] test eax, eax jz .error mov [.conf.op], opConfigureRequest mov [.conf.length], 3+2 mov [.conf.window], eax mov [.conf.value_mask], cwmWidth or cwmHeight mov ecx, [esi+TWindow._width] mov edx, [esi+TWindow._height] mov [.conf.params], ecx mov [.conf.params+4], edx lea eax, [.conf] stdcall xSend, appConn, eax clc popad return .error: stc popad return endp ;_________________________________________________________________________________________ body _DestroyWindow .req __xDestroyWindowReq .gc __xFreeContextReq .cnt __xDestroyCounterReq begin push eax ecx edx mov [.req.op], opDestroyWindow mov [.req.length], 2 mov edx, [.hwnd] mov [.req.wid], edx lea eax, [.req] stdcall xSend, appConn, eax stdcall xFreeID, appConn, edx ; returns the previous object pointer. mov edx, eax xor eax, eax xchg eax, [edx+TWindow.sync_counter] test eax, eax jz .counter_ok mov [.cnt.counterID], eax stdcall xFreeID, appConn, eax mov eax, [appConn.exSync.OpCode] mov [.cnt.op], al mov [.cnt.minor], opDestroyCounter mov [.cnt.length], sizeof.__xDestroyCounterReq/4 lea eax, [.cnt] stdcall xSend, appConn, eax .counter_ok: xor eax, eax xchg eax, [edx+TWindow.context] test eax, eax jz .finish mov [.gc.op], opFreeGC mov [.gc.length], sizeof.__xFreeContextReq/4 mov [.gc.gcID], eax stdcall xFreeID, appConn, eax lea eax, [.gc] stdcall xSend, appConn, eax .finish: pop edx ecx eax return endp ;_________________________________________________________________________________________ ;body _RefreshWindowRect ;.exp __xSendEventReq ;.ev evExpose ;begin ; push eax ecx edx ; ; mov eax, [.x] ; mov ecx, [.y] ; mov [.ev.x], ax ; mov [.ev.y], cx ; ; mov [.ev.event], Expose ; ; mov eax, [.width] ; mov ecx, [.height] ; mov [.ev.width], ax ; mov [.ev.height], cx ; ; mov eax, [.hwnd] ; mov [.ev.window], eax ; mov [.exp.dest], eax ; ; xor eax, eax ; mov [.ev.count], ax ; ; mov [.exp.op], opSendEvent ; mov [.exp.propagate], 0 ; mov [.exp.length], (sizeof.__xSendEventReq + sizeof.evExpose)/4 ; mov [.exp.event_mask], 0 ; ; lea ecx, [.exp] ; stdcall xSend, appConn, ecx ; ; pop edx ecx eax ; return ;endp body _RefreshWindowRect .clr __xClearAreaReq begin push eax ecx edx mov eax, [.x] mov ecx, [.y] mov [.clr.x], ax mov [.clr.y], cx mov [.clr.op], opClearArea mov [.clr.exposures], TRUE mov [.clr.length], sizeof.__xClearAreaReq/4 mov eax, [.width] mov ecx, [.height] mov [.clr.width], ax mov [.clr.height], cx mov eax, [.hwnd] mov [.clr.window], eax lea ecx, [.clr] stdcall xSend, appConn, ecx pop edx ecx eax return endp ;_________________________________________________________________________________________ body _SetWindowTextUtf8 .prop __xChangePropertyReq begin push eax ebx ecx edx mov edx, [.hString] test edx, edx jz .finish mov eax, [.hwnd] mov ecx, [atomWindowName] mov ebx, [atomStringUtf8] mov [.prop.op], opChangeProperty mov [.prop.mode], PropModeReplace mov [.prop.length], sizeof.__xChangePropertyReq/4 ; the name length addred below. mov [.prop.wid], eax mov [.prop.prop], ecx mov [.prop.type], ebx mov [.prop.format], 8 stdcall StrLen, edx mov [.prop.datalen], eax add eax, 3 shr eax, 2 ; in dwords add [.prop.length], ax lea ecx, [4*eax] stdcall xReqStart, appConn lea eax, [.prop] stdcall xReqSend, appConn, eax, sizeof.__xChangePropertyReq stdcall StrPtr, edx stdcall xReqSend, appConn, eax, ecx stdcall xReqEnd, appConn .finish: pop edx ecx ebx eax return endp ;_________________________________________________________________________________________ body _SetModalTowards .prop __xChangePropertyReq rd 2 begin push eax ecx edx mov [.prop.op], opChangeProperty mov [.prop.mode], PropModeReplace mov [.prop.length], sizeof.__xChangePropertyReq/4 + 1 mov eax, [.hwnd] mov edx, [.hwndParent] mov [.prop.wid], eax mov [.prop.prop], atomWM_TRANSIENT_FOR mov [.prop.type], atomWINDOW mov [.prop.format], 32 mov [.prop.datalen], 1 mov [.prop.data], edx lea ebx, [.prop] stdcall xSend, appConn, ebx ; With this property the modal windows are displayed as a separate window ; in the window manager which is not very good ; mov [.prop.mode], PropModeAppend mov eax, [atomState] mov ecx, [atomStateModal] mov [.prop.prop], eax mov [.prop.type], atomATOM mov [.prop.data], ecx stdcall xSend, appConn, ebx mov ecx, [atomStateSkipTaskbar] mov [.prop.data], ecx stdcall xSend, appConn, ebx mov ecx, [atomStateSkipPager] mov [.prop.data], ecx stdcall xSend, appConn, ebx pop edx ecx eax return endp ;_________________________________________________________________________________________ body _FinalizeModal begin return endp ;_________________________________________________________________________________________ ; does not accepts 0 for .hwnd body _SetFocus .focus __xSetInputFocus begin push eax mov eax, [.hwnd] test eax, eax jz .finish mov [.focus.op], opSetInputFocus mov [.focus.revert_to], 2 ; 0 = None, 1 = PointerRoot, 2 = Parent mov [.focus.length], 3 mov [.focus.wid], eax mov [.focus.timestamp], 0 lea eax, [.focus] stdcall xSend, appConn, eax .finish: pop eax return endp ;_________________________________________________________________________________________ body _SetWindowState .req __xSendEventReq .msg evClientMessage begin pushad mov esi, [.pWindow] mov [.req.op], opSendEvent mov [.req.propagate], 0 mov [.req.length], (sizeof.__xSendEventReq + sizeof.evClientMessage)/4 mov eax, [appConn.rootID] mov [.req.dest], eax mov [.req.event_mask], maskSubstructureNotify mov eax, [esi+TWindow.handle] mov edx, [atomState] test eax, eax jz .error mov [.msg.event], ClientMessage mov [.msg.format], 32 mov [.msg.seq], 0 mov [.msg.window], eax mov [.msg.type], edx mov eax, [atomStateMaximizedVert] mov ebx, [atomStateMaximizedHorz] xor edx, edx xor ecx, ecx inc ecx ; 1 == add state test [esi+TWindow._window_state], wstMaximizedVert or wstMaximizedHorz cmovz ecx, edx ; 0 == remove mov [.msg.data], ecx ; operation add or remove mov [.msg.data+4], eax mov [.msg.data+8], ebx mov [.msg.data+12], edx mov [.msg.data+16], edx lea eax, [.req] stdcall xSend, appConn, eax mov eax, [atomStateHidden] xor ecx, ecx inc ecx ; 1 == add state test [esi+TWindow._window_state], wstMinimized cmovz ecx, edx ; 0 == remove mov [.msg.data], ecx ; operation add or remove mov [.msg.data+4], eax mov [.msg.data+8], edx lea eax, [.req] stdcall xSend, appConn, eax .finish: clc popad return .error: stc popad return endp body _GetScreenSize begin mov eax, [appConn.size_x_px] mov ebx, [appConn.size_y_px] return endp ;_________________________________________________________________________________________ proc _AddWindowIcon, .wID, .pImage .change __xChangePropertyReq begin pushad mov eax, [.wID] mov ebx, [atomIcon] mov esi, [.pImage] mov [.change.op], opChangeProperty mov [.change.mode], PropModePrepend mov [.change.wid], eax mov [.change.prop], ebx mov [.change.type], atomCARDINAL mov [.change.format], 32 mov ecx, [esi+TImage.width] imul ecx, [esi+TImage.height] add ecx, 2 ; width and height mov [.change.datalen], ecx ; in dwords. add ecx, 6 mov [.change.length], cx stdcall xReqStart, appConn lea eax, [.change] stdcall xReqSend, appConn, eax, sizeof.__xChangePropertyReq lea eax, [esi+TImage.width] stdcall xReqSend, appConn, eax, 4 ; width lea eax, [esi+TImage.height] stdcall xReqSend, appConn, eax, 4 ; width mov ecx, [esi+TImage.width] imul ecx, [esi+TImage.height] shl ecx, 2 stdcall xReqSend, appConn, [esi+TImage.pPixels], ecx stdcall xReqEnd, appConn popad return endp |
Added freshlib/gui/Linux/xraw.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Main procedure of GUI application library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Organize the main message/event loop needed by every GUI engine. ;_________________________________________________________________________________________ module "xraw library" xPath text "/tmp/.X11-unix/X" xBasePort = 6000 struct xConnection .socket dd ? .host dd ? .disp dd ? .fRemote dd ? .id_base dd ? .id_mask dd ? .min_keycode dd ? .max_keycode dd ? .screenID dd ? .rootID dd ? .visualID dd ? .colormap dd ? .id_list dd ? .size_x_px dd ? .size_y_px dd ? .wait_timeout dd ? .Sequence dd ? .pFCallback dd ? .pLCallback dd ? .exBig xExtension .exSync xExtension .exShm xExtension .exKbd xExtension .exFixes xExtension .mutex_rd TMutex .mutex_wr TMutex .pKeymap dd ? ; pointer to last __xXkbGetMapRep replay + keycode index ahead. ends struct xCallback .p_next dd ? .sequence dd ? .proc dd ? .lparam dd ? ends iglobal qeBigRequests xQueryExtension "BIG-REQUESTS" qeSync xQueryExtension "SYNC" qeMitShm xQueryExtension "MIT-SHM" qeKeyboard xQueryExtension "XKEYBOARD" qeFixes xQueryExtension "XFIXES" endg WAIT_FOR_XREQUEST_TIMEOUT = 100 ; 100ms for now. interface xCallbackProc, .pReply, .lparam ; Sends fully prepared request to the server. proc xSend, .pConnection, .pRequest begin pushad mov edi, [.pConnection] mov esi, [.pRequest] stdcall xReqStart, edi movzx ecx, [esi+xRequest.length] test ecx, ecx cmovz ecx, [esi+xBigRequest.biglen] lea ecx, [4*ecx] .send_loop: stdcall SocketSend, [edi+xConnection.socket], esi, ecx, 0 jc .finish ; Some error processing? add esi, eax sub ecx, eax jnz .send_loop .finish: stdcall xReqEnd, edi popad return endp proc xSendWithCallback, .pConnection, .pRequest, .ReplyCallback, .lparam begin pushad mov edi, [.pConnection] mov esi, [.pRequest] stdcall xReqStart, edi movzx ecx, [esi+xRequest.length] test ecx, ecx cmovz ecx, [esi+xBigRequest.biglen] lea ecx, [4*ecx] .send_loop: stdcall SocketSend, [edi+xConnection.socket], esi, ecx, 0 jc .finish ; Some error processing? add esi, eax sub ecx, eax jnz .send_loop .finish: stdcall xReqEndCallback, edi, [.ReplyCallback], [.lparam] popad return endp ; Receives one reply, error ot event from the server. proc xRecv, .pConnection, .fBlocking begin pushad mov esi, [.pConnection] lea eax, [esi+xConnection.mutex_rd] stdcall WaitForMutex, eax, [esi+xConnection.wait_timeout] jc .timeout stdcall GetMem, sizeof.xAnyReply jc .error_mem mov edi, eax mov ebx, edi mov ecx, sizeof.xResponse mov eax, MSG_WAITALL cmp [.fBlocking], 0 jne .read_loop mov eax, MSG_DONTWAIT .read_loop: stdcall SocketReceive, [esi+xConnection.socket], ebx, ecx, eax jc .error add ebx, eax sub ecx, eax mov eax, MSG_WAITALL ; if the read is started, wait for the whole response. jnz .read_loop cmp byte [edi+xResponse.code], rspReply jne .all_received ; process a reply here mov ecx, [edi+xAnyReply.length] shl ecx, 2 jz .all_received lea eax, [ecx+sizeof.xResponse] stdcall ResizeMem, edi, eax mov edi, eax lea ebx, [edi+sizeof.xResponse] .read_data_loop: stdcall SocketReceive, [esi+xConnection.socket], ebx, ecx, MSG_WAITALL jc .error add ebx, eax sub ecx, eax jnz .read_data_loop .all_received: clc .finish: mov [esp+4*regEAX], edi lea eax, [esi+xConnection.mutex_rd] stdcall MutexRelease, eax popad return .error: stdcall FreeMem, edi .error_mem: xor edi, edi stc jmp .finish .timeout: xor edi, edi clc mov [esp+4*regEAX], edi popad return endp ; Starts a request that can be sent by several writes to the socket. proc xReqStart, .pConnection begin push eax mov eax, [.pConnection] push [eax+xConnection.wait_timeout] lea eax, [eax+xConnection.mutex_wr] stdcall WaitForMutex, eax ; timeout from the stack. pop eax return endp ; Sends a part of the request to the socket. The full request can be sent by several calls to xReqSend proc xReqSend, .pConnection, .pRequest, .length begin push eax mov eax, [.pConnection] stdcall SocketSend, [eax+xConnection.socket], [.pRequest], [.length], 0 pop eax return endp ; Ends the request without callback. proc xReqEnd, .pConnection begin push esi eax mov esi, [.pConnection] xor eax, eax inc eax lock xadd [esi+xConnection.Sequence], eax lea eax, [esi+xConnection.mutex_wr] stdcall MutexRelease, eax pop eax esi return endp ; Finalizes a request. Increments the sequence number. Unlocks the write socket, optionally registers a callback for the reply (if any). proc xReqEndCallback, .pConnection, .ReplyCallback, .lparam begin pushad mov esi, [.pConnection] xor ebx, ebx inc ebx lock xadd [esi+xConnection.Sequence], ebx inc ebx ; the sequence number of the current request. cmp [.ReplyCallback], 0 je .callback_ok stdcall GetMem, sizeof.xCallback mov edi, eax ; fill all the fields of the xCallback record. xor eax, eax mov ecx, [.ReplyCallback] mov edx, [.lparam] mov [edi+xCallback.p_next], eax mov [edi+xCallback.sequence], ebx mov [edi+xCallback.proc], ecx mov [edi+xCallback.lparam], edx ; now atomically replace the last element in the queue. mov eax, edi xchg [esi+xConnection.pLCallback], eax ; xConnection.pLCallback always contains valid pointer. ; if there is a previous last element, try to follow it to the end and attach the record as next. ; although, it is possible that in this moment, there are already other elements in the chain, because of other threads. ; i.e. in this point the [edi+xCallback.p_next] is possibly already <> 0 .loop_last: mov ecx, eax xor eax, eax lock cmpxchg [ecx+xCallback.p_next], edi jne .loop_last .callback_ok: lea eax, [esi+xConnection.mutex_wr] stdcall MutexRelease, eax popad return endp proc xOpenConnection, .pConnection, .depth .disp dd ? .name dd ? .data dd ? .req __xBeginReq .resp __xConnectServerInfo .pmore dd ? .req_map __xCreateColorMapReq .ext_resp xReply begin pushad xor eax, eax mov [.disp], eax mov [.name], eax mov [.data], eax mov [.pmore], eax mov edi, [.pConnection] lea eax, [edi+xConnection.mutex_rd] stdcall MutexCreate, 0, eax lea eax, [edi+xConnection.mutex_wr] stdcall MutexCreate, 0, eax mov [edi+xConnection.wait_timeout], WAIT_FOR_XREQUEST_TIMEOUT lea eax, [edi+xConnection.pFCallback] ; this is a little big tricky mov [edi+xConnection.pLCallback], eax ; the .pFCallback field will be threated as a xCallback element on adding new elements. stdcall __xConnectToServer, edi jc .sock_closed OutputValue "Server connected! Socket: ", [edi+xConnection.socket], 10, -1 and [edi + xConnection.Sequence], 0 stdcall __xSearchForAuth, [edi+xConnection.disp] mov [.name], eax mov [.data], edx if defined options.DebugMode & options.DebugMode test eax, eax jz @f stdcall FileWriteString, [STDERR], txt "Name string: " stdcall FileWriteString, [STDERR], [.name] stdcall FileWriteString, [STDERR], <txt 13, 10> stdcall FileWriteString, [STDERR], <txt "Data string: ", 13, 10> stdcall StrPtr, [.data] stdcall OutputMemoryByte, eax, [eax+string.len] @@: end if mov [.req.byte_order], 'l' mov [.req.ver_major], 11 mov [.req.ver_minor], 0 mov ecx, [.name] test ecx, ecx jz .cookie_ok stdcall StrLen, ecx mov ecx, eax .cookie_ok: mov edx, [.data] test edx, edx jz .data_ok stdcall StrLen, edx mov edx, eax .data_ok: mov [.req.auth_proto_len], cx mov [.req.auth_data_len], dx lea eax, [.req] stdcall SocketSend, [edi+xConnection.socket], eax, sizeof.__xBeginReq, 0 jc .error_close_sock test ecx, ecx jz .cookie_sent add ecx, 3 and ecx, $fffffffc stdcall StrPtr, [.name] stdcall SocketSend, [edi+xConnection.socket], eax, ecx, 0 ; the string always can be aligned to dword jc .error_close_sock .cookie_sent: test edx, edx jz .data_sent add edx, 3 and edx, $fffffffc stdcall StrPtr, [.data] stdcall SocketSend, [edi+xConnection.socket], eax, edx, 0 jc .error_close_sock .data_sent: DebugMsg "Start request sent!" lea eax, [.resp] stdcall SocketReceive, [edi+xConnection.socket], eax, sizeof.__xConnectServerInfo, MSG_WAITALL jc .error_close_sock cmp eax, sizeof.__xConnectServerInfo jb .error_close_sock cmp [.resp.resp], 1 jne .connection_failed DebugMsg "Response OK!" movzx ecx, [.resp.data_length] shl ecx, 2 stdcall GetMem, ecx mov [.pmore], eax mov esi, eax stdcall SocketReceive, [edi+xConnection.socket], esi, ecx, MSG_WAITALL jc .error_close_sock cmp eax, ecx jne .error_close_sock DebugMsg "Additional info received!" mov eax, [esi+__xConnectAdditionalInfo.res_id_base] mov edx, [esi+__xConnectAdditionalInfo.res_id_mask] mov [edi+xConnection.id_base], eax mov [edi+xConnection.id_mask], edx movzx eax, [esi+__xConnectAdditionalInfo.min_keycode] movzx edx, [esi+__xConnectAdditionalInfo.max_keycode] mov [edi+xConnection.min_keycode], eax mov [edi+xConnection.max_keycode], edx lea edx, [esi+__xConnectAdditionalInfo.stream_data] movzx eax, [esi+__xConnectAdditionalInfo.len_vendor] add eax, 3 and eax, $fffffffc add edx, eax ; skip the vendor string. movzx eax, [esi+__xConnectAdditionalInfo.format_num] lea edx, [edx+8*eax] ; the start of the screens list. movzx ecx, [esi+__xConnectAdditionalInfo.screen_num] .screen_loop: mov eax, [edx + __xscreen.root_window] mov [edi+xConnection.rootID], eax movzx eax, [edx+__xscreen.width_px] mov [edi+xConnection.size_x_px], eax movzx eax, [edx+__xscreen.height_px] mov [edi+xConnection.size_y_px], eax mov ch, [edx + __xscreen.num_depths] lea edx, [edx + __xscreen.depths] .depth_loop: movzx eax, [edx + __xdepth.depth] cmp eax, [.depth] je .depth_found movzx eax, [edx + __xdepth.num_visual] lea eax, [3*eax] lea edx, [edx+8*eax+sizeof.__xdepth] ; on the next depth. .next_depth: dec ch jnz .depth_loop dec cl jnz .screen_loop .depth_not_found: jmp .error_close_sock .depth_found: DebugMsg "Depth found!" movzx eax, [edx + __xdepth.num_visual] lea edx, [edx + __xdepth.visual_types] .vis_loop: cmp [edx + __xvisualtype.class], TrueColor je .visual_found add edx, sizeof.__xvisualtype dec eax jnz .vis_loop jmp .next_depth .visual_found: DebugMsg "Visual found!" mov eax, [edx + __xvisualtype.id] mov [edi+xConnection.visualID], eax ; Query all needed extensions. stdcall xSend, edi, qeBigRequests lea esi, [.ext_resp] stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL cmp [esi+xRespQueryExt.reply], rspReply jne .big_requests_ok lea eax, [edi+xConnection.exBig] stdcall __CopyExtensionParameters, eax, esi ; enable Big Requests extension. mov eax, [edi+xConnection.exBig.OpCode] mov [esi+xRequest.op], al mov [esi+xRequest.minor], 0 mov [esi+xRequest.length], 1 stdcall xSend, edi, esi stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL OutputValue "Big requests extension OpCode: ", [edi+xConnection.exBig.OpCode], 10, -1 .big_requests_ok: stdcall xSend, edi, qeSync stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL cmp [esi+xRespQueryExt.reply], rspReply jne .sync_ok lea eax, [edi+xConnection.exSync] stdcall __CopyExtensionParameters, eax, esi mov eax, [edi+xConnection.exSync.OpCode] mov [esi+xRequest.op], al mov [esi+xRequest.minor], 0 mov [esi+xRequest.length], 2 mov [esi+xRequest.data], 3 mov [esi+xRequest.data+1], 1 stdcall xSend, edi, esi stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL OutputValue "Sync extension OpCode: ", [edi+xConnection.exSync.OpCode], 10, -1 .sync_ok: ; MIT-SHM extension. Check it only if not remote connection cmp [edi+xConnection.fRemote], 0 jne .shm_ok stdcall xSend, edi, qeMitShm stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL cmp [esi+xRespQueryExt.reply], rspReply jne .shm_ok lea eax, [edi+xConnection.exShm] stdcall __CopyExtensionParameters, eax, esi ; ShmQueryVersion mov eax, [edi+xConnection.exShm.OpCode] mov [esi+xRequest.op], al mov [esi+xRequest.minor], opShmEnable mov [esi+xRequest.length], 1 stdcall xSend, edi, esi stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL OutputValue "MIT-SHM extension OpCode: ", [edi+xConnection.exShm.OpCode], 10, -1 .shm_ok: stdcall xSend, edi, qeKeyboard stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL cmp [esi+xRespQueryExt.reply], rspReply jne .xkeyboard_ok lea eax, [edi+xConnection.exKbd] stdcall __CopyExtensionParameters, eax, esi mov eax, [edi+xConnection.exKbd.OpCode] mov [esi+xRequest.op], al mov [esi+xRequest.minor], opXkbUseExtension mov [esi+xRequest.length], 2 mov word [esi+xRequest.data], 1 ; major version mov word [esi+xRequest.data+2], 0 ; minor version stdcall xSend, edi, esi stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL OutputValue "XKEYBOARD extension OpCode: ", [edi+xConnection.exKbd.OpCode], 10, -1 OutputValue "XKEYBOARD extension Event: ", [edi+xConnection.exKbd.FirstEvent], 10, -1 OutputMemoryByte esi, 32 .xkeyboard_ok: ; XFIXES extension stdcall xSend, edi, qeFixes stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL cmp [esi+xRespQueryExt.reply], rspReply jne .xfixes_ok lea eax, [edi+xConnection.exFixes] stdcall __CopyExtensionParameters, eax, esi mov eax, [edi+xConnection.exFixes.OpCode] mov [esi+__xfixQueryVersionReq.op], al mov [esi+__xfixQueryVersionReq.minor], opfixQueryVersion mov [esi+__xfixQueryVersionReq.length], sizeof.__xfixQueryVersionReq/4 mov [esi+__xfixQueryVersionReq.client_major_version], 5 ; major version mov [esi+__xfixQueryVersionReq.client_minor_version], 0 ; minor version stdcall xSend, edi, esi stdcall SocketReceive, [edi+xConnection.socket], esi, 32, MSG_WAITALL OutputValue "XFIXES extension OpCode: ", [edi+xConnection.exFixes.OpCode], 10, -1 OutputValue "XFIXES extension Event: ", [edi+xConnection.exFixes.FirstEvent], 10, -1 OutputMemoryByte esi, 32 .xfixes_ok: ; create color map. mov [.req_map.op], opCreateColorMap mov [.req_map.alloc], AllocNone mov [.req_map.length], sizeof.__xCreateColorMapReq/4 stdcall xGetID, edi, objColorMap mov [.req_map.map_id], eax mov [edi+xConnection.colormap], eax mov eax, [edi+xConnection.rootID] mov edx, [edi+xConnection.visualID] mov [.req_map.win_id], eax mov [.req_map.vis_id], edx lea ebx, [.req_map] stdcall xSend, edi, ebx clc ; finalize and release the mutexes. .finish: pushf lea eax, [edi+xConnection.mutex_rd] stdcall MutexRelease, eax lea eax, [edi+xConnection.mutex_wr] stdcall MutexRelease, eax stdcall StrDel, [.name] stdcall StrDel, [.data] stdcall FreeMem, [.pmore] popf popad return .connection_failed: .error_close_sock: xor eax, eax xchg eax, [edi+xConnection.socket] test eax, eax jz .sock_closed stdcall SocketClose, eax .sock_closed: lea eax, [edi+xConnection.mutex_rd] stdcall MutexDestroy, eax lea eax, [edi+xConnection.mutex_wr] stdcall MutexDestroy, eax stdcall StrDel, [.name] stdcall StrDel, [.data] stdcall FreeMem, [.pmore] stc popad return endp proc xCloseConnection, .pConnection begin DebugMsg "Close connection!" push ecx edx mov edx, [.pConnection] xor ecx, ecx xchg ecx, [edx+xConnection.socket] test ecx, ecx jz .sock_ok stdcall SocketShutDown, ecx stdcall SocketClose, ecx .sock_ok: stdcall StrDel, [edx+xConnection.host] xor ecx, ecx xchg ecx, [edx+xConnection.id_list] stdcall FreeMem, ecx lea ecx, [edx+xConnection.mutex_rd] stdcall MutexDestroy, ecx lea ecx, [edx+xConnection.mutex_wr] stdcall MutexDestroy, ecx pop edx ecx return endp proc __CopyExtensionParameters, .extension, .server_resp begin pushad mov esi, [.server_resp] mov edi, [.extension] movzx eax, [esi+xRespQueryExt.present] movzx ebx, [esi+xRespQueryExt.OpCode] movzx ecx, [esi+xRespQueryExt.first_event] movzx edx, [esi+xRespQueryExt.first_error] mov [edi+xExtension.Active], eax mov [edi+xExtension.OpCode], ebx mov [edi+xExtension.FirstEvent], ecx mov [edi+xExtension.FirstError], edx popad return endp proc __xConnectToServer, .pConnection .addr: rb sizeof.TSocketAddressUn begin pushad xor eax, eax lea edi, [.addr] mov ecx, sizeof.TSocketAddressUn rep stosb mov edi, [.pConnection] mov [edi+xConnection.host], eax mov [edi+xConnection.disp], eax mov [edi+xConnection.fRemote], eax stdcall GetEnvVariable, txt "DISPLAY" jnc .addr_ok stdcall StrDupMem, txt ":0.0" .addr_ok: mov ebx, eax stdcall StrPtr, eax mov esi, eax xor ecx, ecx .loop1: mov al, [esi+ecx] test al, al jz .host_fin cmp al, ':' je .host_found inc ecx jmp .loop1 .host_found: test ecx, ecx jz .host_ok stdcall StrNew mov [edi+xConnection.host], eax stdcall StrCatMem, eax, esi, ecx .host_ok: lea esi, [esi+ecx+1] .host_fin: xor ecx, ecx .loop2: mov al, [esi+ecx] test al, al jz .disp_found cmp al, '.' je .disp_found inc ecx jmp .loop2 .disp_found: test ecx, ecx jz .disp_ok stdcall StrNew push eax stdcall StrCatMem, eax, esi, ecx stdcall StrToNumEx, eax stdcall StrDel ; from the stack mov [edi+xConnection.disp], eax .disp_ok: stdcall StrDel, ebx cmp [edi+xConnection.host], 0 je .unix_sock stdcall StrPos, [edi+xConnection.host], txt "/unix" test eax, eax jnz .unix_sock inc [edi+xConnection.fRemote] mov [.addr + TSocketAddressIn.saFamily], AF_INET6 stdcall ResolveDomainIP6, [edi+xConnection.host] jc .finish mov [.addr + TSocketAddressIn6.saAddress.addr32], eax mov [.addr + TSocketAddressIn6.saAddress.addr32+4], ebx mov [.addr + TSocketAddressIn6.saAddress.addr32+8], ecx mov [.addr + TSocketAddressIn6.saAddress.addr32+12], edx mov eax, [edi+xConnection.disp] add eax, xBasePort xchg al, ah mov [.addr + TSocketAddressIn6.saPort], ax jmp .connect .unix_sock: mov [.addr + TSocketAddressUn.saFamily], AF_UNIX stdcall StrDupMem, xPath mov ebx, eax stdcall NumToStr, [edi+xConnection.disp], ntsDec or ntsUnsigned stdcall StrCat, ebx, eax stdcall StrDel, eax push edi lea edi, [.addr + TSocketAddressUn.saPath] stdcall StrPtr, ebx mov ecx, [eax+string.len] mov esi, eax inc ecx rep movsb stdcall StrDel, ebx pop edi .connect: movzx eax, [.addr + TSocketAddress.saFamily] stdcall SocketCreate, eax, SOCK_STREAM, 0 jc .finish mov [edi+xConnection.socket], eax lea ecx, [.addr] stdcall SocketConnect, [edi+xConnection.socket], ecx jc .error_close_sock .finish: popad return .error_close_sock: stdcall SocketClose, ebx stc jmp .finish endp xAuth text "/.Xauthority" ; returns magic cookie in eax and edx proc __xSearchForAuth, .disp .xauth dd ? .name dd ? .data dd ? begin pushad xor eax, eax mov [.xauth], eax mov [.name], eax mov [.data], eax stdcall GetEnvVariable, txt "XAUTHORITY" jnc .auth_file stdcall GetEnvVariable, txt "HOME" jc .end_of_file stdcall StrCatMem, eax, xAuth, xAuth.length .auth_file: push eax stdcall LoadBinaryFile, eax stdcall StrDel ; from the stack jc .end_of_file mov [.xauth], eax mov esi, eax lea ebx, [esi+ecx] ; the end of the file. .loop: xor eax, eax lodsw cmp esi, ebx jae .end_of_file lodsw xchg al, ah ; host string length. add esi, eax ; skip the host string. cmp esi, ebx jae .end_of_file lodsw xchg al, ah ; display number length mov edx, ebx sub edx, esi cmp eax, edx jae .end_of_file mov edx, eax stdcall StrNew stdcall StrCatMem, eax, esi, edx push eax stdcall StrToNumEx, eax stdcall StrDel ; from the stack add esi, edx cmp esi, ebx jae .end_of_file cmp eax, [.disp] je .auth_found ; skip the name and the data xor eax, eax lodsw xchg al, ah ; the length of the name add esi, eax cmp esi, ebx jae .end_of_file lodsw xchg al, ah add esi, eax cmp esi, ebx jb .loop .end_of_file: stdcall FreeMem, [.xauth] stdcall StrDel, [.name] popad xor eax, eax xor edx, edx return .auth_found: lodsw xchg al, ah movzx edx, ax mov eax, ebx sub eax, esi cmp edx, eax ja .end_of_file stdcall StrNew mov [.name], eax stdcall StrCatMem, eax, esi, edx add esi, edx cmp esi, ebx jae .end_of_file lodsw xchg al, ah movzx edx, ax mov eax, ebx sub eax, esi cmp edx, eax ja .end_of_file stdcall StrNew mov [.data], eax stdcall StrCatMem, eax, esi, edx stdcall FreeMem, [.xauth] popad clc mov eax, [.name] mov edx, [.data] return endp ID_SEARCH_ONE_ATTEMPT = 100 proc xGetID, .conn, .obj begin pushad mov edi, [.conn] lea eax, [edi+xConnection.mutex_wr] stdcall WaitForMutex, eax, -1 mov edx, [edi+xConnection.id_list] test edx, edx jnz @f stdcall CreateArray, 4 mov edx, eax @@: ; Search for first empty place. mov ecx, ID_SEARCH_ONE_ATTEMPT ; search only limited count of items cmp ecx, [edx+TArray.count] cmova ecx, [edx+TArray.count] mov esi,[edx+TArray.lparam] xor eax,eax .search: dec ecx js .notfound inc esi cmp esi, [edx+TArray.count] cmovae esi, eax cmp [edx+TArray.array+4*esi], eax je .found jmp .search .notfound: mov [edx+TArray.lparam], esi ; store the place where the search ends this time. mov esi, [edx+TArray.count] stdcall AddArrayItems, edx, 1 .found: mov eax, [.obj] mov [edx+TArray.array+4*esi], eax and esi, [edi+xConnection.id_mask] or esi, [edi+xConnection.id_base] mov [edi+xConnection.id_list], edx lea eax, [edi+xConnection.mutex_wr] stdcall MutexRelease, eax ; OutputValue "ID allocated: ", esi, 16,8 mov [esp+4*regEAX], esi popad return endp ; try not to use this procedure, because if causes the ID space to always increase and makes the ID recycling not effective. proc xGetNewID, .conn, .obj begin pushad mov edi, [.conn] lea eax, [edi+xConnection.mutex_wr] stdcall WaitForMutex, eax, -1 mov edx, [edi+xConnection.id_list] test edx, edx jnz @f stdcall CreateArray, 4 mov edx, eax @@: mov esi, [edx+TArray.count] stdcall AddArrayItems, edx, 1 mov eax, [.obj] mov [edx+TArray.array+4*esi], eax and esi, [edi+xConnection.id_mask] or esi, [edi+xConnection.id_base] mov [edi+xConnection.id_list], edx lea eax, [edi+xConnection.mutex_wr] stdcall MutexRelease, eax mov [esp+4*regEAX], esi popad return endp proc xGetObj, .conn, .id begin push edx esi mov esi, [.conn] mov eax, [esi+xConnection.id_base] mov edx, [esi+xConnection.id_list] cmp [.id], eax jb .error not eax and eax, [.id] cmp eax, [esi+xConnection.id_mask] ja .error cmp eax, [edx+TArray.count] jae .error mov eax, [edx+TArray.array+4*eax] test eax, eax jz .error clc pop esi edx return .error: stc pop esi edx return endp proc xFreeID, .conn, .id begin pushad mov esi, [.conn] lea edx, [esi+xConnection.mutex_wr] stdcall WaitForMutex, edx, -1 mov ecx, [esi+xConnection.id_base] mov edx, [esi+xConnection.id_list] not ecx and ecx, [.id] ; OutputValue "ID freed: ", [.id], 16,8 cmp ecx, [esi+xConnection.id_mask] ja .error cmp ecx, [edx+TArray.count] jae .error stdcall __CleanupDeferedEvents, [.id] ; this is a kind of cross-level call (from lower level abstraction to the upper level abstraction, but we need somehow to clear the stored window IDs stored for defered processing. mov [edx+TArray.lparam], ecx xor eax, eax xchg eax, [edx+TArray.array+4*ecx] mov [esp+4*regEAX], eax clc .finish: lea edx, [esi+xConnection.mutex_wr] stdcall MutexRelease, edx popad return .error: OutputValue "Error ID free: ", [.id], 16,8 stc jmp .finish endp struct __xInternAtomReq .op db ? ; opInternAtom .ifexists db ? ; bool .length dw ? ; total length in dword = 2 + string/4 .name_len dw ? ; in chars dw ? .name: ends struct __xInternAtomResp .resp db ? db ? .sequence dw ? .length dd ? ; 0 usually .atom dd ? ; 0 == None rb 20 ends struc xAtom name { .@here = 1 if used . label . byte local ..name, ..start, ..len_all, ..len ..start db opInternAtom db 1 dw ..len_all dw ..len dw ? ..name db name ..len = $ - ..name align 4 ..len_all = ($ - ..start)/4 .size = $ - ..start end if } macro xEncoding name, filename { name#.@here = 1 if used name align 4 label name word file filename end if } proc xInternAtom, .xAtom begin stdcall xSend, appConn, [.xAtom] stdcall xRecv, appConn, TRUE push eax mov eax, [eax+__xInternAtomResp.atom] stdcall FreeMem ; from the stack if defined options.DebugMode & options.DebugMode push eax ecx stdcall Output, "Atom name: " mov eax, [.xAtom] movzx ecx, [eax+__xInternAtomReq.name_len] lea eax, [eax+__xInternAtomReq.name] stdcall OutputSz, eax, ecx pop ecx eax end if OutputValue " == #", eax, 10, -1 clc return endp proc KeysymToUnicode, .keysym, .kbdstate begin push edx mov eax, [.keysym] test [.kbdstate], maskCtrl jz .normal cmp eax, $61 jb .normal cmp eax, $7f ja .normal sub eax, $60 jmp .finish .normal: cmp eax, $ff jbe .finish ; latin1 == unicode test eax, $01000000 jz .legacy_keysym and eax, $00ffffff jmp .finish .legacy_keysym: cmp ah, $20 je .finish ; the group 20 == unicode. cmp ah, $ff jne .not_func ; ah = ff, special keys, KP, Fx, etc. xor ah, ah cmp al, ' ' jb .finish cmp al, $80 ; space jne .not_space mov eax, ' ' jmp .finish .not_space: cmp al, $90 jae .not_ctrl cmp al, $80 jb .not_possible and al, $0f jmp .finish .not_ctrl: cmp al, $a0 jb .not_possible cmp al, $be jae .not_possible and al, $7f jmp .finish .not_func: cmp ah, 13 ja .not_possible movzx edx, ah movzx eax, al dec edx mov edx, [.table+4*edx] test edx, edx jz .not_possible sub al, byte [edx] ; minimal keycode jc .not_possible cmp al, byte [edx+1] ; max offset in the table ja .not_possible movzx eax, word [edx+2+2*eax] .finish: clc pop edx return .not_possible: xor eax, eax stc pop edx return .table dd .xLatin2, .xLatin3, .xLatin4, .xKana dd .xArabic, .xCyrillic, .xGreek, 0 dd 0, .xPublish, 0, .xHebrew dd .xThai EncodingTable .xLatin2, "__encodings/keysyms1.tbl" EncodingTable .xLatin3, "__encodings/keysyms2.tbl" EncodingTable .xLatin4, "__encodings/keysyms3.tbl" EncodingTable .xKana, "__encodings/keysyms4.tbl" EncodingTable .xArabic, "__encodings/keysyms5.tbl" EncodingTable .xCyrillic, "__encodings/keysyms6.tbl" EncodingTable .xGreek, "__encodings/keysyms7.tbl" EncodingTable .xPublish, "__encodings/keysyms10.tbl" EncodingTable .xHebrew, "__encodings/keysyms12.tbl" EncodingTable .xThai, "__encodings/keysyms13.tbl" endp proc KeycodeToKeysym, .keyMap, .keycode, .kbdstate begin pushad mov esi, [.keyMap] test esi, esi jz .null mov ecx, [.kbdstate] mov edx, [.keycode] mov esi, [esi+4*edx] ; pointer to xkbKeysymMapItem test esi, esi jz .null ; OutputValue "Keyboard state: ", ecx, 2, 32 ; OutputMemoryByte esi, 8 ; movzx ebx, [esi+xkbKeysymMapItem.nSyms] ; shl ebx, 2 ; lea eax, [esi+xkbKeysymMapItem.keysyms] ; OutputMemoryByte eax, ebx xor ebx, ebx test ecx, maskCtrl or maskAlt cmovnz ecx, ebx ; if Ctrl state, zero ecx in order to get the first character from the table. jnz .getit ; compute the number of the groups. mov ax, [esi+xkbKeysymMapItem.nSyms] div [esi+xkbKeysymMapItem.width] ; al = group count. ah should be 0 mov bl, al mov eax, ecx shr eax, 13 and eax, 3 ; the group number. div bl movzx ebx, ah ; ebx - group number. cmp [esi+xkbKeysymMapItem.ktIndex+ebx], xkbOneLevelIndex je .one_level cmp [esi+xkbKeysymMapItem.ktIndex+ebx], xkbTwoLevelIndex je .two_levels cmp [esi+xkbKeysymMapItem.ktIndex+ebx], xkbKeypadIndex je .keypad ; all remaining is xkbAlphabeticIndex - (Shift cancels CapsLock) mov eax, ecx shr eax, 1 ; maskCapsLock = 2 xor ecx, eax and ecx, 1 mov eax, [.kbdstate] and eax, maskLevel3 shr eax, 6 ; 0 or 2 add ecx, eax jmp .getit ; only the first level is important. .one_level: xor ecx, ecx jmp .getit ; Only Shift modifier matters .two_levels: and ecx, maskShift jmp .getit ; Keypad (numpad) key type. (Shift cancels NumLock) .keypad: mov eax, ecx shr eax, 4 ; maskNumLock = $10 xor ecx, eax and ecx, 1 ; jmp .getit .getit: ; OutputValue "Group number: ", ebx, 10, -1 mov eax, ecx div [esi+xkbKeysymMapItem.width] movzx ecx, ah ; OutputValue "Level offset: ", ecx, 10, -1 movzx eax, [esi+xkbKeysymMapItem.width] imul ebx, eax ; group offset add ecx, ebx .get_loop: mov eax, [esi + xkbKeysymMapItem.keysyms + 4*ecx] test eax, eax jnz .char_ok sub ecx, 2 jns .get_loop .char_ok: mov [esp+4*regEAX], eax clc popad return .null: xor eax, eax mov [esp+4*regEAX], eax stc popad return endp endmodule |
Added freshlib/gui/Main.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Main procedure of GUI application library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Organize the main message/event loop needed by every GUI engine. ; This file contains only OS independent part and includes OS dependent files. ;_________________________________________________________________________________________ module "Main library" uglobal var __LastPointedWindow = ? var __ActiveForm = ? ; The form that get the focus from the OS. var __FocusedWindow = ? ; The current focused window. It should be a child of [__ActiveForm] var __MouseTarget = ? ; The control that holds the mouse capture in the moment. var __ActiveMenu = ? var __OnIdle = ? ; global idle process procedure. endg ;_________________________________________________________________________________________ ; ; Process all the events queued from the system and exits. ; Arguments: none ; Returns: CF = 1 if the termination event has been received. ;_________________________________________________________________________________________ interface ProcessSystemEvents ;_________________________________________________________________________________________ ; ; Waits for system events to arive. ; During the wait, the application ; does not use CPU resources. ;_________________________________________________________________________________________ interface WaitForSystemEvent proc Run begin .mainloop: stdcall ProcessSystemEvents jc .terminate call ProcessIdleStates .eventok: if defined Caret & (~ defined options.DebugMode.NoTimers | options.DebugMode.NoTimers = 0) stdcall __CaretTimerProc end if stdcall WaitForSystemEvent jc .eventok jmp .mainloop .terminate: DebugMsg "Terminate GUI application!" return endp proc ProcessIdleStates begin cmp [__ActiveForm], 0 je .form_ok exec [__ActiveForm], TForm:ProcessIdle .form_ok: cmp [__OnIdle], 0 je .finish stdcall [__OnIdle], 0 .finish: return endp proc ServeMenuMouseMove, .window, .x, .y, .kbdState begin cmp [__ActiveMenu], 0 jne .serve_menu clc return .serve_menu: pushad exec [.window], TWindow:ClientToScreenXY, [.x], [.y] exec [__ActiveMenu], TWindow:EventMouseMove, ecx, edx, [.kbdState] popad stc return endp proc ServeMenuButtonPress, .window, .button, .kbdState, .x, .y begin pushad cmp [__ActiveMenu], 0 jne .serve_menu .not_processed: clc popad return .serve_menu: exec [.window], TWindow:ClientToScreenXY, [.x], [.y] exec [__ActiveMenu], TWindow:EventButtonPress, [.button], [.kbdState], ecx, edx popad return endp iglobal if used tplModalActionList tplModalActionList: ObjTemplate tfParent or tfEnd, TActionList, 0 ObjTemplate tfChild, TAction, 0, Accelerator = "Esc", OnExecute = OnModalCancel ObjTemplate tfChild or tfEnd, TAction, 0, Accelerator = "Enter", OnExecute = OnModalOK end if endg proc ShowModal, .pForm, .pParent .prev dd ? begin push ebx ecx edx mov ecx, [.pParent] mov edx, [.pForm] test ecx, ecx jz .modal_parent_ok ; center the window on the parent. mov eax, [ecx+TWindow._width] mov ebx, [ecx+TWindow._height] sub eax, [edx+TWindow._width] sub ebx, [edx+TWindow._height] sar eax, 1 sar ebx, 1 add eax, [ecx+TWindow._x] add ebx, [ecx+TWindow._y] ;TODO: Min/Max coordinates range check. exec edx, TWindow:Move, eax, ebx .modal_parent_ok: set edx, TForm:Visible, TRUE test ecx, ecx jz .parent_ok2 stdcall _SetModalTowards, [edx+TForm.handle], [ecx+TWindow.handle] set ecx, TWindow:Enabled, FALSE .parent_ok2: stdcall CreateFromTemplate, tplModalActionList, 0 get eax, edx, TForm:ActionList set edx, TForm:ActionList, ebx test eax, eax jz @f destroy eax @@: set edx, TForm:ModalResult, mrNone get eax, edx, TForm:OnClose mov [.prev], eax set edx, TForm:OnClose, __ModalOnClose .modal_loop: stdcall ProcessSystemEvents jc .exit_modal get eax, edx, TForm:ModalResult test eax, eax jnz .exit_modal get eax, edx, TWindow:Visible test eax, eax jz .exit_modal cmp [__ActiveForm], 0 je .vis_ok exec [__ActiveForm], TForm:ProcessIdle .vis_ok: if defined Caret & (~ defined options.DebugMode.NoTimers | options.DebugMode.NoTimers = 0) stdcall __CaretTimerProc end if stdcall WaitForSystemEvent jmp .modal_loop .exit_modal: jecxz @f set ecx, TWindow:Enabled, TRUE @@: set edx, TForm:OnClose, [.prev] jecxz @f stdcall _FinalizeModal, [edx+TForm.handle], [ecx+TWindow.handle] @@: set edx, TForm:Visible, FALSE xor ebx, ebx xchg ebx, [edx+TForm._action_list] destroy ebx stdcall SetFocusedWindow, ecx get eax, edx, TForm:ModalResult pop edx ecx ebx return endp proc OnModalCancel as TAction.OnExecute begin push eax get eax, [.Action], TAction:Parent get eax, eax, TActionList:Form set eax, TForm:ModalResult, mrCancel pop eax return endp proc OnModalOK as TAction.OnExecute begin push eax get eax, [.Action], TAction:Parent get eax, eax, TActionList:Form set eax, TForm:ModalResult, mrOK pop eax return endp ; prevent destroy of the form from the close button or Alt+F4 proc __ModalOnClose, .self, .reason begin set [.self], TForm:ModalResult, mrCancel stc return endp proc __GetRelativeXY, .window, .x, .y begin push eax esi mov ecx, [.x] mov edx, [.y] mov esi, [.window] .loop: get eax, esi, TWindow:Parent test eax, eax jz .finish sub ecx, [esi+TWindow._x] sub edx, [esi+TWindow._y] mov esi, eax jmp .loop .finish: pop esi eax return endp proc SetFocusedWindow, .pWindow begin push eax stdcall __SetIntFocused, [.pWindow] jc .finish mov eax, [__FocusedWindow] test eax, eax jz .set_os exec eax, TWindow:GetOSWindow test eax, eax jz .set_os mov eax, [eax+TWindow.handle] .set_os: stdcall _SetFocus, eax .finish: pop eax return endp ; Only registers in __FocusedWindow already focused window. ; To be used only internally in SetFocusedWindow and the events from the OS ; for already focused by the OS windows. proc __SetIntFocused, .pWindow begin push eax edx mov edx, [.pWindow] cmp edx, [__FocusedWindow] je .ignore test edx, edx jz .setit istype edx, TWindow jne .ignore stdcall CanGetFocus, edx jz .ignore .setit: xchg edx, [__FocusedWindow] test edx, edx jz .prev_ok exec edx, TWindow:EventFocusOut .prev_ok: cmp [__FocusedWindow], 0 je .finish exec [__FocusedWindow], TWindow:EventFocusIn .finish: clc pop edx eax return .ignore: stc pop edx eax return endp proc FocusNext begin push eax edx mov eax, [__FocusedWindow] test eax, eax jz .target_ok .loop: stdcall NextLeaf, eax je .setit cmp eax, [__FocusedWindow] je .setit stdcall CanGetFocus, eax jz .loop .setit: stdcall CanGetFocus, eax jnz .target_ok xor eax, eax .target_ok: stdcall SetFocusedWindow, eax .finish: pop edx eax return endp proc FocusPrev begin push eax edx mov eax, [__FocusedWindow] test eax, eax jz .target_ok .loop: stdcall PrevLeaf, eax je .setit cmp eax, [__FocusedWindow] je .setit stdcall CanGetFocus, eax jz .loop .setit: stdcall CanGetFocus, eax jnz .target_ok xor eax, eax .target_ok: stdcall SetFocusedWindow, eax .finish: pop edx eax return endp ; Returns ZF = 1 if the window can not be focused. ; ZF = 0 if the window can be foculed. proc CanGetFocus, .window begin push eax get eax, [.window], TWindow:Visible test eax, eax jz .fin get eax, [.window], TWindow:Enabled test eax, eax jz .fin get eax, [.window], TWindow:WantFocus test eax, eax .fin: pop eax return endp iglobal if used FramesPerSecond fpsTime dd 0 fps dd 0 fpsmin dd $ffffffff fpsmax dd 0 fpscnt dd 0 end if endg fpsCount = 16 proc FramesPerSecond begin pushad inc [fpscnt] cmp [fpscnt], fpsCount jne .finish mov [fpscnt], 0 stdcall GetFineTimestamp mov ecx, eax xchg ecx, [fpsTime] test ecx, ecx jz .finish sub ecx, [fpsTime] neg ecx mov eax, fpsCount*1000000 xor edx, edx div ecx mov [fps], eax cmp eax, [fpsmin] jae @f mov [fpsmin], eax @@: cmp eax, [fpsmax] jb @f mov [fpsmax], eax @@: if defined options.DebugMode.ShowFPS & options.DebugMode.ShowFPS stdcall FileWriteString, [STDOUT], <txt ' FPS: '> stdcall NumToStr, [fps], ntsDec or ntsUnsigned push eax stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack stdcall FileWriteString, [STDOUT], <txt ', min: '> stdcall NumToStr, [fpsmin], ntsDec or ntsUnsigned push eax stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack stdcall FileWriteString, [STDOUT], <txt ', max: '> stdcall NumToStr, [fpsmax], ntsDec or ntsUnsigned push eax stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack stdcall FileWriteString, [STDOUT], <txt " ", 13> if defined options.DebugMode & options.DebugMode stdcall FileWriteString, [STDOUT], <txt 10> end if end if .finish: popad return endp include '%TargetOS%/Main.asm' endmodule |
Added freshlib/gui/ObjTemplates.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Objects template engine ; ; Target OS: Any ; ; Dependencies: objects.asm ; ; Notes: ;_________________________________________________________________________________________ module "Templates library" tfChild = 0 tfParent = 1 tfEnd = 2 struct TObjTemplate .flags dd ? ; tfParent; tfEnd. .size dd ? ; size of the instance structure. .vtable dd ? ; pointer to the virtual methods table. .paramsize dd ? .ptrVar dd ? .params: ends macro ObjTemplate flags, class, name, [idparam] { common local ..paramsize, ..prms, ..here if ~defined used.#class | defined ..here used.#class = 1 ..here = 1 end if dd flags dd sizeof.#class dd vtables.#class dd ..paramsize if ~ name eq NONE dd name else dd 0 end if ..prms: forward local ..value, ..ofs, ..valid if ~idparam eq ..valid equ FALSE match id == param, idparam \{ ..ofs dd class\#.\#id\#.#set dd ..value if defined class\#.\#id\#.#set.arg if class\#.\#id\#.#set.arg = 2 dd class\#.\#id, -1 end if if class\#.\#id\#.#set.arg = 3 dd class\#.\#id, class\#.\#id\#.#get end if else dd 0, -1 end if ..valid EQU TRUE \} match =FALSE, ..valid \{ error Invalid parameter definition in template. \} end if common dd -1 forward match id == param, idparam \{ if param eqtype 2 ..value = param else if param eqtype [2] match =[par=], param \\{ ..value = par \\} store byte $fe at ..ofs+3 else ..value db param, 0 end if end if \} common local ..here if ~(name eq NONE) & (~defined name | defined ..here) name dd ? ..here = 1 end if ..paramsize = $ - ..prms } ; returns the last created window in ebx. proc CreateFromTemplate, .ptrTemplate, .parent begin push esi mov esi, [.ptrTemplate] stdcall _DoCreateFromTemplate, [.parent] pop esi return endp proc _DoCreateFromTemplate, .parent begin push eax ecx edx edi .createloop: stdcall GetMem, [esi+TObjTemplate.size] mov ebx, eax mov edi, [esi+TObjTemplate.vtable] mov [ebx], edi exec ebx, TObject:Create, [.parent] lea ecx, [esi+TObjTemplate.params] .paramloop: cmp dword [ecx], -1 je .paramsok mov eax, [ecx] bswap eax mov edx, [ecx+4] ; value cmp al, $fe ; Is it indirect? jne @f mov edx, [edx] ; the value is an address of a variable. @@: bswap eax test eax, $00ff0000 movzx eax, ax ; not changing flags! jnz .method mov [ebx+eax], edx jmp .param_set .method: push edx ; value cmp dword [ecx+12], -1 je .get_ok push dword [ecx+12] .get_ok: cmp dword [ecx+8], 0 ; the parameter ID. <>0 if to be pushed during the method call. je .param_ok push dword [ecx+8] .param_ok: stdcall dword [edi+4*eax+8], ebx .param_set: add ecx, 16 jmp .paramloop .paramsok: mov eax, [esi+TObjTemplate.ptrVar] test eax, eax jz .var_ok mov [eax], ebx ; returned pointer/handle to the object. set ebx, TObject:ptrVar, eax .var_ok: get eax, ebx, TObject:OnCreate test eax, eax jz .gonext ; execute user OnCreate event. pushad stdcall eax, ebx popad .gonext: mov edx, [esi+TObjTemplate.flags] mov eax, sizeof.TObjTemplate add eax, [esi+TObjTemplate.paramsize] add esi, eax test edx, tfParent jz .childrenok push ebx stdcall _DoCreateFromTemplate, ebx pop ebx .childrenok: test edx, tfEnd jz .createloop .exit: pop edi edx ecx eax return endp endmodule |
Added freshlib/gui/OldTemplates.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | ; This macro aims to provide some limited use of the old visual editor ; with the new template engine, until the new one is created. macro __define_one_property class, subtype, style, property { common local ..txt, ..set, ..subtype match id==value, property \{ ; class if class eq 'TForm' ..set = TForm.\#id\#.set else if class eq 'BUTTON' if subtype = 0 ; BS_PUSHBUTTON ..set = TButton.\#id\#.set end if if subtype = 2 ; BS_CHECKBOX ..set = TButton.\#id\#.set end if else if class eq 'EDIT' if (style and 4) ;ES_MULTILINE ..set = TAsmEdit.\#id\#.set else ..set = TEdit.\#id\#.set end if else if class eq 'STATIC' ..set = TLabel.\#id\#.set else if class eq 'msctls_progress32' ..set = TProgress.\#id\#.set else if class eq 'SysTreeView32' ..set = TTreeView.\#id\#.set end if end if end if end if end if end if dd ..set if value eqtype 2 dd value else if value eqtype 'A' dd ..txt else dd value end if end if ..txt text value \} } macro Window name, flags, walign, class, txt, style, styleEx, ID, left, top, width, height, [props] { common local ..paramsize, ..prms, ..caption, ..name, ..subtype, ..txtalign, ..class, ..size, ..here, ..capset, ..alset ..subtype = style and $0f ..txtalign = 0 ..alset = 0 if ~name eq NONE name#.template#: end if ..class = vtables.TWindow ..size = sizeof.TWindow ..capset = 0 ; class if class eq 'TForm' ..class = vtables.TForm ..size = sizeof.TForm else if class eq 'BUTTON' if ..subtype = 0 ; BS_PUSHBUTTON ..class = vtables.TButton ..size = sizeof.TButton ..txtalign = dtfAlignCenter or dtfAlignMiddle ..alset = TButton.TextAlign.set ..capset = TButton.Caption.set end if if ..subtype = 2 ; BS_CHECKBOX ..class = vtables.TCheckbox ..size = sizeof.TCheckbox ..capset = TCheckbox.Caption.set end if else if class eq 'EDIT' if (style and 4) ;ES_MULTILINE ..class = vtables.TAsmEdit ; it is not good to use TAsmEdit, but we don't have light multiline edit. ..size = sizeof.TAsmEdit ..capset = TAsmEdit.Text.set else ..class = vtables.TEdit ..size = sizeof.TEdit ..capset = TEdit.Text.set end if else if class eq 'STATIC' ..class = vtables.TLabel ..size = sizeof.TLabel ..capset = TLabel.Caption.set ..alset = TLabel.TextAlign.set if ..subtype = 1 ; SS_CENTER ..txtalign = ..txtalign or dtfAlignCenter end if if ..subtype = 2 ; SS_RIGHT ..txtalign = ..txtalign or dtfAlignCenter end if if (style and $200) ;SS_CENTERIMAGE ..txtalign = ..txtalign or dtfAlignMiddle end if else if class eq 'msctls_progress32' ..class = vtables.TProgress ..size = sizeof.TProgress else if class eq 'SysTreeView32' ..class = vtables.TTreeView ..size = sizeof.TTreeView end if end if end if end if end if end if dd flags ; flags - the values are the same dd ..size dd ..class dd ..paramsize ;parameters size ; name if name eq NONE dd ..name else dd name end if ..prms: dd TWindow.x.set dd left dd TWindow.y.set dd top dd TWindow.width.set dd width dd TWindow.height.set dd height if ..capset dd ..capset dd ..caption end if if (style and $10000000) <> 0 ; WS_VISIBLE dd TWindow.Visible.set dd TRUE end if if ..txtalign dd ..alset dd ..txtalign end if forward __define_one_property class, ..subtype, style, props common dd -1 ; end of params if name eq NONE ..name dd ? else name dd ? end if ..paramsize = $ - ..prms ..caption text txt } |
Added freshlib/gui/SplitGrid.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Objects template engine ; ; Target OS: Any ; ; Dependencies: objects.asm ; ; Notes: ;_________________________________________________________________________________________ module "SplitGrid" stOriginBR = $08 ; the origin of the cell splitter is on the right (or bottom) ; edge of the cell. stHoriz = $00 ; the cell is splitted on left and right parts. stVert = $04 ; the cell is splitted on up and down parts. stNone = $80 ; the cell is not splitted. stAutosize = 1 shl 11 stMaxHidden = 1 shl 12 ; the pos is assumed to be equal to the max value (but the real value is not changed). stHidden = 1 shl 13 ; the pos is assumed to be 0 (but the real value is not changed) stRelative = 1 shl 14 ; the pos field is a part of a whole rectangle (in 1/32768 units) stJustGap = 1 shl 15 ; the rectangle is splitted, but not resizeable. struct TSplitRect .rect RECT ; the rectangle of the area. .spRect RECT ; rectangle of the splitter. .pWindow dd ? ; pointer to TWindow descendent, bound to the grid cell. .pos dd ? ; in pixels or as part of the whole. .min dd ? ; minimal size .max dd ? ; maximal size .type dd ? ; one or more of stXXXXX flags defined above. .spWidth dd ? ; width of the spliter .id dd ? .reserve dd ? ; in order the size to be power of 2 ends struct TSplitTemplate .type dw ? ; stXXXXXXXXX flags .width dw ? ; width of the splitter .pos dd ? ; current position .min dd ? ; min .max dd ? ; max ends struct TCellTemplate .type dw ? .id dw ? ends macro SplitStart name { local ..expected, ..id ..expected = 1 ..id = 0 cell@expected equ ..expected cell@id equ ..id cell@name equ name label name byte macro Split type, width, pos, min, max \{ dw type, width dd pos, min, max cell@id = cell@id + 1 cell@expected = cell@expected + 1 \} macro Cell name \{ .\#name = cell@id dw stNone, cell@id cell@id = cell@id + 1 cell@expected = cell@expected - 1 \} } macro SplitEnd { match name, cell@name \{ cell@namestr equ `name \} if cell@expected<>0 disp 1, 'WARNING! "', cell@namestr, '" split template is not consistent! Automatically added ', <cell@expected, 10>, " empty cells. FIXIT!", 13 repeat cell@expected dw stNone, 0 end repeat end if match name, cell@name \{ sizeof.\#name = $ - name \} purge Cell, Split restore cell@expected, cell@id, cell@name } struc SplitTemplate [name, type, width, pos, min, max] { common .: local ..expected, ..index ..expected = 1 ..index = 0 forward if ~name eq NONE name = ..index end if dw type dw width dd pos dd min dd max if (type <> stNone) ..expected = ..expected + 1 else ..expected = ..expected - 1 end if ..index = ..index + 1 common repeat ..expected dw stNone, 0 dd 0, 0, 0 end repeat if ..expected <> 0 disp 1, 'WARNING! "', `., '" split template is not consistent! Automatically added ', <..expected, 10>, " empty cells. FIXIT!", 13 end if } proc RealignGrid, .ptrSplitter, .ptrRect .rect RECT begin pushad mov edi, [.ptrSplitter] mov esi, [.ptrRect] call _DoRealign popad return endp ; edi is pointer to the current TSplitRect ; esi is pointer to the rect that have to be assigned to the current TSplitRect proc _DoRealign .rect1 RECT .rect2 RECT begin ; copy the rect to the target rectangles. mov eax, [esi+RECT.left] mov ecx, [esi+RECT.top] mov [edi+TSplitRect.rect.left], eax mov [edi+TSplitRect.rect.top], ecx mov [edi+TSplitRect.spRect.left], eax mov [edi+TSplitRect.spRect.top], ecx mov [.rect1.left], eax mov [.rect1.top], ecx mov [.rect2.left], eax mov [.rect2.top], ecx mov eax, [esi+RECT.right] mov ecx, [esi+RECT.bottom] mov [edi+TSplitRect.rect.right], eax mov [edi+TSplitRect.rect.bottom], ecx mov [edi+TSplitRect.spRect.right], eax mov [edi+TSplitRect.spRect.bottom], ecx mov [.rect1.right], eax mov [.rect1.bottom], ecx mov [.rect2.right], eax mov [.rect2.bottom], ecx mov esi, edi ; current TSplitRect add edi, sizeof.TSplitRect ; goto next one mov ecx, [esi+TSplitRect.type] test ecx, stNone jnz .resize_window ; There is split, so compute it. and ecx, stVert ; it is 0 for stHoriz and 4 for stVert mov ebx, [esi+TSplitRect.rect.right+ecx] sub ebx, [esi+TSplitRect.rect.left+ecx] ; ebx = size of rect (x or y depending on type) mov edx, [esi+TSplitRect.spWidth] test [esi+TSplitRect.type], stHidden or stMaxHidden jz .hidden_ok1 xor edx, edx .hidden_ok1: sub ebx, edx mov eax, [esi+TSplitRect.pos] ; limit the .pos value test [esi+TSplitRect.type], stAutosize jz .autosize_ok call __GetSplitAutosize .autosize_ok: cmp eax, [esi+TSplitRect.min] cmovl eax, [esi+TSplitRect.min] cmp eax, [esi+TSplitRect.max] cmovg eax, [esi+TSplitRect.max] mov [esi+TSplitRect.pos],eax ; EAX = position of the splitter. test [esi+TSplitRect.type], stHidden jz .hidden_ok2 xor eax, eax .hidden_ok2: test [esi+TSplitRect.type], stMaxHidden jz .hidden_ok3 mov eax, [esi+TSplitRect.max] .hidden_ok3: mov ecx, [esi+TSplitRect.type] and ecx, $ff ; Here ECX = 0, 4, 8 or 12 depending on stVert and stOriginBR test [esi+TSplitRect.type], stRelative jz .posready imul eax, ebx sar eax, 15 ; div $8000 .posready: test ecx, stOriginBR jz .readyofs ; it is Left or Top neg edx ; EDX is the width of the splitter neg eax ; EAX is the position of the splitter .readyofs: add eax, [.rect1.left+ecx] ; .left or .top, depending on the ECX (0 or 4) mov [.rect1.right+ecx], eax ; .right or .bottom, depending on the ECX mov [esi+TSplitRect.spRect.left+ecx], eax ; spRect.left or spRect.top add ecx, 8 ; right or bottom and ecx, $0f ; ecx = 8, 12, 0 or 4 depending on stVert and stOriginBR add eax, edx mov [.rect1.right+ecx], eax ; it is rect2.left or .top !!!!!! mov [esi+TSplitRect.spRect.left+ecx], eax ; spRect.right or spRect.bottom push esi lea esi, [.rect1] call _DoRealign lea esi, [.rect2] call _DoRealign pop esi return .resize_window: mov ebx, [esi+TSplitRect.pWindow] test ebx, ebx jz .endresize mov eax, [esi+TSplitRect.rect.left] mov ecx, [esi+TSplitRect.rect.top] exec ebx, TWindow:Move, eax, ecx mov eax, [esi+TSplitRect.rect.right] mov ecx, [esi+TSplitRect.rect.bottom] sub eax, [esi+TSplitRect.rect.left] sub ecx, [esi+TSplitRect.rect.top] xor edx, edx test eax, eax cmovs eax, edx test ecx, ecx cmovs ecx, edx ; Visible test eax, eax setnz dl test ecx, ecx setnz dh and dl, dh movzx edx, dl set ebx, TWindow:Visible, edx exec ebx, TWindow:Resize, eax, ecx .endresize: return endp proc __GetSplitAutosize .rect RECT begin pushad mov ebx, [esi+TSplitRect.pWindow] test ebx, ebx jz .finish mov ebx, [esi+ebx+TSplitRect.pWindow] test ebx, ebx jz .finish exec ebx, TWindow:Autosize ; returns eax - width; edx - height; test [esi+TSplitRect.type], stVert cmovnz eax, edx ; here edx is the pos of the splitter mov [esp+4*regEAX], eax .finish: popad return endp proc DrawSplitters, .pImage, .ptrSplitters, .xDst, .yDst, .width, .height, .ofsx, .ofsy, .proc_draw_splitter .rect RECT begin pushad mov eax, [.xDst] mov edx, [.yDst] add [.width], eax add [.height], edx lea ebx, [.xDst] mov esi, [.ptrSplitters] lea edi, [.rect] call .DoDrawSplitters popad return ; esi - pointer to TSplitRect .DoDrawSplitters: lea eax, [esi+TSplitRect.spRect] stdcall RectCopy, edi, eax mov eax, [.ofsx] mov edx, [.ofsy] add [edi+RECT.left], eax add [edi+RECT.top], edx add [edi+RECT.right], eax add [edi+RECT.bottom], edx mov edx, [esi+TSplitRect.type] add esi, sizeof.TSplitRect test edx, stNone jnz .exit test edx, stJustGap jnz .next stdcall [.proc_draw_splitter], [.pImage], edi, edx, ebx .next: call .DoDrawSplitters ; first call .DoDrawSplitters ; second .exit: retn endp ; Returns: ; CF=1; the splitter has been found. EAX=pointer to TSplitRect structure. ; CF=0; the splitter has not been found. EAX not changed. proc FindSplitter, .ptrSplitters, .ptrPoint begin pushad mov esi, [.ptrSplitters] mov edi, [.ptrPoint] call _DoFindSplitter jnc .exit mov [esp+4*regEAX], ebx .exit: popad return endp proc _DoFindSplitter begin mov ebx, esi add esi, sizeof.TSplitRect test [ebx+TSplitRect.type], stNone jnz .exit lea eax, [ebx+TSplitRect.spRect] stdcall PointInRect, eax, [edi+POINT.x], [edi+POINT.y] jnc .next return .next: call _DoFindSplitter ; first jc .exit call _DoFindSplitter ; second .exit: return endp proc FindSplitterCell, .ptrSplitters, .ptrPoint begin pushad mov esi, [.ptrSplitters] mov edi, [.ptrPoint] mov ecx, 1 ; one splitter expected. .loop: add ecx, 2 test [esi+TSplitRect.type], stNone jz .next sub ecx, 2 lea eax, [esi+TSplitRect.rect] stdcall PointInRect, esi, [edi+POINT.x], [edi+POINT.y] jc .found .next: lea esi, [esi+sizeof.TSplitRect] dec ecx jnz .loop ; here CF=0 popad return .found: ; here CF=1 mov [esp+regEAX*4], esi popad return endp proc ReadSplitGridTemplate, .ptrTemplate begin pushad mov edx, [.ptrTemplate] test edx, edx jz .finish mov esi, edx stdcall CreateArray, sizeof.TSplitRect mov edx, eax mov ecx, 1 .read_loop: stdcall AddArrayItems, edx, 1 push eax ecx mov edi, eax mov ecx, sizeof.TSplitRect/4 xor eax, eax rep stosd pop ecx edi xor eax, eax lodsw ; the stXXX values. mov [edi+TSplitRect.type], eax test eax, stNone jnz .empty_cell lodsw ; the width mov [edi+TSplitRect.spWidth], eax xor ebx, ebx lodsd test [edi+TSplitRect.type], stAutosize jz @f mov ebx, eax ; the index of the auto sub ebx, [edx+TArray.count] inc ebx imul ebx, sizeof.TSplitRect xor eax, eax @@: mov [edi+TSplitRect.pWindow], ebx mov [edi+TSplitRect.pos], eax lodsd mov [edi+TSplitRect.min], eax lodsd mov [edi+TSplitRect.max], eax inc ecx jmp .read_loop .empty_cell: lodsw mov [edi+TSplitRect.id], eax dec ecx jnz .read_loop .finish: mov [esp+regEAX*4], edx popad return endp cdspHide = 0 cdspShow = 1 cdspToggle = 2 ; fDisplay = 0 -> hide, 1->show, 2->switch proc CellMinMax, .pForm, .cellID, .fDisplay begin pushad get esi, [.pForm], TForm:SplitGrid test esi, esi jz .error lea esi, [esi+TArray.array] mov edi, esi mov eax, [.cellID] shl eax, 6 ; * sizeof.TSplitRect add esi, eax xor ecx, ecx ; Search for the split element of this cell .loop: sub esi, sizeof.TSplitRect cmp esi, edi jb .error bt [esi+TSplitRect.type], 7 ; stNone sbb edx, edx ; -1 if the element is a cell and 0 if split lea edx, [2*edx+1] ; -1 if the element is a cell and +1 if split add ecx, edx jl .loop ; here ecx = 0 if the cell is the second cell ; ecx = +1 if the cell is the first cell test [esi+TSplitRect.type], stOriginBR jz @f xor ecx, 1 ; reverse it if the split is stOriginBR @@: add ecx, 12 ; stMaxHidden = 2^12; stHidden = 2^13 xor edx, edx inc edx shl edx, cl ; edx = stHidden or stMaxHidden depending on the cell that has to be hidden or shown. mov ecx, edx not ecx ; AND mask. ; found cmp [.fDisplay], 0 sete al shr al, 1 sbb eax, eax ; eax = $ffffffff or 0 depending on the .fDisplay flag. cmp [.fDisplay], 2 je .xor and edx, eax and [esi+TSplitRect.type], ecx or [esi+TSplitRect.type], edx ; set only one. jmp .realign .xor: xor [esi+TSplitRect.type], edx .realign: stdcall RealignGrid, esi, esi ; realign on its own rectangle. mov eax, [esi+TSplitRect.type] mov [esp+4*regEAX], eax ; return the result split type. clc popad return .error: stc popad return endp endmodule |
Added freshlib/gui/TAction.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Actions management library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: "Action" is set of executable code, combined with user interface attributes - ; caption, accelerator keys, enable/disable status flag etc. ; Different UI elements, such as buttons, menu items etc. can be attached to ; the action object and to use its attributes. When the programmer changes ; something in the action, all UI elements are updated automatically. ;_________________________________________________________________________________________ module "TAction" Ctrl = maskCtrl Alt = maskAlt Shift = maskShift struct TFastKey .flags dd ? .key dd ? ends object TAction, TObject ._caption dd ? ._hint_text dd ? ._icon_index dd ? ._enabled dd ? ._checked dd ? ._accel TFastKey ._on_execute dd ? ._on_idle dd ? ._ctrl_list dd ? ._icon_cache_gray dd ? ._icon_cache dd ? param .Caption, .GetCaption, .SetCaption param .HintText, ._hint_text, .SetHintText param .IconIndex, ._icon_index, .SetIconIndex param .Enabled, ._enabled, .SetEnabled param .Checked, ._checked, .SetChecked param .Accelerator, .GetAccelStr, .SetAccelStr param .Icon, .GetIcon, NONE param .OnExecute, ._on_execute, ._on_execute param .OnIdle, ._on_idle, ._on_idle method .GetIcon method .GetAccelStr method .SetAccelStr, .value method .GetCaption method .SetParent, .value method .SetCaption, .value method .SetHintText, .value method .SetIconIndex, .value method .SetEnabled, .value method .SetChecked, .value method .UpdateControls method .SetAccelerator, .flags, .key method .Execute, .fromCtrl method .Attach, .ctrl method .Detach, .ctrl method .Create, .parent method .Destroy method .__clear_cache endobj interface TAction.OnExecute, .Action, .Ctrl interface TAction.OnIdle, .Action method TAction.Create begin inherited [.parent] pushad mov eax, [.self] mov [eax+TAction._enabled], 1 return endp method TAction.Destroy begin pushad get eax, [.self], TAction:Caption stdcall StrDel, eax mov esi, [.self] exec esi, TAction:__clear_cache xor edi, edi xchg edi, [esi+TAction._ctrl_list] test edi, edi jz .finish mov ecx, [edi+TArray.count] .loop: dec ecx js .end_loop mov eax, [edi+TArray.array+4*ecx] test eax, eax jz .loop set eax, TWindow:Action, 0 jmp .loop .end_loop: stdcall FreeMem, edi .finish: popad inherited return endp method TAction.SetParent begin inherited [.value] exec [.self], TAction:UpdateControls return endp method TAction.Execute begin pushad mov esi, [.self] cmp [esi+TAction._enabled], 0 je .finish mov edi, [esi+TAction._on_execute] test edi, edi jz .finish stdcall edi, esi, [.fromCtrl] .finish: popad return endp method TAction.Attach begin pushad mov esi, [.self] mov edx, [esi+TAction._ctrl_list] test edx, edx jnz .list_ok stdcall CreateArray, 4 mov edx, eax jmp .add_it .list_ok: stdcall ListIndexOf, edx, [.ctrl] jnc .finish .add_it: stdcall AddArrayItems, edx, 1 mov ecx, [.ctrl] mov [eax], ecx mov [esi+TAction._ctrl_list], edx .finish: popad return endp method TAction.Detach begin pushad mov esi, [.self] mov edx, [esi+TAction._ctrl_list] test edx, edx jz .finish stdcall ListIndexOf, edx, [.ctrl] jc .finish ; not found stdcall DeleteArrayItems, edx, eax, 1 cmp [edx+TArray.count], 0 jne @f stdcall FreeMem, edx xor edx, edx @@: mov [esi+TAction._ctrl_list], edx .finish: popad return endp method TAction.GetIcon .list dd ? begin pushad mov esi, [.self] mov edi, [esi+TAction._enabled] and edi, 1 mov eax, [esi+TAction._icon_cache_gray+4*edi] test eax, eax jnz .finish mov edx, [esi+TAction._icon_index] test edx, edx js .finish ; return 0 get [.list], esi, TAction:Parent get ecx, [.list], TActionList:IconSize stdcall CreateImage2, ecx, ecx, FALSE mov [esi+TAction._icon_cache_gray+4*edi], eax imul edx, ecx ; x coordinate. get ebx, [.list], TActionList:ImgIcons test ebx, ebx jz .finish stdcall CopyImageRect, eax, 0, 0, ebx, edx, 0, ecx, ecx test edi, edi jnz .finish stdcall FilterDisabled, eax, FALSE .finish: mov [esp+regEAX*4], eax popad return endp method TAction.GetAccelStr begin mov eax, [.self] lea eax, [eax+TAction._accel] stdcall AcceleratorToStr, eax return endp method TAction.SetAccelStr; , .value begin push eax edx stdcall StrToAccelerator, [.value] exec [.self], TAction:SetAccelerator, eax, edx pop edx eax return endp method TAction.__clear_cache begin push eax edx mov edx, [.self] xor eax, eax xchg eax, [edx+TAction._icon_cache] test eax, eax jz .cache_ok1 stdcall DestroyImage, eax .cache_ok1: xor eax, eax xchg eax, [edx+TAction._icon_cache_gray] test eax, eax jz .cache_ok2 stdcall DestroyImage, eax .cache_ok2: pop edx eax return endp method TAction.UpdateControls begin push eax ecx edx mov edx, [.self] exec edx, TAction:__clear_cache mov edx, [edx+TAction._ctrl_list] test edx, edx jz .finish mov ecx, [edx+TArray.count] .loop: dec ecx js .finish cmp [edx+TArray.array+4*ecx], 0 je .loop ; OutputValue "Update action for window: ", [edx+TArray.array+4*ecx], 16, 8 exec [edx+TArray.array+4*ecx], TWindow:UpdateAction, [.self] jmp .loop .finish: pop edx ecx eax return endp method TAction.GetCaption begin mov eax, [.self] mov eax, [eax+TAction._caption] test eax, eax jz .finish stdcall StrDup, eax .finish: return endp method TAction.SetCaption ;, .value begin pushad mov esi, [.self] mov eax, [.value] cmp eax, [esi+TAction._caption] je .finish mov [esi+TAction._caption], eax exec esi, TAction:UpdateControls .finish: popad return endp method TAction.SetHintText ;, .value begin pushad mov esi, [.self] mov eax, [.value] cmp eax, [esi+TAction._hint_text] je .finish mov [esi+TAction._hint_text], eax exec esi, TAction:UpdateControls .finish: popad return endp method TAction.SetIconIndex ;, .value begin pushad mov esi, [.self] mov eax, [.value] cmp eax, [esi+TAction._icon_index] je .finish mov [esi+TAction._icon_index], eax exec esi, TAction:UpdateControls .finish: popad return endp method TAction.SetEnabled ;, .value begin pushad mov esi, [.self] mov eax, [.value] test eax, eax setnz al movzx eax, al cmp eax, [esi+TAction._enabled] je .finish mov [esi+TAction._enabled], eax exec esi, TAction:UpdateControls .finish: popad return endp method TAction.SetChecked ;, .value begin pushad mov esi, [.self] mov eax, [.value] cmp eax, [esi+TAction._checked] je .finish mov [esi+TAction._checked], eax exec esi, TAction:UpdateControls .finish: popad return endp method TAction.SetAccelerator begin pushad mov esi, [.self] mov eax, [.flags] mov ecx, [.key] mov [esi+TAction._accel.flags], eax mov [esi+TAction._accel.key], ecx exec esi, TAction:UpdateControls popad return endp endmodule |
Added freshlib/gui/TActionList.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Actions management library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: TActionList is set of TAction that provides some common functionality ; for example the common icons. It is implemented as a parent object for ; several TAction objects. ;_________________________________________________________________________________________ module "TActionList" object TActionList, TObject ._img_icons dd ? ._icon_size dd ? ._form dd ? param .ImgIcons, ._img_icons, .SetIcons param .IconSize, ._icon_size, .SetIconSize param .Form, ._form, ._form method .Create, .parent method .Destroy method .SetIcons, .value method .SetIconSize, .value method .UpdateActions method .EventKeyPress, .utf8, .keycode, .kbdState ; returns CF=1 if an accelerator key has been detected and executed. endobj method TActionList.Create begin inherited [.parent] set [.self], TActionList:IconSize, 16 return endp method TActionList.Destroy begin get eax, [.self], TActionList:ImgIcons stdcall DestroyImage, eax inherited return endp method TActionList.SetIconSize begin push eax ecx mov ecx, [.self] mov eax, [.value] xchg eax, [ecx+TActionList._icon_size] cmp eax, [ecx+TActionList._icon_size] je .finish exec ecx, TActionList:UpdateActions .finish: pop ecx eax return endp method TActionList.UpdateActions begin pushad get edx, [.self], TActionList:FirstChild .loop: test edx, edx jz .finish exec edx, TAction:UpdateControls mov edx, [edx+TObject.__next] jmp .loop .finish: popad return endp method TActionList.SetIcons begin pushad ; the .value parameter points to a PNG image in the memory. mov esi, [.self] get ecx, esi, TActionList:ImgIcons jecxz .old_ok stdcall DestroyImage, ecx .old_ok: mov eax, [.value] test eax, eax jz .new_ok stdcall CreateImagePNG, eax, -1 .new_ok: mov [esi+TActionList._img_icons], eax exec [.self], TActionList:UpdateActions popad return endp method TActionList.EventKeyPress begin push eax edx get edx, [.self], TActionList:FirstChild .loop: test edx, edx jz .finish_no cmp [edx+TAction._accel.key], 0 je .next mov eax, [.keycode] cmp eax, [edx+TAction._accel.key] jne .next mov eax, [.kbdState] and eax, Alt or Ctrl or Shift cmp eax, [edx+TAction._accel.flags] je .execute .next: mov edx, [edx+TObject.__next] jmp .loop .execute: exec edx, TAction:Execute, 0 stc pop edx eax return .finish_no: clc pop edx eax return endp endmodule |
Added freshlib/gui/TAsmEdit.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 | ; ______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TAsmEdit object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Advanced text editor. ;_________________________________________________________________________________________ module "TAsmEdit" ; view options: how the editor looks aeoLeftMargin = $01 aeoLineNumbers = $02 aeoStripedBackground = $04 aeoConsoleCaret = $08 ; navigation options aeoScrollYMore = $0100 ; scroll Y more than needed in order to scroll less and to scroll more readable. aeoScrollXMore = $0200 ; scroll X more than needed ; editing options aeoAutoIndents = $010000 aeoAutoBrackets = $020000 aeoSmartTabs = $040000 aeoPersistentSelection = $080000 aeoDefault = aeoLeftMargin or aeoLineNumbers or aeoConsoleCaret or aeoAutoIndents or aeoSmartTabs or aeoScrollXMore or aeoStripedBackground ; editor mode flags aemOverwrite = 1 aemBlockSelection = 2 ; Operations for undo/redo: chopInserted = 0 chopDeleted = 1 chopChanged = 2 struct TUndoInfo .pNext dd ? ; pointer to the next TUndoInfo structure in the chain. .caretPos POINT .selStart POINT .selEnd POINT .modified dd ? ; the modified status. .operation dd ? ; change operation. .group dd ? ; .line dd ? ; the line number affected. .pText dd ? ; pointer to the previous TTextLine of the affected line for chopChanged and chopDeleted ends ; The element of the [TTextLine.syn_array] array. Contains information about text highlighting struct TTextChunk .bytes dw ? ; the length of the text chunk in bytes. (UTF-8 characters???) .color db ? ; byte, index of the color/background of the text chunk. .flags db ? ; the text formatting flags. not used, reserved. For example underlining, bold, etc... ends ; Constants for the TTextLine.flags tlfWrapText = $00000001 ; The text is wrapped to fit to the wrap width of the editor. Not used/not implemented yet!!! tlfBookmark = $00000002 ; There is a bookmark on the line. tlfBreakpoint = $00000004 tlfRendered = $80000000 ; The line is properly rendered. tlfHighlightNeutral = $40000000 ; The line is highlighted with neutral color. tlfHighlightError = $20000000 ; the line is highlighted with error color. tlfmClearHighlight = not (tlfHighlightNeutral or tlfHighlightError) ; The structure for one text line. This structure is expanded TText gap buffer structure. ; contains the line/IDE related information and UTF-8 encoded text of the line. ; For example the line colorization, format, syntax context, pointer to the debug data, etc. rstruct TTextLine .flags dd ? ; line flags .ch_len dd ? ; the length of the text in utf-8 characters. ; .debugdata dd ? ; pointer to debug data, associated to this line ; .syn_array dd ? ; TArray of TTextChunk items for syntax colorization. ; Should be updated by calling the syntax highlighting proc. ; .syn_context dd ? ; Syntax context after the line ; .fold_level dd ? ; the level of folding. .imgRendered dd ? ; the TImage with the rendered line. rd 1 ; . TText ends ; Search options constants srchCaseSensitive = tsfCaseSensitive srchWholeWords = 2 object TAsmEdit, TScrollable ; private fields ._lines dd ? ; pointer to TText structure that contains pointers to TTextLine structures. ._line_widths dd ? ; TArray of TCounter for counting the line width. Must be kept in consistency. ._end_of_line rd 1 ; string (not a pointer) with up to 3 characters for EOL termination. Usually only 1 or 2 are used. ._imgMargin dd ? ._img_margin_valid dd ? ._pUndo dd ? ._pRedo dd ? ._UndoLevel dd ? ._prev_char dd ? ._options dd ? ; behaviour bit options: aeoXXXXXX values. ._mode dd ? ; set of aemXXXXX flags. ._modified dd ? ._font_height dd ? ._font_asc dd ? ._font_desc dd ? ._font_width dd ? ._numfont_width dd ? ._left_margin dd ? ._num_margin dd ? ._caretPos POINT ; the position of the caret in absolute text coordinates. ._selStart POINT ; The selection start point ._selEnd POINT ; ._selAreaUpdate dd ? ._selCmd dd ? ; ==0 if the shift key wasn't pressed on the last keyboard interaction. ._selCmdPrev dd ? ; the previous value of the _selCmd field. ._drag_button dd ? ._width_ch dd ? ; width and ._height_ch dd ? ; height of the window in chars. Partial rows and columns are counted ._width_ch_nav dd ? ; width and ._height_ch_nav dd ? ; height of the window in chars. For caret navigation purposes. Only full rows and columns. ._prev_y_from dd ? ; what lines were on the screen when the previous lines images cache ._prev_y_to dd ? ; was cleaned up. Used in the .__InvalidateImgCache method. ._syntax_proc dd ? ._on_mode_change dd ? ._on_caret_move dd ? ; Current editor search data ._search_index dd ? ; index of the found instances of ._search_str: array of POINT ._search_prep dd ? ; the prepared pattern index table for the current search. ._search_str dd ? ; handle of the last search string ._search_options dd ? ; search options ; parameters param .Options, ._options, .SetOptions param .Mode, ._mode, .SetMode param .EndOfLine, ._end_of_line, .SetEOL param .Selection, .GetSelection, NONE param .Text, .GetText, .SetText ; This property works with pointer to a asciiz terminated string for "set" and TText for "get" instructions. param .LMImage, .GetLeftMargin, NONE param .CaretX, ._caretPos.x, .SetCaretX param .CaretY, ._caretPos.y, .SetCaretY param .SelStartX, ._selStart.x, NONE param .SelStartY, ._selStart.y, NONE param .SelEndX, ._selEnd.x, NONE param .SelEndY, ._selEnd.y, NONE param .WordAtCaret, .GetWordAtCaret, NONE param .SyntaxProc, ._syntax_proc, .SetSyntaxProc param .OnModeChange, ._on_mode_change, ._on_mode_change param .OnCaretMove, ._on_caret_move, ._on_caret_move param .Modified, ._modified, ._modified ; param methods method .SetCaretX, .value method .SetCaretY, .value method .SetOptions, .value method .SetMode, .value method .SetEOL, .value method .HasSelection method .GetSelection method .GetText method .SetText, .value method .GetWordAtCaret method .ReplaceWordAtCaret, .new_word method .GetLeftMargin method .ComputeLeftMarginWidth method .ComputeScreenInChars method .SetSyntaxProc, .value method ._AddSelRectangles, .pRectList method ._AddSelRectanglesAbs, .pRectList ; common methods method .Create, .parent method .Destroy method .UpdateThemeParams method .__InvalidateImgCache method .__UpdateImages method .Resize, .newWidth, .newHeight method .Move, .newX, .newY method .UpdateScrollBar method .UpdateCaretPos ; rendering methods method .GetLineImg, .lineNumber method .__RenderLine, .pTextLine, .clBackground method ._RenderLM, .pImage, .from, .to ; .from, .to in character positions, relative to the begining of the window. ; Painting methods method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height ; Paints itself on the caller provided TImage. method .__DrawScrollbar, .scrollbar ; .scrollbar == scrollX or scrollY ; Text navigarion methods method .Highlight, .LineNum, .fHighlight method .TextLine, .LineNum, .fAddMissing method .ScrollToCaretX method .ScrollToCaretY method .CenterCaretY method .CaretLeftRight, .count method .CaretUpDown, .count, .scroll ; Selection control methods. method .SelStartHere method .SelEndHere method .SelChangeBegin method .SelChangeEnd ; undo/redo method .SaveForUndo, .LineNum, .operation method .ClearUndoRedo ; Text editing methods method .AddChar, .utf8 method .InsertNewLine, .LineNum method .DeleteLine, .LineNum method .DeleteChar, .LineNum, .CharPos method .JoinNextLine, .LineNum ; if .LineNum < 0; joins the current caret line method .SplitLine, .LineNum, .PosX ; if .LineNum < 0 splits on caret position. method .DeleteSelection method .ReplaceSelection, .string method .InsertString, .string method .AddTrailingSpaces, .LineNum, .PosX ; if the caret is positioned after the line end, fills with spaces method .DelTrailingSpaces, .LineNum ; deletes the trailing spaces from the line end. method .PrefixInsert, .LineFrom, .LineTo, .char method .PrefixRemove, .LineFrom, .LineTo, .char method .SelectionPrefix, .op, .char method .GetSmartTab, .lineNum, .fromX ; Text searching methods method .Search, .pattern, .options method .SearchRefresh ; call it after text change in order to refresh the search index (if any) method .SearchHere method .SearchNext method .SearchPrev ; OS event handlers method .EventFocusIn method .EventFocusOut method .EventScroll, .direction, .command, .value method .EventKeyPress, .utf8, .scancode, .kbdState method .EventButtonPress, .button, .kbdState, .x, .y method .EventButtonRelease, .button, .kbdState, .x, .y method .EventButtonDoubleClick, .button, .kbdState, .x, .y method .EventMouseMove, .x, .y, .kbdState ; Keyboard UI direct methods. ; usually assigned to: method .CaretLeft ; Left arrow method .CaretRight ; Right arrow method .CaretUp ; Up arrow method .CaretDown ; Down arrow method .CaretHome ; Home method .CaretEnd ; End method .CaretTxtHome ; Ctrl+PgUp method .CaretTxtEnd ; Ctrl+PgDn method .CaretScrHome ; Ctrl+Home method .CaretScrEnd ; Ctrl+End method .CaretWordBack ; Ctrl+Left method .CaretWordForward ; Ctrl+Right method .Undo ; Ctrl+Z method .CanUndo method .Redo ; Ctrl+Shift+Z method .CanRedo method .Cut ; Ctrl+X method .Copy ; Ctrl+C method .Paste ; Ctrl+V method .ToggleBookmark method .GoPrevBookmark method .GoNextBookmark method .ClearBookmarks method .IndentSelection method .OutdentSelection method .CommentSelection method .UncommentSelection endobj ; Create/destroy methods method TAsmEdit.Create begin inherited [.parent] pushad mov edi, [.self] set edi, TAsmEdit:Cursor, mcText set edi, TAsmEdit:WantFocus, TRUE set edi, TAsmEdit:Behavior, wbUseTabKeys or wbUseEnterKey exec edi, TAsmEdit:UpdateThemeParams set edi, TAsmEdit:Text, 0 set edi, TAsmEdit:Options, aeoDefault set edi, TAsmEdit:EndOfLine, dNEWLINE popad return endp method TAsmEdit.Destroy begin push ecx mov ecx, [.self] DebugMsg "TAsmEdit DESTROY!!!" set ecx, TAsmEdit:Text, 0 ; Clear all the text. stdcall TextFree, [ecx+TAsmEdit._lines] ; Release the lines TText structure. stdcall DestroyImage, [ecx+TAsmEdit._imgMargin] pop ecx inherited return endp method TAsmEdit.UpdateThemeParams begin pushad mov edi, [.self] set edi, TAsmEdit:StepX, [ASM.MouseWheel] set edi, TAsmEdit:StepY, [ASM.MouseWheel] stdcall GetFontMetrics, [ASM.Font] jc .finish mov [edi+TAsmEdit._font_height], eax mov [edi+TAsmEdit._font_asc], ebx mov [edi+TAsmEdit._font_desc], edx ; OutputValue " Font height:", eax, 10, -1 ; OutputValue " Font ascender:", ebx, 10, -1 ; OutputValue "Font descender:", edx, 10, -1 stdcall GetTextBounds, "ABCDEFGH", 8, [ASM.Font] sar eax, 3 jnz @f inc eax @@: mov [edi+TAsmEdit._font_width], eax ; OutputValue " Font width:", eax, 10, -1 stdcall GetTextBounds, "99999999", 8, [ASM.NumFont] sar eax, 3 jnz @f inc eax @@: mov [edi+TAsmEdit._numfont_width], eax cmp [edi+TAsmEdit._lines], 0 je .finish stdcall FreeImagePool mov esi, [edi+TAsmEdit._lines] test esi, esi jz .end_free_loop xor ecx, ecx .free_loop: mov eax, [esi+TText.GapBegin] cmp ecx, eax cmovae eax, [esi+TText.GapEnd] sub eax, [esi+TText.GapBegin] add eax, ecx cmp eax, [esi+TText.Length] jae .end_free_loop mov edx, [esi+eax] xor eax, eax xchg eax, [edx+TTextLine.imgRendered] stdcall DestroyImage, eax and [edx+TTextLine.flags], not tlfRendered add ecx, 4 jmp .free_loop .end_free_loop: and [edi+TAsmEdit._img_margin_valid], 0 exec edi, TAsmEdit:ComputeScreenInChars exec edi, TAsmEdit:UpdateCaretPos exec edi, TAsmEdit:RectChanged2, 0 .finish: popad return endp method TAsmEdit.GetLineImg ; .lineNumber begin pushad mov eax, [.self] xor edx, edx test [esi+TAsmEdit._options], aeoStripedBackground cmovnz edx, [.lineNumber] and edx, 1 mov edx, [ASM.clBackground+4*edx] ; the background color later for __RenderLine mov esi, [eax+TAsmEdit._lines] xor ebx, ebx mov eax, [.lineNumber] shl eax, 2 cmp eax, [esi+TText.GapBegin] jb @f add eax, [esi+TText.GapEnd] sub eax, [esi+TText.GapBegin] @@: cmp eax, [esi+TText.Length] jae .finish mov edi, [esi+eax] ; TTextLine mov eax, [edi+TTextLine.flags] shr eax, 29 ; tlfHighlightNeutral or tlfHighlightError and eax, 3 jz .color_ok cmp eax, 3 je .color_ok mov edx, [ASM.clBackground+4+4*eax] .color_ok: mov ebx, [edi+TTextLine.imgRendered] mov esi, [.self] mov ecx, [edi+TTextLine.ch_len] imul ecx, [esi+TAsmEdit._font_width] test ebx, ebx jz .create test ecx, ecx jz .destroy cmp ecx, [ebx+TImage.wrapW] je .render_it and [edi+TTextLine.flags], not tlfRendered ;.check_width: cmp ecx, [ebx+TImage.width] jle .set_wrap .destroy: xor ebx, ebx xchg ebx, [edi+TTextLine.imgRendered] stdcall RecycleImage, ebx xor ebx, ebx .create: test ecx, ecx jz .finish ; here ebx == 0 always. stdcall GetRecycledImage, ecx, [esi+TAsmEdit._font_height], griMoreWidth or griExactHeight mov [edi+TTextLine.imgRendered], eax mov ebx, eax .set_wrap: stdcall SetImageWrap, ebx, ecx, [esi+TAsmEdit._font_height] .render_it: test [edi+TTextLine.flags], tlfRendered jnz .finish exec esi, TAsmEdit:__RenderLine, edi, edx .finish: mov [esp+4*regEAX], ebx popad return endp method TAsmEdit.GetLeftMargin begin pushad mov esi, [.self] mov edx, [esi+TAsmEdit._imgMargin] cmp [esi+TAsmEdit._img_margin_valid], 0 jne @f exec esi, TAsmEdit:_RenderLM, edx, 0, [esi+TAsmEdit._height_ch] inc [esi+TAsmEdit._img_margin_valid] @@: mov [esp+4*regEAX], edx popad return endp ; This method should be called on every operation that changes ; what text lines are displayed on the screen. ; 1. On any scroll in Y direction. ; 2. On inserting or deleting line in the text. ; 3. On window resize in Y direction. ; The call should be made after the actual parameter has been changed, ; but before the editor window has been rendered. ; ; The method removes the TTextLine.imgRendered images from the lines ; that are off the screen (with possible support for some reserve off ; the screen for faster rendering. ; ; Also, it is possible to render offscreen lines and cache cleanup ; in a separate thread in order to provide the best possible speed. ; ; prev: x0|=======|y0 ; current: x1|-------|y1 ; ; x0|=======|y0 ; x1|-------|y1 ; ; x0|=======|y0 ; x1|--------|y1 ; ; x0|=======|y0 ; x1|-------|y1 ; ; ; x0|=======|y0 ; x1|---------------|y1 ; ; x0|===============|y0 ; x1|-------|y1 ; ;Left interval to recycle: ; from min(x0, x1) to min(y0, x1) ; ;Right interval to recycle: ; from max(x0, y1) to max(y0, y1) ; method TAsmEdit.__InvalidateImgCache begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._lines] get ebx, esi, TAsmEdit:PosY ; x1 mov ecx, [esi+TAsmEdit._prev_y_from] ; x0 mov edx, [esi+TAsmEdit._prev_y_to] ; y0 ; left interval cmp ecx, ebx ; x0, x1 cmovg ecx, ebx ; ecx = min(x0, x1) = from left cmp edx, ebx ; y1, x1 cmovg edx, ebx ; edx = min(y0, x1) = to left call .recycle_loop mov ecx, [esi+TAsmEdit._prev_y_from] ; x0 mov edx, [esi+TAsmEdit._prev_y_to] ; y0 ; store the new "previous" values. mov [esi+TAsmEdit._prev_y_from], ebx add ebx, [esi+TAsmEdit._height_ch] ; y1 mov [esi+TAsmEdit._prev_y_to], ebx cmp ecx, ebx ; x0, y1 cmovl ecx, ebx ; ecx = max(x0, y1) cmp edx, ebx ; y0, y1 cmovl edx, ebx ; edx = max(y0, y1) call .recycle_loop popad return ; iterates the lines from ecx to edx and recycles the line rendered images for future use. .recycle_loop: cmp ecx, edx jae .end_recycle lea eax, [4*ecx] cmp eax, [edi+TText.GapBegin] jb .ofs_ok add eax, [edi+TText.GapEnd] sub eax, [edi+TText.GapBegin] .ofs_ok: cmp eax, [edi+TText.Length] jae .end_recycle mov eax, [edi+eax] cmp [eax+TTextLine.imgRendered], 0 je .next_line stdcall RecycleImage, [eax+TTextLine.imgRendered] and [eax+TTextLine.imgRendered], 0 and [eax+TTextLine.flags], not tlfRendered .next_line: inc ecx jmp .recycle_loop .end_recycle: retn endp ; TAsmEdit.SelfPaint method method TAsmEdit.SelfPaint ;.pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height ; Paints itself on the caller provided TImage. .offs_x dd ? .offs_y dd ? .line_x_offs dd ? .y dd ? .rect_src RECT ; the rectangle on the client that need to be drawn. .rect_ln RECT ; the rectangle of the current line that need to be drawn in line image coordinates. .rect_rm RECT ; the rectangle of the remaining area after the end of the current line. .rect_dst RECT begin pushad mov esi, [.self] mov ecx, [.xDst] ; mov edx, [.yDst] ; sub ecx, [.xSrc] ; sub edx, [.ySrc] ; mov [.offs_x], ecx ; mov [.offs_y], edx ; the offset between the source and destination rectangles. mov ecx, [.xSrc] ; mov edx, [.ySrc] ; mov [.rect_src.left], ecx ; mov [.rect_src.top], edx ; add ecx, [.width] ; add edx, [.height] ; mov [.rect_src.right], ecx ; mov [.rect_src.bottom], edx ; clip everything to the source rectangle ; draw all lines in the rectangle... get eax, esi, TAsmEdit:PosX imul eax, [esi+TAsmEdit._font_width] ; horizontal offset of the line images in pixels. mov [.line_x_offs], eax ; from where the line image should be drawn on the client text area. (client coordinates, not related to the drawing rectangle). get ebx, esi, TAsmEdit:PosY mov eax, [.ySrc] xor edx, edx mov ecx, eax div [esi+TAsmEdit._font_height] add ebx, eax ; the first line in the source rectangle. sub ecx, edx ; == ySrc - ySrc mod font_height mov [.y], ecx ; the top Y coordinate of the first line in client coordinates. .line_loop: mov eax, [.y] cmp eax, [.rect_src.bottom] jge .end_lines mov [.rect_ln.top], eax mov [.rect_rm.top], eax add eax, [esi+TAsmEdit._font_height] mov [.rect_ln.bottom], eax mov [.rect_rm.bottom], eax mov ecx, [esi+TAsmEdit._left_margin] mov [.rect_ln.left], ecx exec esi, TAsmEdit:GetLineImg, ebx ; returns valid, rendered TImage for the given line. mov edx, eax xor eax, eax test edx, edx jz @f mov eax, [edx+TImage.wrapW] @@: add eax, ecx sub eax, [.line_x_offs] cmovge ecx, eax mov [.rect_ln.right], ecx mov [.rect_rm.left], ecx jle .line_ok lea eax, [.rect_ln] lea ecx, [.rect_src] stdcall RectIntersect2, eax, ecx jc .line_ok mov ecx, [.rect_ln.left] mov eax, [.rect_ln.top] sub [.rect_ln.right], ecx sub [.rect_ln.bottom], eax push ecx eax add ecx, [.line_x_offs] sub ecx, [esi+TAsmEdit._left_margin] sub eax, [.y] mov [.rect_ln.left], ecx mov [.rect_ln.top], eax pop eax ecx add ecx, [.offs_x] add eax, [.offs_y] stdcall CopyImageRect, [.pDstImage], ecx, eax, edx, [.rect_ln.left], [.rect_ln.top], [.rect_ln.right], [.rect_ln.bottom] .line_ok: ; draw the remaining background if any. mov eax, [.rect_src.right] mov [.rect_rm.right], eax lea eax, [.rect_rm] lea ecx, [.rect_src] stdcall RectIntersect2, eax, ecx jc .background_ok xor edx, edx exec esi, TAsmEdit:TextLine, ebx, FALSE jc .high_ok mov eax, [eax] mov eax, [eax+TTextLine.flags] shr eax, 29 and eax, 3 jz .high_ok lea edx, [eax+1] and edx, 3 .high_ok: mov ecx, [.rect_rm.left] mov eax, [.rect_rm.top] sub [.rect_rm.right], ecx sub [.rect_rm.bottom], eax add ecx, [.offs_x] add eax, [.offs_y] ; to destination coordinates. test edx, edx jnz .bgcol_ok test [esi+TAsmEdit._options], aeoStripedBackground cmovnz edx, ebx and edx, 1 .bgcol_ok: stdcall DrawSolidRect, [.pDstImage], ecx, eax, [.rect_rm.right], [.rect_rm.bottom], [ASM.clBackground+4*edx] .background_ok: inc ebx mov eax, [esi+TAsmEdit._font_height] add [.y], eax jmp .line_loop .end_lines: ; Here, draw the left margin. xor eax, eax mov ecx, [esi+TAsmEdit._left_margin] mov edx, [esi+TAsmEdit._height] mov [.rect_dst.top], eax mov [.rect_dst.left], eax mov [.rect_dst.right], ecx mov [.rect_dst.bottom], edx lea edx, [.rect_dst] lea ecx, [.rect_src] stdcall RectIntersect2, edx, ecx jc .margin_ok mov ecx, [.rect_dst.left] mov eax, [.rect_dst.top] sub [.rect_dst.right], ecx sub [.rect_dst.bottom], eax add ecx, [.offs_x] add eax, [.offs_y] get edx, esi, TAsmEdit:LMImage stdcall CopyImageRect, [.pDstImage], ecx, eax, edx, [.rect_dst.left], [.rect_dst.top], [.rect_dst.right], [.rect_dst.bottom] .margin_ok: ; Here, draw the selection if any. exec esi, TAsmEdit:_AddSelRectangles, 0 push edx mov ecx, [edx+TArray.count] test ecx, ecx jz .selection_ok mov eax, [.xSrc] mov ebx, [.ySrc] mov [.rect_dst.left], eax mov [.rect_dst.top], ebx add eax, [.width] add ebx, [.height] mov [.rect_dst.right], eax mov [.rect_dst.bottom], ebx lea edi, [edx+TArray.array] lea ebx, [.rect_dst] .loop: mov eax, [edi+RECT.left] mov edx, [edi+RECT.top] imul eax, [esi+TAsmEdit._font_width] imul edx, [esi+TAsmEdit._font_height] add eax, [esi+TAsmEdit._left_margin] mov [edi+RECT.left], eax mov [edi+RECT.top], edx mov eax, [edi+RECT.right] mov edx, [edi+RECT.bottom] imul eax, [esi+TAsmEdit._font_width] imul edx, [esi+TAsmEdit._font_height] add eax, [esi+TAsmEdit._left_margin] mov [edi+RECT.right], eax mov [edi+RECT.bottom], edx stdcall RectIntersect2, edi, ebx jc .next push [ASM.clSelection] mov edx, [edi+RECT.bottom] mov eax, [edi+RECT.right] sub edx, [edi+RECT.top] sub eax, [edi+RECT.left] push edx ; height push eax ; width mov eax, [edi+RECT.left] mov edx, [edi+RECT.top] add eax, [.offs_x] add edx, [.offs_y] ; stdcall BlendSolidRect, [.pDstImage], eax, edx ; remaining arguments from the stack. stdcall XorRect, [.pDstImage], eax, edx ; remaining from the stack .next: add edi, sizeof.RECT dec ecx jnz .loop .selection_ok: stdcall FreeMem ; from the stack popad inherited [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] return endp method TAsmEdit.__DrawScrollbar ; .scrollbar begin pushad cmp [.scrollbar], scrollX je .finish mov esi, [.self] mov edi, [esi+TAsmEdit._search_index] test edi, edi jz .finish mov ebx, [esi+TAsmEdit._imgY] test ebx, ebx jz .finish cmp [esi+TAsmEdit._scrXY.max+4], 0 je .finish mov eax, [ebx+TImage.wrapW] mov ebx, [ebx+TImage.wrapH] sub ebx, eax lea eax, [esi+TAsmEdit._scrXY] stdcall _SliderPixels2, eax, scrollY, ebx sub ebx, edx ; the height of the scroller without the slider. mov ecx, [edi+TArray.count] .loop: dec ecx js .finish mov eax, [edi + TArray.array + sizeof.POINT*ecx + POINT.y] mul ebx div [esi+TAsmEdit._scrXY.max+4] stdcall DrawSolidRect, [esi+TAsmEdit._imgY], 0, eax, [GUI.scrollWidth], 1, $ffff0000 jmp .loop .finish: inherited [.scrollbar] popad return endp method TAsmEdit.__RenderLine ;, .pTextLine, .clBackground .img dd ? .gap_start dd ? .gap_end dd ? .txt_end dd ? .x dd ? .y dd ? begin pushad mov esi, [.self] mov eax, [esi+TAsmEdit._font_asc] mov [.y], eax mov esi, [.pTextLine] ; Should not be called with invalid [.pTextLine] mov edi, [esi+TTextLine.syn_array] test edi, edi jnz .syntax_ok get eax, [.self], TAsmEdit:SyntaxProc test eax, eax jz .syntax_ok stdcall eax, esi, 0 ; the syntax context is set to 0 here, but should be read from the previous line. mov edi, [esi+TTextLine.syn_array] .syntax_ok: mov eax, [esi+TTextLine.imgRendered] mov [.img], eax mov eax, [esi+TTextLine.GapBegin] mov ecx, [esi+TTextLine.GapEnd] mov edx, [esi+TTextLine.Length] add eax, esi add ecx, esi add edx, esi mov [.gap_start], eax mov [.gap_end], ecx mov [.txt_end], edx xor ebx, ebx ; position inside the TTextChunk array. mov [.x], ebx dec ebx .loop: cmp esi, [.txt_end] jae .end_of_line test edi, edi jz .default_color inc ebx cmp ebx, [edi + TArray.count] jae .default_color movzx ecx, byte [edi + TArray.array + sizeof.TTextChunk * ebx + TTextChunk.color] movzx edx, word [edi + TArray.array + sizeof.TTextChunk * ebx + TTextChunk.bytes] and ecx, ciExtended + $0f test ecx, ciExtended jz .chunk_ok inc ebx ; next chunk contains only the second word of the length. movzx eax, word [edi + TArray.array + sizeof.TTextChunk * ebx + TTextChunk.bytes] shl eax, 16 add edx, eax and ecx, $0f .chunk_ok: lea eax, [edx+esi] cmp esi, [.gap_end] jae .ofs_ok cmp eax, [.gap_start] jbe .ofs_ok mov eax, [.gap_start] sub eax, esi jz @f call .draw_current_chunk @@: mov esi, [.gap_end] sub edx, eax ; remaining of the chunk on the other side of the gap. .ofs_ok: mov eax, edx test eax, eax jz .loop call .draw_current_chunk add esi, edx jmp .loop .default_color: xor ecx, ecx mov edx, [.txt_end] sub edx, esi jnz .chunk_ok .end_of_line: mov esi, [.pTextLine] or [esi+TTextLine.flags], tlfRendered popad return .draw_current_chunk: push eax ebx edx push [ASM.clText+4*ecx] push [ASM.Font] push [.y] push [.x] push eax push esi push [.img] stdcall GetTextBounds, esi, eax, [ASM.Font] mov edx, [.img] stdcall DrawSolidRect, edx, [.x], 0, eax, [edx+TImage.wrapH], [.clBackground] stdcall DrawString ; the arguments are in the stack: [.img], esi, eax, [.x], [.y], [ASM.Font], [ASM.clText+4*ecx] add [.x], eax pop edx ebx eax retn endp method TAsmEdit.EventMouseMove ;, .x, .y, .kbdState begin inherited [.x], [.y], [.kbdState] jc .processed pushad mov esi, [.self] cmp [esi+TAsmEdit._drag_button], mbLeft jne .finish xor ecx, ecx exec esi, TAsmEdit:SelChangeBegin mov eax, [.x] sub eax, [esi+TAsmEdit._left_margin] cdq idiv [esi+TAsmEdit._font_width] shl edx, 1 sbb eax, 0 get ebx, esi, TAsmEdit:PosX add eax, ebx cmovs eax, ecx set esi, TAsmEdit:CaretX, eax mov [esi+TAsmEdit._selEnd.x], eax mov eax, [.y] cdq idiv [esi+TAsmEdit._font_height] shl edx, 1 sbb eax, 0 get ebx, esi, TAsmEdit:PosY add eax, ebx cmovs eax, ecx set esi, TAsmEdit:CaretY, eax mov [esi+TAsmEdit._selEnd.y], eax exec esi, TAsmEdit:UpdateCaretPos exec esi, TAsmEdit:SelChangeEnd exec esi, TAsmEdit:ScrollToCaretX mov ecx, eax exec esi, TAsmEdit:ScrollToCaretY or ecx, eax jz .finish ; repeat the scroll if the mouse is outside the window! stdcall ZeroMouseMove .finish: popad .processed: return endp method TAsmEdit.EventButtonPress ;, .button, .kbdState, .x, .y begin inherited [.button], [.kbdState], [.x], [.y] jc .processed pushad mov esi, [.self] mov edx, [.button] cmp edx, mbRight jne .set_drag exec esi, TAsmEdit:HasSelection jc .processed .set_drag: mov [esi+TAsmEdit._drag_button], edx stdcall SetMouseCapture, esi exec esi, TAsmEdit:SelChangeBegin xor ecx, ecx mov eax, [.x] sub eax, [esi+TAsmEdit._left_margin] cdq idiv [esi+TAsmEdit._font_width] get ebx, esi, TAsmEdit:PosX add eax, ebx cmovs eax, ecx set esi, TAsmEdit:CaretX, eax mov [esi+TAsmEdit._selStart.x], eax mov [esi+TAsmEdit._selEnd.x], eax mov eax, [.y] cdq idiv [esi+TAsmEdit._font_height] get ebx, esi, TAsmEdit:PosY add eax, ebx cmovs eax, ecx set esi, TAsmEdit:CaretY, eax mov [esi+TAsmEdit._selStart.y], eax mov [esi+TAsmEdit._selEnd.y], eax exec esi, TAsmEdit:UpdateCaretPos exec esi, TAsmEdit:SelChangeEnd popad .processed: return endp method TAsmEdit.EventButtonRelease ;, .button, .kbdState, .x, .y begin push eax mov eax, [.self] and [eax+TAsmEdit._drag_button], 0 stdcall SetMouseCapture, 0 pop eax inherited [.button], [.kbdState], [.x], [.y] return endp method TAsmEdit.EventButtonDoubleClick begin inherited [.button], [.kbdState], [.x], [.y] jc .finish pushad mov esi, [.self] mov edi, [esi+TAsmEdit._lines] mov ecx, [esi+TAsmEdit._caretPos.y] shl ecx, 2 mov eax, [edi+TText.GapBegin] cmp ecx, eax cmovae eax, [edi+TText.GapEnd] sub eax, [edi+TText.GapBegin] add eax, ecx cmp eax, [edi+TText.Length] jae .not_a_word mov edi, [edi+eax] stdcall TextIndexToPos, edi, [esi+TAsmEdit._caretPos.x] jc .not_a_word mov ebx, eax stdcall TextMoveGap, edi, ebx cmp ebx, [edi+TTextLine.GapBegin] ja .not_a_word push ebx .loop_back: dec ebx js .start_is_here mov al, [edi+ebx+TTextLine] stdcall RecognizeChar, SepMapSansPoints jnc .loop_back .start_is_here: inc ebx stdcall TextMoveGap, edi, ebx ; the whole word is after the gap. add ebx, [edi+TTextLine.GapEnd] sub ebx, [edi+TTextLine.GapBegin] mov ecx, ebx ; start of the word. pop ebx add ebx, [edi+TTextLine.GapEnd] sub ebx, [edi+TTextLine.GapBegin] dec ebx .loop_forward: inc ebx cmp ebx, [edi+TTextLine.Length] jae .end_is_here mov al, [edi+ebx+TTextLine] stdcall RecognizeChar, SepMapWithPoints jnc .loop_forward .end_is_here: cmp ebx, ecx je .not_a_word ofs2pos ecx, edi stdcall TextPosToIndex, edi, ecx mov ecx, eax ofs2pos ebx, edi stdcall TextPosToIndex, edi, ebx mov ebx, eax set esi, TAsmEdit:CaretX, ecx exec esi, TAsmEdit:SelStartHere set esi, TAsmEdit:CaretX, ebx exec esi, TAsmEdit:SelEndHere exec esi, TAsmEdit:UpdateCaretPos popad return .not_a_word: xor eax, eax stc .exit: popad .finish: return endp method TAsmEdit.EventScroll begin inherited [.direction], [.command], [.value] jc .finish push esi mov esi, [.self] cmp [.direction], scrollX je .y_ok exec esi, TAsmEdit:__InvalidateImgCache mov [esi+TAsmEdit._img_margin_valid], 0 .y_ok: exec esi, TAsmEdit:UpdateCaretPos exec esi, TAsmEdit:RectChanged2, 0 pop esi .finish: return endp ; returns in EDX the rectangle list. method TAsmEdit._AddSelRectanglesAbs ;, .pRectList begin pushad mov esi, [.self] mov edx, [.pRectList] test edx, edx jnz .array_ok stdcall CreateArray, sizeof.RECT mov edx, eax .array_ok: mov eax, [esi+TAsmEdit._selStart.x] mov ecx, [esi+TAsmEdit._selStart.y] mov ebx, [esi+TAsmEdit._selEnd.x] mov edi, [esi+TAsmEdit._selEnd.y] test [esi+TAsmEdit._mode], aemBlockSelection jz .add_char ; block selection cmp eax, ebx je .end_sel push eax stdcall AddArrayItems, edx, 1 mov esi, eax pop eax mov [esi+RECT.left], eax mov [esi+RECT.right], ebx mov [esi+RECT.top], ecx mov [esi+RECT.bottom], edi stdcall RectSort, esi inc [esi+RECT.bottom] jmp .end_sel .add_char: cmp ecx, edi ; caret_y and selection_y jl .order_ok jg .reverse cmp eax, ebx ; caret_x and caret_y je .end_sel jl .order_ok .reverse: xchg eax, ebx xchg ecx, edi ; now eax,ecx are the begining of the selection and ebx, edi the end of the selection. .order_ok: test eax, eax jz .more_than_one push eax stdcall AddArrayItems, edx, 1 mov esi, eax pop eax mov [esi+RECT.left], eax mov [esi+RECT.top], ecx inc ecx mov [esi+RECT.bottom], ecx mov [esi+RECT.right], $7fffffff cmp ecx, edi je .maybe_one jb .more_than_one ; one line selection. mov [esi+RECT.right], ebx jmp .end_sel .maybe_one: test ebx, ebx jz .end_sel .more_than_one: cmp ecx, edi je .final_rect stdcall AddArrayItems, edx, 1 mov esi, eax mov [esi+RECT.left], 0 mov [esi+RECT.top], ecx mov [esi+RECT.right], $7fffffff mov [esi+RECT.bottom], edi .final_rect: test ebx, ebx jz .end_sel stdcall AddArrayItems, edx, 1 mov esi, eax mov [esi+RECT.left], 0 mov [esi+RECT.top], edi inc edi mov [esi+RECT.right], ebx mov [esi+RECT.bottom], edi .end_sel: mov [esp+4*regEDX], edx popad return endp ; returns in EDX the rectangle list. method TAsmEdit._AddSelRectangles ;, .pRectList .rect1 RECT .rect2 RECT .rect3 RECT .client RECT begin pushad xor eax, eax lea edi, [.rect1] mov ecx, sizeof.RECT * 4 / 4 rep stosd mov esi, [.self] mov edx, [.pRectList] test edx, edx jnz .array_ok stdcall CreateArray, sizeof.RECT mov edx, eax .array_ok: mov eax, [esi+TAsmEdit._width_ch] mov ecx, [esi+TAsmEdit._height_ch] mov [.client.right], eax mov [.client.bottom], ecx mov eax, [esi+TAsmEdit._selStart.x] mov ecx, [esi+TAsmEdit._selStart.y] mov ebx, [esi+TAsmEdit._selEnd.x] mov edi, [esi+TAsmEdit._selEnd.y] test [esi+TAsmEdit._mode], aemBlockSelection jnz .add_block cmp ecx, edi ; caret_y and selection_y jl .order_ok jg .reverse cmp eax, ebx ; caret_x and caret_y je .finish jl .order_ok .reverse: xchg eax, ebx xchg ecx, edi ; now eax,ecx is the begining of the selection and ebx, edi the end of the selection. .order_ok: mov [.rect1.left], eax mov [.rect1.top], ecx mov [.rect1.right], $7fffffff inc ecx mov [.rect1.bottom], ecx cmp ecx, edi ; begin_y and end_y jl .first_ok je .middle_ok ; there is only one line selection mov [.rect1.right], ebx jmp .rect1_only .first_ok: ; mov [.rect2.left], 0 ; already 0 mov [.rect2.top], ecx mov [.rect2.right], $7fffffff mov [.rect2.bottom], edi .middle_ok: ; mov [.rect3.left], 0 ; already 0 mov [.rect3.top], edi mov [.rect3.right], ebx inc edi mov [.rect3.bottom], edi ; now offset rectangles get eax, esi, TAsmEdit:PosX get ecx, esi, TAsmEdit:PosY sub [.rect1.left], eax sub [.rect1.top], ecx sub [.rect1.right], eax sub [.rect1.bottom], ecx sub [.rect2.left], eax sub [.rect2.top], ecx sub [.rect2.right], eax sub [.rect2.bottom], ecx sub [.rect3.left], eax sub [.rect3.top], ecx sub [.rect3.right], eax sub [.rect3.bottom], ecx lea ecx, [.client] lea eax, [.rect1] stdcall RectIntersect2, eax, ecx jc .rect1_ok stdcall RectListAdd, edx, eax .rect1_ok: lea eax, [.rect2] stdcall RectIntersect2, eax, ecx jc .rect2_ok stdcall RectListAdd, edx, eax .rect2_ok: lea eax, [.rect3] stdcall RectIntersect2, eax, ecx jc .finish stdcall RectListAdd, edx, eax jmp .finish .add_block: mov [.rect1.left], eax mov [.rect1.right], ebx mov [.rect1.top], ecx mov [.rect1.bottom], edi lea eax, [.rect1] stdcall RectSort, eax inc [.rect1.bottom] .rect1_only: get eax, esi, TAsmEdit:PosX get ecx, esi, TAsmEdit:PosY sub [.rect1.left], eax sub [.rect1.top], ecx sub [.rect1.right], eax sub [.rect1.bottom], ecx lea eax, [.rect1] lea ecx, [.client] stdcall RectIntersect2, eax, ecx jc .finish stdcall RectListAdd, edx, eax .finish: mov [esp+4*regEDX], edx popad return endp method TAsmEdit.SetSyntaxProc begin pushad mov esi, [.self] mov eax, [.value] xchg eax, [esi+TAsmEdit._syntax_proc] cmp eax, [.value] je .finish ; if the syntax procedure were changed, then ; free all syntax arrays from the lines and ; invalidate the rendered images. mov edi, [esi+TAsmEdit._lines] xor ecx, ecx .loop: mov eax, ecx shl eax, 2 cmp eax, [edi+TText.GapBegin] jb @f add eax, [edi+TText.GapEnd] sub eax, [edi+TText.GapBegin] @@: cmp eax, [edi+TText.Length] jae .refresh mov eax, [edi+eax] xor edx, edx xchg edx, [eax+TTextLine.syn_array] stdcall FreeMem, edx and [eax+TTextLine.flags], not tlfRendered ; set the line not rendered. inc ecx jmp .loop .refresh: and [esi+TAsmEdit._img_margin_valid], 0 exec esi, TAsmEdit:RectChanged2, 0 .finish: popad return endp method TAsmEdit.AddChar ;, .utf8 begin pushad mov esi, [.self] mov ebx, [esi+TAsmEdit._caretPos.y] exec esi, TAsmEdit:TextLine, ebx, TRUE mov edi, eax ; change the undo group level for every space character in the line. mov eax, [.utf8] cmp eax, ' ' jne .level_ok cmp [esi+TAsmEdit._prev_char], ' ' je .level_ok inc [esi+TAsmEdit._UndoLevel] .level_ok: mov [esi+TAsmEdit._prev_char], eax exec esi, TAsmEdit:SaveForUndo, ebx, chopChanged exec esi, TAsmEdit:AddTrailingSpaces, ebx, [esi+TAsmEdit._caretPos.x] test [esi+TAsmEdit._mode], aemOverwrite jz .ins_ok exec esi, TAsmEdit:DeleteChar, ebx, [esi+TAsmEdit._caretPos.x] .ins_ok: stdcall TextIndexToPos, [edi], [esi+TAsmEdit._caretPos.x] stdcall TextMoveGap, [edi], eax stdcall TextAddChar, [edi], [.utf8] mov [edi], edx push [edx+TTextLine.ch_len] inc [edx+TTextLine.ch_len] push [edx+TTextLine.ch_len] stdcall IncCount, [esi+TAsmEdit._line_widths] ; count from the stack! stdcall DecCount, edx ; count from the stack! mov [esi+TAsmEdit._line_widths], edx and [edx+TTextLine.flags], not tlfRendered exec esi, TAsmEdit:DelTrailingSpaces, [esi+TAsmEdit._caretPos.y] exec esi, TAsmEdit:CaretLeftRight, 1 popad return endp method TAsmEdit.EventKeyPress .selCmd dd ? .rect RECT begin inherited [.utf8], [.scancode], [.kbdState] jnc .not_processed return .not_processed: pushad mov esi, [.self] ; check the keys mov eax, [.utf8] ; OutputValue "Key status: ", [.kbdState], 16, 8 ; OutputValue "Key utf8: ", eax, 16, 8 ; OutputValue "Key scancode: ", [.scancode], 16, 8 test eax, eax jz .no_char cmp eax, $20 jb .ctrl_char cmp eax, $7f je .no_char ; here handle usual typing! OutputValue "Character pressed: ", eax, 16, 8 test [.kbdState], Alt or Ctrl ; here Alt and Ctrl should be not pressed. jnz .finish_not_processed call .line_render_rect push eax exec esi, TAsmEdit:DeleteSelection pop eax exec esi, TAsmEdit:AddChar, eax call .render_changed_line jmp .finish_processed .ctrl_char: cmp eax, 8 ; BackSpace je .backspacekey cmp eax, 9 ; tab je .tabkey cmp eax, 13 ; Enter je .enterkey .no_char: mov eax, [.scancode] cmp eax, keyF5 je .refresh ; moving commands ; ignore the modifier keys because they break the _selCmd field in TAsmEdit ; and they are not used for control of the editor. cmp eax, keyShiftLeft je .finish_not_processed cmp eax, keyShiftRight je .finish_not_processed cmp eax, keyCtrlLeft je .finish_not_processed cmp eax, keyCtrlRight je .finish_not_processed cmp eax, keyAltLeft je .finish_not_processed cmp eax, keyAltRight je .finish_not_processed ; what is the selection command? mov ecx, [.kbdState] and ecx, maskShift xchg ecx, [esi+TAsmEdit._selCmd] mov [esi+TAsmEdit._selCmdPrev], ecx cmp [esi+TAsmEdit._selCmd], 0 je .first_sel_ok exec esi, TAsmEdit:SelChangeBegin cmp [esi+TAsmEdit._selCmdPrev], 0 jne .first_sel_ok exec esi, TAsmEdit:SelStartHere exec esi, TAsmEdit:SelEndHere .first_sel_ok: mov eax, [.scancode] inc [esi+TAsmEdit._UndoLevel] cmp eax, keyLeftNumpad je .left cmp eax, keyLeft je .left cmp eax, keyRightNumpad je .right cmp eax, keyRight je .right cmp eax, keyHomeNumpad je .homekey cmp eax, keyHome je .homekey cmp eax, keyEndNumpad je .endkey cmp eax, keyEnd je .endkey cmp eax, keyPgUpNumpad je .pgupkey cmp eax, keyPgUp je .pgupkey cmp eax, keyPgDnNumpad je .pgdnkey cmp eax, keyPgDown je .pgdnkey cmp eax, keyUpNumpad je .up cmp eax, keyUp je .up cmp eax, keyDownNumpad je .down cmp eax, keyDown je .down dec [esi+TAsmEdit._UndoLevel] ; end of moving commands cmp eax, keyInsNumpad je .insertkey cmp eax, keyInsert je .insertkey cmp eax, keyDelNumpad je .delkey cmp eax, keyDelete je .delkey jmp .endselect_not_processed .tabkey: test [.kbdState], maskCtrl or maskAlt jnz .finish_not_processed call .line_render_rect test [esi+TAsmEdit._options], aeoSmartTabs jz .classic_tabs mov eax, [esi+TAsmEdit._caretPos.x] inc eax exec esi, TAsmEdit:GetSmartTab, [esi+TAsmEdit._caretPos.y], eax mov ecx, eax jnc .tab_pos .classic_tabs: mov ecx, [esi+TAsmEdit._caretPos.x] add ecx, 8 and ecx, $fffffff8 .tab_pos: sub ecx, [esi+TAsmEdit._caretPos.x] .spadd: dec ecx js .end_tab exec esi, TAsmEdit:AddChar, ' ' jmp .spadd .end_tab: call .render_changed_line jmp .finish_processed .enterkey: test [.kbdState], maskCtrl or maskShift or maskAlt jnz .finish_not_processed xor eax, eax test [esi+TAsmEdit._mode], aemOverwrite jnz .split_ok exec esi, TAsmEdit:SplitLine, -1, 0 inc [esi+TAsmEdit._UndoLevel] .split_ok: test [esi+TAsmEdit._mode], aemBlockSelection jnz .x_ok set esi, TAsmEdit:CaretX, eax .x_ok: exec esi, TAsmEdit:ScrollToCaretX exec esi, TAsmEdit:CaretUpDown, 1, FALSE exec esi, TAsmEdit:ComputeLeftMarginWidth exec esi, TAsmEdit:__UpdateImages exec esi, TAsmEdit:UpdateScrollBar exec esi, TAsmEdit:UpdateCaretPos and [esi+TAsmEdit._img_margin_valid], 0 exec esi, TAsmEdit:RectChanged2, 0 jmp .finish_processed .refresh: xor eax, eax mov [esi+TAsmEdit._img_margin_valid], eax exec esi, TAsmEdit:RectChanged2, eax jmp .finish_processed ; caret moving commands! .left: test [.kbdState], maskCtrl jnz .left_word exec esi, TAsmEdit:CaretLeftRight, -1 jmp .endmove .left_word: exec esi, TAsmEdit:CaretWordBack jmp .endmove .right: test [.kbdState], maskCtrl jnz .right_word exec esi, TAsmEdit:CaretLeftRight, 1 jmp .endmove .right_word: exec esi, TAsmEdit:CaretWordForward jmp .endmove .up: test [.kbdState], maskCtrl jnz .prev_bookmark exec esi, TAsmEdit:CaretUpDown, -1, FALSE jmp .endmove .prev_bookmark: exec esi, TAsmEdit:GoPrevBookmark jmp .endmove .down: test [.kbdState], maskCtrl jnz .next_bookmark exec esi, TAsmEdit:CaretUpDown, 1, FALSE jmp .endmove .next_bookmark: exec esi, TAsmEdit:GoNextBookmark jmp .endmove .homekey: test [.kbdState], maskCtrl jnz .start_of_scr exec esi, TAsmEdit:CaretHome jmp .endmove .start_of_scr: exec esi, TAsmEdit:CaretScrHome jmp .endmove .endkey: test [.kbdState], maskCtrl jnz .end_of_scr exec esi, TAsmEdit:CaretEnd jmp .endmove .end_of_scr: exec esi, TAsmEdit:CaretScrEnd jmp .endmove .pgupkey: test [.kbdState], maskCtrl jnz .start_of_text mov eax, [esi+TAsmEdit._height_ch_nav] neg eax exec esi, TAsmEdit:CaretUpDown, eax, TRUE jmp .endmove .start_of_text: exec esi, TAsmEdit:CaretTxtHome jmp .endmove .pgdnkey: test [.kbdState], maskCtrl jnz .end_of_text exec esi, TAsmEdit:CaretUpDown, [esi+TAsmEdit._height_ch_nav], TRUE jmp .endmove .end_of_text: exec esi, TAsmEdit:CaretTxtEnd jmp .endmove .insertkey: get eax, esi, TAsmEdit:Mode mov edx, aemOverwrite mov ecx, [.kbdState] and ecx, maskCtrl + maskAlt cmp ecx, maskCtrl + maskAlt jne .ins_mask_ok mov edx, aemBlockSelection .ins_mask_ok: xor eax, edx set esi, TAsmEdit:Mode, eax jmp .endselect_processed .backspacekey: cmp [esi+TAsmEdit._caretPos.x], 0 jne .do_back test [esi+TAsmEdit._mode], aemOverwrite jnz .do_back cmp [esi+TAsmEdit._caretPos.y], 0 je .finish_processed exec esi, TAsmEdit:CaretUpDown, -1, FALSE exec esi, TAsmEdit:CaretEnd jmp .delkey .do_back: exec esi, TAsmEdit:AddTrailingSpaces, -1, 0 exec esi, TAsmEdit:CaretLeftRight, -1 .delkey: exec esi, TAsmEdit:DeleteSelection jnc .del_refresh exec esi, TAsmEdit:AddTrailingSpaces, -1, 0 test [esi+TAsmEdit._mode], aemOverwrite jz .del_it exec esi, TAsmEdit:AddChar, ' ' exec esi, TAsmEdit:CaretLeftRight, -1 jmp .del_refresh .del_it: exec esi, TAsmEdit:DeleteChar, -1, 0 jnc .del_refresh ; notice that the undo/redo group is not increased in order to allow ; another change operations on this line to be grouped in one TUndoInfo ; structure. exec esi, TAsmEdit:JoinNextLine, -1 inc [esi+TAsmEdit._UndoLevel] .del_refresh: exec esi, TAsmEdit:DelTrailingSpaces, -1 and [esi+TAsmEdit._img_margin_valid], 0 exec esi, TAsmEdit:RectChanged2, 0 exec esi, TAsmEdit:UpdateScrollBar exec esi, TAsmEdit:UpdateCaretPos exec esi, TAsmEdit:SelChangeBegin exec esi, TAsmEdit:SelStartHere exec esi, TAsmEdit:SelEndHere exec esi, TAsmEdit:SelChangeEnd jmp .finish_processed .endmove: cmp [esi+TAsmEdit._selCmd], 0 jne .endselect_processed test [esi+TAsmEdit._options], aeoPersistentSelection jnz .endselect_processed exec esi, TAsmEdit:SelStartHere exec esi, TAsmEdit:SelEndHere exec esi, TAsmEdit:SelChangeEnd jmp .finish_processed .endselect_processed: cmp [esi+TAsmEdit._selCmd], 0 je .finish_processed exec esi, TAsmEdit:SelEndHere exec esi, TAsmEdit:SelChangeEnd .finish_processed: stc popad return .endselect_not_processed: cmp [esi+TAsmEdit._selCmd], 0 je .finish_not_processed exec esi, TAsmEdit:SelChangeEnd .finish_not_processed: clc popad return ; ------------------------------------- .line_render_rect: push eax mov ecx, [esi+TAsmEdit._caretPos.x] mov edx, [esi+TAsmEdit._caretPos.y] get eax, esi, TAsmEdit:PosX get ebx, esi, TAsmEdit:PosY sub ecx, eax sub edx, ebx mov [.rect.left], ecx mov [.rect.top], edx inc edx mov [.rect.bottom], edx mov ecx, [esi+TAsmEdit._width_ch] mov [.rect.right], ecx pop eax retn .render_changed_line: ; see if the left margin needs update. exec esi, TAsmEdit:ComputeLeftMarginWidth jnc .images_ok exec esi, TAsmEdit:__UpdateImages ; If the left margin is changed, the text image may need an update! exec esi, TAsmEdit:RectChanged2, 0 .images_ok: ; render the text of the line. mov eax, [.rect.top] imul eax, [esi+TAsmEdit._font_height] mov edx, [esi+TAsmEdit._width] sub edx, [esi+TAsmEdit._left_margin] exec esi, TAsmEdit:RectChangedXY2, [esi+TAsmEdit._left_margin], eax, edx, [esi+TAsmEdit._font_height] exec esi, TAsmEdit:UpdateScrollBar exec esi, TAsmEdit:UpdateCaretPos retn endp method TAsmEdit.EventFocusIn begin pushad stdcall CaretAttach, [.self] exec [.self], TAsmEdit:UpdateCaretPos popad inherited return endp method TAsmEdit.EventFocusOut begin pushad stdcall CaretAttach, 0 popad inherited return endp ; Call after scrolling the content in order to move the caret to the proper position. method TAsmEdit.UpdateCaretPos .zero dd ? begin pushad mov esi, [.self] xor edi, edi mov [.zero], edi inc edi mov eax, [esi+TAsmEdit._caretPos.x] mov ebx, [esi+TAsmEdit._caretPos.y] get edx, esi, TAsmEdit:PosX sub eax, edx cmovs edi, [.zero] ; hide imul eax, [esi+TAsmEdit._font_width] add eax, [esi+TAsmEdit._left_margin] cmp eax, [esi+TAsmEdit._width] cmovae edi, [.zero] get edx, esi, TAsmEdit:PosY sub ebx, edx cmovs edi, [.zero] mov edx, 2 mov ecx, 2 test [esi+TAsmEdit._mode], aemOverwrite cmovnz ecx, [esi+TAsmEdit._font_width] cmovnz edx, [esi+TAsmEdit._font_height] test [esi+TAsmEdit._options], aeoConsoleCaret cmovnz ecx, [esi+TAsmEdit._font_width] cmovz edx, [esi+TAsmEdit._font_height] imul ebx, [esi+TAsmEdit._font_height] add ebx, [esi+TAsmEdit._font_height] cmp ebx, [esi+TAsmEdit._height] cmovae edi, [.zero] sub ebx, edx stdcall CaretChange, [.self], eax, ebx, ecx, edx, edi cmp [esi+TAsmEdit._on_caret_move], 0 je .finish stdcall [esi+TAsmEdit._on_caret_move], esi .finish: popad return endp method TAsmEdit._RenderLM ; .pImage, .from, .to .last dd ? begin pushad cmp [.pImage], 0 je .end_lines mov esi, [.self] mov eax, [esi+TAsmEdit._height_ch] xor ebx, ebx mov ecx, [.from] mov edx, [.to] cmp ecx, ebx ; .from should be >=0 cmovl ecx, ebx cmp edx, ebx cmovl edx, ebx cmp edx, eax cmova edx, eax ; edx = max(PosY+height_ch, [.to]) cmp ecx, edx jae .end_lines mov [.from], ecx mov [.to], edx get ebx, esi, TAsmEdit:PosY lea ebx, [ebx+ecx+1] ; line numbers are from 1 mov eax, [esi+TAsmEdit._font_height] imul ecx, eax imul edx, eax push edx mov edx, [esi+TAsmEdit._lines] mov eax, [edx+TText.Length] add eax, [edx+TText.GapBegin] sub eax, [edx+TText.GapEnd] shr eax, 2 mov [.last], eax pop edx .lines_loop: cmp ecx, edx jae .end_lines ; background mov eax, [esi+TAsmEdit._left_margin] dec eax stdcall DrawSolidRect, [.pImage], 0, ecx, eax, [esi+TAsmEdit._font_height], [ASM.clLeftMargin] stdcall DrawSolidRect, [.pImage], eax, ecx, 1, [esi+TAsmEdit._font_height], [ASM.clLeftMarginEdge] ; the number cmp ebx, [.last] ja .next pushad add ecx, [esi+TAsmEdit._font_asc] stdcall NumToStr, ebx, ntsDec or ntsUnsigned push eax stdcall StrPtr, eax push eax stdcall GetTextBounds, eax, [eax+string.len], [ASM.NumFont] mov edx, [esi+TAsmEdit._num_margin] sub edx, eax pop eax stdcall DrawString, [.pImage], eax, [eax+string.len], edx, ecx, [ASM.NumFont], [ASM.clLeftMarginText] stdcall StrDel ; from the stack popad ; get the line on y = ebx-1 lea eax, [4*ebx-4] mov edi, [esi+TAsmEdit._lines] cmp eax, [edi+TText.GapBegin] jb @f add eax, [edi+TText.GapEnd] sub eax, [edi+TText.GapBegin] @@: cmp eax, [edi+TText.Length] jae .next mov edi, [edi+eax] test edi, edi jz .next ; edi contains a pointer to the current drawn TTextLine pushad ; start position of the icons. mov eax, [esi+TAsmEdit._num_margin] add eax, [ASM.xSpcIcons] ; draw bookmark mov edx, [ASM.iconBookmark] test [edi+TTextLine.flags], tlfBookmark jz .bookmark_ok OutputValue "Bookmark on line: ", ebx, 10, -1 push [edx+TImage.wrapH] push [edx+TImage.wrapW] push 0 0 push edx mov ebx, [esi+TAsmEdit._font_height] sub ebx, [edx+TImage.wrapH] shr ebx, 1 add ebx, ecx stdcall BlendImage, [.pImage], eax, ebx ; remaining from the stack .bookmark_ok: ; draw breakpoint mov edx, [ASM.iconBreakpoints] test [edi+TTextLine.flags], tlfBreakpoint jz .breakpoint_ok push [edx+TImage.wrapH] push [edx+TImage.wrapW] push 0 0 push edx mov ebx, [esi+TAsmEdit._font_height] sub ebx, [edx+TImage.wrapH] shr ebx, 1 add ebx, ecx stdcall BlendImage, [.pImage], eax, ebx ; remaining from the stack .breakpoint_ok: popad .next: inc ebx add ecx, [esi+TAsmEdit._font_height] jmp .lines_loop .end_lines: popad return endp method TAsmEdit.UpdateScrollBar begin pushad mov esi, [.self] xor eax, eax cmp [esi+TAsmEdit._font_width], eax lea eax, [eax+1] je .xpage_ok mov eax, [esi+TAsmEdit._width_ch_nav] cmp eax, 0 jg .xpage_ok xor eax, eax inc eax .xpage_ok: set esi, TAsmEdit:PageX, eax mov ecx, [esi+TAsmEdit._line_widths] mov edx, [ecx+TArray.count] test edx, edx jz .xsize_ok mov edx, [ecx+TArray.array+sizeof.TCounter*edx+TCounter.value - sizeof.TCounter] sub edx, eax jg .xsize_ok xor edx, edx ; hide the scrollbar. set esi, TAsmEdit:PosX, edx ; scroll to 0 in this case. .xsize_ok: set esi, TAsmEdit:MaxX, edx get eax, esi, TAsmEdit:PosX cmp eax, edx cmovg eax, edx set esi, TAsmEdit:PosX, eax ; set Y scrollers page xor eax, eax cmp [esi+TAsmEdit._font_height], eax lea eax, [eax+1] je .ypage_ok mov eax, [esi+TAsmEdit._height_ch_nav] cmp eax, 0 jg .ypage_ok xor eax, eax inc eax .ypage_ok: set esi, TAsmEdit:PageY, eax mov edx, [esi+TAsmEdit._lines] mov ecx, [edx+TText.Length] add ecx, [edx+TText.GapBegin] sub ecx, [edx+TText.GapEnd] shr ecx, 2 sub ecx, eax jg .ymax_ok xor ecx, ecx ; hide the scrollbar set esi, TAsmEdit:PosY, ecx ; scroll to 0 in this case. .ymax_ok: set esi, TAsmEdit:MaxY, ecx get eax, esi, TAsmEdit:PosY cmp eax, ecx cmovg eax, ecx set esi, TAsmEdit:PosY, eax popad return endp ; general methods method TAsmEdit.__UpdateImages begin inherited pushad mov esi, [.self] ; Process ._imgLeftMargin mov edi, [esi+TAsmEdit._imgMargin] mov ecx, [esi+TAsmEdit._left_margin] mov edx, [esi+TAsmEdit._height] mov eax, [esi+TAsmEdit._img_margin_valid] test edi, edi jz .create_new jecxz .destroy cmp ecx, [edi+TImage.width] ja .destroy cmp edx, [edi+TImage.height] jbe .set_wrap .destroy: stdcall DestroyImage, edi xor edi, edi xor eax, eax .create_new: jecxz .store lea ebx, [edx+SCREEN_MORE_Y] xor eax, eax ; on error, CreateImage does not change eax! stdcall CreateImage2, ecx, ebx, FALSE mov edi, eax xor eax, eax .set_wrap: xor ebx, ebx cmp edx, [edi+TImage.wrapH] cmova eax, ebx ; clear valid flag, if the new size is bigger than the old. stdcall SetImageWrap, edi, ecx, edx .store: mov [esi+TAsmEdit._imgMargin], edi mov [esi+TAsmEdit._img_margin_valid], eax test eax, eax jnz .finish exec esi, TAsmEdit:RectChangedXY2, 0, 0, ecx, edx .finish: popad return endp method TAsmEdit.Resize .rect RECT .rect_ch RECT begin pushad mov esi, [.self] mov ebx, [esi+TAsmEdit._width] ; the old values mov ecx, [esi+TAsmEdit._height] ; of the height and width mov edi, [esi+TAsmEdit._width_ch] ; mov edx, [esi+TAsmEdit._height_ch] inherited [.newWidth], [.newHeight] exec [.self], TAsmEdit:ComputeScreenInChars cmp [esi+TAsmEdit._width], ebx jbe .render_right_ok dec edi jns @f xor edi, edi @@: mov [.rect.left], ebx mov [.rect_ch.left], edi mov ebx, [esi+TAsmEdit._width] mov edi, [esi+TAsmEdit._width_ch] mov [.rect.right], ebx mov [.rect_ch.right], edi xor eax, eax mov [.rect.top], eax mov [.rect_ch.top], eax mov eax, [esi+TAsmEdit._height] mov ebx, [esi+TAsmEdit._height_ch] mov [.rect.bottom], eax mov [.rect_ch.bottom], edx lea eax, [.rect] exec esi, TAsmEdit:RectChanged2, eax .render_right_ok: cmp [esi+TAsmEdit._height], ecx jbe .render_bottom_ok dec edx jns @f xor edx, edx @@: mov [.rect.top], ecx mov [.rect_ch.top], edx mov ecx, [esi+TAsmEdit._height] mov edx, [esi+TAsmEdit._height_ch] mov [.rect.bottom], ecx mov [.rect_ch.bottom], edx xor eax, eax mov [.rect.left], eax mov [.rect_ch.left], eax mov eax, [esi+TAsmEdit._width] mov edx, [esi+TAsmEdit._width_ch] mov [.rect.right], eax mov [.rect_ch.right], edx exec esi, TAsmEdit:_RenderLM, [esi+TAsmEdit._imgMargin], [.rect_ch.top], [.rect_ch.bottom] lea eax, [.rect] exec esi, TAsmEdit:RectChanged2, eax .render_bottom_ok: exec esi, TAsmEdit:__InvalidateImgCache exec esi, TAsmEdit:UpdateScrollBar exec [.self], TAsmEdit:ComputeScreenInChars exec esi, TAsmEdit:UpdateScrollBar exec esi, TAsmEdit:__UpdateImages popad return endp method TAsmEdit.Move begin mov eax, [Caret.pWindow] push eax cmp eax, [.self] jne @f stdcall CaretAttach, 0 @@: inherited [.newX], [.newY] pop eax cmp eax, [.self] jne @f stdcall CaretAttach, eax exec [.self], TAsmEdit:UpdateCaretPos @@: return endp ; parameters get/set methods method TAsmEdit.SetCaretX begin push eax esi mov esi, [.self] mov eax, [.value] cmp eax, [esi+TAsmEdit._caretPos.x] je .finish mov [esi+TAsmEdit._caretPos.x], eax exec esi, TAsmEdit:Highlight, [esi+TAsmEdit._caretPos.y], 0 .finish: pop esi eax return endp method TAsmEdit.SetCaretY begin push eax esi mov esi, [.self] mov eax, [.value] cmp eax, [esi+TAsmEdit._caretPos.y] je .finish xchg eax, [esi+TAsmEdit._caretPos.y] exec esi, TAsmEdit:Highlight, eax, 0 .finish: pop esi eax return endp method TAsmEdit.SetOptions begin pushad mov esi, [.self] mov eax, [.value] cmp eax, [esi+TAsmEdit._options] je .finish mov [esi+TAsmEdit._options], eax xor eax, eax mov [esi+TAsmEdit._img_margin_valid], eax exec esi, TAsmEdit:RectChanged2, eax exec esi, TAsmEdit:ComputeLeftMarginWidth exec esi, TAsmEdit:UpdateCaretPos .finish: popad return endp method TAsmEdit.SetMode begin pushad mov esi, [.self] mov eax, [.value] xchg eax, [esi+TAsmEdit._mode] cmp eax, [esi+TAsmEdit._mode] je .finish xor eax, eax exec esi, TAsmEdit:RectChanged2, eax exec esi, TAsmEdit:UpdateCaretPos cmp [esi+TAsmEdit._on_mode_change], 0 je .finish stdcall [esi+TAsmEdit._on_mode_change], esi .finish: popad return endp method TAsmEdit.SetEOL begin pushad mov esi, [.self] mov eax, [.value] xchg eax, [esi+TAsmEdit._end_of_line] cmp eax, [esi+TAsmEdit._end_of_line] je .finish set esi, TAsmEdit:Modified, TRUE .finish: popad return endp method TAsmEdit.HasSelection begin pushad mov esi, [.self] test [esi+TAsmEdit._mode], aemBlockSelection jnz .block mov eax, [esi+TAsmEdit._selStart.x] cmp eax, [esi+TAsmEdit._selEnd.x] jne .yes mov eax, [esi+TAsmEdit._selStart.y] cmp eax, [esi+TAsmEdit._selEnd.y] je .no .yes: stc popad return .no: clc popad return .block: mov eax, [esi+TAsmEdit._selEnd.x] cmp eax, [esi+TAsmEdit._selStart.x] jne .yes jmp .no endp method TAsmEdit.GetSelection .lines dd ? begin pushad exec [.self], TAsmEdit:_AddSelRectanglesAbs, 0 mov [.lines], edx lea edi, [edx+TArray.array] mov ecx, [edx+TArray.count] stdcall StrNew mov edx, eax test ecx, ecx jz .finish .rect_loop: OutputRectPtr edi mov ebx, [edi+RECT.top] .y_loop: exec [.self], TAsmEdit:TextLine, ebx, TRUE mov esi, [eax] mov eax, [esi+TTextLine.ch_len] cmp eax, [edi+RECT.right] cmova eax, [edi+RECT.right] push eax stdcall TextIndexToPos, esi, eax ; move the gap after the rectangle right bound. push eax stdcall TextMoveGap, esi, eax stdcall TextIndexToPos, esi, [edi+RECT.left] jnc .cat_it lea esp, [esp+8] ; pop 2 numbers, they are not needed cmp [edi+RECT.right], $7fffffff je .next_line mov eax, [edi+RECT.left] sub eax, [edi+RECT.right] jmp .add_sp .cat_it: add esi, eax sub [esp], eax stdcall StrCatMem, edx, esi ; length from the stack ; fill right with spaces if needed pop eax cmp [edi+RECT.right], $7fffffff je .next_line sub eax, [edi+RECT.right] jz .next_line .add_sp: stdcall StrCharCat, edx, ' ' inc eax jnz .add_sp .next_line: inc ebx cmp ebx, [edi+RECT.bottom] jge .next_rect stdcall StrCat, edx, cNewLine jmp .y_loop .next_rect: dec ecx jz .last_rect stdcall StrCat, edx, cNewLine add edi, sizeof.RECT jmp .rect_loop .last_rect: cmp [edi+RECT.right], $7fffffff jne .finish stdcall StrCat, edx, cNewLine .finish: stdcall FreeMem, [.lines] mov [esp+4*regEAX], edx ; the result string. StrDel when not needed. popad return endp ; CF = 0 if the width was not changed. ; CF = 1 if the width has been changed. method TAsmEdit.ComputeLeftMarginWidth begin pushad mov esi, [.self] xor ebx, ebx mov [esi+TAsmEdit._num_margin], ebx test [esi+TAsmEdit._options], aeoLeftMargin jz .marginok test [esi+TAsmEdit._options], aeoLineNumbers jz .marginok1 mov ecx, [esi+TAsmEdit._lines] jecxz .marginok1 mov eax, [ecx+TText.Length] add eax, [ecx+TText.GapBegin] sub eax, [ecx+TText.GapEnd] shr eax, 2 ; the number of the lines. test eax, eax jz .marginok1 call .digits imul ecx, [esi+TAsmEdit._numfont_width] add ebx, ecx add ebx, [ASM.xspcLMPadding] mov [esi+TAsmEdit._num_margin], ebx .marginok1: mov eax, [ASM.iconBreakpoints] mov ebx, [eax+TImage.width] mov eax, [ASM.iconBookmark] cmp ebx, [eax+TImage.width] cmovl ebx, [eax+TImage.width] mov eax, [ASM.iconDebugInfo] cmp ebx, [eax+TImage.width] cmovl ebx, [eax+TImage.width] add ebx, [ASM.xSpcIcons] add ebx, [ASM.xSpcIcons] add ebx, [esi+TAsmEdit._num_margin] .marginok: xchg [esi+TAsmEdit._left_margin], ebx cmp ebx, [esi+TAsmEdit._left_margin] je .finish xor eax, eax mov [esi+TAsmEdit._img_margin_valid], eax exec [.self], TAsmEdit:ComputeScreenInChars stc .finish: popad return .digits: xor ecx, ecx cmp eax, 1 ; 0 jb .edig inc ecx cmp eax, 10 ; 1 jb .edig inc ecx cmp eax, 100 ; 2 jb .edig inc ecx cmp eax, 1000 ; 3 jb .edig inc ecx cmp eax, 10000 ; 4 jb .edig inc ecx cmp eax, 100000 ; 5 jb .edig inc ecx cmp eax, 1000000 ; 6 jb .edig inc ecx cmp eax, 10000000 ; 7 jb .edig inc ecx cmp eax, 100000000 ; 8 jb .edig inc ecx cmp eax, 1000000000 ; 9 jb .edig inc ecx ; 10 .edig: retn endp method TAsmEdit.ComputeScreenInChars begin pushad mov esi, [.self] mov ebx, [esi+TAsmEdit._font_width] mov ecx, [esi+TAsmEdit._font_height] ; width_ch mov eax, [esi+TAsmEdit._width] lea eax, [eax+ebx-1] sub eax, [esi+TAsmEdit._left_margin] cdq idiv ebx mov [esi+TAsmEdit._width_ch], eax ; height_ch mov eax, [esi+TAsmEdit._height] lea eax, [eax+ecx-1] cdq idiv ecx mov [esi+TAsmEdit._height_ch], eax ; width_ch_nav xor edx, edx get eax, esi, TAsmEdit:MaxY test eax, eax ; is the vertical scrollbar hidden? cmovnz edx, [GUI.scrollWidth] mov eax, [esi+TAsmEdit._width] sub eax, [esi+TAsmEdit._left_margin] sub eax, edx cdq idiv ebx mov [esi+TAsmEdit._width_ch_nav], eax ; height_ch_nav xor edx, edx get eax, esi, TAsmEdit:MaxX test eax, eax ; is the horizontal scrollbar hidden? cmovnz edx, [GUI.scrollWidth] mov eax, [esi+TAsmEdit._height] sub eax, edx cdq idiv ecx mov [esi+TAsmEdit._height_ch_nav], eax popad return endp method TAsmEdit.ReplaceWordAtCaret begin pushad mov esi, [.self] exec esi, TAsmEdit:TextLine, -1, TRUE mov edi, [eax] exec esi, TAsmEdit:SaveForUndo, -1, chopChanged exec esi, TAsmEdit:AddTrailingSpaces, -1, 0 mov ecx, [esi+TAsmEdit._caretPos.x] ; the current caret position. stdcall TextIndexToPos, edi, ecx jc .not_a_word mov esi, eax stdcall TextMoveGap, edi, esi cmp esi, [edi+TTextLine.GapBegin] ja .not_a_word mov ebx, [.self] stdcall DecCount, [ebx+TAsmEdit._line_widths], [edi+TTextLine.ch_len] mov [ebx+TAsmEdit._line_widths], edx push esi lea esi, [edi+esi] .loop_back: dec esi call ScanBackUtf8 dec ecx dec [edi+TTextLine.ch_len] cmp esi, edi jb .start_is_here mov al, [esi] stdcall RecognizeChar, SepMapWithPoints jnc .loop_back .start_is_here: inc ecx inc [edi+TTextLine.ch_len] inc esi sub esi, edi stdcall TextMoveGap, edi, esi ; the whole word is after the gap. pop esi add esi, [edi+TTextLine.GapEnd] sub esi, [edi+TTextLine.GapBegin] lea esi, [edi+esi] mov ebx, [edi+TTextLine.Length] ; the end of the line. add ebx, edi ; maximal address. .loop_forward: cmp esi, ebx jae .end_is_here mov al, [esi] stdcall RecognizeChar, SepMapWithPoints jc .end_is_here inc esi call ScanForwardUtf8 dec [edi+TTextLine.ch_len] jmp .loop_forward .end_is_here: sub esi, edi ; position of the end mov [edi+TTextLine.GapEnd], esi ; delete the prev word. stdcall StrLenUtf8, [.new_word], -1 add ecx, eax add [edi+TTextLine.ch_len], eax mov ebx, [.self] stdcall IncCount, [ebx+TAsmEdit._line_widths], [edi+TTextLine.ch_len] mov [ebx+TAsmEdit._line_widths], edx set [.self], TAsmEdit:CaretX, ecx exec [.self], TAsmEdit:UpdateCaretPos stdcall StrLen, [.new_word] mov ecx, eax stdcall StrPtr, [.new_word] mov esi, eax stdcall TextSetGapSize, edi, ecx mov edi, edx jc .finish and [edi+TTextLine.flags], not tlfRendered ; the line will be changed so needs to be rendered. xor eax, eax xchg eax, [edi+TTextLine.syn_array] ; the syntax highlight need to be recreated. stdcall FreeMem, eax add [edi+TTextLine.GapBegin], ecx add edi, [edi+TTextLine.GapBegin] sub edi, ecx rep movsb ; refresh the line. ONLY the current line should be updated... and don't forget for the syntax highlighting. mov esi, [.self] exec esi, TAsmEdit:__UpdateImages exec esi, TAsmEdit:UpdateScrollBar exec esi, TAsmEdit:ScrollToCaretX exec esi, TAsmEdit:RectChanged2, 0 clc .finish: popad return .not_a_word: xor eax, eax stc jmp .finish endp method TAsmEdit.GetWordAtCaret begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._lines] mov ecx, [esi+TAsmEdit._caretPos.y] shl ecx, 2 mov eax, [edi+TText.GapBegin] cmp ecx, eax cmovae eax, [edi+TText.GapEnd] sub eax, [edi+TText.GapBegin] add eax, ecx cmp eax, [edi+TText.Length] jae .not_a_word mov edi, [edi+eax] stdcall TextIndexToPos, edi, [esi+TAsmEdit._caretPos.x] jc .not_a_word mov ebx, eax stdcall TextMoveGap, edi, ebx cmp ebx, [edi+TTextLine.GapBegin] ja .not_a_word push ebx .loop_back: dec ebx js .start_is_here mov al, [edi+ebx+TTextLine] stdcall RecognizeChar, SepMapSansPoints jnc .loop_back .start_is_here: inc ebx stdcall TextMoveGap, edi, ebx ; the whole word is after the gap. add ebx, [edi+TTextLine.GapEnd] sub ebx, [edi+TTextLine.GapBegin] mov ecx, ebx ; start of the word. pop ebx add ebx, [edi+TTextLine.GapEnd] sub ebx, [edi+TTextLine.GapBegin] dec ebx .loop_forward: inc ebx cmp ebx, [edi+TTextLine.Length] jae .end_is_here mov al, [edi+ebx+TTextLine] stdcall RecognizeChar, SepMapWithPoints jnc .loop_forward .end_is_here: sub ebx, ecx jz .not_a_word lea ecx, [edi+ecx] stdcall StrNew stdcall StrCatMem, eax, ecx, ebx clc .finish: mov [esp+4*regEAX], eax popad return .not_a_word: xor eax, eax stc jmp .finish endp ; Arguments: ; al - the first byte of utf8 char. ; .map - pointer to the SeparatorsMap array (16 bytes) where each bit is 1 if the char is ; separator and 0 if not. ; Returns: ; CF = 0 if the character is a regular character. ; CF = 1 if the character is a "word separator character": one of: ; +-*/=<>()[]{}:,|&~#`"' proc RecognizeChar, .map begin push eax ecx test al, $80 jnz .finish ; after test, CF = 0 movzx eax, al mov ecx, eax and ecx, 7 ; 0..7 shr eax, 3 add eax, [.map] movzx eax, byte [eax] bt eax, ecx .finish: pop ecx eax return endp struc SeparatorsMap [sep] { common if used . . db 16 dup(0) forward local ..val, ..ofs, ..mask if sep < $80 ..ofs = sep / 8 ..mask = 1 shl (sep mod 8) load ..val byte from . + ..ofs ..val = ..val or ..mask store byte ..val at . + ..ofs end if common end if } iglobal ; For use with GetWordAtCaret SepMapSansPoints SeparatorsMap $00, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0a, $0b, $0c, $0d, $0e, $0f, \ $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, ' ', '"', '#', '%', '&', '`', \ '(', ')', '*', '+', ',', '-', '/', '<', '=', '>', '[', '\', ']', '^', '{', '|', \ '}', '~', ';' ; For use with Code completion. SepMapWithPoints SeparatorsMap $00, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0a, $0b, $0c, $0d, $0e, $0f, \ $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, ' ', '"', '#', '%', '&', '`', \ '(', ')', '*', '+', ',', '-', '/', '<', '=', '>', '[', '\', ']', '^', '{', '|', \ '}', '~', ';', '.', ':' endg method TAsmEdit.GetText begin pushad stdcall TextCreate, sizeof.TText mov edx, eax mov ebx, [.self] mov esi, [ebx+TAsmEdit._lines] xor ecx, ecx jmp .enter .loop: stdcall TextAddText, edx, -1, [esi+edi] add ecx, 4 .enter: mov edi, [esi+TText.GapBegin] cmp ecx, edi cmovae edi, [esi+TText.GapEnd] sub edi, [esi+TText.GapBegin] add edi, ecx cmp edi, [esi+TText.Length] jae .end_of_text test ecx, ecx jz .loop lea eax, [ebx+TAsmEdit._end_of_line] stdcall TextAddStr2, edx, -1, eax, 4 jmp .loop .end_of_text: mov [esp+4*regEAX], edx popad return endp method TAsmEdit.SetText .context dd ? .first_eol dd ? .temp_eol dd ? begin pushad mov ebx, [.self] xor eax, eax mov [.context], eax mov [.first_eol], eax mov [.temp_eol], eax ; free the previous TText structure for the TAsmEdit._lines mov esi, [ebx+TAsmEdit._lines] test esi, esi jz .create_new_lines xor ecx, ecx .free_loop: mov eax, [esi+TText.GapBegin] cmp ecx, eax cmovae eax, [esi+TText.GapEnd] sub eax, [esi+TText.GapBegin] add eax, ecx cmp eax, [esi+TText.Length] jae .end_free_loop mov edx, [esi+eax] stdcall FreeMem, [edx+TTextLine.syn_array] stdcall RecycleImage, [edx+TTextLine.imgRendered] stdcall TextFree, edx add ecx, 4 jmp .free_loop .end_free_loop: stdcall TextFree, esi .create_new_lines: stdcall TextCreate, sizeof.TText mov [ebx+TAsmEdit._lines], eax ; new line widths array. stdcall FreeMem, [ebx+TAsmEdit._line_widths] stdcall CreateArray, sizeof.TCounter mov [ebx+TAsmEdit._line_widths], eax mov edi, [.value] test edi, edi jz .end_text stdcall StrPtr, edi mov edi, eax .text_loop: exec ebx, TAsmEdit:InsertNewLine, -1 mov esi, eax cmp byte [edi], 0 je .end_text xor ecx, ecx .line_loop: stdcall DecodeUtf8, [edi] jnc .char_ok mov eax, '?' xor edx, edx inc edx .char_ok: add edi, edx test eax, eax jz .cr_ok cmp eax, $0d je .new_line cmp eax, $0a je .new_line cmp eax, $09 je .tab_to_spc cmp eax, ' ' jae .ctrl_ok mov eax, '?' .ctrl_ok: stdcall EncodeUtf8, eax jc .end_text stdcall TextAddChar, [esi], eax mov [esi], edx jc .end_text inc ecx ; ecx counts the characters! jmp .line_loop .tab_to_spc: stdcall TextAddChar, [esi], $20 mov [esi], edx jc .end_text inc ecx test ecx, $7 jnz .tab_to_spc jmp .line_loop .new_line: and [.temp_eol], 0 mov byte [.temp_eol], al xor eax, $0d xor $0a cmp [edi], al jne .cr_ok inc edi mov byte [.temp_eol+1], al .cr_ok: cmp [.first_eol], 0 jne .eol_ok push [.temp_eol] pop [.first_eol] .eol_ok: push eax mov esi, [esi] mov [esi+TTextLine.ch_len], ecx stdcall IncCount, [ebx+TAsmEdit._line_widths], ecx mov [ebx+TAsmEdit._line_widths], edx mov eax, [ebx+TAsmEdit._syntax_proc] test eax, eax jz .syntax_ok stdcall eax, esi, [.context] mov [.context], eax .syntax_ok: pop eax test eax, eax jnz .text_loop .end_text: mov eax, [ebx+TAsmEdit._end_of_line] cmp [.first_eol], 0 cmovne eax, [.first_eol] mov [ebx+TAsmEdit._end_of_line], eax exec ebx, TAsmEdit:ComputeLeftMarginWidth exec ebx, TAsmEdit:UpdateScrollBar exec ebx, TAsmEdit:RectChanged2, 0 set ebx, TAsmEdit:Modified, FALSE DebugMsg "SetText method." popad return endp method TAsmEdit.Highlight begin push eax ecx edx exec [.self], TAsmEdit:TextLine, [.LineNum], FALSE jc .finish mov eax, [eax] mov edx, [.fHighlight] mov ecx, [eax+TTextLine.flags] and [eax+TTextLine.flags], tlfmClearHighlight or [eax+TTextLine.flags], edx cmp ecx, [eax+TTextLine.flags] je .finish and [eax+TTextLine.flags], not tlfRendered exec [.self], TAsmEdit:RectChanged2, 0 ; only one line need to be refreshed!!! .finish: pop edx ecx eax return endp ; Navigation manipulation methods. ; Returns a pointer to variable where TTextLine with absolute coordinate [.y] is stored. ; If [.y] is outside the text, appends new lines up to [.y] and returns the result. method TAsmEdit.TextLine ; .LineNum, .fAddMissing begin push esi ebx mov ebx, [.self] mov esi, [ebx+TAsmEdit._lines] mov eax, [.LineNum] test eax, eax cmovs eax, [ebx+TAsmEdit._caretPos.y] mov [.LineNum], eax shl eax, 2 cmp eax, [esi+TText.GapBegin] jb @f add eax, [esi+TText.GapEnd] sub eax, [esi+TText.GapBegin] @@: cmp eax, [esi+TText.Length] jae .create_new lea eax, [esi+eax] .finish: clc pop ebx esi return .error: stc pop ebx esi return .create_new: cmp [.fAddMissing], 0 je .error mov ebx, [esi+TText.Length] sub ebx, [esi+TText.GapEnd] add ebx, [esi+TText.GapBegin] shr ebx, 2 .loop: exec [.self], TAsmEdit:InsertNewLine, ebx push eax exec [.self], TAsmEdit:SaveForUndo, ebx, chopInserted pop eax cmp ebx, [.LineNum] lea ebx, [ebx+1] jne .loop push eax mov ebx, [.self] and [ebx+TAsmEdit._img_margin_valid], 0 exec ebx, TAsmEdit:ComputeLeftMarginWidth jnc .width_ok exec ebx, TAsmEdit:__UpdateImages exec ebx, TAsmEdit:UpdateScrollBar exec ebx, TAsmEdit:UpdateCaretPos .width_ok: exec ebx, TAsmEdit:RectChanged2, 0 pop eax inc [ebx+TAsmEdit._UndoLevel] jmp .finish endp method TAsmEdit.ScrollToCaretX begin pushad mov esi, [.self] xor ecx, ecx mov [esp+4*regEAX], ecx mov ebx, [esi+TAsmEdit._width_ch_nav] mov eax, ebx dec ebx ; max column number where to not scroll. shr eax, 2 test [esi+TAsmEdit._options], aeoScrollXMore cmovz edi, ecx cmovnz edi, eax ; scroll more than needed. get edx, esi, TAsmEdit:PosX mov eax, [esi+TAsmEdit._caretPos.x] sub eax, edx ; offset from the screen home. jz .finish ; no need to scroll js .do_scroll sub eax, ebx jle .finish neg edi .do_scroll: sub eax, edi add edx, eax cmovs edx, ecx exec esi, TAsmEdit:EventScroll, scrollX, scTrack, edx inc dword [esp+4*regEAX] .finish: exec esi, TAsmEdit:UpdateCaretPos popad return endp method TAsmEdit.ScrollToCaretY begin pushad mov esi, [.self] xor ecx, ecx mov [esp+4*regEAX], ecx mov ebx, [esi+TAsmEdit._height_ch_nav] mov eax, ebx dec ebx ; max row number where to not scroll. shr eax, 2 test [esi+TAsmEdit._options], aeoScrollYMore cmovz edi, ecx cmovnz edi, eax ; scroll more than needed. get edx, esi, TAsmEdit:PosY mov eax, [esi+TAsmEdit._caretPos.y] sub eax, edx ; offset from the screen home. jz .finish ; no need to scroll js .do_scroll sub eax, ebx jle .finish neg edi .do_scroll: sub eax, edi add edx, eax cmovs edx, ecx exec esi, TAsmEdit:EventScroll, scrollY, scTrack, edx inc dword [esp+4*regEAX] .finish: popad return endp method TAsmEdit.CenterCaretY begin pushad mov esi, [.self] mov ebx, [esi+TAsmEdit._height_ch_nav] get edx, esi, TAsmEdit:CaretY get ecx, esi, TAsmEdit:PosY sub ecx, edx add ecx, ebx cmp ecx, ebx jg .scroll cmp ecx, 0 jg .finish .scroll: shr ebx, 1 ; center of the screen xor ecx, ecx sub edx, ebx cmovs edx, ecx ; the new PosY exec esi, TAsmEdit:EventScroll, scrollY, scTrack, edx .finish: popad return endp method TAsmEdit.CaretLeftRight begin pushad mov esi, [.self] xor edx, edx ; minimal caret pos 0 mov ebx, [esi+TAsmEdit._caretPos.x] add ebx, [.count] jns .set_pos xor ebx, ebx .set_pos: set esi, TAsmEdit:CaretX, ebx exec esi, TAsmEdit:ScrollToCaretX popad return endp method TAsmEdit.CaretUpDown .rect RECT begin pushad mov esi, [.self] xor edx, edx ; minimal caret pos 0 mov ebx, [esi+TAsmEdit._caretPos.y] get ecx, esi, TAsmEdit:PosY add ebx, [.count] cmovs ebx, edx add ecx, [.count] cmovs ecx, edx mov edi, [esi+TAsmEdit._lines] mov eax, [edi+TText.Length] add eax, [edi+TText.GapBegin] sub eax, [edi+TText.GapEnd] shr eax, 2 dec eax ; max line number. cmp ebx, eax cmova ebx, eax add eax, 2 sub eax, [esi+TAsmEdit._height_ch] cmovs eax, edx cmp ecx, eax cmova ecx, eax set esi, TAsmEdit:CaretY, ebx cmp [.scroll], edx je .finish set esi, TAsmEdit:PosY, ecx jc .finish exec esi, TAsmEdit:__InvalidateImgCache and [esi+TAsmEdit._img_margin_valid], edx exec esi, TAsmEdit:RectChanged2, edx .finish: exec esi, TAsmEdit:ScrollToCaretY exec esi, TAsmEdit:UpdateCaretPos popad return endp ; Keyboard UI methods. method TAsmEdit.CaretLeft begin exec esi, TAsmEdit:CaretLeftRight, -1 return endp method TAsmEdit.CaretRight begin exec esi, TAsmEdit:CaretLeftRight, 1 return endp method TAsmEdit.CaretUp begin exec esi, TAsmEdit:CaretUpDown, -1, FALSE return endp method TAsmEdit.CaretDown begin exec esi, TAsmEdit:CaretUpDown, 1, FALSE return endp method TAsmEdit.CaretHome begin push eax mov eax, [.self] set eax, TAsmEdit:CaretX, 0 exec eax, TAsmEdit:ScrollToCaretX pop eax return endp method TAsmEdit.CaretEnd begin push esi mov esi, [.self] exec esi, TAsmEdit:TextLine, -1, TRUE mov eax, [eax] mov eax, [eax+TTextLine.ch_len] set esi, TAsmEdit:CaretX, eax exec esi, TAsmEdit:ScrollToCaretX pop esi return endp method TAsmEdit.CaretScrHome begin push esi mov esi, [.self] get eax, esi, TAsmEdit:PosY set esi, TAsmEdit:CaretY, eax exec esi, TAsmEdit:UpdateCaretPos pop esi return endp method TAsmEdit.CaretScrEnd begin push esi edx mov esi, [.self] mov eax, [esi+TAsmEdit._height_ch_nav] add eax, [esi + TAsmEdit._scrXY.pos + 4] dec eax js .finish set esi, TAsmEdit:CaretY, eax exec esi, TAsmEdit:UpdateCaretPos .finish: pop edx esi return endp method TAsmEdit.CaretTxtHome begin push ebx mov ebx, [.self] set ebx, TAsmEdit:CaretY, 0 exec ebx, TAsmEdit:ScrollToCaretY pop ebx return endp method TAsmEdit.CaretTxtEnd begin push esi edx mov esi, [.self] mov edx, [esi+TAsmEdit._lines] mov eax, [edx+TText.Length] add eax, [edx+TText.GapBegin] sub eax, [edx+TText.GapEnd] shr eax, 2 dec eax set esi, TAsmEdit:CaretY, eax exec esi, TAsmEdit:ScrollToCaretY pop edx esi return endp method TAsmEdit.CaretWordBack begin pushad mov edi, [.self] mov ebx, [edi+TAsmEdit._caretPos.y] mov ecx, [edi+TAsmEdit._caretPos.x] .loopy: exec edi, TAsmEdit:TextLine, ebx, FALSE jc .prevline mov edx, [eax] cmp ecx, -1 jne .xok mov ecx, [edx+TText.Length] ; ecx at the end of the line if this is not the first line. sub ecx, [edx+TText.GapEnd] add ecx, [edx+TText.GapBegin] .xok: dec ecx js .prevline stdcall TextIndexToPos, edx, ecx mov ecx, eax xor ah, ah .loopx: mov esi, [edx+TText.GapEnd] cmp ecx, [edx+TText.GapBegin] cmovb esi, [edx+TText.GapBegin] sub esi, [edx+TText.GapBegin] add esi, ecx cmp esi, [edx+TText.Length] jae .prevx mov al, [edx+esi] stdcall RecognizeChar, SepMapWithPoints jnc .regular test ah, ah jz .prevx inc ecx jmp .word_edge_found .regular: mov ah, al .prevx: dec ecx jns .loopx test ah, ah jz .prevline inc ecx jmp .word_edge_found .prevline: xor ecx, ecx dec ecx dec ebx jns .loopy inc ecx inc ebx .word_edge_found: set edi, TAsmEdit:CaretY, ebx stdcall TextPosToIndex, edx, ecx set edi, TAsmEdit:CaretX, eax exec edi, TAsmEdit:ScrollToCaretX exec edi, TAsmEdit:ScrollToCaretY exec edi, TAsmEdit:UpdateCaretPos popad return endp method TAsmEdit.CaretWordForward .lenx dd ? .eax dd ? begin pushad mov edi, [.self] mov ebx, [edi+TAsmEdit._caretPos.y] mov ecx, [edi+TAsmEdit._caretPos.x] xor ah, ah .loopy: mov [.eax], eax xor edx, edx exec edi, TAsmEdit:TextLine, ebx, FALSE jc .end_of_text mov edx, [eax] mov eax, [edx+TText.Length] sub eax, [edx+TText.GapEnd] add eax, [edx+TText.GapBegin] mov [.lenx], eax inc ecx stdcall TextIndexToPos, edx, ecx mov ecx, eax mov eax, [.eax] .loopx: mov esi, [edx+TText.GapEnd] cmp ecx, [edx+TText.GapBegin] cmovb esi, [edx+TText.GapBegin] sub esi, [edx+TText.GapBegin] add esi, ecx cmp esi, [edx+TText.Length] jae .nextx mov al, [edx+esi] stdcall RecognizeChar, SepMapWithPoints jnc .regular mov ah, al jmp .nextx .regular: test ah, ah jnz .word_edge_found .nextx: inc ecx cmp ecx, [.lenx] jb .loopx .nextline: xor ecx, ecx dec ecx mov ah, cl inc ebx jmp .loopy .end_of_text: inc ecx .word_edge_found: test edx, edx cmovz eax, edx jz .indx_ok stdcall TextPosToIndex, edx, ecx .indx_ok: set edi, TAsmEdit:CaretX, eax set edi, TAsmEdit:CaretY, ebx exec edi, TAsmEdit:ScrollToCaretX exec edi, TAsmEdit:ScrollToCaretY exec edi, TAsmEdit:UpdateCaretPos popad return endp ; Selection control methods method TAsmEdit.SelStartHere begin pushad mov esi, [.self] exec esi, TAsmEdit:SelChangeBegin mov eax, [esi+TAsmEdit._caretPos.x] mov edx, [esi+TAsmEdit._caretPos.y] mov [esi+TAsmEdit._selStart.x], eax mov [esi+TAsmEdit._selStart.y], edx exec esi, TAsmEdit:SelChangeEnd popad return endp method TAsmEdit.SelEndHere begin pushad mov esi, [.self] exec esi, TAsmEdit:SelChangeBegin mov eax, [esi+TAsmEdit._caretPos.x] mov edx, [esi+TAsmEdit._caretPos.y] mov [esi+TAsmEdit._selEnd.x], eax mov [esi+TAsmEdit._selEnd.y], edx exec esi, TAsmEdit:SelChangeEnd popad return endp method TAsmEdit.SelChangeBegin begin pushad mov esi, [.self] xor edx, edx xchg edx, [esi+TAsmEdit._selAreaUpdate] test edx, edx jz .old_ok stdcall FreeMem, edx xor edx, edx .old_ok: exec esi, TAsmEdit:_AddSelRectangles, edx mov [esi+TAsmEdit._selAreaUpdate], edx popad return endp method TAsmEdit.SelChangeEnd begin pushad mov esi, [.self] mov edx, [esi+TAsmEdit._selAreaUpdate] exec esi, TAsmEdit:_AddSelRectangles, edx mov ecx, [edx+TArray.count] lea edi, [edx+TArray.array] .loop: dec ecx js .freelist mov eax, [edi+RECT.left] mov ebx, [edi+RECT.top] imul eax, [esi+TAsmEdit._font_width] imul ebx, [esi+TAsmEdit._font_height] add eax, [esi+TAsmEdit._left_margin] mov [edi+RECT.left], eax mov [edi+RECT.top], ebx mov eax, [edi+RECT.right] mov ebx, [edi+RECT.bottom] imul eax, [esi+TAsmEdit._font_width] imul ebx, [esi+TAsmEdit._font_height] add eax, [esi+TAsmEdit._left_margin] mov [edi+RECT.right], eax mov [edi+RECT.bottom], ebx exec esi, TAsmEdit:RectChanged2, edi add edi, sizeof.RECT jmp .loop .freelist: stdcall FreeMem, edx xor edx, edx mov [esi+TAsmEdit._selAreaUpdate], edx popad return endp ; Line handling and formatting methods. ; Undo/Redo methods method TAsmEdit.SaveForUndo begin pushad mov esi, [.self] mov edx, [esi+TAsmEdit._pUndo] mov ecx, [.operation] mov ebx, [.LineNum] test ebx, ebx cmovs ebx, [esi+TAsmEdit._caretPos.y] test edx, edx jz .add_new cmp [edx+TUndoInfo.line], ebx jne .add_new cmp ecx, chopChanged jne .add_new mov eax, [esi+TAsmEdit._UndoLevel] cmp eax, [edx+TUndoInfo.group] jne .add_new cmp [edx+TUndoInfo.operation], ecx je .finish ; group the chopChanged for the same line. ; add new record in the chain. .add_new: OutputValue "Add new TUndoInfo for operation: ", ecx, 10, -1 stdcall GetMem, sizeof.TUndoInfo jc .finish mov edi, eax mov [edi+TUndoInfo.pNext], edx mov [edi+TUndoInfo.operation], ecx mov eax, [esi+TAsmEdit._UndoLevel] mov [edi+TUndoInfo.group], eax mov [esi+TAsmEdit._pUndo], edi mov ecx, [esi+TAsmEdit._caretPos.x] mov edx, [esi+TAsmEdit._caretPos.y] mov [edi+TUndoInfo.line], ebx mov [edi+TUndoInfo.caretPos.x], ecx mov [edi+TUndoInfo.caretPos.y], edx mov ecx, [esi+TAsmEdit._selStart.x] mov edx, [esi+TAsmEdit._selStart.y] mov [edi+TUndoInfo.selStart.x], ecx mov [edi+TUndoInfo.selStart.y], edx mov ecx, [esi+TAsmEdit._selEnd.x] mov edx, [esi+TAsmEdit._selEnd.y] mov [edi+TUndoInfo.selEnd.x], ecx mov [edi+TUndoInfo.selEnd.y], edx mov ecx, [esi+TAsmEdit._modified] mov [edi+TUndoInfo.modified], ecx exec esi, TAsmEdit:TextLine, ebx, TRUE stdcall TextDup, [eax] .store: mov [edi+TUndoInfo.pText], eax mov [eax+TTextLine.syn_array], 0 ; don't copy syntax array pointer! mov [eax+TTextLine.imgRendered], 0 ; and the image. and [eax+TTextLine.flags], not tlfRendered ; now free all redo records, because every new stored undo point invalidates the whole redo list. .clean_redo: xor ecx, ecx xchg ecx, [esi+TAsmEdit._pRedo] call __do_clean_list .finish: set esi, TAsmEdit:Modified, TRUE popad return endp method TAsmEdit.ClearUndoRedo begin pushad mov esi, [.self] xor ecx, ecx xchg ecx, [esi+TAsmEdit._pUndo] call __do_clean_list xor ecx, ecx xchg ecx, [esi+TAsmEdit._pRedo] call __do_clean_list popad return endp proc __do_clean_list begin .clean_loop: jecxz .end_clean stdcall TextFree, [ecx+TUndoInfo.pText] push ecx mov ecx, [ecx+TUndoInfo.pNext] stdcall FreeMem ; from the stack jmp .clean_loop .end_clean: return endp method TAsmEdit.CanUndo begin mov eax, [.self] mov eax, [eax+TAsmEdit._pUndo] test eax, eax setnz al movzx eax, al return endp method TAsmEdit.Undo .group dd ? begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._pUndo] test edi, edi jz .finish ; nothing to undo. mov eax, [edi+TUndoInfo.group] mov [.group], eax .loop: mov edx, [edi+TUndoInfo.pNext] mov [esi+TAsmEdit._pUndo], edx ; remove from the UNDO list. mov edx, [esi+TAsmEdit._pRedo] mov [edi+TUndoInfo.pNext], edx mov [esi+TAsmEdit._pRedo], edi ; insert in the REDO list. call __ApplyUndo mov edi, [esi+TAsmEdit._pUndo] test edi, edi jz .refresh mov eax, [edi+TUndoInfo.group] cmp eax, [.group] je .loop .refresh: exec esi, TAsmEdit:ScrollToCaretY exec esi, TAsmEdit:ScrollToCaretX and [esi+TAsmEdit._img_margin_valid], 0 exec esi, TAsmEdit:RectChanged2, 0 exec esi, TAsmEdit:UpdateScrollBar exec esi, TAsmEdit:UpdateCaretPos .finish: popad return endp method TAsmEdit.CanRedo begin mov eax, [.self] mov eax, [eax+TAsmEdit._pRedo] test eax, eax setnz al movzx eax, al return endp method TAsmEdit.Redo .group dd ? begin pushad mov esi, [.self] mov ebx, [esi+TAsmEdit._lines] mov edi, [esi+TAsmEdit._pRedo] test edi, edi jz .finish mov eax, [edi+TUndoInfo.group] mov [.group], eax .loop: mov edx, [edi+TUndoInfo.pNext] mov [esi+TAsmEdit._pRedo], edx ; remove from the REDO list. mov edx, [esi+TAsmEdit._pUndo] mov [edi+TUndoInfo.pNext], edx mov [esi+TAsmEdit._pUndo], edi ; insert in the UNDO list. call __ApplyUndo mov edi, [esi+TAsmEdit._pRedo] test edi, edi jz .refresh mov eax, [edi+TUndoInfo.group] cmp eax, [.group] je .loop .refresh: set esi, TAsmEdit:Modified, TRUE exec esi, TAsmEdit:ScrollToCaretY exec esi, TAsmEdit:ScrollToCaretX and [esi+TAsmEdit._img_margin_valid], 0 exec esi, TAsmEdit:RectChanged2, 0 exec esi, TAsmEdit:UpdateCaretPos exec esi, TAsmEdit:UpdateScrollBar .finish: popad return endp ; esi - pointer to TAsmEdit ; edi - pointer to TUndoInfo proc __ApplyUndo begin pushad mov eax, [esi+TAsmEdit._caretPos.x] xchg eax, [edi+TUndoInfo.caretPos.x] set esi, TAsmEdit:CaretX, eax ; xchg caret_x mov eax, [esi+TAsmEdit._caretPos.y] xchg eax, [edi+TUndoInfo.caretPos.y] set esi, TAsmEdit:CaretY, eax ; xchg caret_y mov eax, [esi+TAsmEdit._selStart.x] xchg eax, [edi+TUndoInfo.selStart.x] mov [esi+TAsmEdit._selStart.x], eax ; xchg selStart_x mov eax, [esi+TAsmEdit._selStart.y] xchg eax, [edi+TUndoInfo.selStart.y] mov [esi+TAsmEdit._selStart.y], eax ; xchg selStart_y mov eax, [esi+TAsmEdit._selEnd.x] xchg eax, [edi+TUndoInfo.selEnd.x] mov [esi+TAsmEdit._selEnd.x], eax ; xchg selEnd_x mov eax, [esi+TAsmEdit._selEnd.y] xchg eax, [edi+TUndoInfo.selEnd.y] mov [esi+TAsmEdit._selEnd.y], eax ; xchg selEnd_y mov eax, [esi+TAsmEdit._modified] xchg eax, [edi+TUndoInfo.modified] mov [esi+TAsmEdit._modified], eax ; xchg _modified mov ebx, [esi+TAsmEdit._lines] mov eax, [edi+TUndoInfo.operation] cmp eax, chopChanged je .op_changed cmp eax, chopDeleted je .op_deleted cmp eax, chopInserted je .op_inserted int3 ; INVALID OPERATION jmp .finish .op_inserted: mov [edi+TUndoInfo.operation], chopDeleted mov eax, [edi+TUndoInfo.line] shl eax, 2 stdcall TextMoveGap, ebx, eax mov eax, [ebx+TText.GapEnd] mov ecx, [ebx+eax] mov [edi+TUndoInfo.pText], ecx xor edx, edx xchg edx, [ecx+TTextLine.syn_array] stdcall FreeMem, edx and [ecx+TTextLine.flags], not tlfRendered add [ebx+TText.GapEnd], 4 stdcall DecCount, [esi+TAsmEdit._line_widths], [ecx+TTextLine.ch_len] mov [esi+TAsmEdit._line_widths], edx jmp .finish .op_deleted: mov [edi+TUndoInfo.operation], chopInserted mov eax, [edi+TUndoInfo.line] shl eax, 2 stdcall TextMoveGap, ebx, eax stdcall TextSetGapSize, ebx, 4 mov [esi+TAsmEdit._lines], edx mov ebx, edx mov eax, [ebx+TText.GapBegin] and dword [ebx+eax], 0 add [ebx+TText.GapBegin], 4 jmp .restore_txt .op_changed: mov eax, [edi+TUndoInfo.line] shl eax, 2 ; in bytes pos2ofs eax, ebx .restore_txt: pushd [edi+TUndoInfo.pText] [ebx+eax] popd [edi+TUndoInfo.pText] [ebx+eax] ; xchg TTextLine structures of the line. mov ecx, [edi+TUndoInfo.pText] jecxz @f xor edx, edx xchg edx, [ecx+TTextLine.syn_array] stdcall FreeMem, edx and [ecx+TTextLine.flags], not tlfRendered @@: mov ecx, [ebx+eax] ; the restored TTextLine and [ecx+TTextLine.syn_array], 0 and [ecx+TTextLine.flags], not tlfRendered ; fix the horizontal scrollbar size. stdcall IncCount, [esi+TAsmEdit._line_widths], [ecx+TTextLine.ch_len] mov [esi+TAsmEdit._line_widths], edx mov ecx, [edi+TUndoInfo.pText] jecxz @f stdcall DecCount, [esi+TAsmEdit._line_widths], [ecx+TTextLine.ch_len] mov [esi+TAsmEdit._line_widths], edx @@: exec esi, TAsmEdit:DelTrailingSpaces, [edi+TUndoInfo.line] .finish: popad return endp method TAsmEdit.Cut begin push eax ebx get ebx, [.self], TAsmEdit:Selection stdcall StrLen, ebx test eax, eax jz .finish stdcall ClipboardWrite, ebx exec [.self], TAsmEdit:DeleteSelection .finish: pop ebx eax return endp method TAsmEdit.Copy begin push eax ebx get ebx, [.self], TAsmEdit:Selection stdcall StrLen, ebx test eax, eax jz .finish stdcall ClipboardWrite, ebx .finish: pop ebx eax return endp method TAsmEdit.Paste begin push eax stdcall ClipboardRead jc .finish exec [.self], TAsmEdit:ReplaceSelection, eax .finish: pop eax return endp ; Text editing methods method TAsmEdit.InsertNewLine ;, .LineNum begin pushad mov esi, [.self] mov edx, [esi+TAsmEdit._lines] stdcall TextSetGapSize, edx, 4 mov [esi+TAsmEdit._lines], edx jc .finish xor edi, edi mov eax, [.LineNum] shl eax, 2 stdcall TextMoveGap, edx, eax mov ebx, [edx+TText.GapBegin] add ebx, edx stdcall TextCreate, sizeof.TTextLine jc .finish mov [ebx], eax mov [esp+4*regEAX], ebx ; return value in EAX is the pointer to the new inserted TText. ; Init the TTextLine part of the structure to 0. lea edi, [eax - sizeof.TTextLine] mov ecx, (sizeof.TTextLine - sizeof.TText)/4 xor eax, eax rep stosd add [edx+TText.GapBegin], 4 stdcall IncCount, [esi+TAsmEdit._line_widths], 0 mov [esi+TAsmEdit._line_widths], edx clc .finish: popad return endp method TAsmEdit.DeleteLine ;, .LineNum begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._lines] mov ebx, [.LineNum] test ebx, ebx cmovs ebx, [esi+TAsmEdit._caretPos.y] mov [.LineNum], ebx shl ebx, 2 stdcall TextMoveGap, edi, ebx mov ebx, [edi+TText.GapEnd] cmp ebx, [edi+TText.Length] jae .not_deleted exec esi, TAsmEdit:SaveForUndo, [.LineNum], chopDeleted mov edx, [edi+ebx] stdcall FreeMem, [edx+TTextLine.syn_array] stdcall RecycleImage, [edx+TTextLine.imgRendered] stdcall TextFree, edx add [edi+TText.GapEnd], 4 clc popad return .not_deleted: stc popad return endp method TAsmEdit.DeleteChar ; .LineNum, .CharPos begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._lines] mov ebx, [.LineNum] mov eax, [.CharPos] test ebx, ebx cmovs ebx, [esi+TAsmEdit._caretPos.y] cmovs eax, [esi+TAsmEdit._caretPos.x] mov [.CharPos], eax mov [.LineNum], ebx shl ebx, 2 cmp ebx, [edi+TText.GapBegin] jb .skip add ebx, [edi+TText.GapEnd] sub ebx, [edi+TText.GapBegin] .skip: cmp ebx, [edi+TText.Length] jae .not_deleted mov ebx, [edi+ebx] stdcall TextIndexToPos, ebx, [.CharPos] jc .not_deleted stdcall TextMoveGap, ebx, eax mov edx, [ebx+TTextLine.GapEnd] cmp edx, [ebx+TTextLine.Length] jae .not_deleted exec esi, TAsmEdit:SaveForUndo, [.LineNum], chopChanged movzx eax, byte [ebx+edx] ; compute the length of the UTF-8 character by its first byte (version without branches) Is it fast? not al ; utf-8 starts with one of: 0xxxxxxx, 110xxxxx, 1110xxxx, 11110xxx, 111110xx, 1111110x bsr eax, eax ; eax = 7, 5, 4, 3, 2, 1 sub eax, 7 ; eax = 0, -2, -3, -4, -5, -6 ; CF = 0, 1, 1, 1, 1, 1 not eax ; eax = -1, +1, +2, +3, +4, +5 sbb eax, -2 ; eax = edx + 2 - CF = +1, +2, +3, +4, +5, +6 add edx, eax cmp edx, [ebx+TTextLine.Length] cmova edx, [ebx+TTextLine.Length] mov [ebx+TTextLine.GapEnd], edx xor eax, eax xchg eax, [ebx+TTextLine.syn_array] ; reset the syntax array of the line... stdcall FreeMem, eax and [ebx+TTextLine.flags], not tlfRendered stdcall DecCount, [esi+TAsmEdit._line_widths], [ebx+TTextLine.ch_len] dec [ebx+TTextLine.ch_len] stdcall IncCount, edx, [ebx+TTextLine.ch_len] mov [esi+TAsmEdit._line_widths], edx and [esi+TAsmEdit._img_margin_valid], 0 exec esi, TAsmEdit:RectChanged2, 0 exec esi, TAsmEdit:UpdateCaretPos clc popad return .not_deleted: stc popad return endp method TAsmEdit.JoinNextLine ; .LineNum begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._lines] mov ebx, [.LineNum] test ebx, ebx cmovs ebx, [esi+TAsmEdit._caretPos.y] mov [.LineNum], ebx shl ebx, 2 lea ecx, [ebx+4] stdcall TextMoveGap, edi, ecx ; move the gap between the two lines. ; here ebx is before the gap and ecx is after! add ecx, [edi+TText.GapEnd] sub ecx, [edi+TText.GapBegin] cmp ecx, [edi+TText.Length] jae .finish ; nothing to join cmp ebx, [edi+TText.Length] jae .finish exec esi, TAsmEdit:SaveForUndo, [.LineNum], chopChanged inc [.LineNum] exec esi, TAsmEdit:SaveForUndo, [.LineNum], chopDeleted add [edi+TText.GapEnd], 4 ; free the place of the next line... ; first fix the new line widths... mov edx, [esi+TAsmEdit._line_widths] mov eax, [edi+ebx] push [eax+TTextLine.ch_len] stdcall DecCount, edx, [eax+TTextLine.ch_len] mov eax, [edi+ecx] push [eax+TTextLine.ch_len] stdcall DecCount, edx, [eax+TTextLine.ch_len] mov [esi+TAsmEdit._line_widths], edx pop eax edx add eax, edx mov edx, [edi+ebx] mov [edx+TTextLine.ch_len], eax stdcall IncCount, [esi+TAsmEdit._line_widths], eax mov [esi+TAsmEdit._line_widths], edx ; then join the texts stdcall TextAddText, [edi+ebx], -1, [edi+ecx] mov [edi+ebx], edx ; then free the next line TTextLine structure... mov eax, [edi+ecx] mov edx, [eax+TTextLine.flags] stdcall FreeMem, [eax+TTextLine.syn_array] stdcall RecycleImage, [eax+TTextLine.imgRendered] stdcall TextFree, eax ; delete the next line... but what about the debug info and other attributes? ; reset the syntax coloring of the result line mov eax, [edi+ebx] or [eax+TTextLine.flags], edx stdcall FreeMem, [eax+TTextLine.syn_array] and [eax+TTextLine.syn_array], 0 .finish: popad return endp method TAsmEdit.SplitLine begin pushad mov esi, [.self] mov ebx, [.LineNum] mov ecx, [.PosX] test ebx, ebx cmovs ebx, [esi+TAsmEdit._caretPos.y] cmovs ecx, [esi+TAsmEdit._caretPos.x] mov [.LineNum], ebx mov [.PosX], ecx exec esi, TAsmEdit:TextLine, ebx, TRUE ; ensure the line ebx exists. inc ebx exec esi, TAsmEdit:InsertNewLine, ebx mov edi, eax exec esi, TAsmEdit:SaveForUndo, ebx, chopInserted mov edx, [esi+TAsmEdit._lines] mov ebx, [edx+4*ebx-4] ; the gap, after the InsertNewLine is located just after the ebx line. stdcall TextIndexToPos, ebx, [.PosX] push eax exec esi, TAsmEdit:SaveForUndo, [.LineNum], chopChanged pop eax stdcall TextMoveGap, ebx, eax stdcall DecCount, [esi+TAsmEdit._line_widths], [ebx+TTextLine.ch_len] mov [esi+TAsmEdit._line_widths], edx mov eax, [ebx+TTextLine.GapEnd] mov ecx, [ebx+TTextLine.Length] mov [ebx+TTextLine.GapEnd], ecx sub ecx, eax ; the length in bytes of the remaining text in the splitted line. add eax, ebx ; the address of the remaining of the splitted line. push eax ecx stdcall StrLenUtf8, eax, ecx push eax eax ; the length in utf-8 chars. test [esi+TAsmEdit._mode], aemBlockSelection jz .indent_it get eax, esi, TAsmEdit:CaretX jmp .do_indent .indent_it: test [esi+TAsmEdit._options], aeoAutoIndents jz .indent_ok mov eax, [.LineNum] inc eax exec esi, TAsmEdit:GetSmartTab, eax, 0 .do_indent: mov edx, [edi] mov [edx+TTextLine.ch_len], eax .spc: dec eax js .end_spc stdcall TextAddChar, edx, ' ' jmp .spc .end_spc: mov [edi], edx .indent_ok: mov ecx, [edi] xor edx, edx xchg edx, [ecx+TTextLine.syn_array] stdcall FreeMem, edx and [ecx+TTextLine.flags], not tlfRendered ; mark the new line as not rendered. xor edx, edx xchg edx, [ebx+TTextLine.syn_array] stdcall FreeMem, edx and [ebx+TTextLine.flags], not tlfRendered ; mark the old line as not rendered. stdcall DecCount, [esi+TAsmEdit._line_widths], 0 ; the initial length of the new line was incremented in InsertLine pop eax add [ecx+TTextLine.ch_len], eax stdcall IncCount, edx, [ecx+TTextLine.ch_len] ; the width of the new line. pop eax sub [ebx+TTextLine.ch_len], eax stdcall IncCount, edx, [ebx+TTextLine.ch_len] ; the width of the old line. mov [esi+TAsmEdit._line_widths], edx pop ecx eax mov ebx, [edi] mov ebx, [ebx+TTextLine.GapBegin] mov [esp+4*regEAX], ebx ; the caret position is returned in EAX. Notice, that from the begining of ; the line up to the caret, there can be only $20 spaces, so the GapBegin ; is always equal to the caret position X. stdcall TextAddBytes, [edi], -1, eax, ecx ; copy the text from the old line into the new. mov [edi], edx exec esi, TAsmEdit:DelTrailingSpaces, [.LineNum] .finish: popad return endp method TAsmEdit.DeleteSelection .list dd ? begin pushad exec [.self], TAsmEdit:_AddSelRectanglesAbs, 0 mov [.list], edx lea edi, [edx+TArray.array] mov ecx, [edx+TArray.count] test ecx, ecx jz .exit_empty mov eax, ecx shl eax, 4 ; sizeof.RECT add edi, eax .rect_loop: sub edi, sizeof.RECT dec ecx js .finish mov ebx, [edi+RECT.bottom] .y_loop: dec ebx cmp ebx, [edi+RECT.top] jl .rect_loop exec [.self], TAsmEdit:SaveForUndo, ebx, chopChanged exec [.self], TAsmEdit:AddTrailingSpaces, ebx, [edi+RECT.left] exec [.self], TAsmEdit:TextLine, ebx, TRUE mov esi, [eax] stdcall TextIndexToPos, esi, [edi+RECT.left] stdcall TextMoveGap, esi, eax mov eax, [esi+TTextLine.ch_len] cmp eax, [edi+RECT.right] cmova eax, [edi+RECT.right] ; delete up to the min(length, RECT.right) utf-8 character position! push ecx push eax ; char count mov ecx, [.self] stdcall TextIndexToPos, esi, eax sub eax, [esi+TTextLine.GapBegin] add [esi+TTextLine.GapEnd], eax ; delete eax bytes! stdcall DecCount, [ecx+TAsmEdit._line_widths], [esi+TTextLine.ch_len] pop eax sub eax, [edi+RECT.left] ; deleted characters! sub [esi+TTextLine.ch_len], eax stdcall IncCount, edx, [esi+TTextLine.ch_len] mov [ecx+TAsmEdit._line_widths], edx pop ecx ; join the lines, if the selection is right to infinity: cmp [edi+RECT.right], $7fffffff je .joinnext exec [.self], TAsmEdit:DelTrailingSpaces, ebx jmp .y_loop .joinnext: exec [.self], TAsmEdit:JoinNextLine, ebx jmp .y_loop .finish: mov esi, [.self] get eax, esi, TAsmEdit:SelStartX get ecx, esi, TAsmEdit:SelEndX cmp eax, ecx cmovg eax, ecx get edx, esi, TAsmEdit:SelStartY get ecx, esi, TAsmEdit:SelEndY cmp edx, ecx cmovg edx, ecx set esi, TAsmEdit:CaretX, eax set esi, TAsmEdit:CaretY, edx exec esi, TAsmEdit:SelChangeBegin exec esi, TAsmEdit:SelStartHere exec esi, TAsmEdit:SelEndHere exec esi, TAsmEdit:SelChangeEnd exec esi, TAsmEdit:UpdateScrollBar xor eax, eax xchg eax, [esi+TAsmEdit._img_margin_valid] exec esi, TAsmEdit:RectChanged2, 0 exec esi, TAsmEdit:ScrollToCaretX exec esi, TAsmEdit:ScrollToCaretY .exit: inc [esi+TAsmEdit._UndoLevel] stdcall FreeMem, [.list] clc popad return .exit_empty: stdcall FreeMem, [.list] stc popad return endp method TAsmEdit.InsertString ;, .sting .varline dd ? .startX dd ? ; for aemBlockSelection begin pushad mov edi, [.self] inc [edi+TAsmEdit._UndoLevel] get ebx, edi, TAsmEdit:CaretY get ecx, edi, TAsmEdit:CaretX mov [.startX], ecx push [edi+TAsmEdit._options] and [edi+TAsmEdit._options], not aeoAutoIndents stdcall StrPtr, [.string] mov esi, eax .loopy: exec [.self], TAsmEdit:TextLine, ebx, TRUE mov [.varline], eax mov edx, [eax] exec [.self], TAsmEdit:SaveForUndo, ebx, chopChanged exec [.self], TAsmEdit:AddTrailingSpaces, ebx, ecx and [edx+TTextLine.flags], not tlfRendered xor eax, eax xchg eax, [edx+TTextLine.syn_array] stdcall FreeMem, eax stdcall TextIndexToPos, edx, ecx stdcall TextMoveGap, edx, eax xor ecx, ecx ; inserted characters. .loopx: stdcall TextSetGapSize, edx, 4 mov eax, [esi] cmp al, $20 jae .insert ; ctrl characters test al, al jz .end_of_line cmp al, $0d je .end_of_line cmp al, $0a je .end_of_line ; cmp al, $09 ; je .tab ; ignore the remaining ctrl characters. inc esi jmp .loopx .insert: mov edi, [edx+TTextLine.GapBegin] mov [edx+edi], eax movzx eax, al ; compute the length of the UTF-8 character by its first byte (version without branches) Is it fast? not al ; utf-8 starts with one of: 0xxxxxxx, 110xxxxx, 1110xxxx, 11110xxx, 111110xx, 1111110x bsr eax, eax ; eax = 7, 5, 4, 3, 2, 1 sub eax, 7 ; eax = 0, -2, -3, -4, -5, -6 ; CF = 0, 1, 1, 1, 1, 1 not eax ; eax = -1, +1, +2, +3, +4, +5 sbb eax, -2 ; eax = eax + 2 - CF = +1, +2, +3, +4, +5, +6 add [edx+TTextLine.GapBegin], eax add esi, eax inc ecx jmp .loopx .end_of_line: xor ah, $0d xor $0a cmp al, ah ; ah is the next char. jne .crlf_ok inc esi .crlf_ok: push eax inc esi mov edi, [.self] get eax, edi, TAsmEdit:CaretX add eax, ecx ; ecx = length of the inserted string. set edi, TAsmEdit:CaretX, eax mov eax, [.varline] mov [eax], edx ; save the modified line. add ecx, [edx+TTextLine.ch_len] push [edx+TTextLine.ch_len] mov [edx+TTextLine.ch_len], ecx stdcall DecCount, [edi+TAsmEdit._line_widths] ; from the stack stdcall IncCount, edx, ecx mov [edi+TAsmEdit._line_widths], edx pop eax test al, al jz .end_of_text xor eax, eax test [edi+TAsmEdit._mode], aemBlockSelection cmovnz eax, [.startX] jnz .xok test [edi+TAsmEdit._mode], aemOverwrite jnz .xok exec edi, TAsmEdit:SplitLine, ebx, [edi+TAsmEdit._caretPos.x] .xok: mov ecx, eax set edi, TAsmEdit:CaretX, eax inc ebx test [edi+TAsmEdit._mode], aemBlockSelection jnz .loopy set edi, TAsmEdit:CaretY, ebx jmp .loopy .end_of_text: mov edi, [.self] pop [edi+TAsmEdit._options] exec edi, TAsmEdit:ScrollToCaretX exec edi, TAsmEdit:ScrollToCaretY exec edi, TAsmEdit:ComputeLeftMarginWidth and [edi+TAsmEdit._img_margin_valid], 0 exec edi, TAsmEdit:__UpdateImages exec edi, TAsmEdit:UpdateScrollBar exec edi, TAsmEdit:UpdateCaretPos exec edi, TAsmEdit:RectChanged2, 0 popad return endp method TAsmEdit.ReplaceSelection ;, .string begin exec [.self], TAsmEdit:DeleteSelection exec [.self], TAsmEdit:InsertString, [.string] return endp method TAsmEdit.AddTrailingSpaces ; .LineNum, .CharX begin pushad mov esi, [.self] mov ebx, [.LineNum] mov eax, [.PosX] test ebx, ebx cmovs ebx, [esi+TAsmEdit._caretPos.y] cmovs eax, [esi+TAsmEdit._caretPos.x] mov [.PosX], eax mov edi, [esi+TAsmEdit._lines] shl ebx, 2 cmp ebx, [edi+TText.GapBegin] jb .skip add ebx, [edi+TText.GapEnd] sub ebx, [edi+TText.GapBegin] .skip: cmp ebx, [edi+TText.Length] jae .finish ; the line is outside the text. Add empty lines??? mov edx, [edi+ebx] mov ecx, [.PosX] sub ecx, [edx+TTextLine.ch_len] jle .finish ; the caret is inside the line. push edx stdcall DecCount, [esi+TAsmEdit._line_widths], [edx+TTextLine.ch_len] mov [esi+TAsmEdit._line_widths], edx pop edx add [edx+TTextLine.ch_len], ecx push edx stdcall IncCount, [esi+TAsmEdit._line_widths], [edx+TTextLine.ch_len] mov [esi+TAsmEdit._line_widths], edx pop edx stdcall TextMoveGap, edx, -1 stdcall TextSetGapSize, edx, ecx mov [edi+ebx], edx mov edi, edx add edi, [edx+TTextLine.GapBegin] add [edx+TTextLine.GapBegin], ecx mov al, " " rep stosb .finish: popad return endp method TAsmEdit.DelTrailingSpaces ;, ;.LineNum begin pushad mov esi, [.self] mov ebx, [.LineNum] test ebx, ebx cmovs ebx, [esi+TAsmEdit._caretPos.y] mov edi, [esi+TAsmEdit._lines] shl ebx, 2 cmp ebx, [edi+TText.GapBegin] jb .skip add ebx, [edi+TText.GapEnd] sub ebx, [edi+TText.GapBegin] .skip: cmp ebx, [edi+TText.Length] jae .finish ; the line is outside the text. Add empty lines??? mov edi, [edi+ebx] stdcall TextMoveGap, edi, -1 mov edx, edi add edx, [edi+TTextLine.GapBegin] ; search back the first non-whitespace... .loop: dec edx cmp edx, edi jl .found cmp byte [edx], ' ' jbe .loop .found: inc edx mov ecx, edx sub ecx, edi xchg ecx, [edi+TTextLine.GapBegin] sub ecx, [edi+TTextLine.GapBegin] stdcall DecCount, [esi+TAsmEdit._line_widths], [edi+TTextLine.ch_len] sub [edi+TTextLine.ch_len], ecx stdcall IncCount, edx, [edi+TTextLine.ch_len] mov [esi+TAsmEdit._line_widths], edx xor eax, eax xchg eax, [edi+TTextLine.syn_array] stdcall FreeMem, eax and [edi+TTextLine.flags], not tlfRendered .finish: popad return endp method TAsmEdit.PrefixInsert begin pushad movzx ecx, byte [.char] ; compute the length of the UTF-8 character by its first byte (version without branches) Is it fast? not cl ; utf-8 starts with one of: 0xxxxxxx, 110xxxxx, 1110xxxx, 11110xxx, 111110xx, 1111110x bsr ecx, ecx ; eax = 7, 5, 4, 3, 2, 1 sub ecx, 7 ; eax = 0, -2, -3, -4, -5, -6 ; CF = 0, 1, 1, 1, 1, 1 not ecx ; eax = -1, +1, +2, +3, +4, +5 sbb ecx, -2 ; eax = edx + 2 - CF = +1, +2, +3, +4, +5, +6 shl ecx, 3 ; *8 bits xor eax, eax dec eax shl eax, cl not eax and [.char], eax ; only one utf8 char is allowed. mov esi, [.self] inc [esi+TAsmEdit._UndoLevel] mov ebx, [.LineFrom] dec ebx .loop: inc ebx cmp ebx, [.LineTo] je .end_loop exec esi, TAsmEdit:SaveForUndo, ebx, chopChanged exec esi, TAsmEdit:TextLine, ebx, FALSE jc .end_loop mov edx, [eax] stdcall TextMoveGap, edx, 0 stdcall TextAddChar, edx, [.char] mov [eax], edx mov eax, [edx+TTextLine.ch_len] inc [edx+TTextLine.ch_len] mov ecx, [edx+TTextLine.ch_len] stdcall DecCount, [esi+TAsmEdit._line_widths], eax stdcall IncCount, edx, ecx mov [esi+TAsmEdit._line_widths], edx exec esi, TAsmEdit:DelTrailingSpaces, ebx jmp .loop .end_loop: exec esi, TAsmEdit:UpdateScrollBar exec esi, TAsmEdit:RectChanged2, 0 popad return endp method TAsmEdit.PrefixRemove begin pushad movzx ecx, byte [.char] ; compute the length of the UTF-8 character by its first byte (version without branches) Is it fast? not cl ; utf-8 starts with one of: 0xxxxxxx, 110xxxxx, 1110xxxx, 11110xxx, 111110xx, 1111110x bsr ecx, ecx ; ecx = 7, 5, 4, 3, 2, 1 sub ecx, 7 ; ecx = 0, -2, -3, -4, -5, -6 ; CF = 0, 1, 1, 1, 1, 1 not ecx ; ecx = -1, +1, +2, +3, +4, +5 sbb ecx, -2 ; ecx = ecx + 2 - CF = +1, +2, +3, +4, +5, +6 shl ecx, 3 ; *8 bits xor eax, eax dec eax shl eax, cl not eax and [.char], eax ; only one utf8 char is allowed. mov esi, [.self] mov ebx, [.LineFrom] dec ebx ; check the first character in every line of the selection. If (<> [.char]) cancel the operation. If empty line, ignore. .loop1: inc ebx cmp ebx, [.LineTo] je .end_loop1 exec esi, TAsmEdit:TextLine, ebx, FALSE jc .end_loop1 mov edx, [eax] stdcall TextMoveGap, edx, 0 stdcall TextGetChar, edx jc .loop1;.finish cmp eax, [.char] je .loop1 jmp .finish .end_loop1: mov ebx, [.LineFrom] dec ebx inc [esi+TAsmEdit._UndoLevel] .loop2: inc ebx cmp ebx, [.LineTo] je .end_loop2 exec esi, TAsmEdit:SaveForUndo, ebx, chopChanged exec esi, TAsmEdit:TextLine, ebx, FALSE jc .end_loop2 mov edx, [eax] stdcall TextDelChar, edx jc .len_ok mov eax, [edx+TTextLine.ch_len] dec [edx+TTextLine.ch_len] mov ecx, [edx+TTextLine.ch_len] stdcall DecCount, [esi+TAsmEdit._line_widths], eax stdcall IncCount, edx, ecx mov [esi+TAsmEdit._line_widths], edx .len_ok: exec esi, TAsmEdit:DelTrailingSpaces, ebx jmp .loop2 .end_loop2: exec esi, TAsmEdit:UpdateScrollBar exec esi, TAsmEdit:RectChanged2, 0 .finish: popad return endp ; method .SelectionPrefix, .op, .char selprInsert = 0 selprRemove = 1 method TAsmEdit.SelectionPrefix begin pushad mov esi, [.self] exec esi, TAsmEdit:HasSelection jnc .finish exec esi, TAsmEdit:SelChangeBegin get eax, esi, TAsmEdit:Mode and eax, not aemBlockSelection set esi, TAsmEdit:Mode, eax mov eax, [esi+TAsmEdit._selStart.x] mov ebx, [esi+TAsmEdit._selStart.y] mov ecx, [esi+TAsmEdit._selEnd.x] mov edx, [esi+TAsmEdit._selEnd.y] cmp ebx, edx jb .sel_ok ja .swap cmp eax, ecx jbe .sel_ok .swap: xchg ebx, edx xchg eax, ecx .sel_ok: xor eax, eax ; from the start of the line. test ecx, ecx jz .sel_ok2 inc edx xor ecx, ecx .sel_ok2: mov [esi+TAsmEdit._selStart.x], eax mov [esi+TAsmEdit._selStart.y], ebx mov [esi+TAsmEdit._selEnd.x], ecx mov [esi+TAsmEdit._selEnd.y], edx mov [esi+TAsmEdit._caretPos.x], ecx mov [esi+TAsmEdit._caretPos.y], edx exec esi, TAsmEdit:SelChangeEnd exec esi, TAsmEdit:UpdateCaretPos cmp [.op], selprInsert jne .remove ;insert exec esi, TAsmEdit:PrefixInsert, ebx, edx, [.char] jmp .finish .remove: exec esi, TAsmEdit:PrefixRemove, ebx, edx, [.char] .finish: popad return endp method TAsmEdit.GetSmartTab ;, .lineNum, .fromX begin pushad mov eax, [.lineNum] test eax, eax jz .missing dec eax exec [.self], TAsmEdit:TextLine, eax, FALSE jc .missing mov esi, [eax] stdcall TextIndexToPos, esi, [.fromX] mov ebx, eax xor ecx, ecx test ebx, ebx cmovz ecx, esi ; esi is only <>0 here! jz .start dec ebx cmp ebx, [esi+TText.GapBegin] jb @f cmp ebx, [esi+TText.GapEnd] jae @f add ebx, [esi+TText.GapEnd] sub ebx, [esi+TText.GapBegin] @@: cmp ebx, [esi+TText.Length] jae .missing cmp byte [esi+ebx], ' ' cmove ecx, esi jmp .search .start: dec ebx .search: inc ebx cmp ebx, [esi+TText.GapBegin] jb @f cmp ebx, [esi+TText.GapEnd] jae @f add ebx, [esi+TText.GapEnd] sub ebx, [esi+TText.GapBegin] @@: cmp ebx, [esi+TText.Length] jae .missing cmp byte [esi+ebx], ' ' cmove ecx, esi je .search test ecx, ecx jz .search cmp ebx, [esi+TText.GapBegin] jb .finish sub ebx, [esi+TText.GapEnd] add ebx, [esi+TText.GapBegin] .finish: stdcall TextPosToIndex, esi, ebx mov [esp+4*regEAX], eax clc popad return .missing: mov dword [esp+4*regEAX], 0 stc popad return endp ; Creates a search index for the given .pattern and .options ; After the text change, should be called with .pattern = TAsmEdit._search_str and .options = TAsmEdit._search_options. method TAsmEdit.Search ;, .pattern, .options .lines dd ? begin pushad mov esi, [.self] xor eax, eax xchg eax, [esi+TAsmEdit._search_index] test eax, eax jz .idx_ready stdcall FreeMem, eax .idx_ready: mov eax, [esi+TAsmEdit._search_prep] mov edx, [esi+TAsmEdit._search_str] or eax, edx jz .prep_ok ; the search is empty. Go, start new search. cmp edx, [.pattern] jne .clean_prev mov eax, [.options] cmp eax, [esi+TAsmEdit._search_options] je .prepared ; this is simply index refresh, after changes in the editor text. .clean_prev: xor eax, eax xor edx, edx xchg eax, [esi+TAsmEdit._search_prep] xchg edx, [esi+TAsmEdit._search_str] stdcall StrDel, edx stdcall FreeMem, eax .prep_ok: cmp [.pattern], 0 ; simply clear the previous search results. je .finish xor edx, edx stdcall StrLen, [.pattern] test eax, eax jz .finish mov eax, [.options] mov [esi+TAsmEdit._search_options], eax stdcall StrDup, [.pattern] mov [esi+TAsmEdit._search_str], eax stdcall TextPrepareSearch, [esi+TAsmEdit._search_str], [esi+TAsmEdit._search_options] mov [esi+TAsmEdit._search_prep], eax .prepared: stdcall CreateArray, sizeof.POINT mov edx, eax mov ebx, [esi+TAsmEdit._lines] mov eax, [ebx+TText.Length] sub eax, [ebx+TText.GapEnd] add eax, [ebx+TText.GapBegin] shr eax, 2 mov [.lines], eax xor ebx, ebx dec ebx .next_line: inc ebx cmp ebx, [.lines] jae .end_search exec esi, TAsmEdit:TextLine, ebx, FALSE jc .end_search mov ecx, [eax] xor eax, eax .loop: stdcall TextSearch, ecx, [esi+TAsmEdit._search_str], eax, [esi+TAsmEdit._search_prep], [esi+TAsmEdit._search_options] jnc .next_line push eax ebx stdcall TextPosToIndex, ecx, eax push eax stdcall AddArrayItems, edx, 1 pop [eax+POINT.x] [eax+POINT.y] pop eax inc eax jmp .loop .end_search: mov [esi+TAsmEdit._search_index], edx exec esi, TAsmEdit:SearchHere .finish: popad return endp method TAsmEdit.SearchRefresh begin push eax mov eax, [.self] cmp [eax+TAsmEdit._search_str], 0 je .finish exec eax, TAsmEdit:Search, [eax+TAsmEdit._search_str], [eax+TAsmEdit._search_options] .finish: pop eax return endp method TAsmEdit.SearchHere begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._search_index] test edi, edi jz .deselect get eax, esi, TAsmEdit:CaretY get edx, esi, TAsmEdit:CaretX xor ecx, ecx dec ecx .search: inc ecx cmp ecx, [edi+TArray.count] jge .not_found cmp eax, [edi+TArray.array+8*ecx+POINT.y] jg .search jl .found cmp edx, [edi+TArray.array+8*ecx+POINT.x] jg .search .found: set esi, TAsmEdit:CaretY, [edi+TArray.array+8*ecx+POINT.y] stdcall StrLenUtf8, [esi+TAsmEdit._search_str] add eax, [edi+TArray.array+8*ecx+POINT.x] set esi, TAsmEdit:CaretX, eax exec esi, TAsmEdit:SelStartHere set esi, TAsmEdit:CaretX, [edi+TArray.array+8*ecx+POINT.x] exec esi, TAsmEdit:SelEndHere exec esi, TAsmEdit:ScrollToCaretX exec esi, TAsmEdit:CenterCaretY, [edi+TArray.array+8*ecx+POINT.y] .finish: exec esi, TAsmEdit:__ClearScrollbar, scrollY exec esi, TAsmEdit:__DrawScrollbar, scrollY exec esi, TAsmEdit:__Invalidate, scrollY popad return .deselect: exec esi, TAsmEdit:SelStartHere exec esi, TAsmEdit:SelEndHere jmp .finish .not_found: or eax, edx jz .deselect xor ecx, ecx dec ecx xor eax, eax xor edx, edx jmp .search endp method TAsmEdit.SearchNext begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._search_index] test edi, edi jz .finish cmp [edi+TArray.count], 0 je .finish ; check from where to start - from the current caret position, or one char right. mov eax, [esi+TAsmEdit._selEnd.y] cmp eax, [esi+TAsmEdit._selStart.y] jne .do_search cmp eax, [esi+TAsmEdit._caretPos.y] jne .do_search mov eax, [esi+TAsmEdit._selEnd.x] mov edx, [esi+TAsmEdit._selStart.x] cmp eax, [esi+TAsmEdit._caretPos.x] jne .do_search sub edx, eax jns @f neg edx @@: stdcall StrLenUtf8, [esi+TAsmEdit._search_str] cmp eax, edx jne .do_search ; from the next char, because now we have one match selected. mov eax, [esi+TAsmEdit._caretPos.x] inc eax set esi, TAsmEdit:CaretX, eax .do_search: get eax, esi, TAsmEdit:CaretY get edx, esi, TAsmEdit:CaretX xor ecx, ecx dec ecx .search: inc ecx cmp ecx, [edi+TArray.count] jge .not_found cmp eax, [edi+TArray.array+8*ecx+POINT.y] jg .search jl .found cmp edx, [edi+TArray.array+8*ecx+POINT.x] jg .search .found: set esi, TAsmEdit:CaretY, [edi+TArray.array+8*ecx+POINT.y] stdcall StrLenUtf8, [esi+TAsmEdit._search_str] add eax, [edi+TArray.array+8*ecx+POINT.x] set esi, TAsmEdit:CaretX, eax exec esi, TAsmEdit:SelStartHere set esi, TAsmEdit:CaretX, [edi+TArray.array+8*ecx+POINT.x] exec esi, TAsmEdit:SelEndHere exec esi, TAsmEdit:CenterCaretY, [edi+TArray.array+8*ecx+POINT.y] exec esi, TAsmEdit:ScrollToCaretX exec esi, TAsmEdit:__ClearScrollbar, scrollY exec esi, TAsmEdit:__DrawScrollbar, scrollY exec esi, TAsmEdit:__Invalidate, scrollY .finish: popad return .not_found: or eax, edx jz .finish xor ecx, ecx dec ecx xor eax, eax xor edx, edx jmp .search endp method TAsmEdit.SearchPrev begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._search_index] test edi, edi jz .finish cmp [edi+TArray.count], 0 je .finish ; sort selection first mov eax, [esi+TAsmEdit._selStart.y] cmp eax, [esi+TAsmEdit._selEnd.y] jne .do_search cmp eax, [esi+TAsmEdit._caretPos.y] jne .do_search mov eax, [esi+TAsmEdit._selStart.x] mov edx, [esi+TAsmEdit._selEnd.x] cmp eax, [esi+TAsmEdit._caretPos.x] je .sort cmp edx, [esi+TAsmEdit._caretPos.x] jne .do_search .sort: cmp eax, edx cmova eax, edx set esi, TAsmEdit:CaretX, eax .do_search: get eax, esi, TAsmEdit:CaretY get edx, esi, TAsmEdit:CaretX mov ecx, [edi+TArray.count] .search: dec ecx js .not_found cmp eax, [edi+TArray.array+8*ecx+POINT.y] jl .search jg .found cmp edx, [edi+TArray.array+8*ecx+POINT.x] jle .search .found: set esi, TAsmEdit:CaretY, [edi+TArray.array+8*ecx+POINT.y] stdcall StrLenUtf8, [esi+TAsmEdit._search_str] add eax, [edi+TArray.array+8*ecx+POINT.x] set esi, TAsmEdit:CaretX, eax exec esi, TAsmEdit:SelStartHere set esi, TAsmEdit:CaretX, [edi+TArray.array+8*ecx+POINT.x] exec esi, TAsmEdit:SelEndHere exec esi, TAsmEdit:CenterCaretY, [edi+TArray.array+8*ecx+POINT.y] exec esi, TAsmEdit:ScrollToCaretX exec esi, TAsmEdit:__ClearScrollbar, scrollY exec esi, TAsmEdit:__DrawScrollbar, scrollY exec esi, TAsmEdit:__Invalidate, scrollY .finish: popad return .not_found: or eax, edx cmp eax, -1 je .finish mov ecx, [edi+TArray.count] mov eax, [edi+TArray.array+8*ecx-8+POINT.y] inc eax xor edx, edx jmp .search endp method TAsmEdit.ToggleBookmark begin pushad mov esi, [.self] exec esi, TAsmEdit:TextLine, -1, FALSE jc .finish mov eax, [eax] xor [eax+TTextLine.flags], tlfBookmark xor eax, eax xchg eax, [esi+TAsmEdit._img_margin_valid] exec esi, TWindow:RectChangedXY2, 0, 0, [esi+TAsmEdit._left_margin], [esi+TAsmEdit._height] .finish: popad return endp method TAsmEdit.GoPrevBookmark begin pushad get ebx, [.self], TAsmEdit:CaretY .loop: dec ebx js .finish exec [.self], TAsmEdit:TextLine, ebx, FALSE jc .finish mov eax, [eax] test [eax+TTextLine.flags], tlfBookmark jz .loop set [.self], TAsmEdit:CaretY, ebx exec [.self], TAsmEdit:CenterCaretY exec [.self], TAsmEdit:UpdateCaretPos .finish: popad return endp method TAsmEdit.GoNextBookmark begin pushad get ebx, [.self], TAsmEdit:CaretY .loop: inc ebx exec [.self], TAsmEdit:TextLine, ebx, FALSE jc .finish mov eax, [eax] test [eax+TTextLine.flags], tlfBookmark jz .loop set [.self], TAsmEdit:CaretY, ebx exec [.self], TAsmEdit:CenterCaretY exec [.self], TAsmEdit:UpdateCaretPos .finish: popad return endp method TAsmEdit.ClearBookmarks begin pushad mov esi, [.self] mov edi, [esi+TAsmEdit._lines] xor ebx, ebx .loop: cmp ebx, [edi+TText.GapBegin] jb .ofs_ok cmp ebx, [edi+TText.GapEnd] jae .ofs_ok add ebx, [edi+TText.GapEnd] sub ebx, [edi+TText.GapBegin] .ofs_ok: cmp ebx, [edi+TText.Length] jae .end_loop mov eax, [edi+ebx] and [eax+TTextLine.flags], not tlfBookmark add ebx, 4 jmp .loop .end_loop: and [esi+TAsmEdit._img_margin_valid], 0 exec esi, TWindow:RectChangedXY2, 0, 0, [esi+TAsmEdit._left_margin], [esi+TAsmEdit._height] popad return endp method TAsmEdit.IndentSelection begin exec [.self], TAsmEdit:SelectionPrefix, selprInsert, ' ' return endp method TAsmEdit.OutdentSelection begin exec [.self], TAsmEdit:SelectionPrefix, selprRemove, ' ' return endp method TAsmEdit.CommentSelection begin exec [.self], TAsmEdit:SelectionPrefix, selprInsert, ';' return endp method TAsmEdit.UncommentSelection begin exec [.self], TAsmEdit:SelectionPrefix, selprRemove, ';' return endp endmodule include "themes/asmedit.asm" include "syntax/SyntaxFASM.asm" |
Added freshlib/gui/TBackWindow.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TBackWindow object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: TBackWindow is a window that have TBackBuffer object associated and all drawing ; happens in the back buffer. This way the repainting events are processed ; flicker free on all supported OSes. ;_________________________________________________________________________________________ module "TBackWindow library" object TBackWindow, TWindow ; private fields ._pShadow dd ? ; pointer to TBackBuffer ._fShadowReady dd ? ; parameters param .pShadow, ._pShadow, .SetShadow ; methods method .Destroy method .SetShadow, .value method .SysEventHandler, .pEvent abstract ._RedrawShadow ; abstract method to be implemented in descending classes. endobj ;_________________________________________________________________________________________ method TBackWindow.Destroy begin set [.self], TBackWindow:pShadow, 0 return endp ;_________________________________________________________________________________________ method TBackWindow.SetShadow begin push eax esi mov esi, [.self] mov eax, [.value] xchg eax, [esi+TBackWindow._pShadow] cmp eax, [esi+TBackWindow._pShadow] je .finish test eax, eax jz .finish stdcall DestroyBackBuffer, eax .finish: mov [esi+TBackWindow._fShadowReady], 0 pop esi eax return endp ;_________________________________________________________________________________________ method TBackWindow.SysEventHandler begin pushad mov esi, [.self] mov ebx, [.pEvent] cmp [ebx+TSysEvent.event], sePaint je .paint cmp [ebx+TSysEvent.event], seResize je .resize inherited [.pEvent] .continue: popad return ;......................................................................................... .resize: ; DebugMsg "Window resized!" ; OutputValue " width=", [ebx+TMoveResizeEvent.newWidth], 10, -1 ; OutputValue "height=", [ebx+TMoveResizeEvent.newHeight], 10, -1 mov [esi+TBackWindow._fShadowReady], 0 jmp .continue ;......................................................................................... .paint: locals .clip_bounds TBounds endl stdcall SetClipRectangle, [ebx+TPaintEvent.context], 0 get edi, esi, TBackWindow:pShadow get ecx, esi, TBackWindow:height get eax, esi, TBackWindow:width test edi, edi jz .create_new_shadow cmp eax, [edi+TBackBuffer.width] ja .create_new_shadow cmp ecx, [edi+TBackBuffer.height] ja .create_new_shadow shl eax, 1 shl ecx, 1 add eax, 100 add ecx, 100 cmp eax, [edi+TBackBuffer.width] ja .shadow_size_ok cmp ecx, [edi+TBackBuffer.height] ja .shadow_size_ok sub eax, 100 sub ecx, 100 shr eax, 1 shr ecx, 1 .create_new_shadow: cmp [esi+TBackWindow.handle], 0 je .end_paint lea eax, [3*eax] lea ecx, [3*ecx] sar eax, 1 sar ecx, 1 add eax, 100 add ecx, 100 ; DebugMsg "Back buffer created." ; OutputValue " width=", eax, 10, -1 ; OutputValue "height=", ecx, 10, -1 stdcall CreateBackBuffer, [esi+TBackWindow.handle], eax, ecx jc .end_paint set esi, TBackWindow:pShadow, eax jmp .draw .shadow_size_ok: cmp [esi+TBackWindow._fShadowReady], FALSE jne .shadowok .draw: ; stdcall Get, esi, TWindow.FreeArea exec esi, TBackWindow:_RedrawShadow mov [esi+TBackWindow._fShadowReady], TRUE ; DebugMsg "Back buffer repainted." .shadowok: lea eax, [.clip_bounds] lea ecx, [ebx+TPaintEvent.rect] stdcall RectToBounds, eax, ecx stdcall SetClipRectangle, [ebx+TPaintEvent.context], eax stdcall DrawBackBuffer, [ebx+TPaintEvent.context], [esi+TBackWindow._pShadow], 0, 0 inc [esi+TWindow.___counter] ; debug code ; DebugMsg "Window painted." ; OutputValue " X=", [.clip_bounds.x], 10, -1 ; OutputValue " Y=", [.clip_bounds.y], 10, -1 ; OutputValue " width=", [.clip_bounds.width], 10, -1 ; OutputValue "height=", [.clip_bounds.height], 10, -1 .end_paint: clc popad return endp ;_________________________________________________________________________________________ endmodule |
Added freshlib/gui/TButton.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TButton object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Represents GUI button. ;_________________________________________________________________________________________ module "TButton library" ; Button states for the field TButton._state; The height of TButton._canvas = btnStateCount * TButton._height bsNeutral = 0 bsHovered = 1 bsPressed = 2 bsDisabled = 3 btnStateCount = 4 ; icon positions iposLeft = 0 iposRight = 1 iposTop = 2 iposBottom = 3 iposCenter = 4 object TButton, TWindow ; private fields ._state dd ? ; internal state variable. ._textalign dd ? ._icon dd ? ._iconpos dd ? ._OnClick dd ? ._ModalResult dd ? ._canvas dd ? ._canvas_valid dd ? ; parameters param .OnClick, ._OnClick, ._OnClick param .TextAlign, ._textalign, .SimpleSetParam:3 param .Icon, ._icon, .SetIcon param .IconPosition, ._iconpos, .SimpleSetParam:3 param .State, .GetState, ._state param .ModalResult, ._ModalResult, ._ModalResult ; methods ; parameters handling methods method .GetState method .SetIcon, .value method .SimpleSetParam, .param, .get, .value ; system events methods method .Create, .Parent method .Destroy method .ForceRefresh method ._RenderView method .UpdateAction, .action method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height method .Resize, .newWidth, .newHeight method .SetCaption, .value method .EventFocusIn method .EventFocusOut method .EventMouseEnter method .EventMouseLeave method .EventMouseMove, .x, .y, .kbdState method .EventButtonPress, .button, .kbdState, .x, .y method .EventButtonRelease, .button, .kbdState, .x, .y method .EventKeyPress, .utf8, .scancode, .kbdState method .EventKeyRelease, .utf8, .scancode, .kbdState endobj interface TButton.OnClick, .self, .button ; new method TButton.Create begin inherited [.Parent] mov eax, [.self] mov [eax+TButton._cursor], mcHand set eax, TButton:WantFocus, TRUE return endp method TButton.Destroy begin push ebx mov ebx, [.self] stdcall DestroyImage, [ebx+TButton._canvas] stdcall DestroyImage, [ebx+TButton._icon] pop ebx inherited return endp method TButton.ForceRefresh begin mov eax, [.self] and [eax+TButton._canvas_valid], 0 inherited return endp method TButton.SelfPaint begin pushad mov esi, [.self] cmp [esi+TButton._canvas_valid], 0 jne @f exec esi, TButton:_RenderView @@: mov ebx, [esi+TButton._canvas] test ebx, ebx jz .finish get edx, esi, TButton:State imul edx, [esi+TButton._height] add edx, [.ySrc] stdcall BlendImage, [.pDstImage], [.xDst], [.yDst], ebx, [.xSrc], edx, [.width], [.height] .finish: popad inherited [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] return endp method TButton.Resize ; .newWidth, .newHeight begin inherited [.newWidth], [.newHeight] pushad mov esi, [.self] mov ecx, [.newWidth] mov edx, [.newHeight] shl edx, 2 mov ebx, [esi+TButton._canvas] test ebx, ebx jz .create_new cmp ecx, [ebx+TImage.width] jg .destroy cmp edx, [ebx+TImage.height] jle .size_ok .destroy: stdcall DestroyImage, ebx and [esi+TButton._canvas], 0 .create_new: test ecx, ecx jz .size_ok test edx, edx jz .size_ok stdcall CreateImage2, ecx, edx, FALSE mov [esi+TButton._canvas], eax .size_ok: and [esi+TButton._canvas_valid], 0 exec esi, TButton:RectChanged2, 0 popad return endp method TButton.GetState begin pushad mov esi, [.self] get edi, esi, TButton:Action test edi, edi cmovz ecx, [esi+TButton._enabled] jz .test_en get ecx, edi, TAction:Enabled .test_en: mov eax, bsDisabled test ecx, ecx cmovnz eax, [esi+TButton._state] mov [esp+4*regEAX], eax popad return endp method TButton.SetCaption ;, .value begin inherited [.value] push eax mov eax, [.self] and [eax+TButton._canvas_valid], 0 pop eax exec [.self], TButton:RectChanged2, 0 return endp method TButton.SetIcon;, .value begin pushad mov esi, [.self] mov eax, [esi+TButton._icon] test eax, eax jz .load_new stdcall DestroyImage, eax xor eax, eax .load_new: cmp [.value], 0 je @f stdcall CreateImagePNG, [.value], -1 @@: mov [esi+TButton._icon], eax and [esi+TButton._canvas_valid], 0 exec esi, TButton:RectChanged2, 0 popad return endp method TButton.UpdateAction begin exec [.self], TButton:_RenderView exec [.self], TWindow:RectChanged2, 0 return endp method TButton._RenderView .bounds TBounds .client TBounds .clTxt dd ? .canvas dd ? .caption dd ? .enabled dd ? .icon dd ? .icon_x dd ? .icon_y dd ? begin pushad mov esi, [.self] mov eax, [esi+TButton._canvas] test eax, eax jz .finish mov [.canvas], eax get edx, esi, TButton:Action test edx, edx jz .get_normal get [.caption], edx, TAction:Caption get [.icon], edx, TAction:Icon jmp .render_states .get_normal: get [.caption], esi, TButton:Caption get [.icon], esi, TButton:Icon .render_states: xor eax, eax ; Y coordinate mov ecx, [esi+TButton._width] mov edx, [esi+TButton._height] mov [.icon_x], eax mov [.icon_y], eax mov [.bounds.x], eax mov [.client.x], eax mov [.bounds.y], eax mov [.client.y], eax mov [.bounds.width], ecx mov [.client.width], ecx mov [.bounds.height], edx mov [.client.height], edx mov ebx, [GUI.btnMarginX] mov edx, [GUI.btnMarginY] add [.bounds.x], ebx add [.bounds.y], edx sub [.bounds.width], ebx sub [.bounds.height], edx sub [.bounds.width], ebx sub [.bounds.height], edx mov edi, [.icon] test edi, edi jz .icon_pos_ok mov eax, [.bounds.width] sub eax, [edi+TImage.width] sar eax, 1 add eax, [.bounds.x] ; x coordinate of the icon. mov ecx, [.bounds.height] sub ecx, [edi+TImage.height] sar ecx, 1 add ecx, [.bounds.y] ; y coordinate of the icon. cmp [esi+TButton._iconpos], iposCenter je .icon_pos_store cmp [esi+TButton._iconpos], iposLeft jne @f ; align left mov eax, [.bounds.x] add ebx, [edi+TImage.width] add [.bounds.x], ebx sub [.bounds.width], ebx jmp .icon_pos_store @@: cmp [esi+TButton._iconpos], iposRight jne @f ; align right mov eax, [.bounds.x] add eax, [.bounds.width] sub eax, [edi+TImage.width] add ebx, [edi+TImage.width] sub [.bounds.width], ebx jmp .icon_pos_store @@: cmp [esi+TButton._iconpos], iposTop jne @f ; align top mov ecx, [.bounds.y] add edx, [edi+TImage.height] add [.bounds.y], edx sub [.bounds.height], edx jmp .icon_pos_store @@: cmp [esi+TButton._iconpos], iposBottom jne .icon_pos_ok ; align bottom mov ecx, [.bounds.y] add ecx, [.bounds.height] sub ecx, [edi+TImage.height] add edx, [edi+TImage.height] sub [.bounds.height], edx .icon_pos_store: mov [.icon_x], eax mov [.icon_y], ecx .icon_pos_ok: xor ebx, ebx ; 0 == bsNeutral .loop_y: ; draw the border and the background lea eax, [.client] stdcall [DrawBox], [.canvas], eax, [GUI.clBtnBk+4*ebx], [GUI.btnBorder+4*ebx], [GUI.boxBorderWidth] ; draw the icon mov edi, [.icon] test edi, edi jz .draw_text mov ecx, [.icon_y] mov eax, [.icon_x] add ecx, [.client.y] cmp ebx, bsPressed jne .blend_icon add eax, [GUI.btnPressedOfsX] add ecx, [GUI.btnPressedOfsY] .blend_icon: xor edx, edx stdcall BlendImage, [.canvas], eax, ecx, edi, edx, edx, [edi+TImage.width], [edi+TImage.height] .draw_text: get edi, esi, TButton:TextAlign cmp [.caption], 0 je .textok test edi, dtfNone jnz .textok mov eax, [.bounds.x] mov ecx, [.bounds.y] cmp ebx, bsPressed jne @f add eax, [GUI.btnPressedOfsX] add ecx, [GUI.btnPressedOfsY] @@: stdcall DrawTextBox, [.canvas], [.caption], eax, ecx, [.bounds.width], [.bounds.height], 2, edi, [GUI.DefaultFont], [GUI.clBtnTxt+4*ebx] .textok: cmp esi, [__FocusedWindow] jne .focus_ok mov eax, [.client.y] add eax, [.client.height] sub eax, 2 stdcall DrawSolidRect, [.canvas], 0, eax, [esi+TButton._width], 2, [GUI.clBorderFocused] .focus_ok: get eax, esi, TWindow:height add [.bounds.y], eax add [.client.y], eax inc ebx cmp ebx, bsDisabled jbe .loop_y .finish: stdcall StrDel, [.caption] inc [esi+TButton._canvas_valid] popad return endp method TButton.SimpleSetParam begin push eax esi edi mov esi, [.self] mov edi, esi add esi, [.get] mov eax, [.value] cmp eax, [esi] je .finish mov [esi], eax cmp [.param], 0 je @f and [edi+TButton._canvas_valid], 0 @@: exec edi, TButton:RectChanged2, 0 .finish: pop edi esi eax return endp method TButton.EventFocusIn begin push eax mov eax, [.self] and [eax+TButton._canvas_valid], 0 exec eax, TWindow:RectChanged2, 0 pop eax inherited return endp method TButton.EventFocusOut begin push eax mov eax, [.self] and [eax+TButton._canvas_valid], 0 exec eax, TWindow:RectChanged2, 0 pop eax inherited return endp method TButton.EventMouseEnter begin exec [.self], TButton:SimpleSetParam, 0, TButton._state, bsHovered inherited return endp method TButton.EventMouseLeave begin exec [.self], TButton:SimpleSetParam, 0, TButton._state, bsNeutral inherited return endp method TButton.EventMouseMove begin ; exec [.self], TButton:SimpleSetParam, 0, TButton._state, bsHovered inherited [.x], [.y], [.kbdState] return endp method TButton.EventButtonPress begin exec [.self], TButton:SimpleSetParam, 0, TButton._state, bsPressed return endp method TButton.EventButtonRelease begin pushad mov esi, [.self] cmp [esi+TButton._state], bsPressed jne .finish cmp [.x], -1 ; when called from the keyboard event as a mouse emulation the .x and .y parameters are both -1. jne .hover cmp [.y], -1 je .state_ok .hover: exec [.self], TButton:SimpleSetParam, 0, TButton._state, bsHovered .state_ok: cmp [esi+TButton._ModalResult], mrNone je @f get eax, esi, TButton:Parent istype eax, TForm jne @f set eax, TForm:ModalResult, [esi+TButton._ModalResult] @@: get eax, esi, TButton:Menu test eax, eax jz .menu_ok exec eax, TMenu:Show, esi, 0, 0 .menu_ok: get eax, esi, TButton:OnClick test eax, eax jz .click_ok stdcall eax, esi, [.button] ; OnClick event .click_ok: get eax, esi, TButton:Action test eax, eax jz .finish exec eax, TAction:Execute, [.self] .finish: popad return endp method TButton.EventKeyPress begin inherited [.utf8], [.scancode], [.kbdState] jc .finish cmp [.utf8], ' ' clc jne .finish exec [.self], TButton:SimpleSetParam, 0, TButton._state, bsPressed exec [.self], TWindow:EventButtonRelease, mbLeft, [.kbdState], -1, -1 stc .finish: return endp method TButton.EventKeyRelease begin exec [.self], TButton:SimpleSetParam, 0, TButton._state, bsNeutral return endp endmodule |
Added freshlib/gui/TCanvasWindow.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | module "TCanvasWindow" object TCanvasWindow, TWindow ._canvas dd ? ; TImage containing the image of the window only. ._canvas_valid dd ? ._OnPaint dd ? param .Canvas, ._canvas, NONE param .OnPaint, ._OnPaint, .SetOnPaint method .SetOnPaint, .value method .ForceRefresh method .__RenderView method .__UpdateImages method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height ; Paints itself on the caller provided TImage. endobj interface TCanvasWindow.OnPaint, .self, .pCanvas method TCanvasWindow.ForceRefresh begin mov eax, [.self] and [eax+TCanvasWindow._canvas_valid], 0 inherited return endp method TCanvasWindow.SelfPaint ; .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height begin pushad mov esi, [.self] cmp [esi+TCanvasWindow._canvas_valid], 0 jne @f exec esi, TCanvasWindow:__RenderView @@: mov ebx, [esi+TCanvasWindow._canvas] test ebx, ebx jz .finish stdcall BlendImage, [.pDstImage], [.xDst], [.yDst], ebx, [.xSrc], [.ySrc], [.width], [.height] .finish: popad inherited [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] return endp method TCanvasWindow.__UpdateImages begin pushad mov esi, [.self] ; DebugMsg "TCanvasWindow update canvas." mov ebx, [esi+TCanvasWindow._visible] mov edi, [esi+TCanvasWindow._canvas] mov ecx, [esi+TCanvasWindow._width] mov edx, [esi+TCanvasWindow._height] test ebx, ebx jz .destroy test edi, edi jz .create_new ; check the size cmp ecx, [edi+TImage.width] ja .destroy cmp edx, [edi+TImage.height] jbe .setwrap .destroy: ; DebugMsg "Destroy old canvas." stdcall DestroyImage, edi ; canvas xor eax, eax mov [esi+TCanvasWindow._canvas], eax test ebx, ebx jz .exit .create_new: ; DebugMsg "Create new canvas." ; new size - get it with x1.5 reserve in order to allow easy resizing. ; lea ecx, [ecx*3] ; lea edx, [edx*3] ; shr ecx, 1 ; shr edx, 1 ; The above reserve is too big. Lets make it more RAM-friendly. lea eax, [ecx+256] lea ebx, [edx+256] stdcall CreateImage2, eax, ebx, FALSE mov [esi+TCanvasWindow._canvas], eax mov edi, eax ; OutputValue "Canvas created: ", eax, 16, 8 .setwrap: mov [edi+TImage.wrapW], ecx mov [edi+TImage.wrapH], edx .exit: and [esi+TCanvasWindow._canvas_valid], 0 popad inherited return endp method TCanvasWindow.__RenderView begin pushad mov esi, [.self] get eax, esi, TCanvasWindow:OnPaint test eax, eax jz .user_paint_ok get ecx, esi, TCanvasWindow:Canvas test ecx, ecx jz .user_paint_ok stdcall eax, esi, ecx ; user OnPaint handler. .user_paint_ok: inc [esi+TCanvasWindow._canvas_valid] popad return endp method TCanvasWindow.SetOnPaint begin push eax esi mov esi, [.self] mov eax, [.value] cmp eax, [esi+TCanvasWindow._OnPaint] je .finish mov [esi+TCanvasWindow._OnPaint], eax exec esi, TWindow:RectChanged2, 0 .finish: pop esi eax return endp ;_________________________________________________________________________________________ endmodule |
Added freshlib/gui/TCheckbox.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TCheckbox object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Represents GUI checkbox. ;_________________________________________________________________________________________ module "TCheckbox library" ; Button states for the field TCheckbox._state cbsNeutral = 0 cbsHovered = 1 cbsPressed = 2 cbsDisabled = 3 object TCheckbox, TCanvasWindow ; private fields ._state dd ? ; internal state variable. ._OnClick dd ? ._OnChange dd ? ._checked dd ? ._value dd ? ; parameters param .Checked, .GetChecked, .SetChecked param .Value, .GetValue, ._value param .OnClick, ._OnClick, ._OnClick param .OnChange, ._OnChange, ._OnChange ; methods ; parameters handling methods method .GetChecked method .SetChecked, .value method .GetValue ; system events methods method .Create, .Parent method .Autosize method .__RenderView method .UpdateAction, .action method .EventMouseEnter method .EventMouseLeave method .EventButtonPress, .button, .kbdState, .x, .y method .EventButtonRelease, .button, .kbdState, .x, .y method .EventKeyPress, .utf8, .scancode, .kbdState method .EventKeyRelease, .utf8, .scancode, .kbdState method .EventFocusIn method .EventFocusOut endobj ; new method TCheckbox.Create begin inherited [.Parent] set [.self], TCheckbox:Enabled, TRUE set [.self], TCheckbox:Cursor, mcHand set [.self], TCheckbox:WantFocus, TRUE return endp method TCheckbox.Autosize begin mov edx, [GUI.cbIconSize] get eax, [.self], TCheckbox:Caption test eax, eax cmovz eax, [GUI.cbIconSize] jz .finish push eax stdcall StrPtr, eax stdcall GetTextBounds, eax, [eax+string.len], [GUI.DefaultFont] stdcall StrDel ; from the stack add eax, [GUI.cbIconSize] add eax, [GUI.cbMargin] cmp edx, [GUI.cbIconSize] cmovl edx, [GUI.cbIconSize] .finish: return endp method TCheckbox.EventFocusIn begin push eax mov eax, [.self] and [eax+TCheckbox._canvas_valid], 0 exec eax, TWindow:RectChanged2, 0 pop eax inherited return endp method TCheckbox.EventFocusOut begin push eax mov eax, [.self] and [eax+TCheckbox._canvas_valid], 0 exec eax, TWindow:RectChanged2, 0 pop eax inherited return endp method TCheckbox.__RenderView .bounds TBounds .canvas dd ? .caption dd ? .enabled dd ? .checked dd ? begin pushad mov esi, [.self] get edx, esi, TCheckbox:Action test edx, edx jz .get_normal get eax, edx, TAction:Caption stdcall StrDup, eax mov [.caption], eax get [.checked], edx, TAction:Checked jmp .get_enabled .get_normal: get [.caption], esi, TCheckbox:Caption get [.checked], esi, TCheckbox:Checked .get_enabled: get [.enabled], esi, TCheckbox:Enabled .paint_it: get eax, esi, TCanvasWindow:Canvas mov [.canvas], eax test eax, eax jz .finish mov eax, [esi+TCheckbox._state] cmp [.enabled], 0 jne .state_ok mov eax, cbsDisabled .state_ok: mov edi, [GUI.clCheckboxBack+4*eax] ; background color get ecx, esi, TCheckbox:height mov edx, [GUI.cbIconSize] sub ecx, edx sar ecx, 1 mov [.bounds.x], 0 mov [.bounds.y], ecx mov [.bounds.width], edx mov [.bounds.height], edx stdcall DrawSolidRect, [.canvas], 0, 0, [esi+TCheckbox._width], [esi+TCheckbox._height], [GUI.clDialogBk] lea eax, [.bounds] mov ebx, [GUI.borderCheckbox] cmp [.enabled], 0 jne .border_ok or ebx, bxDisabled .border_ok: stdcall [DrawBox], [.canvas], eax, edi, ebx, [GUI.boxBorderWidth] mov [.bounds.x], 0 mov [.bounds.y], ecx mov [.bounds.width], edx mov [.bounds.height], edx ; first draw the icon and then resize bounds for the text. cmp [.checked], 0 je .icon_ok mov eax, [GUI.iconCheckedGray] cmp [.enabled], 0 je .draw_icon mov eax, [GUI.iconChecked] .draw_icon: stdcall BlendImage, [.canvas], [.bounds.x], [.bounds.y], eax, 0, 0, [eax+TImage.width], [eax+TImage.height] .icon_ok: mov ecx, [.bounds.width] mov edx, [esi+TCheckbox._width] mov ebx, [esi+TCheckbox._height] add ecx, [GUI.cbMargin] sub edx, ecx mov eax, [.caption] test eax, eax jz .textok mov edi, [GUI.clCheckboxTxt] cmp [.enabled], 0 jne .txt_color_ok mov edi, [GUI.clCheckboxTxtGray] .txt_color_ok: stdcall DrawTextBox, [.canvas], eax, ecx, 0, edx, ebx, 0, dtfAlignLeft or dtfAlignMiddle, [GUI.DefaultFont], edi stdcall StrDel, eax .textok: cmp esi, [__FocusedWindow] jne .not_focused mov eax, [.bounds.y] add eax, 15 stdcall DrawSolidRect, [.canvas], 0, eax, 13, 2, [GUI.clBorderFocused] .not_focused: .finish: inherited popad return endp method TCheckbox.UpdateAction begin exec [.self], TWindow:RectChanged2, 0 return endp method TCheckbox.EventMouseEnter begin mov eax, [.self] mov [eax+TCheckbox._state], cbsHovered exec eax, TCheckbox:RectChanged2, 0 inherited return endp method TCheckbox.EventMouseLeave begin mov eax, [.self] mov [eax+TCheckbox._state], cbsNeutral exec eax, TCheckbox:ForceRefresh inherited return endp method TCheckbox.EventButtonPress begin push eax mov eax, [.self] mov [eax+TCheckbox._state], cbsPressed get eax, [.self], TCheckbox:Checked xor eax, 1 set [.self], TCheckbox:Checked, eax get eax, [.self], TCheckbox:OnClick test eax, eax jz .finish stdcall eax, [.self], [.button] .finish: exec [.self], TCheckbox:ForceRefresh pop eax return endp method TCheckbox.EventButtonRelease begin pushad mov esi, [.self] mov [esi+TCheckbox._state], cbsHovered exec esi, TCheckbox:ForceRefresh popad return endp method TCheckbox.EventKeyPress begin inherited [.utf8], [.scancode], [.kbdState] jc .exit cmp [.utf8], ' ' clc jne .exit push ecx mov ecx, [.self] cmp [ecx+TCheckbox._state], cbsPressed je .processed exec ecx, TWindow:EventButtonPress, mbLeft, [.kbdState], 0, 0 mov [ecx+TCheckbox._state], cbsPressed exec ecx, TCheckbox:ForceRefresh .processed: stc pop ecx .exit: return endp method TCheckbox.EventKeyRelease begin push ecx mov ecx, [.self] mov [ecx+TCheckbox._state], cbsNeutral exec ecx, TCheckbox:ForceRefresh pop ecx return endp method TCheckbox.GetChecked begin push ecx edx mov edx, [.self] mov ecx, [edx+TCheckbox.__action] jecxz .native get eax, ecx, TAction:Checked jmp .finish .native: mov eax, [edx+TCheckbox._checked] .finish: pop edx ecx return endp method TCheckbox.SetChecked begin pushad mov ecx, [.self] mov eax, [.value] get edx, ecx, TCheckbox:Checked cmp eax, edx je .finish cmp [ecx+TCheckbox.__action], 0 je .action_ok set [ecx+TCheckbox.__action], TAction:Checked, eax .action_ok: mov [ecx+TCheckbox._checked], eax exec ecx, TCheckbox:ForceRefresh cmp [ecx+TCheckbox._OnChange], 0 je .finish stdcall [ecx+TCheckbox._OnChange], ecx ; MUST BE IMMEDIATELY BEFORE THE EXIT .finish: popad return endp method TCheckbox.GetValue begin get eax, [.self], TCheckbox:Checked test eax, eax jz .finish mov eax, [.self] mov eax, [eax+TCheckbox._value] .finish: return endp endmodule |
Added freshlib/gui/TColorSample.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TColorSample object class ; ; Target OS: Any ; ; Dependencies: TCanvasWindow ; ; Notes: Represents GUI window that displays assigned color on a chessboard background. ;_________________________________________________________________________________________ module "TColorSample library" object TColorSample, TCanvasWindow ._color dd ? ._prev dd ? param .Color, ._color, .SetColor method .SetColor, .value method .__RenderView endobj method TColorSample.SetColor begin push eax ecx edx mov edx, [.self] mov eax, [.value] xchg eax, [edx+TColorSample._color] cmp eax, [edx+TColorSample._color] je .finish exec edx, TColorSample:__RenderView exec edx, TColorSample:RectChanged2, 0 .finish: pop edx ecx eax return endp method TColorSample.__RenderView .border TBounds begin pushad mov esi, [.self] get ebx, esi, TColorSample:Canvas xor eax, eax mov ecx, [esi+TColorSample._width] mov edx, [esi+TColorSample._height] mov [.border.x], eax mov [.border.y], eax mov [.border.width], ecx mov [.border.height], edx stdcall BlendImageTileWrap, ebx, eax, eax, ecx, edx, [GUI.bgChessboard] stdcall BlendSolidRect, ebx, eax, eax, ecx, edx, [esi+TColorSample._color] popad inherited return endp endmodule |
Added freshlib/gui/TEdit.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TEdit object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Represents single line edit control. ;_________________________________________________________________________________________ module "TEdit library" object TEdit, TCanvasWindow ._Text dd ? ._Len dd ? ; the length of the string in characters. (UTF-8) ._Start dd ? ; Where the string begins to be displayed in the edit window. ._Pos dd ? ; Position of the caret in the string. ._Sel dd ? ; Position of the selection in the string. ._drag_mode dd ? ._MarginLeft dd ? ._MarginRight dd ? ._OnChange dd ? ._Lock dd ? param .Text, .GetText, .SetText param .Selection, .GetSel, .ReplaceSel param .MarginLeft, ._MarginLeft, ._MarginLeft param .MarginRight, ._MarginRight, ._MarginRight param .OnChange, ._OnChange, ._OnChange param .CaretPos, ._Pos, .SetCaretPos ; System methods method .Create, .parent method .Destroy method .__RenderView ; parameters get/set methods method .GetText method .GetSel method .ReplaceSel, .hString method .SetText, .value method .SetCaretPos, .value ; public methods method .HitTest, .x, .select ; system event methods method .UpdateCaretPos method .Move, .newX, .newY method .EventKeyPress, .utf8, .scancode, .kbdState method .EventKeyRelease, .utf8, .scancode, .kbdState method .EventButtonPress, .button, .kbdState, .x, .y method .EventMouseMove, .x, .y, .kbdState method .EventButtonRelease, .button, .kbdState, .x, .y method .EventFocusIn method .EventFocusOut endobj interface TEdit.OnChange, .self method TEdit.Create begin push ecx eax inherited [.parent] stdcall StrNew mov ecx, [.self] mov [ecx+TEdit._Text], eax mov [ecx+TEdit._cursor], mcText set ecx, TEdit:WantFocus, TRUE pop eax ecx return endp method TEdit.Destroy begin mov eax, [.self] stdcall StrDel, [eax+TEdit._Text] inherited return endp method TEdit.GetText begin mov eax, [.self] stdcall StrDup, [eax+TEdit._Text] return endp method TEdit.GetSel begin pushad mov esi, [.self] xor edx, edx mov ebx, [esi+TEdit._Pos] mov ecx, [esi+TEdit._Sel] cmp ebx, [esi+TEdit._Sel] je .finish jl @f xchg ebx, ecx ; ebx=beg_selection; ecx=end_selection @@: stdcall StrOffsUtf8, [esi+TEdit._Text], ecx mov ecx, eax stdcall StrOffsUtf8, [esi+TEdit._Text], ebx mov ebx, eax stdcall StrPtr, [esi+TEdit._Text] sub ebx, eax ; begin of the selection sub ecx, eax sub ecx, ebx stdcall StrNew mov edx, eax stdcall StrCopyPart, edx, [esi+TEdit._Text], ebx, ecx .finish: mov [esp+4*regEAX], edx popad return endp ; returns CF=1 if there was no selection. ; CF=0 if some text was deleted. method TEdit.ReplaceSel ;, .hString .beg dd ? .end dd ? begin pushad mov esi, [.self] xor edx, edx mov ebx, [esi+TEdit._Pos] mov ecx, [esi+TEdit._Sel] cmp ebx, [esi+TEdit._Sel] jne @f lea edx, [edx+1] ; ret CF=1 @@: jle @f xchg ebx, ecx ; ebx=beg_selection; ecx=end_selection @@: add [esi+TEdit._Len], ebx sub [esi+TEdit._Len], ecx stdcall StrOffsUtf8, [esi+TEdit._Text], ecx mov [.end], eax stdcall StrOffsUtf8, [esi+TEdit._Text], ebx mov [.beg], eax stdcall StrPtr, [esi+TEdit._Text] sub [.beg], eax ; begin of the selection sub [.end], eax stdcall StrSplit, [esi+TEdit._Text], [.end] ; end of the string mov ecx, eax stdcall StrSplit, [esi+TEdit._Text], [.beg] stdcall StrDel, eax cmp [.hString], 0 je .string_ok stdcall StrCat, [esi+TEdit._Text], [.hString] stdcall StrLenUtf8, [.hString], -1 add ebx, eax add [esi+TEdit._Len], eax .string_ok: mov [esi+TEdit._Sel], ebx mov [esi+TEdit._Pos], ebx stdcall StrCat, [esi+TEdit._Text], ecx stdcall StrDel, ecx cmp [esi+TEdit._OnChange], 0 je .event_ok pushad stdcall [esi+TEdit._OnChange], esi popad .event_ok: cmp [esi+TEdit._Lock], 0 jne .refresh_ok and [esi+TCanvasWindow._canvas_valid], 0 exec esi, TProgress:RectChanged2, 0 .refresh_ok: shr edx, 1 ; CF = return value popad return endp method TEdit.SetText begin push esi eax mov esi, [.self] mov [esi+TEdit._Start], 0 mov [esi+TEdit._Pos], 0 mov [esi+TEdit._Sel], 0 lea eax, [esi+TEdit._Text] stdcall SetString, eax, [.value] stdcall StrLenUtf8, [esi+TEdit._Text], -1 mov [esi+TEdit._Len], eax and [esi+TCanvasWindow._canvas_valid], 0 exec esi, TProgress:RectChanged2, 0 pop eax esi return endp method TEdit.__RenderView .bounds TBounds .selbeg dd ? .selend dd ? .clBack dd ? .border dd ? begin pushad mov esi, [.self] cmp [esi+TCanvasWindow._canvas], 0 je .finish mov eax, [GUI.clEditBk] mov ecx, [GUI.editBorder] cmp esi, [__FocusedWindow] jne @f mov eax, [GUI.clEditBkFocused] mov ecx, [GUI.editBorderFocused] @@: mov [.clBack], eax mov [.border], ecx ; selection sort positions. mov eax, [esi+TEdit._Pos] mov ecx, [esi+TEdit._Sel] cmp eax,ecx jle @f xchg eax, ecx @@: mov [.selbeg], eax mov [.selend], ecx ; drawing bounds mov ecx, [esi+TEdit._width] mov eax, [esi+TEdit._height] mov [.bounds.x], 0 mov [.bounds.y], 0 mov [.bounds.width], ecx mov [.bounds.height], eax lea eax, [.bounds] stdcall [DrawBox], [esi+TCanvasWindow._canvas], eax, [.clBack], [.border], [GUI.boxBorderWidth] mov eax, [GUI.boxBorderWidth] add [.bounds.x], eax add [.bounds.y], eax shl eax, 1 sub [.bounds.width], eax sub [.bounds.height], eax mov eax, [esi+TEdit._MarginLeft] mov ecx, [esi+TEdit._MarginRight] add [.bounds.x], eax sub [.bounds.width], eax sub [.bounds.width], ecx cmp [.bounds.width], 0 jle .enddraw stdcall StrOffsUtf8, [esi+TEdit._Text], [esi+TEdit._Start] mov edi, eax stdcall DrawTextBox, [esi+TEdit._canvas], edi, [.bounds.x], [.bounds.y], [.bounds.width], [.bounds.height], 0, dtfAlignLeft or dtfAlignMiddle or dtfSingleLine, [GUI.DefaultFont], [GUI.clEditTxt] ; determine the selection mov eax, [.selbeg] xor ecx, ecx sub eax, [esi+TEdit._Start] jle .xsel_ok stdcall StrOffsUtf8, edi, eax sub eax, edi stdcall GetTextBounds, edi, eax, [GUI.DefaultFont] mov ecx, eax .xsel_ok: mov eax, [.selend] sub eax, [esi+TEdit._Start] jle .enddraw stdcall StrOffsUtf8, edi, eax sub eax, edi stdcall GetTextBounds, edi, eax, [GUI.DefaultFont] mov edx, [.bounds.width] add edx, [.bounds.x] cmp eax, edx cmovg eax, edx sub eax, ecx add ecx, [.bounds.x] stdcall BlendSolidRect, [esi+TCanvasWindow._canvas], ecx, [.bounds.y], eax, [.bounds.height], [GUI.clEditSel] .enddraw: inherited inc [esi+TCanvasWindow._canvas_valid] .finish: popad return endp method TEdit.EventKeyPress ;, .utf8, .scancode, .kbdState begin inherited [.utf8], [.scancode], [.kbdState] jnc .editor_keys ; the key was not processed by the parent class. return .editor_keys: pushad mov esi, [.self] mov [esi+TEdit._Lock], 1 get ebx, esi, TEdit:CaretPos mov eax, [.utf8] test eax, eax jz .no_char cmp eax, $20 jb .ctrl_char cmp eax, $7f je .not_processed test [.kbdState], Ctrl or Alt jnz .not_processed stdcall StrNew stdcall StrCharCat, eax, [.utf8] push eax exec esi, TEdit:ReplaceSel, eax stdcall StrDel ; from the stack mov ebx, [esi+TEdit._Pos] jmp .set_pos .ctrl_char: OutputValue "Ascii:", eax, 10, 4 cmp eax, 1 ; Ctrl+A je .select_all cmp eax, 3 ; Ctrl+C je .copy cmp eax, 22 ; Ctrl+V je .paste jmp .no_char .select_all: mov ebx, [esi+TEdit._Len] mov [esi+TEdit._Sel], 0 jmp .set_pos .copy: DebugMsg "Copy" exec esi, TEdit:GetSel test eax, eax jz .processed stdcall ClipboardWrite, eax stdcall StrDel, eax jmp .processed .paste: DebugMsg "Paste" stdcall ClipboardRead test eax, eax jz .processed push eax exec esi, TEdit:ReplaceSel, eax mov ebx, [esi+TEdit._Pos] stdcall StrDel jmp .endmove .no_char: mov eax, [.scancode] cmp eax, keyLeftNumpad je .left cmp eax, keyLeft je .left cmp eax, keyRightNumpad je .right cmp eax, keyRight je .right cmp eax, keyHomeNumpad je .home cmp eax, keyHome je .home cmp eax, keyEndNumpad je .end cmp eax, keyEnd je .end cmp eax, keyDelNumpad je .del cmp eax, keyDelete je .del cmp eax, keyBackSpace je .backdel jmp .not_processed .left: cmp ebx, 0 jle .endmove dec ebx jmp .endmove .right: cmp ebx, [esi+TEdit._Len] jae .endmove inc ebx jmp .endmove .home: xor ebx, ebx jmp .endmove .end: mov ebx, [esi+TEdit._Len] jmp .endmove .backdel: cmp ebx, [esi+TEdit._Sel] jne .pos_ok test ebx, ebx jz .pos_ok ; can't delete more than the begning dec ebx mov [esi+TEdit._Pos], ebx jmp .pos_ok .del: cmp ebx, [esi+TEdit._Sel] jne .pos_ok cmp ebx, [esi+TEdit._Len] jae .endmove ; can't delete past the end. inc ebx mov [esi+TEdit._Pos], ebx .pos_ok: exec esi, TEdit:ReplaceSel, 0 mov ebx, [esi+TEdit._Pos] .endmove: test [.kbdState], maskShift jnz .set_pos mov [esi+TEdit._Sel], ebx .set_pos: mov [esi+TEdit._Lock], 0 set esi, TEdit:CaretPos, ebx and [esi+TCanvasWindow._canvas_valid], 0 exec esi, TProgress:RectChanged2, 0 .processed: stc popad return .not_processed: clc popad return endp method TEdit.EventKeyRelease ;, .scancode, .kbdState begin return endp method TEdit.SetCaretPos begin pushad mov ecx, [.self] mov eax, [.value] mov [ecx+TEdit._Pos], eax and [ecx+TCanvasWindow._canvas_valid], 0 exec ecx, TEdit:RectChanged2, 0 exec ecx, TEdit:UpdateCaretPos popad return endp method TEdit.UpdateCaretPos .refresh dd ? begin pushad mov esi, [.self] xor eax, eax mov [.refresh], eax mov eax, [esi+TEdit._Pos] cmp eax, [esi+TEdit._Start] jge .compute_x ; scroll the text and eax, $fffffff8 mov [esi+TEdit._Start], eax inc [.refresh] .compute_x: stdcall StrPtr, [esi+TEdit._Text] mov edi, eax stdcall StrOffsUtf8, edi, [esi+TEdit._Pos] mov ecx, eax stdcall StrOffsUtf8, edi, [esi+TEdit._Start] sub ecx, eax ; offset to char under cursor. js .finish .leftok: mov edi, eax ; StrOffsUtf8 returns pointer to start of the text. mov eax, ecx jecxz @f stdcall GetTextBounds, edi, ecx, [GUI.DefaultFont] @@: lea ecx, [eax-1] ; x coordinate of the cursor. add ecx, [esi+TEdit._MarginLeft] add ecx, [GUI.boxBorderWidth] mov eax, [esi+TEdit._width] sub eax, [esi+TEdit._MarginRight] sub eax, [GUI.boxBorderWidth] cmp eax, ecx jg .caretok mov eax, [esi+TEdit._Start] add eax, 8 cmp eax, [esi+TEdit._Len] jle @f mov eax, [esi+TEdit._Len] @@: mov [esi+TEdit._Start], eax inc [.refresh] jmp .compute_x .caretok: cmp [.refresh], 0 je .canvas_ok and [esi+TCanvasWindow._canvas_valid], 0 .canvas_ok: mov edx, [esi+TEdit._height] sub edx, 6 ; add ecx, [GUI.boxBorderWidth] stdcall CaretChange, [.self], ecx, 3, 2, edx, TRUE .finish: popad return endp method TEdit.Move begin mov eax, [Caret.pWindow] push eax cmp eax, [.self] jne @f stdcall CaretAttach, 0 @@: inherited [.newX], [.newY] pop eax cmp eax, [.self] jne @f stdcall CaretAttach, eax exec [.self], TEdit:UpdateCaretPos @@: return endp method TEdit.EventButtonPress begin inherited [.button], [.kbdState], [.x], [.y] push ecx mov ecx, [.self] mov [ecx+TEdit._drag_mode], 1 stdcall SetMouseCapture, ecx exec [.self], TEdit:HitTest, [.x], FALSE pop ecx return endp method TEdit.EventMouseMove begin inherited [.x], [.y], [.kbdState] push ecx mov ecx, [.self] cmp [ecx+TEdit._drag_mode], 0 je .finish exec [.self], TEdit:HitTest, [.x], TRUE .finish: pop ecx return endp method TEdit.EventButtonRelease begin inherited [.button], [.kbdState], [.x], [.y] push ecx mov ecx, [.self] mov [ecx+TEdit._drag_mode], 0 stdcall SetMouseCapture, 0 pop ecx return endp method TEdit.HitTest .target dd ? .start dd ? .offset dd ? begin pushad mov ebx, [.self] mov ecx, [.x] sub ecx, [GUI.boxBorderWidth] sub ecx, [ebx+TEdit._MarginLeft] mov [.target], ecx stdcall StrPtr, [ebx+TEdit._Text] mov [.start], eax stdcall StrOffsUtf8, [.start], [ebx+TEdit._Start] sub eax, [.start] stdcall GetTextBounds, [.start], eax, [GUI.DefaultFont] mov [.offset], eax ; the offset in pixels of the leftmost edge of the window. ; Binary search of the position. mov edi, [ebx+TEdit._Len] ; current mov esi, [ebx+TEdit._Len] ; upper limit xor ecx, ecx ; lower limit .search_loop: stdcall StrOffsUtf8, [ebx+TEdit._Text], edi sub eax, [.start] stdcall GetTextBounds, [.start], eax, [GUI.DefaultFont] sub eax, [.offset] cmp eax, [.target] jg .go_down ; go up cmp edi, esi je .found mov ecx, edi add edi, esi sar edi, 1 cmp edi, ecx je .found jmp .search_loop .go_down: cmp edi, ecx je .found mov esi, edi add edi, ecx sar edi, 1 cmp edi, esi je .found jmp .search_loop .found: mov eax, [ebx+TEdit._Start] add eax, edi cmp [.select], 0 jne @f mov [ebx+TEdit._Sel], edi @@: set ebx, TEdit:CaretPos, edi and [ebx+TCanvasWindow._canvas_valid], 0 exec ebx, TProgress:RectChanged2, 0 .finish: popad return endp method TEdit.EventFocusIn begin stdcall CaretAttach, [.self] exec [.self], TEdit:UpdateCaretPos exec [.self], TEdit:ForceRefresh inherited return endp method TEdit.EventFocusOut begin stdcall CaretAttach, 0 exec [.self], TEdit:ForceRefresh inherited return endp endmodule |
Added freshlib/gui/TForm.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TForm object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Represents form window that to serve as parent window for other controls. ;_________________________________________________________________________________________ module "TForm library" mrNone = 0 mrOK = 1 mrCancel = 2 mrAbort = 3 mrRetry = 4 mrIgnore = 5 mrYes = 6 mrNo = 7 mrMaybe = 8 object TForm, TWindow ._modal_result dd ? ._OnClose dd ? ; On close window event handler. ._action_list dd ? ._p_split_grid dd ? ._p_split_template dd ? ._drag_splitter dd ? ._padding_top dd ? ._padding_right dd ? ._padding_bottom dd ? ._padding_left dd ? ._transparent dd ? .DrawSplitterProc dd ? param .ActionList, ._action_list, .SetActionList param .Transparent, ._transparent, ._transparent ; if the form is fully covered with controls set to TRUE in order to not paint the form background. param .ModalResult, ._modal_result, ._modal_result param .OnClose, ._OnClose, ._OnClose param .SplitGrid, ._p_split_grid, .SetSplitGrid param .PaddingLeft, ._padding_left, ._padding_left param .PaddingTop, ._padding_top, ._padding_top param .PaddingRight, ._padding_right, ._padding_right param .PaddingBottom, ._padding_bottom, ._padding_bottom method .Create, .parent method .Destroy method .ProcessIdle method .__RealignSplitGrid, .newW, .newH method .SplitCellChanged method .SetActionList, .value method .SetSplitGrid, .value method .AttachControlToCell, .pWindow, .idCell method .EventMouseMove, .x, .y, .kbdState method .EventButtonPress, .button, .kbdState, .x, .y method .EventButtonRelease, .button, .kbdState, .x, .y method .ExtResize, .newWidth, .newHeight method .CloseRequest, .reason method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height ; Paints itself on the caller provided TImage. endobj ;---------------------------------------------------------------------- ; Interface for TForm.OnClose user handler. ; Arguments: ; .self - pointer to the TForm object ; .reason - the reason for the close request. ; ; Returns: ; CF = 1 - Ignore the request. The form will not be closed. ; CF = 0 - Destroy the object. ; ; If the OnClose event handler is not set, the form will be destroyed. ;---------------------------------------------------------------------- interface TForm.OnClose, .self, .reason method TForm.Create begin inherited [.parent] push eax edx mov eax, [.self] mov edx, [DrawSplitter] mov [eax+TForm.DrawSplitterProc], edx pop edx eax return endp method TForm.Destroy begin OutputValue "TForm.Destroy of $", [.self], 16, 8 set [.self], TForm:ActionList, 0 set [.self], TForm:SplitGrid, 0 inherited return endp method TForm.ProcessIdle begin pushad mov esi, [.self] get ebx, esi, TForm:ActionList test ebx, ebx jz .end_actions get edx, ebx, TActionList:FirstChild .loop: test edx, edx jz .end_actions get eax, edx, TAction:OnIdle test eax, eax jz .idle_ok pushad stdcall eax, edx popad .idle_ok: mov edx, [edx+TObject.__next] jmp .loop .end_actions: popad return endp method TForm.SelfPaint begin get eax, [.self], TForm:Transparent test eax, eax jnz .draw_ok stdcall DrawSolidRect, [.pDstImage], [.xDst], [.yDst], [.width], [.height], [GUI.clDialogBk] .draw_ok: inherited [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] pushad mov esi, [.self] mov eax, [esi+TForm._p_split_grid] test eax, eax jz .finish mov ecx, [.xDst] mov edx, [.yDst] sub ecx, [.xSrc] sub edx, [.ySrc] lea eax, [eax+TArray.array] stdcall DrawSplitters, [.pDstImage], eax, [.xDst], [.yDst], [.width], [.height], ecx, edx, [esi+TForm.DrawSplitterProc] .finish: popad return endp method TForm.ExtResize ;, .newWidth, .newHeight begin exec [.self], TForm:__RealignSplitGrid, [.newWidth], [.newHeight] inherited [.newWidth], [.newHeight] return endp method TForm.CloseRequest ;, .reason begin push eax DebugMsg "Form close request." get eax, [.self], TForm:OnClose test eax, eax jz .destroy stdcall eax, [.self], [.reason] jc .finish .destroy: destroy [.self] .finish: pop eax return endp method TForm.SetActionList begin pushad mov esi, [.self] mov edx, [.value] mov edi, esi xor ecx, ecx test edx, edx jz @f xchg edi, [edx+TActionList._form] test edi, edi jz @f mov [edi+TForm._action_list], ecx @@: xchg edx, [esi+TForm._action_list] test edx, edx jz @f mov [edx+TActionList._form], ecx @@: popad return endp ; sets the splitgrid from a template. method TForm.SetSplitGrid begin pushad mov esi, [.self] mov edx, [.value] cmp edx, [esi+TForm._p_split_template] je .finish mov [esi+TForm._p_split_template], edx xor ecx, ecx xchg ecx, [esi+TForm._p_split_grid] stdcall FreeMem, ecx test edx, edx jz .finish stdcall ReadSplitGridTemplate, edx mov [esi+TForm._p_split_grid], eax exec esi, TForm:__RealignSplitGrid, [esi+TWindow._width], [esi+TWindow._height] .finish: popad return endp method TForm.AttachControlToCell;, .pWindow, .idCell begin pushad mov esi, [.self] mov edi, [esi+TForm._p_split_grid] test edi, edi jz .finish mov eax, [.idCell] cmp eax, [edi+TArray.count] jae .finish imul eax, sizeof.TSplitRect lea edi, [edi+TArray.array+eax] mov ecx, [.pWindow] xchg ecx, [edi+TSplitRect.pWindow] cmp ecx, [edi+TSplitRect.pWindow] je .realign test ecx, ecx jz .old_ok set ecx, TWindow:Visible, FALSE ; hide the previous window .old_ok: cmp [edi+TSplitRect.pWindow], 0 je .realign set [edi+TSplitRect.pWindow], TWindow:Visible, TRUE .realign: exec esi, TForm:__RealignSplitGrid, [esi+TWindow._width], [esi+TWindow._height] .finish: popad return endp method TForm.__RealignSplitGrid .rect RECT begin pushad mov esi, [.self] mov ebx, [esi+TForm._p_split_grid] test ebx, ebx jz .finish lea ebx, [ebx+TArray.array] mov eax, [esi+TForm._padding_left] mov edi, [esi+TForm._padding_top] mov ecx, [.newW] mov edx, [.newH] sub ecx, [esi+TForm._padding_right] sub edx, [esi+TForm._padding_bottom] mov [.rect.left], eax mov [.rect.top], edi mov [.rect.right], ecx mov [.rect.bottom], edx lea eax, [.rect] stdcall RealignGrid, ebx, eax .finish: popad return endp method TForm.SplitCellChanged begin push eax esi mov esi, [.self] exec esi, TForm:__RealignSplitGrid, [esi+TForm._width], [esi+TForm._height] pop esi eax return endp method TForm.EventMouseMove ;, .x, .y, .kbdState begin pushad mov ebx, [.self] mov esi, [ebx+TForm._drag_splitter] test esi, esi jz .find_splitter mov ecx, [esi+TSplitRect.type] and ecx, stVert mov eax, [.x+ecx] ; the respective coordinate. sub eax, [esi+TSplitRect.rect.left+ecx] mov edx, [esi+TSplitRect.spWidth] sar edx, 1 sub eax, edx test [esi+TSplitRect.type], stOriginBR jz .sizeok mov edx, [esi+TSplitRect.rect.right+ecx] sub edx, [esi+TSplitRect.rect.left+ecx] sub eax, edx neg eax sub eax, [esi+TSplitRect.spWidth] .sizeok: test [esi+TSplitRect.type], stRelative jz .posok cdq mov ebx, $8000 imul ebx mov ebx, [esi+ecx+TSplitRect.rect.right] sub ebx, [esi+ecx+TSplitRect.rect.left] ; size of rect (x or y depending on type) sub ebx, [esi+TSplitRect.spWidth] idiv ebx .posok: push eax push esi call .invalidate_splitters pop esi pop [esi+TSplitRect.pos] stdcall RealignGrid, esi, esi call .invalidate_splitters .finish: popad inherited [.x], [.y], [.kbdState] return .find_splitter: mov edi, [ebx+TForm._p_split_grid] test edi, edi jnz .found .set_default: mov ecx, [ebx+TForm._cursor] jmp .setit .found: lea edi, [edi+TArray.array] lea eax, [.x] stdcall FindSplitter, edi, eax jnc .set_default test [eax+TSplitRect.type], stJustGap jnz .finish mov ecx, mcSizeH test [eax+TSplitRect.type], stVert jz .setit mov ecx, mcSizeV .setit: stdcall GetStockCursor, ecx get edx, ebx, TWindow:OSWindow stdcall SetMouseCursor, [edx+TWindow.handle], eax jmp .finish .invalidate_splitters: test [esi+TSplitRect.type], stNone lea eax, [esi+TSplitRect.spRect] lea esi, [esi+sizeof.TSplitRect] jnz .end_spl exec [.self], TForm:RectChanged2, eax call .invalidate_splitters call .invalidate_splitters .end_spl: retn endp method TForm.EventButtonPress ;, .button, .kbdState, .x, .y .pnt POINT .cliprect RECT begin pushad mov esi, [.self] mov ebx, [esi+TForm._p_split_grid] test ebx, ebx jz .finish lea ebx, [ebx+TArray.array] mov eax, [.x] mov ecx, [.y] mov [.pnt.x], eax mov [.pnt.y], ecx lea eax, [.pnt] stdcall FindSplitter, ebx, eax jnc .finish test [eax+TSplitRect.type], stJustGap jnz .finish mov [esi+TForm._drag_splitter], eax stdcall SetMouseCapture, esi .finish: popad inherited [.button], [.kbdState], [.x], [.y] return endp method TForm.EventButtonRelease ;, .button, .kbdState, .x, .y begin push eax mov eax, [.self] mov [eax+TForm._drag_splitter], 0 stdcall SetMouseCapture, 0 .finish: pop eax inherited [.button], [.kbdState], [.x], [.y] return endp endmodule |
Added freshlib/gui/TGrid.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TGrid object class ; ; Target OS: Any ; ; Dependencies: ; Notes: ;_________________________________________________________________________________________ module "TGrid library" object TGrid, TScrollable ; private fields ._canvas dd ? ; To be split later on 4 different canvases. One for fixed[0,0], one for fixed columns, one for the fixed rows and one for the regular cells. ; this way the amount of drawing on refresh will be minimized. ._canvas_valid dd ? ._captured dd ? ; properties .ColCount dd ? .RowCount dd ? .ColWidth dd ? ; default column width - every column can have different width though. .RowHeight dd ? ; default row height - every row can have diferent height. ._FixedCols dd ? ; count of the fixed columns [0.._FixedCols-1] ._FixedRows dd ? ; count of the fixed rows [0.._FixedRows-1] ._flags dd ? ; grid flags ( dgf* flags) .ptrGridData dd ? ; one pointer for the user. ._focused POINT ; coordinates of the focused cell. ._on_focus_change dd ? ; event handler for focus changed. ; These 2 arrays contains respectively ColCount+1 and RowCount+1 elements. .ptrColX dd ? ; pointer to array of dwords with X coordinates of the columns. .ptrRowY dd ? ; pointer to array of dwords with Y coordinates of the rows. .selection RECT ; rectangle with current selection. .sel_flags dd ? ; see gsfXXXXX constants below .resize_rc dd ? ; row or column to resize. .resize_ofs dd ? ; Parameters param .Flags, ._flags, ._flags param .FocusedX, ._focused.x, NONE param .FocusedY, ._focused.y, NONE param .OnFocusChange, ._on_focus_change, ._on_focus_change param .FixedCols, ._FixedCols, ._FixedCols param .FixedRows, ._FixedRows, ._FixedRows ; Abstract methods abstract .DrawCell, .canvas, .ptrRect, .Col, .Row ; Methods method .ForceRefresh method .__UpdateImages method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height ; Paints itself on the caller provided TImage. method .__RenderGrid method .__AdjustScrollbars method .__AdjustOneScroller, .kind, .ptrArray, .Count, .Fixed, .client, .meansize method .Create, .parent method .Destroy method .Resize, .newW, .newH method .EnsureVisible, .Col, .Row method .HitTest, .x, .y method .GetCellXY, .Col, .Row method .SetCounts, .ColCount, .RowCount method .SetColWidth, .Col, .Width method .SetColumnsWidth, .BegCol, .EndCol, .Width method .SetRowHeight, .Row, .Height method .SetRowsHeight, .BegRow, .EndRow, .Height method .SetFocused, .x, .y ; system event handlers method .EventMouseMove, .x, .y, .kbdState ; method .EventMouseLeave method .EventButtonPress, .button, .kbdState, .x, .y method .EventButtonRelease, .button, .kbdState, .x, .y method .EventScroll, .direction, .command, .value method .EventKeyPress, .utf8, .scancode, .kbdState method .EventFocusIn method .EventFocusOut endobj fcfUnfocused = 0 fcfFocused = 1 interface TGrid.OnFocusChange, .pGrid, .x, .y, .fFocused ; TGrid features flags ; implemented gfGridLines = 1 gfGridLinesFixed = 2 gfResizeColumns = 4 gfResizeRows = 8 gfRowFocus = $10 gfSingleCellSelect = $20 ; not implemented ;gfSelectRows = $10 ; clicks on the fixed column selects entire row. Else, click column event. ;gfSelectColumns = $20 ; clicks on the fixed row selects entire column. Else, click row event. ;gfSelectCells = $40 ; rectangle of cells can be selected. Else, only focused cell is changed or ; if gfSelectRows or gfSelectColumns is set, select the respective row or column. ; grid selections flags for the field TGrid.sel_flags gsfSelectEntireRow = 1 gsfSelectEntireCol = 2 gsfResizeColWidth = 4 gsfResizeRowHeight = 8 ; cell possible states: cellRegular = 0 cellFixed = 1 cellSelected = 2 cellFocused = 3 cellFocused2 = 4 method TGrid.Create begin inherited [.parent] push eax esi mov esi, [.self] stdcall GetMem, 4 mov [esi+TGrid.ptrColX], eax stdcall GetMem, 4 mov [esi+TGrid.ptrRowY], eax ; Default values for sizes. set esi, TGrid:WantFocus, TRUE mov [esi+TGrid.ColWidth], 64 mov [esi+TGrid.RowHeight], 20 mov [esi+TGrid._flags], gfResizeColumns or gfResizeRows or gfGridLinesFixed or gfGridLines ;gfGridLinesFixed or gfGridLines or gfResizeColumns or gfResizeRows set esi, TGrid:StepX, 64 set esi, TGrid:StepY, 20 or eax, -1 mov [esi+TGrid._focused.x], eax mov [esi+TGrid._focused.y], eax mov [esi+TGrid.selection.left], eax mov [esi+TGrid.selection.top], eax mov [esi+TGrid.selection.right], eax mov [esi+TGrid.selection.bottom], eax exec esi, TGrid:SetCounts, 1, 1 pop esi eax return endp method TGrid.Destroy begin pushad mov esi, [.self] stdcall FreeMem, [esi+TGrid.ptrColX] stdcall FreeMem, [esi+TGrid.ptrRowY] popad inherited return endp method TGrid.ForceRefresh begin mov eax, [.self] and [eax+TGrid._canvas_valid], 0 inherited return endp method TGrid.SelfPaint ; .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height begin pushad mov esi, [.self] cmp [esi+TGrid._canvas_valid], 0 jne @f exec esi, TGrid:__RenderGrid @@: mov ebx, [esi+TGrid._canvas] test ebx, ebx jz .finish stdcall BlendImage, [.pDstImage], [.xDst], [.yDst], ebx, [.xSrc], [.ySrc], [.width], [.height] .finish: popad inherited [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] return endp ; returns CF = 1 if the focus has been changed. method TGrid.SetFocused ; .x, .y begin pushad mov esi, [.self] mov ecx, [.x] mov edx, [.y] mov edi, [esi+TGrid._on_focus_change] mov eax, [esi+TGrid.ColCount] mov ebx, [esi+TGrid.RowCount] dec eax dec ebx cmp ecx, eax cmova ecx, eax cmp edx, ebx cmova edx, ebx cmp ecx, [esi+TGrid._focused.x] jne .changeit cmp edx, [esi+TGrid._focused.y] je .finish .changeit: test edi, edi jz .old_ok pushad stdcall edi, esi, [esi+TGrid._focused.x], [esi+TGrid._focused.y], fcfUnfocused popad .old_ok: mov [esi+TGrid._focused.x], ecx mov [esi+TGrid._focused.y], edx test edi, edi jz .end_ok stdcall edi, esi, ecx, edx, fcfFocused .end_ok: stc .finish: popad return endp method TGrid.__UpdateImages begin pushad mov esi, [.self] mov ebx, [esi+TGrid._visible] mov edi, [esi+TGrid._canvas] mov ecx, [esi+TGrid._width] mov edx, [esi+TGrid._height] test ebx, ebx jz .destroy test edi, edi jz .create_new ; check the size cmp ecx, [edi+TImage.width] ja .destroy cmp edx, [edi+TImage.height] jbe .setwrap .destroy: stdcall DestroyImage, edi ; canvas xor eax, eax mov [esi+TGrid._canvas], eax test ebx, ebx jz .exit .create_new: ; new size - make it a little bit bigger. lea eax, [ecx+256] lea ebx, [edx+256] stdcall CreateImage2, eax, ebx, FALSE mov [esi+TGrid._canvas], eax mov edi, eax .setwrap: mov [edi+TImage.wrapW], ecx mov [edi+TImage.wrapH], edx .exit: and [esi+TGrid._canvas_valid], 0 popad inherited return endp method TGrid.Resize begin inherited [.newW], [.newH] exec [.self], TGrid:__AdjustScrollbars return endp method TGrid.EventScroll ; , .direction, .command, .value begin inherited [.direction], [.command], [.value] jc .finish pushad mov esi, [.self] and [esi+TGrid._canvas_valid], 0 exec esi, TGrid:RectChanged2, 0 popad .finish: return endp method TGrid.EventMouseMove ;, .x, .y, .kbdState begin inherited [.x], [.y], [.kbdState] jc .processed pushad mov esi, [.self] ; first the mouse cursor: mov ebx, mcArrow exec esi, TGrid:HitTest, [.x], [.y] cmovc eax, [esi+TGrid.selection.right] cmovc edx, [esi+TGrid.selection.bottom] jc .cursor_ok test eax, eax jns @f mov ebx, mcSizeV @@: test edx, edx jns @f mov ebx, mcSizeH @@: .cursor_ok: cmp [esi+TGrid.sel_flags], 0 jne .mouse_cursor_ok push eax edx mov [esi+TWindow._cursor], ebx stdcall GetStockCursor, ebx get ecx, esi, TGrid:OSWindow stdcall SetMouseCursor, [ecx+TWindow.handle], eax pop edx eax test eax, eax js .end_mouse_move test edx, edx js .end_mouse_move .mouse_cursor_ok: cmp [esi+TGrid._captured], 0 je .end_mouse_move ; here process the drag operations: mov edi, [esi+TGrid.sel_flags] test edi, gsfResizeColWidth or gsfResizeRowHeight jnz .resize_row_col cmp edi, gsfSelectEntireRow cmove eax, [esi+TGrid.ColCount] cmp edi, gsfSelectEntireCol cmove edx, [esi+TGrid.RowCount] mov [esi + TGrid.selection.right], eax mov [esi + TGrid.selection.bottom], edx cmp edi, gsfSelectEntireRow cmove eax, [esi+TGrid._FixedCols] cmp edi, gsfSelectEntireCol cmove edx, [esi+TGrid._FixedRows] exec esi, TGrid:SetFocused, eax, edx jnc .end_mouse_move .ensure: exec esi, TGrid:EnsureVisible, [esi+TGrid.selection.right], [esi+TGrid.selection.bottom] and [esi+TGrid._canvas_valid], 0 exec esi, TGrid:RectChanged2, 0 .end_mouse_move: popad .processed: return .resize_row_col: test edi, gsfResizeColWidth jz .col_width_ok mov ebx, [esi+TGrid.ptrColX] mov eax, [esi+TGrid.resize_rc] mov ecx, [.x] sub ecx, [ebx+4*eax] ; the start coordinate. cmp eax, [esi+TGrid._FixedCols] jb .xpos_ok add ecx, [esi + TGrid._scrXY.pos] .xpos_ok: sub ecx, [esi+TGrid.resize_ofs] cmp ecx, 4 jge @f mov ecx, 4 @@: exec esi, TGrid:SetColWidth, eax, ecx mov eax, [esi+TGrid.resize_rc] xor edx, edx jmp .ensure .col_width_ok: test edi, gsfResizeRowHeight jz .end_mouse_move mov ebx, [esi+TGrid.ptrRowY] mov eax, [esi+TGrid.resize_rc] mov ecx, [.y] sub ecx, [ebx+4*eax] ; the start coordinate. cmp eax, [esi+TGrid._FixedCols] jb .ypos_ok add ecx, [esi + TGrid._scrXY.pos + 4] .ypos_ok: sub ecx, [esi + TGrid.resize_ofs] cmp ecx, 4 jge @f mov ecx, 4 @@: exec esi, TGrid:SetRowHeight, eax, ecx mov edx, [esi + TGrid.resize_rc] xor eax, eax jmp .ensure endp method TGrid.EventButtonPress ;, .button, .kbdState, .x, .y begin inherited [.button], [.kbdState], [.x], [.y] jc .processed pushad mov esi, [.self] exec esi, TGrid:HitTest, [.x], [.y] jc .finish stdcall SetMouseCapture, [.self] mov [esi+TGrid._captured], 1 test eax, eax js .resize_row test edx, edx js .resize_col and [esi+TGrid.sel_flags], 0 mov [esi+TGrid.selection.left], eax mov [esi+TGrid.selection.top], edx mov [esi+TGrid.selection.right], eax mov [esi+TGrid.selection.bottom], edx cmp eax, [esi+TGrid._FixedCols] jge .notleft ; if the cursor is on the left fixed cells or [esi+TGrid.sel_flags], gsfSelectEntireRow mov ebx, [esi+TGrid._FixedCols] ; xbeg mov ecx, [esi+TGrid.ColCount] ; xend mov [esi+TGrid.selection.left], ebx mov [esi+TGrid.selection.right], ecx mov eax, [esi+TGrid._FixedCols] .notleft: cmp edx, [esi+TGrid._FixedRows] jge .nottop ; if the cursor is on the top fixed cells or [esi+TGrid.sel_flags], gsfSelectEntireCol mov ebx, [esi+TGrid._FixedRows] ; ybeg mov ecx, [esi+TGrid.RowCount] ; yend mov [esi+TGrid.selection.top], ebx mov [esi+TGrid.selection.bottom], ecx mov edx, [esi+TGrid._FixedCols] .nottop: exec esi, TGrid:SetFocused, eax, edx and [esi+TGrid._canvas_valid], 0 exec esi, TGrid:RectChanged2, 0 .finish: popad .processed: return .resize_row: mov [esi+TGrid.sel_flags], gsfResizeRowHeight mov eax, edx mov ecx, [esi+TGrid.ptrRowY] mov edx, [.y] cmp eax, [esi+TGrid._FixedRows] jb .do_resize add edx, [esi + TGrid._scrXY.pos + 4] jmp .do_resize .resize_col: mov [esi+TGrid.sel_flags], gsfResizeColWidth mov ecx, [esi+TGrid.ptrColX] mov edx, [.x] cmp eax, [esi+TGrid._FixedCols] jb .do_resize add edx, [esi + TGrid._scrXY.pos] .do_resize: mov [esi+TGrid.resize_rc], eax sub edx, [ecx+4*eax+4] ; Y coordinate on the next cell. mov [esi+TGrid.resize_ofs], edx jmp .finish endp method TGrid.EventButtonRelease ;, .button, .kbdState, .x, .y begin inherited [.button], [.kbdState], [.x], [.y] pushad mov esi, [.self] cmp [esi+TGrid._captured], 0 je .finish stdcall SetMouseCapture, 0 mov [esi+TGrid._captured], 0 and [esi+TGrid.sel_flags], 0 lea edi, [esi+TGrid.selection] stdcall RectSort, edi and [esi+TGrid._canvas_valid], 0 exec esi, TGrid:RectChanged2, 0 .finish: popad return endp method TGrid.EventKeyPress ;, .utf8, .scancode, .kbdState begin inherited [.utf8], [.scancode], [.kbdState] jc .finish ; CF == 1 mov eax, [.utf8] test eax, eax jnz .finish ; CF == 0 pushad mov esi, [.self] mov eax, [.scancode] mov ecx, [esi+TGrid._focused.x] mov edx, [esi+TGrid._focused.y] cmp eax, keyUpNumpad je .up cmp eax, keyUp je .up cmp eax, keyDownNumpad je .down cmp eax, keyDown je .down cmp eax, keyPgUpNumpad je .pageup cmp eax, keyPgUp je .pageup cmp eax, keyPgDnNumpad je .pagedown cmp eax, keyPgDown je .pagedown cmp eax, keyLeftNumpad je .left cmp eax, keyLeft je .left cmp eax, keyRightNumpad je .right cmp eax, keyRight je .right cmp eax, keyHomeNumpad je .home cmp eax, keyHome je .home cmp eax, keyEndNumpad je .end cmp eax, keyEnd je .end ; key not processed. clc popad .finish: return .xy_ok: mov [esi+TGrid.selection.right], ecx mov [esi+TGrid.selection.bottom], edx test [.kbdState], maskShift jnz .selection_ok mov [esi+TGrid.selection.left], ecx mov [esi+TGrid.selection.top], edx .selection_ok: exec esi, TGrid:SetFocused, ecx, edx jnc .key_processed exec esi, TGrid:EnsureVisible, [esi+TGrid._focused.x], [esi+TGrid._focused.y] exec esi, TGrid:__AdjustScrollbars xor eax, eax mov [esi+TGrid._canvas_valid], eax exec esi, TGrid:RectChanged2, eax .key_processed: stc popad return ;------------------------------------------------------------------ .up: dec edx cmp edx, [esi+TGrid._FixedRows] cmovl edx, [esi+TGrid._FixedRows] jmp .xy_ok .down: mov eax, [esi+TGrid.RowCount] dec eax inc edx cmp edx, eax cmovg edx, eax jmp .xy_ok .left: dec ecx cmp ecx, [esi+TGrid._FixedCols] cmovl ecx, [esi+TGrid._FixedCols] jmp .xy_ok .right: mov eax, [esi+TGrid.ColCount] dec eax inc ecx cmp ecx, eax cmovg ecx, eax jmp .xy_ok .home: mov edx, [esi+TGrid._FixedRows] jmp .xy_ok .end: mov edx, [esi+TGrid.RowCount] dec edx jmp .xy_ok ; It is a little bit more complex. .pageup: push ecx mov ebx, [esi+TGrid.ptrRowY] mov ecx, [esi+TGrid._height] mov eax, [esi+TGrid._FixedRows] sub ecx, [ebx+eax*4] sub ecx, [GUI.boxBorderWidth] ; ecx = height of the floating area. mov eax, [ebx+edx*4] ; Yabs of the focused row. sub eax, ecx ; the new Yabs get ecx, esi, TGrid:PosY sub ecx, [ebx+edx*4] ; the offset of the current focused row from the page start. Negative! .loop_up: dec edx cmp edx, [esi+TGrid._FixedRows] jb .end_up cmp eax, [ebx+edx*4] jl .loop_up .end_up: inc edx add ecx, [ebx+edx*4] ; ecx is negative here! jns @f xor ecx, ecx @@: set esi, TGrid:PosY, ecx pop ecx jmp .xy_ok .pagedown: push ecx mov ebx, [esi+TGrid.ptrRowY] mov ecx, [esi+TGrid._height] mov eax, [esi+TGrid._FixedRows] sub ecx, [ebx+eax*4] sub ecx, [GUI.boxBorderWidth] ; ecx = height of the floating area. mov eax, [ebx+edx*4] ; Yabs of the focused row. add eax, ecx ; the new Yabs get ecx, esi, TGrid:PosY sub ecx, [ebx+edx*4] ; the offset of the current focused row from the page start. Negative! .loop_dn: inc edx cmp edx, [esi+TGrid.RowCount] jae .end_dn cmp eax, [ebx+edx*4] ja .loop_dn .end_dn: dec edx add ecx, [ebx+edx*4] ; ecx is negative here! get eax, esi, TGrid:MaxY cmp ecx, eax cmova ecx, eax set esi, TGrid:PosY, ecx pop ecx jmp .xy_ok endp method TGrid.__RenderGrid .rcFixedTL RECT ; fixed cells top-left quadrant. .rcFixedT RECT ; fixed cells on the top .rcFixedL RECT ; fixed cells on the left .rcFloat RECT ; the float zode of the grid that can be scrolled. .rcClient RECT ; the TGrid client rect. .ptrRect dd ? begin pushad mov esi, [.self] lea eax, [.rcClient] mov [.ptrRect], eax mov eax, [esi+TGrid._width] mov ecx, [esi+TGrid._height] mov edx, [GUI.boxBorderWidth] neg edx lea eax, [eax+2*edx] lea ecx, [ecx+2*edx] xor edx, edx mov [.rcClient.left], edx mov [.rcClient.top], edx mov [.rcClient.right], eax mov [.rcClient.bottom], ecx mov [.rcFixedT.right], eax mov [.rcFixedL.bottom], ecx mov [.rcFloat.right], eax mov [.rcFloat.bottom], ecx mov [.rcFixedTL.left], edx mov [.rcFixedTL.top], edx mov [.rcFixedT.top], edx mov [.rcFixedL.left], edx mov ecx, [esi+TGrid._FixedCols] mov eax, [esi+TGrid.ptrColX] test eax, eax jnz .colsizeok imul ecx, [esi+TGrid.ColWidth] ; default width if there is no size array jmp .x1ok .colsizeok: mov ecx, [eax+4*ecx] .x1ok: mov edx, [esi+TGrid._FixedRows] mov eax, [esi+TGrid.ptrRowY] test eax, eax jnz .rowsizeok imul edx, [esi+TGrid.ColWidth] ; default width if there is no size array jmp .y1ok .rowsizeok: mov edx, [eax+4*edx] .y1ok: mov [.rcFixedTL.right], ecx mov [.rcFixedTL.bottom], edx mov [.rcFixedT.left], ecx mov [.rcFixedT.bottom], edx mov [.rcFixedL.right], ecx mov [.rcFixedL.top], edx mov [.rcFloat.left], ecx mov [.rcFloat.top], edx ; Here all 4 rectangles are ready. Some of them can be empty of course. ; Lets make intersections with the invalidated rectangle. .drawFloat: lea eax, [.rcFloat] stdcall RectIntersect, eax, eax, [.ptrRect] jc .drawFixedT lea eax, [.rcFloat] stdcall TGrid.__DrawCellArea, [esi+TGrid._canvas], eax, 0, [GUI.boxBorderWidth] .drawFixedT: lea eax, [.rcFixedT] stdcall RectIntersect, eax, eax, [.ptrRect] jc .drawFixedL ;options.DebugMode = 1 ; OutputValue "Fixed top: left = ", [.rcFixedT.left], 10, -1 ; OutputValue "Fixed top: top = ", [.rcFixedT.top], 10, -1 ; OutputValue "Fixed top: right = ", [.rcFixedT.right], 10, -1 ; OutputValue "Fixed top: bottom = ", [.rcFixedT.bottom], 10, -1 ;options.DebugMode = 0 stdcall TGrid.__DrawCellArea, [esi+TGrid._canvas], eax, fxVertical, [GUI.boxBorderWidth] .drawFixedL: lea eax, [.rcFixedL] stdcall RectIntersect, eax, eax, [.ptrRect] jc .drawFixedTL stdcall TGrid.__DrawCellArea, [esi+TGrid._canvas], eax, fxHorizontal, [GUI.boxBorderWidth] .drawFixedTL: lea eax, [.rcFixedTL] stdcall RectIntersect, eax, eax, [.ptrRect] jc .finish stdcall TGrid.__DrawCellArea, [esi+TGrid._canvas], eax, fxHorizontal or fxVertical, [GUI.boxBorderWidth] .finish: xor edx, edx mov ecx, [esi+TGrid._width] mov eax, [esi+TGrid._height] mov [.rcClient.left], edx mov [.rcClient.top], edx mov [.rcClient.right], ecx mov [.rcClient.bottom], eax lea edi, [.rcClient] stdcall DrawBoxDefault, [esi+TGrid._canvas], edi, 0, bxFlat or bxNoFill, [GUI.boxBorderWidth] popad return endp ; .fFixed contains flags: fxHorizontal = 1 ; columns fxVertical = 2 ; rows proc TGrid.__DrawCellArea, .canvas, .ptrClipRect, .fFixed, .offset .Cell RECT .xofs dd ? .yofs dd ? .clip RECT .sel RECT .bnd TBounds begin pushad ; selection rectangle in cells coordinates. lea edi, [.sel] lea eax, [esi+TGrid.selection] stdcall RectCopy, edi, eax stdcall RectSort, edi inc [.sel.right] inc [.sel.bottom] mov eax, [esi+TGrid._FixedRows] mov ecx, [esi+TGrid._FixedCols] ; The fixed cells can not be selected!!! ; [edi+RECT.top] := max([edi+RECT.top], [esi+TGrid._FixedRows]) ; [edi+RECT.left] := max([edi+RECT.left], [esi+TGrid._FixedCols]) cmp eax, [edi+RECT.top] cmovl eax, [edi+RECT.top] cmp ecx, [edi+RECT.left] cmovl ecx, [edi+RECT.left] mov [edi+RECT.top], eax mov [edi+RECT.left], ecx mov eax, [esi+TGrid._FixedCols] mov ecx, [esi+TGrid.ColCount] test [esi+TGrid._flags], gfRowFocus jz @f mov [edi+RECT.left], eax mov [edi+RECT.right], ecx @@: ; drawing clip rectange. lea eax, [.bnd] stdcall RectToBounds, eax, [.ptrClipRect] ; erase the background cmp [.fFixed], 0 cmove eax, [GUI.clGridCellBk + 4*cellRegular] cmovne eax, [GUI.clGridCellBk + 4*cellFixed] push eax ; color mov edi, [.ptrClipRect] ;options.DebugMode = 1 ; OutputValue "Rect left: ", [edi+RECT.left], 10, -1 ; OutputValue "Rect top: ", [edi+RECT.top], 10, -1 ; OutputValue "Rect right: ", [edi+RECT.right], 10, -1 ; OutputValue "Rect bottom: ", [edi+RECT.bottom], 10, -1 ;options.DebugMode = 0 mov eax, [edi+RECT.left] mov ebx, [edi+RECT.top] mov ecx, [edi+RECT.right] mov edx, [edi+RECT.bottom] sub ecx, eax sub edx, ebx add eax, [.offset] add ebx, [.offset] stdcall DrawSolidRect, [.canvas], eax, ebx, ecx, edx ; color from the stack. ; If the cells are not fixed, compute the real coordinates of the rectangle. xor eax, eax mov [.xofs], eax mov [.yofs], eax test [.fFixed], fxHorizontal jnz .horizOK mov eax, [esi + TGrid._scrXY.pos] add [edi+RECT.left], eax add [edi+RECT.right], eax mov [.xofs], eax .horizOK: test [.fFixed], fxVertical jnz .vertOK mov eax, [esi + TGrid._scrXY.pos + 4] add [edi+RECT.top], eax add [edi+RECT.bottom], eax mov [.yofs], eax ; Determine the cell range for the given clip rectangle. .vertOK: xor eax, eax stdcall __SearchCoordinate, [edi+RECT.left], [esi+TGrid.ptrColX], 0, [esi+TGrid.ColCount] mov [.Cell.left], eax ; OutputValue "Cell.left: ", eax, 10, -1 mov eax, [esi+TGrid.ColCount] stdcall __SearchCoordinate, [edi+RECT.right], [esi+TGrid.ptrColX], 0, eax mov [.Cell.right], eax ; OutputValue "Cell.right: ", eax, 10, -1 xor eax, eax stdcall __SearchCoordinate, [edi+RECT.top], [esi+TGrid.ptrRowY], 0, [esi+TGrid.RowCount] mov [.Cell.top], eax ; OutputValue "Cell.top: ", eax, 10, -1 mov eax, [esi+TGrid.RowCount] stdcall __SearchCoordinate, [edi+RECT.bottom], [esi+TGrid.ptrRowY], 0, eax mov [.Cell.bottom], eax ; OutputValue "Cell.bottom: ", eax, 10, -1 mov ebx, [.Cell.top] .yloop: cmp ebx, [.Cell.bottom] jg .endyloop test [.fFixed], fxVertical cmovnz eax, [esi+TGrid._FixedRows] cmovz eax, [esi+TGrid.RowCount] cmp ebx, eax jge .endyloop mov eax, [esi+TGrid.ptrRowY] mov ecx, [4*ebx+eax+4] ; bottom mov eax, [4*ebx+eax] ; top sub ecx, [.yofs] sub eax, [.yofs] add eax, [.offset] add ecx, [.offset] mov [.clip.bottom], ecx mov [.clip.top], eax mov edi, [.Cell.left] .xloop: cmp edi, [.Cell.right] jg .endxloop test [.fFixed], fxHorizontal cmovnz eax, [esi+TGrid._FixedCols] cmovz eax, [esi+TGrid.ColCount] cmp edi, eax jge .endxloop mov eax, [esi+TGrid.ptrColX] mov ecx, [4*edi+eax+4] mov eax, [4*edi+eax] sub ecx, [.xofs] sub eax, [.xofs] add eax, [.offset] add ecx, [.offset] mov [.clip.right], ecx mov [.clip.left], eax ; draw the background if the cell is selected or focused: cmp ebx, [esi+TGrid._focused.y] jne .is_selected test [esi+TGrid._flags], gfRowFocus jnz .cell_focused cmp edi, [esi+TGrid._focused.x] jne .is_selected .cell_focused: mov edx, [GUI.clGridCellBk+4*cellFocused] cmp esi, [__FocusedWindow] je .draw_bk mov edx, [GUI.clGridCellBk+4*cellFocused2] jmp .draw_bk .is_selected: lea eax, [.sel] stdcall PointInRect, eax, edi, ebx jnc .bkgroundok mov edx, [GUI.clGridCellBk + 4*cellSelected] .draw_bk: mov eax, [.clip.right] mov ecx, [.clip.bottom] sub eax, [.clip.left] sub ecx, [.clip.top] stdcall DrawSolidRect, [.canvas], [.clip.left], [.clip.top], eax, ecx, edx .bkgroundok: lea eax, [.clip] exec esi, TGrid:DrawCell, [.canvas], eax, edi, ebx ; draw the gridlines: push ebx xor ebx, ebx mov eax, gfGridLines cmp [.fFixed], 0 je .datagridline mov ebx, 8 mov eax, gfGridLinesFixed .datagridline: ; OutputValue "Flags: ", [esi+TGrid._flags], 16, 8 test [esi+TGrid._flags], eax jz .gridok mov ecx, [.clip.right] mov eax, [.clip.bottom] dec ecx dec eax stdcall DrawVLine, [.canvas], [.clip.top], [.clip.bottom], [.clip.left], [GUI.clGridLines+ebx] ; left stdcall DrawVLine, [.canvas], [.clip.top], [.clip.bottom], ecx, [GUI.clGridLines+4+ebx] ; right stdcall DrawHLine, [.canvas], [.clip.left], [.clip.right], [.clip.top], [GUI.clGridLines+ebx] ; top stdcall DrawHLine, [.canvas], [.clip.left], [.clip.right], eax, [GUI.clGridLines+4+ebx] ; bottom .gridok: pop ebx inc edi jmp .xloop .endxloop: inc ebx jmp .yloop .endyloop: popad return endp ;------------------------------------------------------------------ ; If .Col, .Row is inside the visible client area, does nothing. ; , if .Col, .Row is outside this area, provides scrolling to ; make it visible to the center of the client area. ;------------------------------------------------------------------ method TGrid.EnsureVisible ;, .Col, .Row .client RECT begin pushad mov edi, [.self] mov ebx, [edi+TGrid._FixedCols] mov ecx, [edi+TGrid._FixedRows] shl ebx, 2 shl ecx, 2 add ebx, [edi+TGrid.ptrColX] add ecx, [edi+TGrid.ptrRowY] mov ebx, [ebx] mov ecx, [ecx] mov [.client.left], ebx mov [.client.top], ecx mov ebx, [edi+TGrid._width] mov ecx, [edi+TGrid._height] mov eax, [GUI.boxBorderWidth] shl eax, 1 sub ebx, eax sub ecx, eax mov [.client.right], ebx mov [.client.bottom], ecx mov eax, [.Col] cmp eax, [edi+TGrid._FixedCols] jb .posvertical ; fixed columns are always inside the screen get ecx, edi, TGrid:PosX add [.client.left], ecx add [.client.right], ecx mov edx, [edi+TGrid.ptrColX] mov ecx, [.Col] mov ebx, [edx+4*ecx] mov ecx, [edx+4*ecx+4] cmp ecx, [.client.right] jle .rightok sub ecx, [.client.right] add ecx, [.client.left] get eax, edi, TGrid:PosX sub eax, [.client.left] add ecx, eax set edi, TGrid:PosX, ecx jmp .posvertical .rightok: cmp ebx, [.client.left] jge .posvertical get eax, edi, TGrid:PosX sub eax, [.client.left] add ebx, eax set edi, TGrid:PosX, ebx .posvertical: ; This logic is somehow strange. Up to .bottomok; To be checked... mov eax, [.Row] cmp eax, [edi+TGrid._FixedRows] jb .endpos get ecx, edi, TGrid:PosY add [.client.top], ecx add [.client.bottom], ecx mov edx, [edi+TGrid.ptrRowY] mov ecx, [.Row] mov ebx, [edx+4*ecx] mov ecx, [edx+4*ecx+4] cmp ecx, [.client.bottom] jle .bottomok sub ecx, [.client.bottom] add ecx, [.client.top] get eax, edi, TGrid:PosY sub eax, [.client.top] add ecx, eax set edi, TGrid:PosY, ecx jmp .endpos .bottomok: cmp ebx, [.client.top] jge .endpos get eax, edi, TGrid:PosY sub eax, [.client.top] add ebx, eax set edi, TGrid:PosY, ebx .endpos: popad return endp ; Return: ; CF = 1: no cell on the given coordinates. ; CF = 0: a cell has been found on these coordinates. ; eax: column pointed or -1. ; edx: row pointed or -1 ; If eax = -1 then the cursor is in the row resize area for the row in edx ; if edx = -1 then the cursor is in the column resize area for the column in eax method TGrid.HitTest ; .x, .y begin pushad mov esi, [.self] mov edx, [GUI.boxBorderWidth] sub [.x], edx sub [.y], edx stdcall __SearchCoordinate, [.y], [esi+TGrid.ptrRowY], 0, [esi+TGrid._FixedRows] jc .col_not_resize mov ebx, eax mov edi, [.x] stdcall __SearchCoordinate, edi, [esi+TGrid.ptrColX], 0, [esi+TGrid._FixedCols] jnc .maybe_col_resize add edi, [esi + TGrid._scrXY.pos] stdcall __SearchCoordinate, edi, [esi+TGrid.ptrColX], [esi+TGrid._FixedCols], [esi+TGrid.ColCount] jc .cell_not_found .maybe_col_resize: test [esi+TGrid._flags], gfResizeColumns jz .col_select sub edx, edi sub edi, ecx cmp edx, 3 jle .col_resize cmp edi, 2 jg .col_select dec eax .col_resize: mov [esp+4*regEAX], eax mov dword [esp+4*regEDX], -1 clc popad return .col_select: cmp eax, [esi+TGrid._FixedCols] jb .col_not_resize mov [esp+4*regEAX], eax mov [esp+4*regEDX], ebx clc popad return .cell_not_found: stc popad return ; the Y coordinate is not on the fixed rows, so it is either row resize or simple data cell selection. .col_not_resize: stdcall __SearchCoordinate, [.x], [esi+TGrid.ptrColX], 0, [esi+TGrid._FixedCols] jc .select_data_cell mov ebx, eax mov edi, [.y] stdcall __SearchCoordinate, edi, [esi+TGrid.ptrRowY], 0, [esi+TGrid._FixedRows] jnc .maybe_row_resize add edi, [esi + TGrid._scrXY.pos + 4] stdcall __SearchCoordinate, edi, [esi+TGrid.ptrRowY], [esi+TGrid._FixedRows], [esi+TGrid.RowCount] jc .cell_not_found .maybe_row_resize: test [esi+TGrid._flags], gfResizeRows jz .row_select sub edx, edi sub edi, ecx cmp edx, 3 jle .row_resize cmp edi, 2 jg .row_select dec eax .row_resize: mov [esp+4*regEDX], eax mov dword [esp+4*regEAX], -1 clc popad return .select_data_cell: mov edi, [.x] add edi, [esi + TGrid._scrXY.pos] stdcall __SearchCoordinate, edi, [esi+TGrid.ptrColX], [esi+TGrid._FixedCols], [esi+TGrid.ColCount] jc .cell_not_found mov ebx, eax mov edi, [.y] add edi, [esi + TGrid._scrXY.pos + 4] stdcall __SearchCoordinate, edi, [esi+TGrid.ptrRowY], [esi+TGrid._FixedRows], [esi+TGrid.RowCount] jc .cell_not_found .row_select: mov [esp+4*regEAX], ebx mov [esp+4*regEDX], eax clc popad return endp method TGrid.GetCellXY ;, .Col, .Row begin push esi mov esi, [.self] mov eax, [.Col] mov edx, [.Row] shl eax, 2 shl edx, 2 add eax, [esi+TGrid.ptrColX] add edx, [esi+TGrid.ptrRowY] mov eax, [eax] mov edx, [edx] pop esi return endp method TGrid.SetCounts ;, .ColCount, .RowCount .ycount dd ? .ptrNewColX dd ? .ptrNewRowY dd ? begin pushad mov [.ptrNewColX], 0 mov [.ptrNewRowY], 0 mov ebx, [.self] ; resize column coordinates array... mov eax, [ebx+TGrid.ptrColX] mov [.ptrNewColX], eax mov eax, [.ColCount] cmp eax, [ebx+TGrid.ColCount] je .resizey mov eax, [.ColCount] lea eax, [4*eax+4] ; byte size of the array. stdcall ResizeMem, [ebx+TGrid.ptrColX], eax mov [.ptrNewColX], eax test eax, eax jz .finish mov edi, eax mov ecx, [ebx+TGrid.ColCount] cmp ecx, [.ColCount] jge .resizey mov eax, [edi+4*ecx] .newsizesx: inc ecx cmp ecx, [.ColCount] jg .resizey add eax, [ebx+TGrid.ColWidth] mov [edi+4*ecx], eax jmp .newsizesx .resizey: ; resize row coordinates array... mov eax, [ebx+TGrid.ptrRowY] mov [.ptrNewRowY], eax mov eax, [.RowCount] cmp eax, [ebx+TGrid.RowCount] je .finish mov eax, [.RowCount] lea eax, [4*eax+4] ; byte size of the array. stdcall ResizeMem,[ebx+TGrid.ptrRowY], eax mov [.ptrNewRowY], eax test eax, eax jz .finish mov edi, eax mov ecx, [ebx+TGrid.RowCount] cmp ecx, [.RowCount] jg .finish mov eax, [edi+4*ecx] .newsizesy: inc ecx cmp ecx, [.RowCount] jg .finish add eax, [ebx+TGrid.RowHeight] mov [edi+4*ecx], eax jmp .newsizesy .finish: xor eax, eax cmp eax, [.ptrNewColX] je .error1 cmp eax, [.ptrNewRowY] je .error2 mov ecx, [.RowCount] mov edx, [.ColCount] mov [ebx+TGrid.RowCount], ecx mov [ebx+TGrid.ColCount], edx mov ecx, [.ptrNewColX] mov edx, [.ptrNewRowY] mov [ebx+TGrid.ptrColX], ecx mov [ebx+TGrid.ptrRowY], edx exec ebx, TGrid:__AdjustScrollbars clc popad return .error2: stdcall FreeMem, [.ptrNewColX] .error1: stc popad return endp method TGrid.SetColWidth;, .Col, .Width begin pushad mov edi, [.self] mov eax, [edi+TGrid.ptrColX] mov ecx, [.Col] lea eax, [eax+4*ecx+4] mov edx, [.Width] sub ecx, [edi+TGrid.ColCount] jge .finish ; error, the index is greater than count. sub edx, [eax] neg ecx add edx, [eax-4] .loop: add [eax], edx lea eax, [eax+4] loop .loop exec edi, TGrid:__AdjustScrollbars .finish: popad return endp method TGrid.SetColumnsWidth ;, .BegCol, .EndCol, .Width begin pushad mov edi, [.self] mov ebx, [.BegCol] cmp ebx, [edi+TGrid.ColCount] jae .endloop mov eax, [edi+TGrid.ColCount] cmp [.EndCol], eax jl .do_resize dec eax mov [.EndCol], eax .do_resize: mov esi, [edi+TGrid.ptrColX] mov ecx, [esi+4*ebx] ; the start X coordinate. .loop: add ecx, [.Width] inc ebx cmp ebx, [.EndCol] ja .endloop mov [esi+4*ebx], ecx jmp .loop .endloop: sub ecx, [esi+4*ebx] ; the delta. .loop2: cmp ebx, [edi+TGrid.ColCount] ja .endloop2 add [esi+4*ebx], ecx inc ebx jmp .loop2 .endloop2: exec edi, TGrid:__AdjustScrollbars popad return endp method TGrid.SetRowHeight ;, .Row, .Height begin pushad mov edi, [.self] mov eax, [edi+TGrid.ptrRowY] mov ecx, [.Row] lea eax, [eax+4*ecx+4] mov edx, [.Height] sub ecx, [edi+TGrid.RowCount] jge .finish ; error, the index is greater than count. sub edx, [eax] neg ecx add edx, [eax-4] .loop: add [eax], edx lea eax, [eax+4] loop .loop exec edi, TGrid:__AdjustScrollbars .finish: popad return endp method TGrid.SetRowsHeight ;.BegRow, .EndRow, .Height begin pushad mov edi, [.self] mov ebx, [.BegRow] cmp ebx, [edi+TGrid.RowCount] jae .endloop mov eax, [edi+TGrid.RowCount] cmp [.EndRow], eax jl .do_resize dec eax mov [.EndRow], eax .do_resize: mov esi, [edi+TGrid.ptrRowY] mov ecx, [esi+4*ebx] ; the start Y coordinate. .loop: add ecx, [.Height] inc ebx cmp ebx, [.EndRow] ja .endloop mov [esi+4*ebx], ecx jmp .loop .endloop: sub ecx, [esi+4*ebx] ; the delta. .loop2: cmp ebx, [edi+TGrid.RowCount] ja .endloop2 add [esi+4*ebx], ecx inc ebx jmp .loop2 .endloop2: exec edi, TGrid:__AdjustScrollbars popad return endp ; Arguments: ; .x : some coordinate. ; .xarray: array or dword with coordinates of the cells. ; .from: the count of the array. It contains N+1 elements where N is the number of cells in the table. ; .to: from which cell to search. ; returns: ; eax - the index of the cell where the coordinate is located. ; ecx - the left coordinate of the cell. ; edx - the right coordinate of the cell+1 (the left coordinate of the next cell). proc __SearchCoordinate, .x, .xarray, .from, .to begin pushad mov esi, [.xarray] mov eax, [.from] ; left mov edx, [.to] ; right cmp eax, edx jge .not_found mov ebx, [.x] cmp ebx, [esi+4*eax] jl .not_found ; it is less than the first element. cmp ebx, [esi+4*edx] jge .not_found ; it is greater than the last column. ; binary search between .loop: cmp eax, edx je .found lea ecx, [eax+edx] shr ecx, 1 cmp ebx, [esi+4*ecx] cmovl edx, ecx jl .loop cmp ebx, [esi+4*ecx+4] cmovge eax, ecx jge .loop .found: mov [esp+4*regEAX], ecx ; the index of the mov eax, [esi+4*ecx] mov edx, [esi+4*ecx+4] mov [esp+4*regECX], eax mov [esp+4*regEDX], edx clc popad return .not_found: stc popad return endp ;------------------------------------------------------------------------ ; TGrid private methods. ; These functions are for internal use. Don't call them outside TGrid ; control. ;------------------------------------------------------------------------ ;--------------------------------------------------------- ; Auto adjusts the scrollbars ;--------------------------------------------------------- sbHorz = 0 sbVert = 1 method TGrid.__AdjustScrollbars begin pushad mov ebx, [.self] get eax, ebx, TGrid:height get ecx, ebx, TGrid:width mov edx, [GUI.boxBorderWidth] neg edx lea eax, [eax+2*edx] lea ecx, [ecx+2*edx] exec ebx, TGrid:__AdjustOneScroller, sbVert, [ebx+TGrid.ptrRowY], [ebx+TGrid.RowCount], [ebx+TGrid._FixedRows], eax, [ebx+TGrid.RowHeight] exec ebx, TGrid:__AdjustOneScroller, sbHorz, [ebx+TGrid.ptrColX], [ebx+TGrid.ColCount], [ebx+TGrid._FixedCols], ecx, [ebx+TGrid.ColWidth] popad return endp method TGrid.__AdjustOneScroller ;, .kind, .ptrArray, .Count, .Fixed, .client, .meansize begin pushad mov ebx, [.self] mov esi, [.ptrArray] test esi, esi jz .finish mov ecx, [.Count] mov edx, [.Fixed] mov ecx, [esi+4*ecx] ; total height of all cells mov eax, [esi+4*edx] ; height of the fixed cells mov edx, [.client] sub edx, eax jge @f xor edx, edx @@: sub ecx, eax sub ecx, edx jns @f xor ecx, ecx @@: cmp [.kind], sbHorz jne .vert ; horizonal get eax, ebx, TGrid:PosX cmp eax, ecx cmova eax, ecx set ebx, TGrid:PosX, eax set ebx, TGrid:MaxX, ecx set ebx, TGrid:PageX, edx .finish: popad return .vert: get eax, ebx, TGrid:PosY cmp eax, ecx cmova eax, ecx set ebx, TGrid:PosY, eax set ebx, TGrid:MaxY, ecx set ebx, TGrid:PageY, edx jmp .finish endp method TGrid.EventFocusIn begin push eax mov eax, [.self] and [eax+TGrid._canvas_valid], 0 exec eax, TGrid:RectChanged2, 0 pop eax inherited return endp method TGrid.EventFocusOut begin push eax mov eax, [.self] and [eax+TGrid._canvas_valid], 0 exec eax, TGrid:RectChanged2, 0 pop eax inherited return endp endmodule |
Added freshlib/gui/TImageLabel.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TImageLabel object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Represents GUI picture or image. ;_________________________________________________________________________________________ module "TImageLabel library" iaLeft = 0 iaRight = 1 iaCenter = 2 iaStretchH = 3 iaTop = $0 iaBottom = $100 iaMiddle = $200 iaStrechV = $300 object TImageLabel, TCanvasWindow ._ImageAlign dd ? ._Image dd ? param .ImageAlign, ._ImageAlign, .SetImageAlign ; image align flags. param .Image, ._Image, .SetImage ; TImage object method .SetImageAlign, .value method .SetImage, .value method .__RenderView endobj method TImageLabel.SetImageAlign begin push eax mov eax, [.self] push [.value] pop [eax+TImageLabel._ImageAlign] and [eax+TImageLabel._canvas_valid], 0 exec [.self], TWindow:RectChanged2, 0 pop eax return endp method TImageLabel.SetImage begin push eax mov eax, [.self] push [.value] pop [eax+TImageLabel._Image] and [eax+TImageLabel._canvas_valid], 0 exec [.self], TWindow:RectChanged2, 0 pop eax return endp method TImageLabel.__RenderView begin pushad mov esi, [.self] mov edi, [esi+TImageLabel._canvas] test edi, edi jz .finish mov ecx, [esi+TImageLabel._width] mov edx, [esi+TImageLabel._height] xor eax, eax stdcall DrawSolidRect, edi, eax, eax, ecx, edx, eax ; clear with transparency. mov eax, [esi+TImageLabel._ImageAlign] mov esi, [esi+TImageLabel._Image] test esi, esi jz .finish sub ecx, [esi+TImage.width] sub edx, [esi+TImage.height] cmp al, iaRight je .x_ok cmp al, iaCenter je .x_center xor ecx, ecx jmp .x_ok .x_center: sar ecx, 1 .x_ok: cmp ah, iaBottom /256 je .y_ok cmp ah, iaMiddle / 256 je .y_center xor edx, edx jmp .y_ok .y_center: sar edx, 1 .y_ok: xor eax, eax ; stdcall BlendImage, edi, ecx, edx, esi, eax, eax, [esi+TImage.width], [esi+TImage.height] stdcall CopyImageRect, edi, ecx, edx, esi, eax, eax, [esi+TImage.width], [esi+TImage.height] .finish: popad inherited return endp endmodule |
Added freshlib/gui/TLabel.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TLabel object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Not finished. ;_________________________________________________________________________________________ module "TLabel library" object TLabel, TCanvasWindow ; private fields ._textalign dd ? ._textcolor dd ? ._background dd ? ._default_colors dd ? ; parameters param .TextAlign, ._textalign, .SetTextAlign ; text align flags. param .Color, ._textcolor, .SetColor:2 param .Background, ._background, .SetColor:2 param .fDefaultColors, ._default_colors, ._default_colors ; parameter methods method .SetColor, .param, .value method .SetTextAlign, .value method .SetCaption, .value ; other methods method .Create, .parent method .__RenderView endobj method TLabel.Create begin push eax inherited [.parent] mov eax, [.self] mov [eax+TLabel._textalign], dtfAlignLeft or dtfAlignMiddle or dtfCRLF or dtfWordWrap mov [eax+TLabel._default_colors], 1 pop eax return endp method TLabel.SetTextAlign begin push eax ecx mov eax, [.self] mov ecx, [.value] xchg ecx, [eax+TLabel._textalign] cmp ecx, [eax+TLabel._textalign] je .finish xor ecx, ecx and [eax+TLabel._canvas_valid], ecx exec eax, TWindow:RectChanged2, ecx .finish: pop ecx eax return endp method TLabel.SetColor begin push eax ebx ecx mov eax, [.param] mov ebx, [.self] mov ecx, [.value] sub eax, TLabel.Color xchg ecx, [ebx+TLabel._textcolor+4*eax] cmp ecx, [ebx+TLabel._textcolor+4*eax] je .finish xor ecx, ecx and [ebx+TLabel._canvas_valid], ecx exec ebx, TWindow:RectChanged2, ecx .finish: pop ecx ebx eax return endp method TLabel.SetCaption ;, .value begin inherited [.value] push eax mov eax, [.self] and [eax+TLabel._canvas_valid], 0 pop eax exec [.self], TLabel:RectChanged2, 0 return endp method TLabel.__RenderView .bounds TBounds begin pushad mov esi, [.self] mov edi, [esi+TLabel._canvas] test edi, edi jz .finish xor edx, edx mov ecx, [esi+TLabel._width] mov eax, [esi+TLabel._height] mov [.bounds.x], edx mov [.bounds.y], edx mov [.bounds.width], ecx mov [.bounds.height], eax cmp [esi+TLabel._default_colors], 0 cmove ecx, [esi+TLabel._background] cmove edx, [esi+TLabel._textcolor] cmovne ecx, [GUI.clLabelBk] cmovne edx, [GUI.clLabelTxt] lea eax, [.bounds] stdcall [DrawBox], edi, eax, ecx, bxNone, [GUI.boxBorderWidth] get eax, esi, TWindow:Caption test eax, eax jz .finish stdcall DrawTextBox, edi, eax, [.bounds.x], [.bounds.y], [.bounds.width], [.bounds.height], 2, [esi+TLabel._textalign], [GUI.DefaultFont], edx stdcall StrDel, eax .finish: popad return endp endmodule |
Added freshlib/gui/TListView.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 | struct TLvItem .captions dd ? ; pointer to TArray of dword with strings for the item and subitems. .icon dd ? ; index into ._img_icons .data dd ? ; user data, attached to the item. dd ? ; .shift = 4 ends ; For TListView:Style lvsTiles = 0 lvsList = 1 lvsDetails = 2 object TListView, TGrid ._img_icons dd ? ._items dd ? ; TArray of TLvItem elements. ._style dd ? ._headers dd ? ; TArray of dword with strings, captions of the header. param .Icons, ._img_icons, .SetIcons param .Style, ._style, .SetStyle param .Items, ._items, NONE method .Destroy method .Resize, .newWidth, .newHeight method .GetItem, .index ; returns pointer to TLvItem method .SetIcons, .value method .SetStyle, .value method .SetVisible, .value method .DrawCell, .canvas, .ptrRect, .Col, .Row method .InsertItem, .index, .caption, .icon, .data method .AddSubItem, .iItem, .strSubitem method .RemoveItem, .iItem method .Clear method .Sort, .icolumn method .AddHeader, .hString method .ClearHeaders method .ArangeItems endobj interface TListView.OnFocusChange, .pListView, .x, .y, .fFocused method TListView.Destroy begin push eax get eax, [.self], TListView:Icons stdcall DestroyImage, eax exec [.self], TListView:Clear exec [.self], TListView:ClearHeaders pop eax inherited return endp method TListView.Resize begin inherited [.newWidth], [.newHeight] exec [.self], TListView:ArangeItems return endp method TListView.AddHeader ; .hString begin pushad mov esi, [.self] mov edx, [esi+TListView._headers] test edx, edx jnz .array_ok stdcall CreateArray, 4 mov edx, eax .array_ok: stdcall AddArrayItems, edx, 1 mov [esi+TListView._headers], edx mov edx, eax stdcall StrDup, [.hString] mov [edx], eax popad return endp method TListView.ClearHeaders begin push eax edx mov edx, [.self] xor eax, eax xchg eax, [edx+TListView._headers] stdcall ListFree, eax, StrDel pop edx eax return endp method TListView.GetItem ; .index begin pushad mov esi, [.self] get ebx, esi, TListView:Items test ebx, ebx jz .notfound mov ecx, [.index] cmp ecx, [ebx+TArray.count] jae .notfound shl ecx, TLvItem.shift lea eax, [ebx+TArray.array+ecx] mov [esp+4*regEAX], eax clc popad return .notfound: stc popad return endp method TListView.SetIcons ; .value begin push esi eax mov esi, [.self] stdcall CreateImagePNG, [.value], -1 jc .finish xchg eax, [esi+TListView._img_icons] stdcall DestroyImage, eax xor eax, eax and [esi+TListView._canvas_valid], eax exec esi, TListView:RectChanged2, eax .finish: pop eax esi return endp method TListView.SetStyle ; .value begin pushad mov esi, [.self] mov eax, [.value] xchg eax, [esi+TListView._style] cmp eax, [esi+TListView._style] je .finish exec [.self], TListView:ArangeItems exec [.self], TListView:ForceRefresh .finish: popad return endp method TListView.SetVisible begin inherited [.value] cmp [.value], 0 je .finish push eax esi mov esi, [.self] exec esi, TListView:ArangeItems xor eax, eax mov [esi+TListView._canvas_valid], eax exec esi, TListView:RectChanged2, eax pop esi eax .finish: return endp method TListView.DrawCell ; .canvas, .ptrRect, .Col, .Row .sel RECT begin pushad mov edx, [.self] mov ecx, cellFixed mov esi, [.Col] mov edi, [.Row] cmp esi, [edx+TListView._FixedCols] jl .status_ok cmp edi, [edx+TListView._FixedRows] jl .status_ok cmp edi, [edx+TListView._focused.y] jne .is_selected test [edx+TListView._flags], gfRowFocus jnz .focused cmp esi, [edx+TListView._focused.x] jne .is_selected .focused: mov ecx, cellFocused cmp edx, [__FocusedWindow] je .status_ok mov ecx, cellFocused2 jmp .status_ok .is_selected: lea ecx, [edx+TListView.selection] lea eax, [.sel] stdcall RectCopy, eax, ecx stdcall RectSort, eax inc [eax+RECT.right] inc [eax+RECT.bottom] mov ecx, cellSelected stdcall PointInRect, eax, esi, edi jc .status_ok mov ecx, cellRegular .status_ok: mov eax, [edx+TListView._style] and eax, 3 ;(0..3) mov ebx, [.Row] sub ebx, [edx+TListView._FixedRows] cmovl ebx, [edx+TListView._headers] jl .drawit mov edi, [edx+TListView._items] test edi, edi jz .finish cmp ebx, [edi+TArray.count] jae .finish shl ebx, TLvItem.shift lea ebx, [edi+ebx+TArray.array] .drawit: get edx, edx, TListView:Font test edx, edx cmovz edx, [GUI.DefaultFont] stdcall [__lv_draw_proc+4*eax], [.canvas], [.ptrRect], ebx, [.Col], ecx, edx ; ebx can be pointer to TLvItem or string handle. .finish: popad return endp method TListView.Clear begin pushad mov esi, [.self] xor edx, edx xchg edx, [esi+TListView._items] test edx, edx jz .finish mov ecx, [edx+TArray.count] lea edi, [edx+TArray.array] .loop: dec ecx js .free_array stdcall ListFree, [edi+TLvItem.captions], StrDel add edi, sizeof.TLvItem jmp .loop .free_array: stdcall FreeMem, edx or eax, -1 mov [esi+TListView._focused.x], eax mov [esi+TListView._focused.y], eax mov [esi+TListView.selection.left], eax mov [esi+TListView.selection.top], eax mov [esi+TListView.selection.right], eax mov [esi+TListView.selection.bottom], eax xor eax, eax mov [esi+TListView._canvas_valid], eax mov [esi+TListView.ColCount], eax mov [esi+TListView.RowCount], eax exec esi, TListView:RectChanged2, eax .finish: popad return endp ; In success returns: ; eax - the index of the element inserted. It can differs from the [.index] argument. ; edx - a pointer to the TLvItem inserted. method TListView.InsertItem ; .index, .caption, .icon, .data begin pushad mov esi, [.self] mov edx, [esi+TListView._items] test edx, edx jnz @f stdcall CreateArray, sizeof.TLvItem jc .finish mov edx, eax @@: stdcall InsertArrayItems, edx, [.index], 1 jc .finish mov [esi+TListView._items], edx mov edi, eax stdcall CreateArray, 4 stdcall AddArrayItems, eax, 1 mov [edi+TLvItem.captions], edx mov edx, eax stdcall StrDup, [.caption] mov [edx], eax mov eax, [.icon] mov ecx, [.data] mov [edi+TLvItem.icon], eax mov [edi+TLvItem.data], ecx cmp [esi+TListView._visible], FALSE je .return exec esi, TListView:ArangeItems xor eax, eax mov [esi+TListView._canvas_valid], eax exec esi, TListView:RectChanged2, eax .return: mov [esp+4*regEDX], edi ; mov eax, [esi+TListView._items] lea eax, [eax+TArray.array] sub edi, eax shr edi, TLvItem.shift ; the index of the inserted element mov [esp+4*regEAX], edi clc .finish: popad return endp method TListView.AddSubItem ; .iItem, .strSubitem begin pushad mov esi, [.self] mov edi, [esi+TListView._items] mov ecx, [.iItem] cmp ecx, [edi+TArray.count] jae .error shl ecx, TLvItem.shift lea edi, [edi + TArray.array + ecx] mov edx, [edi+TLvItem.captions] stdcall AddArrayItems, edx, 1 jc .error mov [edi+TLvItem.captions], edx mov edx, eax stdcall StrDup, [.strSubitem] mov [edx], eax clc popad return .error: stc popad return endp method TListView.RemoveItem begin pushad mov esi, [.self] mov edi, [esi+TListView._items] mov ecx, [.iItem] cmp ecx, [edi+TArray.count] jae .error shl ecx, TLvItem.shift lea ebx, [edi + TArray.array + ecx] stdcall ListFree, [ebx+TLvItem.captions], StrDel stdcall DeleteArrayItems, edi, [.iItem], 1 mov [esi+TListView._items], edx mov eax, [esi+TListView._focused.y] cmp eax, [edx+TArray.count] cmova eax, [edx+TArray.count] mov [esi+TListView._focused.y], eax exec esi, TListView:ArangeItems xor eax, eax mov [esi+TListView._canvas_valid], eax exec esi, TListView:RectChanged2, eax clc popad return .error: stc popad return endp method TListView.ArangeItems begin push eax mov eax, [.self] mov eax, [eax+TListView._style] and eax, 3 ;(0..3) stdcall [__lv_count_proc+4*eax], [.self] pop eax return endp iglobal if used __lv_count_proc __lv_count_proc dd __LVTileCount, __LVListCount, __LVDetailsCount, 0 end if if used __lv_draw_proc __lv_draw_proc dd __LVTileDraw, __LVListDraw, __LVDetailsDraw, 0 end if endg proc __LVTileCount, .self begin return endp proc __LVListCount, .self begin pushad stdcall GetFontMetrics, [GUI.DefaultFont] mov ebx, eax mov esi, [.self] xor ecx, ecx mov edx, [esi+TListView._items] test edx, edx jz .set_count mov ecx, [edx+TArray.count] .set_count: exec esi, TListView:SetCounts, 1, ecx get eax, esi, TListView:width sub eax, [GUI.boxBorderWidth] sub eax, [GUI.boxBorderWidth] exec esi, TListView:SetColWidth, 0, eax test ecx, ecx jz .finish ; height: lea edi, [edx+TArray.array] .loop: dec ecx js .end_loop mov eax, [edi+TLvItem.icon] test eax, eax jz .next cmp ebx, [eax+TImage.height] cmovb ebx, [eax+TImage.height] .next: add edi, sizeof.TLvItem jmp .loop .end_loop: add ebx, [GUI.lvIconMargin] add ebx, [GUI.lvIconMargin] mov [esi+TListView.RowHeight], ebx set esi, TListView:StepY, ebx mov eax, [edx+TArray.count] dec eax exec esi, TListView:SetRowsHeight, 0, eax, ebx .finish: popad return endp proc __LVDetailsCount, .self begin pushad stdcall GetFontMetrics, [GUI.DefaultFont] mov ebx, eax mov esi, [.self] xor edi, edi ; columns count inc edi mov edx, [esi+TListView._headers] test edx, edx jz .columns_ok mov edi, [edx+TArray.count] test edi, edi jnz .columns_ok inc edi .columns_ok: xor ecx, ecx mov edx, [esi+TListView._items] test edx, edx jz .set_count mov ecx, [edx+TArray.count] .set_count: push edx get eax, esi, TListView:width sub eax, [GUI.boxBorderWidth] sub eax, [GUI.boxBorderWidth] sar eax, 1 xor edx, edx dec edi jz @f div edi ; column_count-1 @@: inc edi pop edx mov [esi+TListView.ColWidth], eax set esi, TListView:StepX, eax add ecx, [esi+TListView._FixedRows] exec esi, TListView:SetCounts, edi, ecx dec edi exec esi, TListView:SetColumnsWidth, 0, edi, [esi+TListView.ColWidth] imul edi, [esi+TListView.ColWidth] get eax, esi, TListView:width sub eax, [GUI.boxBorderWidth] sub eax, [GUI.boxBorderWidth] sub eax, edi exec esi, TListView:SetColWidth, 0, eax cmp ecx, 1 jbe .finish ;.height: lea edi, [edx+TArray.array] .loop: dec ecx jz .end_loop mov eax, [edi+TLvItem.icon] test eax, eax jz .next cmp ebx, [eax+TImage.height] cmovb ebx, [eax+TImage.height] .next: add edi, sizeof.TLvItem jmp .loop .end_loop: mov eax, [GUI.lvIconMargin] lea ebx, [ebx+2*eax] mov [esi+TListView.RowHeight], ebx set esi, TListView:StepY, ebx mov eax, [edx+TArray.count] dec eax exec esi, TListView:SetRowsHeight, 0, eax, ebx .finish: popad return endp proc __LVTileDraw, .canvas, .ptrRect, .pItem, .iSubitem, .sel, .font begin return endp proc __LVListDraw, .canvas, .ptrRect, .pItem, .iSubitem, .sel, .font begin pushad mov esi, [.pItem] mov edi, [.ptrRect] mov ecx, [edi+RECT.left] mov edx, [edi+RECT.top] mov ebx, [esi+TLvItem.icon] test ebx, ebx jz .icon_ok mov eax, [edi+RECT.bottom] sub eax, [edi+RECT.top] stdcall DrawSolidRect, [.canvas], ecx, edx, [ebx+TImage.wrapW], eax, [GUI.clGridCellBk] mov eax, ecx add eax, [GUI.lvIconMargin] add edx, [GUI.lvIconMargin] stdcall BlendImage, [.canvas], eax, edx, ebx, 0, 0, [ebx+TImage.wrapW], [ebx+TImage.wrapH] add ecx, [ebx+TImage.wrapW] add ecx, [GUI.lvIconMargin] .icon_ok: add ecx, [GUI.lvIconMargin] mov eax, [edi+RECT.right] mov edx, [edi+RECT.bottom] sub eax, ecx sub edx, [edi+RECT.top] mov ebx, [.sel] mov esi, [esi+TLvItem.captions] stdcall DrawTextBox, [.canvas], [esi+TArray.array], ecx, [edi+RECT.top], eax, edx, 0, dtfAlignLeft or dtfSingleLine or dtfAlignMiddle, [GUI.DefaultFont], [GUI.clGridCellTxt + 4*ebx] popad return endp proc __LVDetailsDraw, .canvas, .ptrRect, .pItem, .iSubitem, .sel, .font .draw_flags dd ? begin pushad mov esi, [.pItem] mov edi, [.ptrRect] mov [.draw_flags], dtfAlignCenter or dtfSingleLine or dtfAlignMiddle mov eax, [edi+RECT.left] mov ecx, eax cmp [.sel], cellFixed je .draw_text_from_array ; in this case, pItem is an array with the header strings. mov [.draw_flags], dtfAlignLeft or dtfSingleLine or dtfAlignMiddle cmp [.iSubitem], 0 je .draw_icon mov [.draw_flags], dtfAlignLeft or dtfSingleLine or dtfAlignMiddle jmp .icon_ok .draw_icon: mov edx, [edi+RECT.top] mov ebx, [esi+TLvItem.icon] test ebx, ebx jz .icon_ok add eax, [GUI.lvIconMargin] add edx, [GUI.lvIconMargin] stdcall BlendSolidRect, [.canvas], eax, edx, [ebx+TImage.wrapW], [ebx+TImage.wrapH], $c0ffffff;[GUI.clGridCellBk] stdcall BlendImage, [.canvas], eax, edx, ebx, 0, 0, [ebx+TImage.wrapW], [ebx+TImage.wrapH] add ecx, [ebx+TImage.wrapW] add ecx, [GUI.lvIconMargin] .icon_ok: add ecx, [GUI.lvIconMargin] mov esi, [esi+TLvItem.captions] .draw_text_from_array: test esi, esi jz .finish mov eax, [.iSubitem] cmp eax, [esi+TArray.count] jae .finish mov esi, [esi+TArray.array+4*eax] ; string handle of the cell content. mov eax, [edi+RECT.right] mov edx, [edi+RECT.bottom] sub eax, ecx sub eax, [GUI.lvIconMargin] sub eax, [GUI.lvIconMargin] sub edx, [edi+RECT.top] mov ebx, [.sel] stdcall DrawTextBox, [.canvas], esi, ecx, [edi+RECT.top], eax, edx, 0, [.draw_flags], [.font], [GUI.clGridCellTxt + 4*ebx] .finish: popad return endp method TListView.Sort begin push eax mov eax, [.self] cmp [eax+TListView._items], 0 je .finish stdcall SortArray, [eax+TListView._items], __CompareLvItems, [.icolumn] exec eax, TListView:ForceRefresh .finish: pop eax return endp proc __CompareLvItems as CompareProc begin pushad mov esi, [.pElement1] mov edi, [.pElement2] mov ebx, [esi+TLvItem.captions] mov edx, [edi+TLvItem.captions] mov ecx, [.param] stdcall StrCompSort2, [ebx+TArray.array+4*ecx], [edx+TArray.array+4*ecx], FALSE shl eax, 1 popad return endp |
Added freshlib/gui/TMenu.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TMenu object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Represents main menu or popup menu objects. ;_________________________________________________________________________________________ module "TMenu library" ; menu item types for the menu templates. mitSeparator = 0 mitAction = 1 mitSubmenu = 2 mitString = 3 ; contains simple text string can't have accelerator and icons. struct TMenuItem .type dd ? .item dd ? ; different for the different types of items: NULL, pointer to TAction, pointer to TMenu, handle of string. .itemID dd ? ; user assigned ID .height dd ? ends mitEnd = $80 macro MenuTemplate name { macro action actvar, id \{ \local ..sz, ..beg ..beg = $ db ..sz db mitAction dd actvar if ~id eq dd id else dd 0 end if ..sz = $-..beg \} macro submenu text, id \{ \local ..sz, ..beg, ..lbl ..beg = $ db ..sz db mitSubmenu if ~id eq dd id else dd 0 end if ..lbl db text, 0 ..sz = $-..beg \} macro text txt, id \{ \local ..sz, ..beg, ..lbl ..beg = $ db ..sz db mitString if ~id eq dd id else dd 0 end if ..lbl db txt, 0 ..sz = $-..beg \} macro separator \{ db 2 db mitSeparator \} macro endsub \{ db 2 db mitEnd \} label name byte } macro EndMenu { endsub purge action purge submenu purge text purge separator purge endsub } object TMenu, TCanvasWindow ._p_items dd ? ._selected dd ? .__caller dd ? .__icon_size dd ? ._ActiveSubmenu dd ? ._onstring dd ? ._beforeshow dd ? param .OnString, ._onstring, ._onstring param .BeforeShow, ._beforeshow, ._beforeshow param .Selected, ._selected, .SetSelected param .Items, ._p_items, .SetItems method .SetSelected, .value method .SetItems, .menu_template method .SetVisible, .value method .AddItem, .Type, .Item, .itemID method .InsertItem, .Type, .Item, .itemID, .position method .DeleteItem, .item_index method .SetAction, .value method .UpdateAction, .action method .__RenderView method .Create, .Parent method .Destroy method .Show, .parent, .x, .y method .ExecuteItem, .iItem method .HideAll method .EventButtonPress, .button, .kbdState, .x, .y method .EventMouseMove, .x, .y, .kbdState method .EventKeyPress, .utf8, .scancode, .kbdState endobj interface TMenu.OnString, .self, .item interface TMenu.BeforeShow, .self method TMenu.Create begin inherited 0 stdcall CreateArray, sizeof.TMenuItem push eax mov eax, [.self] pop [eax+TMenu._p_items] set eax, TMenu:WantFocus, FALSE mov [eax+TMenu._selected], -1 set [.self], TWindow:border, borderNone return endp method TMenu.Destroy begin pushad mov esi, [.self] mov edx, [esi+TMenu._p_items] mov ecx, [edx+TArray.count] lea edx, [edx+TArray.array] .loop: dec ecx js .end_loop mov eax, [edx+TMenuItem.type] cmp eax, mitSeparator je .next cmp eax, mitSubmenu je .submenu cmp eax, mitAction je .action cmp eax, mitString je .string .next: add edx, sizeof.TMenuItem jmp .loop .submenu: destroy [edx+TMenuItem.item] jmp .next .string: stdcall StrDel, [edx+TMenuItem.item] jmp .next .action: exec [edx+TMenuItem.item], TAction:Detach, esi jmp .next .end_loop: stdcall FreeMem, [esi+TMenu._p_items] popad inherited return endp method TMenu.SetItems begin pushad popad return endp method TMenu.AddItem begin pushad mov esi, [.self] mov edx, [esi+TMenu._p_items] stdcall AddArrayItems, edx, 1 mov [esi+TMenu._p_items], edx pushd [.Type] pushd [.Item] pushd [.itemID] popd [eax+TMenuItem.itemID] popd [eax+TMenuItem.item] popd [eax+TMenuItem.type] mov [eax+TMenuItem.height], 10 cmp [eax+TMenuItem.type], mitAction jne .action_ok exec [eax+TMenuItem.item], TAction:Attach, [.self] .action_ok: popad return endp method TMenu.InsertItem begin pushad mov esi, [.self] mov edx, [esi+TMenu._p_items] stdcall InsertArrayItems, edx, [.position], 1 mov [esi+TMenu._p_items], edx pushd [.Type] pushd [.Item] pushd [.itemID] popd [eax+TMenuItem.itemID] popd [eax+TMenuItem.item] popd [eax+TMenuItem.type] mov [eax+TMenuItem.height], 10 cmp [eax+TMenuItem.type], mitAction jne .action_ok exec [eax+TMenuItem.item], TAction:Attach, [.self] .action_ok: popad return endp method TMenu.DeleteItem begin pushad mov esi, [.self] mov edx, [esi+TMenu._p_items] stdcall GetArrayItem, edx, [.item_index] jc .finish cmp [eax+TMenuItem.type], mitAction jne .action_ok exec [eax+TMenuItem.item], TAction:Detach, esi .action_ok: cmp [eax+TMenuItem.type], mitSubmenu jne .submenu_ok destroy [eax+TMenuItem.item] jmp .delete_item .submenu_ok: cmp [eax+TMenuItem.type], mitString jne .delete_item stdcall StrDel, [eax+TMenuItem.item] .delete_item: stdcall DeleteArrayItems, edx, [.item_index], 1 clc .finish: popad return endp ; TMenu does not support actions to the menu. method TMenu.SetAction begin push eax mov eax, [.self] mov [eax+TMenu.__action], 0 pop eax return endp method TMenu.UpdateAction ; .action begin exec [.self], TMenu:ForceRefresh return endp method TMenu.SetVisible ; .maxW dd ? .sumH dd ? .str dd ? begin pushad mov esi, [.self] mov eax, [.value] cmp eax, [esi+TMenu._visible] je .finish test eax, eax jz .switch_off get edi, esi, TMenu:Items mov ecx, [edi+TArray.count] test ecx, ecx jnz .compute_width stdcall GetTextBounds, "Empty menu", 10, [GUI.DefaultFont] add eax, 20 jmp .set_width .compute_width: ; first scan for the icon height lea edx, [edi+TArray.array-sizeof.TMenuItem] mov [esi+TMenu.__icon_size], 0 .loop_icon: add edx, sizeof.TMenuItem dec ecx js .height_ok cmp [edx+TMenuItem.type], mitAction jne .loop_icon get eax, [edx+TMenuItem.item], TAction:Icon test eax, eax jz .loop_icon mov eax, [eax+TImage.height] cmp eax, [esi+TMenu.__icon_size] cmovb eax, [esi+TMenu.__icon_size] mov [esi+TMenu.__icon_size], eax jmp .loop_icon .height_ok: mov ecx, [edi+TArray.count] lea edi, [edi+TArray.array-sizeof.TMenuItem] ; edi points to the current TMenuItem xor eax, eax mov [.maxW], eax ; the width of the menu window mov [.sumH], eax ; the total height of the menu window .loop: add edi, sizeof.TMenuItem dec ecx js .end_width cmp [edi+TMenuItem.type], mitSeparator je .separator cmp [edi+TMenuItem.type], mitAction je .action cmp [edi+TMenuItem.type], mitSubmenu je .submenu ; it is string. stdcall StrDup, [edi+TMenuItem.item] push eax jmp .str_width .separator: mov edx, [GUI.menuSeparatorHeight] jmp .set_height .submenu: get eax, [edi+TMenuItem.item], TMenu:Caption push eax stdcall StrCat, eax, txt " >" jmp .str_width .action: get eax, [edi+TMenuItem.item], TAction:Accelerator push eax get edx, [edi+TMenuItem.item], TAction:Caption stdcall StrCat, eax, edx stdcall StrDel, edx .str_width: stdcall StrPtr, eax stdcall GetTextBounds, eax, [eax+string.len], [GUI.DefaultFont] stdcall StrDel ; from the stack cmp eax, [.maxW] jbe .comp_height mov [.maxW], eax .comp_height: mov eax, [esi+TMenu.__icon_size] add eax, [GUI.menuIconMargin] add edx, [GUI.menuIconMargin] ; edx = height cmp edx, eax cmovb edx, eax .set_height: mov [edi+TMenuItem.height], edx add [.sumH], edx jmp .loop .end_width: ; here compute the size of the menu and set .width and .height fields. mov edx, [GUI.iconMenuChecked] mov eax, [edx+TImage.width] add eax, [esi+TMenu.__icon_size] add eax, [.maxW] add eax, [GUI.menuMinTextDist] mov edx, [GUI.menuIconMargin] lea edx, [3*edx] add eax, edx mov edx, [GUI.boxBorderWidth] lea eax, [eax+2*edx] .set_width: set esi, TWindow:width, eax mov edx, [.sumH] mov eax, [GUI.boxBorderWidth] lea edx, [edx+2*eax] mov eax, [GUI.menuIconMargin] lea edx, [edx+2*eax] set esi, TWindow:height, edx .finish: popad inherited [.value] return .switch_off: ; close the active submenu if any xor ecx, ecx xchg ecx, [esi+TMenu._ActiveSubmenu] test ecx, ecx jz .submenu_ok set ecx, TMenu:Visible, FALSE .submenu_ok: xor ecx, ecx mov eax, [esi+TMenu.__caller] test eax, eax jz .set_active istype eax, TMenu cmove ecx, eax je .set_active .set_active: stdcall SetMouseCapture, ecx mov [__ActiveMenu], ecx jmp .finish endp method TMenu.__RenderView .bounds TBounds .y dd ? .ytxt dd ? .xTxt dd ? .clTxt dd ? .txtline dd ? .ascender dd ? .count dd ? .canvas dd ? ; item parameters, depend on the item type. .text dd ? .accel dd ? .icon dd ? .check dd ? .enabled dd ? .subicon dd ? begin pushad mov esi, [.self] ; exec esi, TMenu:__UpdateCanvas mov ebx, [esi+TMenu._canvas] mov [.canvas], ebx test ebx, ebx jz .end_loop xor eax, eax mov [.bounds.x], eax mov [.bounds.y], eax mov eax, [esi+TWindow._width] mov ecx, [esi+TWindow._height] mov [.bounds.width], eax mov [.bounds.height], ecx lea eax, [.bounds] stdcall [DrawBox], [.canvas], eax, [GUI.clMenuBack], [GUI.borderMenu], [GUI.boxBorderWidth] get edi, esi, TMenu:Items test edi, edi jz .end_loop ; compute the text base line. stdcall GetFontMetrics, [GUI.DefaultFont] mov [.txtline], eax lea ebx, [2*ebx] mov [.ascender], ebx mov ecx, [GUI.boxBorderWidth] add ecx, [GUI.menuIconMargin] mov [.y], ecx mov ecx, [GUI.menuIconMargin] lea ecx, [3*ecx] mov eax, [esi+TMenu.__icon_size] add ecx, eax add ecx, [GUI.boxBorderWidth] mov eax, [GUI.iconMenuChecked] add ecx, [eax+TImage.width] mov [.xTxt], ecx mov ecx, [edi+TArray.count] lea edi, [edi+TArray.array] mov [.count], ecx xor ecx, ecx dec ecx .loop: inc ecx cmp ecx, [.count] jae .end_loop mov eax, [edi+TMenuItem.type] cmp eax, mitSeparator je .draw_separator cmp eax, mitAction je .action cmp eax, mitSubmenu je .submenu cmp eax, mitString jne .next_item .string: stdcall StrDup, [edi+TMenuItem.item] mov [.text], eax xor eax, eax mov [.accel], eax mov [.icon], eax mov [.check], eax mov [.subicon], eax inc eax mov [.enabled], eax jmp .draw_background .submenu: get eax, [edi+TMenuItem.item], TMenu:Caption mov [.text], eax get eax, [edi+TMenuItem.item], TMenu:Enabled mov [.enabled], eax mov ebx, [GUI.menuSubIconGray] test eax, eax jz @f mov ebx, [GUI.menuSubIcon] cmp ecx, [esi+TMenu._selected] jne @f mov ebx, [GUI.menuSubIconSel] @@: mov [.subicon], ebx xor eax, eax mov [.icon], eax mov [.check], eax mov [.accel], eax jmp .draw_background .action: mov [.subicon], 0 get eax, [edi+TMenuItem.item], TAction:Caption mov [.text], eax get eax, [edi+TMenuItem.item], TAction:Accelerator mov [.accel], eax get eax, [edi+TMenuItem.item], TAction:Enabled mov [.enabled], eax get eax, [edi+TMenuItem.item], TAction:Icon mov [.icon], eax get eax, [edi+TMenuItem.item], TAction:Checked mov [.check], eax jmp .draw_background .draw_separator: mov eax, [.bounds.x] mov ebx, [.bounds.width] mov edx, [GUI.menuIconMargin] add eax, edx sub ebx, edx sub ebx, edx mov edx, [edi+TMenuItem.height] add edx, [.y] add edx, [.y] sar edx, 1 stdcall DrawSolidRect, [.canvas], eax, edx, ebx, 1, [GUI.clBorderDark] inc edx stdcall DrawSolidRect, [.canvas], eax, edx, ebx, 1, [GUI.clBorderLight] jmp .next_item ; draw the background .draw_background: cmp ecx, [esi+TMenu._selected] jne .selected_ok cmp [.enabled], 0 je .selected_ok mov eax, [.bounds.x] mov edx, [.bounds.width] add eax, [GUI.boxBorderWidth] sub edx, [GUI.boxBorderWidth] sub edx, [GUI.boxBorderWidth] stdcall DrawSolidRect, [.canvas], eax, [.y], edx, [edi+TMenuItem.height], [GUI.clMenuSelection] mov ebx, [.icon] test ebx, ebx jz .selected_ok mov edx, [ebx+TImage.width] add edx, [GUI.menuIconMargin] mov ebx, [GUI.iconMenuChecked] add eax, [ebx+TImage.width] mov ebx, [GUI.menuIconMargin] add eax, ebx shr ebx, 1 add eax, ebx stdcall DrawSolidRect, [.canvas], eax, [.y], edx, [edi+TMenuItem.height], [GUI.clMenuSelIcon] .selected_ok: ; draw the icon cmp [.icon], 0 je .icon_ok mov ebx, [GUI.iconMenuChecked] mov eax, [ebx+TImage.width] add eax, [GUI.menuIconMargin] add eax, [GUI.menuIconMargin] add eax, [GUI.boxBorderWidth] ; x-coordinate mov ebx, [.icon] test ebx, ebx jz .icon_ok mov edx, [edi+TMenuItem.height] sub edx, [ebx+TImage.height] add edx, [.y] add edx, [.y] sar edx, 1 stdcall BlendImage, [.canvas], eax, edx, ebx, 0, 0, [ebx+TImage.width], [ebx+TImage.height] .icon_ok: ; draw the checkbox cmp [.check], 0 je .draw_text mov eax, [GUI.menuIconMargin] add eax, [GUI.boxBorderWidth] mov ebx, [GUI.iconMenuChecked] cmp [.enabled], 0 jne .check_ok mov ebx, [GUI.iconMenuCheckedGray] .check_ok: mov edx, [edi+TMenuItem.height] sub edx, [ebx+TImage.height] add edx, [.y] add edx, [.y] sar edx, 1 stdcall BlendImage, [.canvas], eax, edx, ebx, 0, 0, [ebx+TImage.width], [ebx+TImage.height] .draw_text: mov eax, [GUI.clMenuTextGray] cmp [.enabled], 0 je .txt_color_ok mov eax, [GUI.clMenuText] cmp ecx, [esi+TMenu._selected] jne .txt_color_ok mov eax, [GUI.clEditSelTxt] .txt_color_ok: mov [.clTxt], eax push eax push [GUI.DefaultFont] mov eax, [edi+TMenuItem.height] sub eax, [.txtline] add eax, [.ascender] sar eax, 1 add eax, [.y] mov [.ytxt], eax push eax pushd [.xTxt] stdcall StrLen, [.text] push eax stdcall StrPtr, [.text] stdcall DrawString, [.canvas], eax ; remaining from the stack stdcall StrDel, [.text] ; draw the submenu arrow mov ebx, [.subicon] test ebx, ebx jz .draw_accelerator mov eax, [.bounds.width] sub eax, [ebx+TImage.width] sub eax, [GUI.menuIconMargin] mov edx, [edi+TMenuItem.height] sub edx, [ebx+TImage.height] add edx, [.y] add edx, [.y] sar edx, 1 stdcall BlendImage, [.canvas], eax, edx, ebx, 0, 0, [ebx+TImage.width], [ebx+TImage.height] jmp .next_item ; draw the accelerator .draw_accelerator: cmp [.accel], 0 je .next_item stdcall StrPtr, [.accel] push eax stdcall GetTextBounds, eax, [eax+string.len], [GUI.DefaultFont] mov edx, [.bounds.width] sub edx, [GUI.boxBorderWidth] sub edx, [GUI.menuIconMargin] sub edx, eax pop eax stdcall DrawString, [.canvas], eax, [eax+string.len], edx, [.ytxt], [GUI.DefaultFont], [.clTxt] stdcall StrDel, [.accel] .next_item: mov eax, [edi+TMenuItem.height] add [.y], eax add edi, sizeof.TMenuItem jmp .loop .end_loop: popad return .empty_menu: stdcall DrawString, [.canvas], "Empty menu", 10, 10, 14, [GUI.DefaultFont], [GUI.clMenuText] stdcall FilterDisabled, [.canvas], FALSE jmp .end_loop endp method TMenu.Show begin pushad mov esi, [.self] mov edi, [.parent] mov [esi+TMenu.__caller], edi istype edi, TMenu jne .submenu_ok mov eax, esi xchg eax, [edi+TMenu._ActiveSubmenu] test eax, eax jz .submenu_ok set eax, TMenu:Visible, FALSE stdcall SetMouseCapture, edi .submenu_ok: cmp [esi+TMenu._beforeshow], 0 je @f push esi stdcall [esi+TMenu._beforeshow], esi pop esi @@: set esi, TMenu:Visible, TRUE set esi, TMenu:Selected, -1 mov [__ActiveMenu], esi exec edi, TWindow:ClientToScreenXY, [.x], [.y] stdcall _GetScreenSize sub eax, [esi+TMenu._width] sub ebx, [esi+TMenu._height] cmp ecx, eax cmovg ecx, eax cmp edx, ebx cmovg edx, ebx exec esi, TMenu:Move, ecx, edx popad return endp proc AcceleratorToStr, .pFastKey begin mov eax, [.pFastKey] test eax, eax jz .empty stdcall CreateKeyName, [eax+TFastKey.key], [eax+TFastKey.flags] jnc .finish .empty: stdcall StrNew stc .finish: return endp ; Converts the string representation of an accelerator key to ; TFastKey structure. ; ; Returns: ; eax - keyboard flags (TFastKey.flags) ; edx - keyboard key (TFastKey.key) ; ; ToDo: more modifiers need to be processed proc StrToAccelerator, .hString .res TFastKey begin pushad stdcall StrSplitList, [.hString], "+", FALSE mov edx, eax xor ecx, ecx mov [.res.flags], ecx mov [.res.key], ecx dec ecx .loop: inc ecx cmp ecx, [edx+TArray.count] jae .finish mov ebx, Ctrl stdcall StrCompNoCase, [edx+TArray.array + 4*ecx], txt "Ctrl" jc .setflag stdcall StrCompNoCase, [edx+TArray.array + 4*ecx], txt "Control" jc .setflag stdcall StrCompNoCase, [edx+TArray.array + 4*ecx], txt "Ctl" jc .setflag mov ebx, Alt stdcall StrCompNoCase, [edx+TArray.array + 4*ecx], txt "Alt" jc .setflag mov ebx, Shift stdcall StrCompNoCase, [edx+TArray.array + 4*ecx], txt "Shift" jc .setflag stdcall KbdNameToCode, [edx+TArray.array + 4*ecx] jc .loop mov [.res.key], eax jmp .loop .setflag: or [.res.flags], ebx jmp .loop .finish: stdcall ListFree, edx, StrDel mov eax, [.res.flags] mov edx, [.res.key] mov [esp+4*regEAX], eax mov [esp+4*regEDX], edx OutputValue "Accelerator key: ", edx, 16, 8 OutputValue "Accelerator flags: ", eax, 16, 8 popad return endp method TMenu.SetSelected begin pushad mov esi, [.self] mov ecx, [.value] cmp ecx, [esi+TMenu._selected] je .finish get edi, esi, TMenu:Items test edi, edi jz .finish mov eax, [esi+TMenu._selected] mov [esi+TMenu._selected], ecx cmp eax, [edi+TArray.count] jae .old_ok imul eax, sizeof.TMenuItem cmp [edi + TArray.array + eax + TMenuItem.type], mitSubmenu jne .old_ok set [edi + TArray.array + eax + TMenuItem.item], TMenu:Visible, FALSE .old_ok: cmp ecx, [edi+TArray.count] jae .finish ; compute Y coordinate lea edi, [edi+TArray.array] xor ebx, ebx .loop: dec ecx js .height_ok add ebx, [edi+TMenuItem.height] add edi, sizeof.TMenuItem jmp .loop .height_ok: mov eax, ebx add eax, [edi+TMenuItem.height] exec esi, TMenu:RectChanged2, 0;, ebx, [esi+TWindow._width], eax cmp [edi+TMenuItem.type], mitSubmenu jne .hide_old get eax, [edi+TMenuItem.item], TMenu:Enabled test eax, eax jz .hide_old mov eax, [esi+TMenu._width] sub eax, [GUI.menuIconMargin] exec [edi+TMenuItem.item], TMenu:Show, esi, eax, ebx ; will hide the previous open submenu! jmp .finish ; hide old menu if active: .hide_old: cmp [esi+TMenu._ActiveSubmenu], 0 je .finish set [esi+TMenu._ActiveSubmenu], TMenu:Visible, FALSE and [esi+TMenu._ActiveSubmenu], 0 .finish: popad return endp method TMenu.EventMouseMove begin pushad mov esi, [.self] mov ecx, [.x] mov edx, [.y] sub ecx, [esi+TMenu._x] js .check_caller sub edx, [esi+TMenu._y] js .check_caller cmp ecx, [esi+TMenu._width] jge .check_caller cmp edx, [esi+TMenu._height] jge .check_caller sub edx, [GUI.boxBorderWidth] js .exit sub edx, [GUI.menuIconMargin] js .exit ; search for item. get edi, esi, TMenu:Items mov ecx, [edi+TArray.count] lea edi, [edi+TArray.array] xor ebx, ebx ; index xor eax, eax ; Y coordinate .loop: dec ecx js .exit add eax, [edi+TMenuItem.height] cmp edx, eax jl .found inc ebx add edi, sizeof.TMenuItem jmp .loop .found: set esi, TMenu:Selected, ebx .exit: popad return .check_caller: mov esi, [esi+TMenu.__caller] test esi, esi jz .exit istype esi, TMenu jne .exit exec esi, TMenu:EventMouseMove, [.x], [.y], [.kbdState] jmp .exit endp ; returns CF = 1 if the item was executed. Else CF = 0 method TMenu.ExecuteItem ;, .iItem begin pushad mov esi, [.self] get edx, esi, TMenu:Items test edx, edx jz .finish mov ecx, [.iItem] cmp ecx, [edx+TArray.count] jae .finish shl ecx, 4 ; sizeof.TMenuItem = $10 lea edi, [edx+TArray.array+ecx] cmp [edi+TMenuItem.type], mitSeparator je .finish cmp [edi+TMenuItem.type], mitString je .onstring cmp [edi+TMenuItem.type], mitSubmenu je .finish cmp [edi+TMenuItem.type], mitAction je .onaction jmp .finish .onstring: get edx, esi, TMenu:OnString test edx, edx jz .finish exec esi, TMenu:HideAll stdcall edx, esi, edi jmp .finish .onaction: get eax, [edi+TMenuItem.item], TAction:Enabled test eax, eax jz .finish exec esi, TMenu:HideAll exec [edi+TMenuItem.item], TAction:Execute, [.self] ; execute the action. .finish_true: stc .finish: popad return endp method TMenu.HideAll begin push ecx esi mov esi, [.self] .loop: mov ecx, [esi+TMenu.__caller] jecxz .closeit istype ecx, TMenu cmove esi, ecx je .loop .closeit: set esi, TMenu:Visible, FALSE pop esi ecx return endp method TMenu.EventButtonPress begin inherited [.button], [.kbdState], [.x], [.y] jc .exit pushad mov esi, [.self] get eax, esi, TMenu:Visible test eax, eax jz .finish mov ecx, [.x] mov edx, [.y] sub ecx, [esi+TMenu._x] js .check_caller sub edx, [esi+TMenu._y] js .check_caller cmp ecx, [esi+TMenu._width] jge .check_caller cmp edx, [esi+TMenu._height] jge .check_caller exec esi, TMenu:ExecuteItem, [esi+TMenu._selected] stc .finish: popad .exit: return .check_caller: set esi, TMenu:Visible, FALSE ; hide the menu mov esi, [esi+TMenu.__caller] test esi, esi jz .finish istype esi, TMenu clc jne .finish mov [esi+TMenu._selected], -1 exec esi, TMenu:EventMouseMove, [.x], [.y], [.kbdState] exec esi, TMenu:EventButtonPress, [.button], [.kbdState], [.x], [.y] ; what about converting coordinates to the caller ??? jmp .finish endp method TMenu.EventKeyPress begin pushad OutputValue "Key pressed: ", [.scancode], 10, -1 mov esi, [.self] get edx, esi, TMenu:Items test edx, edx jz .finish get ebx, esi, TMenu:Selected cmp ebx, -1 jne .continue istype [esi+TMenu.__caller], TMenu jne .continue exec [esi+TMenu.__caller], TMenu:EventKeyPress, [.utf8], [.scancode], [.kbdState] jmp .finish .continue: xor edi, edi mov eax, [.scancode] cmp eax, keyDownNumpad je .down cmp eax, keyDown je .down cmp eax, keyUpNumpad je .up cmp eax, keyUp je .up cmp eax, keyLeftNumpad je .left cmp eax, keyLeft je .left cmp eax, keyRightNumpad je .right cmp eax, keyRight je .right cmp [.utf8], $1b je .escape cmp [.utf8], $0d je .enter jmp .finish .down: inc edi ; == +1 jmp .inc_pos .up: dec edi ; == -1 .inc_pos: xor ecx, ecx mov eax, [edx+TArray.count] dec eax js .finish add ebx, edi cmp ebx, eax cmovg ebx, ecx test ebx, ebx cmovs ebx, eax lea ecx, [4*ebx] cmp [edx+TArray.array + 4*ecx + TMenuItem.type], mitSeparator je .next cmp [edx+TArray.array + 4*ecx + TMenuItem.type], mitAction jne .set_selected get eax, [edx+TArray.array + 4*ecx + TMenuItem.item], TAction:Enabled test eax, eax jz .next .set_selected: set esi, TMenu:Selected, ebx jmp .finish .next: get eax, esi, TMenu:Selected cmp eax, ebx ; only one item can be selected!!! je .finish jmp .inc_pos .escape: set esi, TMenu:Visible, FALSE jmp .finish .left: cmp [esi+TMenu.__caller], 0 je .maybe_not_active istype [esi+TMenu.__caller], TMenu jne .maybe_not_active set esi, TMenu:Visible, FALSE jmp .finish .maybe_not_active: cmp [esi+TMenu._ActiveSubmenu], 0 je .finish set [esi+TMenu._ActiveSubmenu], TMenu:Visible, FALSE jmp .finish .right: test ebx, ebx js .finish lea ecx, [4*ebx] lea ecx, [edx + TArray.array + 4*ecx] cmp [ecx+TMenuItem.type], mitSubmenu jne .finish get eax, [ecx+TMenuItem.item], TMenu:Enabled test eax, eax jz .finish mov eax, [esi+TMenu._width] sub eax, [GUI.menuIconMargin] mov [esi+TMenu._selected], -1 set esi, TMenu:Selected, ebx set [ecx+TMenuItem.item], TMenu:Selected, 0 jmp .finish .enter: ; execute the item. exec esi, TMenu:ExecuteItem, ebx .finish: popad return endp proc ___MenuFromTemplate begin push ebx ecx edx edi create ebx, TMenu, 0 .loop: movzx edx, byte [esi+1] ; the type of the item cmp edx, mitEnd je .end_of_menu cmp edx, mitSeparator je .separator cmp edx, mitAction je .action cmp edx, mitString je .string cmp edx, mitSubmenu je .submenu jne .next_item .separator: xor ecx, ecx xor edi, edi jmp .add_item .action: mov edi, [esi+6] ; the item ID mov ecx, [esi+2] mov ecx, [ecx] jmp .add_item .string: mov edi, [esi+2] ; the item ID lea ecx, [esi+6] stdcall StrDupMem, ecx mov ecx, eax jmp .add_item .submenu: mov edi, [esi+2] ; the item ID lea ecx, [esi+6] movzx eax, byte [esi] add esi, eax call ___MenuFromTemplate set eax, TMenu:Caption, ecx set eax, TMenu:Enabled, TRUE set eax, TMenu:Visible, FALSE mov ecx, eax .add_item: exec ebx, TMenu:AddItem, edx, ecx, edi .next_item: movzx eax, byte [esi] add esi, eax jmp .loop .end_of_menu: mov eax, ebx pop edi edx ecx ebx return endp proc MenuFromTemplate, .pTemplate begin push esi mov esi, [.pTemplate] call ___MenuFromTemplate pop esi return endp ; Searches menu item with the given itemID. ; Returns: ; CF = 1; The item has been found. EAX = pointer the TMenuItem, EDX = pointer to TMenu. ; CF = 0; The item has not been found. proc SearchMenuItem, .pMenu, .itemID begin push ebx ecx eax edx mov edx, [.pMenu] mov eax, [edx+TMenu._p_items] mov ecx, [eax+TArray.count] lea eax, [eax+TArray.array] .loop: dec ecx js .not_found mov ebx, [eax+TMenuItem.itemID] cmp ebx, [.itemID] je .found cmp [eax+TMenuItem.type], mitSubmenu jne .next stdcall SearchMenuItem, [eax+TMenuItem.item], [.itemID] jc .found .next: add eax, sizeof.TMenuItem jmp .loop .found: lea esp, [esp+8] ; remove edx and eax from the stack stc pop ecx ebx return .not_found: clc pop edx eax ecx ebx return endp endmodule |
Added freshlib/gui/TObject.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TObject object class. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: TObject is the root member of FreshLib objects tree. ;_________________________________________________________________________________________ module "TObject library" object TObject ; fields if options.Threads ._mxAccess TMutex ; access mutex. Procedures from objects.asm will use it to ensure thread safety. end if ._OnCreate dd ? ._OnDestroy dd ? ._ptrVar dd ? .__parent dd ? .__first_child dd ? .__last_child dd ? .__prev dd ? .__next dd ? .__owner dd ? ; parameters param .Parent, .__parent, .SetParent param .FirstChild, .__first_child, NONE param .LastChild, .__last_child, NONE param .NextSibling, .__next, NONE param .PrevSibling, .__prev, NONE param .Owner, .__owner, .__owner param .OnCreate, ._OnCreate, ._OnCreate param .OnDestroy, ._OnDestroy, ._OnDestroy param .ptrVar, ._ptrVar, ._ptrVar ; methods method .Create, .parent method .Destroy method .SetParent, .value method .AddChild, .objchild method .RemoveChild, .objchild endobj interface TObject.OnCreate, .self interface TObject.OnDestroy, .self method TObject.Create begin if defined options.Threads & options.Threads push eax mov eax, [.self] lea eax, [eax+TObject._mxAccess] stdcall MutexCreate, 0, eax stdcall MutexRelease, eax pop eax end if set [.self], TWindow:Parent, [.parent] return endp method TObject.Destroy begin pushad mov esi, [.self] get ecx, esi, TObject:OnDestroy jecxz .event_ok push esi stdcall dword ecx, [.self] pop esi .event_ok: ; destroy all children .loop: get ebx, esi, TObject:LastChild test ebx, ebx jz .end_children destroy ebx jmp .loop .end_children: set esi, TObject:Parent, 0 ; detach from the parent. get ecx, esi, TObject:ptrVar jecxz .varok mov dword [ecx], 0 .varok: if defined options.Threads & options.Threads lea ecx, [esi+TObject._mxAccess] stdcall MutexDestroy, ecx end if popad return endp ;_________________________________________________________________________________________ method TObject.AddChild begin pushad mov esi, [.self] mov ebx, [.objchild] xor ecx, ecx test ebx, ebx jz .not_object istype ebx, TObject jne .not_object ; remove the object from the previous parent list, if any. mov eax, [ebx+TObject.__parent] test eax, eax jz @f exec eax, TObject:RemoveChild, ebx @@: mov [ebx+TObject.__next], ecx ; it is the last child in the chain. mov [ebx+TObject.__parent], esi ; connect to the new parent structures. mov eax, [esi+TObject.__first_child] test eax, eax cmovz eax, ebx mov edx, [esi+TObject.__last_child] test edx, edx jz @f mov [edx+TObject.__next], ebx @@: mov [ebx+TObject.__prev], edx mov [esi+TObject.__first_child], eax mov [esi+TObject.__last_child], ebx clc popad return .not_object: stc popad return endp ;_________________________________________________________________________________________ ;---------------------------------------------------------------------- ; Returns: ; CF = 1 - if the object specified was not found as a window child. ; CF = 0 - the child was removed from the list of childrens. ;---------------------------------------------------------------------- method TObject.RemoveChild begin pushad mov esi, [.self] mov ebx, [.objchild] xor ecx, ecx test ebx, ebx jz .error istype ebx, TObject jne .error cmp [ebx+TObject.__parent], esi jne .error mov [ebx+TObject.__parent], ecx mov eax, [ebx+TObject.__prev] mov edx, [ebx+TObject.__next] test eax, eax jz .prev_ok mov [eax+TObject.__next], edx .prev_ok: test edx, edx jz .next_ok mov [edx+TObject.__prev], eax .next_ok: cmp [esi+TObject.__first_child], ebx jne .first_child_ok mov [esi+TObject.__first_child], edx .first_child_ok: cmp [esi+TObject.__last_child], ebx jne .last_child_ok mov [esi+TObject.__last_child], eax .last_child_ok: clc popad return .error: stc popad return endp ;_________________________________________________________________________________________ method TObject.SetParent begin pushad mov esi, [.self] mov ebx, [.value] get edx, esi, TObject:Parent cmp ebx, edx ; if the parent is already set to the same value, ignore. je .finish test edx, edx je .parent_ok exec edx, TObject:RemoveChild, esi ; remove the window from the old parent. .parent_ok: test ebx, ebx jz .finish exec ebx, TObject:AddChild, esi .finish: popad return endp ; Returns the next leaf object in the tree, relative to the input object. ; The search is circular, if pObject is the last leaf of the tree, ; the first leaf is returned. ; ; Arguments: ; .pObject - pointer to TObject; ; ; Returns: ; eax - pointer to the next object if any, or the same object if next was not found. ; ZF = 1 - next object not found. ; ZF = 0 - next object returned. proc NextLeaf, .pObject begin mov eax, [.pObject] .next: cmp [eax+TObject.__next], 0 cmovne eax, [eax+TObject.__next] jne .down_to_leaf cmp [eax+TObject.__parent], 0 cmovne eax, [eax+TObject.__parent] jne .next .back_to_first: cmp [eax+TObject.__prev], 0 cmovne eax, [eax+TObject.__prev] jne .back_to_first .down_to_leaf: cmp [eax+TObject.__first_child], 0 cmovne eax, [eax+TObject.__first_child] jne .down_to_leaf cmp eax, [.pObject] return endp ; Returns the previous leaf object in the tree, relative to the input object. ; The search is circular, if pObject is the first leaf of the tree, ; the last leaf is returned. ; ; Arguments: ; .pObject - pointer to TObject; ; ; Returns: ; eax - pointer to the previous leaf, if any, or the same leaf if next was not found. ; ZF = 1 - previous object not found. ; ZF = 0 - previous object returned. proc PrevLeaf, .pObject begin mov eax, [.pObject] .prev: cmp [eax+TObject.__prev], 0 cmovne eax, [eax+TObject.__prev] jne .down_to_leaf cmp [eax+TObject.__parent], 0 cmovne eax, [eax+TObject.__parent] jne .prev .back_to_first: cmp [eax+TObject.__next], 0 cmovne eax, [eax+TObject.__next] jne .back_to_first .down_to_leaf: cmp [eax+TObject.__last_child], 0 cmovne eax, [eax+TObject.__last_child] jne .down_to_leaf cmp eax, [.pObject] return endp endmodule |
Added freshlib/gui/TProgressbar.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TProgressBar object class; Simple progress bar control. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ module "TProgressbar library" object TProgress, TCanvasWindow ._Pos dd ? ._Max dd ? ._Color dd ? ._embeded dd ? param .Pos, ._Pos, .SetPos param .Max, ._Max, .SetMax param .Embeded, ._embeded, .SetEmbeded method .Step method .SetPos, .value method .SetMax, .value method .SetEmbeded, .value method .Create, .pParent method .__RenderView endobj method TProgress.Create begin mov eax, [.self] set eax, TProgress:WantFocus, FALSE inherited [.pParent] return endp method TProgress.Step begin push eax ecx mov ecx, [.self] mov eax, [ecx+TProgress._Pos] cmp eax, [ecx+TProgress._Max] jge .exit inc [ecx+TProgress._Pos] and [ecx+TProgress._canvas_valid], 0 exec ecx, TProgress:RectChanged2, 0 .exit: pop ecx eax clc return endp method TProgress.SetPos begin push eax ecx mov ecx, [.self] mov eax, [.value] xchg eax, [ecx+TProgress._Pos] cmp eax, [ecx+TProgress._Pos] je .finish and [ecx+TProgress._canvas_valid], 0 exec ecx, TProgress:RectChanged2, 0 .finish: pop ecx eax return endp method TProgress.SetMax begin push eax ecx mov ecx, [.self] mov eax, [.value] xchg eax, [ecx+TProgress._Max] cmp eax, [ecx+TProgress._Max] je .finish and [ecx+TProgress._canvas_valid], 0 exec ecx, TProgress:RectChanged2, 0 .finish: pop ecx eax return endp method TProgress.SetEmbeded begin push ecx eax mov ecx, [.self] mov eax, [.value] xchg eax, [ecx+TProgress._embeded] cmp eax, [ecx+TProgress._embeded] je .finish and [ecx+TProgress._canvas_valid], 0 exec ecx, TProgress:RectChanged2, 0 .finish: pop eax ecx return endp method TProgress.__RenderView .bounds TBounds begin pushad mov esi, [.self] cmp [esi+TProgress._canvas], 0 je .finish stdcall LockImg, [esi+TProgress._canvas] jc .finish mov [.bounds.x], 0 mov [.bounds.y], 0 mov eax, [esi+TProgress._width] mov ecx, [esi+TProgress._height] mov [.bounds.width], eax mov [.bounds.height], ecx mov edx, [GUI.progressBorder] cmp [esi+TProgress._embeded], 0 je .border_ok mov edx, bxNone .border_ok: lea eax, [.bounds] stdcall [DrawBox], [esi+TProgress._canvas], eax, [GUI.clProgressBk], edx, [GUI.boxBorderWidth] mov eax, [GUI.boxBorderWidth] inc eax add [.bounds.x], eax add [.bounds.y], eax shl eax, 1 sub [.bounds.width], eax sub [.bounds.height], eax mov eax, [esi+TProgress._Pos] mov ecx, [esi+TProgress._Max] test ecx, ecx jnz @f inc ecx @@: cmp eax, ecx cmovg eax, ecx imul [.bounds.width] idiv ecx stdcall DrawSolidRect, [esi+TProgress._canvas], [.bounds.x], [.bounds.y], eax, [.bounds.height], [GUI.clProgressBar] stdcall UnlockImg, [esi+TProgress._canvas] .finish: popad return endp endmodule |
Added freshlib/gui/TScrollable.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TScrollWindow object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: TScrollWindow is window that may have scrollers to scroll the client area. ;_________________________________________________________________________________________ module "TScrollable library" struct TScrollerXY .pos rd 2 .page rd 2 .max rd 2 .step rd 2 .state rd 2 ends ; Constants for TScroller.state - the state of the particular scrollbar. sbsNormal = 0 ; when the mouse is outside the scrollbar sbsActive = 1 ; when the mouse points on the scrollbar ; Constants for TScrollable._state - the state of the window as a whole. scsReleased = 0 ; no scrollbar is in drag state. scsDragHorizontal = 1 ; the horizontal scrollbar is in drag state. scsDragVertical = 2 ; the vertical scrollbar is in drag state. object TScrollable, TWindow ._scrXY TScrollerXY ._drag_ofs dd ? ._state dd ? ._imgX dd ? ._imgY dd ? param .PosX, ._scrXY.pos, .SetPos:2 param .PageX, ._scrXY.page, .SetPage:2 param .MaxX, ._scrXY.max, .SetMax:2 param .StepX, ._scrXY.step, ._scrXY.step param .PosY, ._scrXY.pos+4, .SetPos:2 param .PageY, ._scrXY.page+4, .SetPage:2 param .MaxY, ._scrXY.max+4, .SetMax:2 param .StepY, ._scrXY.step+4, ._scrXY.step+4 method .SetPos, .param, .value method .SetPage, .param, .value method .SetMax, .param, .value method .Create, .parent method .Destroy method .__UpdateImages method .__ClearScrollbar, .scrollbar ; .scrollbar == scrollX or scrollY method .__DrawScrollbar, .scrollbar ; .scrollbar == scrollX or scrollY method .__Invalidate, .scrollbar method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height ; Paints itself on the caller provided TImage. method .EventMouseMove, .x, .y, .kbdState method .EventMouseLeave method .EventButtonPress, .button, .kbdState, .x, .y method .EventButtonRelease, .button, .kbdState, .x, .y method .EventScroll, .direction, .command, .value endobj ;_________________________________________________________________________________________ method TScrollable.Create begin inherited [.parent] set [.self], TScrollable:StepX, 1 set [.self], TScrollable:StepY, 1 return endp method TScrollable.Destroy begin push esi mov esi, [.self] stdcall DestroyImage, [esi+TScrollable._imgX] and [esi+TScrollable._imgX], 0 stdcall DestroyImage, [esi+TScrollable._imgY] and [esi+TScrollable._imgY], 0 pop esi inherited return endp method TScrollable.__Invalidate ; .scrollbar begin pushad mov esi, [.self] cmp [.scrollbar], scrollY je .invalidateY xor eax, eax mov edx, [GUI.scrollWidth] mov ebx, [esi+TScrollable._height] mov ecx, [esi+TScrollable._width] sub ebx, edx jmp .invalidate .invalidateY: xor ebx, ebx mov ecx, [GUI.scrollWidth] mov eax, [esi+TScrollable._width] mov edx, [esi+TScrollable._height] sub eax, ecx .invalidate: exec esi, TScrollable:RectChangedXY2, eax, ebx, ecx, edx popad return endp ;_________________________________________________________________________________________ method TScrollable.__UpdateImages begin inherited pushad mov esi, [.self] mov edi, [esi+TScrollable._imgX] mov ecx, [esi+TScrollable._width] mov edx, [GUI.scrollWidth] test edi, edi jz .createx cmp [edi+TImage.wrapW], ecx jne .destroyx cmp [edi+TImage.wrapH], edx je .ximg_ok .destroyx: stdcall DestroyImage, edi .createx: stdcall CreateImage2, ecx, edx, FALSE mov [esi+TScrollable._imgX], eax .ximg_ok: mov edi, [esi+TScrollable._imgY] mov ecx, [esi+TScrollable._height] mov edx, [GUI.scrollWidth] test edi, edi jz .createy cmp [edi+TImage.wrapH], ecx jne .destroyy cmp [edi+TImage.wrapW], edx je .yimg_ok .destroyy: stdcall DestroyImage, edi .createy: stdcall CreateImage2, edx, ecx, FALSE mov [esi+TScrollable._imgY], eax .yimg_ok: exec esi, TScrollable:__ClearScrollbar, scrollX exec esi, TScrollable:__DrawScrollbar, scrollX exec esi, TScrollable:__ClearScrollbar, scrollY exec esi, TScrollable:__DrawScrollbar, scrollY popad return endp ;_________________________________________________________________________________________ method TScrollable.SetPos ;, .param, .value begin pushad mov esi, [.self] mov eax, [.value] xor edx, edx ; == scrollX cmp [.param], TScrollable.PosX je @f inc edx @@: cmp eax, [esi + TScrollable._scrXY.pos + 4*edx] je .finish mov [esi + TScrollable._scrXY.pos + 4*edx], eax exec esi, TScrollable:__ClearScrollbar, edx exec esi, TScrollable:__DrawScrollbar, edx exec esi, TScrollable:__Invalidate, edx clc ; position changed. refresh. popad return .finish: stc ; no need to refresh. popad return endp ;_________________________________________________________________________________________ method TScrollable.SetPage ; .param, .value begin pushad mov esi, [.self] mov eax, [.value] xor edx, edx ; == scrollX cmp [.param], TScrollable.PageX je @f inc edx @@: cmp eax, [esi + TScrollable._scrXY.page + 4*edx] je .finish mov [esi + TScrollable._scrXY.page + 4*edx], eax exec esi, TScrollable:__ClearScrollbar, edx exec esi, TScrollable:__DrawScrollbar, edx exec esi, TScrollable:__Invalidate, edx .finish: popad return endp ;_________________________________________________________________________________________ method TScrollable.SetMax ;, .param, .value begin pushad mov esi, [.self] mov eax, [.value] xor edx, edx cmp [.param], TScrollable.MaxX je @f inc edx @@: cmp eax, [esi + TScrollable._scrXY.max + 4*edx] je .finish mov [esi + TScrollable._scrXY.max + 4*edx], eax exec esi, TScrollable:__ClearScrollbar, edx exec esi, TScrollable:__DrawScrollbar, edx exec esi, TScrollable:__Invalidate, edx .finish: popad return endp ;_________________________________________________________________________________________ method TScrollable.SelfPaint ;, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height .src RECT ; the rectangle that need paint. .vscr RECT ; the vertical scroller rect. .hscr RECT ; the horizontal scroller rect. .res RECT begin inherited [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] pushad mov esi, [.self] mov eax, [.xSrc] mov ecx, [.ySrc] mov [.src.left], eax mov [.src.top], ecx add eax, [.width] add ecx, [.height] mov [.src.right], eax mov [.src.bottom], ecx xor eax, eax mov [.vscr.top], eax mov [.hscr.left], eax mov ecx, [esi+TScrollable._width] mov edx, [esi+TScrollable._height] mov [.vscr.right], ecx mov [.vscr.bottom], edx mov [.hscr.right], ecx mov [.hscr.bottom], edx sub ecx, [GUI.scrollWidth] sub edx, [GUI.scrollWidth] mov [.vscr.left], ecx mov [.hscr.top], edx lea edx, [.src] lea ebx, [.vscr] lea eax, [.res] stdcall RectIntersect, eax, ebx, edx jc .vscr_ok cmp [esi + TScrollable._scrXY.max + 4], 0 je .vscr_ok mov eax, [.res.left] mov ebx, [.res.top] mov ecx, eax mov edx, ebx sub [.res.right], eax sub [.res.bottom], ebx sub eax, [.vscr.left] sub ebx, [.vscr.top] add ecx, [.xDst] add edx, [.yDst] sub ecx, [.xSrc] sub edx, [.ySrc] stdcall BlendImage, [.pDstImage], ecx, edx, [esi+TScrollable._imgY], eax, ebx, [.res.right], [.res.bottom] .vscr_ok: lea edx, [.src] lea ebx, [.hscr] lea eax, [.res] stdcall RectIntersect, eax, ebx, edx jc .hscr_ok cmp [esi+TScrollable._scrXY.max], 0 je .hscr_ok mov eax, [.res.left] mov ebx, [.res.top] mov ecx, eax mov edx, ebx sub [.res.right], eax sub [.res.bottom], ebx sub eax, [.hscr.left] sub ebx, [.hscr.top] add ecx, [.xDst] add edx, [.yDst] sub ecx, [.xSrc] sub edx, [.ySrc] stdcall BlendImage, [.pDstImage], ecx, edx, [esi+TScrollable._imgX], eax, ebx, [.res.right], [.res.bottom] .hscr_ok: popad return endp method TScrollable.__ClearScrollbar begin pushad mov esi, [.self] mov ebx, [.scrollbar] mov ebx, [esi+TScrollable._imgX+4*ebx] test ebx, ebx jz .finish stdcall DrawSolidRect, ebx, 0, 0, [ebx+TImage.wrapW], [ebx+TImage.wrapH], $00;ffffff .finish: popad return endp method TScrollable.__DrawScrollbar begin pushad mov esi, [.self] cmp [.scrollbar], scrollX je .draw_x mov ebx, [esi+TScrollable._imgY] test ebx, ebx jz .scry_ok mov edi, [esi + TScrollable._scrXY.state + 4] ; Draw background Y mov ecx, [ebx+TImage.wrapH] mov edx, [GUI.scrollWidth] sub ecx, edx stdcall BlendSolidRect, ebx, 0, 0, edx, ecx, [GUI.clScrollBk+4*edi] stdcall BlendTriangle, ebx, 0, ecx, edx, trtUpper or trtRight, [GUI.clScrollBk+4*edi] ; Draw slider Y lea eax, [esi + TScrollable._scrXY] stdcall _SliderPixels2, eax, scrollY, ecx cmp eax, ecx cmovg eax, ecx mov ecx, [esi + TScrollable._scrXY.pos + 4] cmp ecx, [esi + TScrollable._scrXY.max + 4] cmovg ecx, [GUI.clScrollSliderOvf+4*edi] cmovle ecx, [GUI.clScrollSlider+4*edi] stdcall BlendSolidRect, ebx, 0, eax, [GUI.scrollWidth], edx, ecx add eax, edx stdcall BlendTriangle, ebx, 0, eax, [GUI.scrollWidth], trtUpper or trtRight, ecx .scry_ok: popad return .draw_x: mov ebx, [esi+TScrollable._imgX] test ebx, ebx jz .scrx_ok mov edi, [esi+TScrollable._scrXY.state] ; Draw background X mov ecx, [ebx+TImage.wrapW] mov edx, [GUI.scrollWidth] sub ecx, edx stdcall BlendSolidRect, ebx, 0, 0, ecx, edx, [GUI.clScrollBk+4*edi] stdcall BlendTriangle, ebx, ecx, 0, edx, trtLower or trtLeft, [GUI.clScrollBk+4*edi] ; Draw slider X lea eax, [esi+TScrollable._scrXY] stdcall _SliderPixels2, eax, scrollX, ecx cmp eax, ecx cmovg eax, ecx mov ecx, [esi+TScrollable._scrXY.pos] cmp ecx, [esi+TScrollable._scrXY.max] cmovg ecx, [GUI.clScrollSliderOvf+4*edi] cmovle ecx, [GUI.clScrollSlider+4*edi] stdcall BlendSolidRect, ebx, eax, 0, edx, [GUI.scrollWidth], ecx add eax, edx stdcall BlendTriangle, ebx, eax, 0, [GUI.scrollWidth], trtLower or trtLeft, ecx .scrx_ok: popad return endp ; returns: ; EAX: ; -1 - the coordinates are outside the scrollbars ; 0 - the coordinates are in the horizontal scrollbar ; 1 - the coordinates are in the vertical scrollbar proc __FindScroller, .scrollable, .x, .y begin push esi ecx edx mov esi, [.scrollable] xor eax, eax dec eax ; -1 mov ecx, [esi+TScrollable._width] mov edx, [esi+TScrollable._height] sub ecx, [.x] sub edx, [.y] cmp ecx, [GUI.scrollWidth] jl .y_scroller cmp edx, [GUI.scrollWidth] jge .finish cmp ecx, edx jl .yes_y_scroller .yes_x_scroller: cmp [esi+TScrollable._scrXY.max], 0 je .finish ; hidden X scroller. inc eax jmp .finish .y_scroller: cmp ecx, edx jge .yes_x_scroller .yes_y_scroller: cmp [esi+TScrollable._scrXY.max+4], 0 je .finish ; hidden Y scroller. inc eax inc eax .finish: pop edx ecx esi return endp method TScrollable.EventMouseLeave begin pushad mov esi, [.self] cmp [esi+TScrollable._state], 0 jne .finish ; there is a drag operation active. xor ecx, ecx xor edx, edx xchg ecx, [esi+TScrollable._scrXY.state] xchg edx, [esi+TScrollable._scrXY.state + 4] or ecx, edx jz .finish xor edx, edx ; == scrollX exec esi, TScrollable:__ClearScrollbar, edx exec esi, TScrollable:__DrawScrollbar, edx exec esi, TScrollable:__Invalidate, edx inc edx ; == scrollY exec esi, TScrollable:__ClearScrollbar, edx exec esi, TScrollable:__DrawScrollbar, edx exec esi, TScrollable:__Invalidate, edx .finish: inherited popad return endp method TScrollable.EventMouseMove .dummy dd ? .stateH dd ? .stateV dd ? begin pushad mov esi, [.self] mov ebx, [esi + TScrollable._state] test ebx, ebx jnz .process_drag xor ecx, ecx mov [.stateH], ecx mov [.stateV], ecx stdcall __FindScroller, esi, [.x], [.y] inc [.stateH+4*eax] ; notice the .dummy variable for eax = -1 mov ecx, [esi+TWindow._cursor] inc eax jz @f mov ecx, mcArrow @@: get edx, esi, TWindow:OSWindow stdcall GetStockCursor, ecx stdcall SetMouseCursor, [edx+TWindow.handle], eax xor eax, eax mov ebx, [.stateH] xchg ebx, [esi+TScrollable._scrXY.state] xor ebx, [esi+TScrollable._scrXY.state] jz .statex_ok exec esi, TScrollable:__ClearScrollbar, scrollX exec esi, TScrollable:__DrawScrollbar, scrollX exec esi, TScrollable:__Invalidate, scrollX .statex_ok: mov ebx, [.stateV] xchg ebx, [esi+TScrollable._scrXY.state+4] xor ebx, [esi+TScrollable._scrXY.state+4] or eax, ebx jz .statey_ok ; if the state has not be changed. exec esi, TScrollable:__ClearScrollbar, scrollY exec esi, TScrollable:__DrawScrollbar, scrollY exec esi, TScrollable:__Invalidate, scrollY .statey_ok: inherited [.x], [.y], [.kbdState] clc popad return .process_drag: dec ebx mov eax, [.x + 4*ebx] mov ecx, [esi+TScrollable._width + 4*ebx] sub ecx, [GUI.scrollWidth] jle .finish sub eax, [esi+TScrollable._drag_ofs] lea edx, [esi+TScrollable._scrXY] stdcall _ComputeSliderPos, edx, ebx, eax, ecx jc .finish exec esi, TScrollable:EventScroll, ebx, scTrack, eax .finish: stc popad return endp ; computes the position of the slider from screen pixel coordinates. proc _ComputeSliderPos, .pScroller, .direction, .x, .lengthpx begin push ecx edx stdcall _SliderPixels2, [.pScroller], [.direction], [.lengthpx] ; the length of the slider. mov ecx, [.direction] shl ecx, 2 add ecx, [.pScroller] sub [.lengthpx], edx jz .zero mov eax, [ecx + TScrollerXY.max] imul [.x] idiv [.lengthpx] xor edx, edx cmp eax, edx cmovl eax, edx mov edx, [ecx + TScrollerXY.max] cmp eax, edx cmovg eax, edx clc .ok: pop edx ecx return .zero: stc xor eax, eax jmp .ok endp method TScrollable.EventButtonPress begin pushad cmp [.button], mbLeft jne .not_processed mov esi, [.self] .again: stdcall __FindScroller, esi, [.x], [.y] test eax, eax js .not_processed mov ebx, eax lea eax, [esi + TScrollable._scrXY] stdcall _SliderPixels2, eax, ebx, [esi+TScrollable._width + 4*ebx] mov edi, [.x + 4*ebx] mov ecx, [esi + TScrollable._width + 4*ebx] ; if pos is > max sub ecx, edx cmp eax, ecx cmovg eax, ecx sub edi, eax jl .before cmp edi, edx jg .after ; inside the slider - capture the mouse. mov [esi + TScrollable._drag_ofs], edi inc ebx mov [esi + TScrollable._state], ebx stdcall SetMouseCapture, esi .processed: stc popad return .after: lea eax, [esi+TScrollable._scrXY] stdcall _ComputeSliderPos, eax, ebx, [.x+4*ebx], [esi+TScrollable._width+4*ebx] add eax, [esi+TScrollable._scrXY.page+4*ebx] jmp .teleport .before: lea eax, [esi+TScrollable._scrXY] stdcall _ComputeSliderPos, eax, ebx, [.x+4*ebx], [esi+TScrollable._width+4*ebx] .teleport: mov ecx, [esi+TScrollable._scrXY.page+4*ebx] shr ecx, 1 xor edx, edx sub eax, ecx cmovl eax, edx cmp eax, [esi+TScrollable._scrXY.max+4*ebx] cmova eax, [esi+TScrollable._scrXY.max+4*ebx] cmp eax, [esi+TScrollable._scrXY.pos+4*ebx] je .processed exec esi, TScrollable:EventScroll, ebx, scTrack, eax jmp .again ; possible hang... .not_processed: inherited [.button], [.kbdState], [.x], [.y] clc popad return endp method TScrollable.EventButtonRelease begin pushad mov esi, [.self] xor eax, eax cmp [esi+TScrollable._state], eax je .finish mov [esi+TScrollable._drag_ofs], eax mov [esi+TScrollable._state], eax stdcall SetMouseCapture, eax exec esi, TScrollable:EventMouseMove, [.x], [.y], [.kbdState] .finish: popad inherited [.button], [.kbdState], [.x], [.y] return endp method TScrollable.EventScroll begin pushad mov esi, [.self] cmp [.direction], scrollX je .horiz_scroll cmp [.command], scWheelUp je .scrollupy cmp [.command], scWheelDn je .scrolldny cmp [.command], scTrack je .track clc popad return .finish: popad return .track: set esi, TScrollable:PosY, [.value] jmp .finish .scrollupy: get ecx, esi, TScrollable:StepY get eax, esi, TScrollable:PosY sub eax, ecx jns @f xor eax, eax @@: set esi, TScrollable:PosY, eax jmp .finish .scrolldny: get edx, esi, TScrollable:MaxY get ecx, esi, TScrollable:StepY get eax, esi, TScrollable:PosY add eax, ecx cmp eax, edx cmovg eax, edx set [.self], TScrollable:PosY, eax jmp .finish .horiz_scroll: cmp [.command], scWheelUp je .scrollupx cmp [.command], scWheelDn je .scrolldnx cmp [.command], scTrack jne .finish set esi, TScrollable:PosX, [.value] jmp .finish .scrollupx: get ecx, esi, TScrollable:StepX get eax, esi, TScrollable:PosX sub eax, ecx jns @f xor eax, eax @@: set esi, TScrollable:PosX, eax jmp .finish .scrolldnx: get edx, esi, TScrollable:MaxX get ecx, esi, TScrollable:StepX get eax, esi, TScrollable:PosX add eax, ecx cmp eax, edx cmovg eax, edx set [.self], TScrollable:PosX, eax jmp .finish endp ; returns: ; eax - position in pixels ; edx - size in pixels proc _SliderPixels2, .pScroller, .direction, .length begin push ecx esi mov ecx, [.pScroller] mov eax, [.direction] lea ecx, [ecx+4*eax] ; page size in pixels. mov esi, [ecx + TScrollerXY.max] mov eax, [.length] add esi, [ecx + TScrollerXY.page] test esi, esi jz .lengthok imul [ecx + TScrollerXY.page] idiv esi .lengthok: cmp eax, [GUI.minSliderHeight] cmovl eax, [GUI.minSliderHeight] cmp eax, [.length] cmovg eax, [.length] push eax ; width ; position in pixels sub eax, [.length] mov esi, [ecx + TScrollerXY.max] test esi, esi jnz @f inc esi @@: neg eax mul [ecx + TScrollerXY.pos] div esi pop edx ; width pop esi ecx return endp endmodule |
Added freshlib/gui/TTabBar.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TTabBar object class ; ; Target OS: Any ; ; Dependencies: ;_________________________________________________________________________________________ module "TTabBar library" tsNeutral = 0 tsHovered = 1 tsSelected = 2 struct TTab .caption dd ? .icon dd ? ._width dd ? ._x dd ? .user_data dd ? ends object TTabBar, TWindow ; private fields ._RequestHeight dd ? ._canvas dd ? ._canvas_valid dd ? ._items dd ? ; TArray of TTab structures. ._hovered dd ? ._selected dd ? .x_start dd ? ._on_sel_change dd ? ; params param .Selected, ._selected, .SetSelected param .Hovered, ._hovered, .SetHovered param .OnSelChange, ._on_sel_change, ._on_sel_change ; methods method .SetSelected, .value method .SetHovered, .value method .ScrollToSelected method .Next method .Prev method .Create, .Parent method .Destroy method .ForceRefresh method .HitTest, .x, .y method .InsertTab, .index, .caption, .icon, .userdata method .DeleteTab, .index, .userFreeCallback method .__UpdateImages method ._UpdateX, .from method ._UpdateW, .tab method ._RenderView method .DrawTab, .pTab, .state method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height method .Autosize ; system events methods method .EventMouseLeave method .EventMouseMove, .x, .y, .kbdState method .EventButtonPress, .button, .kbdState, .x, .y method .EventScroll, .direction, .command, .value endobj interface TTabBar.OnSelChange, .self, .pTabUnselected, .iTabUnselected, .pTabSelected, .iTabSelected ; new method TTabBar.Create begin inherited [.Parent] push esi mov esi, [.self] mov [esi+TTabBar._cursor], mcArrow set esi, TTabBar:WantFocus, FALSE stdcall CreateArray, sizeof.TTab mov [esi+TTabBar._items], eax xor eax, eax dec eax mov [esi+TTabBar._selected], eax mov [esi+TTabBar._hovered], eax mov [esi+TTabBar._RequestHeight], 10 ; just as initial value. It will be recalculated in __UpdateImages. pop esi return endp method TTabBar.Destroy begin pushad mov ebx, [.self] mov edx, [ebx+TTabBar._items] test edx, edx jz .finish mov ecx, [edx+TArray.count] lea edx, [edx+TArray.array] .free: dec ecx js .end_free stdcall StrDel, [edx+TTab.caption] ; but how about the icons? add edx, sizeof.TTab jmp .free .end_free: xor eax, eax xchg eax, [ebx+TTabBar._items] stdcall FreeMem, eax .finish: popad inherited return endp method TTabBar.ForceRefresh begin mov eax, [.self] and [eax+TTabBar._canvas_valid], 0 inherited return endp method TTabBar.SelfPaint begin pushad mov esi, [.self] cmp [esi+TTabBar._canvas_valid], 0 jne @f exec esi, TTabBar:_RenderView @@: mov ebx, [esi+TTabBar._canvas] test ebx, ebx jz .finish stdcall DrawSolidRect, [.pDstImage], [.xDst], [.yDst], [.width], [.height], [GUI.clDialogBk] mov eax, [esi+TTabBar.x_start] add eax, [.xSrc] stdcall BlendImage, [.pDstImage], [.xDst], [.yDst], ebx, eax, [.ySrc], [.width], [.height] .finish: popad inherited [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] return endp method TTabBar.HitTest begin pushad mov esi, [.self] mov edi, [esi+TTabBar._items] mov eax, [esi+TTabBar.x_start] add [.x], eax mov ecx, [edi+TArray.count] lea edi, [edi+TArray.array] xor edx, edx .loop: dec ecx js .not_found mov eax, [edi+TTab._width] cmp [.x], eax jl .found sub [.x], eax inc edx add edi, sizeof.TTab jmp .loop .found: mov [esp+4*regEAX], edi mov [esp+4*regEDX], edx clc popad return .not_found: stc popad return endp method TTabBar.InsertTab begin pushad mov esi, [.self] mov edx, [esi+TTabBar._items] mov eax, [.index] cmp eax, [edx+TArray.count] cmova eax, [edx+TArray.count] mov [.index], eax stdcall InsertArrayItems, edx, eax, 1 mov [esi+TTabBar._items], edx mov edi, eax stdcall StrDup, [.caption] mov [edi+TTab.caption], eax mov eax, [.icon] mov edx, [.userdata] mov [edi+TTab.icon], eax mov [edi+TTab.user_data], edx exec esi, TTabBar:_UpdateW, edi exec esi, TTabBar:_UpdateX, [.index] exec esi, TTabBar:__UpdateImages and [esi+TTabBar._canvas_valid], 0 exec esi, TTabBar:RectChanged2, 0 popad return endp method TTabBar.DeleteTab ;, .index, .userFreeCallback begin pushad mov esi, [.self] mov ebx, [esi+TTabBar._selected] set esi, TTabBar:Selected, -1 mov edx, [esi+TTabBar._items] stdcall GetArrayItem, edx, [.index] jc .finish stdcall StrDel, [eax+TTab.caption] cmp [.userFreeCallback], 0 je .element_empty pushad stdcall [.userFreeCallback], [eax+TTab.user_data] popad and [eax+TTab.user_data], 0 .element_empty: stdcall DeleteArrayItems, edx, [.index], 1 mov [esi+TTabBar._items], edx cmp ebx, [.index] jb .selected_ok dec ebx jns .selected_ok xor ebx, ebx cmp [edx+TArray.count], ebx jne .selected_ok dec ebx .selected_ok: set esi, TTabBar:Selected, ebx exec esi, TTabBar:_UpdateX, [.index] exec esi, TTabBar:__UpdateImages and [esi+TTabBar._canvas_valid], 0 exec esi, TTabBar:RectChanged2, 0 .finish: popad return endp method TTabBar._UpdateX begin pushad mov esi, [.self] mov edx, [esi+TTabBar._items] mov edi, [edx+TArray.count] xor ecx, ecx mov ebx, [.from] cmp ebx, edi jae .finish mov eax, ebx imul eax, sizeof.TTab sub eax, sizeof.TTab lea edx, [edx+TArray.array+eax] js .set mov ecx, [edx+TTab._x] .loop: add ecx, [edx+TTab._width] .set: inc ebx add edx, sizeof.TTab mov [edx+TTab._x], ecx cmp ebx, edi jb .loop .finish: popad return endp method TTabBar._UpdateW begin pushad mov esi, [.tab] mov eax, [esi+TTab.icon] xor ecx, ecx xor edx, edx mov ebx, [GUI.tabMarginX] test eax, eax jz @f mov ecx, [eax+TImage.wrapW] mov edx, ebx @@: shl ebx, 1 add ecx, edx add ecx, ebx mov [edi+TTab._width], ecx stdcall StrPtr, [esi+TTab.caption] stdcall GetTextBounds, eax, -1, [GUI.DefaultFont] cmp eax, [GUI.maxTabWidth] cmova eax, [GUI.maxTabWidth] add [edi+TTab._width], eax popad return endp method TTabBar._RenderView begin pushad mov esi, [.self] mov edi, [esi+TTabBar._items] mov ebx, [edi+TArray.count] mov ecx, [esi+TTabBar._canvas] jecxz .finish stdcall DrawSolidRect, ecx, 0, 0, [ecx+TImage.wrapW], [ecx+TImage.wrapH], 0 lea edi, [edi + TArray.array] xor ecx, ecx dec ecx .loop: inc ecx cmp ecx, ebx jae .finish mov eax, tsSelected cmp ecx, [esi+TTabBar._selected] je .drawit mov eax, tsHovered cmp ecx, [esi+TTabBar._hovered] je .drawit mov eax, tsNeutral .drawit: exec esi, TTabBar:DrawTab, edi, eax add edi, sizeof.TTab jmp .loop .finish: inc [esi+TTabBar._canvas_valid] popad return endp method TTabBar.DrawTab;, .pTab, .state .bounds TBounds begin pushad mov esi, [.pTab] mov edi, [.self] mov edi, [edi+TTabBar._canvas] test edi, edi jz .finish mov eax, [esi+TTab._x] xor ecx, ecx mov [.bounds.x], eax mov [.bounds.y], ecx mov eax, [esi+TTab._width] mov ecx, [edi+TImage.wrapH] mov [.bounds.width], eax mov [.bounds.height], ecx mov ebx, [.state] stdcall DrawSolidRect, edi, [.bounds.x], [.bounds.y], [.bounds.width], [.bounds.height], [GUI.clTabBk+4*ebx] cmp ebx, tsSelected jne .selected_ok stdcall DrawSolidRect, edi, [.bounds.x], 0, [.bounds.width], 2, [GUI.clBorderFocused] .selected_ok: add [.bounds.y], 2 sub [.bounds.height], 2 mov eax, [GUI.tabMarginX] mov ecx, [GUI.tabMarginY] add [.bounds.x], eax add [.bounds.y], ecx shl eax, 1 shl ecx, 1 sub [.bounds.width], eax sub [.bounds.height], ecx mov ebx, [esi+TTab.icon] test ebx, ebx jz .icon_ok mov ecx, [ebx+TImage.wrapW] stdcall BlendImage, edi, [.bounds.x], [.bounds.y], ebx, 0, 0, ecx, [ebx+TImage.wrapH] mov eax, [GUI.tabMarginX] add [.bounds.x], ecx add [.bounds.x], eax sub [.bounds.width], ecx .icon_ok: stdcall DrawTextBox, edi, [esi+TTab.caption], [.bounds.x], [.bounds.y], [.bounds.width], [.bounds.height], 0, dtfAlignLeft or dtfAlignMiddle or dtfSingleLine, [GUI.DefaultFont], [GUI.clTabTxt] .finish: popad return endp method TTabBar.Autosize begin inherited xor eax, eax mov edx, [.self] mov edx, [edx+TTabBar._items] mov edx, [edx+TArray.count] test edx, edx jz .finish mov edx, [.self] mov edx, [edx+TTabBar._RequestHeight] .finish: return endp method TTabBar.EventMouseLeave begin set [.self], TTabBar:Hovered, -1 exec [.self], TTabBar:ScrollToSelected return endp method TTabBar.EventMouseMove begin push eax edx or edx, -1 exec [.self], TTabBar:HitTest, [.x], [.y] set [.self], TTabBar:Hovered, edx pop edx eax return endp method TTabBar.EventButtonPress begin inherited [.button], [.kbdState], [.x], [.y] jnc .process return .process: push eax edx exec [.self], TTabBar:HitTest, [.x], [.y] jc .finish set [.self], TTabBar:Selected, edx clc .finish: cmc pop edx eax return endp method TTabBar.EventScroll begin pushad mov esi, [.self] mov edx, [esi+TTabBar._items] mov ecx, [esi+TTabBar.x_start] cmp [.command], scWheelUp je .scrollup cmp [.command], scWheelDn je .scrolldn .finish: popad return .scrolldn: mov eax, [edx+TArray.count] dec eax js .finish imul eax, sizeof.TTab lea eax, [edx+eax+TArray.array] mov ebx, [eax+TTab._x] add ebx, [eax+TTab._width] sub ebx, [esi+TTabBar._width] js .finish add ecx, 32 cmp ecx, ebx cmova ecx, ebx .set: mov [esi+TTabBar.x_start], ecx exec esi, TTabBar:RectChanged2, 0 jmp .finish .scrollup: xor eax, eax sub ecx, 32 cmovs ecx, eax jmp .set endp method TTabBar.SetHovered begin pushad mov esi, [.self] mov edi, 64 mov eax, [esi+TTabBar._canvas] test eax, eax jnz .height_ok mov edi, [eax+TImage.wrapH] .height_ok: mov edx, [.value] cmp edx, [esi+TTabBar._hovered] je .finish xchg edx, [esi+TTabBar._hovered] test edx, edx js .old_ok cmp edx, [esi+TTabBar._selected] je .old_ok mov eax, [esi+TTabBar._items] cmp edx, [eax+TArray.count] jae .old_ok imul edx, sizeof.TTab lea edx, [eax+edx+TArray.array] exec esi, TTabBar:DrawTab, edx, tsNeutral mov eax, [edx+TTab._x] sub eax, [esi+TTabBar.x_start] exec esi, TTabBar:RectChangedXY2, eax, 0, [edx+TTab._width], edi .old_ok: mov edx, [esi+TTabBar._hovered] test edx, edx js .finish cmp edx, [esi+TTabBar._selected] je .finish mov eax, [esi+TTabBar._items] cmp edx, [eax+TArray.count] jae .finish imul edx, sizeof.TTab lea edx, [eax+edx+TArray.array] exec esi, TTabBar:DrawTab, edx, tsHovered mov eax, [edx+TTab._x] sub eax, [esi+TTabBar.x_start] exec esi, TTabBar:RectChangedXY2, eax, 0, [edx+TTab._width], edi .finish: popad return endp method TTabBar.SetSelected .tab_prev dd ? .tab_prev_i dd ? .tab_new dd ? .tab_new_i dd ? begin pushad xor eax, eax mov [.tab_prev], eax mov [.tab_new], eax dec eax mov [.tab_prev_i], eax mov [.tab_new_i], eax mov esi, [.self] mov edi, 64 mov eax, [esi+TTabBar._canvas] test eax, eax jz .height_ok mov edi, [eax+TImage.wrapH] .height_ok: mov edx, [.value] ; cmp edx, [esi+TTabBar._selected] ; je .finish test edx, edx js .value_ok mov eax, [esi+TTabBar._items] cmp edx, [eax+TArray.count] jae .finish .value_ok: xchg edx, [esi+TTabBar._selected] test edx, edx js .old_ok mov eax, [esi+TTabBar._items] cmp edx, [eax+TArray.count] jae .old_ok mov ebx, edx imul ebx, sizeof.TTab lea ebx, [eax+ebx+TArray.array] exec esi, TTabBar:DrawTab, ebx, tsNeutral mov eax, [ebx+TTab._x] sub eax, [esi+TTabBar.x_start] exec esi, TTabBar:RectChangedXY2, eax, 0, [ebx+TTab._width], edi mov [.tab_prev], ebx mov [.tab_prev_i], edx .old_ok: mov edx, [esi+TTabBar._selected] test edx, edx js .finish mov eax, [esi+TTabBar._items] cmp edx, [eax+TArray.count] jae .finish mov ebx, edx imul ebx, sizeof.TTab lea ebx, [eax+ebx+TArray.array] exec esi, TTabBar:DrawTab, ebx, tsSelected exec esi, TTabBar:ScrollToSelected mov eax, [ebx+TTab._x] sub eax, [esi+TTabBar.x_start] exec esi, TTabBar:RectChangedXY2, eax, 0, [ebx+TTab._width], edi mov [.tab_new], ebx mov [.tab_new_i], edx .finish: ; mov eax, [.tab_prev] ; or eax, [.tab_new] ; jz .exit get eax, esi, TTabBar:OnSelChange test eax, eax jz .exit ; interface TTabBar.OnSelChange, .self, .pTabUnselected, .iTabUnselected, .pTabSelected, .iTabSelected stdcall eax, esi, [.tab_prev], [.tab_prev_i], [.tab_new], [.tab_new_i] .exit: popad return endp method TTabBar.Next begin pushad mov esi, [.self] mov ecx, [esi+TTabBar._items] or eax, -1 mov edx, [ecx+TArray.count] ; to test edx, edx jz .set xor ebx, ebx ; from mov eax, [esi+TTabBar._selected] inc eax cmp eax, ebx cmovl eax, ebx cmp eax, edx cmovge eax, ebx .set: set [.self], TTabBar:Selected, eax popad return endp method TTabBar.Prev begin pushad mov esi, [.self] mov ecx, [esi+TTabBar._items] or eax, -1 mov edx, [ecx+TArray.count] ; to test edx, edx jz .set dec edx mov eax, [esi+TTabBar._selected] dec eax cmovs eax, edx .set: set [.self], TTabBar:Selected, eax popad return endp method TTabBar.ScrollToSelected begin pushad mov esi, [.self] mov edx, [esi+TTabBar._items] mov ecx, [esi+TTabBar._selected] cmp ecx, [edx+TArray.count] jae .finish imul ecx, sizeof.TTab lea ecx, [edx+ecx+TArray.array] mov eax, [ecx+TTab._x] sub eax, [esi+TTabBar.x_start] js .scroll_right cmp eax, [esi+TTabBar._width] jge .scroll_left add eax, [ecx+TTab._width] cmp eax, [esi+TTabBar._width] jge .scroll_left .finish: popad return .scroll_right: mov eax, [ecx+TTab._x] sub eax, 32 jns .set_ofs xor eax, eax .set_ofs: mov [esi+TTabBar.x_start], eax exec esi, TTabBar:RectChanged2, 0 jmp .finish .scroll_left: mov eax, [ecx+TTab._x] add eax, [ecx+TTab._width] sub eax, [esi+TTabBar._width] mov ebx, [edx+TArray.count] dec ebx cmp ebx, [esi+TTabBar._selected] jbe .ofs_ok add eax, 32 .ofs_ok: mov ebx, eax sub ebx, [ecx+TTab._x] js .set_ofs jmp .scroll_right endp method TTabBar.__UpdateImages begin inherited pushad mov esi, [.self] stdcall GetFontMetrics, [GUI.DefaultFont] mov edi, eax ; min tabbar height mov edx, [esi+TTabBar._items] test edx, edx jz .finish mov ecx, [edx+TArray.count] lea edx, [edx+TArray.array] xor ebx, ebx ; total width .loop: dec ecx js .endloop add ebx, [edx+TTab._width] mov eax, [edx+TTab.icon] add edx, sizeof.TTab test eax, eax jz .loop cmp edi, [eax+TImage.wrapH] cmovl edi, [eax+TImage.wrapH] jmp .loop .endloop: add edi, 2 ; for the select mark. add edi, [GUI.tabMarginY] add edi, [GUI.tabMarginY] ; height mov [esi+TTabBar._RequestHeight], edi ; OutputValue "Tab height = ", edi, 10, -1 mov edx, [esi+TTabBar._canvas] test edx, edx jz .create_new cmp ebx, [edx+TImage.wrapW] ja .destroy cmp edi, [edx+TImage.wrapH] ja .destroy popad return .destroy: stdcall DestroyImage, edx and [esi+TTabBar._canvas], 0 .create_new: cmp [esi+TTabBar._visible], 0 je .finish stdcall CreateImage2, ebx, edi, FALSE mov [esi+TTabBar._canvas], eax and [esi+TTabBar._canvas_valid], 0 .finish: popad return endp endmodule |
Added freshlib/gui/TToolbar.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TToolbar object class ; ; Target OS: Any ; ; Dependencies: ;_________________________________________________________________________________________ module "TToolbar library" tbbSeparator = 0 tbsNeutral = bsNeutral tbsHovered = bsHovered tbsPressed = bsPressed struct TToolButton .action dd ? ; can be pointer to TAction object, or TMenu or tbbSeparator (0) .state dd ? .width dd ? .icon dd ? ; if the .action field contains TMenu ends object TToolbar, TWindow ; private fields ._canvas dd ? ._canvas_valid dd ? ._btn_height dd ? ._buttons dd ? ; TArray of TToolButton structures. ; methods method .Create, .Parent method .Destroy method .ForceRefresh method .SetAction, .value method .UpdateAction, .action method .HitTest, .x, .y method .ClearState method .AddButton, .action, .icon method ._RenderView method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height method .Autosize ; system events methods method .EventMouseEnter method .EventMouseLeave method .EventMouseMove, .x, .y, .kbdState method .EventButtonPress, .button, .kbdState, .x, .y method .EventButtonRelease, .button, .kbdState, .x, .y endobj interface TToolbar.OnClick, .self, .button ; new method TToolbar.Create begin inherited [.Parent] push esi mov esi, [.self] mov [esi+TToolbar._cursor], mcArrow set esi, TToolbar:WantFocus, FALSE stdcall CreateArray, sizeof.TToolButton mov [esi+TToolbar._buttons], eax mov [esi+TToolbar._btn_height], 24 pop esi return endp method TToolbar.Destroy begin pushad mov esi, [.self] xor eax, eax xchg eax, [esi+TToolbar._canvas] stdcall DestroyImage, eax mov edx, [esi+TToolbar._buttons] mov ecx, [edx+TArray.count] lea edx, [edx+TArray.array] .loop: dec ecx js .end_loop mov eax, [edx+TToolButton.action] add edx, sizeof.TToolButton test eax, eax jz .loop istype eax, TAction jne .loop exec eax, TAction:Detach, [.self] jmp .loop .end_loop: stdcall FreeMem, [esi+TToolbar._buttons] popad inherited return endp method TToolbar.SetAction begin push eax mov eax, [.self] mov [eax+TToolbar.__action], 0 pop eax return endp method TToolbar.UpdateAction begin exec [.self], TToolbar:ForceRefresh return endp method TToolbar.ForceRefresh begin mov eax, [.self] and [eax+TToolbar._canvas_valid], 0 inherited return endp method TToolbar.SelfPaint begin pushad mov esi, [.self] cmp [esi+TToolbar._canvas_valid], 0 jne @f exec esi, TToolbar:_RenderView @@: mov ebx, [esi+TToolbar._canvas] test ebx, ebx jz .finish stdcall DrawSolidRect, [.pDstImage], [.xDst], [.yDst], [.width], [.height], [GUI.clDialogBk] stdcall BlendImage, [.pDstImage], [.xDst], [.yDst], ebx, [.xSrc], [.ySrc], [.width], [.height] .finish: popad inherited [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] return endp method TToolbar.HitTest begin pushad mov esi, [.self] mov edi, [esi+TToolbar._buttons] mov ecx, [edi+TArray.count] lea edi, [edi+TArray.array] .loop: dec ecx js .not_found mov eax, [edi+TToolButton.width] cmp [.x], eax jl .found sub [.x], eax add edi, sizeof.TToolButton jmp .loop .found: cmp [edi+TToolButton.action], 0 je .not_found mov [esp+4*regEAX], edi clc popad return .not_found: stc popad return endp method TToolbar.AddButton begin pushad mov esi, [.self] mov edx, [esi+TToolbar._buttons] mov ecx, [.action] mov ebx, [.icon] stdcall AddArrayItems, edx, 1 mov [esi+TToolbar._buttons], edx mov [esp+4*regEAX], eax test ecx, ecx cmovz edx, [GUI.tbSeparatorWidth] cmovnz edx, [esi+TToolbar._btn_height] mov [eax+TToolButton.action], ecx mov [eax+TToolButton.state], tbsNeutral mov [eax+TToolButton.width], edx mov [eax+TToolButton.icon], ebx jecxz .action_ok istype ecx, TAction jne .action_ok exec ecx, TAction:Attach, [.self] .action_ok: exec esi, TToolbar:ForceRefresh popad return endp method TToolbar.ClearState begin pushad mov esi, [.self] mov edi, [esi+TToolbar._buttons] mov ecx, [edi+TArray.count] lea edi, [edi+TArray.array] .loop: dec ecx js .finish mov [edi+TToolButton.state], tbsNeutral add edi, sizeof.TToolButton jmp .loop .finish: popad return endp method TToolbar._RenderView begin pushad mov esi, [.self] mov edi, [esi+TToolbar._buttons] mov ecx, [edi+TArray.count] jecxz .finish mov ebx, [esi+TToolbar._canvas] test ebx, ebx jnz .canvas_ok mov eax, ecx imul eax, [esi+TToolbar._btn_height] stdcall CreateImage2, eax, [esi+TToolbar._btn_height], FALSE mov [esi+TToolbar._canvas], eax mov ebx, eax .canvas_ok: lea edi, [edi + TArray.array] xor edx, edx .loop: dec ecx js .finish stdcall DrawToolbarBtn, ebx, edi, edx, 0, [esi+TToolbar._btn_height] add edx, [edi+TToolButton.width] add edi, sizeof.TToolButton jmp .loop .finish: inc [esi+TToolbar._canvas_valid] popad return endp proc IsToolButtonDisabled, .btn begin push ecx mov ecx, [.btn] jecxz .done mov ecx, [ecx+TToolButton.action] jecxz .done istype ecx, TMenu cmove ecx, [ecx+TMenu._enabled] je .done istype ecx, TAction cmove ecx, [ecx+TAction._enabled] je .done xor ecx, ecx .done: shr ecx, 1 cmc pop ecx return endp proc DrawToolbarBtn, .canvas, .pButton, .x, .y, .height .bounds TBounds begin pushad mov edi, [.pButton] mov eax, [.x] mov ecx, [.y] mov [.bounds.x], eax mov [.bounds.y], ecx mov eax, [edi+TToolButton.width] mov ecx, [.height] mov [.bounds.width], eax mov [.bounds.height], ecx mov ebx, [edi+TToolButton.state] lea eax, [.bounds] stdcall [DrawBox], [.canvas], eax, [GUI.clToolBtnBk+4*ebx], [GUI.tbBorder+4*ebx], [GUI.tbBorderWidth] cmp [edi+TToolButton.action], 0 je .draw_separator mov eax, 4 imul eax, [edi+TToolButton.width] xor edx, edx div [esi+TToolbar._btn_height] add [.bounds.x], eax add [.bounds.y], 4 mov eax, [GUI.tbPressedOfsX] mov edx, [GUI.tbPressedOfsY] cmp [edi+TToolButton.state], tbsHovered jne @f neg eax neg edx @@: cmp [edi+TToolButton.state], tbsPressed je @f cmp [edi+TToolButton.state], tbsHovered je @f xor eax, eax xor edx, edx @@: add [.bounds.x], eax add [.bounds.y], edx istype [edi+TToolButton.action], TAction je .action_icon mov ecx, [edi+TToolButton.icon] test ecx, ecx jz .finish jmp .draw_icon .action_icon: get ecx, [edi+TToolButton.action], TAction:Icon test ecx, ecx jz .finish .draw_icon: stdcall BlendImage, [.canvas], [.bounds.x], [.bounds.y], ecx, 0, 0, [ecx+TImage.width], [ecx+TImage.height] .finish: popad return .draw_separator: mov ecx, [edi+TToolButton.width] sub ecx, 2 sub [.bounds.height], ecx shr ecx, 1 add [.bounds.x], ecx add [.bounds.y], ecx mov [.bounds.width], 2 lea eax, [.bounds] stdcall DrawBoxDefault, [.canvas], eax, 0, [GUI.tbSeparatorType], 1 ; stdcall DrawSolidRect, [.canvas], ecx, [.bounds.y], 2, [.bounds.height], [GUI.clToolSeparator] ; stdcall DrawSolidRect, [.canvas], [.bounds.x], 0, [edi+TToolButton.width], 2, clAlizarin jmp .finish endp method TToolbar.Autosize begin inherited mov edx, [.self] mov edx, [edx+TToolbar._btn_height] return endp method TToolbar.EventMouseEnter begin ; exec [.self], TToolbar:SimpleSetParam, 0, TToolbar._state, tbsHovered inherited return endp method TToolbar.EventMouseLeave begin exec [.self], TToolbar:ClearState exec [.self], TToolbar:ForceRefresh inherited return endp method TToolbar.EventMouseMove begin test [.kbdState], maskBtnLeft jnz .exit exec [.self], TToolbar:ClearState exec [.self], TToolbar:HitTest, [.x], [.y] jc .finish stdcall IsToolButtonDisabled, eax jc .finish mov [eax+TToolButton.state], tbsHovered .finish: exec [.self], TToolbar:ForceRefresh .exit: inherited [.x], [.y], [.kbdState] return endp method TToolbar.EventButtonPress begin exec [.self], TToolbar:ClearState exec [.self], TToolbar:HitTest, [.x], [.y] jc .finish mov ecx, [eax+TToolButton.action] jecxz .finish stdcall IsToolButtonDisabled, eax jc .finish mov [eax+TToolButton.state], tbsPressed stdcall SetMouseCapture, [.self] .finish: exec [.self], TToolbar:ForceRefresh return endp method TToolbar.EventButtonRelease begin pushad stdcall SetMouseCapture, 0 mov esi, [.self] mov edi, [esi+TToolbar._buttons] mov ecx, [edi+TArray.count] lea edi, [edi+TArray.array] xor edx, edx .loop: dec ecx js .finish cmp [edi+TToolButton.state], tbsPressed je .end_scan add edx, [edi+TToolButton.width] add edi, sizeof.TToolButton jmp .loop .end_scan: exec esi, TToolbar:HitTest, [.x], [.y] jc .finish cmp eax, edi jne .finish mov [edi+TToolButton.state], tbsHovered exec esi, TToolbar:ForceRefresh istype [edi+TToolButton.action], TAction jne .maybe_menu exec [edi+TToolButton.action], TAction:Execute, esi jmp .finish .maybe_menu: istype [edi+TToolButton.action], TMenu jne .finish exec [edi+TToolButton.action], TMenu:Show, esi, edx, [esi+TToolbar._btn_height] .finish: popad return endp endmodule |
Added freshlib/gui/TTreeView.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TTreeView object class ; ; Target OS: Any ; ; Dependencies: ; Notes: ;_________________________________________________________________________________________ module "TreeView library" ; tree-view item state flags. tvisExpanded = 1 tvisSelected = 2 ; iterate visible items flags iifViewport = 1 ; iterate only items that are in the viewport of the control. ; if not set, the items that are "visible" because of the expanded parent items ; will cause callback call as well. ; TTreeView:HitTest return flags tvhtNone = 0 tvhtIndentation = 1 tvhtExpandIcon = 2 tvhtItemIcon = 3 tvhtItemText = 4 struct TTVItem . TTItem .caption dd ? .state dd ? .imgNormal dd ? ; TImage .imgSelected dd ? ; TImage .xwidth dd ? .UserData0 dd ? ; 6 dword for user data. .UserData1 dd ? .UserData2 dd ? .UserData3 dd ? .UserData4 dd ? .UserData5 dd ? .shift = 6 ends object TTreeView, TScrollable ._canvas dd ? ._canvas_valid dd ? ._root dd ? ; The first root TTVItem element. Its siblings stay on root. ._index dd ? ; TArray with dword index to the displayable items of ._items array. ._focused dd ? ._line_height dd ? ._text_offset dd ? ._margin_top dd ? ._margin_left dd ? ._max_width dd ? ; 0 means unknown ._on_focused_change dd ? ._free_item_proc dd ? param .root, ._root, .SetRoot param .OnFocusItem, ._on_focused_change, ._on_focused_change param .FocusedItem, ._focused, .SetFocused param .FreeItemProc, ._free_item_proc, ._free_item_proc method .SetRoot, .value method .SetFocused, .value method .Create, .parent method .Destroy method .ClearSelection, .mask method .IterateVisibleItems, .start_item, .flags, .callback, .user method .HitTest, .x, .y method .ScrollToBottom method .ContentChanged method .__RebuildIndex method .__RebuildWidths method .ForceRefresh method .__UpdateImages method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height ; Paints itself on the caller provided TImage. method .__RenderTree method .UpdateScrollBar method .Resize, .newWidth, .newHeight method .EventKeyPress, .utf8, .scancode, .kbdState method .EventButtonPress, .button, .kbdState, .x, .y method .EventButtonDoubleClick, .button, .kbdState, .x, .y method .EventScroll, .direction, .command, .value method .EventFocusIn method .EventFocusOut method .SearchOrCreate, .MatchProc, .InitProc, .pParent, .UserParam ; searches the children of the [.iParent] element and returns the first matched (according to the MatchProc) ; If none match adds new element and returns its index (in EAX) and pointer (in EDX) endobj interface TTreeView.IterateCallback, .pTreeView, .pItem, .yItem, .user interface TTreeView.OnFocusItem, .pTreeView, .pFocused, .pUnfocused interface TTreeView.ItemProcess, .pItem, .user_data proc TTreeView.FreeItem, .pItem begin push eax mov eax, [.pItem] stdcall StrDel, [eax+TTVItem.caption] stdcall FreeMem, eax pop eax return endp method TTreeView.Create ; .parent begin inherited [.parent] pushad mov esi, [.self] mov [esi+TTreeView._margin_top], 4 mov [esi+TTreeView._margin_left], 4 stdcall GetFontMetrics, [GUI.DefaultFont] add eax, 4 add ebx, 2 mov [esi+TTreeView._line_height], eax mov [esi+TTreeView._text_offset], ebx set esi, TTreeView:WantFocus, TRUE mov [esi+TTreeView._free_item_proc], TTreeView.FreeItem popad return endp method TTreeView.Destroy begin push ebx mov ebx, [.self] set ebx, TTreeView:Visible, FALSE ; in order to not try to update the view. stdcall FreeMem, [ebx+TTreeView._index] stdcall TreeTearAndFreeAll, [ebx+TTreeView._root], [ebx+TTreeView._free_item_proc] pop ebx inherited return endp method TTreeView.ContentChanged begin push esi mov esi, [.self] exec esi, TTreeView:__RebuildWidths exec esi, TTreeView:__RebuildIndex exec esi, TTreeView:UpdateScrollBar and [esi+TTreeView._canvas_valid], 0 exec esi, TTreeView:RectChanged2, 0 pop esi return endp method TTreeView.UpdateScrollBar begin pushad mov esi, [.self] mov ecx, [esi+TWindow._width] mov edx, [esi+TWindow._height] mov edi, [GUI.boxBorderWidth] mov ebx, edx sub ecx, [GUI.scrollWidth] ; width - scrollWidth sub ebx, [GUI.scrollWidth] ; height - scrollWidth sub ecx, edi ; width - boxBorderWidth sub ebx, edi ; height - boxBorderWidth shl edi, 1 sub edx, edi ; total client height - borders. js .finish set esi, TTreeView:PageX, ecx mov eax, [esi+TTreeView._max_width] sub eax, ecx jns @f xor eax, eax @@: cmp eax, [esi + TTreeView._scrXY.pos] jge .set_max_x set esi, TTreeView:PosX, eax .set_max_x: set esi, TTreeView:MaxX, eax mov ecx, [esi+TTreeView._line_height] mov eax, edx cdq div ecx test edx, edx jz @f inc eax @@: set esi, TTreeView:PageY, eax mov ebx, [esi+TTreeView._index] test ebx, ebx jz .finish mov ebx, [ebx+TArray.count] sub ebx, eax inc ebx jns @f xor ebx, ebx @@: cmp ebx, [esi+TTreeView._scrXY.pos + 4] jge .set_start_y set esi, TTreeView:PosY, ebx .set_start_y: set esi, TTreeView:MaxY, ebx .finish: popad return endp method TTreeView.ScrollToBottom begin push eax ebx mov ebx, [.self] mov eax, [ebx+TTreeView._index] mov eax, [eax+TArray.count] sub eax, [ebx+TTreeView._scrXY.page+4] jbe .finish inc eax set ebx, TTreeView:PosY, eax .finish: pop ebx eax return endp method TTreeView.ForceRefresh begin mov eax, [.self] and [eax+TTreeView._canvas_valid], 0 inherited return endp method TTreeView.SelfPaint ; .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height begin pushad mov esi, [.self] cmp [esi+TTreeView._canvas_valid], 0 jne @f exec esi, TTreeView:__RenderTree @@: mov ebx, [esi+TTreeView._canvas] test ebx, ebx jz .finish stdcall BlendImage, [.pDstImage], [.xDst], [.yDst], ebx, [.xSrc], [.ySrc], [.width], [.height] .finish: popad inherited [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] return endp method TTreeView.__UpdateImages begin pushad mov esi, [.self] mov ebx, [esi+TTreeView._visible] mov edi, [esi+TTreeView._canvas] mov ecx, [esi+TTreeView._width] mov edx, [esi+TTreeView._height] test ebx, ebx jz .destroy test edi, edi jz .create_new ; check the size cmp ecx, [edi+TImage.width] ja .destroy cmp edx, [edi+TImage.height] jbe .setwrap .destroy: stdcall DestroyImage, edi ; canvas xor eax, eax mov [esi+TTreeView._canvas], eax test ebx, ebx jz .exit .create_new: ; new size - make it a little bit bigger. lea eax, [ecx+256] lea ebx, [edx+256] stdcall CreateImage2, eax, ebx, FALSE mov [esi+TTreeView._canvas], eax mov edi, eax .setwrap: mov [edi+TImage.wrapW], ecx mov [edi+TImage.wrapH], edx .exit: and [esi+TTreeView._canvas_valid], 0 popad inherited return endp method TTreeView.Resize begin inherited [.newWidth], [.newHeight] exec [.self], TTreeView:UpdateScrollBar return endp method TTreeView.__RebuildIndex begin pushad mov esi, [.self] xor ebx, ebx ; max_width stdcall CreateArray, 4 mov edx, eax mov edi, [esi+TTreeView._root] test edi, edi jz .finish .loop: stdcall AddArrayItems, edx, 1 mov [eax], edi cmp ebx, [edi+TTVItem.xwidth] cmovl ebx, [edi+TTVItem.xwidth] test [edi+TTVItem.state], tvisExpanded jz .next mov eax, [edi+TTVItem.firstChild] test eax, eax cmovnz edi, eax jnz .loop .next: mov eax, [edi+TTVItem.next] test eax, eax cmovnz edi, eax jnz .loop mov eax, [edi+TTVItem.parent] test eax, eax cmovnz edi, eax jnz .next .finish: xchg edx, [esi+TTreeView._index] stdcall FreeMem, edx mov [esi+TTreeView._max_width], ebx popad return endp method TTreeView.__RebuildWidths begin pushad mov esi, [.self] mov ebx, [esi+TTreeView._line_height] add ebx, [esi+TTreeView._margin_left] mov edi, [esi+TTreeView._root] test edi, edi jz .finish .loop_in: add ebx, [esi+TTreeView._line_height] .loop: ; cmp [edi+TTVItem.xwidth], 0 ; ; jne .next ; compute xwidth stdcall StrPtr, [edi+TTVItem.caption] stdcall GetTextBounds, eax, [eax+string.len], [GUI.DefaultFont] add eax, ebx mov [edi+TTVItem.xwidth], eax ; go to the children .next: mov eax, [edi+TTVItem.firstChild] test eax, eax cmovnz edi, eax jnz .loop_in ; go to next sibling. .nexts: mov eax, [edi+TTVItem.next] test eax, eax cmovnz edi, eax jnz .loop ; go to the parent. sub ebx, [esi+TTreeView._line_height] mov eax, [edi+TTVItem.parent] test eax, eax cmovnz edi, eax jnz .nexts .finish: popad return endp method TTreeView.__RenderTree .bounds TBounds begin pushad mov esi, [.self] ; clear the background xor eax, eax mov [.bounds.x], eax mov [.bounds.y], eax mov ecx, [esi+TTreeView._width] mov edx, [esi+TTreeView._height] mov [.bounds.width], ecx mov [.bounds.height], edx lea eax, [.bounds] stdcall [DrawBox], [esi+TTreeView._canvas], eax, [GUI.clTreeViewBack], bxNone, 0 ; check the index mov edi, [esi+TTreeView._index] test edi, edi jz .end_paint get ecx, esi, TTreeView:PosY cmp ecx, [edi+TArray.count] jae .end_paint mov edi, [edi + TArray.array + 4*ecx] ; The first TTVItem mov ebx, -2 ; current tree level -1 (at .loop_in it is incremented and becomes the exact value). mov eax, edi .lvl: inc ebx mov eax, [eax+TTVItem.parent] test eax, eax jnz .lvl mov edx, [esi+TTreeView._margin_top] .loop_in: inc ebx .loop: stdcall TTreeView.__PaintOneItem, esi, edi, ebx, edx add edx, [esi+TTreeView._line_height] cmp edx, [esi+TTreeView._height] jae .end_paint test [edi+TTVItem.state], tvisExpanded jz .nexts .next: mov eax, [edi+TTVItem.firstChild] test eax, eax cmovnz edi, eax jnz .loop_in .nexts: mov eax, [edi+TTVItem.next] test eax, eax cmovnz edi, eax jnz .loop dec ebx mov eax, [edi+TTVItem.parent] test eax, eax cmovnz edi, eax jnz .nexts .end_paint: lea eax, [.bounds] mov ecx, [GUI.tvBorder] or ecx, bxNoFill stdcall [DrawBox], [esi+TTreeView._canvas], eax, [GUI.clTreeViewBack], ecx, [GUI.boxBorderWidth] inc [esi+TTreeView._canvas_valid] popad return endp proc TTreeView.__PaintOneItem, .pTreeView, .pItem, .Level, .y .back dd ? .text dd ? begin pushad mov esi, [.pTreeView] mov edi, [.pItem] mov ecx, [.Level] imul ecx, [esi+TTreeView._line_height] add ecx, [esi+TTreeView._margin_left] sub ecx, [esi+TTreeView._scrXY.pos] ; X coordinate of the text! ; choose colors mov eax, [GUI.clTreeViewText] mov ebx, [GUI.clTreeViewBack] test [edi+TTVItem.state], tvisSelected jz .sel_ok mov eax, [GUI.clTreeSelectedTxt] mov ebx, [GUI.clTreeSelected] .sel_ok: cmp edi, [esi+TTreeView._focused] jne .focus_ok mov eax, [GUI.clTreeFocusedTxt] mov ebx, [GUI.clTreeFocused] cmp esi, [__FocusedWindow] je .focus_ok mov eax, [GUI.clTreeFocused2Txt] mov ebx, [GUI.clTreeFocused2] .focus_ok: mov [.text], eax mov [.back], ebx mov edx, [.y] ; draw lines push ecx edx edi mov eax, [esi+TTreeView._line_height] sar eax, 1 add ecx, eax lea ebx, [edx+eax] ; cmp [edi+TTVItem.firstChild], 0 ; jne .skip_line stdcall BlendSolidRect, [esi+TTreeView._canvas], ecx, ebx, eax, 1, [GUI.clTreeViewLines] mov ebx, eax cmp [edi+TTVItem.next], 0 cmovnz ebx, [esi+TTreeView._line_height] .line_loop: stdcall BlendSolidRect, [esi+TTreeView._canvas], ecx, edx, 1, ebx, [GUI.clTreeViewLines] .skip_line: mov ebx, [esi+TTreeView._line_height] sub ecx, ebx js .end_lines mov edi, [edi+TTVItem.parent] test edi, edi jz .end_lines cmp [edi+TTVItem.next], 0 jne .line_loop jmp .skip_line .end_lines: pop edi edx ecx ; draw state icon cmp [edi+TTVItem.firstChild], 0 je .state_icon_ok ; which icon mov ebx, [edi+TTVItem.state] and ebx, tvisExpanded mov ebx, [GUI.tvIcons+8*ebx] ; TImage with the expand/collapse icon push ecx edx ; center the icon in X mov eax, [esi+TTreeView._line_height] sub eax, [ebx+TImage.width] sar eax, 1 adc ecx, eax ; center the icon in Y mov eax, [esi+TTreeView._line_height] sub eax, [ebx+TImage.height] sar eax, 1 adc edx, eax stdcall BlendImage, [esi+TTreeView._canvas], ecx, edx, ebx, 0, 0, [ebx+TImage.width], [ebx+TImage.height] pop edx ecx .state_icon_ok: ; draw item icon add ecx, [esi+TTreeView._line_height] mov ebx, [edi+TTVItem.imgSelected] test ebx, ebx jz .icon_normal test [edi+TTVItem.state], tvisSelected jnz .draw_icon .icon_normal: mov ebx, [edi+TTVItem.imgNormal] test ebx, ebx jz .icon_ok .draw_icon: push ecx edx ; center the icon mov eax, [esi+TTreeView._line_height] sub eax, [ebx+TImage.width] sar eax, 1 add ecx, eax mov eax, [esi+TTreeView._line_height] sub eax, [ebx+TImage.height] sar eax, 1 add edx, eax stdcall BlendImage, [esi+TTreeView._canvas], ecx, edx, ebx, 0, 0, [ebx+TImage.width], [ebx+TImage.height] pop edx ecx add ecx, [esi+TTreeView._line_height] .icon_ok: stdcall StrPtr, [edi+TTVItem.caption] jc .finish test eax, eax jz .finish push edx stdcall GetTextBounds, eax, [eax+string.len], [GUI.DefaultFont] pop edx add eax, 4 stdcall BlendSolidRect, [esi+TTreeView._canvas], ecx, edx, eax, [esi+TTreeView._line_height], [.back] add edx, [esi+TTreeView._text_offset] add ecx, 2 stdcall StrPtr, [edi+TTVItem.caption] stdcall DrawString, [esi+TTreeView._canvas], eax, [eax+string.len], ecx, edx, [GUI.DefaultFont], [.text] .finish: popad return endp method TTreeView.EventKeyPress ;, .utf8, .scancode, .kbdState begin inherited [.utf8], [.scancode], [.kbdState] jc .exit pushad mov esi, [.self] mov edi, [esi+TTreeView._index] test edi, edi jz .not_processed mov eax, [.utf8] test eax, eax jz .no_char ; search the treeview??? .not_processed: clc popad .exit: return .no_char: mov eax, [.scancode] test [.kbdState], maskCtrl jnz .move_nodes cmp eax, keyUpNumpad je .up cmp eax, keyUp je .up cmp eax, keyDownNumpad je .down cmp eax, keyDown je .down cmp eax, keyPgUpNumpad je .pgup cmp eax, keyPgUp je .pgup cmp eax, keyPgDnNumpad je .pgdn cmp eax, keyPgDown je .pgdn cmp eax, keyHomeNumpad je .home cmp eax, keyHome je .home cmp eax, keyEndNumpad je .end cmp eax, keyEnd je .end cmp eax, keyLeftNumpad je .left cmp eax, keyLeft je .left cmp eax, keyRightNumpad je .right cmp eax, keyRight je .right jmp .not_processed .move_nodes: cmp eax, keyUpNumpad je .move_node_up cmp eax, keyUp je .move_node_up cmp eax, keyDownNumpad je .move_node_down cmp eax, keyDown je .move_node_down jmp .not_processed .move_node_up: mov edx, [esi+TTreeView._focused] test edx, edx jz .processed cmp edx, [esi+TTreeView._root] je .processed stdcall ListIndexOf, edi, edx jc .processed dec eax js .processed mov ecx, [edi + TArray.array + 4*eax] test ecx, ecx jz .processed stdcall TreeTearItem, edx stdcall TreeInsBefore, edx, ecx cmp ecx, [esi+TTreeView._root] jne .refresh_after_move mov [esi+TTreeView._root], edx .refresh_after_move: exec esi, TTreeView:ContentChanged jmp .processed .move_node_down: mov edx, [esi+TTreeView._focused] test edx, edx jz .processed stdcall ListIndexOf, edi, edx jc .processed inc eax cmp eax, [edi+TArray.count] jae .processed mov ecx, [edi + TArray.array + 4*eax] test ecx, ecx jz .processed stdcall TreeTearItem, edx stdcall TreeInsAfter, edx, ecx cmp edx, [esi+TTreeView._root] jne .refresh_after_move mov [esi+TTreeView._root], ecx jmp .refresh_after_move ;------------------------------------------------------------------ .left: mov eax, [esi+TTreeView._focused] cmp [eax+TTVItem.firstChild], 0 je .goto_parent test [eax+TTVItem.state], tvisExpanded jnz .collapse .goto_parent: mov eax, [eax+TTVItem.parent] test eax, eax jz .exit_processed push eax stdcall ListIndexOf, edi, eax mov ebx, eax pop eax jmp .set_focused .collapse: and [eax+TTVItem.state], not tvisExpanded and [esi+TTreeView._canvas_valid], 0 exec esi, TTreeView:__RebuildIndex exec esi, TTreeView:UpdateScrollBar jmp .processed .right: mov eax, [esi+TTreeView._focused] cmp [eax+TTVItem.firstChild], 0 je .down test [eax+TTVItem.state], tvisExpanded jnz .down ;expand call .prev_selection or [eax+TTVItem.state], tvisExpanded and [esi+TTreeView._canvas_valid], 0 exec esi, TTreeView:__RebuildIndex exec esi, TTreeView:UpdateScrollBar jmp .processed .home: mov edx, [edi+TArray.count] jmp .moveup .up: mov edx, 1 jmp .moveup .pgup: get edx, esi, TTreeView:PageY dec edx .moveup: mov eax, [esi+TTreeView._focused] test eax, eax jz .focus_the_first stdcall ListIndexOf, edi, eax jc .focus_the_first mov ebx, eax sub ebx, edx jns .index_ok .focus_the_first: xor ebx, ebx .index_ok: cmp ebx, [edi+TArray.count] jae .processed mov eax, [edi + TArray.array + 4*ebx] test eax, eax jz .processed .set_focused: call .prev_selection set esi, TTreeView:FocusedItem, eax mov eax, [esi+TTreeView._scrXY.pos + 4] add eax, [esi+TTreeView._scrXY.page + 4] cmp ebx, eax jae .scroll_y cmp ebx, [esi+TTreeView._scrXY.pos + 4] jae .processed .scroll_y: set esi, TTreeView:PosY, ebx .processed: exec esi, TTreeView:RectChanged2, 0 .exit_processed: stc popad return .end: mov edx, [edi+TArray.count] jmp .move_down .down: mov edx, 1 jmp .move_down .pgdn: get edx, esi, TTreeView:PageY dec edx .move_down: mov eax, [esi+TTreeView._focused] test eax, eax jz .focus_the_first stdcall ListIndexOf, edi, eax jc .focus_the_first mov ebx, eax add ebx, edx jc .processed cmp ebx, [edi+TArray.count] jb .posok .focus_last: mov ebx, [edi+TArray.count] dec ebx js .processed .posok: call .prev_selection mov eax, [edi + TArray.array + 4*ebx] test eax, eax jz .processed set esi, TTreeView:FocusedItem, eax get ecx, esi, TTreeView:PageY jecxz .processed sub ecx, 2 sub ebx, ecx cmp ebx, [esi+TTreeView._scrXY.pos + 4] jle .processed set esi, TTreeView:PosY, ebx jmp .processed ; local procedure .prev_selection: push eax test [.kbdState], maskShift jnz .sel_up_ok exec esi, TTreeView:ClearSelection, not tvisSelected .sel_up_ok: pop eax retn endp method TTreeView.EventButtonPress ;, .button, .kbdState, .x, .y begin inherited [.button], [.kbdState], [.x], [.y] jc .processed pushad mov esi, [.self] exec esi, TTreeView:HitTest, [.x], [.y] cmp eax, tvhtNone je .finish cmp eax, tvhtExpandIcon je .expand_collapse test [.kbdState], maskShift or maskCtrl jnz @f exec esi, TTreeView:ClearSelection, not tvisSelected @@: set esi, TTreeView:FocusedItem, edx jmp .finish .expand_collapse: xor [edx+TTVItem.state], tvisExpanded and [esi+TTreeView._canvas_valid], 0 exec esi, TTreeView:__RebuildIndex exec esi, TTreeView:UpdateScrollBar .finish: exec [.self], TWindow:RectChanged2, 0 popad .processed: return endp method TTreeView.EventButtonDoubleClick ;, .button, .kbdState, .x, .y begin pushad mov esi, [.self] exec esi, TTreeView:HitTest, [.x], [.y] cmp eax, tvhtNone je .processed cmp eax, tvhtExpandIcon je .expand_collapse cmp eax, tvhtItemIcon je .expand_collapse cmp eax, tvhtItemText jne .processed .expand_collapse: xor [edx+TTVItem.state], tvisExpanded exec [.self], TTreeView:ContentChanged popad .processed: inherited [.button], [.kbdState], [.x], [.y] return endp ; method .IterateVisibleItems, .start_item, .flags, .callback, .user method TTreeView.IterateVisibleItems .end dd ? .min_item dd ? .maxy dd ? begin pushad ; mov esi, [.self] ; ; mov eax, [esi+TTreeView._height] ; mov [.maxy], eax ; ; mov eax, [esi+TTreeView._items] ; mov eax, [eax+TArray.count] ; ; mov ecx, [.start_item] ; get edx, esi, TTreeView:PosY ; ; shl eax, TTVItem.shift ; shl ecx, TTVItem.shift ; shl edx, TTVItem.shift ; ; add eax, [esi+TTreeView._items] ; add ecx, [esi+TTreeView._items] ; add edx, [esi+TTreeView._items] ; ; lea eax, [eax+TArray.array] ; lea ecx, [ecx+TArray.array] ; lea edx, [edx+TArray.array] ; ; mov [.end], eax ; mov [.min_item], edx ; ; xor edx, edx ; dec edx ; current level = $ffffffff - unsigned cmp ; ; xor edi, edi ; current Y coordinate. ; add edi, [esi+TTreeView._margin_top] ; top margin. ; ;.item_loop: ; cmp ecx, [.end] ; jae .end_items ; ;; cmp [ecx+TTVItem.level], edx ; ja .next_item ; je .equal ; ;; below ;; mov edx, [ecx+TTVItem.level] ; ;.equal: ; test [ecx+TTVItem.state], tvisExpanded ; jz .visible ; ; inc edx ; ;.visible: ; test [.flags], iifViewport ; jz .yes ; ; cmp ecx, [.min_item] ; jb .next_item ; ; cmp edi, [.maxy] ; ja .end_items ; ;.yes: ; pushad ; stdcall [.callback], esi, ecx, edi, [.user] ; popad ; jc .found ; ; add edi, [esi+TTreeView._line_height] ; ;.next_item: ; add ecx, sizeof.TTVItem ; jmp .item_loop ; ;.end_items: ; clc ; popad ; return ; ;.found: ; mov [esp+regEAX*4], ecx popad return endp ; returns: ; eax - hit test flag tvhtXXXXXXXXX ; edx - TTVItem (if eax in [tvhtExpandIcon, tvhtItemIcon, tvhtItemText) ; ecx - the index of the TTVItem in the _index array. method TTreeView.HitTest begin pushad mov esi, [.self] mov eax, [.y] sub eax, [esi+TTreeView._margin_top] mov ecx, [esi+TTreeView._line_height] xor edx, edx div [esi+TTreeView._line_height] mov ecx, eax add ecx, [esi+TTreeView._scrXY.pos + 4] ; index mov ebx, [esi+TTreeView._index] test ebx, ebx jz .not_found cmp ecx, [ebx+TArray.count] jae .not_found mov edi, [ebx+4*ecx+TArray.array] ; pointer to TTVItem or edx, -1 mov eax, edi .lvl_loop: inc edx mov eax, [eax+TTVItem.parent] test eax, eax jnz .lvl_loop imul edx, [esi+TTreeView._line_height] add edx, [esi+TTreeView._margin_left] mov eax, tvhtIndentation cmp [.x], edx jb .finish add edx, [esi+TTreeView._line_height] mov eax, tvhtExpandIcon cmp [.x], edx jb .finish add edx, [esi+TTreeView._line_height] mov eax, tvhtItemIcon cmp [.x], edx jb .finish mov eax, tvhtItemText .finish: mov [esp+regEDX*4], edi mov [esp+regEAX*4], eax mov [esp+regECX*4], ecx popad return .not_found: xor edi, edi mov eax, tvhtNone jmp .finish endp method TTreeView.ClearSelection begin pushad mov esi, [.self] mov edi, [esi+TTreeView._root] test edi, edi jz .finish mov ebx, [.mask] .loop: and [edi+TTVItem.state], ebx mov eax, [edi+TTVItem.firstChild] test eax, eax cmovnz edi, eax jnz .loop .next: mov eax, [edi+TTVItem.next] test eax, eax cmovnz edi, eax jnz .loop mov eax, [edi+TTVItem.parent] test eax, eax cmovnz edi, eax jnz .next .finish: and [esi+TTreeView._canvas_valid], 0 popad return endp method TTreeView.SetRoot ; , .value begin pushad mov esi, [.self] mov edx, [.value] xchg edx, [esi+TTreeView._root] stdcall TreeTearAndFreeAll, edx, [esi+TTreeView._free_item_proc] xor eax, eax xchg eax, [esi+TTreeView._focused] exec esi, TTreeView:ContentChanged popad return endp method TTreeView.SetFocused ;, .value begin pushad mov esi, [.self] mov ecx, [.value] test ecx, ecx jz .selected_ok or [ecx+TTVItem.state], tvisSelected .selected_ok: xchg ecx, [esi+TTreeView._focused] cmp ecx, [esi+TTreeView._focused] je .finish mov eax, [esi+TTreeView._on_focused_change] test eax, eax jz .finish push esi stdcall eax, esi, [esi+TTreeView._focused], ecx ; interface TTreeView.OnFocusItem2, .pTreeView, .pFocused, .pUnfocused pop esi .finish: and [esi+TTreeView._canvas_valid], 0 exec esi, TWindow:RectChanged2, 0 popad return endp ; method .SearchOrCreate, .MatchProc, .InitProc, .pParent, .UserParam method TTreeView.SearchOrCreate begin pushad mov esi, [.self] mov edx, [.pParent] test edx, edx cmovz edx, [esi+TTreeView._root] jz @f mov edx, [edx+TTVItem.firstChild] @@: mov ecx, edx ; previous item .search_loop: test edx, edx jz .not_found pushad stdcall [.MatchProc], edx, [.UserParam] popad jc .found mov ecx, edx mov edx, [edx+TTVItem.next] jmp .search_loop .found: mov [esp+4*regEAX], edx stc popad return .not_found: stdcall GetMem, sizeof.TTVItem mov [esp+4*regEAX], eax test ecx, ecx jnz .add_after cmp [.pParent], ecx ; ecx == 0 here! jne .add_child mov ecx, [esi+TTreeView._root] test ecx, ecx jnz .append_to_root ; it is the first root element! mov [esi+TTreeView._root], eax jmp .do_init .append_to_root: cmp [ecx+TTVItem.next], 0 cmovne ecx, [ecx+TTVItem.next] jne .append_to_root jmp .add_after .add_child: stdcall TreeAppendChild, eax, [.pParent] jmp .do_init .add_after: stdcall TreeInsAfter, eax, ecx .do_init: pushad stdcall [.InitProc], eax, [.UserParam] popad clc popad return endp method TTreeView.EventScroll ; , .direction, .command, .value begin inherited [.direction], [.command], [.value] mov eax, [.self] and [eax+TTreeView._canvas_valid], 0 exec eax, TTreeView:RectChanged2, 0 return endp method TTreeView.EventFocusIn begin push eax mov eax, [.self] and [eax+TTreeView._canvas_valid], 0 exec eax, TTreeView:RectChanged2, 0 pop eax inherited return endp method TTreeView.EventFocusOut begin push eax mov eax, [.self] and [eax+TTreeView._canvas_valid], 0 exec eax, TTreeView:RectChanged2, 0 pop eax inherited return endp endmodule |
Added freshlib/gui/TWindow.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TWindow object class ; ; Target OS: Any ; ; Dependencies: ; ; Notes: TWindow is the common ancestor of all visible on the screen controls. ; This file contains only OS independent part of the library and includes ; the OS dependent files. ;_________________________________________________________________________________________ module "TWindow library" ; Interfaces for the OS dependent procedures ; NOTICE: Some of them are not needed, so can be removed. ;----------------------------------------------------------------------------------------- ; Creates OS window, according to the content of TWindow structure [.pWindow] ; ; Notice, that this OS windows are created ONLY for the visible top level windows. ; ;----------------------------------------------------------------------------------------- interface _CreateWindow, .pWindow ;----------------------------------------------------------------------------------------- ; Destroy the OS window. The OS windows are actually destroyed when invisible and then ; recreated when needed. ;----------------------------------------------------------------------------------------- interface _DestroyWindow, .hwnd interface _RefreshWindowRect, .hwnd, .x, .y, .width, .height interface _SetWindowTextUtf8, .hwnd, .hString interface _SetModalTowards, .hwnd, .hwndParent interface _FinalizeModal, .hwnd, .hwndParent ; Moves the window to the position from the TWindow._x, TWindow._y fields. interface _MoveWindow, .pWindow interface _ResizeWindow, .pWindow interface _SetFocus, .hwnd interface _SetWindowState, .pWindow ; returns in EAX:EBX X and Y size of the screen. interface _GetScreenSize ; probably not needed, but will keep them for some time. ;interface _ClientToScreen, .hwnd, .x, .y ;interface _GetWindowStruct, .hwin ;interface _SetWindowStruct, .hwin, .value ;interface _ShowWindow, .hwnd, .flag ;interface _SetWindowBorder, .hwnd, .brdType ;interface _GetWindowBounds, .hwnd, .pBounds ;interface _SetWindowBounds, .hwnd, .pBounds ;interface _CreateNullWindow ;interface _GetParent, .hwnd ;interface _GetChildren, .hwnd ;interface _GetVisible, .hwnd ;interface _AddChild, .hwnd, .child ;interface _GetWindowTextUtf8, .hwnd, .ptrUtf8 ;interface _EnableWindow, .hwnd, .flag ;interface _SetTransientTowards, .hwnd, .hwndParent include '%TargetOS%/windows.asm' ; Border kind of window. borderNone = 0 borderFull = 1 borderModal = 2 borderToolbox = 3 ; Window behavior flags for the param .Behavior / ._behavior wbUseTabKeys = 1 ; if set, the Tab/Shift+Tab will not work for passing focus to the next/previous window. wbUseEnterKey = 2 ; if set, Enter key will not be used for submitting forms. wbUseEscapeKey = 4 ; if set, Escape key will not be used for canceling forms. wstMaximizedVert = 1 wstMaximizedHorz = 2 wstMinimized = 4 ; SelfPaint operations object TWindow, TObject .handle dd ? ; it is handle to the system provided window. if TargetOS eq Linux .sync_counter dd ? .sync_valueLo dd ? .sync_valueHi dd ? .context dd ? end if ._x dd ? ._y dd ? ._width dd ? ._height dd ? ._border dd ? ; has meaning only for the top level windows! ._cursor dd ? ; mouse cursor. ._winicons dd ? ; TArray of pointers to TImage. How these images will be used is OS dependent. ._caption dd ? ; string handle with window caption. ._enabled dd ? ._visible dd ? ._window_state dd ? ; has meaning only for top-level windows. Constants wstXXXXXXX ._font dd ? ._behavior dd ? .__self_focus dd ? .__focused_child dd ? ; what child of the window is last focused. .__action dd ? .__menu dd ? ; window screen image ._screen dd ? ; TImage containing the image of the window with all children composited. ._rect_list dd ? ; array of rectangles containing all the changed rectangles of the window. ._user_data dd ? if defined options.Threads & options.Threads ._rect_mx TMutex end if ; window user event handlers ._OnSelfPaint dd ? ._OnScroll dd ? ._OnKeyPressed dd ? ._OnKeyReleased dd ? ._OnFocusIn dd ? ._OnFocusOut dd ? ; user mouse events handlers ._OnMouseMove dd ? ._OnButtonPressed dd ? ._OnButtonReleased dd ? ._OnDoubleClick dd ? ; parameters param .OSWindow, .GetOSWindow, NONE ; the first window down the tree, that has window handle. param .Action, .__action, .SetAction param .Menu, .__menu, .__menu param .x, ._x, .SetX param .y, ._y, .SetY param .width, ._width, .SetWidth param .height, ._height, .SetHeight param .SplitCell, NONE, .SetSplitCell param .border, ._border, ._border param .WinIcons, ._winicons, .AddWinIcon param .Cursor, ._cursor, ._cursor param .Font, ._font, ._font param .Visible, ._visible, .SetVisible param .Behavior, ._behavior, ._behavior param .WindowState, ._window_state, .SetWindowState param .OnScreen, .GetOnScreen, NONE param .Caption, .GetCaption, .SetCaption param .Enabled, .GetEnabled, .SetEnabled param .GlobalEnabled, .GetGlobalEnabled, NONE param .WantFocus, .GetWantFocus, .__self_focus param .Screen, .GetImgScreen, NONE ; Event handlers param .OnFocusIn, ._OnFocusIn, ._OnFocusIn param .OnFocusOut, ._OnFocusOut, ._OnFocusOut param .OnSelfPaint, ._OnSelfPaint, .SetSelfPaint param .OnScroll, ._OnScroll, ._OnScroll param .OnKeyPressed, ._OnKeyPressed, ._OnKeyPressed param .OnKeyReleased, ._OnKeyReleased, ._OnKeyReleased param .OnMouseMove, ._OnMouseMove, ._OnMouseMove param .OnButtonPressed, ._OnButtonPressed, ._OnButtonPressed param .OnButtonReleased, ._OnButtonReleased, ._OnButtonReleased param .OnDoubleClick, ._OnDoubleClick, ._OnDoubleClick param .UserData, ._user_data, ._user_data ; private methods method .__UpdateHandle method .__UpdateImages method .__UpdateFocus ; parameter methods method .SetParent, .value method .SetAction, .value abstract .UpdateAction, .action ; to be defined only for controls that can be attached to TAction method .SetX, .value method .SetY, .value method .SetWidth, .value method .SetHeight, .value method .Move, .newX, .newY method .Resize, .newWidth, .newHeight method .ExtMove, .newX, .newY method .ExtResize, .newWidth, .newHeight method .GetOnScreen method .GetEnabled method .SetEnabled, .value method .GetGlobalEnabled method .GetCaption method .SetCaption, .value method .SetVisible, .value method .SetWindowState, .value method .SetSelfPaint, .value method .SetSplitCell, .value method .AddWinIcon, .value method .GetWantFocus method .GetImgScreen method .GetOSWindow ; other methods method .Create, .parent method .Destroy method .RemoveChild, .objchild ; Parent/child methods definitions of abstract methods, inherited from TObject method .ChildByXY, .x, .y, .onlyenabled method .RectChanged2, .pRect ; invalidates the rectangle, so all children windows in this rectangle are ; to be redrawn. Called from the children window on any visual changes. ; notice, that if the child changed the size ot position, it needs special ; processing of the rectangle. Actually the changed rectangle is the ; bounding rectangle of the new and old rectangles. method .RectChangedXY2, .x, .y, .width, .height ; method .RectChangedList, .pRectList method .ForceRefresh ; Use this method only for serious refresh tasks, for example on global theme change. method .ClientToScreenXY, .x, .y ; Painting methods method .HoleXY, .x, .y ; Returns TRUE, if the specified point contains transparent "hole", alowing the control below to be seen/clicked. method .SelfPaint, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height ; Paints itself on the caller provided TImage. ; Layout methods method .Autosize ; Returns in EAX the prefered width and in EDX the prefered height of the Window ; By default (in TWindow) returns the width and height of the window ; Called by the splitgrid layout library. ; System event methods method .EventFocusIn method .EventFocusOut method .EventMouseEnter method .EventMouseLeave method .EventMouseMove, .x, .y, .kbdState method .EventButtonPress, .button, .kbdState, .x, .y method .EventButtonRelease, .button, .kbdState, .x, .y method .EventButtonDoubleClick, .button, .kbdState, .x, .y method .EventScroll, .direction, .command, .value method .EventKeyPress, .utf8, .scancode, .kbdState method .EventKeyRelease, .utf8, .scancode, .kbdState method .CloseRequest, .reason endobj interface TWindow.OnFocus, .self interface TWindow.OnSelfPaint, .self, .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height interface TWindow.OnScroll, .self, .direction, .command, .value interface TWindow.OnKeyEvent, .self, .utf8, .scancode, .kbdState interface TWindow.OnMouseMove, .self, .x, .y, .kbdState interface TWindow.OnMouseButton, .self, .button, .kbdState, .x, .y interface TWindow.OnChange, .self ; not used here, but it is general OnChange event handler. ; OS independent code. ;_________________________________________________________________________________________ method TWindow.Create begin inherited [.parent] set [.self], TWindow:Enabled, TRUE set [.self], TWindow:Cursor, mcArrow set [.self], TWindow:border, borderFull set [.self], TWindow:Behavior, 0 if defined options.Threads & options.Threads push esi mov esi, [.self] lea esi, [esi+TWindow._rect_mx] stdcall MutexCreate, 0, esi stdcall MutexRelease, esi pop esi end if return endp ;_________________________________________________________________________________________ method TWindow.Destroy begin pushad mov esi, [.self] ; hide the window, destroy the handle and remove the focus. set esi, TWindow:Visible, FALSE xor edx, edx mov eax, esi lock cmpxchg [__LastPointedWindow], edx mov eax, esi lock cmpxchg [__ActiveForm], edx mov eax, esi lock cmpxchg [__MouseTarget], edx jne @f stdcall __MouseCapture, edx @@: mov eax, esi lock cmpxchg [__FocusedWindow], edx ; detach from action if any mov ecx, [esi+TWindow.__action] jecxz @f exec ecx, TAction:Detach, esi @@: ; Free the icons array. xor eax, eax xchg eax, [esi+TWindow._winicons] stdcall ListFree, eax, DestroyImage ; free the string handles stdcall StrDel, [esi+TWindow._caption] if defined options.Threads & options.Threads lea eax, [esi+TWindow._rect_mx] stdcall MutexDestroy, eax end if popad inherited return endp method TWindow.RemoveChild begin inherited [.objchild] jc .finish push eax edx mov edx, [.objchild] mov eax, [.self] cmp [eax+TWindow.__focused_child], edx jne .exit .loop: mov [eax+TWindow.__focused_child], 0 get eax, eax, TWindow:Parent test eax, eax jnz .loop .exit: pop edx eax .finish: return endp method TWindow.HoleXY ; .x, .y begin xor eax, eax return endp ;_________________________________________________________________________________________ ; Paints itself on the caller provided TImage. ; The base implementation in TWindow simply calls the user event handler TWindow:OnPaint and ; renders the children windows on the provided TImage/rectangle. ; The implementations for the controls can use any method of paint, but must to call ; "inherited" at the end; method TWindow.SelfPaint ; .pDstImage, .xDst, .yDst, .xSrc, .ySrc, .width, .height .src RECT .dest RECT .ofsx dd ? .ofsy dd ? begin pushad mov esi, [.self] stdcall LockImg, [.pDstImage] mov eax, [esi+TWindow._OnSelfPaint] test eax, eax jz .user_event_processed push esi stdcall eax, esi, [.pDstImage], [.xDst], [.yDst], [.xSrc], [.ySrc], [.width], [.height] pop esi .user_event_processed: ; The source rectangle: mov ecx, [.xDst] mov edx, [.yDst] sub ecx, [.xSrc] sub edx, [.ySrc] mov [.ofsx], ecx ; .ofsx and .ofsy actually are the X and Y position of the top-left corner mov [.ofsy], edx ; of the window on the destination image. mov ecx, [.xDst] mov edx, [.yDst] mov [.src.left], ecx mov [.src.top], edx add ecx, [.width] add edx, [.height] mov [.src.right], ecx mov [.src.bottom], edx lea edi, [.src] ; then blend the children windows get esi, esi, TObject:FirstChild .children_loop: test esi, esi jz .end_loop istype esi, TWindow jne .next get eax, esi, TWindow:Visible test eax, eax jz .next mov eax, [esi+TWindow._x] mov edx, [esi+TWindow._y] add eax, [.ofsx] add edx, [.ofsy] mov [.dest.left], eax mov [.dest.top], edx add eax, [esi+TWindow._width] add edx, [esi+TWindow._height] mov [.dest.right], eax mov [.dest.bottom], edx lea eax, [.dest] stdcall RectIntersect, eax, eax, edi jc .next mov eax, [.dest.left] mov edx, [.dest.top] sub [.dest.right], eax ; source rectangle width sub [.dest.bottom], edx ; source rectangle height sub eax, [esi+TWindow._x] sub edx, [esi+TWindow._y] sub eax, [.ofsx] sub edx, [.ofsy] exec esi, TWindow:SelfPaint, [.pDstImage], [.dest.left], [.dest.top], eax, edx, [.dest.right], [.dest.bottom] .next: mov esi, [esi+TObject.__next] jmp .children_loop .end_loop: stdcall UnlockImg, [.pDstImage] popad return endp method TWindow.GetOnScreen begin push esi mov esi, [.self] .loop: get eax, esi, TWindow:Visible test eax, eax jz .finish get esi, esi, TWindow:Parent test esi, esi jnz .loop .finish: pop esi return endp ;_________________________________________________________________________________________ method TWindow.GetWantFocus begin push esi mov esi, [.self] mov eax, [esi+TWindow.__self_focus] test eax, eax jz .check_children get eax, esi, TWindow:OnScreen test eax, eax jz .finish get eax, esi, TWindow:Enabled .finish: pop esi return .check_children: get esi, esi, TWindow:FirstChild .loop: test esi, esi jz .finish get eax, esi, TWindow:WantFocus test eax, eax jnz .finish mov esi, [esi+TWindow.__next] jmp .loop endp ;_________________________________________________________________________________________ method TWindow.GetImgScreen .client RECT .rect RECT begin pushad mov esi, [.self] mov eax, [esi+TWindow._screen] test eax, eax jz .finish_screen stdcall LockImg, [esi+TWindow._screen] jc .finish_screen if defined options.Threads & options.Threads lea eax, [esi+TWindow._rect_mx] stdcall WaitForMutex, eax, 1000 jc .finish_unlock end if mov edi, [esi+TWindow._rect_list] ; list of the rectangles that need rendering. test edi, edi jz .finish_release ; no changes, the screen is up to date. mov ecx, [edi+TArray.count] test ecx, ecx jz .finish_free lea edi, [edi+TArray.array] xor eax, eax mov ebx, [esi+TWindow._width] mov edx, [esi+TWindow._height] mov [.client.left], eax mov [.client.top], eax mov [.client.right], ebx mov [.client.bottom], edx lea ebx, [.client] lea edx, [.rect] .rect_loop: stdcall RectIntersect, edx, ebx, edi jc .next_rect mov eax, [edx+RECT.left] sub [edx+RECT.right], eax mov eax, [edx+RECT.top] sub [edx+RECT.bottom], eax exec esi, TWindow:SelfPaint, [esi+TWindow._screen], [edx+RECT.left], [edx+RECT.top], [edx+RECT.left], [edx+RECT.top], [edx+RECT.right], [edx+RECT.bottom] .next_rect: add edi, sizeof.RECT loop .rect_loop .finish_free: xor eax, eax xchg eax, [esi+TWindow._rect_list] stdcall FreeMem, eax .finish_release: if defined options.Threads & options.Threads lea eax, [esi+TWindow._rect_mx] stdcall MutexRelease, eax end if .finish_unlock: stdcall UnlockImg, [esi+TWindow._screen] .finish_screen: mov eax, [esi+TWindow._screen] mov [esp+4*regEAX], eax popad return endp ;_________________________________________________________________________________________ method TWindow.SetAction begin pushad mov esi, [.self] mov ecx, [.value] mov edx, [esi+TWindow.__action] cmp ecx, edx je .finish mov [esi+TWindow.__action], ecx test edx, edx jz .old_ok exec edx, TAction:Detach, esi .old_ok: test ecx, ecx jz .new_ok exec ecx, TAction:Attach, esi .new_ok: getm eax, esi, TWindow:UpdateAction test eax, eax jz .finish stdcall eax, esi, ecx .finish: popad return endp ;_________________________________________________________________________________________ method TWindow.GetCaption begin mov eax, [.self] mov eax, [eax+TWindow._caption] test eax, eax jz .finish stdcall StrDup, eax .finish: return endp ;_________________________________________________________________________________________ method TWindow.SetCaption begin push eax esi mov esi, [.self] lea eax, [esi+TWindow._caption] stdcall SetString, eax, [.value] cmp [esi+TWindow.handle], 0 je @f stdcall _SetWindowTextUtf8, [esi+TWindow.handle], [eax] @@: pop esi eax return endp ;_________________________________________________________________________________________ method TWindow.SetVisible begin push eax esi mov esi, [.self] mov eax, [.value] cmp eax, [esi+TWindow._visible] je .finish mov [esi+TWindow._visible], eax exec esi, TWindow:__UpdateHandle exec esi, TWindow:__UpdateImages exec esi, TWindow:__UpdateFocus exec esi, TWindow:RectChanged2, 0 .finish: pop esi eax return endp ;_________________________________________________________________________________________ method TWindow.SetWindowState begin push eax esi mov esi, [.self] mov eax, [.value] xchg eax, [esi+TWindow._window_state] cmp eax, [esi+TWindow._window_state] je .finish stdcall _SetWindowState, esi .finish: pop esi eax return endp ;_________________________________________________________________________________________ method TWindow.SetSelfPaint begin push esi eax mov esi, [.self] mov eax, [.value] cmp eax, [esi+TWindow._OnSelfPaint] je .finish mov [esi+TWindow._OnSelfPaint], eax exec esi, TWindow:RectChanged2, 0 ; repaint on change of the paint handler. .finish: pop eax esi return endp ;_________________________________________________________________________________________ method TWindow.SetSplitCell begin push eax get eax, [.self], TWindow:Parent istype eax, TForm jne .finish exec eax, TForm:AttachControlToCell, [.self], [.value] .finish: pop eax return endp ;_________________________________________________________________________________________ method TWindow.AddWinIcon begin pushad mov edi, [.self] stdcall CreateImagePNG, [.value], -1 mov esi, eax mov edx, [edi+TWindow._winicons] test edx, edx jnz .addit stdcall CreateArray, 4 mov edx, eax .addit: stdcall AddArrayItems, edx, 1 mov [eax], esi mov [edi+TWindow._winicons], edx popad return endp ;_________________________________________________________________________________________ method TWindow.GetGlobalEnabled begin push ecx mov ecx, [.self] get eax, ecx, TWindow:Action test eax, eax jz .action_ok get eax, eax, TAction:Enabled jmp .check_parent .action_ok: mov eax, [ecx+TWindow._enabled] .check_parent: test eax, eax jz .finish get ecx, [.self], TWindow:Parent jecxz .finish get eax, ecx, TWindow:GlobalEnabled .finish: pop ecx return endp ;_________________________________________________________________________________________ method TWindow.GetEnabled begin push ecx mov ecx, [.self] get eax, ecx, TWindow:Action test eax, eax jz .action_ok get eax, eax, TAction:Enabled jmp .finish .action_ok: mov eax, [ecx+TWindow._enabled] .finish: pop ecx return endp method TWindow.SetEnabled begin push ecx eax mov ecx, [.self] mov eax, [.value] test eax, eax setnz al movzx eax, al xchg eax, [ecx+TWindow._enabled] cmp eax, [ecx+TWindow._enabled] je .finish exec ecx, TWindow:__UpdateFocus get eax, ecx, TWindow:OnScreen test eax, eax jz .finish exec ecx, TWindow:ForceRefresh .finish: pop eax ecx return endp method TWindow.GetOSWindow begin push esi mov esi, [.self] .loop: cmp [esi+TWindow.handle], 0 jne .finish get esi, esi, TWindow:Parent test esi, esi jnz .loop .finish: mov eax, esi pop esi return endp ;_________________________________________________________________________________________ ;--------------------------------------------------------------------------------- ; Arguments: ; .self ; .x ; .y ; .onlyenabled ; ; Returns: ; eax - pointer to TWindow ; ecx - X coordinates, translated to the client coordinates of the child. ; edx - Y coordinates, translated to the client coordinates of the child. ; ; If children window was not found, the method returns: ; eax = [.self] ; ecx = [.x] ; edx = [.y] ;--------------------------------------------------------------------------------- method TWindow.ChildByXY .tmp TImage .pixels rd 16 begin push ebx mov eax, [.self] mov ecx, [.x] mov edx, [.y] get ebx, eax, TObject:LastChild .loop: test ebx, ebx jz .finish istype ebx, TWindow jne .next cmp [ebx+TWindow._visible], 0 je .next sub ecx, [ebx+TWindow._x] jl .no2 sub edx, [ebx+TWindow._y] jl .no cmp ecx, [ebx+TWindow._width] jge .no cmp edx, [ebx+TWindow._height] jge .no cmp [.onlyenabled], FALSE je .enabled_ok push eax get eax, ebx, TWindow:GlobalEnabled test eax, eax pop eax jz .no .enabled_ok: exec ebx, TWindow:HoleXY, ecx, edx test eax, eax jz .yes .no: add edx, [ebx+TWindow._y] .no2: add ecx, [ebx+TWindow._x] .next: mov ebx, [ebx+TObject.__prev] jmp .loop .yes: mov eax, ebx exec eax, TWindow:ChildByXY, ecx, edx, [.onlyenabled] .finish: pop ebx return endp ;______________________________________________________________________________________________ ; ; Includes the passed rectangle in the invalid rectangles list. Later this rectangle will need ; to be repainted, but only when the screen image is required. ; method TWindow.RectChanged2 ;, .pRect .prect RECT .rect RECT .client RECT begin pushad mov esi, [.self] mov ecx, [.pRect] jecxz .prect_ok lea eax, [.prect] stdcall RectCopy, eax, [.pRect] mov [.pRect], eax .prect_ok: get ecx, esi, TWindow:width get edx, esi, TWindow:height xor eax, eax mov [.client.left], eax mov [.client.top], eax mov [.client.right], ecx mov [.client.bottom], edx lea edi, [.client] mov eax, [.pRect] test eax, eax jz .rect_ok mov eax, edi lea edi, [.rect] stdcall RectIntersect, edi, eax, [.pRect] jc .notify_parent .rect_ok: cmp [esi+TWindow._screen], 0 je .notify_parent if defined options.Threads & options.Threads lea eax, [esi+TWindow._rect_mx] stdcall WaitForMutex, eax, 1000 jc .finish end if mov edx, [esi+TWindow._rect_list] test edx, edx jnz .list_ok stdcall CreateArray, sizeof.RECT mov edx, eax .list_ok: stdcall RectListAdd, edx, edi .rect_added_ok: mov [esi+TWindow._rect_list], edx if defined options.Threads & options.Threads lea eax, [esi+TWindow._rect_mx] stdcall MutexRelease, eax end if ; now send some redraw events if needed. mov ecx, [esi+TWindow.handle] jecxz .notify_parent mov eax, [edi+RECT.right] ;[.rect.right] mov edx, [edi+RECT.bottom] ;[.rect.bottom] sub eax, [edi+RECT.left] ;[.rect.left] sub edx, [edi+RECT.top] ;[.rect.top] stdcall _RefreshWindowRect, ecx, [edi+RECT.left], [edi+RECT.top], eax, edx jmp .finish ; only root windows have handle, so no need to notify further. ; now do the same for the parent window .notify_parent: get ebx, esi, TWindow:Parent test ebx, ebx jz .finish get ecx, esi, TWindow:x ; shift the rectangle for the parent coordinates. get edx, esi, TWindow:y mov edi, [.pRect] lea eax, [.client] test edi, edi cmovz edi, eax add [edi+RECT.left], ecx add [edi+RECT.top], edx add [edi+RECT.right], ecx add [edi+RECT.bottom], edx exec ebx, TWindow:RectChanged2, edi .finish: popad return endp method TWindow.RectChangedXY2 begin push eax mov eax, [.x] add [.width], eax mov eax, [.y] add [.height], eax lea eax, [.x] exec [.self], TWindow:RectChanged2, eax pop eax return endp method TWindow.ForceRefresh begin pushad mov esi, [.self] exec esi, TWindow:RectChanged2, 0 get ebx, esi, TObject:LastChild .children_loop: test ebx, ebx jz .end_loop istype ebx, TWindow jne .next exec ebx, TWindow:ForceRefresh .next: mov ebx, [ebx+TObject.__next] jmp .children_loop .end_loop: popad return endp ;method TWindow.RectChangedList ;, .pRectList ;begin ; pushad ; mov esi, [.self] ; mov edx, [.pRectList] ; mov ecx, [edx+TArray.count] ; lea edx, [edx+TArray.array] ; ;.loop: ; dec ecx ; js .end_loop ; ; exec esi, TWindow:RectChanged2, edx ; add edx, sizeof.RECT ; jmp .loop ; ;.end_loop: ; popad ; return ;endp ;_________________________________________________________________________________________ method TWindow.SetParent begin inherited [.value] exec [.self], TWindow:__UpdateHandle ; create/destroy handle of the OS window, according to the window state. return endp ;_________________________________________________________________________________________ method TWindow.__UpdateHandle begin pushad mov esi, [.self] xor ecx, ecx get eax, esi, TWindow:Visible test eax, eax jz .no_handle get eax, esi, TWindow:Parent test eax, eax jnz .no_handle ; need handle cmp [esi+TWindow.handle], ecx jne .finish ; the window needs OS handle and has one. ; The window has no handle, but needs it. stdcall _CreateWindow, esi mov [esi+TWindow.handle], eax .finish: popad return .no_handle: cmp [esi+TWindow.handle], ecx je .finish ; no need for handle and there is no such. stdcall _DestroyWindow, [esi+TWindow.handle] ; destroy not needed window handle. mov [esi+TWindow.handle], ecx jmp .finish endp method TWindow.__UpdateFocus begin mov eax, [.self] cmp eax, [__FocusedWindow] jne .finish get eax, [.self], TWindow:Visible test eax, eax jz .clear get eax, [.self], TWindow:Enabled test eax, eax jz .clear get eax, [.self], TWindow:WantFocus test eax, eax jz .clear .finish: return .clear: stdcall FocusNext return endp SCREEN_MORE_X = 256 SCREEN_MORE_Y = 256 method TWindow.__UpdateImages begin pushad xor eax, eax mov esi, [.self] mov ebx, [esi+TWindow._visible] mov edi, [esi+TWindow._screen] get eax, esi, TWindow:Parent mov ecx, [esi+TWindow._width] mov edx, [esi+TWindow._height] xor ebx, 1 ; ebx = FALSE, if the window is visible test eax, eax cmovnz ebx, eax ; if the window has parent, it should have no screen image! test edi, edi jz .check_hidden test ebx, ebx jnz .destroy ; check the size cmp ecx, [edi+TImage.width] ja .destroy cmp edx, [edi+TImage.height] ja .destroy .set_wrap: stdcall SetImageWrap, edi, ecx, edx .exit: popad return .destroy: stdcall DestroyImage, edi ; screen xor eax, eax mov [esi+TWindow._screen], eax .check_hidden: test ebx, ebx jnz .exit .create_new: lea eax, [ecx + SCREEN_MORE_X] lea ebx, [edx + SCREEN_MORE_Y] stdcall CreateImage2, eax, ebx, TRUE mov edi, eax mov [esi+TWindow._screen], edi exec esi, TWindow:RectChanged2, 0 jmp .set_wrap endp ;_________________________________________________________________________________________ ; ; Geometry methods. method TWindow.SetX begin push eax mov eax, [.self] exec eax, TWindow:Move, [.value], [eax+TWindow._y] pop eax return endp method TWindow.SetY begin push eax mov eax, [.self] exec eax, TWindow:Move, [eax+TWindow._x], [.value] pop eax return endp method TWindow.SetWidth begin push eax mov eax, [.self] exec eax, TWindow:Resize, [.value], [eax+TWindow._height] pop eax return endp method TWindow.SetHeight begin push eax mov eax, [.self] exec eax, TWindow:Resize, [eax+TWindow._width], [.value] pop eax return endp method TWindow.Move begin exec [.self], TWindow:ExtMove, [.newX], [.newY] stdcall _MoveWindow, [.self] return endp method TWindow.ExtMove begin pushad mov esi, [.self] mov ebx, [.newX] mov ecx, [.newY] xchg ebx, [esi+TWindow._x] xchg ecx, [esi+TWindow._y] cmp ebx, [esi+TWindow._x] jne .update cmp ecx, [esi+TWindow._y] je .finish .update: get edx, esi, TWindow:Parent test edx, edx jz .finish exec edx, TWindow:RectChangedXY2, ebx, ecx, [esi+TWindow._width], [esi+TWindow._height] ; previous position. exec edx, TWindow:RectChangedXY2, [esi+TWindow._x], [esi+TWindow._y], [esi+TWindow._width], [esi+TWindow._height] ; new position. .finish: popad return endp method TWindow.Resize ;, .newWidth, .newHeight begin exec [.self], TWindow:ExtResize, [.newWidth], [.newHeight] stdcall _ResizeWindow, [.self] return endp method TWindow.ExtResize ;, .newWidth, .newHeight begin pushad mov esi, [.self] mov ecx, [.newWidth] mov ebx, [.newHeight] xchg ecx, [esi+TWindow._width] xchg ebx, [esi+TWindow._height] cmp ecx, [esi+TWindow._width] ; oldW, newW jne .refresh cmp ebx, [esi+TWindow._height] ; oldH, newH je .exit .refresh: exec esi, TWindow:__UpdateImages exec esi, TWindow:RectChanged2, 0 ; refresh the window itself. ;now notify the parent window, if there are parts not covered by the new window size: get edx, esi, TWindow:Parent test edx, edx jz .exit sub ecx, [esi+TWindow._width] ; oldW, newW jbe .check_height mov eax, [esi+TWindow._width] add eax, [esi+TWindow._x] exec edx, TWindow:RectChangedXY2, eax, [esi+TWindow._y], ecx, ebx .check_height: sub ebx, [esi+TWindow._height] jbe .exit mov eax, [esi+TWindow._height] add eax, [esi+TWindow._y] exec edx, TWindow:RectChangedXY2, [esi+TWindow._x], eax, [esi+TWindow._width], ebx .exit: popad return endp method TWindow.EventFocusIn begin push esi eax mov esi, [.self] cmp [esi+TWindow._OnFocusIn], 0 je .user_event_ok pushad stdcall [esi+TWindow._OnFocusIn], esi popad .user_event_ok: mov eax, [esi+TWindow.__self_focus] test eax, eax jz .check_children get eax, esi, TWindow:Visible test eax, eax jz .clear_focus get eax, esi, TWindow:Enabled test eax, eax jnz .set_last_focused .clear_focus: xor esi, esi .pass_focus: stdcall __SetIntFocused, esi .finish: pop eax esi return ;................................................ .set_last_focused: mov eax, esi .parent_loop: get eax, eax, TWindow:Parent test eax, eax jz .finish mov [eax+TWindow.__focused_child], esi jmp .parent_loop ;................................................ .check_children: cmp [esi+TWindow.__focused_child], 0 cmove esi, [esi+TWindow.__first_child] cmovne esi, [esi+TWindow.__focused_child] .loop: test esi, esi jz .pass_focus get eax, esi, TWindow:WantFocus test eax, eax jnz .pass_focus mov esi, [esi+TWindow.__next] jmp .loop endp method TWindow.EventFocusOut begin push eax mov eax, [.self] cmp [eax+TWindow._OnFocusOut], 0 je .user_event_ok pushad stdcall [eax+TWindow._OnFocusOut], eax popad .user_event_ok: pop eax return endp method TWindow.EventMouseEnter begin push esi edx eax mov esi, [.self] get edx, esi, TWindow:OSWindow stdcall GetStockCursor, [esi+TWindow._cursor] stdcall SetMouseCursor, [edx+TWindow.handle], eax pop eax edx esi return endp method TWindow.EventMouseLeave begin return endp method TWindow.EventMouseMove ;, .x, .y, .kbdState begin push ecx get ecx, [.self], TWindow:OnMouseMove jecxz .finish pushad stdcall ecx, [.self], [.x], [.y], [.kbdState] popad .finish: pop ecx return endp method TWindow.EventButtonPress ;, .button, .kbdState, .x, .y begin push ecx get ecx, [.self], TWindow:OnButtonPressed clc jecxz .finish pushad stdcall ecx, [.self], [.button], [.kbdState], [.x], [.y] popad .finish: pop ecx return endp method TWindow.EventButtonRelease ;, .button, .kbdState, .x, .y begin push ecx cmp [.button], mbRight jne .menu_ok get ecx, [.self], TWindow:Menu jecxz .menu_ok exec ecx, TMenu:Show, [.self], [.x], [.y] .menu_ok: get ecx, [.self], TWindow:OnButtonReleased jecxz .finish pushad stdcall ecx, [.self], [.button], [.kbdState], [.x], [.y] popad .finish: pop ecx return endp method TWindow.EventButtonDoubleClick ;, .button, .kbdState, .x, .y begin push ecx get ecx, [.self], TWindow:OnDoubleClick clc jecxz .finish pushad stdcall ecx, [.self], [.button], [.kbdState], [.x], [.y] popad .finish: pop ecx return endp method TWindow.EventScroll ;, .direction, .command, .value begin mov eax, [.self] cmp [eax+TWindow._OnScroll], 0 je .finish pushad stdcall [eax+TWindow._OnScroll], [.self], [.direction], [.command], [.value] popad .finish: return endp method TWindow.CloseRequest ;, .reason begin destroy [.self] return endp method TWindow.EventKeyPress ;, .utf8, .scancode, .kbdState begin push eax ebx edx mov edx, [.self] cmp edx, [__FocusedWindow] jne .focus_ok mov ebx, [.kbdState] and ebx, Ctrl+Alt+Shift jz .mod_ok cmp ebx, Shift jne .focus_ok ; other than Shift modifier is pressed. .mod_ok: test [edx+TWindow._behavior], wbUseTabKeys jnz .focus_ok if defined keyLeftTab cmp [.scancode], keyLeftTab jne .left_tab_ok test ebx, ebx jnz .prev jmp .next .left_tab_ok: end if cmp [.scancode], keyTab jne .focus_ok test ebx, ebx jz .next .prev: stdcall FocusPrev stc jmp .finish .next: stdcall FocusNext stc jmp .finish .focus_ok: cmp [edx+TWindow._OnKeyPressed], 0 je .send_to_parent push edx stdcall [edx+TWindow._OnKeyPressed], edx, [.utf8], [.scancode], [.kbdState] pop edx jc .finish .send_to_parent: get eax, edx, TWindow:Parent test eax, eax jz .finish ; CF = 0 after "test eax, eax" exec eax, TWindow:EventKeyPress, [.utf8], [.scancode], [.kbdState] .finish: pop edx ebx eax return endp method TWindow.EventKeyRelease ;, .utf8, .scancode, .kbdState begin push eax mov eax, [.self] cmp [eax+TWindow._OnKeyReleased], 0 je .finish stdcall [eax+TWindow._OnKeyReleased], eax, [.utf8], [.scancode], [.kbdState] .finish: pop eax return endp ; Utility procedures. method TWindow.ClientToScreenXY; , .window, .x, .y begin push eax esi mov ecx, [.x] mov edx, [.y] mov esi, [.self] .loop: add ecx, [esi+TWindow._x] add edx, [esi+TWindow._y] get esi, esi, TWindow:Parent test esi, esi jnz .loop pop esi eax return endp method TWindow.Autosize begin mov eax, [.self] mov edx, [eax+TWindow._height] mov eax, [eax+TWindow._width] return endp endmodule |
Added freshlib/gui/Win32/Main.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Main procedure of GUI application library. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: Organize the main message/event loop needed by every GUI engine. ;_________________________________________________________________________________________ body ProcessSystemEvents .msg MSG .msg2 MSG begin push ecx edx esi edi .msgloop: lea esi, [.msg] invoke PeekMessageW, esi, [.msg.hwnd], WM_PAINT, WM_PAINT, PM_REMOVE test eax, eax jnz .processit ; eax is always 0 here because of the previous call... ; xor eax, eax invoke PeekMessageW, esi, eax, eax, eax, PM_REMOVE test eax, eax jz .exitok cmp [.msg.message], WM_TIMER jne .timer_ok xor eax, eax stdcall __TimerProc, eax, eax, eax, eax jmp .msgloop .timer_ok: cmp [.msg.message], WM_MOUSEMOVE jne .move_ok .loop: invoke PeekMessageW, esi, [.msg.hwnd], WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE test eax, eax jnz .loop jmp .processit .move_ok: cmp [.msg.message], WM_KEYDOWN jne .processit ; cleaning the message queue from the keyboard autorepeat messages. lea edi, [.msg2] .loop2: invoke PeekMessageW, edi, [.msg.hwnd], WM_KEYDOWN, WM_KEYDOWN, PM_NOREMOVE test eax, eax jz .processit mov eax, [.msg2.wParam] mov ecx, [.msg2.lParam] cmp eax, [.msg.wParam] jne .processit cmp ecx, [.msg.lParam] jne .processit invoke PeekMessageW, edi, [.msg.hwnd], WM_KEYDOWN, WM_KEYDOWN, PM_REMOVE jmp .loop2 .processit: cmp [.msg.message], WM_QUIT je .terminate stdcall __ProcessOneSystemEvent, [.msg.hwnd], [.msg.message], [.msg.wParam], [.msg.lParam] jnc .msgloop invoke DefWindowProcW, [.msg.hwnd], [.msg.message], [.msg.wParam], [.msg.lParam] ; invoke TranslateMessage, esi ; invoke DispatchMessageW, esi jmp .msgloop .exitok: clc pop edi esi edx ecx return .terminate: mov eax, [.msg.wParam] stc pop edi esi edx ecx return endp proc WaitForSystemEvent begin push eax ecx edx invoke MsgWaitForMultipleObjectsEx, 0, 0, 100, QS_ALLINPUT, MWMO_INPUTAVAILABLE cmp eax, WAIT_TIMEOUT je .timeout clc pop edx ecx eax return .timeout: stc pop edx ecx eax return endp ;---------------------------------------------------------------------------------------------------------- ; This procedure makes following: ; 1. Takes as arguments one windows message ; 2. Analizes the message and finds the target child window for it (only top level windows receive messages) ; 3. Calls the respective event handling method of the target window object. ; 4. returns CF=0 if the event was properly processed. ; 5. returns CF=1 if the event was not processed. ; ; The event can be not processed in the following cases: ; 1. The window that receives the message is not FreshLib object. ; 2. The respective event handler refuse to process the event (return CF=1) ;---------------------------------------------------------------------------------------------------------- proc __ProcessOneSystemEvent, .hwnd, .wmsg, .wparam, .lparam begin pushad invoke GetWindowLongW, [.hwnd], ofsWindowStruct test eax, eax jz .ondefault mov esi, eax dispatch [.wmsg] .ondefault: popad stc return .ret_null: xor eax, eax .processed: mov [esp+4*regEAX], eax popad clc return ;......................................................................................... oncase WM_NCACTIVATE oncase WM_ACTIVATE oncase WM_ACTIVATEAPP movzx eax, word [.wparam] test eax, eax jz .ret_null istype esi, TForm jne @f mov [__ActiveForm], esi @@: jmp .ret_null ;......................................................................................... oncase WM_MOUSEWHEEL locals .point POINT endl movsx ecx, word [.lparam] movsx edx, word [.lparam+2] mov [.point.x], ecx mov [.point.y], edx lea eax, [.point] invoke ScreenToClient, [.hwnd], eax mov ecx, [.point.y] shl ecx, 16 mov cx, word [.point.x] mov [.lparam], ecx movsx ecx, word [.lparam] movsx edx, word [.lparam+2] call .get_mouse_target mov eax, [.wparam] sar eax, 16 mov ecx, scWheelUp test eax, eax jns @f mov ecx, scWheelDn neg eax @@: mov ebx, 120 cdq div ebx exec edi, TWindow:EventScroll, scrollY, ecx, eax jmp .ret_null ;......................................................................................... oncase WM_WINDOWPOSCHANGED locals .rect RECT endl ; current state invoke GetWindowLongW, [.hwnd], GWL_STYLE xor ecx, ecx and eax, WS_MAXIMIZE or WS_MINIMIZE jz .state_ok mov ecx, wstMaximizedVert or wstMaximizedHorz or ecx, [esi+TWindow._window_state] test eax, WS_MAXIMIZE jnz .state_ok mov ecx, wstMinimized or ecx, [esi+TWindow._window_state] .state_ok: mov [esi+TWindow._window_state], ecx ; resize/move mov ebx, [.lparam] test [ebx+WINDOWPOS.flags], SWP_NOMOVE jnz .move_ok xor eax, eax mov [.rect.left], eax mov [.rect.top], eax lea eax, [.rect] invoke ClientToScreen, [.hwnd], eax exec esi, TWindow:ExtMove, [.rect.left], [.rect.top] .move_ok: test [ebx+WINDOWPOS.flags], SWP_NOSIZE jnz .ret_null lea eax, [.rect] invoke GetClientRect, [esi+TWindow.handle], eax exec esi, TWindow:ExtResize, [.rect.right], [.rect.bottom] jmp .ret_null options.DebugMode = 0 ;......................................................................................... oncase WM_SYSKEYDOWN oncase WM_SYSKEYUP oncase WM_KEYDOWN oncase WM_KEYUP locals .keyboard rb 256 .unicode rw 16 .utf8buff rb 16 .scancode dd ? endl lea ebx, [.keyboard] invoke GetKeyboardState, ebx mov eax, [.lparam] mov ecx, eax shr eax, 16 and ecx, $80000000 and eax, $ff mov [.scancode], eax mov dword [.utf8buff], 0 or eax, ecx lea edx, [.unicode] invoke ToUnicode, [.wparam], eax, ebx, edx, 16, 0 xor ecx, ecx test eax, eax jz .key_translated ; the key can not be translated. js .key_translated ; it is a dead key. What we have to do??? lea edx, [.utf8buff] xor ecx, ecx mov [edx], ecx mov [edx+4], ecx lea ecx, [.unicode] invoke WideCharToMultiByte, CP_UTF8, 0, ecx, eax, edx, 8, 0, 0 .key_translated: xor ebx, ebx test [.keyboard+VK_CONTROL], $80 jz @f or ebx, maskCtrl @@: test [.keyboard+VK_SHIFT], $80 jz @f or ebx, maskShift @@: test [.keyboard+VK_MENU], $80 jz @f or ebx, maskAlt @@: test [.keyboard+VK_SCROLL], $01 jz @f or ebx, maskScrLk @@: test [.keyboard+VK_CAPITAL], $01 jz @f or ebx, maskCapsLock @@: test [.keyboard+VK_LBUTTON], $80 jz @f or ebx, maskBtnLeft @@: test [.keyboard+VK_RBUTTON], $80 jz @f or ebx, maskBtnRight @@: test [.keyboard+VK_MBUTTON], $80 jz @f or ebx, maskBtnMiddle @@: cmp [.wmsg], WM_KEYUP je .key_up cmp [.wmsg], WM_SYSKEYUP je .key_up OutputValue "Scan code: ", [.scancode], 16, 8 ;.key_down: mov edi, [__ActiveMenu] test edi, edi jnz .send_key_event mov edi, [__ActiveForm] test edi, edi jz .pass_to_focused get edi, edi, TForm:ActionList test edi, edi jz .pass_to_focused exec edi, TActionList:EventKeyPress, dword [.utf8buff], [.scancode], ebx jc .end_key_msg .pass_to_focused: mov edi, [__FocusedWindow] test edi, edi jz .end_key_msg .send_key_event: exec edi, TWindow:EventKeyPress, dword [.utf8buff], [.scancode], ebx jmp .end_key_msg .key_up: cmp [__FocusedWindow], 0 jz .end_key_msg exec [__FocusedWindow], TWindow:EventKeyRelease, dword [.utf8buff], [.scancode], ebx .end_key_msg: cmp [.wmsg], WM_SYSKEYDOWN je .ondefault cmp [.wmsg], WM_SYSKEYUP je .ondefault jmp .ret_null ;......................................................................................... oncase WM_SETFOCUS istype esi, TForm jne @f mov [__ActiveForm], esi @@: stdcall SetFocusedWindow, esi jmp .ret_null oncase WM_KILLFOCUS istype esi, TForm jne @f mov [__ActiveForm], 0 @@: cmp [.wparam], 0 jne .ret_null stdcall SetFocusedWindow, 0 jmp .ret_null ;......................................................................................... oncase WM_MOUSEMOVE movsx ecx, word [.lparam] movsx edx, word [.lparam+2] stdcall ServeMenuMouseMove, esi, ecx, edx, 0 jc .ret_null call .get_mouse_target get eax, edi, TWindow:Enabled test eax, eax jz .ret_null cmp edi, [__LastPointedWindow] je .move_event cmp [__LastPointedWindow], 0 je .leave_ok exec [__LastPointedWindow], TWindow:EventMouseLeave .leave_ok: mov [__LastPointedWindow], edi exec edi, TWindow:EventMouseEnter .move_event: exec edi, TWindow:EventMouseMove, ecx, edx, 0 jmp .ret_null ;......................................................................................... oncase WM_PAINT locals .ps PAINTSTRUCT .hdc dd ? endl get edi, esi, TWindow:Screen lea eax, [.ps] invoke BeginPaint, [.hwnd], eax mov [.hdc], eax test edi, edi jz .paint_ok if defined Caret stdcall __PaintCaret, esi, edi end if mov ecx, [.ps.rcPaint.right] mov edx, [.ps.rcPaint.bottom] sub ecx, [.ps.rcPaint.left] sub edx, [.ps.rcPaint.top] stdcall DrawImageRect, [.hdc], edi, [.ps.rcPaint.left], [.ps.rcPaint.top], [.ps.rcPaint.left], [.ps.rcPaint.top], ecx, edx if defined options.DebugMode.ComputeFPS & options.DebugMode.ComputeFPS stdcall FramesPerSecond end if .paint_ok: lea eax, [.ps] invoke EndPaint, [.hwnd], eax jmp .ret_null ;......................................................................................... oncase WM_CLOSE exec esi, TWindow:CloseRequest, cerFromUser jmp .ret_null oncase WM_DESTROY mov [esi+TWindow.handle], 0 jmp .ondefault ;......................................................................................... oncase WM_LBUTTONUP oncase WM_RBUTTONUP oncase WM_MBUTTONUP movsx ecx, word [.lparam] movsx edx, word [.lparam+2] call .get_mouse_target get eax, edi, TWindow:Enabled test eax, eax jz .ret_null mov ebx, [.wmsg] sub ebx, WM_LBUTTONDOWN movzx ebx, byte [.__mouse_button_table+ebx] stdcall __KeyStatus, [.wparam] exec edi, TWindow:EventButtonRelease, ebx, eax, ecx, edx jmp .ret_null oncase WM_LBUTTONDOWN oncase WM_RBUTTONDOWN oncase WM_MBUTTONDOWN locals .kbdState dd ? endl movsx ecx, word [.lparam] movsx edx, word [.lparam+2] mov ebx, [.wmsg] sub ebx, WM_LBUTTONDOWN movzx ebx, byte [.__mouse_button_table+ebx] stdcall __KeyStatus, [.wparam] mov [.kbdState], eax stdcall ServeMenuButtonPress, esi, ebx, eax, ecx, edx jc .ret_null call .get_mouse_target get eax, edi, TWindow:Enabled test eax, eax jz .ret_null ; deal with focus cmp edi, [__FocusedWindow] je .focusok get eax, edi, TWindow:WantFocus test eax, eax jz .focusok mov eax, [__FocusedWindow] mov [__FocusedWindow], edi test eax, eax jz @f exec eax, TWindow:EventFocusOut @@: exec edi, TWindow:EventFocusIn .focusok: exec edi, TWindow:EventButtonPress, ebx, [.kbdState], ecx, edx jmp .ret_null ; Double clicks are not supported for now... oncase WM_LBUTTONDBLCLK oncase WM_RBUTTONDBLCLK oncase WM_MBUTTONDBLCLK movsx ecx, word [.lparam] movsx edx, word [.lparam+2] mov ebx, [.wmsg] sub ebx, WM_LBUTTONDOWN movzx ebx, byte [.__mouse_button_table+ebx] stdcall __KeyStatus, [.wparam] mov [.kbdState], eax call .get_mouse_target get eax, edi, TWindow:Enabled test eax, eax jz .ret_null exec edi, TWindow:EventButtonDoubleClick, ebx, [.kbdState], ecx, edx jmp .ret_null enddispatch .get_mouse_target: mov edi, [__MouseTarget] test edi, edi jz .search_target_move stdcall __GetRelativeXY, edi, ecx, edx jmp .target_move .search_target_move: exec esi, TWindow:ChildByXY, ecx, edx, FALSE mov edi, eax .target_move: retn .__mouse_button_table db mbLeft, mbLeft, mbLeft db mbRight, mbRight, mbRight db mbMiddle, mbMiddle, mbMiddle endp ;......................................................................................... proc __KeyStatus, .status begin xor eax, eax test [.status], MK_LBUTTON jz @f or eax, maskBtnLeft @@: test [.status], MK_RBUTTON jz @f or eax, maskBtnRight @@: test [.status], MK_MBUTTON jz @f or eax, maskBtnMiddle @@: test [.status], MK_SHIFT jz @f or eax, maskShift @@: test [.status], MK_CONTROL jz @f or eax, maskCtrl @@: return endp |
Added freshlib/gui/Win32/application.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TApplication object class. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: TApplication by the idea is the base of GUI application, but the implementation ; somehow need fixing... ;_________________________________________________________________________________________ uglobal if used hInstance hInstance dd ? end if endg proc InitGUIApplication begin invoke GetModuleHandleW, 0 mov [hInstance], eax clc return endp proc TerminateGUI begin return endp proc CloseGUIApplication begin invoke PostQuitMessage, 0 return endp |
Added freshlib/gui/Win32/clipboard.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Clipboard management library. ; ; Target OS: Win32 ; ; Dependencies: ;_________________________________________________________________________________________ uses kernel32, user32 clipboardNull = 0 ; empty clipboard. clipboardString = CF_UNICODETEXT clipboardBinary = CF_BITMAP ; returns eax = handle to string with the clipboard data. body ClipboardRead .result dd ? begin pushad xor eax, eax mov [.result], eax invoke OpenClipboard, eax test eax, eax jz .finish invoke GetClipboardData, CF_UNICODETEXT test eax, eax jz .close mov ebx, eax invoke GlobalSize, ebx mov edi, eax invoke GlobalLock, ebx mov esi, eax lea ecx, [8*edi] stdcall GetMem, ecx jc .close3 mov edi, eax invoke WideCharToMultiByte, CP_UTF8, 0, esi, -1, edi, ecx, 0, 0 test eax, eax jz .close2 mov dword [edi+eax], 0 stdcall StrDup, edi mov [.result], eax .close2: stdcall FreeMem, edi .close3: invoke GlobalUnlock, ebx .close: invoke CloseClipboard popad .finish: mov eax, [.result] return endp ; writes the string .hstring to the clipboard. ; returns nothing. body ClipboardWrite ;, .hstring begin pushad xor eax, eax invoke OpenClipboard, eax test eax, eax jz .finish invoke EmptyClipboard stdcall utf8ToWideChar, [.hstring] mov esi, eax shl ecx, 3 invoke GlobalAlloc, GMEM_MOVEABLE or GMEM_ZEROINIT or GMEM_DDESHARE, ecx test eax, eax jz .close mov ebx, eax invoke GlobalLock, ebx mov edi, eax invoke lstrcpyW, edi, esi invoke GlobalUnlock, ebx invoke SetClipboardData, CF_UNICODETEXT, ebx .close: stdcall FreeMem, esi invoke CloseClipboard .finish: popad return endp body ClipboardType begin mov eax, 1 return endp |
Added freshlib/gui/Win32/keycodes.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This file contains scan code values for control keyboard keys. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ keyHomeNumpad = $47 keyUpNumpad = $48 keyPgUpNumpad = $49 keyLeftNumpad = $4b key5Numpad = $4c keyRightNumpad = $4d keyEndNumpad = $4f keyDownNumpad = $50 keyPgDnNumpad = $51 keyInsNumpad = $52 keyDelNumpad = $53 keyEnterNumpad = $1c ; it is ASCII $0d keyPlusNumpad = $4e keyMinusNumpad = $4a keyAsteriskNumpad = $37 keySlashNumpad = $35 keyNumLock = $45 keyScrollLock = $46 keyPause = $45 keyPrtScr = $37 keyLeft = $4b keyRight = $4d keyUp = $48 keyDown = $50 keyInsert = $52 keyDelete = $53 keyHome = $47 keyEnd = $4f keyPgUp = $49 keyPgDown = $51 keyF1 = $3b keyF2 = $3c keyF3 = $3d keyF4 = $3e keyF5 = $3f keyF6 = $40 keyF7 = $41 keyF8 = $42 keyF9 = $43 keyF10 = $44 ; used for menu and does not generate WM_KEYDOWN. keyF11 = $57 keyF12 = $58 keyCapsLock = $3a keyShiftLeft = $2a keyCtrlLeft = $1d keyWndLeft = $5b keyWndRight = $5c keyAltLeft = $38 keyAltRight = $38 keyPopupMenu = $5d keyShiftRight = $36 keyCtrlRight = $1d keyBackSpace = $0e keyTab = $0f keyEscape = $01 keyEnter = $1c keySpace = $39 keyA = $1e keyB = $30 keyC = $2e keyD = $20 keyE = $12 keyF = $21 keyG = $22 keyH = $23 keyI = $17 keyJ = $24 keyK = $25 keyL = $26 keyM = $32 keyN = $31 keyO = $18 keyP = $19 keyQ = $10 keyR = $13 keyS = $1f keyT = $14 keyU = $16 keyV = $2f keyW = $11 keyX = $2d keyY = $15 keyZ = $2c |
Added freshlib/gui/Win32/mouse.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Provides unified access to standard mouse cursors. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; ToDo: Arbitrary mouse cursors, B&W for the begining. body SetMouseCursor ;, .hWindow, .hCursor begin push ecx edx invoke SetCursor, [.hCursor] pop edx ecx return endp body GetStockCursor ;, .index begin push ecx edx mov eax, [.index] cmp eax, mcCount jb @f xor eax, eax @@: movzx eax, [_cursors+2*eax] invoke LoadCursorW, 0, eax pop edx ecx return endp if used _cursors _cursors dw IDC_ARROW, IDC_IBEAM, IDC_CROSS, IDC_SIZEWE, IDC_SIZENS, IDC_SIZENWSE, IDC_SIZENESW, IDC_WAIT, IDC_APPSTARTING, IDC_HAND, IDC_HAND, IDC_ARROW end if body __MouseCapture ;, .hwnd begin push eax ecx edx cmp [.hwnd], 0 je .release invoke SetCapture, [.hwnd] .finish: pop edx ecx eax return .release: invoke ReleaseCapture jmp .finish endp body ZeroMouseMove .point POINT begin pushad lea eax, [.point] invoke GetCursorPos, eax invoke SetCursorPos, [.point.x], [.point.y] popad return endp |
Added freshlib/gui/Win32/windows.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Window management OS interface functions. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ iglobal if used cWindowClassName cWindowClassName du 'FreshWin', 0 end if endg nWindowExtraBytes = 32 ofsWindowStruct = nWindowExtraBytes - 4 ;_________________________________________________________________________________________ ; ; Registers common window class ; Call only once ;_________________________________________________________________________________________ if used _CreateWindow initialize __RegisterWindowClass .wc WNDCLASS begin xor eax, eax lea edi, [.wc] mov ecx, sizeof.WNDCLASS / 4 rep stosd mov [.wc.style], CS_PARENTDC or CS_DBLCLKS ;or CS_VREDRAW or CS_HREDRAW mov [.wc.lpfnWndProc], __CommonWindowProc mov [.wc.cbWndExtra], nWindowExtraBytes mov eax,[hInstance] mov [.wc.hInstance],eax mov [.wc.lpszClassName], cWindowClassName lea eax, [.wc] invoke RegisterClassW, eax return endp end if ;_________________________________________________________________________________________ body _CreateWindow .pwc dd ? .charlen dd ? .style dd ? .exstyle dd ? .rect RECT begin pushad mov esi, [.pWindow] mov [.pwc], 0 cmp [esi+TWindow._caption], 0 je .caption_ok stdcall StrLen, [esi+TWindow._caption] lea ecx, [eax*4] stdcall GetMem, ecx mov [.pwc], eax stdcall StrPtr, [esi+TWindow._caption] invoke MultiByteToWideChar, CP_UTF8, 0, eax, -1, [.pwc], ecx mov [.charlen], eax .caption_ok: ; now styles mov eax, [esi+TWindow._border] and eax, $3 mov ecx, [.styles+4*eax] mov edx, [.exstyles+4*eax] mov [.style], ecx mov [.exstyle], edx ; the coordinates and size xor eax, eax mov [.rect.left], eax mov [.rect.top], eax mov ecx, [esi+TWindow._width] mov edx, [esi+TWindow._height] mov [.rect.right], ecx mov [.rect.bottom], edx lea eax, [.rect] invoke AdjustWindowRectEx, eax, [.style], 0, [.exstyle] mov ecx, [.rect.right] mov edx, [.rect.bottom] sub ecx, [.rect.left] sub edx, [.rect.top] ; the owner get eax, esi, TWindow:Owner test eax, eax jz .owner_ok mov eax, [eax+TWindow.handle] .owner_ok: invoke CreateWindowExW, [.exstyle], cWindowClassName, [.pwc], [.style], [esi+TWindow._x], [esi+TWindow._y], ecx, edx, eax, 0, [hInstance], 0 mov [esp+4*regEAX], eax mov ebx, eax invoke SetWindowLongW, ebx, ofsWindowStruct, esi ; set window icons if any mov edx, [esi+TWindow._winicons] test edx, edx jz .icons_ok mov ecx, [edx+TArray.count] .loop: dec ecx js .icons_ok stdcall _AddWindowIcon, ebx, [edx+TArray.array + 4*ecx] jmp .loop .icons_ok: invoke ShowWindow, ebx, SW_SHOWNORMAL invoke SendMessageW, ebx, WM_ACTIVATE, TRUE, 0 stdcall FreeMem, [.pwc] popad return .styles dd WS_POPUP dd WS_BORDER or WS_CAPTION or WS_SYSMENU or WS_SIZEBOX or WS_MINIMIZEBOX or WS_MAXIMIZEBOX dd WS_CAPTION or WS_SYSMENU or WS_VISIBLE dd WS_BORDER or WS_CAPTION or WS_SYSMENU or WS_SIZEBOX .exstyles dd WS_EX_TOPMOST or WS_EX_TOOLWINDOW or WS_EX_NOACTIVATE dd WS_EX_APPWINDOW dd WS_EX_DLGMODALFRAME dd WS_EX_TOOLWINDOW endp struct __ICONINFO .fIcon dd ? .xHotSpot dd ? .yHotSpot dd ? .hbmMask dd ? .hbmColor dd ? ends proc _AddWindowIcon, .hwnd, .pImage .ii __ICONINFO begin pushad mov [.ii.fIcon], TRUE mov [.ii.xHotSpot], 0 mov [.ii.yHotSpot], 0 mov [.ii.hbmMask], 0 mov esi, [.pImage] mov eax, [esi+TWinImage.hBitmap] mov [.ii.hbmMask], eax mov [.ii.hbmColor], eax lea eax, [.ii] invoke CreateIconIndirect, eax mov ebx, eax mov eax, ICON_SMALL cmp [esi+TWinImage.width], 24 jb @f mov eax, ICON_BIG @@: invoke SendMessageW, [.hwnd], WM_SETICON, eax, ebx popad return endp ;_________________________________________________________________________________________ body _MoveWindow begin pushad mov esi, [.pWindow] mov eax, [esi+TWindow.handle] test eax, eax jz .error invoke SetWindowPos, eax, 0, [esi+TWindow._x], [esi+TWindow._y], 0, 0, SWP_NOSIZE or SWP_NOREPOSITION clc popad return .error: stc popad return endp body _ResizeWindow .rect RECT begin pushad mov esi, [.pWindow] cmp [esi+TWindow.handle], 0 je .error ; now styles mov eax, [esi+TWindow._border] and eax, $3 mov ebx, [_CreateWindow.styles+4*eax] mov edi, [_CreateWindow.exstyles+4*eax] xor eax, eax mov [.rect.left], eax mov [.rect.top], eax mov ecx, [esi+TWindow._width] mov edx, [esi+TWindow._height] mov [.rect.right], ecx mov [.rect.bottom], edx lea eax, [.rect] invoke AdjustWindowRectEx, eax, ebx, 0, edi mov ecx, [.rect.right] mov edx, [.rect.bottom] sub ecx, [.rect.left] sub edx, [.rect.top] invoke SetWindowPos, [esi+TWindow.handle], 0, 0, 0, ecx, edx, SWP_NOMOVE or SWP_NOREPOSITION clc popad return .error: stc popad return endp ;_________________________________________________________________________________________ body _DestroyWindow begin push eax ecx edx invoke DestroyWindow, [.hwnd] pop edx ecx eax return endp ;_________________________________________________________________________________________ body _RefreshWindowRect .rect RECT begin push eax ecx edx ebx ;; WAY 1 - direct paint on the window surface, without sending any messages. ; ; invoke GetDC, [.hwnd] ; mov ebx, eax ; ; stdcall _GetWindowStruct, [.hwnd] ; get eax, eax, TWindow:Screen ; ; stdcall DrawImageRect, ebx, eax, [.x], [.y], [.x], [.y], [.width], [.height] ; ; invoke ReleaseDC, [.hwnd], ebx ; Needed for WAY2 and WAY3 mov eax, [.x] mov ecx, [.y] mov [.rect.left], eax mov [.rect.top], ecx add eax, [.width] add ecx, [.height] mov [.rect.right], eax mov [.rect.bottom], ecx lea eax, [.rect] xor ecx, ecx ;; WAY2 - generates messages before returning. ; ; invoke RedrawWindow, [.hwnd], eax, ecx, RDW_INVALIDATE or RDW_NOERASE or RDW_UPDATENOW ; WAY3 - returns immediately and posts messages to the queue. ; In the real Windows, on intensive changes it delays the update and that can be unwanted. ; invoke InvalidateRect, [.hwnd], eax, ecx pop ebx edx ecx eax return endp ;_________________________________________________________________________________________ body _SetWindowTextUtf8 .pwc dd ? .charlen dd ? begin push eax ecx edx cmp [.hString], 0 je .finish stdcall StrLen, [.hString] lea ecx, [eax*4] stdcall GetMem, ecx mov [.pwc], eax stdcall StrPtr, [.hString] invoke MultiByteToWideChar, CP_UTF8, 0, eax, -1, [.pwc], ecx mov [.charlen], eax invoke SendMessageW, [.hwnd], WM_SETTEXT, 0, [.pwc] stdcall FreeMem, [.pwc] .finish: pop edx ecx eax return endp ;_________________________________________________________________________________________ body _SetModalTowards begin push eax ecx edx invoke SetWindowLongW, [.hwnd], GWL_HWNDPARENT, [.hwndParent] invoke EnableWindow, [.hwndParent], FALSE pop edx ecx eax return endp ;_________________________________________________________________________________________ body _FinalizeModal begin push eax ecx edx invoke EnableWindow, [.hwndParent], TRUE invoke SetFocus, [.hwndParent] pop edx ecx eax return endp ;_________________________________________________________________________________________ body _SetFocus begin push eax ecx edx invoke SetFocus, [.hwnd] pop edx ecx eax return endp ;_________________________________________________________________________________________ body _SetWindowState begin pushad mov esi, [.pWindow] mov edi, [esi+TWindow.handle] test edi, edi jz .error mov ecx, SW_SHOWMAXIMIZED mov ebx, SW_RESTORE test [esi+TWindow._window_state], wstMaximizedVert or wstMaximizedHorz cmovz ecx, ebx invoke ShowWindowAsync, edi, ecx test [esi+TWindow._window_state], wstMinimized jz .finish invoke ShowWindowAsync, edi, SW_SHOWMINIMIZED .finish: clc popad return .error: stc popad return endp body _GetScreenSize begin pushad invoke GetSystemMetrics, SM_CYSCREEN mov [esp+4*regEBX], eax invoke GetSystemMetrics, SM_CXSCREEN mov [esp+4*regEAX], eax popad return endp ;_________________________________________________________________________________________ proc __CommonWindowProc, .hwnd, .wmsg, .wparam, .lparam begin stdcall __ProcessOneSystemEvent, [.hwnd], [.wmsg], [.wparam], [.lparam] ; sometimes windows calls winproc directly instead of using postmessage. jnc .finish invoke DefWindowProcW, [.hwnd], [.wmsg], [.wparam], [.lparam] .finish: return endp |
Added freshlib/gui/all.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: All GUI libraries combined include. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Includes all GUI libraries at once. ;_________________________________________________________________________________________ AlignLeft = 0 AlignRight = 1 AlignTop = 2 AlignBottom = 3 include 'sysevents.asm' include 'mouse.asm' include 'textcaret.asm' include 'clipboard.asm' include 'application.asm' ; OS independent support code ; Limited support for the old visual editor. Contains only macro definitions. ;include 'OldTemplates.inc' ; OS independent components include 'TObject.asm' include 'TAction.asm' include 'TActionList.asm' include 'TWindow.asm' include 'TScrollable.asm' include 'TCanvasWindow.asm' include 'TForm.asm' include 'TButton.asm' include 'TCheckbox.asm' include 'TEdit.asm' include 'TLabel.asm' include 'TImageLabel.asm' include 'TMenu.asm' include 'TProgressbar.asm' include 'TTreeView.asm' include 'TToolbar.asm' include 'TTabBar.asm' include 'TGrid.asm' include 'TListView.asm' include 'TColorSample.asm' include 'dialogs.asm' include 'file_dialogs.asm' include 'SplitGrid.asm' ; OS independent main procedures. include 'Main.asm' ; OS independent template engine. include 'ObjTemplates.asm' ; Way to change the GUI themes in Runtime. include 'themes.asm' match theme, ThemeGUI { include 'themes/'#`theme#'.asm' } ;include 'themes/flat_gui.asm' ;include 'themes/win_gui.asm' |
Added freshlib/gui/application.asm.
> > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: GUI Application global initialization. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ module "Application library" include '%TargetOS%/application.asm' endmodule |
Added freshlib/gui/clipboard.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Clipboard functions for inter-program communications. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: This file contains the OS independent part of the library and includes the ; respective OS dependent file. ;_________________________________________________________________________________________ module "Clipboard library" ; Returns EAX handle to string with the content of the clipboard. interface ClipboardRead interface ClipboardWrite, .hstring interface ClipboardType include '%TargetOS%/clipboard.asm' endmodule |
Added freshlib/gui/dialogs.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Common dialogs procedures library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ module "Common dialogs library" iglobal if used _CommonDialogTemplate __defaultTitles dd ttlError, ttlInformation, ttlQuestion, ttlWarning _CommonDialogTemplate: ObjTemplate tfParent or tfEnd, TForm, frmCommonDialog, width = 480, height = 100, border = borderModal ObjTemplate tfChild, TImageLabel, .imgIcon, x = 4, y = 4, width = 70, height = 70, Visible = TRUE, ImageAlign = iaCenter or iaMiddle ObjTemplate tfChild, TLabel, .LblText, x = 74, y = 4, width = 10, height = 10, TextAlign = dtfAlignLeft or dtfAlignMiddle or dtfWordWrap or dtfCRLF, Visible = TRUE ObjTemplate tfChild, TButton, .btnOK, x = 0, y = 0, width = 64, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'OK', ModalResult = mrOK ObjTemplate tfChild, TButton, .btnCancel, x = 0, y = 0, width = 64, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'Cancel', ModalResult = mrCancel ObjTemplate tfChild, TButton, .btnAbort, x = 0, y = 0, width = 64, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'Abort', ModalResult = mrAbort ObjTemplate tfChild, TButton, .btnRetry, x = 0, y = 0, width = 64, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'Retry', ModalResult = mrRetry ObjTemplate tfChild, TButton, .btnIgnore, x = 0, y = 0, width = 64, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'Ignore', ModalResult = mrIgnore ObjTemplate tfChild, TButton, .btnYes, x = 0, y = 0, width = 64, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'Yes', ModalResult = mrYes ObjTemplate tfChild, TButton, .btnNo, x = 0, y = 0, width = 64, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'No', ModalResult = mrNo ObjTemplate tfChild, TButton, .btnMaybe, x = 0, y = 0, width = 64, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'Maybe', ModalResult = mrMaybe ObjTemplate tfEnd, TButton, .btnHelp, x = 0, y = 0, width = 64, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'Help', ModalResult = mrNone end if endg ttlError text "Error!" ttlInformation text "Information" ttlQuestion text "Question" ttlWarning text "Warning!" ; buttons flags used: smbOK = $01 smbCancel = $02 smbAbort = $04 smbRetry = $08 smbIgnore = $10 smbYes = $20 smbNo = $40 smbMaybe = $80 smbHelp = $100 smbMaxButton = smbHelp smiError = 0 smiInformation = 1 smiQuestion = 2 smiWarning = 3 proc ShowMessage, .parent, .icon, .hTitle, .hMessage, .maskButtons .xrow dd ? .yrow dd ? begin push ebx ecx edx esi stdcall CreateFromTemplate, _CommonDialogTemplate, 0 ; First set the position and size of the dialog box, depending on the flags, and the size of the message. ; Set the message text: set [frmCommonDialog.LblText], TLabel:Caption, [.hMessage] ; Set the message title: mov eax, [.hTitle] test eax, eax jnz .set_caption mov eax, [.icon] and eax, 3 mov eax, [__defaultTitles + 4*eax] .set_caption: set ebx, TForm:Caption, eax ; arrange the buttons mov eax, [.maskButtons] mov ecx, 32 xor edx, edx .count: rol eax, 1 adc edx, 0 loop .count mov ecx, edx imul edx, 64 ; button width jecxz @f dec ecx imul ecx, 16 @@: add edx, ecx ; edx contains the width of the button row in pixels. get eax, ebx, TForm:width cmp eax, edx jge .widthok lea eax, [edx+32] set ebx, TForm:width, eax .widthok: sub eax, edx sar eax, 1 ; eax is the begin X coordinate of the row mov [.xrow], eax get eax, ebx, TForm:height sub eax, 24+8 mov [.yrow], eax mov edx, .btnTable mov ecx, $1 .btnLoop: test [.maskButtons], ecx jz @f mov esi, [edx] set [esi], TButton:x, [.xrow] set [esi], TButton:y, [.yrow] set [esi], TButton:Visible, TRUE add [.xrow], 64+16 @@: add edx, 4 shl ecx, 1 cmp ecx, smbMaxButton jbe .btnLoop ; set the icon mov eax, [.icon] and eax, $3 ; set [frmCommonDialog.imgIcon], TImageLabel:Image, [GUI.iconDialogs+8*eax] ; set the text position and size. mov ecx, [.yrow] sub ecx, 8 set [frmCommonDialog.imgIcon], TImageLabel:height, ecx get eax, [frmCommonDialog], TForm:width get edx, [frmCommonDialog.LblText], TLabel:x sub eax, edx exec [frmCommonDialog.LblText], TLabel:Resize, eax, ecx exec [frmCommonDialog.LblText], TWindow:RectChanged2, 0 stdcall ShowModal, ebx, [.parent] destroy ebx pop esi edx ecx ebx return .btnTable dd frmCommonDialog.btnOK, \ frmCommonDialog.btnCancel, \ frmCommonDialog.btnAbort, \ frmCommonDialog.btnRetry, \ frmCommonDialog.btnIgnore, \ frmCommonDialog.btnYes, \ frmCommonDialog.btnNo, \ frmCommonDialog.btnMaybe, \ frmCommonDialog.btnHelp endp proc InputString, .parent begin return endp iglobal if used _FontDialogTemplate _FontDialogTemplate: ObjTemplate tfParent or tfEnd, TForm, frmFontDialog, \ width = 320, height = 240, \ border = borderModal, \ SplitGrid = _splitFontDialog, \ PaddingLeft=8, PaddingRight=8, \ PaddingTop=8,PaddingBottom=8, \ Caption = "Select font", \ Visible=FALSE ObjTemplate tfChild, TLabel, NONE, SplitCell = _splitFontDialog.cellLabelFamily, Caption = "Font family:", TextAlign = dtfAlignLeft or dtfAlignMiddle ObjTemplate tfChild, TListView, .lvFamily, SplitCell = _splitFontDialog.cellListview, Style = lvsList, Flags = gfRowFocus or gfSingleCellSelect ObjTemplate tfChild, TLabel, NONE, SplitCell = _splitFontDialog.cellLabelWeight, Caption = "Weight: ", TextAlign = dtfAlignLeft or dtfAlignMiddle ObjTemplate tfChild, TListView, .lvWeight, SplitCell = _splitFontDialog.cellWeight, Style = lvsList, Flags = gfRowFocus or gfSingleCellSelect ObjTemplate tfChild, TLabel, NONE, SplitCell = _splitFontDialog.cellLabelSize, Caption = "Size:", TextAlign = dtfAlignLeft or dtfAlignMiddle ObjTemplate tfChild, TEdit, .editSize, SplitCell = _splitFontDialog.cellEditSize ObjTemplate tfChild, TButton, .btnOK, SplitCell = _splitFontDialog.cellOK, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'OK', ModalResult = mrOK ObjTemplate tfChild or tfEnd, TButton, .btnCancel, SplitCell = _splitFontDialog.cellCancel, height = 24, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'Cancel', ModalResult = mrCancel SplitStart _splitFontDialog Split stHoriz or stOriginBR or stJustGap, 8, 140, 0, 1000 Split stVert or stJustGap, 0, 21, 0, 100 Cell cellLabelFamily Cell cellListview Split stVert or stJustGap, 0, 21, 0, 100 Cell cellLabelSize Split stVert or stJustGap, 8, 21, 0, 100 Cell cellEditSize Split stVert or stJustGap, 0, 21, 0, 100 Cell cellLabelWeight Split stVert or stJustGap or stOriginBR, 8, 24, 0, 100 Cell cellWeight Split stHoriz or stJustGap or stOriginBR, 8, 64, 0, 100 Split stHoriz or stJustGap or stOriginBR, 0, 64, 0, 100 Cell cellEmpty2 Cell cellCancel Cell cellOK SplitEnd end if endg cFontWeights: IndexedStrings \ fwLight, "Light", \ fwDemilight, "Demilight", \ fwNormal, "Normal", \ fwMedium, "Medium", \ fwDemibold, "Demibold", \ fwBold, "Bold", \ fwExtraBold, "Extra bold", \ fwBlack, "Black" proc SelectFont, .parent, .pFontInfo begin pushad mov edi, [.pFontInfo] stdcall CreateFromTemplate, _FontDialogTemplate, 0 mov esi, cFontWeights .wloop: lodsd test eax, eax jz .weights_ok exec [frmFontDialog.lvWeight], TListView:InsertItem, -1, eax, 0, 0 lea esi, [esi+4] jmp .wloop .weights_ok: mov edx, [edi+__TFont.weight] and edx, fwMask exec [frmFontDialog.lvWeight], TListView:SetFocused, 0, edx exec [frmFontDialog.lvWeight], TListView:EnsureVisible, 0, edx stdcall GetFontList, [.pFontInfo] jc .list_ok mov esi, eax xor ecx, ecx xor edx, edx .loop: cmp ecx, [esi+TArray.count] jae .end_list push edx exec [frmFontDialog.lvFamily], TListView:InsertItem, -1, [esi+4*ecx+TArray.array], 0, 0 pop edx cmp [edi+__TFont.hFontFace], 0 je .next stdcall StrCompNoCase, [edi+__TFont.hFontFace], [esi+4*ecx+TArray.array] cmovc edx, ecx .next: inc ecx jmp .loop .end_list: stdcall ListFree, esi, StrDel exec [frmFontDialog.lvFamily], TListView:SetFocused, 0, edx exec [frmFontDialog.lvFamily], TListView:EnsureVisible, 0, edx .list_ok: stdcall NumToStr, [edi+__TFont.height], ntsDec or ntsUnsigned push eax set [frmFontDialog.editSize], TEdit:Text, eax stdcall StrDel ; from the stack. stdcall ShowModal, ebx, [.parent] cmp eax, mrOK jne .finish_NOK ; font family name mov edi, [.pFontInfo] get ecx, [frmFontDialog.lvFamily], TListView:FocusedY exec [frmFontDialog.lvFamily], TListView:GetItem, ecx mov eax, [eax+TLvItem.captions] stdcall StrDup, [eax+TArray.array] xchg eax, [edi+__TFont.hFontFace] stdcall StrDel, eax ; size get eax, [frmFontDialog.editSize], TEdit:Text push eax stdcall StrToNumEx, eax stdcall StrDel ; from the stack jc .size_ok mov [edi+__TFont.height], eax .size_ok: ; Weight get eax, [frmFontDialog.lvWeight], TListView:FocusedY mov [edi+__TFont.weight], eax destroy ebx ;.finish_OK: clc popad return .finish_NOK: destroy ebx stc popad return endp endmodule |
Added freshlib/gui/file_dialogs.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 | iglobal if used _FileDialogTemplate __file_dialog_titles dd ttlOpenDialog, ttlSaveDialog ttlOpenDialog text "Open file" ttlSaveDialog text "Save file" _FileDialogTemplate: ObjTemplate tfParent or tfEnd, TForm, frmFileDlg, \ width = 640, height = 480, border = borderModal, \ SplitGrid = _filegrid, \ PaddingLeft = 8, PaddingRight = 8, \ PaddingTop = 8, PaddingBottom = 8 ObjTemplate tfChild, TTabBar, .tbPath, Visible = TRUE, SplitCell = _filegrid.cellPath ObjTemplate tfChild, TEdit, .editFilename, Visible = TRUE, SplitCell = _filegrid.cellEdit ObjTemplate tfChild, TListView, .lvFiles, SplitCell = _filegrid.cellList, Style = lvsDetails, OnFocusChange = __FileListFocusChange, OnDoubleClick = __FileListDoubleClick, OnKeyPressed = __FileListKeyPressed ObjTemplate tfChild, TButton, .btnOK, Visible = TRUE, SplitCell = _filegrid.cellOK, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'OK', ModalResult = mrOK ObjTemplate tfEnd, TButton, .btnCancel, Visible = TRUE, SplitCell = _filegrid.cellCancel, TextAlign = dtfAlignCenter or dtfAlignMiddle, Caption = 'Cancel', ModalResult = mrCancel SplitStart _filegrid Split stVert or stJustGap, 8, 24, 0, 100 Cell cellPath Split stVert or stJustGap, 8, 24, 0, 100 Cell cellEdit Split stVert or stJustGap or stOriginBR, 8, 24, 0, 100 Cell cellList Split stHoriz or stJustGap or stOriginBR, 8, 64, 0, 100 Split stHoriz or stJustGap or stOriginBR, 8, 64, 0, 100 Cell empty Cell cellCancel Cell cellOK SplitEnd end if endg ; Used defined callback to return TImage for the file item icon. ; Returns: ; CF = 0, eax = pointer to TImage ; CF = 1, eax not changed. interface FileIconCallback, .pDirItem uglobal pFileIconsCallback dd ? endg fdtOpenFile = 0 fdtSaveFile = 1 fdtMultipleSelect = 2 ; Returns: ; 1. [.type] and fdtMultipleSelect == 0 ; eax - handle of a string with the full pathname of the file. ; 2. [.type] and fdtMultipleSelect <> 0 ; eax - pointer to TArray of dword with the filenames. proc FileDialog, .pParent, .type, .start_filename, .filters_list begin pushad stdcall CreateFromTemplate, _FileDialogTemplate, 0 mov eax, [.type] and eax, 1 set ebx, TForm:UserData, eax set ebx, TForm:Caption, [__file_dialog_titles+4*eax] xor eax, eax mov esi, [frmFileDlg.lvFiles] set esi, TListView:FixedCols, eax inc eax set esi, TListView:FixedRows, eax mov eax, gfGridLinesFixed or gfResizeColumns or gfRowFocus test [.type], fdtMultipleSelect jnz @f or eax, gfSingleCellSelect @@: set esi, TListView:Flags, eax exec esi, TListView:AddHeader, txt "Filename" exec esi, TListView:AddHeader, txt "Size" exec esi, TListView:AddHeader, txt "Type" exec esi, TListView:AddHeader, txt "Modified" set [frmFileDlg.tbPath], TTabBar:OnSelChange, __FileDlgPathChanged stdcall GetFullPathName, [.start_filename] push eax eax eax stdcall StrSplitFilename, eax push eax set [frmFileDlg.editFilename], TEdit:Text, eax stdcall StrDel ; from the stack stdcall StrPtr ; from the stack cmp byte [eax], DIR_SLASH jne @f exec [frmFileDlg.tbPath], TTabBar:InsertTab, -1, txt DIR_SLASH, 0, 0 @@: pop eax stdcall StrSplitList, eax, DIR_SLASH, FALSE stdcall StrDel ; from the stack mov edx, eax xor ecx, ecx .dir_loop: cmp ecx, [edx+TArray.count] jae .end_dir stdcall StrCat, [edx+TArray.array+4*ecx], txt DIR_SLASH exec [frmFileDlg.tbPath], TTabBar:InsertTab, -1, [edx+TArray.array+4*ecx], 0, 0 inc ecx jmp .dir_loop .end_dir: stdcall ListFree, edx, StrDel mov ecx, [frmFileDlg.tbPath] mov ecx, [ecx+TTabBar._items] mov ecx, [ecx+TArray.count] dec ecx set [frmFileDlg.tbPath], TTabBar:Selected, ecx stdcall ShowModal, ebx, [.pParent] cmp eax, mrOK jne .ignore ; finish ok: mov edi, [frmFileDlg.tbPath] mov edx, [edi+TTabBar._items] mov ecx, [edi+TTabBar._selected] lea edx, [edx+TArray.array] stdcall StrNew mov edi, eax .restore_path: stdcall StrCat, edi, [edx+TTab.caption] add edx, sizeof.TTab dec ecx jns .restore_path test [.type], fdtMultipleSelect jnz .get_multiple get eax, [frmFileDlg.editFilename], TEdit:Text push eax stdcall StrCat, edi, eax stdcall StrDel ; from the stack. mov [esp+4*regEAX], edi .finish: destroy ebx clc popad return .get_multiple: locals .path dd ? .end dd ? endl stdcall CreateArray, 4 jc .cant_allocate_array push ebx mov edx, eax mov [.path], edi mov esi, [frmFileDlg.lvFiles] mov ebx, [esi+TListView._items] lea ebx, [ebx+TArray.array] mov ecx, [esi+TListView.selection.top] mov eax, [esi+TListView.selection.bottom] cmp ecx, eax jle .order_ok xchg ecx, eax .order_ok: dec ecx js .end_files dec eax ; because of the header line! js .end_files mov [.end], eax OutputValue "Item from: ", ecx, 10, -1 OutputValue "Item to: ", [.end], 10, -1 lea ebx, [ebx+8*ecx] lea ebx, [ebx+8*ecx] ; sizeof.TLvItem = $10 .file_loop: cmp ecx, [.end] jg .end_files stdcall StrDup, [.path] mov edi, [ebx+TLvItem.captions] stdcall StrCat, eax, [edi+TArray.array] push eax stdcall AddArrayItems, edx, 1 pop dword [eax] add ebx, sizeof.TLvItem inc ecx jmp .file_loop .end_files: stdcall StrDel, [.path] pop ebx mov [esp+4*regEAX], edx jmp .finish .cant_allocate_array: stdcall StrDel, edi .ignore: xor eax, eax mov [esp+4*regEAX], eax destroy ebx stc popad return endp ; interface TTabBar.OnSelChange, .self, .pTabUnselected, .iTabUnselected, .pTabSelected, .iTabSelected proc __FileDlgPathChanged as TTabBar.OnSelChange begin cmp [.pTabSelected], 0 je .finish mov esi, [.self] ; create active path stdcall StrNew mov ebx, eax mov edi, [esi+TTabBar._items] mov ecx, [edi+TArray.count] dec ecx js .dir_ok cmp ecx, [esi+TTabBar._selected] cmova ecx, [esi+TTabBar._selected] lea edi, [edi+TArray.array] .loop: stdcall StrCat, ebx, [edi + TTab.caption] add edi, sizeof.TTab dec ecx jns .loop .dir_ok: stdcall __FillListView, ebx, [frmFileDlg.lvFiles] stdcall StrDel, ebx exec [frmFileDlg.lvFiles], TListView:SetFocused, 0, 1 stdcall SetFocusedWindow, [frmFileDlg.lvFiles] .finish: return endp proc __FillListView, .hDir, .list_view .date_time TDateTime begin pushad mov edi, [.list_view] set edi, TListView:Visible, FALSE exec edi, TListView:Clear stdcall DirectoryRead, [.hDir] jc .finish mov esi, eax ; TArray of TDirItem push eax stdcall SortArray, esi, DirItemCompare, dsByName or fdsDirsFirst mov ecx, [esi+TArray.count] lea esi, [esi+TArray.array] .loop: dec ecx js .end_of_files xor eax, eax xor ebx, ebx stdcall StrPtr, [esi+TDirItem.hFilename] cmp word [eax], '.' je .next mov edx, [esi+TDirItem.Type] test edx, ftLinkMask setnz bl and edx, not ftLinkMask cmp [pFileIconsCallback], 0 je .default_icon stdcall [pFileIconsCallback], esi jnc .icon_ok .default_icon: cmp edx, ftDirectory cmove eax, [GUI.iconDirectory+8*ebx] je .icon_ok mov eax, [GUI.iconFile+8*ebx] .icon_ok: exec edi, TListView:InsertItem, -1, [esi+TDirItem.hFilename], eax, 0 mov ebx, eax ; size mov edx, [esi+TDirItem.Type] and edx, not ftLinkMask cmp edx, ftDirectory jne .get_size stdcall StrNew jmp .set_size .get_size: stdcall NumToStr64, dword [esi+TDirItem.Size], dword [esi+TDirItem.Size+4], ntsDec or ntsUnsigned .set_size: push eax exec edi, TListView:AddSubItem, ebx, eax stdcall StrDel ; from the stack ; extension cmp edx, ftDirectory jne .get_ext stdcall StrDupMem, txt "DIR" jmp .set_type .get_ext: stdcall StrExtractExt, [esi+TDirItem.hFilename] jnc .set_type stdcall StrNew .set_type: mov edx, eax exec edi, TListView:AddSubItem, ebx, edx stdcall StrDel, edx ; time modified lea eax, [.date_time] lea edx, [esi+TDirItem.mTime] stdcall TimeToDateTime, edx, eax stdcall DateTimeToStr, eax, 0 push eax exec edi, TListView:AddSubItem, ebx, eax stdcall StrDel ; from the stack .next: add esi, sizeof.TDirItem jmp .loop .end_of_files: stdcall FreeDirArray ; from the stack .finish: set edi, TListView:Visible, TRUE popad return endp proc __FileListFocusChange as TListView.OnFocusChange begin pushad mov esi, [.pListView] mov edx, [esi+TListView._items] mov ebx, [.y] sub ebx, [esi+TListView._FixedRows] js .finish test [esi+TListView._flags], gfRowFocus jnz @f imul ebx, [esi+TListView.ColCount] add ebx, [.x] sub ebx, [esi+TListView._FixedCols] @@: ; here ebx is the item index in TArray cmp ebx, [edx+TArray.count] jae .finish shl ebx, TLvItem.shift lea ebx, [edx+ebx+TArray.array] mov edx, [ebx+TLvItem.captions] stdcall StrLen, [edx + TArray.array + 4] ; is it a directory? test eax, eax jz .finish set [frmFileDlg.editFilename], TEdit:Text, [edx+TArray.array] .finish: popad return endp proc __FileDialogChangeDir begin pushad mov esi, [frmFileDlg.lvFiles] mov edx, [esi+TListView._items] mov ebx, [esi+TListView._focused.y] sub ebx, [esi+TListView._FixedRows] js .finish_false test [esi+TListView._flags], gfRowFocus jnz @f imul ebx, [esi+TListView.ColCount] add ebx, [esi+TListView._focused.x] sub ebx, [esi+TListView._FixedCols] @@: ; here ebx is the item index in TArray cmp ebx, [edx+TArray.count] jae .finish_false shl ebx, TLvItem.shift lea ebx, [edx+ebx+TArray.array] ; is it directory? mov edx, [ebx+TLvItem.captions] cmp [edx+TArray.count], 2 jb .finish_false stdcall StrLen, [edx + TArray.array + 4] test eax, eax jnz .finish_false ; directory!!! push edx get eax, [frmFileDlg], TForm:UserData test eax, eax jnz .filename_ok set [frmFileDlg.editFilename], TEdit:Text, 0 .filename_ok: stdcall StrCompCase, [edx+TArray.array], txt '..' jnc .change_up pop edx exec [frmFileDlg.tbPath], TTabBar:Prev jmp .finish_true .change_up: ; change directory. mov edi, [frmFileDlg.tbPath] mov edx, [edi+TTabBar._items] sub eax, [edi+TTabBar._selected] mov ecx, [edx+TArray.count] set edi, TTabBar:OnSelChange, 0 .free_loop: dec ecx cmp ecx, [edi+TTabBar._selected] je .add_new exec edi, TTabBar:DeleteTab, ecx, 0 jmp .free_loop .add_new: set edi, TTabBar:OnSelChange, __FileDlgPathChanged pop edx stdcall StrDup, [edx+TArray.array] stdcall StrCat, eax, txt DIR_SLASH push eax exec edi, TTabBar:InsertTab, -1, eax, 0, 0 stdcall StrDel ; from the stack mov eax, [edi+TTabBar._selected] inc eax set edi, TTabBar:Selected, eax .finish_true: stc popad return .finish_false: clc popad return endp proc __FileListDoubleClick as TWindow.OnMouseButton begin stdcall __FileDialogChangeDir jc .finish set [frmFileDlg], TForm:ModalResult, mrOK .finish: return endp proc __FileListKeyPressed as TWindow.OnKeyEvent begin cmp [.utf8], $08 je .directory_back_forward cmp [.utf8], $0d clc jne .finish stdcall __FileDialogChangeDir jmp .finish .directory_back_forward: test [.kbdState], maskCtrl or maskShift jz .directory_back exec [frmFileDlg.tbPath], TTabBar:Next stc jmp .finish .directory_back: exec [frmFileDlg.tbPath], TTabBar:Prev stc .finish: return endp |
Added freshlib/gui/images/_theme_circle/error.png.
cannot compute difference between binary files
Added freshlib/gui/images/_theme_circle/information.png.
cannot compute difference between binary files
Added freshlib/gui/images/_theme_circle/question.png.
cannot compute difference between binary files
Added freshlib/gui/images/_theme_circle/warning.png.
cannot compute difference between binary files
Added freshlib/gui/images/_theme_rhomb/error.png.
cannot compute difference between binary files
Added freshlib/gui/images/_theme_rhomb/information.png.
cannot compute difference between binary files
Added freshlib/gui/images/_theme_rhomb/question.png.
cannot compute difference between binary files
Added freshlib/gui/images/_theme_rhomb/warning.png.
cannot compute difference between binary files
Added freshlib/gui/images/checkbox/check.png.
cannot compute difference between binary files
Added freshlib/gui/images/checkbox/check.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="13" height="13" viewBox="0 0 13 13" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="check.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/checkbox/check.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata43"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs id="defs41" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview39" showgrid="false" inkscape:zoom="43.153846" inkscape:cx="2.6648841" inkscape:cy="6.5" inkscape:current-layer="Capa_1" /><g id="g3" transform="matrix(0.22441969,0,0,0.22441969,1.4999414,1.5000527)" style="fill:#0000ff;fill-opacity:1"><g id="g5" style="fill:#0000ff;fill-opacity:1"><path d="m 23.297,38.74 c -1.17,1.588 -2.992,2.564 -4.962,2.661 -1.97,0.098 -3.878,-0.696 -5.198,-2.162 L 1.308,26.112 c -1.88,-2.085 -1.713,-5.299 0.372,-7.179 2.087,-1.88 5.299,-1.712 7.179,0.374 l 8.369,9.288 c 0.124,0.138 0.304,0.212 0.489,0.203 0.186,-0.009 0.356,-0.102 0.467,-0.25 L 35.386,5.217 c 1.665,-2.26 4.847,-2.741 7.108,-1.075 2.259,1.666 2.739,4.848 1.073,7.107 L 23.297,38.74 Z" id="path7" inkscape:connector-curvature="0" style="fill:#0000ff;fill-opacity:1" /></g></g><g id="g9" transform="translate(0,-31.560001)" /><g id="g11" transform="translate(0,-31.560001)" /><g id="g13" transform="translate(0,-31.560001)" /><g id="g15" transform="translate(0,-31.560001)" /><g id="g17" transform="translate(0,-31.560001)" /><g id="g19" transform="translate(0,-31.560001)" /><g id="g21" transform="translate(0,-31.560001)" /><g id="g23" transform="translate(0,-31.560001)" /><g id="g25" transform="translate(0,-31.560001)" /><g id="g27" transform="translate(0,-31.560001)" /><g id="g29" transform="translate(0,-31.560001)" /><g id="g31" transform="translate(0,-31.560001)" /><g id="g33" transform="translate(0,-31.560001)" /><g id="g35" transform="translate(0,-31.560001)" /><g id="g37" transform="translate(0,-31.560001)" /></svg> |
Added freshlib/gui/images/checkbox/check_flat.png.
cannot compute difference between binary files
Added freshlib/gui/images/checkbox/check_flat.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="13" height="13" viewBox="0 0 13 13" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="check_flat.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/checkbox/check_flat.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata43"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs id="defs41" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview39" showgrid="false" inkscape:zoom="43.153846" inkscape:cx="6.5" inkscape:cy="6.5" inkscape:current-layer="Capa_1" /><g id="g9" transform="translate(0,-31.560001)" /><g id="g11" transform="translate(0,-31.560001)" /><g id="g13" transform="translate(0,-31.560001)" /><g id="g15" transform="translate(0,-31.560001)" /><g id="g17" transform="translate(0,-31.560001)" /><g id="g19" transform="translate(0,-31.560001)" /><g id="g21" transform="translate(0,-31.560001)" /><g id="g23" transform="translate(0,-31.560001)" /><g id="g25" transform="translate(0,-31.560001)" /><g id="g27" transform="translate(0,-31.560001)" /><g id="g29" transform="translate(0,-31.560001)" /><g id="g31" transform="translate(0,-31.560001)" /><g id="g33" transform="translate(0,-31.560001)" /><g id="g35" transform="translate(0,-31.560001)" /><g id="g37" transform="translate(0,-31.560001)" /><rect style="fill:#e74c3c;fill-opacity:1;stroke:none;stroke-width:1.02100003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect4169" width="5" height="5" x="4" y="4" /></svg> |
Added freshlib/gui/images/checkbox/check_flat_gray.png.
cannot compute difference between binary files
Added freshlib/gui/images/checkbox/check_flat_gray.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="13" height="13" viewBox="0 0 13 13" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="check_flat_gray.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/checkbox/check_flat_gray.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata43"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs id="defs41" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview39" showgrid="false" inkscape:zoom="96.432248" inkscape:cx="4.7837691" inkscape:cy="6.4536542" inkscape:current-layer="Capa_1" /><g id="g9" transform="translate(0,-31.560001)" /><g id="g11" transform="translate(0,-31.560001)" /><g id="g13" transform="translate(0,-31.560001)" /><g id="g15" transform="translate(0,-31.560001)" /><g id="g17" transform="translate(0,-31.560001)" /><g id="g19" transform="translate(0,-31.560001)" /><g id="g21" transform="translate(0,-31.560001)" /><g id="g23" transform="translate(0,-31.560001)" /><g id="g25" transform="translate(0,-31.560001)" /><g id="g27" transform="translate(0,-31.560001)" /><g id="g29" transform="translate(0,-31.560001)" /><g id="g31" transform="translate(0,-31.560001)" /><g id="g33" transform="translate(0,-31.560001)" /><g id="g35" transform="translate(0,-31.560001)" /><g id="g37" transform="translate(0,-31.560001)" /><rect style="fill:#6f6f6f;fill-opacity:1;stroke:none;stroke-width:1.02100003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect4169" width="5" height="5" x="4" y="4" /></svg> |
Added freshlib/gui/images/checkbox/check_gray.png.
cannot compute difference between binary files
Added freshlib/gui/images/checkbox/check_gray.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="13" height="13" viewBox="0 0 13 13" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="check_gray.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/checkbox/check_gray.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata43"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs id="defs41" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview39" showgrid="false" inkscape:zoom="43.153846" inkscape:cx="2.6648841" inkscape:cy="6.5" inkscape:current-layer="Capa_1" /><g id="g3" transform="matrix(0.22441969,0,0,0.22441969,1.4999414,1.5000527)" style="fill:#404040;fill-opacity:1"><g id="g5" style="fill:#404040;fill-opacity:1"><path d="m 23.297,38.74 c -1.17,1.588 -2.992,2.564 -4.962,2.661 -1.97,0.098 -3.878,-0.696 -5.198,-2.162 L 1.308,26.112 c -1.88,-2.085 -1.713,-5.299 0.372,-7.179 2.087,-1.88 5.299,-1.712 7.179,0.374 l 8.369,9.288 c 0.124,0.138 0.304,0.212 0.489,0.203 0.186,-0.009 0.356,-0.102 0.467,-0.25 L 35.386,5.217 c 1.665,-2.26 4.847,-2.741 7.108,-1.075 2.259,1.666 2.739,4.848 1.073,7.107 L 23.297,38.74 Z" id="path7" inkscape:connector-curvature="0" style="fill:#404040;fill-opacity:1" /></g></g><g id="g9" transform="translate(0,-31.560001)" /><g id="g11" transform="translate(0,-31.560001)" /><g id="g13" transform="translate(0,-31.560001)" /><g id="g15" transform="translate(0,-31.560001)" /><g id="g17" transform="translate(0,-31.560001)" /><g id="g19" transform="translate(0,-31.560001)" /><g id="g21" transform="translate(0,-31.560001)" /><g id="g23" transform="translate(0,-31.560001)" /><g id="g25" transform="translate(0,-31.560001)" /><g id="g27" transform="translate(0,-31.560001)" /><g id="g29" transform="translate(0,-31.560001)" /><g id="g31" transform="translate(0,-31.560001)" /><g id="g33" transform="translate(0,-31.560001)" /><g id="g35" transform="translate(0,-31.560001)" /><g id="g37" transform="translate(0,-31.560001)" /></svg> |
Added freshlib/gui/images/error.png.
cannot compute difference between binary files
Added freshlib/gui/images/information.png.
cannot compute difference between binary files
Added freshlib/gui/images/menu/check.png.
cannot compute difference between binary files
Added freshlib/gui/images/menu/check.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="8" height="16" viewBox="0 0 8 16" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="check.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/menu/check.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata43"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs id="defs41" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview39" showgrid="false" inkscape:zoom="35.0625" inkscape:cx="-0.7201426" inkscape:cy="8" inkscape:current-layer="Capa_1" inkscape:snap-page="true" /><g id="g3" transform="matrix(0.17953575,0,0,0.1795327,-4.6834361e-5,4.0001102)" style="fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><g id="g5" style="fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><path d="m 23.297,38.74 c -1.17,1.588 -2.992,2.564 -4.962,2.661 -1.97,0.098 -3.878,-0.696 -5.198,-2.162 L 1.308,26.112 c -1.88,-2.085 -1.713,-5.299 0.372,-7.179 2.087,-1.88 5.299,-1.712 7.179,0.374 l 8.369,9.288 c 0.124,0.138 0.304,0.212 0.489,0.203 0.186,-0.009 0.356,-0.102 0.467,-0.25 L 35.386,5.217 c 1.665,-2.26 4.847,-2.741 7.108,-1.075 2.259,1.666 2.739,4.848 1.073,7.107 L 23.297,38.74 Z" id="path7" inkscape:connector-curvature="0" style="fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g></g><g id="g9" transform="translate(0,-28.560001)" /><g id="g11" transform="translate(0,-28.560001)" /><g id="g13" transform="translate(0,-28.560001)" /><g id="g15" transform="translate(0,-28.560001)" /><g id="g17" transform="translate(0,-28.560001)" /><g id="g19" transform="translate(0,-28.560001)" /><g id="g21" transform="translate(0,-28.560001)" /><g id="g23" transform="translate(0,-28.560001)" /><g id="g25" transform="translate(0,-28.560001)" /><g id="g27" transform="translate(0,-28.560001)" /><g id="g29" transform="translate(0,-28.560001)" /><g id="g31" transform="translate(0,-28.560001)" /><g id="g33" transform="translate(0,-28.560001)" /><g id="g35" transform="translate(0,-28.560001)" /><g id="g37" transform="translate(0,-28.560001)" /></svg> |
Added freshlib/gui/images/menu/check_flat.png.
cannot compute difference between binary files
Added freshlib/gui/images/menu/check_flat.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="7" height="16" viewBox="0 0 7 16" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="check_flat.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/menu/check_flat.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata43"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs id="defs41" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview39" showgrid="false" inkscape:zoom="33.519231" inkscape:cx="-0.93746414" inkscape:cy="8" inkscape:current-layer="Capa_1" inkscape:snap-page="true" /><g id="g3" transform="matrix(0.17953575,0,0,0.1795327,-4.6834361e-5,4.0001102)" style="fill:#e67e22;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><g id="g5" style="fill:#e67e22;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g id="g9" transform="translate(0,-28.560001)" /><g id="g11" transform="translate(0,-28.560001)" /><g id="g13" transform="translate(0,-28.560001)" /><g id="g15" transform="translate(0,-28.560001)" /><g id="g17" transform="translate(0,-28.560001)" /><g id="g19" transform="translate(0,-28.560001)" /><g id="g21" transform="translate(0,-28.560001)" /><g id="g23" transform="translate(0,-28.560001)" /><g id="g25" transform="translate(0,-28.560001)" /><g id="g27" transform="translate(0,-28.560001)" /><g id="g29" transform="translate(0,-28.560001)" /><g id="g31" transform="translate(0,-28.560001)" /><g id="g33" transform="translate(0,-28.560001)" /><g id="g35" transform="translate(0,-28.560001)" /><g id="g37" transform="translate(0,-28.560001)" /><rect style="fill:#e74c3c;fill-opacity:1;stroke:none;stroke-width:1.02100003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect4169" width="7" height="7" x="0" y="4.5" /></svg> |
Added freshlib/gui/images/menu/check_flat_gray.png.
cannot compute difference between binary files
Added freshlib/gui/images/menu/check_flat_gray.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="7" height="16" viewBox="0 0 7 16" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="check_flat_gray.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/menu/check_flat_gray.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata43"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs id="defs41" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview39" showgrid="false" inkscape:zoom="33.519231" inkscape:cx="-0.93746414" inkscape:cy="8" inkscape:current-layer="Capa_1" inkscape:snap-page="true" /><g id="g3" transform="matrix(0.17953575,0,0,0.1795327,-4.6834361e-5,4.0001102)" style="fill:#e67e22;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><g id="g5" style="fill:#e67e22;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g id="g9" transform="translate(0,-28.560001)" /><g id="g11" transform="translate(0,-28.560001)" /><g id="g13" transform="translate(0,-28.560001)" /><g id="g15" transform="translate(0,-28.560001)" /><g id="g17" transform="translate(0,-28.560001)" /><g id="g19" transform="translate(0,-28.560001)" /><g id="g21" transform="translate(0,-28.560001)" /><g id="g23" transform="translate(0,-28.560001)" /><g id="g25" transform="translate(0,-28.560001)" /><g id="g27" transform="translate(0,-28.560001)" /><g id="g29" transform="translate(0,-28.560001)" /><g id="g31" transform="translate(0,-28.560001)" /><g id="g33" transform="translate(0,-28.560001)" /><g id="g35" transform="translate(0,-28.560001)" /><g id="g37" transform="translate(0,-28.560001)" /><rect style="fill:#6e6e6e;fill-opacity:1;stroke:none;stroke-width:1.02100003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect4169" width="7" height="7" x="0" y="4.5" /></svg> |
Added freshlib/gui/images/menu/check_gray.png.
cannot compute difference between binary files
Added freshlib/gui/images/menu/check_gray.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="8" height="16" viewBox="0 0 8 16" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="check_gray.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/menu/check_gray.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata43"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs id="defs41" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview39" showgrid="false" inkscape:zoom="35.0625" inkscape:cx="-0.7201426" inkscape:cy="8" inkscape:current-layer="Capa_1" inkscape:snap-page="true" /><g id="g3" transform="matrix(0.17953575,0,0,0.1795327,-4.6834361e-5,4.0001102)" style="fill:#3f3f3f;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><g id="g5" style="fill:#3f3f3f;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><path d="m 23.297,38.74 c -1.17,1.588 -2.992,2.564 -4.962,2.661 -1.97,0.098 -3.878,-0.696 -5.198,-2.162 L 1.308,26.112 c -1.88,-2.085 -1.713,-5.299 0.372,-7.179 2.087,-1.88 5.299,-1.712 7.179,0.374 l 8.369,9.288 c 0.124,0.138 0.304,0.212 0.489,0.203 0.186,-0.009 0.356,-0.102 0.467,-0.25 L 35.386,5.217 c 1.665,-2.26 4.847,-2.741 7.108,-1.075 2.259,1.666 2.739,4.848 1.073,7.107 L 23.297,38.74 Z" id="path7" inkscape:connector-curvature="0" style="fill:#3f3f3f;fill-opacity:1;stroke:none;stroke-width:4.55629396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g></g><g id="g9" transform="translate(0,-28.560001)" /><g id="g11" transform="translate(0,-28.560001)" /><g id="g13" transform="translate(0,-28.560001)" /><g id="g15" transform="translate(0,-28.560001)" /><g id="g17" transform="translate(0,-28.560001)" /><g id="g19" transform="translate(0,-28.560001)" /><g id="g21" transform="translate(0,-28.560001)" /><g id="g23" transform="translate(0,-28.560001)" /><g id="g25" transform="translate(0,-28.560001)" /><g id="g27" transform="translate(0,-28.560001)" /><g id="g29" transform="translate(0,-28.560001)" /><g id="g31" transform="translate(0,-28.560001)" /><g id="g33" transform="translate(0,-28.560001)" /><g id="g35" transform="translate(0,-28.560001)" /><g id="g37" transform="translate(0,-28.560001)" /></svg> |
Added freshlib/gui/images/menu/submenu.png.
cannot compute difference between binary files
Added freshlib/gui/images/menu/submenu.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="6" height="11" viewBox="0 0 5.9999999 11" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="submenu.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/menu/submenu.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata42"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs id="defs40" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1061" id="namedview38" showgrid="false" inkscape:zoom="51" inkscape:cx="-0.24509804" inkscape:cy="5.5" inkscape:window-x="-4" inkscape:window-y="-4" inkscape:window-maximized="1" inkscape:current-layer="Capa_1" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" /><g id="g3" transform="matrix(0.02139037,0,0,0.03081232,-0.81818182,1.9073486e-6)" style="fill:#000000;fill-opacity:1"><g id="play-arrow" style="fill:#000000;fill-opacity:1"><polygon points="38.25,0 38.25,357 318.75,178.5 " id="polygon6" style="fill:#000000;fill-opacity:1" /></g></g><g id="g8" transform="translate(-7.9999995,-339)" /><g id="g10" transform="translate(-7.9999995,-339)" /><g id="g12" transform="translate(-7.9999995,-339)" /><g id="g14" transform="translate(-7.9999995,-339)" /><g id="g16" transform="translate(-7.9999995,-339)" /><g id="g18" transform="translate(-7.9999995,-339)" /><g id="g20" transform="translate(-7.9999995,-339)" /><g id="g22" transform="translate(-7.9999995,-339)" /><g id="g24" transform="translate(-7.9999995,-339)" /><g id="g26" transform="translate(-7.9999995,-339)" /><g id="g28" transform="translate(-7.9999995,-339)" /><g id="g30" transform="translate(-7.9999995,-339)" /><g id="g32" transform="translate(-7.9999995,-339)" /><g id="g34" transform="translate(-7.9999995,-339)" /><g id="g36" transform="translate(-7.9999995,-339)" /></svg> |
Added freshlib/gui/images/menu/submenugray.png.
cannot compute difference between binary files
Added freshlib/gui/images/menu/submenugray.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="6" height="11" viewBox="0 0 5.9999999 11" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="submenugray.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/menu/submenugray.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata42"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs id="defs40" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1061" id="namedview38" showgrid="false" inkscape:zoom="51" inkscape:cx="3" inkscape:cy="5.5" inkscape:window-x="-4" inkscape:window-y="-4" inkscape:window-maximized="1" inkscape:current-layer="Capa_1" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" /><g id="g3" transform="matrix(0.02139037,0,0,0.03081232,-0.81818182,1.9073486e-6)" style="fill:#95a5a6;fill-opacity:1"><g id="play-arrow" style="fill:#95a5a6;fill-opacity:1"><polygon points="318.75,178.5 38.25,0 38.25,357 " id="polygon6" style="fill:#95a5a6;fill-opacity:1" /></g></g><g id="g8" transform="translate(-7.9999994,-339)" /><g id="g10" transform="translate(-7.9999994,-339)" /><g id="g12" transform="translate(-7.9999994,-339)" /><g id="g14" transform="translate(-7.9999994,-339)" /><g id="g16" transform="translate(-7.9999994,-339)" /><g id="g18" transform="translate(-7.9999994,-339)" /><g id="g20" transform="translate(-7.9999994,-339)" /><g id="g22" transform="translate(-7.9999994,-339)" /><g id="g24" transform="translate(-7.9999994,-339)" /><g id="g26" transform="translate(-7.9999994,-339)" /><g id="g28" transform="translate(-7.9999994,-339)" /><g id="g30" transform="translate(-7.9999994,-339)" /><g id="g32" transform="translate(-7.9999994,-339)" /><g id="g34" transform="translate(-7.9999994,-339)" /><g id="g36" transform="translate(-7.9999994,-339)" /></svg> |
Added freshlib/gui/images/menu/submenusel.png.
cannot compute difference between binary files
Added freshlib/gui/images/menu/submenusel.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="6" height="10.999998" viewBox="0 0 5.9999999 10.999998" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="submenusel.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/menu/submenusel.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"><metadata id="metadata42"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs id="defs40" /><sodipodi:namedview pagecolor="#0000ff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1061" id="namedview38" showgrid="false" inkscape:zoom="51.000009" inkscape:cx="3" inkscape:cy="5.499999" inkscape:window-x="-4" inkscape:window-y="-4" inkscape:window-maximized="1" inkscape:current-layer="Capa_1" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" /><g id="g3" transform="matrix(0.02139037,0,0,0.03081232,-0.81818182,-1.4734863e-7)" style="fill:#ffffff;fill-opacity:1"><g id="play-arrow" style="fill:#ffffff;fill-opacity:1"><polygon points="38.25,0 38.25,357 318.75,178.5 " id="polygon6" style="fill:#ffffff;fill-opacity:1" /></g></g><g id="g8" transform="translate(-7.9999995,-339)" /><g id="g10" transform="translate(-7.9999995,-339)" /><g id="g12" transform="translate(-7.9999995,-339)" /><g id="g14" transform="translate(-7.9999995,-339)" /><g id="g16" transform="translate(-7.9999995,-339)" /><g id="g18" transform="translate(-7.9999995,-339)" /><g id="g20" transform="translate(-7.9999995,-339)" /><g id="g22" transform="translate(-7.9999995,-339)" /><g id="g24" transform="translate(-7.9999995,-339)" /><g id="g26" transform="translate(-7.9999995,-339)" /><g id="g28" transform="translate(-7.9999995,-339)" /><g id="g30" transform="translate(-7.9999995,-339)" /><g id="g32" transform="translate(-7.9999995,-339)" /><g id="g34" transform="translate(-7.9999995,-339)" /><g id="g36" transform="translate(-7.9999995,-339)" /></svg> |
Added freshlib/gui/images/question.png.
cannot compute difference between binary files
Added freshlib/gui/images/svg/error.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 310.285 310.285" style="enable-background:new 0 0 310.285 310.285;" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="error.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/svg/error.png" inkscape:export-xdpi="13.92" inkscape:export-ydpi="13.92"><metadata id="metadata39"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs id="defs37" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview35" showgrid="false" inkscape:zoom="1.6820764" inkscape:cx="60.913725" inkscape:cy="152.51297" inkscape:current-layer="Capa_1" /><rect style="fill:#ffffff;fill-opacity:1" id="rect4167" width="183.70152" height="198.56412" x="67.773376" y="57.62109" /><path d="M264.845,45.441C235.542,16.139,196.582,0,155.143,0S74.743,16.139,45.44,45.441C16.138,74.743,0,113.703,0,155.143 c0,41.439,16.138,80.399,45.44,109.701c29.303,29.303,68.262,45.44,109.702,45.44s80.399-16.138,109.702-45.44 c29.302-29.302,45.44-68.262,45.44-109.701C310.285,113.703,294.147,74.743,264.845,45.441z M189.702,157.985l38.669,38.669 c3.12,3.119,3.12,8.194,0,11.313l-22.333,22.333c-1.507,1.507-3.516,2.337-5.657,2.337c-2.141,0-4.15-0.83-5.657-2.337 l-38.669-38.669c-0.748-0.746-2.08-0.746-2.829,0l-38.669,38.669c-1.507,1.507-3.516,2.337-5.657,2.337 c-2.141,0-4.149-0.83-5.657-2.336l-22.333-22.334c-1.507-1.507-2.337-3.516-2.337-5.656c0-2.142,0.83-4.15,2.337-5.657 l38.669-38.669c0.766-0.767,0.766-2.063-0.001-2.829l-40.302-40.302c-1.507-1.507-2.337-3.516-2.337-5.657 c0-2.141,0.83-4.149,2.337-5.656l22.333-22.333c1.507-1.507,3.516-2.337,5.657-2.337c2.141,0,4.149,0.83,5.656,2.337l40.303,40.303 c0.749,0.747,2.081,0.746,2.828,0l40.303-40.303c1.507-1.507,3.516-2.337,5.657-2.337c2.141,0,4.149,0.83,5.656,2.337l22.333,22.333 c1.507,1.507,2.337,3.516,2.337,5.656c0,2.142-0.83,4.15-2.337,5.658l-40.302,40.301 C188.936,155.923,188.936,157.219,189.702,157.985z" id="path3" style="fill:#e74c3c;fill-opacity:1" /><g id="g5" /><g id="g7" /><g id="g9" /><g id="g11" /><g id="g13" /><g id="g15" /><g id="g17" /><g id="g19" /><g id="g21" /><g id="g23" /><g id="g25" /><g id="g27" /><g id="g29" /><g id="g31" /><g id="g33" /></svg> |
Added freshlib/gui/images/svg/information.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 315.772 315.772" style="enable-background:new 0 0 315.772 315.772;" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="information.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/svg/information.png" inkscape:export-xdpi="13.68" inkscape:export-ydpi="13.68"><metadata id="metadata39"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs id="defs37" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview35" showgrid="false" inkscape:zoom="1.6528479" inkscape:cx="61.990908" inkscape:cy="155.20997" inkscape:current-layer="Capa_1" /><rect style="fill:#ffffff;fill-opacity:1" id="rect4167" width="183.70152" height="222.76477" x="60.613361" y="8.9693317" /><path d="M287.355,0H28.173C17.145,0,8.386,8.472,8.386,19.5v213.822c0,11.028,8.759,19.678,19.787,19.678h67.628 c5.514,0,9.585,4.809,9.585,10.322V302.5c0,9.169,5.476,13.272,10.697,13.272c3.053,0,6.293-1.282,9.423-3.813l62.314-50.482 c5.483-4.431,16.527-8.478,23.576-8.478h75.959c11.028,0,20.031-8.649,20.031-19.678V19.5C307.386,8.472,298.383,0,287.355,0z M182.904,92.834l-26.124,90.563c-1.422,5.357-2.131,8.91-2.131,10.657c0,0.877,0.381,1.75,1.148,2.624 c0.763,0.876,1.583,1.311,2.459,1.311c1.529,0,3.005-0.656,4.427-1.967c3.781-3.067,8.186-8.43,13.213-16.087 c0.347-0.529,1.496-1.585,2.16-0.987l2.682,1.532c0.665,0.574,0.253,1.403-0.021,1.869c-13.096,22.234-26.977,33.347-41.643,33.347 c-5.685,0-10.222-1.614-13.608-4.836c-3.389-3.222-5.083-7.296-5.083-12.215c0-3.279,0.763-7.432,2.295-12.46l18.363-63.123 c1.747-6.009,2.623-10.546,2.623-13.608c0-1.967-0.848-3.714-2.541-5.246c-1.696-1.529-3.963-2.296-6.804-2.296 c-0.579,0-1.185,0.009-1.817,0.028c-0.922,0.026-2.655-0.706-2.359-1.632c0.25-0.779,0.509-1.617,0.618-2.063 c0.507-2.068,5.213-2.185,5.213-2.185l36.527-5.887c0,0,2.912-0.558,4.984-0.558c1.587,0,3.096,0.014,4.127,0 C184.41,89.577,182.904,92.834,182.904,92.834z M189.408,61.987c-3.827,3.771-8.418,5.656-13.772,5.656 c-5.247,0-9.755-1.885-13.526-5.656c-3.771-3.771-5.656-8.333-5.656-13.69c0-5.354,1.857-9.944,5.574-13.772 c3.715-3.825,8.251-5.739,13.608-5.739c5.464,0,10.083,1.914,13.854,5.739c3.771,3.828,5.656,8.419,5.656,13.772 C195.146,53.654,193.232,58.216,189.408,61.987z" id="path3" style="fill:#3498db;fill-opacity:1" /><g id="g5" /><g id="g7" /><g id="g9" /><g id="g11" /><g id="g13" /><g id="g15" /><g id="g17" /><g id="g19" /><g id="g21" /><g id="g23" /><g id="g25" /><g id="g27" /><g id="g29" /><g id="g31" /><g id="g33" /></svg> |
Added freshlib/gui/images/svg/question.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 45.333 45.333" style="enable-background:new 0 0 45.333 45.333;" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="question.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/svg/question.png" inkscape:export-xdpi="95.290001" inkscape:export-ydpi="95.290001"><metadata id="metadata41"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs id="defs39" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview37" showgrid="false" inkscape:zoom="11.513094" inkscape:cx="8.8995661" inkscape:cy="22.282322" inkscape:current-layer="Capa_1" /><g id="g3" style="fill:#2ecc71;fill-opacity:1"><path style="fill:#2ecc71;fill-opacity:1" d="M38.291,4.927c-1.2-1.142-1.792-1.316-1.3-0.481c0.302,0.513,0.555,1.039,0.757,1.58 c0.543,1.457,0.815,2.814,0.815,4.074c0,2.087-0.272,3.803-0.815,5.15c-0.545,1.347-1.217,2.499-2.021,3.454 c-0.805,0.957-1.694,1.772-2.672,2.445c-0.978,0.675-1.903,1.347-2.771,2.021c-0.87,0.674-1.641,1.445-2.315,2.314 c-0.353,0.455-0.637,0.97-0.853,1.544c-0.344,0.915-0.419,2.27-0.419,2.954s-1.97,1.238-4.399,1.238s-4.399-0.657-4.399-1.467 v-1.467c0.131-1.867,0.488-3.432,1.075-4.693c0.587-1.26,1.271-2.336,2.053-3.227c0.783-0.889,1.607-1.662,2.477-2.314 c0.868-0.652,1.673-1.303,2.412-1.956c0.739-0.652,1.337-1.369,1.793-2.151c0.456-0.782,0.661-1.759,0.619-2.933 c0-1.999-0.488-3.476-1.466-4.433c-0.978-0.956-2.338-1.434-4.074-1.434c-1.174,0-2.184,0.228-3.033,0.684 c-0.847,0.456-1.542,1.065-2.085,1.826c-0.545,0.76-0.946,1.651-1.206,2.672c-0.134,0.525-0.234,1.07-0.299,1.635 c-0.105,0.912-2.237,1.658-4.883,1.658s-4.8-1.489-4.475-3.282c0.201-1.109,0.498-2.166,0.89-3.171 c0.759-1.956,1.825-3.651,3.193-5.085c0.047-0.05,0.098-0.096,0.148-0.142c0.084-0.076-1.022,0.527-2.327,1.548 C3.409,7.636,0,14.09,0,21.344c0,10.014,6.496,18.507,15.503,21.505c1.572,0.523,2.256,0.143,1.852-0.834 c-0.238-0.576-0.37-1.205-0.37-1.866c0-2.772,2.291-5.019,5.116-5.019s5.116,2.247,5.116,5.019c0,0.716-0.155,1.395-0.434,2.009 c-0.472,1.042,0.127,1.51,1.728,1.084c9.685-2.577,16.822-11.402,16.822-21.899C45.336,14.882,42.63,9.055,38.291,4.927z" id="path5" /></g><g id="g7" /><g id="g9" /><g id="g11" /><g id="g13" /><g id="g15" /><g id="g17" /><g id="g19" /><g id="g21" /><g id="g23" /><g id="g25" /><g id="g27" /><g id="g29" /><g id="g31" /><g id="g33" /><g id="g35" /></svg> |
Added freshlib/gui/images/svg/warning.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 356.484 356.484" style="enable-background:new 0 0 356.484 356.484;" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="warning.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/gui/images/svg/warning.png" inkscape:export-xdpi="12.12" inkscape:export-ydpi="12.12"><metadata id="metadata39"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs id="defs37" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview35" showgrid="false" inkscape:zoom="1.4640855" inkscape:cx="15.341685" inkscape:cy="166.40318" inkscape:current-layer="Capa_1" /><path style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" d="M 162.55881,58.687198 C 26.637788,317.55186 27.320808,318.9179 27.320808,318.9179 l 299.845872,5.46416 -1.36604,0 -124.9927,-262.962781 2.04906,1.36604" id="path3367" inkscape:connector-curvature="0" /><path d="M354.239,321.64L189.847,22.478c-2.79-5.078-7.01-7.991-11.578-7.991c-4.584,0-8.824,2.931-11.631,8.04L2.245,321.64 c-2.749,5.002-2.984,10.138-0.646,14.09c2.356,3.983,7.023,6.267,12.806,6.267H342.08c5.782,0,10.449-2.284,12.806-6.267 C357.224,331.778,356.988,326.642,354.239,321.64z M154.064,93.621c0.922-0.955,2.166-1.624,3.504-1.624h40.897 c1.338,0,2.581,0.669,3.501,1.624c0.92,0.955,1.4,2.289,1.35,3.627l-5.174,139.618c-0.102,2.735-2.411,5.132-5.147,5.132h-30.298 c-2.738,0-5.043-2.363-5.138-5.099l-4.851-139.584C152.661,95.977,153.143,94.575,154.064,93.621z M178.188,315.435 c-15.386,0-26.988-12.19-26.988-28.355c0-16.36,11.455-28.697,26.646-28.697c15.689,0,26.646,11.801,26.646,28.697 C204.491,303.775,193.675,315.435,178.188,315.435z" id="path3" style="fill:#f1c40f;fill-opacity:1" /><g id="g5" /><g id="g7" /><g id="g9" /><g id="g11" /><g id="g13" /><g id="g15" /><g id="g17" /><g id="g19" /><g id="g21" /><g id="g23" /><g id="g25" /><g id="g27" /><g id="g29" /><g id="g31" /><g id="g33" /></svg> |
Added freshlib/gui/images/treeview/down_flat.png.
cannot compute difference between binary files
Added freshlib/gui/images/treeview/minus_flat.png.
cannot compute difference between binary files
Added freshlib/gui/images/treeview/minus_win.png.
cannot compute difference between binary files
Added freshlib/gui/images/treeview/plus_flat.png.
cannot compute difference between binary files
Added freshlib/gui/images/treeview/plus_win.png.
cannot compute difference between binary files
Added freshlib/gui/images/treeview/render.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash # Not skinned images. cd svg/ for i in *.svg; do svgcleaner --indent 2 --convert-shapes no "$i" "$i" rsvg-convert -o "../${i%.*}.png" "$i" done cd .. for i in *.png; do pngquant -v --ordered -s 1 --strip -f --ext .png 64 -- "$i" printf "\n" done identify -format "%k colors in %f\n" ./*.png |
Added freshlib/gui/images/treeview/right_flat.png.
cannot compute difference between binary files
Added freshlib/gui/images/treeview/svg/down_flat.svg.
> > > | 1 2 3 | <svg viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <path d="m10.407477 2h-9.81495431l4.90747731 8.5z" fill="#95a5a6" stroke="#fff" stroke-width="2"/> </svg> |
Added freshlib/gui/images/treeview/svg/minus_flat.svg.
> > > > > | 1 2 3 4 5 | <svg height="13" viewBox="0 0 13 13" width="13" xmlns="http://www.w3.org/2000/svg"> <rect fill="#fff" height="13" width="13"/> <rect fill="#95a5a6" height="1" width="5" x="4" y="6"/> <circle cx="6.5" cy="6.5" fill="none" r="5" stroke="#95a5a6"/> </svg> |
Added freshlib/gui/images/treeview/svg/plus_flat.svg.
> > > > > > > > | 1 2 3 4 5 6 7 8 | <svg height="13" viewBox="0 0 13 13" width="13" xmlns="http://www.w3.org/2000/svg"> <rect fill="#fff" height="13" width="13"/> <circle cx="6.5" cy="6.5" fill="none" r="5" stroke="#95a5a6"/> <g fill="#95a5a6"> <rect height="5" width="1" x="6" y="4"/> <rect height="1" width="5" x="4" y="6"/> </g> </svg> |
Added freshlib/gui/images/treeview/svg/right_flat.svg.
> > > | 1 2 3 | <svg viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <path d="m2 10.407477 8.5-4.907477-8.5-4.90747731z" fill="#95a5a6" stroke="#fff" stroke-linecap="square" stroke-width="2"/> </svg> |
Added freshlib/gui/images/warning.png.
cannot compute difference between binary files
Added freshlib/gui/mouse.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Provides unified access to standard mouse cursors. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: This file contains OS independent part and includes OS dependent files. ;_________________________________________________________________________________________ module "Mouse library" mcArrow = 0 mcText = 1 mcCross = 2 mcSizeH = 3 mcSizeV = 4 mcSizeUL_LR = 5 mcSizeLL_UR = 6 mcWait = 7 mcArrowWait = 8 mcHand = 9 mcDragHand = 10 mcPencil = 11 mcCount = 12 ; Captures the mouse to the given window. interface __MouseCapture, .hwnd ; Sets a mouse cursor for the given window. interface SetMouseCursor, .hWindow, .hCursor ; Returns a stock cursor defined by mcXXXXX constants. interface GetStockCursor, .index ; This procedure does not actually moves the mouse pointer, but generates all events the same way it was moved. ; Useful for making automatic repeat of different things controlled by the mouse move. For example dragging ; objects with window area auto-scrolling when the pointer lieves the window area. interface ZeroMouseMove proc SetMouseCapture, .window begin pushad xor edi, edi mov esi, [.window] cmp [.window], edi je .setit get edi, esi, TWindow:OSWindow mov edi, [edi+TWindow.handle] .setit: mov [__MouseTarget], esi stdcall __MouseCapture, edi popad return endp include '%TargetOS%/mouse.asm' endmodule |
Added freshlib/gui/syntax/SyntaxFASM.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This file contains procedures and data, that form the appearance of the ; TAsmEdit components. ; ; Target OS: Any ; ; Dependencies: ;_________________________________________________________________________________________ module "FASM syntax highlighter for TAsmEdit" ; syntax contexts. ciText = 0 ciComment = 1 ciString = 2 ciNumber = 3 ciSymbol = 4 ciExtended = $80 ;_________________________________________________________________________________________ ; ; Arguments: ; .pLineInfo - pointer to TTextLine structure. ; .SynContext - input context of the highligher. ; ; Returns: ; eax - output context of the highligher. ; proc SyntaxFASM, .pTextLine, .SynContext .quote_char dd ? .word_start dd ? begin pushad mov esi, [.pTextLine] mov edi, [esi+TTextLine.syn_array] test edi, edi jnz .array_ok stdcall CreateArray, sizeof.TTextChunk mov edi, eax mov [esi+TTextLine.syn_array], eax .array_ok: xor ebx, ebx ; the offset inside the line. xor edx, edx ; the length of the previous character. xor ecx, ecx ; the current chunk start position. mov [.quote_char], ebx mov [edi+TArray.count], ebx .loop: add ebx, edx mov eax, [esi+TTextLine.GapBegin] cmp ebx, eax cmovae eax, [esi+TTextLine.GapEnd] sub eax, [esi+TTextLine.GapBegin] add eax, ebx cmp eax, [esi+TTextLine.Length] jae .end_of_line movzx eax, byte [esi+eax] mov edx, eax ; compute the length of the UTF-8 character by its first byte. not dl ; utf-8 starts with one of: 0xxxxxxx, 110xxxxx, 1110xxxx, 11110xxx, 111110xx, 1111110x bsr edx, edx ; edx = 7, 5, 4, 3, 2, 1 sub edx, 7 ; edx = 0, -2, -3, -4, -5, -6 ; CF = 0, 1, 1, 1, 1, 1 not edx ; eax = -1, +1, +2, +3, +4, +5 sbb edx, -2 ; eax = eax + 2 - CF = +1, +2, +3, +4, +5, +6 cmp [.SynContext], ciString jne .ifnotstr cmp eax, [.quote_char] jne .loop ; end of a quoted string. add ebx, edx xor edx, edx call .end_chunk mov [.SynContext], ciText jmp .loop .ifnotstr: cmp eax, $7f ja .text cmp eax, ';' jne .not_comment ; It is a comment. No need to scan anymore. Mark as comment to the end of the line. call .end_chunk mov [.SynContext], ciComment mov ebx, [esi+TTextLine.Length] add ebx, [esi+TTextLine.GapBegin] sub ebx, [esi+TTextLine.GapEnd] jmp .end_of_line .not_comment: cmp eax, '"' je .string cmp eax, "'" jne .not_string .string: call .end_chunk mov [.SynContext], ciString mov [.quote_char], eax jmp .loop .not_string: call .CharInSymbols jne .notsym cmp [.SynContext], ciSymbol je .loop call .end_chunk mov [.SynContext], ciSymbol jmp .loop .notsym: cmp [.SynContext], ciNumber je .loop cmp [.SynContext], ciSymbol jne .text ; The number begins only after ciSymbol or at the begining of the line. .maybenum: cmp al, '$' je .num_start cmp al, '-' je .num_start cmp al, '+' je .num_start cmp al, '0' jb .text cmp al, '9' ja .text .num_start: call .end_chunk mov [.SynContext], ciNumber jmp .loop .text: cmp [.SynContext], ciText je .loop call .end_chunk mov [.SynContext], ciText jmp .loop .end_of_line: call .end_chunk ; mov eax, [.SynContext] xor eax, eax ; the assembly lines always end with context of 0 ??? mov [esi+TTextLine.syn_array], edi mov [esi+TTextLine.syn_context], eax mov [esp+4*regEAX], eax popad return .end_chunk: push eax edx sub ecx, ebx jz .chunk_processed neg ecx stdcall AddArrayItems, edi, 1 mov edi, edx mov edx, [.SynContext] mov [eax+TTextChunk.color], dl mov [eax+TTextChunk.bytes], cx shr ecx, 16 jz .chunk_processed or [eax+TTextChunk.color], ciExtended stdcall AddArrayItems, edi, 1 mov edi, edx mov [eax+TTextChunk.bytes], cx ; in the second chunk the .bytes field is important. .chunk_processed: mov ecx, ebx ; start new chunk. pop edx eax retn ; Returns ZF=1 (je) if the char is in the symbols list. ; ZF=0 (jne) otherwise. .CharInSymbols: push edi ecx mov edi, .symbol_characters mov ecx, .symbol_characters_len repne scasb pop ecx edi ret .symbol_characters db 20h,'/*=<>()[]{}:,|&~#`;\',09h,0Ah,0Dh,1Ah .symbol_characters_len = $ - .symbol_characters endp endmodule |
Added freshlib/gui/sysevents.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Defines constants and structures for system events of FreshLib ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ module "System events library" mbLeft = 1 mbMiddle = 2 mbRight = 3 mbScrollUp = 4 mbScrollDn = 5 mbScrollLeft = 6 mbScrollRight = 7 maskBtnLeft = $0100 maskBtnMiddle = $0200 maskBtnRight = $0400 maskShift = $1 maskCapsLock = $2 maskCtrl = $4 maskAlt = $8 maskNumLock = $10 maskScrLk = $20 maskLevel3 = $80 ; Mod5 ; These are scan codes for the non character keys. They are OS dependent and should be used by ; their names. include '%TargetOS%/keycodes.inc' scTrack = 1 scUp = 2 scDown = 3 scWheelUp = 4 scWheelDn = 5 scrollX = 0 scrollY = 1 cerFromUser = 0 ; user pressed X button on the window header, pressed alt+F4 from the keyboard, or choose "Close" from the title menu. cerFromProgram = 1 ; Method Close was executed from the program. ; creates and returns a string with the textual identifier of the pressed/released key. proc CreateKeyName, .keycode, .kbdStatus begin push ebx stdcall StrNew mov ebx, eax test [.kbdStatus], maskCtrl jz @f stdcall StrCat, ebx, txt 'Ctrl+' @@: test [.kbdStatus], maskAlt jz @f stdcall StrCat, ebx, txt 'Alt+' @@: test [.kbdStatus], maskShift jz @f stdcall StrCat, ebx, txt 'Shift+' @@: stdcall KbdCodeToName, [.keycode] jc .finish stdcall StrCat, ebx, eax stdcall StrDel, eax mov eax, ebx clc .finish: pop ebx return endp macro keynames lbl, [scancode, name] { common label lbl word forward local ..pname dw scancode dw ..pname - $ + 2 common dw 0 forward ..pname db name, 0 } iglobal if used __FunctionalKeyNames keynames __FunctionalKeyNames, \ keyEscape, 'Esc', \ keyEnter, 'Enter', \ keyHomeNumpad, 'HomeNum', \ keyUpNumpad, 'UpNum', \ keyPgUpNumpad, 'PgUpNum', \ keyLeftNumpad, 'Left', \ key5Numpad, 'Num5', \ keyRightNumpad, 'RightNum', \ keyEndNumpad, 'EndNum', \ keyDownNumpad, 'DownNum', \ keyPgDnNumpad, 'PgDnNum', \ keyInsNumpad, 'InsNum', \ keyDelNumpad, 'DelNum', \ keyEnterNumpad, 'EnterNum', \ keyNumLock, 'NumLock', \ keyScrollLock, 'ScrLock', \ keyPause, 'Pause', \ keyLeft, 'Left', \ keyRight, 'Right', \ keyUp, 'Up', \ keyDown, 'Down', \ keyInsert, 'Ins', \ keyDelete, 'Del', \ keyHome, 'Home', \ keyEnd, 'End', \ keyPgUp, 'PgUp', \ keyPgDown, 'PgDn', \ keyF1, 'F1', \ keyF2, 'F2', \ keyF3, 'F3', \ keyF4, 'F4', \ keyF5, 'F5', \ keyF6, 'F6', \ keyF7, 'F7', \ keyF8, 'F8', \ keyF9, 'F9', \ keyF10, 'F10', \ keyF11, 'F11', \ keyF12, 'F12', \ keyCapsLock, 'CapsLock', \ keyShiftLeft, 'ShiftL', \ keyCtrlLeft, 'LeftCtrl', \ keyAltLeft, 'LeftAlt', \ keyAltRight, 'RightAlt', \ keyPopupMenu, 'PopupMenu', \ keyShiftRight, 'RightShift', \ keyCtrlRight, 'RightCtrl', \ keyBackSpace, 'BkSp', \ keyTab, 'Tab', \ keySpace, 'Space', \ '1', '1', \ '2', '2', \ '3', '3', \ '4', '4', \ '5', '5', \ '6', '6', \ '7', '7', \ '8', '8', \ '9', '9', \ '0', '0', \ keyA, 'A', \ keyB, 'B', \ keyC, 'C', \ keyD, 'D', \ keyE, 'E', \ keyF, 'F', \ keyG, 'G', \ keyH, 'H', \ keyI, 'I', \ keyJ, 'J', \ keyK, 'K', \ keyL, 'L', \ keyM, 'M', \ keyN, 'N', \ keyO, 'O', \ keyP, 'P', \ keyQ, 'Q', \ keyR, 'R', \ keyS, 'S', \ keyT, 'T', \ keyU, 'U', \ keyV, 'V', \ keyW, 'W', \ keyX, 'X', \ keyY, 'Y', \ keyZ, 'Z' end if endg endmodule proc KbdCodeToName, .keycode begin pushad mov esi, __FunctionalKeyNames .loop: movzx ecx, word [esi] jecxz .notfound cmp ecx, [.keycode] je .found add esi, 4 jmp .loop .found: movsx eax, word [esi+2] add esi, eax stdcall StrDupMem, esi mov [esp+4*regEAX], eax clc popad return .notfound: stc popad return endp proc KbdNameToCode, .hKeyname begin pushad mov esi, __FunctionalKeyNames .loop: movzx ecx, word [esi] jecxz .notfound movsx eax, word [esi+2] lea eax, [esi+eax] add esi, 4 stdcall StrCompNoCase, eax, [.hKeyname] jnc .loop .found: mov [esp+4*regEAX], ecx clc popad return .notfound: stc popad return endp |
Added freshlib/gui/textcaret.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Text caret control library. ; ; Target OS: Any ; ; Dependencies: timers.asm; graphics libraries. ; ; Notes: Text caret have always only one instance. ;_________________________________________________________________________________________ module "Text caret library" CARET_MUTEX_WAIT = 2000 ; ms ; the caret is shared resource and can exists only in one instance struct TCaret .pWindow dd ? .pTopWindow dd ? .xOffs dd ? ; the offset between the caret owner window and its top level parent window .yOffs dd ? ; .state dd ? ; 1 if the caret is displayed 0 if not. .visible dd ? .next_time dd ? .Pos TBounds .mxLock TMutex ends uglobal if used CaretAttach Caret TCaret end if endg if used CaretAttach initialize InitTextCaret begin stdcall MutexCreate, 0, Caret.mxLock stdcall MutexRelease, Caret.mxLock return endp finalize FinalizeTextCaret begin stdcall MutexDestroy, Caret.mxLock return endp end if proc __CaretUpdateTopLevel, .pWindow begin pushad stdcall WaitForMutex, Caret.mxLock, CARET_MUTEX_WAIT jc .exit mov esi, [.pWindow] cmp esi, [Caret.pWindow] jne .finish xor ecx, ecx xor edx, edx test esi, esi jz .found .loop: get ebx, esi, TWindow:Parent test ebx, ebx jz .found add ecx, [esi+TWindow._x] add edx, [esi+TWindow._y] mov esi, ebx jmp .loop .found: mov [Caret.xOffs], ecx mov [Caret.yOffs], edx mov [Caret.pTopWindow], esi .finish: stdcall MutexRelease, Caret.mxLock clc .exit: popad return endp ; Attaches the caret to the window, if the window needs caret. proc CaretAttach, .pWindow begin push ecx mov eax,[.pWindow] cmp eax, [Caret.pWindow] je .exit stdcall WaitForMutex, Caret.mxLock, CARET_MUTEX_WAIT jc .exit stdcall __ClearCaret mov eax, [.pWindow] xchg [Caret.pWindow], eax push eax xor eax, eax mov [Caret.Pos.x], eax mov [Caret.Pos.y], eax mov [Caret.Pos.height], eax mov [Caret.Pos.width], eax stdcall __CaretUpdateTopLevel, [Caret.pWindow] stdcall MutexRelease, Caret.mxLock pop eax ; the old window. clc .exit: pop ecx return endp proc CaretChange, .window, .x, .y, .width, .height, .visible begin pushad mov eax, [Caret.pWindow] cmp eax, [.window] jne .exit stdcall WaitForMutex, Caret.mxLock, CARET_MUTEX_WAIT jc .exit stdcall __ClearCaret mov ecx, [.x] mov edx, [.y] mov [Caret.Pos.x], ecx mov [Caret.Pos.y], edx xor eax, eax mov ecx, [.width] mov edx, [.height] inc eax test ecx, ecx cmovz ecx, eax test edx, edx cmovz edx, eax mov [Caret.Pos.width], ecx mov [Caret.Pos.height], edx mov eax, [.visible] mov [Caret.visible], eax ; restart the visible state from the beginning in order to make the moved ; caret move visible. mov [Caret.state], 1 stdcall GetTimestamp add eax, [GUI.caretTimes+4] mov [Caret.next_time], eax cmp [Caret.pWindow], 0 je .release exec [Caret.pWindow], TWindow:RectChangedXY2, [Caret.Pos.x], [Caret.Pos.y], [Caret.Pos.width], [Caret.Pos.height] .release: stdcall MutexRelease, Caret.mxLock clc .exit: popad return endp proc __CaretTimerProc begin pushad stdcall WaitForMutex, Caret.mxLock, CARET_MUTEX_WAIT jc .exit stdcall GetTimestamp mov ebx, eax cmp ebx, [Caret.next_time] jb .release cmp [Caret.pWindow], 0 je .release xor [Caret.state], 1 stdcall __ClearCaret mov eax, [Caret.state] and eax, 1 add ebx, [GUI.caretTimes+4*eax] mov [Caret.next_time], ebx .release: stdcall MutexRelease, Caret.mxLock .exit: popad return endp ; Clears the caret at its present place. proc __ClearCaret begin stdcall WaitForMutex, Caret.mxLock, CARET_MUTEX_WAIT jc .exit cmp [Caret.pWindow], 0 je .finish exec [Caret.pWindow], TWindow:RectChangedXY2, [Caret.Pos.x], [Caret.Pos.y], [Caret.Pos.width], [Caret.Pos.height] .finish: stdcall MutexRelease, Caret.mxLock .exit: return endp proc __PaintCaret, .topWindow, .screen begin stdcall WaitForMutex, Caret.mxLock, CARET_MUTEX_WAIT jc .exit push ebx mov ebx, [.topWindow] cmp ebx, [Caret.pTopWindow] jne .release mov ebx, [.screen] test ebx, ebx jz .release cmp [Caret.state], 0 je .release cmp [Caret.visible], 0 je .release push ecx edx mov ecx, [Caret.Pos.x] mov edx, [Caret.Pos.y] add ecx, [Caret.xOffs] add edx, [Caret.yOffs] ; stdcall XorRect, ebx, ecx, edx, [Caret.Pos.width], [Caret.Pos.height], [GUI.clTextCaret] stdcall BlendSolidRect, ebx, ecx, edx, [Caret.Pos.width], [Caret.Pos.height], [GUI.clTextCaret] ; ????????? does not look good this way... pop edx ecx .release: stdcall MutexRelease, Caret.mxLock pop ebx .exit: return endp endmodule |
Added freshlib/gui/themes.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This file contains procedures and data, that form the appearance of the ; FreshLib GUI application. Colors, control borders, backgrownd drawing etc. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: The user should be able to change these settings and if he uses external ; procedures, then the code from this library should not be compiled. ;_________________________________________________________________________________________ module "Runtime GUI themes support" match =ThemeGUI, ThemeGUI { ThemeGUI equ flat_gui } ; Box border type bxNone = 0 bxRaised = 1 bxSunken = 2 bxFlat = 3 bxFocused = 4 bxNoFill = $80000000 bxDisabled = $40000000 iglobal ; drawing functions. var DrawBox = DrawBoxDefault var DrawSlider = DrawSliderDefault var DrawSplitter = DrawSplitterDefault endg proc DrawBoxDefault, .pImage, .pBounds, .bkground, .border, .brd_width .bounds TBounds begin pushad lea esi, [.bounds] stdcall RectCopy, esi, [.pBounds] mov edx, [.border] and edx, $ff jz .borderok mov eax, [GUI.clBorderLight] mov ecx, [GUI.clBorderDark] test [.border], bxDisabled jz .enabled_ok mov eax, [GUI.clBorderLightGray] mov ecx, [GUI.clBorderDarkGray] .enabled_ok: cmp edx, bxRaised je .colorok xchg eax, ecx cmp edx, bxSunken je .colorok mov eax, [GUI.clBorderNeutralGray] test [.border], bxDisabled jnz .flat_ok mov eax, [GUI.clBorderNeutral] .flat_ok: mov ecx, eax cmp edx, bxFlat je .colorok mov eax, [GUI.clBorderFocused] mov ecx, eax .colorok: mov ebx, [.brd_width] ; left border line stdcall DrawSolidRect, [.pImage], [esi+TBounds.x],[esi+TBounds.y], ebx, [esi+TBounds.height], eax ; top add [esi+TBounds.x], ebx sub [esi+TBounds.width], ebx stdcall DrawSolidRect, [.pImage], [esi+TBounds.x], [esi+TBounds.y], [esi+TBounds.width], ebx, eax ; right sub [esi+TBounds.width], ebx add [esi+TBounds.y], ebx sub [esi+TBounds.height], ebx mov edx, [esi+TBounds.width] add edx, [esi+TBounds.x] stdcall DrawSolidRect, [.pImage], edx, [esi+TBounds.y], ebx, [esi+TBounds.height], ecx ; bottom sub [esi+TBounds.height], ebx mov edx, [esi+TBounds.y] add edx, [esi+TBounds.height] stdcall DrawSolidRect, [.pImage], [esi+TBounds.x], edx, [esi+TBounds.width], ebx, ecx .borderok: bt [.border], 31 jc .fillok stdcall DrawSolidRect, [.pImage], [esi+TBounds.x], [esi+TBounds.y], [esi+TBounds.width], [esi+TBounds.height], [.bkground] .fillok: popad return endp sliderHorizontal = 0 sliderVertical = 1 proc DrawSliderDefault, .pImage, .pBounds, .bkground, .type begin stdcall DrawBoxDefault, [.pImage], [.pBounds], [.bkground], [scrollBorder], 2 return endp proc DrawSplitterDefault, .pImage, .pRect, .type, .pClipRect .rect RECT begin pushad lea eax, [.rect] stdcall RectIntersect, eax, [.pRect], [.pClipRect] jc .finish mov eax, [.rect.right] mov edx, [.rect.bottom] sub eax, [.rect.left] sub edx, [.rect.top] stdcall DrawSolidRect, [.pImage], [.rect.left], [.rect.top], eax, edx, [GUI.clSplitter] .finish: ; mov esi, [.pRect] ; mov eax, [esi+RECT.right] ; mov ecx, [esi+RECT.bottom] ; sub eax, [esi+RECT.left] ; sub ecx, [esi+RECT.top] ; ; stdcall DrawSolidRect, [.pImage], [esi+RECT.left], [esi+RECT.top], eax, ecx, [GUI.clSplitter] popad return endp proc DrawSplitterDefault2, .pImage, .pRect, .type, .pClipRect .bounds TBounds begin pushad mov esi, [.pRect] mov eax, [esi+RECT.left] mov ecx, [esi+RECT.top] mov edx, [esi+RECT.right] mov ebx, [esi+RECT.bottom] sub edx, eax sub ebx, ecx mov [.bounds.x], eax mov [.bounds.y], ecx mov [.bounds.width], edx mov [.bounds.height], ebx lea eax, [.bounds] stdcall DrawBoxDefault, [.pImage], eax, [GUI.clDialogBk], bxSunken, [GUI.boxBorderWidth] popad return endp endmodule |
Added freshlib/gui/themes/asmedit.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This file contains procedures and data, that form the appearance of the ; TAsmEdit components. ; ; Target OS: Any ; ; Dependencies: ;_________________________________________________________________________________________ ;ciText = 0 ;ciComment = 1 ;ciString = 2 ;ciNumber = 3 ;ciSymbol = 4 ;ciRegister = 5 ;ciInstruction = 6 ;ciDerective = 7 ;ciPreprocessor = 8 ;ciMacro = 9 iglobal NamedArray ASM, \ \ \ ; Widgets border colors and width clBackground, HEX, <$ffffffff, $fff8f8f8, $ffff0000, $ff00a0ff>, \ clText, HEX, <$ff000000, $ff8E908C, $ff718C00, $ffDE935F, $ff4080a0, $fff5871f, $ffc82829, $ff4271ae, $ff895Fa8, $ff000000, $ff000000, $ff000000, $ff000000, $ff000000, $ff000000, $ff000000, $ff000000>, \ clProtectedText, HEX, $ffa0a000, \ clSelection, HEX, $602980b9, \ \ clLeftMargin, HEX, $ff404040, \ clLeftMarginEdge, HEX, $ffffffff, \ clLeftMarginText, HEX, $ffffffff, \ clLeftMarginTree, HEX, $ffff0000, \ xspcLMPadding, NUM, 4, \ \ clBookmarkBack, HEX, $ffffd000, \ \ clWrapColumn, HEX, $800000ff, \ \ MouseWheel, NUM, 3, \ \ iconBreakpoints, PNG, <'%lib%/gui/themes/images/asmedit/breakpoint_inactive_light.png', '%lib%/gui/themes/images/asmedit/breakpoint_light.png'>, \ iconDebugInfo, PNG, '%lib%/gui/themes/images/asmedit/debug_icon.png', \ iconFoldings, PNG, <'%lib%/gui/themes/images/asmedit/unfold.png', '%lib%/gui/themes/images/asmedit/fold.png'>, \ iconBookmark, PNG, '%lib%/gui/themes/images/asmedit/bookmark_light.png', \ \ xSpcIcons, NUM, 3, \ \ Options, HEX, aeoDefault, \ \ \ ; Default mono font \ Font, FONT, "Liberation Mono": 13 : fwBold : ffMonospaced, \ ; NumFont, FONT, "Liberation Mono": 12 : fwLight : 0 DispSize "ASM theme data", $ - ASM endg |
Added freshlib/gui/themes/flat_gui.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This file contains procedures and data, that form the appearance of the ; FreshLib GUI application. Colors, control borders, backgrownd drawing etc. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: The user should be able to change these settings and if he uses external ; procedures, then the code from this library should not be compiled. ;_________________________________________________________________________________________ module "GUI theme data and code library" ; Named theme colors ; cyan clTurquoise = $ff1abc9c clTurquoiseL = $ff31e2bf clTurquoiseD = $ff138670 clGreenSea = $ff16A085 ; green clEmerald = $ff2ecc71 clNephritis = $ff27ae60 ; blue clPetermann = $ff3498db clBelizeHole = $ff2980b9 ; purple clAmethyst = $ff9b59b6 clWisteria = $ff8e44ad ; black clBlack = $ff000000 clWetAsphalt = $ff34495e clMidnight = $ff2c3e50 ; gray clConcrete = $ff95a5a6 clAsbestos = $ff7f8c8d ; light gray / white clClouds = $ffecf0f1 clSilver = $ffbdc3c7 clWhite = $ffffffff ; Yellow / orange clSunflower = $fff1c40f clOrange = $fff39c12 ; Brown / orange clCarrot = $ffe67e22 clPumpkin = $ffd35400 ; Red clAlizarin = $ffe74c3c clPomegranate = $ffc0392b clBelizeClouds = $ffc9dce7 ; a blend between clBelizeHole and clClouds iglobal NamedArray GUI, \ \ \ ; Text caret color clTextCaret, HEX, clAlizarin, \ ;(clAlizarin and $00ffffff) or $e0000000, \ caretTimes, NUM, <250, 250>, \ \ ; Widgets border colors and width clBorderNeutral, HEX, clTurquoise, \ clBorderLight, HEX, clTurquoiseL, \ clBorderDark, HEX, clTurquoiseD, \ clBorderNeutralGray, HEX, $ff606060, \ clBorderLightGray, HEX, $ff808080, \ clBorderDarkGray, HEX, $ff404040, \ clBorderFocused, HEX, clAlizarin, \ \ boxBorderWidth, NUM, 2, \ \ \ ; TButton colors and styles. The multivalue fields are for Neutral, Hovered and Pressed states. \ clBtnBk, HEX, <clTurquoise, $ff48c9b0, clGreenSea, $ff7b7b7b>, \ clBtnTxt, HEX, <clWhite, clWhite, clSilver, $d0ffffff>, \ btnBorder, NUM, <bxNone, bxNone, bxNone, bxNone or bxDisabled>, \ btnPressedOfsX, NUM, 0, \ btnPressedOfsY, NUM, 2, \ btnMarginX, NUM, 4, \ btnMarginY, NUM, 4, \ \ \ ; Toolbar buttons colors and styles clToolBtnBk, HEX, <clClouds, clBelizeClouds, clBelizeClouds, clClouds>, \ clToolBtnTxt, HEX, <$ff000000, $ff000000, $ff000000, $80000000>, \ tbBorder, NUM, <bxNone, bxNone, bxNone, bxNone or bxDisabled>, \ tbBorderWidth, NUM, 1, \ tbPressedOfsX, NUM, 0, \ tbPressedOfsY, NUM, 2, \ tbSeparatorType, HEX, bxFlat or bxDisabled, \ tbSeparatorWidth, NUM, 10, \ \ \ ; TEdit colors and styles. \ clEditBk, HEX, clWhite, \ clEditBkFocused, HEX, clWhite, \ clEditTxt, HEX, $ff000000, \ clEditSel, HEX, clBelizeHole and $00ffffff or $60000000, \ clEditSelTxt, HEX, $ffffffff, \ editBorder, NUM, bxFlat, \ editBorderFocused, NUM, bxFlat, \ \ \ ; Dialog boxes and TForm color and styles \ clDialogBk, HEX, clClouds, \ clDialogTxt, HEX, $ff000000, \ clSplitter, HEX, $ff3A7BBB, \ ;clWetAsphalt, \ \ \ ; TProgress colors and styles \ clProgressBk, HEX, clClouds, \ clProgressBar, HEX, clAmethyst, \ progressBorder, NUM, bxFlat, \ \ \ ; TScrollbar colors and styles \ clScrollBk, HEX, <clSilver and $3fffffff, clSilver and $a0ffffff>, \ clScrollSlider, HEX, <clAsbestos and $7fffffff, clTurquoise>, \ clScrollSliderOvf, HEX, <clOrange and $3fffffff, clOrange>, \ borderScroll, NUM, bxNone, \ scrollWidth, NUM, 12, \ minSliderHeight, NUM, 24, \ \ \ ; TLabel colors and styles \ clLabelBk, HEX, clClouds, \ clLabelTxt, HEX, $ff000000, \ \ \ ; TTreeView colors and styles. \ clTreeViewBack, HEX, $ffffffff, \ clTreeViewText, HEX, clBlack, \ clTreeSelected, HEX, clBelizeClouds, \ clTreeSelectedTxt, HEX, clBlack, \ clTreeFocused, HEX, clBelizeHole, \ clTreeFocusedTxt, HEX, clWhite, \ clTreeFocused2, HEX, clWetAsphalt, \ clTreeFocused2Txt, HEX, clWhite, \ clTreeViewLines, HEX, clSilver, \ \ tvBorder, NUM, bxFlat, \ \ tvIcons, PNG, <"%lib%/gui/images/treeview/plus_flat.png", "%lib%/gui/images/treeview/minus_flat.png">, \ \ \ ; TMenu colors and styles \ clMenuBack, HEX, clClouds, \ clMenuText, HEX, $ff000000, \ clMenuTextGray, HEX, $90000000, \ clMenuSelection, HEX, clBelizeHole, \ clMenuSelIcon, HEX, clBelizeClouds, \ borderMenu, NUM, bxFlat, \ menuIconMargin, NUM, 4, \ menuSeparatorHeight,NUM, 12, \ menuMinTextDist, NUM, 32, \ menuSubIcon, PNG, "%lib%/gui/images/menu/submenu.png", \ menuSubIconSel, PNG, "%lib%/gui/images/menu/submenusel.png", \ menuSubIconGray, PNG, "%lib%/gui/images/menu/submenugray.png", \ \ \ ; Menu graphics \ iconMenuChecked, PNG, "%lib%/gui/images/menu/check_flat.png", \ iconMenuCheckedGray, PNG, "%lib%/gui/images/menu/check_flat_gray.png", \ \ \ ; Checkbox colors \ clCheckboxBack, HEX, <$ffffffff, $ffffffff, $ffc0c0c0, $80c0c0c0>, \ clCheckboxTxt, HEX, $ff000000, \ clCheckboxTxtGray, HEX, $ff606060, \ cbIconSize, NUM, 13, \ cbMargin, NUM, 2, \ borderCheckbox, NUM, bxFlat, \ iconChecked, PNG, "%lib%/gui/images/checkbox/check_flat.png", \ iconCheckedGray, PNG, "%lib%/gui/images/checkbox/check_flat_gray.png", \ \ \ ; TabBar control \ maxTabWidth, NUM, 180, \ tabMarginX, NUM, 4, \ tabMarginY, NUM, 4, \ clTabBk, HEX, <clClouds, clBelizeClouds, clBelizeClouds>, \ clTabTxt, HEX, $ff000000, \ \ \ ; Grid control clGridCellBk, HEX, <$ffffffff, clClouds, clBelizeClouds, clBelizeHole, clWetAsphalt>, \ ; <regular, fixed, selected, focused, focused2> background color. clGridCellTxt, HEX, <$ff000000, $ff000000, $ff000000, $ffffffff, $ffffffff>, \ ; <regular, fixed, selected, focused, focused2> foreground color. clGridLines, HEX, <$00000000, $ffc0c0c0, $00000000, clTurquoise>, \ ;top-left data, bottom-right data, top-left fixed, bottom-right fixed. \ \ ; ListView control lvIconMargin, NUM, 2, \ \ \ ; Dialogs images \ iconDialogs, PNG, <"%lib%/gui/themes/images/msgbox/error.png", "%lib%/gui/themes/images/msgbox/information.png", "%lib%/gui/themes/images/msgbox/question.png", "%lib%/gui/themes/images/msgbox/warning.png">, \ iconDirectory, PNG, <"%lib%/gui/themes/images/files/dir_light.png", "%lib%/gui/themes/images/files/dir_link_light.png">, \ iconFile, PNG, <"%lib%/gui/themes/images/files/file_light.png", "%lib%/gui/themes/images/files/file_link_light.png">, \ bgChessboard, PNG, "%lib%/gui/themes/images/chessboard.png", \ \ \ ; Default font \ DefaultFont, FONT, "Inter": 12 : fwMedium : 0, \ HintFont, FONT, "Liberation Sans": 12 : fwNormal : 0, \ DefaultMono, FONT, "Liberation Mono": 11 : fwNormal : ffMonospaced, \ \ \ ; Mouse settings \ DoubleClickTime, NUM, 600, \ DoubleClickDistance, NUM, 8 endg endmodule |
Added freshlib/gui/themes/images/asmedit/bookmark_dark.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/asmedit/bookmark_light.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/asmedit/breakpoint_dark.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/asmedit/breakpoint_inactive_dark.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/asmedit/breakpoint_inactive_light.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/asmedit/breakpoint_light.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/asmedit/debug_icon.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/asmedit/fold.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/asmedit/render.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #!/bin/bash # Not skinned images. cd src/ # The dark skin ln -s -f ./skin_dark.css ./skin.css rsvg-convert -o ../bookmark_dark.png bookmark.svg rsvg-convert -o ../breakpoint_dark.png breakpoint.svg rsvg-convert -o ../breakpoint_inactive_dark.png breakpoint_inactive.svg # The light skin ln -s -f ./skin_light.css ./skin.css rsvg-convert -o ../bookmark_light.png bookmark.svg rsvg-convert -o ../breakpoint_light.png breakpoint.svg rsvg-convert -o ../breakpoint_inactive_light.png breakpoint_inactive.svg rm ./skin.css cd .. for i in *.png; do optipng -o6 -strip all -- "$i" # pngquant -v -s 1 --strip -f --ext .png -- "$i" printf "\n" done |
Added freshlib/gui/themes/images/asmedit/src/bookmark.svg.
> > > > | 1 2 3 4 | <?xml-stylesheet href="./skin.css" type="text/css"?> <svg version="1.1" viewBox="0 0 14 8" xmlns="http://www.w3.org/2000/svg"> <path id="bookmark_toggle" class="primary" d="m0 8v-8h13.5l-4 4 4 4z"/> </svg> |
Added freshlib/gui/themes/images/asmedit/src/breakpoint.svg.
> > > > | 1 2 3 4 | <?xml-stylesheet href="./skin.css" type="text/css"?> <svg version="1.1" viewBox="0 0 6 6" xmlns="http://www.w3.org/2000/svg"> <rect class="important" width="6" height="6"/> </svg> |
Added freshlib/gui/themes/images/asmedit/src/breakpoint_inactive.svg.
> > > > | 1 2 3 4 | <?xml-stylesheet href="./skin.css" type="text/css"?> <svg version="1.1" viewBox="0 0 6 6" xmlns="http://www.w3.org/2000/svg"> <rect class="gray" width="6" height="6"/> </svg> |
Added freshlib/gui/themes/images/asmedit/src/skin_dark.css.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | .fresh { background-color:#303030; stroke: none; } /* The main outline/fill color of the skin.*/ .primary { fill: #ffcc00; } .back { fill: #000000; } /* The color that need to stay "grayed" (less emphasize) */ .gray { fill: #a0a0a0; } /* The color that need to stay some kind of emphasized. */ .emphasize { fill: #00ccff; } /* Very important color */ .important { fill: #ff0084; } /* Colors with meaning */ .error { fill: #ff1800; } .warning { fill: #e3ff00; } .info { fill: #00ccff; } .always_light { fill: #ffffff; } /* Categories icons */ .cat1 { fill: #00ffff; } .cat2 { fill: #cc80ff; } .cat3 { fill: #00FF00; } .cat4 { fill: #FFC0C0; } .cat5 { fill: #FF9000; } .cat6 { fill: #ffffff; } |
Added freshlib/gui/themes/images/asmedit/src/skin_light.css.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | .fresh { background-color:#d4d0c8; stroke: none; } /* The main outline/fill color of the light skin.*/ .primary { fill: #3A7BBB; } .back { fill: #ffffff; } /* The color that need to stay "grayed" (less emphasize) */ .gray { fill: #606060; } /* The color that need to stay some kind of emphasized. */ .emphasize { fill: #5730FF; } /* Very important color */ .important { fill: #ff005d; } /* Colors with meaning */ .error { fill: #ff0000; } .warning { fill: #009000; } .info { fill: #0000ff; } .always_light { fill: #ffffff; } /* Categories icons */ .cat1 { fill: #388FA1; } .cat2 { fill: #8d2ea1; } .cat3 { fill: #39a139; } .cat4 { fill: #FF4C26; } .cat5 { fill: #FFA233; } .cat6 { fill: #212121; } |
Added freshlib/gui/themes/images/asmedit/unfold.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/chessboard.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/files/dir_dark.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/files/dir_light.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/files/dir_link_dark.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/files/dir_link_light.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/files/file_dark.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/files/file_light.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/files/file_link_dark.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/files/file_link_light.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/files/render.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #!/bin/bash # Not skinned images. cd src/ # The dark skin ln -s -f ./skin_dark.css ./skin.css rsvg-convert -h 16 -o ../dir_dark.png dir.svg rsvg-convert -h 16 -o ../file_dark.png file.svg rsvg-convert -h 16 -o ../dir_link_dark.png dir_link.svg rsvg-convert -h 16 -o ../file_link_dark.png file_link.svg # The light skin ln -s -f ./skin_light.css ./skin.css rsvg-convert -h 16 -o ../dir_light.png dir.svg rsvg-convert -h 16 -o ../file_light.png file.svg rsvg-convert -h 16 -o ../dir_link_light.png dir_link.svg rsvg-convert -h 16 -o ../file_link_light.png file_link.svg rm ./skin.css cd .. for i in *.png; do pngquant -v --ordered -s 1 --strip -f --ext .png 64 -- "$i" printf "\n" done identify -format "%k colors in %f\n" ./*.png |
Added freshlib/gui/themes/images/files/src/dir.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet href="./skin.css" type="text/css"?><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" class="fresh" style="fill:#c0c0c0;stroke:none" version="1.1" id="svg6" sodipodi:docname="directory.svg" inkscape:version="0.92.4 5da689c313, 2019-01-14" inkscape:export-filename="/work/asmwork/FreshFs/trunk/source/images/svg/feather/ready/messages.svg.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <metadata id="metadata12"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title></dc:title> </cc:Work> </rdf:RDF> </metadata> <defs id="defs10" /> <sodipodi:namedview pagecolor="#ffffff" bordercolor="#00b764" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="1" inkscape:pageshadow="2" inkscape:window-width="2560" inkscape:window-height="1418" id="namedview8" showgrid="true" inkscape:current-layer="svg6" inkscape:showpageshadow="false" showborder="true" showguides="true" inkscape:lockguides="true" inkscape:snap-others="false" inkscape:object-nodes="false" inkscape:snap-nodes="true" inkscape:snap-global="true" inkscape:snap-to-guides="true" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:snap-grids="true" inkscape:snap-page="true" inkscape:snap-object-midpoints="true" inkscape:snap-text-baseline="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:object-paths="false" inkscape:snap-intersection-paths="false" inkscape:snap-smooth-nodes="false" inkscape:snap-midpoints="false" inkscape:snap-center="true" inkscape:guide-bbox="true" inkscape:zoom="51.208333" inkscape:cx="7.2965927" inkscape:cy="8.199566" inkscape:window-x="1366" inkscape:window-y="0" inkscape:window-maximized="1" fit-margin-top="2" fit-margin-left="1" fit-margin-right="1" fit-margin-bottom="2"> <inkscape:grid type="xygrid" id="grid142" spacingx="1" spacingy="1" dotted="false" empspacing="16" snapvisiblegridlinesonly="false" color="#3f3fff" opacity="0.25098039" empcolor="#3f3fff" empopacity="0.75294118" originx="-128" originy="0" /> </sodipodi:namedview> <path id="path166" d="M 1,2 H 8 V 4 H 1 Z m 0,3 h 14 v 9 H 1 Z" inkscape:connector-curvature="0" class="cat5" sodipodi:nodetypes="cccccccccc" style="stroke-width:1px" /> <path class="back" d="M 1,4 H 8 V 5 H 1 Z" id="path168" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc" /> </svg> |
Added freshlib/gui/themes/images/files/src/dir_link.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet href="./skin.css" type="text/css"?><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" class="fresh" style="fill:#c0c0c0;stroke:none" version="1.1" id="svg6" sodipodi:docname="dir_link.svg" inkscape:version="0.92.4 5da689c313, 2019-01-14" inkscape:export-filename="/work/asmwork/FreshFs/trunk/source/images/svg/feather/ready/messages.svg.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <metadata id="metadata12"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title /> </cc:Work> </rdf:RDF> </metadata> <defs id="defs10" /> <sodipodi:namedview pagecolor="#ffffff" bordercolor="#00b764" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="1" inkscape:pageshadow="2" inkscape:window-width="1366" inkscape:window-height="746" id="namedview8" showgrid="true" inkscape:current-layer="svg6" inkscape:showpageshadow="false" showborder="true" showguides="true" inkscape:lockguides="true" inkscape:snap-others="false" inkscape:object-nodes="false" inkscape:snap-nodes="true" inkscape:snap-global="true" inkscape:snap-to-guides="true" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:snap-grids="true" inkscape:snap-page="true" inkscape:snap-object-midpoints="true" inkscape:snap-text-baseline="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:object-paths="false" inkscape:snap-intersection-paths="false" inkscape:snap-smooth-nodes="false" inkscape:snap-midpoints="false" inkscape:snap-center="true" inkscape:guide-bbox="true" inkscape:zoom="18.10488" inkscape:cx="0.49269966" inkscape:cy="7.2331573" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" fit-margin-top="2" fit-margin-left="1" fit-margin-right="1" fit-margin-bottom="2"> <inkscape:grid type="xygrid" id="grid142" spacingx="1" spacingy="1" dotted="false" empspacing="16" snapvisiblegridlinesonly="false" color="#3f3fff" opacity="0.25098039" empcolor="#3f3fff" empopacity="0.75294118" originx="-128" originy="0" /> </sodipodi:namedview> <path id="path166" d="M 1,2 H 8 V 4 H 1 Z m 0,3 h 14 v 9 H 1 Z" inkscape:connector-curvature="0" class="cat5" sodipodi:nodetypes="cccccccccc" style="stroke-width:1px" /> <path class="back" d="M 1,4 H 8 V 5 H 1 Z" id="path168" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc" /> <rect id="rect11" width="6" height="1" x="6" y="9" class="back" style="stroke-width:0.81649661" /> <rect y="14.349242" x="-2.3786798" height="1" width="4" id="rect22" transform="rotate(-45)" class="back" /> <rect id="rect24" width="4" height="1" x="11.056349" y="-1.9142135" transform="rotate(45)" class="back" /> </svg> |
Added freshlib/gui/themes/images/files/src/file.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet href="./skin.css" type="text/css"?><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" class="fresh" style="fill:#c0c0c0;stroke:none" version="1.1" id="svg6" sodipodi:docname="file.svg" inkscape:version="0.92.4 5da689c313, 2019-01-14" inkscape:export-filename="/work/asmwork/FreshFs/trunk/source/images/svg/feather/ready/messages.svg.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <metadata id="metadata12"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title></dc:title> </cc:Work> </rdf:RDF> </metadata> <defs id="defs10" /> <sodipodi:namedview pagecolor="#ffffff" bordercolor="#00b764" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="1" inkscape:pageshadow="2" inkscape:window-width="2560" inkscape:window-height="1418" id="namedview8" showgrid="true" inkscape:current-layer="svg6" inkscape:showpageshadow="false" showborder="true" showguides="true" inkscape:lockguides="true" inkscape:snap-others="false" inkscape:object-nodes="false" inkscape:snap-nodes="true" inkscape:snap-global="true" inkscape:snap-to-guides="true" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:snap-grids="true" inkscape:snap-page="true" inkscape:snap-object-midpoints="true" inkscape:snap-text-baseline="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:object-paths="false" inkscape:snap-intersection-paths="false" inkscape:snap-smooth-nodes="false" inkscape:snap-midpoints="false" inkscape:snap-center="true" inkscape:guide-bbox="true" inkscape:zoom="3.925" inkscape:cx="-12.181479" inkscape:cy="-0.0067102485" inkscape:window-x="1366" inkscape:window-y="0" inkscape:window-maximized="1"> <inkscape:grid type="xygrid" id="grid142" spacingx="1" spacingy="1" dotted="false" empspacing="16" snapvisiblegridlinesonly="false" color="#3f3fff" opacity="0.25098039" empcolor="#3f3fff" empopacity="0.75294118" /> </sodipodi:namedview> <g id="new"> <path sodipodi:nodetypes="ccccccccccc" inkscape:connector-curvature="0" d="m 9,1 4,4 H 9 Z M 3,1 V 15 H 13 V 6 H 8 V 1 Z" id="new1" class="primary" /> <path class="back" inkscape:connector-curvature="0" id="new2" d="m 8,1 v 5 h 5 V 5 H 9 V 1 Z" sodipodi:nodetypes="ccccccc" /> </g> </svg> |
Added freshlib/gui/themes/images/files/src/file_link.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet href="./skin.css" type="text/css"?><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" viewBox="0 0 16 16" class="fresh" style="fill:#c0c0c0;stroke:none" version="1.1" id="svg6" sodipodi:docname="file_link.svg" inkscape:version="0.92.4 5da689c313, 2019-01-14" inkscape:export-filename="/work/asmwork/FreshFs/trunk/source/images/svg/feather/ready/messages.svg.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <metadata id="metadata12"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title /> </cc:Work> </rdf:RDF> </metadata> <defs id="defs10" /> <sodipodi:namedview pagecolor="#ffffff" bordercolor="#00b764" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="1" inkscape:pageshadow="2" inkscape:window-width="1366" inkscape:window-height="746" id="namedview8" showgrid="true" inkscape:current-layer="svg6" inkscape:showpageshadow="false" showborder="true" showguides="true" inkscape:lockguides="true" inkscape:snap-others="false" inkscape:object-nodes="false" inkscape:snap-nodes="true" inkscape:snap-global="true" inkscape:snap-to-guides="true" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:snap-grids="true" inkscape:snap-page="true" inkscape:snap-object-midpoints="true" inkscape:snap-text-baseline="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:object-paths="false" inkscape:snap-intersection-paths="false" inkscape:snap-smooth-nodes="false" inkscape:snap-midpoints="false" inkscape:snap-center="true" inkscape:guide-bbox="true" inkscape:zoom="31.4" inkscape:cx="1.6850614" inkscape:cy="7.4953033" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1"> <inkscape:grid type="xygrid" id="grid142" spacingx="1" spacingy="1" dotted="false" empspacing="16" snapvisiblegridlinesonly="false" color="#3f3fff" opacity="0.25098039" empcolor="#3f3fff" empopacity="0.75294118" /> </sodipodi:namedview> <g id="new"> <path sodipodi:nodetypes="ccccccccccc" inkscape:connector-curvature="0" d="m 9,1 4,4 H 9 Z M 3,1 V 15 H 13 V 6 H 8 V 1 Z" id="new1" class="primary" /> <path class="back" inkscape:connector-curvature="0" id="new2" d="m 8,1 v 5 h 5 V 5 H 9 V 1 Z" sodipodi:nodetypes="ccccccc" /> </g> <rect id="rect11" width="6" height="1" x="5" y="10" class="back" /> <rect y="14.349241" x="-3.7928934" height="1" width="4" id="rect22" transform="rotate(-45)" class="back" /> <rect id="rect24" width="4" height="1" x="11.056348" y="-0.5" transform="rotate(45)" class="back" /> </svg> |
Added freshlib/gui/themes/images/files/src/set-dark.
> > | 1 2 | #!/bin/bash ln -s -f ./skin_dark.css ./skin.css |
Added freshlib/gui/themes/images/files/src/set-light.
> > | 1 2 | #!/bin/bash ln -s -f ./skin_light.css ./skin.css |
Added freshlib/gui/themes/images/files/src/skin_dark.css.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | .fresh { background-color:#303030; stroke: none; } /* The main outline/fill color of the skin.*/ .primary { fill: #ffcc00; } .back { fill: #000000; } /* The color that need to stay "grayed" (less emphasize) */ .gray { fill: #a0a0a0; } /* The color that need to stay some kind of emphasized. */ .emphasize { fill: #00ccff; } /* Very important color */ .important { fill: #ff0084; } /* Colors with meaning */ .error { fill: #ff1800; } .warning { fill: #e3ff00; } .info { fill: #00ccff; } .always_light { fill: #ffffff; } /* Categories icons */ .cat1 { fill: #00ffff; } .cat2 { fill: #cc80ff; } .cat3 { fill: #00FF00; } .cat4 { fill: #FFC0C0; } .cat5 { fill: #FF9000; } .cat6 { fill: #ffffff; } |
Added freshlib/gui/themes/images/files/src/skin_light.css.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | .fresh { background-color:#d4d0c8; stroke: none; } /* The main outline/fill color of the light skin.*/ .primary { fill: #3A7BBB; } .back { fill: #ffffff; } /* The color that need to stay "grayed" (less emphasize) */ .gray { fill: #606060; } /* The color that need to stay some kind of emphasized. */ .emphasize { fill: #5730FF; } /* Very important color */ .important { fill: #ff005d; } /* Colors with meaning */ .error { fill: #ff0000; } .warning { fill: #009000; } .info { fill: #0000ff; } .always_light { fill: #ffffff; } /* Categories icons */ .cat1 { fill: #388FA1; } .cat2 { fill: #8d2ea1; } .cat3 { fill: #39a139; } .cat4 { fill: #FF4C26; } .cat5 { fill: #FFA233; } .cat6 { fill: #212121; } |
Added freshlib/gui/themes/images/msgbox/error.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/msgbox/information.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/msgbox/question.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/msgbox/warning.png.
cannot compute difference between binary files
Added freshlib/gui/themes/images/src/chessboard.svg.
> > > > > > > | 1 2 3 4 5 6 7 | <?xml-stylesheet href="./skin.css" type="text/css"?> <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" > <rect x="0" y="0" width="8" height="8" fill="#606060"/> <rect x="8" y="8" width="8" height="8" fill="#606060"/> <rect x="8" y="0" width="8" height="8" fill="#b0b0b0"/> <rect x="0" y="8" width="8" height="8" fill="#b0b0b0"/> </svg> |
Added freshlib/gui/themes/win_gui.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This file contains procedures and data, that form the appearance of the ; FreshLib GUI application. Colors, control borders, backgrownd drawing etc. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: The user should be able to change these settings and if he uses external ; procedures, then the code from this library should not be compiled. ;_________________________________________________________________________________________ module "GUI theme data and code library" ; Theme colors and other parameters as margins, offsets, fonts, etc. iglobal NamedArray GUI, \ \ \ ; Text caret color clTextCaret, HEX, $ffff0000, \ ;$0000ffff, \ caretTimes, NUM, <250, 250>, \ \ ; Widgets border colors and width clBorderNeutral, HEX, $ffa0a0a0, \ clBorderLight, HEX, $ffffffff, \ clBorderDark, HEX, $ff404040, \ clBorderNeutralGray, HEX, $ff909090, \ clBorderLightGray, HEX, $ffe0e0e0, \ clBorderDarkGray, HEX, $ff808080, \ clBorderFocused, HEX, $ffff8000, \ \ boxBorderWidth, NUM, 1, \ \ \ ; TButton colors and styles. The multivalue fields are for Neutral, Hovered and Pressed states. \ clBtnBk, HEX, <$ffd4d0c8, $ffe0e0e0, $ffa0a0a0, $80d4d0c8>, \ clBtnTxt, HEX, <$ff000000, $ff000000, $ff000000, $ff606060>, \ btnBorder, NUM, <bxRaised, bxRaised, bxSunken, bxRaised or bxDisabled>, \ btnPressedOfsX, NUM, 1, \ btnPressedOfsY, NUM, 1, \ btnMarginX, NUM, 4, \ btnMarginY, NUM, 4, \ \ \ ; Toolbar buttons colors and styles clToolBtnBk, HEX, <$ffd4d0c8, $ffe0e0e0, $ffa0a0a0, $80d4d0c8>, \ clToolBtnTxt, HEX, <$ff000000, $ff000000, $ff000000, $ff606060>, \ tbBorder, NUM, <bxNone, bxRaised, bxSunken, bxNone or bxDisabled>, \ tbBorderWidth, NUM, 1, \ tbPressedOfsX, NUM, 1, \ tbPressedOfsY, NUM, 1, \ tbSeparatorType, HEX, bxSunken, \ tbSeparatorWidth, NUM, 10, \ \ \ ; TEdit colors and styles. \ clEditBk, HEX, $ffffffff, \ clEditBkFocused, HEX, $ffffffff, \ clEditTxt, HEX, $ff000000, \ clEditSel, HEX, $600a246c, \ clEditSelTxt, HEX, $ffffffff, \ editBorder, NUM, bxSunken, \ editBorderFocused, NUM, bxSunken, \ \ \ ; Dialog boxes and TForm color and styles \ clDialogBk, HEX, $ffd4d0c8, \ clDialogTxt, HEX, $ff000000, \ clSplitter, HEX, $ff606060, \ \ \ ; TProgress colors and styles \ clProgressBk, HEX, $ffd4d0c8, \ clProgressBar, HEX, $ff0a246c, \ progressBorder, NUM, bxSunken, \ \ \ ; TScrollbar colors and styles \ clScrollBk, HEX, <$c0808080, $ff808080>, \ clScrollSlider, HEX, <$c0e0e0e0, $ffe0e0e0>, \ clScrollSliderOvf, HEX, <$c0ff8080, $ffff8080>, \ borderScroll, NUM, bxRaised, \ scrollWidth, NUM, 12, \ minSliderHeight, NUM, 24, \ \ \ ; TLabel colors and styles \ clLabelBk, HEX, $00ffffff, \ clLabelTxt, HEX, $ff000000, \ \ \ ; TTreeView colors and styles. \ clTreeViewBack, HEX, $ffffffff, \ clTreeViewText, HEX, $ff000000, \ clTreeSelected, HEX, $ff0a246c, \ clTreeSelectedTxt, HEX, $ffffffff, \ clTreeFocused, HEX, $ff0a246c, \ clTreeFocusedTxt, HEX, $ffffff00, \ clTreeFocused2, HEX, $ff808080, \ clTreeFocused2Txt, HEX, $ffffffff, \ clTreeViewLines, HEX, $ffd0d0d0, \ \ tvBorder, NUM, bxSunken, \ \ tvIcons, PNG, <"%lib%/gui/images/treeview/plus_win.png", "%lib%/gui/images/treeview/minus_win.png">, \ \ \ ; TMenu colors and styles \ clMenuBack, HEX, $ffd4d0c8, \ clMenuText, HEX, $ff000000, \ clMenuTextGray, HEX, $80000000, \ clMenuSelection, HEX, $ff000080, \ clMenuSelIcon, HEX, $ffadaabb, \ borderMenu, NUM, bxRaised, \ menuIconMargin, NUM, 4, \ menuSeparatorHeight,NUM, 10, \ menuMinTextDist, NUM, 32, \ menuSubIcon, PNG, "%lib%/gui/images/menu/submenu.png", \ menuSubIconSel, PNG, "%lib%/gui/images/menu/submenusel.png", \ menuSubIconGray, PNG, "%lib%/gui/images/menu/submenugray.png", \ \ \ ; Menu graphics \ iconMenuChecked, PNG, "%lib%/gui/images/menu/check.png", \ iconMenuCheckedGray,PNG, "%lib%/gui/images/menu/check_gray.png", \ \ \ ; Checkbox colors \ clCheckboxBack, HEX, <$ffffffff, $ffffffff, $ffffffff, $ffc0c0c0>, \ clCheckboxTxt, HEX, $ff000000, \ clCheckboxTxtGray, HEX, $ff808080, \ cbIconSize, NUM, 13, \ cbMargin, NUM, 2, \ borderCheckbox, NUM, bxSunken, \ iconChecked, PNG, "%lib%/gui/images/checkbox/check.png", \ iconCheckedGray, PNG, "%lib%/gui/images/checkbox/check_gray.png", \ \ \ ; TabBar control \ maxTabWidth, NUM, 180, \ tabMarginX, NUM, 4, \ tabMarginY, NUM, 4, \ clTabBk, HEX, <$ffd4d0c8, $ffe0e0e0, $ffe0e0e0>, \ clTabTxt, HEX, $ff000000, \ \ \ ; Grid control clGridCellBk, HEX, <$ffffffff, $ffd4d0c8, $ff82C8FC, $ff0a246c, $ff808080>, \ ; <regular, fixed, selected, focused> background color. clGridCellTxt, HEX, <$ff000000, $ff000000, $ff000000, $ffffffff, $ffffffff>, \ ; <regular, fixed, selected, focused> text color. clGridLines, HEX, <$00000000, $ffd4d0c8, $ffffffff, $ff000000>, \ ;top-left data, bottom-right data, top-left fixed, bottom-right fixed. \ \ ; ListView control lvIconMargin, NUM, 3, \ \ \ ; Dialogs images \ iconDialogs, PNG, <"%lib%/gui/themes/images/msgbox/error.png", "%lib%/gui/themes/images/msgbox/information.png", "%lib%/gui/themes/images/msgbox/question.png", "%lib%/gui/themes/images/msgbox/warning.png">, \ iconDirectory, PNG, <"%lib%/gui/themes/images/files/dir_light.png", "%lib%/gui/themes/images/files/dir_link_light.png">, \ iconFile, PNG, <"%lib%/gui/themes/images/files/file_light.png", "%lib%/gui/themes/images/files/file_link_light.png">, \ bgChessboard, PNG, "%lib%/gui/themes/images/chessboard.png", \ \ \ ; Default font \ DefaultFont, FONT, "Tahoma":11:fwNormal:0, \ HintFont, FONT, "Tahoma": 12 : fwNormal : 0, \ DefaultMono, FONT, "Courier New": 11 : fwNormal : ffMonospaced, \ \ \ ; Mouse settings \ DoubleClickTime, NUM, 600, \ DoubleClickDistance, NUM, 8 endg endmodule |
Deleted freshlib/imports/Linux/_libX11.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Linux/_libXft.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Linux/allimports.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added freshlib/imports/Linux/libFC.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: FontConfig import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto 'libfontconfig.so.1', \ FcInit, <VOID>, 'FcInit', \ FcFini, <VOID>, 'FcFini', \ FcInitLoadConfigAndFonts, <VOID>, 'FcInitLoadConfigAndFonts', \ FcPatternCreate, <VOID>, 'FcPatternCreate', \ FcObjectSetBuild, <.first, ...>, 'FcObjectSetBuild', \ FcObjectSetDestroy, <.pObjectSet>, 'FcObjectSetDestroy', \ FcFontList, <.config, .pPattern, .ObjSet>, 'FcFontList', \ FcPatternGetString, <.pPattern, .obj, .n, .pBuffer>, 'FcPatternGetString', \ FcPatternGetInteger, <.pPattern, .obj, .n, .pInt>, 'FcPatternGetInteger', \ FcFontSetDestroy, <.pFontSet>, 'FcFontSetDestroy', \ FcNameParse, <.name>, 'FcNameParse', \ FcConfigSubstitute, <.config, .pattern, .matchkind>, 'FcConfigSubstitute', \ FcDefaultSubstitute, <.pattern>, 'FcDefaultSubstitute', \ FcFontMatch, <.config, .pattern, .pResult>, 'FcFontMatch', \ FcPatternDestroy, <.pattern>, 'FcPatternDestroy', \ FcPatternPrint, <.pattern>, 'FcPatternPrint' |
Added freshlib/imports/Linux/libFT.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: MIT_SHM extension import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto 'libfreetype.so.6', \ FT_Init_FreeType, <.pLibrary>, 'FT_Init_FreeType', \ FT_New_Face, <.library, .filename, .idxFace, .pFace>, 'FT_New_Face', \ FT_Set_Char_Size, <.pFace, .width, .height, .hRes, .vRes>, 'FT_Set_Char_Size', \ FT_Set_Pixel_Sizes, <.pFace, .pxWidth, .pxHeight>, 'FT_Set_Pixel_Sizes', \ FT_Request_Size, <.pFace, .pReq>, 'FT_Request_Size', \ FT_Select_Size, <.pFace, .i>, 'FT_Select_Size', \ FT_Get_Char_Index, <.pFace, .char>, 'FT_Get_Char_Index', \ FT_Load_Glyph, <.pFace, .idxGlyph, .flags>, 'FT_Load_Glyph', \ FT_Render_Glyph, <.pSlot, .RenderMode>, 'FT_Render_Glyph', \ FT_Done_Face, <.pFace>, 'FT_Done_Face', \ FT_Glyph_To_Bitmap, <.pGlyph, .render_mode, .pOrigin, .destroy>, 'FT_Glyph_To_Bitmap', \ FT_Get_Kerning, <.face, .left_glyph, .right_glyph, .kern_mode, .pKerning>, 'FT_Get_Kerning', \ FT_Get_Advance, <.face, .gindex, .load_flags, .pAdvance>, 'FT_Get_Advance', \ FTC_Manager_New, <.library, .max_faces, .max_sizes, \ .max_bytes, .requester, .req_data, .pManager>, 'FTC_Manager_New', \ FTC_Manager_LookupFace, <.manager, .face_id, .pFace>, 'FTC_Manager_LookupFace', \ FTC_Manager_LookupSize, <.manager, .scaler, .pSize>, 'FTC_Manager_LookupSize', \ FTC_Manager_RemoveFaceID, <.manager, .face_id>, 'FTC_Manager_RemoveFaceID', \ FTC_ImageCache_New, <.manager, .pImageCache>, 'FTC_ImageCache_New', \ FTC_ImageCache_Lookup, <.cache, .type, .glyph_index, \ .pGlyph, .pNode>, 'FTC_ImageCache_Lookup', \ FTC_ImageCache_LookupScaler, <.cache, .scaler, .load_flags, \ .gindex, .pGlyph, .pNode>, 'FTC_ImageCache_LookupScaler', \ FTC_CMapCache_New, <.manager, .pCMapCache>, 'FTC_CMapCache_New', \ FTC_CMapCache_Lookup, <.cache, .face_id, .cmap_index, .char_code>, 'FTC_CMapCache_Lookup' |
Added freshlib/imports/Linux/libX11.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: libX11 (XLib) import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Needs editing of the function arguments ;_________________________________________________________________________________________ import_proto 'libX11.so', \ XActivateScreenSaver ,<NONE>, 'XActivateScreenSaver', \ XAddConnectionWatch ,<NONE>, 'XAddConnectionWatch', \ XAddExtension ,<NONE>, 'XAddExtension', \ XAddHost ,<NONE>, 'XAddHost', \ XAddHosts ,<NONE>, 'XAddHosts', \ XAddPixel ,<NONE>, 'XAddPixel', \ XAddToExtensionList ,<NONE>, 'XAddToExtensionList', \ XAddToSaveSet ,<NONE>, 'XAddToSaveSet', \ XAllPlanes ,<NONE>, 'XAllPlanes', \ XAllocClassHint ,<NONE>, 'XAllocClassHint', \ XAllocColor ,<NONE>, 'XAllocColor', \ XAllocColorCells ,<NONE>, 'XAllocColorCells', \ XAllocColorPlanes ,<NONE>, 'XAllocColorPlanes', \ XAllocIconSize ,<NONE>, 'XAllocIconSize', \ XAllocNamedColor ,<NONE>, 'XAllocNamedColor', \ XAllocSizeHints ,<NONE>, 'XAllocSizeHints', \ XAllocStandardColormap ,<NONE>, 'XAllocStandardColormap', \ XAllocWMHints ,<NONE>, 'XAllocWMHints', \ XAllowEvents ,<NONE>, 'XAllowEvents', \ XAutoRepeatOff ,<NONE>, 'XAutoRepeatOff', \ XAutoRepeatOn ,<NONE>, 'XAutoRepeatOn', \ XBaseFontNameListOfFontSet ,<NONE>, 'XBaseFontNameListOfFontSet', \ XBell ,<NONE>, 'XBell', \ XBitmapBitOrder ,<NONE>, 'XBitmapBitOrder', \ XBitmapPad ,<NONE>, 'XBitmapPad', \ XBitmapUnit ,<NONE>, 'XBitmapUnit', \ XBlackPixel ,<NONE>, 'XBlackPixel', \ XBlackPixelOfScreen ,<NONE>, 'XBlackPixelOfScreen', \ XCellsOfScreen ,<NONE>, 'XCellsOfScreen', \ XChangeActivePointerGrab ,<NONE>, 'XChangeActivePointerGrab', \ XChangeGC ,<NONE>, 'XChangeGC', \ XChangeKeyboardControl ,<NONE>, 'XChangeKeyboardControl', \ XChangeKeyboardMapping ,<NONE>, 'XChangeKeyboardMapping', \ XChangePointerControl ,<NONE>, 'XChangePointerControl', \ XChangeProperty ,<.display, .wnd, .property, .type, .format, .mode, .pData, .n_elements>, 'XChangeProperty', \ XChangeSaveSet ,<NONE>, 'XChangeSaveSet', \ XChangeWindowAttributes ,<.display, .hwnd, .valmask, .pSetWinAttr>, 'XChangeWindowAttributes', \ XCheckIfEvent ,<.display, .pEvent, .ProcIf, .Param>, 'XCheckIfEvent', \ XCheckMaskEvent ,<.display, .event_mask, .pEvent>, 'XCheckMaskEvent', \ XCheckTypedEvent ,<.display, .event_type, .pEvent>, 'XCheckTypedEvent', \ XCheckTypedWindowEvent ,<NONE>, 'XCheckTypedWindowEvent', \ XCheckWindowEvent ,<NONE>, 'XCheckWindowEvent', \ XCirculateSubwindows ,<NONE>, 'XCirculateSubwindows', \ XCirculateSubwindowsDown ,<NONE>, 'XCirculateSubwindowsDown', \ XCirculateSubwindowsUp ,<NONE>, 'XCirculateSubwindowsUp', \ XClearArea ,<.display, .window, .x, .y, .width, .height, .exposures>, 'XClearArea', \ XClearWindow ,<NONE>, 'XClearWindow', \ XClipBox ,<NONE>, 'XClipBox', \ XCloseDisplay ,<NONE>, 'XCloseDisplay', \ XCloseIM ,<NONE>, 'XCloseIM', \ XCloseOM ,<NONE>, 'XCloseOM', \ XConfigureWindow ,<NONE>, 'XConfigureWindow', \ XConnectionNumber ,<.display>, 'XConnectionNumber', \ XContextDependentDrawing ,<NONE>, 'XContextDependentDrawing', \ XContextualDrawing ,<NONE>, 'XContextualDrawing', \ XConvertCase ,<.keysym, .pLowerRet, .pUpperRet>, 'XConvertCase', \ XConvertSelection ,<.display, .selection, .target, .property, .requestor, .time>, 'XConvertSelection', \ XCopyArea ,<.display, .src, .dst, .context, .SrcX, .SrcY, .width, .height, .destX, .destY>, 'XCopyArea', \ XCopyColormapAndFree ,<NONE>, 'XCopyColormapAndFree', \ XCopyGC ,<NONE>, 'XCopyGC', \ XCopyPlane ,<NONE>, 'XCopyPlane', \ XCreateBitmapFromData ,<NONE>, 'XCreateBitmapFromData', \ XCreateColormap ,<NONE>, 'XCreateColormap', \ XCreateFontCursor ,<NONE>, 'XCreateFontCursor', \ XCreateFontSet ,<NONE>, 'XCreateFontSet', \ XCreateGC ,<.display, .drawable, .mask, .pValues>, 'XCreateGC', \ XCreateGlyphCursor ,<NONE>, 'XCreateGlyphCursor', \ XCreateIC ,<NONE>, 'XCreateIC', \ XCreateImage ,<NONE>, 'XCreateImage', \ XCreateOC ,<NONE>, 'XCreateOC', \ XCreatePixmap ,<.display, .drawable, .width, .height, .depth>, 'XCreatePixmap', \ XCreatePixmapCursor ,<NONE>, 'XCreatePixmapCursor', \ XCreatePixmapFromBitmapData ,<NONE>, 'XCreatePixmapFromBitmapData', \ XCreateRegion ,<NONE>, 'XCreateRegion', \ XCreateSimpleWindow ,<.display, .parent, .x, .y, .width, .height, .widthBorder, .clBorder, .clBackground>, 'XCreateSimpleWindow', \ XCreateWindow ,<.display, .parent, .x, .y, .width, .height, .widthBorder, .depth, .class, .visual, .valuemask, .pAttributes>, 'XCreateWindow', \ XDefaultColormap ,<NONE>, 'XDefaultColormap', \ XDefaultColormapOfScreen ,<NONE>, 'XDefaultColormapOfScreen', \ XDefaultDepth ,<NONE>, 'XDefaultDepth', \ XDefaultDepthOfScreen ,<NONE>, 'XDefaultDepthOfScreen', \ XDefaultGC ,<NONE>, 'XDefaultGC', \ XDefaultGCOfScreen ,<NONE>, 'XDefaultGCOfScreen', \ XDefaultRootWindow ,<NONE>, 'XDefaultRootWindow', \ XDefaultScreen ,<NONE>, 'XDefaultScreen', \ XDefaultScreenOfDisplay ,<NONE>, 'XDefaultScreenOfDisplay', \ XDefaultString ,<NONE>, 'XDefaultString', \ XDefaultVisual ,<NONE>, 'XDefaultVisual', \ XDefaultVisualOfScreen ,<NONE>, 'XDefaultVisualOfScreen', \ XDefineCursor ,<NONE>, 'XDefineCursor', \ XDeleteContext ,<NONE>, 'XDeleteContext', \ XDeleteModifiermapEntry ,<NONE>, 'XDeleteModifiermapEntry', \ XDeleteProperty ,<NONE>, 'XDeleteProperty', \ XDestroyIC ,<NONE>, 'XDestroyIC', \ XDestroyImage ,<NONE>, 'XDestroyImage', \ XDestroyOC ,<NONE>, 'XDestroyOC', \ XDestroyRegion ,<NONE>, 'XDestroyRegion', \ XDestroySubwindows ,<NONE>, 'XDestroySubwindows', \ XDestroyWindow ,<NONE>, 'XDestroyWindow', \ XDirectionalDependentDrawing ,<NONE>, 'XDirectionalDependentDrawing', \ XDisableAccessControl ,<NONE>, 'XDisableAccessControl', \ XDisplayCells ,<NONE>, 'XDisplayCells', \ XDisplayHeight ,<NONE>, 'XDisplayHeight', \ XDisplayHeightMM ,<NONE>, 'XDisplayHeightMM', \ XDisplayKeycodes ,<NONE>, 'XDisplayKeycodes', \ XDisplayMotionBufferSize ,<NONE>, 'XDisplayMotionBufferSize', \ XDisplayName ,<NONE>, 'XDisplayName', \ XDisplayOfIM ,<NONE>, 'XDisplayOfIM', \ XDisplayOfOM ,<NONE>, 'XDisplayOfOM', \ XDisplayOfScreen ,<NONE>, 'XDisplayOfScreen', \ XDisplayPlanes ,<NONE>, 'XDisplayPlanes', \ XDisplayString ,<NONE>, 'XDisplayString', \ XDisplayWidth ,<NONE>, 'XDisplayWidth', \ XDisplayWidthMM ,<NONE>, 'XDisplayWidthMM', \ XDoesBackingStore ,<NONE>, 'XDoesBackingStore', \ XDoesSaveUnders ,<NONE>, 'XDoesSaveUnders', \ XDrawArc ,<NONE>, 'XDrawArc', \ XDrawArcs ,<NONE>, 'XDrawArcs', \ XDrawImageString ,<NONE>, 'XDrawImageString', \ XDrawImageString16 ,<NONE>, 'XDrawImageString16', \ XDrawLine ,<NONE>, 'XDrawLine', \ XDrawLines ,<NONE>, 'XDrawLines', \ XDrawPoint ,<NONE>, 'XDrawPoint', \ XDrawPoints ,<NONE>, 'XDrawPoints', \ XDrawRectangle ,<NONE>, 'XDrawRectangle', \ XDrawRectangles ,<NONE>, 'XDrawRectangles', \ XDrawSegments ,<NONE>, 'XDrawSegments', \ XDrawString ,<NONE>, 'XDrawString', \ XDrawString16 ,<NONE>, 'XDrawString16', \ XDrawText ,<NONE>, 'XDrawText', \ XDrawText16 ,<NONE>, 'XDrawText16', \ XEHeadOfExtensionList ,<NONE>, 'XEHeadOfExtensionList', \ XESetBeforeFlush ,<NONE>, 'XESetBeforeFlush', \ XESetCloseDisplay ,<NONE>, 'XESetCloseDisplay', \ XESetCopyGC ,<NONE>, 'XESetCopyGC', \ XESetCreateFont ,<NONE>, 'XESetCreateFont', \ XESetCreateGC ,<NONE>, 'XESetCreateGC', \ XESetError ,<NONE>, 'XESetError', \ XESetErrorString ,<NONE>, 'XESetErrorString', \ XESetEventToWire ,<NONE>, 'XESetEventToWire', \ XESetFlushGC ,<NONE>, 'XESetFlushGC', \ XESetFreeFont ,<NONE>, 'XESetFreeFont', \ XESetFreeGC ,<NONE>, 'XESetFreeGC', \ XESetPrintErrorValues ,<NONE>, 'XESetPrintErrorValues', \ XESetWireToError ,<NONE>, 'XESetWireToError', \ XESetWireToEvent ,<NONE>, 'XESetWireToEvent', \ XEmptyRegion ,<NONE>, 'XEmptyRegion', \ XEnableAccessControl ,<NONE>, 'XEnableAccessControl', \ XEqualRegion ,<NONE>, 'XEqualRegion', \ XEventMaskOfScreen ,<NONE>, 'XEventMaskOfScreen', \ XEventsQueued ,<NONE>, 'XEventsQueued', \ XExtendedMaxRequestSize ,<NONE>, 'XExtendedMaxRequestSize', \ XExtentsOfFontSet ,<NONE>, 'XExtentsOfFontSet', \ XFetchBuffer ,<.display, .nbytes_return, .buffer>, 'XFetchBuffer', \ XFetchBytes ,<.display, .nbytes_return>, 'XFetchBytes', \ XFetchName ,<.display, .window, .window_name_return>, 'XFetchName', \ XFillArc ,<NONE>, 'XFillArc', \ XFillArcs ,<NONE>, 'XFillArcs', \ XFillPolygon ,<NONE>, 'XFillPolygon', \ XFillRectangle ,<NONE>, 'XFillRectangle', \ XFillRectangles ,<NONE>, 'XFillRectangles', \ XFilterEvent ,<NONE>, 'XFilterEvent', \ XFindContext ,<NONE>, 'XFindContext', \ XFindOnExtensionList ,<NONE>, 'XFindOnExtensionList', \ XFlush ,<.display>, 'XFlush', \ XFlushGC ,<NONE>, 'XFlushGC', \ XFontsOfFontSet ,<NONE>, 'XFontsOfFontSet', \ XForceScreenSaver ,<NONE>, 'XForceScreenSaver', \ XFree ,<.ptr>, 'XFree', \ XFreeColormap ,<NONE>, 'XFreeColormap', \ XFreeColors ,<NONE>, 'XFreeColors', \ XFreeCursor ,<NONE>, 'XFreeCursor', \ XFreeExtensionList ,<NONE>, 'XFreeExtensionList', \ XFreeFont ,<NONE>, 'XFreeFont', \ XFreeFontInfo ,<NONE>, 'XFreeFontInfo', \ XFreeFontNames ,<NONE>, 'XFreeFontNames', \ XFreeFontPath ,<NONE>, 'XFreeFontPath', \ XFreeFontSet ,<NONE>, 'XFreeFontSet', \ XFreeGC ,<NONE>, 'XFreeGC', \ XFreeModifiermap ,<NONE>, 'XFreeModifiermap', \ XFreePixmap ,<NONE>, 'XFreePixmap', \ XFreeStringList ,<NONE>, 'XFreeStringList', \ XGContextFromGC ,<NONE>, 'XGContextFromGC', \ XGeometry ,<NONE>, 'XGeometry', \ XGetAtomName ,<NONE>, 'XGetAtomName', \ XGetAtomNames ,<NONE>, 'XGetAtomNames', \ XGetClassHint ,<NONE>, 'XGetClassHint', \ XGetCommand ,<NONE>, 'XGetCommand', \ XGetDefault ,<NONE>, 'XGetDefault', \ XGetErrorDatabaseText ,<NONE>, 'XGetErrorDatabaseText', \ XGetErrorText ,<NONE>, 'XGetErrorText', \ XGetFontPath ,<NONE>, 'XGetFontPath', \ XGetFontProperty ,<NONE>, 'XGetFontProperty', \ XGetGCValues ,<NONE>, 'XGetGCValues', \ XGetGeometry ,<NONE>, 'XGetGeometry', \ XGetICValues ,<NONE>, 'XGetICValues', \ XGetIMValues ,<NONE>, 'XGetIMValues', \ XGetIconName ,<NONE>, 'XGetIconName', \ XGetIconSizes ,<NONE>, 'XGetIconSizes', \ XGetImage ,<NONE>, 'XGetImage', \ XGetInputFocus ,<NONE>, 'XGetInputFocus', \ XGetKeyboardControl ,<NONE>, 'XGetKeyboardControl', \ XGetKeyboardMapping ,<NONE>, 'XGetKeyboardMapping', \ XGetModifierMapping ,<NONE>, 'XGetModifierMapping', \ XGetMotionEvents ,<NONE>, 'XGetMotionEvents', \ XGetNormalHints ,<NONE>, 'XGetNormalHints', \ XGetOCValues ,<NONE>, 'XGetOCValues', \ XGetOMValues ,<NONE>, 'XGetOMValues', \ XGetPixel ,<NONE>, 'XGetPixel', \ XGetPointerControl ,<NONE>, 'XGetPointerControl', \ XGetPointerMapping ,<NONE>, 'XGetPointerMapping', \ XGetRGBColormaps ,<NONE>, 'XGetRGBColormaps', \ XGetScreenSaver ,<NONE>, 'XGetScreenSaver', \ XGetSelectionOwner ,<.display, .selection>, 'XGetSelectionOwner', \ XGetSizeHints ,<NONE>, 'XGetSizeHints', \ XGetStandardColormap ,<NONE>, 'XGetStandardColormap', \ XGetSubImage ,<NONE>, 'XGetSubImage', \ XGetTextProperty ,<NONE>, 'XGetTextProperty', \ XGetTransientForHint ,<NONE>, 'XGetTransientForHint', \ XGetVisualInfo ,<NONE>, 'XGetVisualInfo', \ XGetWMClientMachine ,<NONE>, 'XGetWMClientMachine', \ XGetWMColormapWindows ,<NONE>, 'XGetWMColormapWindows', \ XGetWMHints ,<NONE>, 'XGetWMHints', \ XGetWMIconName ,<NONE>, 'XGetWMIconName', \ XGetWMName ,<NONE>, 'XGetWMName', \ XGetWMNormalHints ,<NONE>, 'XGetWMNormalHints', \ XGetWMProtocols ,<NONE>, 'XGetWMProtocols', \ XGetWMSizeHints ,<NONE>, 'XGetWMSizeHints', \ XGetWindowAttributes ,<.display, .hwin, .pWinAttr>, 'XGetWindowAttributes', \ XGetWindowProperty ,<.display, .hwin, .property, .offset, .length, .delete, .req_type, .pTypeRet, .pFormatRet, .pNItemsRet, .pRemainsRet, .pDataRet>, 'XGetWindowProperty', \ XGetZoomHints ,<NONE>, 'XGetZoomHints', \ XGrabButton ,<NONE>, 'XGrabButton', \ XGrabKey ,<NONE>, 'XGrabKey', \ XGrabKeyboard ,<NONE>, 'XGrabKeyboard', \ XGrabPointer ,<NONE>, 'XGrabPointer', \ XGrabServer ,<NONE>, 'XGrabServer', \ XHeightMMOfScreen ,<NONE>, 'XHeightMMOfScreen', \ XHeightOfScreen ,<NONE>, 'XHeightOfScreen', \ XIMOfIC ,<NONE>, 'XIMOfIC', \ XIconifyWindow ,<NONE>, 'XIconifyWindow', \ XIfEvent ,<.display, .pEvent, .IfProc, .user>, 'XIfEvent', \ XImageByteOrder ,<NONE>, 'XImageByteOrder', \ XInitExtension ,<NONE>, 'XInitExtension', \ XInitImage ,<NONE>, 'XInitImage', \ XInitThreads ,<NONE>, 'XInitThreads', \ XInsertModifiermapEntry ,<NONE>, 'XInsertModifiermapEntry', \ XInstallColormap ,<NONE>, 'XInstallColormap', \ XInternAtom ,<.display, .atom_name, .only_if_exists>, 'XInternAtom', \ XInternAtoms ,<.display, .names, .count, .only_if_exists, .atoms_return>,'XInternAtoms', \ XInternalConnectionNumbers ,<NONE>, 'XInternalConnectionNumbers', \ XIntersectRegion ,<NONE>, 'XIntersectRegion', \ XKeycodeToKeysym ,<.display, .keycode, .index>, 'XKeycodeToKeysym', \ XKeysymToKeycode ,<.display, .keysym>, 'XKeysymToKeycode', \ XKeysymToString ,<.keysym>, 'XKeysymToString', \ XKillClient ,<NONE>, 'XKillClient', \ XLastKnownRequestProcessed ,<NONE>, 'XLastKnownRequestProcessed', \ XListDepths ,<NONE>, 'XListDepths', \ XListExtensions ,<NONE>, 'XListExtensions', \ XListFonts ,<NONE>, 'XListFonts', \ XListFontsWithInfo ,<NONE>, 'XListFontsWithInfo', \ XListHosts ,<NONE>, 'XListHosts', \ XListInstalledColormaps ,<NONE>, 'XListInstalledColormaps', \ XListPixmapFormats ,<NONE>, 'XListPixmapFormats', \ XListProperties ,<NONE>, 'XListProperties', \ XLoadFont ,<NONE>, 'XLoadFont', \ XLoadQueryFont ,<NONE>, 'XLoadQueryFont', \ XLocaleOfFontSet ,<NONE>, 'XLocaleOfFontSet', \ XLocaleOfIM ,<NONE>, 'XLocaleOfIM', \ XLocaleOfOM ,<NONE>, 'XLocaleOfOM', \ XLockDisplay ,<NONE>, 'XLockDisplay', \ XLookupColor ,<NONE>, 'XLookupColor', \ XLookupKeysym ,<NONE>, 'XLookupKeysym', \ XLookupString ,<NONE>, 'XLookupString', \ XLowerWindow ,<NONE>, 'XLowerWindow', \ XMapRaised ,<NONE>, 'XMapRaised', \ XMapSubwindows ,<NONE>, 'XMapSubwindows', \ XMapWindow ,<NONE>, 'XMapWindow', \ XMaskEvent ,<.display, .event_mask, .pEventReturn>, 'XMaskEvent', \ XMatchVisualInfo ,<NONE>, 'XMatchVisualInfo', \ XMaxCmapsOfScreen ,<NONE>, 'XMaxCmapsOfScreen', \ XMaxRequestSize ,<NONE>, 'XMaxRequestSize', \ XMinCmapsOfScreen ,<NONE>, 'XMinCmapsOfScreen', \ XMoveResizeWindow ,<NONE>, 'XMoveResizeWindow', \ XMoveWindow ,<NONE>, 'XMoveWindow', \ XNewModifiermap ,<NONE>, 'XNewModifiermap', \ XNextEvent ,<NONE>, 'XNextEvent', \ XNextRequest ,<NONE>, 'XNextRequest', \ XNoOp ,<NONE>, 'XNoOp', \ XOMOfOC ,<NONE>, 'XOMOfOC', \ XOffsetRegion ,<NONE>, 'XOffsetRegion', \ XOpenDisplay ,<NONE>, 'XOpenDisplay', \ XOpenIM ,<NONE>, 'XOpenIM', \ XOpenOM ,<NONE>, 'XOpenOM', \ XParseColor ,<NONE>, 'XParseColor', \ XParseGeometry ,<NONE>, 'XParseGeometry', \ XPeekEvent ,<NONE>, 'XPeekEvent', \ XPeekIfEvent ,<NONE>, 'XPeekIfEvent', \ XPending ,<NONE>, 'XPending', \ XPlanesOfScreen ,<NONE>, 'XPlanesOfScreen', \ XPointInRegion ,<NONE>, 'XPointInRegion', \ XPolygonRegion ,<NONE>, 'XPolygonRegion', \ XProcessInternalConnection ,<NONE>, 'XProcessInternalConnection', \ XProtocolRevision ,<NONE>, 'XProtocolRevision', \ XProtocolVersion ,<NONE>, 'XProtocolVersion', \ XPutBackEvent ,<.Disp, .pEvent>, 'XPutBackEvent', \ XPutImage ,<.Disp, .Drawable, .context, .pXImage, .SrcX, .SrcY, .DestX, .DestY, .width, .height>, 'XPutImage', \ XPutPixel ,<NONE>, 'XPutPixel', \ XQLength ,<NONE>, 'XQLength', \ XQueryBestCursor ,<NONE>, 'XQueryBestCursor', \ XQueryBestSize ,<NONE>, 'XQueryBestSize', \ XQueryBestStipple ,<NONE>, 'XQueryBestStipple', \ XQueryBestTile ,<NONE>, 'XQueryBestTile', \ XQueryColor ,<NONE>, 'XQueryColor', \ XQueryColors ,<NONE>, 'XQueryColors', \ XQueryExtension ,<NONE>, 'XQueryExtension', \ XQueryFont ,<NONE>, 'XQueryFont', \ XQueryKeymap ,<NONE>, 'XQueryKeymap', \ XQueryPointer ,<NONE>, 'XQueryPointer', \ XQueryTextExtents ,<NONE>, 'XQueryTextExtents', \ XQueryTextExtents16 ,<NONE>, 'XQueryTextExtents16', \ XQueryTree ,<.display, .window, .root_ret, .parent_ret, .children_ret, .nchildren_ret>, 'XQueryTree', \ XRaiseWindow ,<NONE>, 'XRaiseWindow', \ XReadBitmapFile ,<NONE>, 'XReadBitmapFile', \ XReadBitmapFileData ,<NONE>, 'XReadBitmapFileData', \ XRebindKeysym ,<NONE>, 'XRebindKeysym', \ XRecolorCursor ,<NONE>, 'XRecolorCursor', \ XReconfigureWMWindow ,<NONE>, 'XReconfigureWMWindow', \ XRectInRegion ,<NONE>, 'XRectInRegion', \ XRefreshKeyboardMapping ,<NONE>, 'XRefreshKeyboardMapping', \ XRegisterIMInstantiateCallback ,<NONE>, 'XRegisterIMInstantiateCallback', \ XRemoveConnectionWatch ,<NONE>, 'XRemoveConnectionWatch', \ XRemoveFromSaveSet ,<NONE>, 'XRemoveFromSaveSet', \ XRemoveHost ,<NONE>, 'XRemoveHost', \ XRemoveHosts ,<NONE>, 'XRemoveHosts', \ XReparentWindow ,<NONE>, 'XReparentWindow', \ XResetScreenSaver ,<NONE>, 'XResetScreenSaver', \ XResizeWindow ,<NONE>, 'XResizeWindow', \ XResourceManagerString ,<NONE>, 'XResourceManagerString', \ XRestackWindows ,<NONE>, 'XRestackWindows', \ XRootWindow ,<.Disp, .ScrNum>, 'XRootWindow', \ XRootWindowOfScreen ,<.ScrNum>, 'XRootWindowOfScreen', \ XRotateBuffers ,<NONE>, 'XRotateBuffers', \ XRotateWindowProperties ,<NONE>, 'XRotateWindowProperties', \ XSaveContext ,<NONE>, 'XSaveContext', \ XScreenCount ,<NONE>, 'XScreenCount', \ XScreenNumberOfScreen ,<NONE>, 'XScreenNumberOfScreen', \ XScreenOfDisplay ,<NONE>, 'XScreenOfDisplay', \ XScreenResourceString ,<NONE>, 'XScreenResourceString', \ XSelectInput ,<NONE>, 'XSelectInput', \ XSendEvent ,<.display, .window, .propagate, .event_mask, .event_send>, 'XSendEvent', \ XServerVendor ,<NONE>, 'XServerVendor', \ XSetAccessControl ,<NONE>, 'XSetAccessControl', \ XSetAfterFunction ,<NONE>, 'XSetAfterFunction', \ XSetArcMode ,<NONE>, 'XSetArcMode', \ XSetAuthorization ,<NONE>, 'XSetAuthorization', \ XSetBackground ,<NONE>, 'XSetBackground', \ XSetClassHint ,<NONE>, 'XSetClassHint', \ XSetClipMask ,<NONE>, 'XSetClipMask', \ XSetClipOrigin ,<NONE>, 'XSetClipOrigin', \ XSetClipRectangles ,<NONE>, 'XSetClipRectangles', \ XSetCloseDownMode ,<NONE>, 'XSetCloseDownMode', \ XSetCommand ,<NONE>, 'XSetCommand', \ XSetDashes ,<NONE>, 'XSetDashes', \ XSetErrorHandler ,<NONE>, 'XSetErrorHandler', \ XSetFillRule ,<NONE>, 'XSetFillRule', \ XSetFillStyle ,<NONE>, 'XSetFillStyle', \ XSetFont ,<NONE>, 'XSetFont', \ XSetFontPath ,<NONE>, 'XSetFontPath', \ XSetForeground ,<NONE>, 'XSetForeground', \ XSetFunction ,<NONE>, 'XSetFunction', \ XSetGraphicsExposures ,<NONE>, 'XSetGraphicsExposures', \ XSetICFocus ,<NONE>, 'XSetICFocus', \ XSetICValues ,<NONE>, 'XSetICValues', \ XSetIMValues ,<NONE>, 'XSetIMValues', \ XSetIOErrorHandler ,<NONE>, 'XSetIOErrorHandler', \ XSetIconName ,<NONE>, 'XSetIconName', \ XSetIconSizes ,<NONE>, 'XSetIconSizes', \ XSetInputFocus ,<NONE>, 'XSetInputFocus', \ XSetLineAttributes ,<NONE>, 'XSetLineAttributes', \ XSetLocaleModifiers ,<NONE>, 'XSetLocaleModifiers', \ XSetModifierMapping ,<NONE>, 'XSetModifierMapping', \ XSetNormalHints ,<NONE>, 'XSetNormalHints', \ XSetOCValues ,<NONE>, 'XSetOCValues', \ XSetOMValues ,<NONE>, 'XSetOMValues', \ XSetPlaneMask ,<NONE>, 'XSetPlaneMask', \ XSetPointerMapping ,<NONE>, 'XSetPointerMapping', \ XSetRGBColormaps ,<NONE>, 'XSetRGBColormaps', \ XSetRegion ,<NONE>, 'XSetRegion', \ XSetScreenSaver ,<NONE>, 'XSetScreenSaver', \ XSetSelectionOwner ,<.display, .selection, .owner, .time>, 'XSetSelectionOwner', \ XSetSizeHints ,<NONE>, 'XSetSizeHints', \ XSetStandardColormap ,<NONE>, 'XSetStandardColormap', \ XSetStandardProperties ,<NONE>, 'XSetStandardProperties', \ XSetState ,<NONE>, 'XSetState', \ XSetStipple ,<NONE>, 'XSetStipple', \ XSetSubwindowMode ,<NONE>, 'XSetSubwindowMode', \ XSetTSOrigin ,<NONE>, 'XSetTSOrigin', \ XSetTextProperty ,<NONE>, 'XSetTextProperty', \ XSetTile ,<NONE>, 'XSetTile', \ XSetTransientForHint ,<NONE>, 'XSetTransientForHint', \ XSetWMClientMachine ,<NONE>, 'XSetWMClientMachine', \ XSetWMColormapWindows ,<NONE>, 'XSetWMColormapWindows', \ XSetWMHints ,<NONE>, 'XSetWMHints', \ XSetWMIconName ,<NONE>, 'XSetWMIconName', \ XSetWMName ,<NONE>, 'XSetWMName', \ XSetWMNormalHints ,<NONE>, 'XSetWMNormalHints', \ XSetWMProperties ,<NONE>, 'XSetWMProperties', \ XSetWMProtocols ,<NONE>, 'XSetWMProtocols', \ XSetWMSizeHints ,<NONE>, 'XSetWMSizeHints', \ XSetWindowBackground ,<NONE>, 'XSetWindowBackground', \ XSetWindowBackgroundPixmap ,<NONE>, 'XSetWindowBackgroundPixmap', \ XSetWindowBorder ,<NONE>, 'XSetWindowBorder', \ XSetWindowBorderPixmap ,<NONE>, 'XSetWindowBorderPixmap', \ XSetWindowBorderWidth ,<NONE>, 'XSetWindowBorderWidth', \ XSetWindowColormap ,<NONE>, 'XSetWindowColormap', \ XSetZoomHints ,<NONE>, 'XSetZoomHints', \ XShrinkRegion ,<NONE>, 'XShrinkRegion', \ XStoreBuffer ,<NONE>, 'XStoreBuffer', \ XStoreBytes ,<NONE>, 'XStoreBytes', \ XStoreColor ,<NONE>, 'XStoreColor', \ XStoreColors ,<NONE>, 'XStoreColors', \ XStoreName ,<NONE>, 'XStoreName', \ XStoreNamedColor ,<NONE>, 'XStoreNamedColor', \ XStringListToTextProperty ,<NONE>, 'XStringListToTextProperty', \ XStringToKeysym ,<.string>, 'XStringToKeysym', \ XSubImage ,<NONE>, 'XSubImage', \ XSubtractRegion ,<NONE>, 'XSubtractRegion', \ XSupportsLocale ,<NONE>, 'XSupportsLocale', \ XSync ,<NONE>, 'XSync', \ XSynchronize ,<NONE>, 'XSynchronize', \ XTextExtents ,<NONE>, 'XTextExtents', \ XTextExtents16 ,<NONE>, 'XTextExtents16', \ XTextPropertyToStringList ,<NONE>, 'XTextPropertyToStringList', \ XTextWidth ,<NONE>, 'XTextWidth', \ XTextWidth16 ,<NONE>, 'XTextWidth16', \ XTranslateCoordinates ,<NONE>, 'XTranslateCoordinates', \ XUndefineCursor ,<NONE>, 'XUndefineCursor', \ XUngrabButton ,<NONE>, 'XUngrabButton', \ XUngrabKey ,<NONE>, 'XUngrabKey', \ XUngrabKeyboard ,<NONE>, 'XUngrabKeyboard', \ XUngrabPointer ,<NONE>, 'XUngrabPointer', \ XUngrabServer ,<NONE>, 'XUngrabServer', \ XUninstallColormap ,<NONE>, 'XUninstallColormap', \ XUnionRectWithRegion ,<NONE>, 'XUnionRectWithRegion', \ XUnionRegion ,<NONE>, 'XUnionRegion', \ XUnloadFont ,<NONE>, 'XUnloadFont', \ XUnlockDisplay ,<NONE>, 'XUnlockDisplay', \ XUnmapSubwindows ,<NONE>, 'XUnmapSubwindows', \ XUnmapWindow ,<NONE>, 'XUnmapWindow', \ XUnregisterIMInstantiateCallback ,<NONE>, 'XUnregisterIMInstantiateCallback', \ XUnsetICFocus ,<NONE>, 'XUnsetICFocus', \ XVaCreateNestedList ,<NONE>, 'XVaCreateNestedList', \ XVendorRelease ,<NONE>, 'XVendorRelease', \ XVisualIDFromVisual ,<NONE>, 'XVisualIDFromVisual', \ XWMGeometry ,<NONE>, 'XWMGeometry', \ XWarpPointer ,<.display, .srcWnd, .dstWnd, .srcX, .srcY, .srcW, .srcH, .dstX, .dstY>, 'XWarpPointer', \ XWhitePixel ,<NONE>, 'XWhitePixel', \ XWhitePixelOfScreen ,<NONE>, 'XWhitePixelOfScreen', \ XWidthMMOfScreen ,<NONE>, 'XWidthMMOfScreen', \ XWidthOfScreen ,<NONE>, 'XWidthOfScreen', \ XWindowEvent ,<.display, .hwin, .event_mask, .pEvent>, 'XWindowEvent', \ XWithdrawWindow ,<NONE>, 'XWithdrawWindow', \ XWriteBitmapFile ,<NONE>, 'XWriteBitmapFile', \ XXorRegion ,<NONE>, 'XXorRegion', \ XcmsAddColorSpace ,<NONE>, 'XcmsAddColorSpace', \ XcmsAddFunctionSet ,<NONE>, 'XcmsAddFunctionSet', \ XcmsAllocColor ,<NONE>, 'XcmsAllocColor', \ XcmsAllocNamedColor ,<NONE>, 'XcmsAllocNamedColor', \ XcmsCCCOfColormap ,<NONE>, 'XcmsCCCOfColormap', \ XcmsCIELabClipL ,<NONE>, 'XcmsCIELabClipL', \ XcmsCIELabClipLab ,<NONE>, 'XcmsCIELabClipLab', \ XcmsCIELabClipab ,<NONE>, 'XcmsCIELabClipab', \ XcmsCIELabColorSpace ,<NONE>, 'XcmsCIELabColorSpace', \ XcmsCIELabQueryMaxC ,<NONE>, 'XcmsCIELabQueryMaxC', \ XcmsCIELabQueryMaxL ,<NONE>, 'XcmsCIELabQueryMaxL', \ XcmsCIELabQueryMaxLC ,<NONE>, 'XcmsCIELabQueryMaxLC', \ XcmsCIELabQueryMinL ,<NONE>, 'XcmsCIELabQueryMinL', \ XcmsCIELabToCIEXYZ ,<NONE>, 'XcmsCIELabToCIEXYZ', \ XcmsCIELabWhiteShiftColors ,<NONE>, 'XcmsCIELabWhiteShiftColors', \ XcmsCIELuvClipL ,<NONE>, 'XcmsCIELuvClipL', \ XcmsCIELuvClipLuv ,<NONE>, 'XcmsCIELuvClipLuv', \ XcmsCIELuvClipuv ,<NONE>, 'XcmsCIELuvClipuv', \ XcmsCIELuvColorSpace ,<NONE>, 'XcmsCIELuvColorSpace', \ XcmsCIELuvQueryMaxC ,<NONE>, 'XcmsCIELuvQueryMaxC', \ XcmsCIELuvQueryMaxL ,<NONE>, 'XcmsCIELuvQueryMaxL', \ XcmsCIELuvQueryMaxLC ,<NONE>, 'XcmsCIELuvQueryMaxLC', \ XcmsCIELuvQueryMinL ,<NONE>, 'XcmsCIELuvQueryMinL', \ XcmsCIELuvToCIEuvY ,<NONE>, 'XcmsCIELuvToCIEuvY', \ XcmsCIELuvWhiteShiftColors ,<NONE>, 'XcmsCIELuvWhiteShiftColors', \ XcmsCIEXYZColorSpace ,<NONE>, 'XcmsCIEXYZColorSpace', \ XcmsCIEXYZToCIELab ,<NONE>, 'XcmsCIEXYZToCIELab', \ XcmsCIEXYZToCIEuvY ,<NONE>, 'XcmsCIEXYZToCIEuvY', \ XcmsCIEXYZToCIExyY ,<NONE>, 'XcmsCIEXYZToCIExyY', \ XcmsCIEXYZToRGBi ,<NONE>, 'XcmsCIEXYZToRGBi', \ XcmsCIEuvYColorSpace ,<NONE>, 'XcmsCIEuvYColorSpace', \ XcmsCIEuvYToCIELuv ,<NONE>, 'XcmsCIEuvYToCIELuv', \ XcmsCIEuvYToCIEXYZ ,<NONE>, 'XcmsCIEuvYToCIEXYZ', \ XcmsCIEuvYToTekHVC ,<NONE>, 'XcmsCIEuvYToTekHVC', \ XcmsCIExyYColorSpace ,<NONE>, 'XcmsCIExyYColorSpace', \ XcmsCIExyYToCIEXYZ ,<NONE>, 'XcmsCIExyYToCIEXYZ', \ XcmsClientWhitePointOfCCC ,<NONE>, 'XcmsClientWhitePointOfCCC', \ XcmsConvertColors ,<NONE>, 'XcmsConvertColors', \ XcmsCreateCCC ,<NONE>, 'XcmsCreateCCC', \ XcmsDefaultCCC ,<NONE>, 'XcmsDefaultCCC', \ XcmsDisplayOfCCC ,<NONE>, 'XcmsDisplayOfCCC', \ XcmsFormatOfPrefix ,<NONE>, 'XcmsFormatOfPrefix', \ XcmsFreeCCC ,<NONE>, 'XcmsFreeCCC', \ XcmsLinearRGBFunctionSet ,<NONE>, 'XcmsLinearRGBFunctionSet', \ XcmsLookupColor ,<NONE>, 'XcmsLookupColor', \ XcmsPrefixOfFormat ,<NONE>, 'XcmsPrefixOfFormat', \ XcmsQueryBlack ,<NONE>, 'XcmsQueryBlack', \ XcmsQueryBlue ,<NONE>, 'XcmsQueryBlue', \ XcmsQueryColor ,<NONE>, 'XcmsQueryColor', \ XcmsQueryColors ,<NONE>, 'XcmsQueryColors', \ XcmsQueryGreen ,<NONE>, 'XcmsQueryGreen', \ XcmsQueryRed ,<NONE>, 'XcmsQueryRed', \ XcmsQueryWhite ,<NONE>, 'XcmsQueryWhite', \ XcmsRGBColorSpace ,<NONE>, 'XcmsRGBColorSpace', \ XcmsRGBToRGBi ,<NONE>, 'XcmsRGBToRGBi', \ XcmsRGBiColorSpace ,<NONE>, 'XcmsRGBiColorSpace', \ XcmsRGBiToCIEXYZ ,<NONE>, 'XcmsRGBiToCIEXYZ', \ XcmsRGBiToRGB ,<NONE>, 'XcmsRGBiToRGB', \ XcmsScreenNumberOfCCC ,<NONE>, 'XcmsScreenNumberOfCCC', \ XcmsScreenWhitePointOfCCC ,<NONE>, 'XcmsScreenWhitePointOfCCC', \ XcmsSetCCCOfColormap ,<NONE>, 'XcmsSetCCCOfColormap', \ XcmsSetCompressionProc ,<NONE>, 'XcmsSetCompressionProc', \ XcmsSetWhiteAdjustProc ,<NONE>, 'XcmsSetWhiteAdjustProc', \ XcmsSetWhitePoint ,<NONE>, 'XcmsSetWhitePoint', \ XcmsStoreColor ,<NONE>, 'XcmsStoreColor', \ XcmsStoreColors ,<NONE>, 'XcmsStoreColors', \ XcmsTekHVCClipC ,<NONE>, 'XcmsTekHVCClipC', \ XcmsTekHVCClipV ,<NONE>, 'XcmsTekHVCClipV', \ XcmsTekHVCClipVC ,<NONE>, 'XcmsTekHVCClipVC', \ XcmsTekHVCColorSpace ,<NONE>, 'XcmsTekHVCColorSpace', \ XcmsTekHVCQueryMaxC ,<NONE>, 'XcmsTekHVCQueryMaxC', \ XcmsTekHVCQueryMaxV ,<NONE>, 'XcmsTekHVCQueryMaxV', \ XcmsTekHVCQueryMaxVC ,<NONE>, 'XcmsTekHVCQueryMaxVC', \ XcmsTekHVCQueryMaxVSamples ,<NONE>, 'XcmsTekHVCQueryMaxVSamples', \ XcmsTekHVCQueryMinV ,<NONE>, 'XcmsTekHVCQueryMinV', \ XcmsTekHVCToCIEuvY ,<NONE>, 'XcmsTekHVCToCIEuvY', \ XcmsTekHVCWhiteShiftColors ,<NONE>, 'XcmsTekHVCWhiteShiftColors', \ XcmsUNDEFINEDColorSpace ,<NONE>, 'XcmsUNDEFINEDColorSpace', \ XcmsVisualOfCCC ,<NONE>, 'XcmsVisualOfCCC', \ XkbAddDeviceLedInfo ,<NONE>, 'XkbAddDeviceLedInfo', \ XkbAddGeomColor ,<NONE>, 'XkbAddGeomColor', \ XkbAddGeomDoodad ,<NONE>, 'XkbAddGeomDoodad', \ XkbAddGeomKey ,<NONE>, 'XkbAddGeomKey', \ XkbAddGeomKeyAlias ,<NONE>, 'XkbAddGeomKeyAlias', \ XkbAddGeomOutline ,<NONE>, 'XkbAddGeomOutline', \ XkbAddGeomOverlay ,<NONE>, 'XkbAddGeomOverlay', \ XkbAddGeomOverlayKey ,<NONE>, 'XkbAddGeomOverlayKey', \ XkbAddGeomOverlayRow ,<NONE>, 'XkbAddGeomOverlayRow', \ XkbAddGeomProperty ,<NONE>, 'XkbAddGeomProperty', \ XkbAddGeomRow ,<NONE>, 'XkbAddGeomRow', \ XkbAddGeomSection ,<NONE>, 'XkbAddGeomSection', \ XkbAddGeomShape ,<NONE>, 'XkbAddGeomShape', \ XkbAddKeyType ,<NONE>, 'XkbAddKeyType', \ XkbAllocClientMap ,<NONE>, 'XkbAllocClientMap', \ XkbAllocCompatMap ,<NONE>, 'XkbAllocCompatMap', \ XkbAllocControls ,<NONE>, 'XkbAllocControls', \ XkbAllocDeviceInfo ,<NONE>, 'XkbAllocDeviceInfo', \ XkbAllocGeomColors ,<NONE>, 'XkbAllocGeomColors', \ XkbAllocGeomDoodads ,<NONE>, 'XkbAllocGeomDoodads', \ XkbAllocGeomKeyAliases ,<NONE>, 'XkbAllocGeomKeyAliases', \ XkbAllocGeomKeys ,<NONE>, 'XkbAllocGeomKeys', \ XkbAllocGeomOutlines ,<NONE>, 'XkbAllocGeomOutlines', \ XkbAllocGeomOverlayKeys ,<NONE>, 'XkbAllocGeomOverlayKeys', \ XkbAllocGeomOverlayRows ,<NONE>, 'XkbAllocGeomOverlayRows', \ XkbAllocGeomOverlays ,<NONE>, 'XkbAllocGeomOverlays', \ XkbAllocGeomPoints ,<NONE>, 'XkbAllocGeomPoints', \ XkbAllocGeomProps ,<NONE>, 'XkbAllocGeomProps', \ XkbAllocGeomRows ,<NONE>, 'XkbAllocGeomRows', \ XkbAllocGeomSectionDoodads ,<NONE>, 'XkbAllocGeomSectionDoodads', \ XkbAllocGeomSections ,<NONE>, 'XkbAllocGeomSections', \ XkbAllocGeomShapes ,<NONE>, 'XkbAllocGeomShapes', \ XkbAllocGeometry ,<NONE>, 'XkbAllocGeometry', \ XkbAllocIndicatorMaps ,<NONE>, 'XkbAllocIndicatorMaps', \ XkbAllocKeyboard ,<NONE>, 'XkbAllocKeyboard', \ XkbAllocNames ,<NONE>, 'XkbAllocNames', \ XkbAllocServerMap ,<NONE>, 'XkbAllocServerMap', \ XkbApplyCompatMapToKey ,<NONE>, 'XkbApplyCompatMapToKey', \ XkbApplyVirtualModChanges ,<NONE>, 'XkbApplyVirtualModChanges', \ XkbBell ,<NONE>, 'XkbBell', \ XkbBellEvent ,<NONE>, 'XkbBellEvent', \ XkbChangeDeviceInfo ,<NONE>, 'XkbChangeDeviceInfo', \ XkbChangeEnabledControls ,<NONE>, 'XkbChangeEnabledControls', \ XkbChangeKeycodeRange ,<NONE>, 'XkbChangeKeycodeRange', \ XkbChangeMap ,<NONE>, 'XkbChangeMap', \ XkbChangeNames ,<NONE>, 'XkbChangeNames', \ XkbChangeTypesOfKey ,<NONE>, 'XkbChangeTypesOfKey', \ XkbComputeEffectiveMap ,<NONE>, 'XkbComputeEffectiveMap', \ XkbComputeRowBounds ,<NONE>, 'XkbComputeRowBounds', \ XkbComputeSectionBounds ,<NONE>, 'XkbComputeSectionBounds', \ XkbComputeShapeBounds ,<NONE>, 'XkbComputeShapeBounds', \ XkbComputeShapeTop ,<NONE>, 'XkbComputeShapeTop', \ XkbCopyKeyType ,<NONE>, 'XkbCopyKeyType', \ XkbCopyKeyTypes ,<NONE>, 'XkbCopyKeyTypes', \ XkbDeviceBell ,<NONE>, 'XkbDeviceBell', \ XkbDeviceBellEvent ,<NONE>, 'XkbDeviceBellEvent', \ XkbFindOverlayForKey ,<NONE>, 'XkbFindOverlayForKey', \ XkbForceBell ,<NONE>, 'XkbForceBell', \ XkbForceDeviceBell ,<NONE>, 'XkbForceDeviceBell', \ XkbFreeClientMap ,<NONE>, 'XkbFreeClientMap', \ XkbFreeCompatMap ,<NONE>, 'XkbFreeCompatMap', \ XkbFreeComponentList ,<NONE>, 'XkbFreeComponentList', \ XkbFreeControls ,<NONE>, 'XkbFreeControls', \ XkbFreeDeviceInfo ,<NONE>, 'XkbFreeDeviceInfo', \ XkbFreeGeomColors ,<NONE>, 'XkbFreeGeomColors', \ XkbFreeGeomDoodads ,<NONE>, 'XkbFreeGeomDoodads', \ XkbFreeGeomKeyAliases ,<NONE>, 'XkbFreeGeomKeyAliases', \ XkbFreeGeomKeys ,<NONE>, 'XkbFreeGeomKeys', \ XkbFreeGeomOutlines ,<NONE>, 'XkbFreeGeomOutlines', \ XkbFreeGeomOverlayKeys ,<NONE>, 'XkbFreeGeomOverlayKeys', \ XkbFreeGeomOverlayRows ,<NONE>, 'XkbFreeGeomOverlayRows', \ XkbFreeGeomOverlays ,<NONE>, 'XkbFreeGeomOverlays', \ XkbFreeGeomPoints ,<NONE>, 'XkbFreeGeomPoints', \ XkbFreeGeomProperties ,<NONE>, 'XkbFreeGeomProperties', \ XkbFreeGeomRows ,<NONE>, 'XkbFreeGeomRows', \ XkbFreeGeomSections ,<NONE>, 'XkbFreeGeomSections', \ XkbFreeGeomShapes ,<NONE>, 'XkbFreeGeomShapes', \ XkbFreeGeometry ,<NONE>, 'XkbFreeGeometry', \ XkbFreeIndicatorMaps ,<NONE>, 'XkbFreeIndicatorMaps', \ XkbFreeKeyboard ,<NONE>, 'XkbFreeKeyboard', \ XkbFreeNames ,<NONE>, 'XkbFreeNames', \ XkbFreeServerMap ,<NONE>, 'XkbFreeServerMap', \ XkbGetAutoRepeatRate ,<NONE>, 'XkbGetAutoRepeatRate', \ XkbGetAutoResetControls ,<NONE>, 'XkbGetAutoResetControls', \ XkbGetCompatMap ,<NONE>, 'XkbGetCompatMap', \ XkbGetControls ,<NONE>, 'XkbGetControls', \ XkbGetDetectableAutoRepeat ,<NONE>, 'XkbGetDetectableAutoRepeat', \ XkbGetDeviceButtonActions ,<NONE>, 'XkbGetDeviceButtonActions', \ XkbGetDeviceInfo ,<NONE>, 'XkbGetDeviceInfo', \ XkbGetDeviceInfoChanges ,<NONE>, 'XkbGetDeviceInfoChanges', \ XkbGetDeviceLedInfo ,<NONE>, 'XkbGetDeviceLedInfo', \ XkbGetGeometry ,<NONE>, 'XkbGetGeometry', \ XkbGetIndicatorMap ,<NONE>, 'XkbGetIndicatorMap', \ XkbGetIndicatorState ,<NONE>, 'XkbGetIndicatorState', \ XkbGetKeyActions ,<NONE>, 'XkbGetKeyActions', \ XkbGetKeyBehaviors ,<NONE>, 'XkbGetKeyBehaviors', \ XkbGetKeyExplicitComponents ,<NONE>, 'XkbGetKeyExplicitComponents', \ XkbGetKeyModifierMap ,<NONE>, 'XkbGetKeyModifierMap', \ XkbGetKeySyms ,<NONE>, 'XkbGetKeySyms', \ XkbGetKeyTypes ,<NONE>, 'XkbGetKeyTypes', \ XkbGetKeyVirtualModMap ,<NONE>, 'XkbGetKeyVirtualModMap', \ XkbGetKeyboard ,<NONE>, 'XkbGetKeyboard', \ XkbGetKeyboardByName ,<NONE>, 'XkbGetKeyboardByName', \ XkbGetMap ,<NONE>, 'XkbGetMap', \ XkbGetMapChanges ,<NONE>, 'XkbGetMapChanges', \ XkbGetNamedDeviceIndicator ,<NONE>, 'XkbGetNamedDeviceIndicator', \ XkbGetNamedGeometry ,<NONE>, 'XkbGetNamedGeometry', \ XkbGetNamedIndicator ,<NONE>, 'XkbGetNamedIndicator', \ XkbGetNames ,<NONE>, 'XkbGetNames', \ XkbGetPerClientControls ,<NONE>, 'XkbGetPerClientControls', \ XkbGetState ,<NONE>, 'XkbGetState', \ XkbGetUpdatedMap ,<NONE>, 'XkbGetUpdatedMap', \ XkbGetVirtualMods ,<NONE>, 'XkbGetVirtualMods', \ XkbGetXlibControls ,<NONE>, 'XkbGetXlibControls', \ XkbIgnoreExtension ,<NONE>, 'XkbIgnoreExtension', \ XkbInitCanonicalKeyTypes ,<NONE>, 'XkbInitCanonicalKeyTypes', \ XkbKeyTypesForCoreSymbols ,<NONE>, 'XkbKeyTypesForCoreSymbols', \ XkbKeycodeToKeysym ,<NONE>, 'XkbKeycodeToKeysym', \ XkbKeysymToModifiers ,<NONE>, 'XkbKeysymToModifiers', \ XkbLatchGroup ,<NONE>, 'XkbLatchGroup', \ XkbLatchModifiers ,<NONE>, 'XkbLatchModifiers', \ XkbLibraryVersion ,<NONE>, 'XkbLibraryVersion', \ XkbListComponents ,<NONE>, 'XkbListComponents', \ XkbLockGroup ,<NONE>, 'XkbLockGroup', \ XkbLockModifiers ,<NONE>, 'XkbLockModifiers', \ XkbLookupKeyBinding ,<NONE>, 'XkbLookupKeyBinding', \ XkbLookupKeySym ,<NONE>, 'XkbLookupKeySym', \ XkbNoteControlsChanges ,<NONE>, 'XkbNoteControlsChanges', \ XkbNoteDeviceChanges ,<NONE>, 'XkbNoteDeviceChanges', \ XkbNoteMapChanges ,<NONE>, 'XkbNoteMapChanges', \ XkbNoteNameChanges ,<NONE>, 'XkbNoteNameChanges', \ XkbOpenDisplay ,<NONE>, 'XkbOpenDisplay', \ XkbQueryExtension ,<NONE>, 'XkbQueryExtension', \ XkbRefreshKeyboardMapping ,<NONE>, 'XkbRefreshKeyboardMapping', \ XkbResizeDeviceButtonActions ,<NONE>, 'XkbResizeDeviceButtonActions', \ XkbResizeKeyActions ,<NONE>, 'XkbResizeKeyActions', \ XkbResizeKeySyms ,<NONE>, 'XkbResizeKeySyms', \ XkbResizeKeyType ,<NONE>, 'XkbResizeKeyType', \ XkbSelectEventDetails ,<NONE>, 'XkbSelectEventDetails', \ XkbSelectEvents ,<NONE>, 'XkbSelectEvents', \ XkbSetAtomFuncs ,<NONE>, 'XkbSetAtomFuncs', \ XkbSetAutoRepeatRate ,<NONE>, 'XkbSetAutoRepeatRate', \ XkbSetAutoResetControls ,<NONE>, 'XkbSetAutoResetControls', \ XkbSetCompatMap ,<NONE>, 'XkbSetCompatMap', \ XkbSetControls ,<NONE>, 'XkbSetControls', \ XkbSetDebuggingFlags ,<NONE>, 'XkbSetDebuggingFlags', \ XkbSetDetectableAutoRepeat ,<NONE>, 'XkbSetDetectableAutoRepeat', \ XkbSetDeviceButtonActions ,<NONE>, 'XkbSetDeviceButtonActions', \ XkbSetDeviceInfo ,<NONE>, 'XkbSetDeviceInfo', \ XkbSetDeviceLedInfo ,<NONE>, 'XkbSetDeviceLedInfo', \ XkbSetGeometry ,<NONE>, 'XkbSetGeometry', \ XkbSetIgnoreLockMods ,<NONE>, 'XkbSetIgnoreLockMods', \ XkbSetIndicatorMap ,<NONE>, 'XkbSetIndicatorMap', \ XkbSetMap ,<NONE>, 'XkbSetMap', \ XkbSetNamedDeviceIndicator ,<NONE>, 'XkbSetNamedDeviceIndicator', \ XkbSetNamedIndicator ,<NONE>, 'XkbSetNamedIndicator', \ XkbSetNames ,<NONE>, 'XkbSetNames', \ XkbSetPerClientControls ,<NONE>, 'XkbSetPerClientControls', \ XkbSetServerInternalMods ,<NONE>, 'XkbSetServerInternalMods', \ XkbSetXlibControls ,<NONE>, 'XkbSetXlibControls', \ XkbToControl ,<NONE>, 'XkbToControl', \ XkbTranslateKey ,<NONE>, 'XkbTranslateKey', \ XkbTranslateKeyCode ,<NONE>, 'XkbTranslateKeyCode', \ XkbTranslateKeySym ,<NONE>, 'XkbTranslateKeySym', \ XkbUpdateActionVirtualMods ,<NONE>, 'XkbUpdateActionVirtualMods', \ XkbUpdateKeyTypeVirtualMods ,<NONE>, 'XkbUpdateKeyTypeVirtualMods', \ XkbUpdateMapFromCore ,<NONE>, 'XkbUpdateMapFromCore', \ XkbUseExtension ,<NONE>, 'XkbUseExtension', \ XkbVirtualModsToReal ,<NONE>, 'XkbVirtualModsToReal', \ XkbXlibControlsImplemented ,<NONE>, 'XkbXlibControlsImplemented', \ XmbDrawImageString ,<NONE>, 'XmbDrawImageString', \ XmbDrawString ,<NONE>, 'XmbDrawString', \ XmbDrawText ,<NONE>, 'XmbDrawText', \ XmbLookupString ,<NONE>, 'XmbLookupString', \ XmbResetIC ,<NONE>, 'XmbResetIC', \ XmbSetWMProperties ,<NONE>, 'XmbSetWMProperties', \ XmbTextEscapement ,<NONE>, 'XmbTextEscapement', \ XmbTextExtents ,<NONE>, 'XmbTextExtents', \ XmbTextListToTextProperty ,<NONE>, 'XmbTextListToTextProperty', \ XmbTextPerCharExtents ,<NONE>, 'XmbTextPerCharExtents', \ XmbTextPropertyToTextList ,<NONE>, 'XmbTextPropertyToTextList', \ Xpermalloc ,<NONE>, 'Xpermalloc', \ XrmCombineDatabase ,<NONE>, 'XrmCombineDatabase', \ XrmCombineFileDatabase ,<NONE>, 'XrmCombineFileDatabase', \ XrmDestroyDatabase ,<NONE>, 'XrmDestroyDatabase', \ XrmEnumerateDatabase ,<NONE>, 'XrmEnumerateDatabase', \ XrmGetDatabase ,<NONE>, 'XrmGetDatabase', \ XrmGetFileDatabase ,<NONE>, 'XrmGetFileDatabase', \ XrmGetResource ,<NONE>, 'XrmGetResource', \ XrmGetStringDatabase ,<NONE>, 'XrmGetStringDatabase', \ XrmInitialize ,<NONE>, 'XrmInitialize', \ XrmLocaleOfDatabase ,<NONE>, 'XrmLocaleOfDatabase', \ XrmMergeDatabases ,<NONE>, 'XrmMergeDatabases', \ XrmParseCommand ,<NONE>, 'XrmParseCommand', \ XrmPermStringToQuark ,<NONE>, 'XrmPermStringToQuark', \ XrmPutFileDatabase ,<NONE>, 'XrmPutFileDatabase', \ XrmPutLineResource ,<NONE>, 'XrmPutLineResource', \ XrmPutResource ,<NONE>, 'XrmPutResource', \ XrmPutStringResource ,<NONE>, 'XrmPutStringResource', \ XrmQGetResource ,<NONE>, 'XrmQGetResource', \ XrmQGetSearchList ,<NONE>, 'XrmQGetSearchList', \ XrmQGetSearchResource ,<NONE>, 'XrmQGetSearchResource', \ XrmQPutResource ,<NONE>, 'XrmQPutResource', \ XrmQPutStringResource ,<NONE>, 'XrmQPutStringResource', \ XrmQuarkToString ,<NONE>, 'XrmQuarkToString', \ XrmSetDatabase ,<NONE>, 'XrmSetDatabase', \ XrmStringToBindingQuarkList ,<NONE>, 'XrmStringToBindingQuarkList', \ XrmStringToQuark ,<NONE>, 'XrmStringToQuark', \ XrmStringToQuarkList ,<NONE>, 'XrmStringToQuarkList', \ XrmUniqueQuark ,<NONE>, 'XrmUniqueQuark', \ Xutf8DrawImageString ,<NONE>, 'Xutf8DrawImageString', \ Xutf8DrawString ,<NONE>, 'Xutf8DrawString', \ Xutf8DrawText ,<NONE>, 'Xutf8DrawText', \ Xutf8LookupString ,<NONE>, 'Xutf8LookupString', \ Xutf8ResetIC ,<NONE>, 'Xutf8ResetIC', \ Xutf8SetWMProperties ,<NONE>, 'Xutf8SetWMProperties', \ Xutf8TextEscapement ,<NONE>, 'Xutf8TextEscapement', \ Xutf8TextExtents ,<NONE>, 'Xutf8TextExtents', \ Xutf8TextListToTextProperty ,<NONE>, 'Xutf8TextListToTextProperty', \ Xutf8TextPerCharExtents ,<NONE>, 'Xutf8TextPerCharExtents', \ Xutf8TextPropertyToTextList ,<NONE>, 'Xutf8TextPropertyToTextList', \ XwcDrawImageString ,<NONE>, 'XwcDrawImageString', \ XwcDrawString ,<NONE>, 'XwcDrawString', \ XwcDrawText ,<NONE>, 'XwcDrawText', \ XwcFreeStringList ,<NONE>, 'XwcFreeStringList', \ XwcLookupString ,<NONE>, 'XwcLookupString', \ XwcResetIC ,<NONE>, 'XwcResetIC', \ XwcTextEscapement ,<NONE>, 'XwcTextEscapement', \ XwcTextExtents ,<NONE>, 'XwcTextExtents', \ XwcTextListToTextProperty ,<NONE>, 'XwcTextListToTextProperty', \ XwcTextPerCharExtents ,<NONE>, 'XwcTextPerCharExtents', \ XwcTextPropertyToTextList ,<NONE>, 'XwcTextPropertyToTextList', \ XUniqueContext ,<NONE>, 'XUniqueContext' |
Added freshlib/imports/Linux/libXft.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: libXft import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Needs editing of the function arguments ;_________________________________________________________________________________________ import_proto 'libXft.so.2', \ XftCharExists ,<NONE>, 'XftCharExists', \ XftCharFontSpecRender ,<NONE>, 'XftCharFontSpecRender', \ XftCharIndex ,<NONE>, 'XftCharIndex', \ XftCharSpecRender ,<NONE>, 'XftCharSpecRender', \ XftColorAllocName ,<NONE>, 'XftColorAllocName', \ XftColorAllocValue ,<NONE>, 'XftColorAllocValue', \ XftColorFree ,<NONE>, 'XftColorFree', \ XftDefaultHasRender ,<NONE>, 'XftDefaultHasRender', \ XftDefaultSet ,<NONE>, 'XftDefaultSet', \ XftDefaultSubstitute ,<NONE>, 'XftDefaultSubstitute', \ XftDrawChange ,<NONE>, 'XftDrawChange', \ XftDrawCharFontSpec ,<NONE>, 'XftDrawCharFontSpec', \ XftDrawCharSpec ,<NONE>, 'XftDrawCharSpec', \ XftDrawColormap ,<NONE>, 'XftDrawColormap', \ XftDrawCreate ,<NONE>, 'XftDrawCreate', \ XftDrawCreateAlpha ,<NONE>, 'XftDrawCreateAlpha', \ XftDrawCreateBitmap ,<NONE>, 'XftDrawCreateBitmap', \ XftDrawDestroy ,<NONE>, 'XftDrawDestroy', \ XftDrawDisplay ,<NONE>, 'XftDrawDisplay', \ XftDrawDrawable ,<NONE>, 'XftDrawDrawable', \ XftDrawGlyphFontSpec ,<NONE>, 'XftDrawGlyphFontSpec', \ XftDrawGlyphSpec ,<NONE>, 'XftDrawGlyphSpec', \ XftDrawGlyphs ,<NONE>, 'XftDrawGlyphs', \ XftDrawPicture ,<NONE>, 'XftDrawPicture', \ XftDrawRect ,<NONE>, 'XftDrawRect', \ XftDrawSetClip ,<NONE>, 'XftDrawSetClip', \ XftDrawSetClipRectangles,<NONE>, 'XftDrawSetClipRectangles',\ XftDrawSetSubwindowMode ,<NONE>, 'XftDrawSetSubwindowMode', \ XftDrawSrcPicture ,<NONE>, 'XftDrawSrcPicture', \ XftDrawString16 ,<NONE>, 'XftDrawString16', \ XftDrawString32 ,<NONE>, 'XftDrawString32', \ XftDrawString8 ,<NONE>, 'XftDrawString8', \ XftDrawStringUtf16 ,<NONE>, 'XftDrawStringUtf16', \ XftDrawStringUtf8 ,<NONE>, 'XftDrawStringUtf8', \ XftDrawVisual ,<NONE>, 'XftDrawVisual', \ XftFontCheckGlyph ,<NONE>, 'XftFontCheckGlyph', \ XftFontClose ,<NONE>, 'XftFontClose', \ XftFontCopy ,<NONE>, 'XftFontCopy', \ XftFontInfoCreate ,<NONE>, 'XftFontInfoCreate', \ XftFontInfoDestroy ,<NONE>, 'XftFontInfoDestroy', \ XftFontInfoEqual ,<NONE>, 'XftFontInfoEqual', \ XftFontInfoHash ,<NONE>, 'XftFontInfoHash', \ XftFontLoadGlyphs ,<NONE>, 'XftFontLoadGlyphs', \ XftFontMatch ,<NONE>, 'XftFontMatch', \ XftFontOpen ,<NONE>, 'XftFontOpen', \ XftFontOpenInfo ,<NONE>, 'XftFontOpenInfo', \ XftFontOpenName ,<NONE>, 'XftFontOpenName', \ XftFontOpenPattern ,<NONE>, 'XftFontOpenPattern', \ XftFontOpenXlfd ,<NONE>, 'XftFontOpenXlfd', \ XftFontUnloadGlyphs ,<NONE>, 'XftFontUnloadGlyphs', \ XftGetVersion ,<NONE>, 'XftGetVersion', \ XftGlyphExtents ,<NONE>, 'XftGlyphExtents', \ XftGlyphFontSpecRender ,<NONE>, 'XftGlyphFontSpecRender', \ XftGlyphRender ,<NONE>, 'XftGlyphRender', \ XftGlyphSpecRender ,<NONE>, 'XftGlyphSpecRender', \ XftInit ,<NONE>, 'XftInit', \ XftInitFtLibrary ,<NONE>, 'XftInitFtLibrary', \ XftListFonts ,<NONE>, 'XftListFonts', \ XftLockFace ,<NONE>, 'XftLockFace', \ XftNameParse ,<NONE>, 'XftNameParse', \ XftNameUnparse ,<NONE>, 'XftNameUnparse', \ XftTextExtents16 ,<NONE>, 'XftTextExtents16', \ XftTextExtents32 ,<NONE>, 'XftTextExtents32', \ XftTextExtents8 ,<NONE>, 'XftTextExtents8', \ XftTextExtentsUtf16 ,<NONE>, 'XftTextExtentsUtf16', \ XftTextExtentsUtf8 ,<NONE>, 'XftTextExtentsUtf8', \ XftTextRender16 ,<NONE>, 'XftTextRender16', \ XftTextRender16BE ,<NONE>, 'XftTextRender16BE', \ XftTextRender16LE ,<NONE>, 'XftTextRender16LE', \ XftTextRender32 ,<NONE>, 'XftTextRender32', \ XftTextRender32BE ,<NONE>, 'XftTextRender32BE', \ XftTextRender32LE ,<NONE>, 'XftTextRender32LE', \ XftTextRender8 ,<NONE>, 'XftTextRender8', \ XftTextRenderUtf16 ,<NONE>, 'XftTextRenderUtf16', \ XftTextRenderUtf8 ,<NONE>, 'XftTextRenderUtf8', \ XftUnlockFace ,<NONE>, 'XftUnlockFace', \ XftXlfdParse ,<NONE>, 'XftXlfdParse' |
Added freshlib/imports/Linux/libXrender.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: libXrender import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto 'libXrender.so.1', \ XRenderAddGlyphs, <.display, .glyphset, .gids, .glyphs, .nglyphs, .images, .nbyte_images>, 'XRenderAddGlyphs', \ XRenderAddTraps, <.display, .picture, .xOff, .yOff, .pTraps, .nTraps>, 'XRenderAddTraps', XRenderChangePicture, <.display, .picture, .valuemask, .attributes>, 'XRenderChangePicture', \ XRenderComposite, <.display, .op, .src, .mask, .dst, .src_x, .src_y, .mask_x, .mask_y, .dst_x, .dst_y, .wodth, .height>, 'XRenderComposite', \ XRenderCompositeDoublePoly, <.display, .op, .src, .dst, .maskFormat, .xSrc, .ySrc, .xDst, .yDst, .fpoints, .npoints, .winding>, 'XRenderCompositeDoublePoly', \ XRenderCompositeString16, <.display, .op, .src, .dst, .maskFormat, .glyphset, .xSrc, .ySrc, .xDst, .yDst, .string, .nchar>, 'XRenderCompositeString16', \ XRenderCompositeString32, <.display, .op, .src, .dst, .maskFormat, .glyphset, .xSrc, .ySrc, .xDst, .yDst, .string, .nchar>, 'XRenderCompositeString32', \ XRenderCompositeString8, <.display, .op, .src, .dst, .maskFormat, .glyphset, .xSrc, .ySrc, .xDst, .yDst, .string, .nchar>, 'XRenderCompositeString8', \ XRenderCompositeText16, <.display, .op, .src, .dst, .maskFormat, .glyphset, .xSrc, .ySrc, .xDst, .yDst, .elts, .nelt>, 'XRenderCompositeText16', \ XRenderCompositeText32, <.display, .op, .src, .dst, .maskFormat, .glyphset, .xSrc, .ySrc, .xDst, .yDst, .elts, .nelt>, 'XRenderCompositeText32', \ XRenderCompositeText8, <.display, .op, .src, .dst, .maskFormat, .glyphset, .xSrc, .ySrc, .xDst, .yDst, .elts, .nelt>, 'XRenderCompositeText8', \ XRenderCompositeTrapezoids, <.display, .op, .src, .dsp, .maskFormat, .xSrc, .ySrc, .traps, .ntrap>, 'XRenderCompositeTrapezoids', \ XRenderCompositeTriFan, <.display, .op, .src, .dsp, .maskFormat, .xSrc, .ySrc, .points, .npoint>, 'XRenderCompositeTriFan', \ XRenderCompositeTriStrip, <.display, .op, .src, .dsp, .maskFormat, .xSrc, .ySrc, .points, .npoint>, 'XRenderCompositeTriStrip', \ XRenderCompositeTriangles, <.display, .op, .src, .dsp, .maskFormat, .xSrc, .ySrc, .triangles, .ntriangles>, 'XRenderCompositeTriangles', \ XRenderCreateAnimCursor, <.display, .ncursor, .cursors>, 'XRenderCreateAnimCursor', \ XRenderCreateConicalGradient, <.display, .pGradient, .pStops, .pColors, .nStops>, 'XRenderCreateConicalGradient', \ XRenderCreateCursor, <.display, .source, .x, .y>, 'XRenderCreateCursor', \ XRenderCreateGlyphSet, <.display, .format>, 'XRenderCreateGlyphSet', \ XRenderCreateLinearGradient, <.display, .pGradient, .pStops, .pColors, .nStops>, 'XRenderCreateLinearGradient', \ XRenderCreatePicture, <.display, .Drawable, .format, .valuemask, .attributes>, 'XRenderCreatePicture', \ XRenderCreateRadialGradient, <.display, .pGradient, .pStops, .pColors, .nStops>, 'XRenderCreateRadialGradient', \ XRenderCreateSolidFill, <.display, .pColor>, 'XRenderCreateSolidFill', \ XRenderFillRectangle, <.display, .op, .dst, .pColor, .x, .y, .width, .height>, 'XRenderFillRectangle', \ XRenderFillRectangles, <.display, .op, .dst, .pColor, .pRectangles, .nRectangles>, 'XRenderFillRectangles', \ XRenderFindDisplay, <NONE>, 'XRenderFindDisplay', \ XRenderFindFormat, <.display, .mask, .templ, .count>, 'XRenderFindFormat', \ XRenderFindStandardFormat, <.display, .format>, 'XRenderFindStandardFormat', \ XRenderFindVisualFormat, <.display, .visual>, 'XRenderFindVisualFormat', \ XRenderFreeGlyphSet, <.display, .glyphset>, 'XRenderFreeGlyphSet', \ XRenderFreeGlyphs, <.display, .glyphset, .pGids, .nGlyphs>, 'XRenderFreeGlyphs', \ XRenderFreePicture, <.display, .picture>, 'XRenderFreePicture', \ XRenderParseColor, <.display, .spec, .def>, 'XRenderParseColor', \ XRenderQueryExtension, <.display, .event_basep, .error_basep>, 'XRenderQueryExtension', \ XRenderQueryFilters, <.display, .drawable>, 'XRenderQueryFilters', \ XRenderQueryFormats, <.display>, 'XRenderQueryFormats', \ XRenderQueryPictIndexValues, <.display, .format, .num>, 'XRenderQueryPictIndexValues', \ XRenderQuerySubpixelOrder, <.display, .screen>, 'XRenderQuerySubpixelOrder', \ XRenderQueryVersion, <.display, .major_versionp, .minor_versionp>, 'XRenderQueryVersion', \ XRenderReferenceGlyphSet, <.display, .existing>, 'XRenderReferenceGlyphSet', \ XRenderSetPictureClipRectangles, <.display, .picture, .xOrigin, .yOrigin, .rects, .n>, 'XRenderSetPictureClipRectangles', \ XRenderSetPictureClipRegion, <.display, .picture, .region>, 'XRenderSetPictureClipRegion', \ XRenderSetPictureFilter, <.display, .picture, .pFilter, .pParams, .nParams>, 'XRenderSetPictureFilter', \ XRenderSetPictureTransform, <.display, .picture, .pTransform>, 'XRenderSetPictureTransform', \ XRenderSetSubpixelOrder, <.display, .screen, .subpixel>, 'XRenderSetSubpixelOrder' |
Added freshlib/imports/Linux/libc.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: LibC import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Include only small amount of exported functions. ;_________________________________________________________________________________________ import_proto 'libc.so.6', \ ; LibC puts ,<NONE>, 'puts', \ exit ,<.exit_code>, 'exit', \ malloc ,<.size>, 'malloc', \ free ,<.ptr>, 'free', \ realloc ,<.ptr, .newsize>, 'realloc', \ stime ,<NONE>, 'stime', \ strerror_r ,<.errnum, .pBuff, .BufLen>, 'strerror_r', \ shmget ,<.key, .size, .flags>, 'shmget', \ shmat ,<.shmid, .addr, .flags>, 'shmat', \ shmdt ,<.addr>, 'shmdt', \ shmctl ,<.shmid, .cmd, .shmid_ds>, 'shmctl', \ getaddrinfo ,<.pHostName, .pService, .pHints, .pVarResult>, 'getaddrinfo', \ freeaddrinfo ,<.pAddrInfo>, 'freeaddrinfo', \ crypt ,<.pKey, .pSalt>, 'crypt' |
Added freshlib/imports/Linux/libdl.inc.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: LibC import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Include only small amount of exported functions. ;_________________________________________________________________________________________ import_proto 'libdl.so', \ dlopen ,<.pFilename, .flags>, 'dlopen', \ dlclose ,<.hLib>, 'dlclose', \ dlsym ,<.hLib, .pObjName>, 'dlsym', \ dlerror ,<NONE>, 'dlerror' |
Added freshlib/imports/Linux/libxcb-shm.inc.
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import_proto 'libxcb.so' ,\ xcb_shm_attach ,<.con, .shmseg. .shmid, .readonly>, 'xcb_shm_attach' ,\ xcb_shm_attach_checked ,<NONE>, 'xcb_shm_attach_checked' ,\ xcb_shm_attach_fd ,<NONE>, 'xcb_shm_attach_fd' ,\ xcb_shm_attach_fd_checked ,<NONE>, 'xcb_shm_attach_fd_checked' ,\ xcb_shm_create_pixmap ,<NONE>, 'xcb_shm_create_pixmap' ,\ xcb_shm_create_pixmap_checked ,<NONE>, 'xcb_shm_create_pixmap_checked' ,\ xcb_shm_create_segment ,<NONE>, 'xcb_shm_create_segment' ,\ xcb_shm_create_segment_reply ,<NONE>, 'xcb_shm_create_segment_reply' ,\ xcb_shm_create_segment_reply_fds ,<NONE>, 'xcb_shm_create_segment_reply_fds' ,\ xcb_shm_create_segment_unchecked ,<NONE>, 'xcb_shm_create_segment_unchecked' ,\ xcb_shm_detach ,<NONE>, 'xcb_shm_detach' ,\ xcb_shm_detach_checked ,<NONE>, 'xcb_shm_detach_checked' ,\ xcb_shm_get_image ,<NONE>, 'xcb_shm_get_image' ,\ xcb_shm_get_image_reply ,<NONE>, 'xcb_shm_get_image_reply' ,\ xcb_shm_get_image_unchecked ,<NONE>, 'xcb_shm_get_image_unchecked' ,\ xcb_shm_put_image ,<NONE>, 'xcb_shm_put_image' ,\ xcb_shm_put_image_checked ,<NONE>, 'xcb_shm_put_image_checked' ,\ xcb_shm_query_version ,<NONE>, 'xcb_shm_query_version' ,\ xcb_shm_query_version_reply ,<NONE>, 'xcb_shm_query_version_reply' ,\ xcb_shm_query_version_unchecked ,<NONE>, 'xcb_shm_query_version_unchecked' ,\ xcb_shm_seg_end ,<NONE>, 'xcb_shm_seg_end' ,\ xcb_shm_seg_next ,<NONE>, 'xcb_shm_seg_next' |
Added freshlib/imports/Linux/libxcb.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 | import_proto 'libxcb.so' ,\ xcb_alloc_color ,<NONE>, 'xcb_alloc_color' ,\ xcb_alloc_color_cells ,<NONE>, 'xcb_alloc_color_cells' ,\ xcb_alloc_color_cells_masks ,<NONE>, 'xcb_alloc_color_cells_masks' ,\ xcb_alloc_color_cells_masks_end ,<NONE>, 'xcb_alloc_color_cells_masks_end' ,\ xcb_alloc_color_cells_masks_length ,<NONE>, 'xcb_alloc_color_cells_masks_length' ,\ xcb_alloc_color_cells_pixels ,<NONE>, 'xcb_alloc_color_cells_pixels' ,\ xcb_alloc_color_cells_pixels_end ,<NONE>, 'xcb_alloc_color_cells_pixels_end' ,\ xcb_alloc_color_cells_pixels_length ,<NONE>, 'xcb_alloc_color_cells_pixels_length' ,\ xcb_alloc_color_cells_reply ,<NONE>, 'xcb_alloc_color_cells_reply' ,\ xcb_alloc_color_cells_sizeof ,<NONE>, 'xcb_alloc_color_cells_sizeof' ,\ xcb_alloc_color_cells_unchecked ,<NONE>, 'xcb_alloc_color_cells_unchecked' ,\ xcb_alloc_color_planes ,<NONE>, 'xcb_alloc_color_planes' ,\ xcb_alloc_color_planes_pixels ,<NONE>, 'xcb_alloc_color_planes_pixels' ,\ xcb_alloc_color_planes_pixels_end ,<NONE>, 'xcb_alloc_color_planes_pixels_end' ,\ xcb_alloc_color_planes_pixels_length ,<NONE>, 'xcb_alloc_color_planes_pixels_length' ,\ xcb_alloc_color_planes_reply ,<NONE>, 'xcb_alloc_color_planes_reply' ,\ xcb_alloc_color_planes_sizeof ,<NONE>, 'xcb_alloc_color_planes_sizeof' ,\ xcb_alloc_color_planes_unchecked ,<NONE>, 'xcb_alloc_color_planes_unchecked' ,\ xcb_alloc_color_reply ,<NONE>, 'xcb_alloc_color_reply' ,\ xcb_alloc_color_unchecked ,<NONE>, 'xcb_alloc_color_unchecked' ,\ xcb_alloc_named_color ,<NONE>, 'xcb_alloc_named_color' ,\ xcb_alloc_named_color_reply ,<NONE>, 'xcb_alloc_named_color_reply' ,\ xcb_alloc_named_color_sizeof ,<NONE>, 'xcb_alloc_named_color_sizeof' ,\ xcb_alloc_named_color_unchecked ,<NONE>, 'xcb_alloc_named_color_unchecked' ,\ xcb_allow_events ,<NONE>, 'xcb_allow_events' ,\ xcb_allow_events_checked ,<NONE>, 'xcb_allow_events_checked' ,\ xcb_arc_end ,<NONE>, 'xcb_arc_end' ,\ xcb_arc_next ,<NONE>, 'xcb_arc_next' ,\ xcb_atom_end ,<NONE>, 'xcb_atom_end' ,\ xcb_atom_next ,<NONE>, 'xcb_atom_next' ,\ xcb_bell ,<NONE>, 'xcb_bell' ,\ xcb_bell_checked ,<NONE>, 'xcb_bell_checked' ,\ xcb_big_requests_enable ,<NONE>, 'xcb_big_requests_enable' ,\ xcb_big_requests_enable_reply ,<NONE>, 'xcb_big_requests_enable_reply' ,\ xcb_big_requests_enable_unchecked ,<NONE>, 'xcb_big_requests_enable_unchecked' ,\ xcb_big_requests_id ,<NONE>, 'xcb_big_requests_id' ,\ xcb_bool32_end ,<NONE>, 'xcb_bool32_end' ,\ xcb_bool32_next ,<NONE>, 'xcb_bool32_next' ,\ xcb_button_end ,<NONE>, 'xcb_button_end' ,\ xcb_button_next ,<NONE>, 'xcb_button_next' ,\ xcb_change_active_pointer_grab ,<NONE>, 'xcb_change_active_pointer_grab' ,\ xcb_change_active_pointer_grab_checked ,<NONE>, 'xcb_change_active_pointer_grab_checked' ,\ xcb_change_gc ,<NONE>, 'xcb_change_gc' ,\ xcb_change_gc_aux ,<NONE>, 'xcb_change_gc_aux' ,\ xcb_change_gc_aux_checked ,<NONE>, 'xcb_change_gc_aux_checked' ,\ xcb_change_gc_checked ,<NONE>, 'xcb_change_gc_checked' ,\ xcb_change_gc_sizeof ,<NONE>, 'xcb_change_gc_sizeof' ,\ xcb_change_gc_value_list ,<NONE>, 'xcb_change_gc_value_list' ,\ xcb_change_gc_value_list_serialize ,<NONE>, 'xcb_change_gc_value_list_serialize' ,\ xcb_change_gc_value_list_sizeof ,<NONE>, 'xcb_change_gc_value_list_sizeof' ,\ xcb_change_gc_value_list_unpack ,<NONE>, 'xcb_change_gc_value_list_unpack' ,\ xcb_change_hosts ,<NONE>, 'xcb_change_hosts' ,\ xcb_change_hosts_address ,<NONE>, 'xcb_change_hosts_address' ,\ xcb_change_hosts_address_end ,<NONE>, 'xcb_change_hosts_address_end' ,\ xcb_change_hosts_address_length ,<NONE>, 'xcb_change_hosts_address_length' ,\ xcb_change_hosts_checked ,<NONE>, 'xcb_change_hosts_checked' ,\ xcb_change_hosts_sizeof ,<NONE>, 'xcb_change_hosts_sizeof' ,\ xcb_change_keyboard_control ,<NONE>, 'xcb_change_keyboard_control' ,\ xcb_change_keyboard_control_aux ,<NONE>, 'xcb_change_keyboard_control_aux' ,\ xcb_change_keyboard_control_aux_checked ,<NONE>, 'xcb_change_keyboard_control_aux_checked' ,\ xcb_change_keyboard_control_checked ,<NONE>, 'xcb_change_keyboard_control_checked' ,\ xcb_change_keyboard_control_sizeof ,<NONE>, 'xcb_change_keyboard_control_sizeof' ,\ xcb_change_keyboard_control_value_list ,<NONE>, 'xcb_change_keyboard_control_value_list' ,\ xcb_change_keyboard_control_value_list_serialize ,<NONE>, 'xcb_change_keyboard_control_value_list_serialize' ,\ xcb_change_keyboard_control_value_list_sizeof ,<NONE>, 'xcb_change_keyboard_control_value_list_sizeof' ,\ xcb_change_keyboard_control_value_list_unpack ,<NONE>, 'xcb_change_keyboard_control_value_list_unpack' ,\ xcb_change_keyboard_mapping ,<NONE>, 'xcb_change_keyboard_mapping' ,\ xcb_change_keyboard_mapping_checked ,<NONE>, 'xcb_change_keyboard_mapping_checked' ,\ xcb_change_keyboard_mapping_keysyms ,<NONE>, 'xcb_change_keyboard_mapping_keysyms' ,\ xcb_change_keyboard_mapping_keysyms_end ,<NONE>, 'xcb_change_keyboard_mapping_keysyms_end' ,\ xcb_change_keyboard_mapping_keysyms_length ,<NONE>, 'xcb_change_keyboard_mapping_keysyms_length' ,\ xcb_change_keyboard_mapping_sizeof ,<NONE>, 'xcb_change_keyboard_mapping_sizeof' ,\ xcb_change_pointer_control ,<NONE>, 'xcb_change_pointer_control' ,\ xcb_change_pointer_control_checked ,<NONE>, 'xcb_change_pointer_control_checked' ,\ xcb_change_property ,<NONE>, 'xcb_change_property' ,\ xcb_change_property_checked ,<NONE>, 'xcb_change_property_checked' ,\ xcb_change_property_data ,<NONE>, 'xcb_change_property_data' ,\ xcb_change_property_data_end ,<NONE>, 'xcb_change_property_data_end' ,\ xcb_change_property_data_length ,<NONE>, 'xcb_change_property_data_length' ,\ xcb_change_property_sizeof ,<NONE>, 'xcb_change_property_sizeof' ,\ xcb_change_save_set ,<NONE>, 'xcb_change_save_set' ,\ xcb_change_save_set_checked ,<NONE>, 'xcb_change_save_set_checked' ,\ xcb_change_window_attributes ,<NONE>, 'xcb_change_window_attributes' ,\ xcb_change_window_attributes_aux ,<NONE>, 'xcb_change_window_attributes_aux' ,\ xcb_change_window_attributes_aux_checked ,<NONE>, 'xcb_change_window_attributes_aux_checked' ,\ xcb_change_window_attributes_checked ,<NONE>, 'xcb_change_window_attributes_checked' ,\ xcb_change_window_attributes_sizeof ,<NONE>, 'xcb_change_window_attributes_sizeof' ,\ xcb_change_window_attributes_value_list ,<NONE>, 'xcb_change_window_attributes_value_list' ,\ xcb_change_window_attributes_value_list_serialize ,<NONE>, 'xcb_change_window_attributes_value_list_serialize' ,\ xcb_change_window_attributes_value_list_sizeof ,<NONE>, 'xcb_change_window_attributes_value_list_sizeof' ,\ xcb_change_window_attributes_value_list_unpack ,<NONE>, 'xcb_change_window_attributes_value_list_unpack' ,\ xcb_char2b_end ,<NONE>, 'xcb_char2b_end' ,\ xcb_char2b_next ,<NONE>, 'xcb_char2b_next' ,\ xcb_charinfo_end ,<NONE>, 'xcb_charinfo_end' ,\ xcb_charinfo_next ,<NONE>, 'xcb_charinfo_next' ,\ xcb_circulate_window ,<NONE>, 'xcb_circulate_window' ,\ xcb_circulate_window_checked ,<NONE>, 'xcb_circulate_window_checked' ,\ xcb_clear_area ,<NONE>, 'xcb_clear_area' ,\ xcb_clear_area_checked ,<NONE>, 'xcb_clear_area_checked' ,\ xcb_client_message_data_end ,<NONE>, 'xcb_client_message_data_end' ,\ xcb_client_message_data_next ,<NONE>, 'xcb_client_message_data_next' ,\ xcb_close_font ,<NONE>, 'xcb_close_font' ,\ xcb_close_font_checked ,<NONE>, 'xcb_close_font_checked' ,\ xcb_coloritem_end ,<NONE>, 'xcb_coloritem_end' ,\ xcb_coloritem_next ,<NONE>, 'xcb_coloritem_next' ,\ xcb_colormap_end ,<NONE>, 'xcb_colormap_end' ,\ xcb_colormap_next ,<NONE>, 'xcb_colormap_next' ,\ xcb_configure_window ,<NONE>, 'xcb_configure_window' ,\ xcb_configure_window_aux ,<NONE>, 'xcb_configure_window_aux' ,\ xcb_configure_window_aux_checked ,<NONE>, 'xcb_configure_window_aux_checked' ,\ xcb_configure_window_checked ,<NONE>, 'xcb_configure_window_checked' ,\ xcb_configure_window_sizeof ,<NONE>, 'xcb_configure_window_sizeof' ,\ xcb_configure_window_value_list ,<NONE>, 'xcb_configure_window_value_list' ,\ xcb_configure_window_value_list_serialize ,<NONE>, 'xcb_configure_window_value_list_serialize' ,\ xcb_configure_window_value_list_sizeof ,<NONE>, 'xcb_configure_window_value_list_sizeof' ,\ xcb_configure_window_value_list_unpack ,<NONE>, 'xcb_configure_window_value_list_unpack' ,\ xcb_connect ,<.pStrDispName, .pIntScreen>, 'xcb_connect' ,\ xcb_connection_has_error ,<NONE>, 'xcb_connection_has_error' ,\ xcb_connect_to_display_with_auth_info ,<NONE>, 'xcb_connect_to_display_with_auth_info' ,\ xcb_connect_to_fd ,<NONE>, 'xcb_connect_to_fd' ,\ xcb_convert_selection ,<NONE>, 'xcb_convert_selection' ,\ xcb_convert_selection_checked ,<NONE>, 'xcb_convert_selection_checked' ,\ xcb_copy_area ,<NONE>, 'xcb_copy_area' ,\ xcb_copy_area_checked ,<NONE>, 'xcb_copy_area_checked' ,\ xcb_copy_colormap_and_free ,<NONE>, 'xcb_copy_colormap_and_free' ,\ xcb_copy_colormap_and_free_checked ,<NONE>, 'xcb_copy_colormap_and_free_checked' ,\ xcb_copy_gc ,<NONE>, 'xcb_copy_gc' ,\ xcb_copy_gc_checked ,<NONE>, 'xcb_copy_gc_checked' ,\ xcb_copy_plane ,<NONE>, 'xcb_copy_plane' ,\ xcb_copy_plane_checked ,<NONE>, 'xcb_copy_plane_checked' ,\ xcb_create_colormap ,<.conn, .alloc, .id, .window, .visual>, 'xcb_create_colormap' ,\ xcb_create_colormap_checked ,<.conn, .alloc, .id, .window, .visual>, 'xcb_create_colormap_checked' ,\ xcb_create_cursor ,<NONE>, 'xcb_create_cursor' ,\ xcb_create_cursor_checked ,<NONE>, 'xcb_create_cursor_checked' ,\ xcb_create_gc ,<NONE>, 'xcb_create_gc' ,\ xcb_create_gc_aux ,<NONE>, 'xcb_create_gc_aux' ,\ xcb_create_gc_aux_checked ,<NONE>, 'xcb_create_gc_aux_checked' ,\ xcb_create_gc_checked ,<NONE>, 'xcb_create_gc_checked' ,\ xcb_create_gc_sizeof ,<NONE>, 'xcb_create_gc_sizeof' ,\ xcb_create_gc_value_list ,<NONE>, 'xcb_create_gc_value_list' ,\ xcb_create_gc_value_list_serialize ,<NONE>, 'xcb_create_gc_value_list_serialize' ,\ xcb_create_gc_value_list_sizeof ,<NONE>, 'xcb_create_gc_value_list_sizeof' ,\ xcb_create_gc_value_list_unpack ,<NONE>, 'xcb_create_gc_value_list_unpack' ,\ xcb_create_glyph_cursor ,<NONE>, 'xcb_create_glyph_cursor' ,\ xcb_create_glyph_cursor_checked ,<NONE>, 'xcb_create_glyph_cursor_checked' ,\ xcb_create_pixmap ,<NONE>, 'xcb_create_pixmap' ,\ xcb_create_pixmap_checked ,<NONE>, 'xcb_create_pixmap_checked' ,\ xcb_create_window ,<NONE>, 'xcb_create_window' ,\ xcb_create_window_aux ,<NONE>, 'xcb_create_window_aux' ,\ xcb_create_window_aux_checked ,<NONE>, 'xcb_create_window_aux_checked' ,\ xcb_create_window_checked ,<NONE>, 'xcb_create_window_checked' ,\ xcb_create_window_sizeof ,<NONE>, 'xcb_create_window_sizeof' ,\ xcb_create_window_value_list ,<NONE>, 'xcb_create_window_value_list' ,\ xcb_create_window_value_list_serialize ,<NONE>, 'xcb_create_window_value_list_serialize' ,\ xcb_create_window_value_list_sizeof ,<NONE>, 'xcb_create_window_value_list_sizeof' ,\ xcb_create_window_value_list_unpack ,<NONE>, 'xcb_create_window_value_list_unpack' ,\ xcb_cursor_end ,<NONE>, 'xcb_cursor_end' ,\ xcb_cursor_next ,<NONE>, 'xcb_cursor_next' ,\ xcb_delete_property ,<NONE>, 'xcb_delete_property' ,\ xcb_delete_property_checked ,<NONE>, 'xcb_delete_property_checked' ,\ xcb_depth_end ,<NONE>, 'xcb_depth_end' ,\ xcb_depth_next ,<NONE>, 'xcb_depth_next' ,\ xcb_depth_sizeof ,<NONE>, 'xcb_depth_sizeof' ,\ xcb_depth_visuals ,<NONE>, 'xcb_depth_visuals' ,\ xcb_depth_visuals_iterator ,<NONE>, 'xcb_depth_visuals_iterator' ,\ xcb_depth_visuals_length ,<NONE>, 'xcb_depth_visuals_length' ,\ xcb_destroy_subwindows ,<NONE>, 'xcb_destroy_subwindows' ,\ xcb_destroy_subwindows_checked ,<NONE>, 'xcb_destroy_subwindows_checked' ,\ xcb_destroy_window ,<NONE>, 'xcb_destroy_window' ,\ xcb_destroy_window_checked ,<NONE>, 'xcb_destroy_window_checked' ,\ xcb_discard_reply ,<NONE>, 'xcb_discard_reply' ,\ xcb_discard_reply64 ,<NONE>, 'xcb_discard_reply64' ,\ xcb_disconnect ,<NONE>, 'xcb_disconnect' ,\ xcb_drawable_end ,<NONE>, 'xcb_drawable_end' ,\ xcb_drawable_next ,<NONE>, 'xcb_drawable_next' ,\ xcb_fill_poly ,<NONE>, 'xcb_fill_poly' ,\ xcb_fill_poly_checked ,<NONE>, 'xcb_fill_poly_checked' ,\ xcb_fill_poly_points ,<NONE>, 'xcb_fill_poly_points' ,\ xcb_fill_poly_points_iterator ,<NONE>, 'xcb_fill_poly_points_iterator' ,\ xcb_fill_poly_points_length ,<NONE>, 'xcb_fill_poly_points_length' ,\ xcb_fill_poly_sizeof ,<NONE>, 'xcb_fill_poly_sizeof' ,\ xcb_flush ,<.conn>, 'xcb_flush' ,\ xcb_fontable_end ,<NONE>, 'xcb_fontable_end' ,\ xcb_fontable_next ,<NONE>, 'xcb_fontable_next' ,\ xcb_font_end ,<NONE>, 'xcb_font_end' ,\ xcb_font_next ,<NONE>, 'xcb_font_next' ,\ xcb_fontprop_end ,<NONE>, 'xcb_fontprop_end' ,\ xcb_fontprop_next ,<NONE>, 'xcb_fontprop_next' ,\ xcb_force_screen_saver ,<NONE>, 'xcb_force_screen_saver' ,\ xcb_force_screen_saver_checked ,<NONE>, 'xcb_force_screen_saver_checked' ,\ xcb_format_end ,<NONE>, 'xcb_format_end' ,\ xcb_format_next ,<NONE>, 'xcb_format_next' ,\ xcb_free_colormap ,<NONE>, 'xcb_free_colormap' ,\ xcb_free_colormap_checked ,<NONE>, 'xcb_free_colormap_checked' ,\ xcb_free_colors ,<NONE>, 'xcb_free_colors' ,\ xcb_free_colors_checked ,<NONE>, 'xcb_free_colors_checked' ,\ xcb_free_colors_pixels ,<NONE>, 'xcb_free_colors_pixels' ,\ xcb_free_colors_pixels_end ,<NONE>, 'xcb_free_colors_pixels_end' ,\ xcb_free_colors_pixels_length ,<NONE>, 'xcb_free_colors_pixels_length' ,\ xcb_free_colors_sizeof ,<NONE>, 'xcb_free_colors_sizeof' ,\ xcb_free_cursor ,<NONE>, 'xcb_free_cursor' ,\ xcb_free_cursor_checked ,<NONE>, 'xcb_free_cursor_checked' ,\ xcb_free_gc ,<NONE>, 'xcb_free_gc' ,\ xcb_free_gc_checked ,<NONE>, 'xcb_free_gc_checked' ,\ xcb_free_pixmap ,<NONE>, 'xcb_free_pixmap' ,\ xcb_free_pixmap_checked ,<NONE>, 'xcb_free_pixmap_checked' ,\ xcb_gcontext_end ,<NONE>, 'xcb_gcontext_end' ,\ xcb_gcontext_next ,<NONE>, 'xcb_gcontext_next' ,\ xcb_generate_id ,<.conn>, 'xcb_generate_id' ,\ xcb_get_atom_name ,<NONE>, 'xcb_get_atom_name' ,\ xcb_get_atom_name_name ,<NONE>, 'xcb_get_atom_name_name' ,\ xcb_get_atom_name_name_end ,<NONE>, 'xcb_get_atom_name_name_end' ,\ xcb_get_atom_name_name_length ,<NONE>, 'xcb_get_atom_name_name_length' ,\ xcb_get_atom_name_reply ,<NONE>, 'xcb_get_atom_name_reply' ,\ xcb_get_atom_name_sizeof ,<NONE>, 'xcb_get_atom_name_sizeof' ,\ xcb_get_atom_name_unchecked ,<NONE>, 'xcb_get_atom_name_unchecked' ,\ xcb_get_extension_data ,<NONE>, 'xcb_get_extension_data' ,\ xcb_get_file_descriptor ,<.conn>, 'xcb_get_file_descriptor' ,\ xcb_get_font_path ,<NONE>, 'xcb_get_font_path' ,\ xcb_get_font_path_path_iterator ,<NONE>, 'xcb_get_font_path_path_iterator' ,\ xcb_get_font_path_path_length ,<NONE>, 'xcb_get_font_path_path_length' ,\ xcb_get_font_path_reply ,<NONE>, 'xcb_get_font_path_reply' ,\ xcb_get_font_path_sizeof ,<NONE>, 'xcb_get_font_path_sizeof' ,\ xcb_get_font_path_unchecked ,<NONE>, 'xcb_get_font_path_unchecked' ,\ xcb_get_geometry ,<NONE>, 'xcb_get_geometry' ,\ xcb_get_geometry_reply ,<NONE>, 'xcb_get_geometry_reply' ,\ xcb_get_geometry_unchecked ,<NONE>, 'xcb_get_geometry_unchecked' ,\ xcb_get_image ,<NONE>, 'xcb_get_image' ,\ xcb_get_image_data ,<NONE>, 'xcb_get_image_data' ,\ xcb_get_image_data_end ,<NONE>, 'xcb_get_image_data_end' ,\ xcb_get_image_data_length ,<NONE>, 'xcb_get_image_data_length' ,\ xcb_get_image_reply ,<NONE>, 'xcb_get_image_reply' ,\ xcb_get_image_sizeof ,<NONE>, 'xcb_get_image_sizeof' ,\ xcb_get_image_unchecked ,<NONE>, 'xcb_get_image_unchecked' ,\ xcb_get_input_focus ,<NONE>, 'xcb_get_input_focus' ,\ xcb_get_input_focus_reply ,<NONE>, 'xcb_get_input_focus_reply' ,\ xcb_get_input_focus_unchecked ,<NONE>, 'xcb_get_input_focus_unchecked' ,\ xcb_get_keyboard_control ,<NONE>, 'xcb_get_keyboard_control' ,\ xcb_get_keyboard_control_reply ,<NONE>, 'xcb_get_keyboard_control_reply' ,\ xcb_get_keyboard_control_unchecked ,<NONE>, 'xcb_get_keyboard_control_unchecked' ,\ xcb_get_keyboard_mapping ,<NONE>, 'xcb_get_keyboard_mapping' ,\ xcb_get_keyboard_mapping_keysyms ,<NONE>, 'xcb_get_keyboard_mapping_keysyms' ,\ xcb_get_keyboard_mapping_keysyms_end ,<NONE>, 'xcb_get_keyboard_mapping_keysyms_end' ,\ xcb_get_keyboard_mapping_keysyms_length ,<NONE>, 'xcb_get_keyboard_mapping_keysyms_length' ,\ xcb_get_keyboard_mapping_reply ,<NONE>, 'xcb_get_keyboard_mapping_reply' ,\ xcb_get_keyboard_mapping_sizeof ,<NONE>, 'xcb_get_keyboard_mapping_sizeof' ,\ xcb_get_keyboard_mapping_unchecked ,<NONE>, 'xcb_get_keyboard_mapping_unchecked' ,\ xcb_get_maximum_request_length ,<NONE>, 'xcb_get_maximum_request_length' ,\ xcb_get_modifier_mapping ,<NONE>, 'xcb_get_modifier_mapping' ,\ xcb_get_modifier_mapping_keycodes ,<NONE>, 'xcb_get_modifier_mapping_keycodes' ,\ xcb_get_modifier_mapping_keycodes_end ,<NONE>, 'xcb_get_modifier_mapping_keycodes_end' ,\ xcb_get_modifier_mapping_keycodes_length ,<NONE>, 'xcb_get_modifier_mapping_keycodes_length' ,\ xcb_get_modifier_mapping_reply ,<NONE>, 'xcb_get_modifier_mapping_reply' ,\ xcb_get_modifier_mapping_sizeof ,<NONE>, 'xcb_get_modifier_mapping_sizeof' ,\ xcb_get_modifier_mapping_unchecked ,<NONE>, 'xcb_get_modifier_mapping_unchecked' ,\ xcb_get_motion_events ,<NONE>, 'xcb_get_motion_events' ,\ xcb_get_motion_events_events ,<NONE>, 'xcb_get_motion_events_events' ,\ xcb_get_motion_events_events_iterator ,<NONE>, 'xcb_get_motion_events_events_iterator' ,\ xcb_get_motion_events_events_length ,<NONE>, 'xcb_get_motion_events_events_length' ,\ xcb_get_motion_events_reply ,<NONE>, 'xcb_get_motion_events_reply' ,\ xcb_get_motion_events_sizeof ,<NONE>, 'xcb_get_motion_events_sizeof' ,\ xcb_get_motion_events_unchecked ,<NONE>, 'xcb_get_motion_events_unchecked' ,\ xcb_get_pointer_control ,<NONE>, 'xcb_get_pointer_control' ,\ xcb_get_pointer_control_reply ,<NONE>, 'xcb_get_pointer_control_reply' ,\ xcb_get_pointer_control_unchecked ,<NONE>, 'xcb_get_pointer_control_unchecked' ,\ xcb_get_pointer_mapping ,<NONE>, 'xcb_get_pointer_mapping' ,\ xcb_get_pointer_mapping_map ,<NONE>, 'xcb_get_pointer_mapping_map' ,\ xcb_get_pointer_mapping_map_end ,<NONE>, 'xcb_get_pointer_mapping_map_end' ,\ xcb_get_pointer_mapping_map_length ,<NONE>, 'xcb_get_pointer_mapping_map_length' ,\ xcb_get_pointer_mapping_reply ,<NONE>, 'xcb_get_pointer_mapping_reply' ,\ xcb_get_pointer_mapping_sizeof ,<NONE>, 'xcb_get_pointer_mapping_sizeof' ,\ xcb_get_pointer_mapping_unchecked ,<NONE>, 'xcb_get_pointer_mapping_unchecked' ,\ xcb_get_property ,<NONE>, 'xcb_get_property' ,\ xcb_get_property_reply ,<NONE>, 'xcb_get_property_reply' ,\ xcb_get_property_sizeof ,<NONE>, 'xcb_get_property_sizeof' ,\ xcb_get_property_unchecked ,<NONE>, 'xcb_get_property_unchecked' ,\ xcb_get_property_value ,<NONE>, 'xcb_get_property_value' ,\ xcb_get_property_value_end ,<NONE>, 'xcb_get_property_value_end' ,\ xcb_get_property_value_length ,<NONE>, 'xcb_get_property_value_length' ,\ xcb_get_reply_fds ,<NONE>, 'xcb_get_reply_fds' ,\ xcb_get_screen_saver ,<NONE>, 'xcb_get_screen_saver' ,\ xcb_get_screen_saver_reply ,<NONE>, 'xcb_get_screen_saver_reply' ,\ xcb_get_screen_saver_unchecked ,<NONE>, 'xcb_get_screen_saver_unchecked' ,\ xcb_get_selection_owner ,<NONE>, 'xcb_get_selection_owner' ,\ xcb_get_selection_owner_reply ,<NONE>, 'xcb_get_selection_owner_reply' ,\ xcb_get_selection_owner_unchecked ,<NONE>, 'xcb_get_selection_owner_unchecked' ,\ xcb_get_setup ,<.conn>, 'xcb_get_setup' ,\ xcb_get_window_attributes ,<NONE>, 'xcb_get_window_attributes' ,\ xcb_get_window_attributes_reply ,<NONE>, 'xcb_get_window_attributes_reply' ,\ xcb_get_window_attributes_unchecked ,<NONE>, 'xcb_get_window_attributes_unchecked' ,\ xcb_grab_button ,<NONE>, 'xcb_grab_button' ,\ xcb_grab_button_checked ,<NONE>, 'xcb_grab_button_checked' ,\ xcb_grab_key ,<NONE>, 'xcb_grab_key' ,\ xcb_grab_keyboard ,<NONE>, 'xcb_grab_keyboard' ,\ xcb_grab_keyboard_reply ,<NONE>, 'xcb_grab_keyboard_reply' ,\ xcb_grab_keyboard_unchecked ,<NONE>, 'xcb_grab_keyboard_unchecked' ,\ xcb_grab_key_checked ,<NONE>, 'xcb_grab_key_checked' ,\ xcb_grab_pointer ,<NONE>, 'xcb_grab_pointer' ,\ xcb_grab_pointer_reply ,<NONE>, 'xcb_grab_pointer_reply' ,\ xcb_grab_pointer_unchecked ,<NONE>, 'xcb_grab_pointer_unchecked' ,\ xcb_grab_server ,<NONE>, 'xcb_grab_server' ,\ xcb_grab_server_checked ,<NONE>, 'xcb_grab_server_checked' ,\ xcb_host_address ,<NONE>, 'xcb_host_address' ,\ xcb_host_address_end ,<NONE>, 'xcb_host_address_end' ,\ xcb_host_address_length ,<NONE>, 'xcb_host_address_length' ,\ xcb_host_end ,<NONE>, 'xcb_host_end' ,\ xcb_host_next ,<NONE>, 'xcb_host_next' ,\ xcb_host_sizeof ,<NONE>, 'xcb_host_sizeof' ,\ xcb_image_text_16 ,<NONE>, 'xcb_image_text_16' ,\ xcb_image_text_16_checked ,<NONE>, 'xcb_image_text_16_checked' ,\ xcb_image_text_16_sizeof ,<NONE>, 'xcb_image_text_16_sizeof' ,\ xcb_image_text_16_string ,<NONE>, 'xcb_image_text_16_string' ,\ xcb_image_text_16_string_iterator ,<NONE>, 'xcb_image_text_16_string_iterator' ,\ xcb_image_text_16_string_length ,<NONE>, 'xcb_image_text_16_string_length' ,\ xcb_image_text_8 ,<NONE>, 'xcb_image_text_8' ,\ xcb_image_text_8_checked ,<NONE>, 'xcb_image_text_8_checked' ,\ xcb_image_text_8_sizeof ,<NONE>, 'xcb_image_text_8_sizeof' ,\ xcb_image_text_8_string ,<NONE>, 'xcb_image_text_8_string' ,\ xcb_image_text_8_string_end ,<NONE>, 'xcb_image_text_8_string_end' ,\ xcb_image_text_8_string_length ,<NONE>, 'xcb_image_text_8_string_length' ,\ xcb_install_colormap ,<NONE>, 'xcb_install_colormap' ,\ xcb_install_colormap_checked ,<NONE>, 'xcb_install_colormap_checked' ,\ xcb_intern_atom ,<NONE>, 'xcb_intern_atom' ,\ xcb_intern_atom_reply ,<NONE>, 'xcb_intern_atom_reply' ,\ xcb_intern_atom_sizeof ,<NONE>, 'xcb_intern_atom_sizeof' ,\ xcb_intern_atom_unchecked ,<NONE>, 'xcb_intern_atom_unchecked' ,\ xcb_keycode32_end ,<NONE>, 'xcb_keycode32_end' ,\ xcb_keycode32_next ,<NONE>, 'xcb_keycode32_next' ,\ xcb_keycode_end ,<NONE>, 'xcb_keycode_end' ,\ xcb_keycode_next ,<NONE>, 'xcb_keycode_next' ,\ xcb_keysym_end ,<NONE>, 'xcb_keysym_end' ,\ xcb_keysym_next ,<NONE>, 'xcb_keysym_next' ,\ xcb_kill_client ,<NONE>, 'xcb_kill_client' ,\ xcb_kill_client_checked ,<NONE>, 'xcb_kill_client_checked' ,\ xcb_list_extensions ,<NONE>, 'xcb_list_extensions' ,\ xcb_list_extensions_names_iterator ,<NONE>, 'xcb_list_extensions_names_iterator' ,\ xcb_list_extensions_names_length ,<NONE>, 'xcb_list_extensions_names_length' ,\ xcb_list_extensions_reply ,<NONE>, 'xcb_list_extensions_reply' ,\ xcb_list_extensions_sizeof ,<NONE>, 'xcb_list_extensions_sizeof' ,\ xcb_list_extensions_unchecked ,<NONE>, 'xcb_list_extensions_unchecked' ,\ xcb_list_fonts ,<NONE>, 'xcb_list_fonts' ,\ xcb_list_fonts_names_iterator ,<NONE>, 'xcb_list_fonts_names_iterator' ,\ xcb_list_fonts_names_length ,<NONE>, 'xcb_list_fonts_names_length' ,\ xcb_list_fonts_reply ,<NONE>, 'xcb_list_fonts_reply' ,\ xcb_list_fonts_sizeof ,<NONE>, 'xcb_list_fonts_sizeof' ,\ xcb_list_fonts_unchecked ,<NONE>, 'xcb_list_fonts_unchecked' ,\ xcb_list_fonts_with_info ,<NONE>, 'xcb_list_fonts_with_info' ,\ xcb_list_fonts_with_info_name ,<NONE>, 'xcb_list_fonts_with_info_name' ,\ xcb_list_fonts_with_info_name_end ,<NONE>, 'xcb_list_fonts_with_info_name_end' ,\ xcb_list_fonts_with_info_name_length ,<NONE>, 'xcb_list_fonts_with_info_name_length' ,\ xcb_list_fonts_with_info_properties ,<NONE>, 'xcb_list_fonts_with_info_properties' ,\ xcb_list_fonts_with_info_properties_iterator ,<NONE>, 'xcb_list_fonts_with_info_properties_iterator' ,\ xcb_list_fonts_with_info_properties_length ,<NONE>, 'xcb_list_fonts_with_info_properties_length' ,\ xcb_list_fonts_with_info_reply ,<NONE>, 'xcb_list_fonts_with_info_reply' ,\ xcb_list_fonts_with_info_sizeof ,<NONE>, 'xcb_list_fonts_with_info_sizeof' ,\ xcb_list_fonts_with_info_unchecked ,<NONE>, 'xcb_list_fonts_with_info_unchecked' ,\ xcb_list_hosts ,<NONE>, 'xcb_list_hosts' ,\ xcb_list_hosts_hosts_iterator ,<NONE>, 'xcb_list_hosts_hosts_iterator' ,\ xcb_list_hosts_hosts_length ,<NONE>, 'xcb_list_hosts_hosts_length' ,\ xcb_list_hosts_reply ,<NONE>, 'xcb_list_hosts_reply' ,\ xcb_list_hosts_sizeof ,<NONE>, 'xcb_list_hosts_sizeof' ,\ xcb_list_hosts_unchecked ,<NONE>, 'xcb_list_hosts_unchecked' ,\ xcb_list_installed_colormaps ,<NONE>, 'xcb_list_installed_colormaps' ,\ xcb_list_installed_colormaps_cmaps ,<NONE>, 'xcb_list_installed_colormaps_cmaps' ,\ xcb_list_installed_colormaps_cmaps_end ,<NONE>, 'xcb_list_installed_colormaps_cmaps_end' ,\ xcb_list_installed_colormaps_cmaps_length ,<NONE>, 'xcb_list_installed_colormaps_cmaps_length' ,\ xcb_list_installed_colormaps_reply ,<NONE>, 'xcb_list_installed_colormaps_reply' ,\ xcb_list_installed_colormaps_sizeof ,<NONE>, 'xcb_list_installed_colormaps_sizeof' ,\ xcb_list_installed_colormaps_unchecked ,<NONE>, 'xcb_list_installed_colormaps_unchecked' ,\ xcb_list_properties ,<NONE>, 'xcb_list_properties' ,\ xcb_list_properties_atoms ,<NONE>, 'xcb_list_properties_atoms' ,\ xcb_list_properties_atoms_end ,<NONE>, 'xcb_list_properties_atoms_end' ,\ xcb_list_properties_atoms_length ,<NONE>, 'xcb_list_properties_atoms_length' ,\ xcb_list_properties_reply ,<NONE>, 'xcb_list_properties_reply' ,\ xcb_list_properties_sizeof ,<NONE>, 'xcb_list_properties_sizeof' ,\ xcb_list_properties_unchecked ,<NONE>, 'xcb_list_properties_unchecked' ,\ xcb_lookup_color ,<NONE>, 'xcb_lookup_color' ,\ xcb_lookup_color_reply ,<NONE>, 'xcb_lookup_color_reply' ,\ xcb_lookup_color_sizeof ,<NONE>, 'xcb_lookup_color_sizeof' ,\ xcb_lookup_color_unchecked ,<NONE>, 'xcb_lookup_color_unchecked' ,\ xcb_map_subwindows ,<NONE>, 'xcb_map_subwindows' ,\ xcb_map_subwindows_checked ,<NONE>, 'xcb_map_subwindows_checked' ,\ xcb_map_window ,<NONE>, 'xcb_map_window' ,\ xcb_map_window_checked ,<NONE>, 'xcb_map_window_checked' ,\ xcb_no_operation ,<NONE>, 'xcb_no_operation' ,\ xcb_no_operation_checked ,<NONE>, 'xcb_no_operation_checked' ,\ xcb_open_font ,<NONE>, 'xcb_open_font' ,\ xcb_open_font_checked ,<NONE>, 'xcb_open_font_checked' ,\ xcb_open_font_name ,<NONE>, 'xcb_open_font_name' ,\ xcb_open_font_name_end ,<NONE>, 'xcb_open_font_name_end' ,\ xcb_open_font_name_length ,<NONE>, 'xcb_open_font_name_length' ,\ xcb_open_font_sizeof ,<NONE>, 'xcb_open_font_sizeof' ,\ xcb_parse_display ,<NONE>, 'xcb_parse_display' ,\ xcb_pixmap_end ,<NONE>, 'xcb_pixmap_end' ,\ xcb_pixmap_next ,<NONE>, 'xcb_pixmap_next' ,\ xcb_point_end ,<NONE>, 'xcb_point_end' ,\ xcb_point_next ,<NONE>, 'xcb_point_next' ,\ xcb_poll_for_event ,<NONE>, 'xcb_poll_for_event' ,\ xcb_poll_for_queued_event ,<NONE>, 'xcb_poll_for_queued_event' ,\ xcb_poll_for_reply ,<NONE>, 'xcb_poll_for_reply' ,\ xcb_poll_for_reply64 ,<NONE>, 'xcb_poll_for_reply64' ,\ xcb_poll_for_special_event ,<NONE>, 'xcb_poll_for_special_event' ,\ xcb_poly_arc ,<NONE>, 'xcb_poly_arc' ,\ xcb_poly_arc_arcs ,<NONE>, 'xcb_poly_arc_arcs' ,\ xcb_poly_arc_arcs_iterator ,<NONE>, 'xcb_poly_arc_arcs_iterator' ,\ xcb_poly_arc_arcs_length ,<NONE>, 'xcb_poly_arc_arcs_length' ,\ xcb_poly_arc_checked ,<NONE>, 'xcb_poly_arc_checked' ,\ xcb_poly_arc_sizeof ,<NONE>, 'xcb_poly_arc_sizeof' ,\ xcb_poly_fill_arc ,<NONE>, 'xcb_poly_fill_arc' ,\ xcb_poly_fill_arc_arcs ,<NONE>, 'xcb_poly_fill_arc_arcs' ,\ xcb_poly_fill_arc_arcs_iterator ,<NONE>, 'xcb_poly_fill_arc_arcs_iterator' ,\ xcb_poly_fill_arc_arcs_length ,<NONE>, 'xcb_poly_fill_arc_arcs_length' ,\ xcb_poly_fill_arc_checked ,<NONE>, 'xcb_poly_fill_arc_checked' ,\ xcb_poly_fill_arc_sizeof ,<NONE>, 'xcb_poly_fill_arc_sizeof' ,\ xcb_poly_fill_rectangle ,<NONE>, 'xcb_poly_fill_rectangle' ,\ xcb_poly_fill_rectangle_checked ,<NONE>, 'xcb_poly_fill_rectangle_checked' ,\ xcb_poly_fill_rectangle_rectangles ,<NONE>, 'xcb_poly_fill_rectangle_rectangles' ,\ xcb_poly_fill_rectangle_rectangles_iterator ,<NONE>, 'xcb_poly_fill_rectangle_rectangles_iterator' ,\ xcb_poly_fill_rectangle_rectangles_length ,<NONE>, 'xcb_poly_fill_rectangle_rectangles_length' ,\ xcb_poly_fill_rectangle_sizeof ,<NONE>, 'xcb_poly_fill_rectangle_sizeof' ,\ xcb_poly_line ,<NONE>, 'xcb_poly_line' ,\ xcb_poly_line_checked ,<NONE>, 'xcb_poly_line_checked' ,\ xcb_poly_line_points ,<NONE>, 'xcb_poly_line_points' ,\ xcb_poly_line_points_iterator ,<NONE>, 'xcb_poly_line_points_iterator' ,\ xcb_poly_line_points_length ,<NONE>, 'xcb_poly_line_points_length' ,\ xcb_poly_line_sizeof ,<NONE>, 'xcb_poly_line_sizeof' ,\ xcb_poly_point ,<NONE>, 'xcb_poly_point' ,\ xcb_poly_point_checked ,<NONE>, 'xcb_poly_point_checked' ,\ xcb_poly_point_points ,<NONE>, 'xcb_poly_point_points' ,\ xcb_poly_point_points_iterator ,<NONE>, 'xcb_poly_point_points_iterator' ,\ xcb_poly_point_points_length ,<NONE>, 'xcb_poly_point_points_length' ,\ xcb_poly_point_sizeof ,<NONE>, 'xcb_poly_point_sizeof' ,\ xcb_poly_rectangle ,<NONE>, 'xcb_poly_rectangle' ,\ xcb_poly_rectangle_checked ,<NONE>, 'xcb_poly_rectangle_checked' ,\ xcb_poly_rectangle_rectangles ,<NONE>, 'xcb_poly_rectangle_rectangles' ,\ xcb_poly_rectangle_rectangles_iterator ,<NONE>, 'xcb_poly_rectangle_rectangles_iterator' ,\ xcb_poly_rectangle_rectangles_length ,<NONE>, 'xcb_poly_rectangle_rectangles_length' ,\ xcb_poly_rectangle_sizeof ,<NONE>, 'xcb_poly_rectangle_sizeof' ,\ xcb_poly_segment ,<NONE>, 'xcb_poly_segment' ,\ xcb_poly_segment_checked ,<NONE>, 'xcb_poly_segment_checked' ,\ xcb_poly_segment_segments ,<NONE>, 'xcb_poly_segment_segments' ,\ xcb_poly_segment_segments_iterator ,<NONE>, 'xcb_poly_segment_segments_iterator' ,\ xcb_poly_segment_segments_length ,<NONE>, 'xcb_poly_segment_segments_length' ,\ xcb_poly_segment_sizeof ,<NONE>, 'xcb_poly_segment_sizeof' ,\ xcb_poly_text_16 ,<NONE>, 'xcb_poly_text_16' ,\ xcb_poly_text_16_checked ,<NONE>, 'xcb_poly_text_16_checked' ,\ xcb_poly_text_16_items ,<NONE>, 'xcb_poly_text_16_items' ,\ xcb_poly_text_16_items_end ,<NONE>, 'xcb_poly_text_16_items_end' ,\ xcb_poly_text_16_items_length ,<NONE>, 'xcb_poly_text_16_items_length' ,\ xcb_poly_text_16_sizeof ,<NONE>, 'xcb_poly_text_16_sizeof' ,\ xcb_poly_text_8 ,<NONE>, 'xcb_poly_text_8' ,\ xcb_poly_text_8_checked ,<NONE>, 'xcb_poly_text_8_checked' ,\ xcb_poly_text_8_items ,<NONE>, 'xcb_poly_text_8_items' ,\ xcb_poly_text_8_items_end ,<NONE>, 'xcb_poly_text_8_items_end' ,\ xcb_poly_text_8_items_length ,<NONE>, 'xcb_poly_text_8_items_length' ,\ xcb_poly_text_8_sizeof ,<NONE>, 'xcb_poly_text_8_sizeof' ,\ xcb_popcount ,<NONE>, 'xcb_popcount' ,\ xcb_prefetch_extension_data ,<NONE>, 'xcb_prefetch_extension_data' ,\ xcb_prefetch_maximum_request_length ,<NONE>, 'xcb_prefetch_maximum_request_length' ,\ xcb_put_image ,<NONE>, 'xcb_put_image' ,\ xcb_put_image_checked ,<NONE>, 'xcb_put_image_checked' ,\ xcb_put_image_data ,<NONE>, 'xcb_put_image_data' ,\ xcb_put_image_data_end ,<NONE>, 'xcb_put_image_data_end' ,\ xcb_put_image_data_length ,<NONE>, 'xcb_put_image_data_length' ,\ xcb_put_image_sizeof ,<NONE>, 'xcb_put_image_sizeof' ,\ xcb_query_best_size ,<NONE>, 'xcb_query_best_size' ,\ xcb_query_best_size_reply ,<NONE>, 'xcb_query_best_size_reply' ,\ xcb_query_best_size_unchecked ,<NONE>, 'xcb_query_best_size_unchecked' ,\ xcb_query_colors ,<NONE>, 'xcb_query_colors' ,\ xcb_query_colors_colors ,<NONE>, 'xcb_query_colors_colors' ,\ xcb_query_colors_colors_iterator ,<NONE>, 'xcb_query_colors_colors_iterator' ,\ xcb_query_colors_colors_length ,<NONE>, 'xcb_query_colors_colors_length' ,\ xcb_query_colors_reply ,<NONE>, 'xcb_query_colors_reply' ,\ xcb_query_colors_sizeof ,<NONE>, 'xcb_query_colors_sizeof' ,\ xcb_query_colors_unchecked ,<NONE>, 'xcb_query_colors_unchecked' ,\ xcb_query_extension ,<NONE>, 'xcb_query_extension' ,\ xcb_query_extension_reply ,<NONE>, 'xcb_query_extension_reply' ,\ xcb_query_extension_sizeof ,<NONE>, 'xcb_query_extension_sizeof' ,\ xcb_query_extension_unchecked ,<NONE>, 'xcb_query_extension_unchecked' ,\ xcb_query_font ,<NONE>, 'xcb_query_font' ,\ xcb_query_font_char_infos ,<NONE>, 'xcb_query_font_char_infos' ,\ xcb_query_font_char_infos_iterator ,<NONE>, 'xcb_query_font_char_infos_iterator' ,\ xcb_query_font_char_infos_length ,<NONE>, 'xcb_query_font_char_infos_length' ,\ xcb_query_font_properties ,<NONE>, 'xcb_query_font_properties' ,\ xcb_query_font_properties_iterator ,<NONE>, 'xcb_query_font_properties_iterator' ,\ xcb_query_font_properties_length ,<NONE>, 'xcb_query_font_properties_length' ,\ xcb_query_font_reply ,<NONE>, 'xcb_query_font_reply' ,\ xcb_query_font_sizeof ,<NONE>, 'xcb_query_font_sizeof' ,\ xcb_query_font_unchecked ,<NONE>, 'xcb_query_font_unchecked' ,\ xcb_query_keymap ,<NONE>, 'xcb_query_keymap' ,\ xcb_query_keymap_reply ,<NONE>, 'xcb_query_keymap_reply' ,\ xcb_query_keymap_unchecked ,<NONE>, 'xcb_query_keymap_unchecked' ,\ xcb_query_pointer ,<NONE>, 'xcb_query_pointer' ,\ xcb_query_pointer_reply ,<NONE>, 'xcb_query_pointer_reply' ,\ xcb_query_pointer_unchecked ,<NONE>, 'xcb_query_pointer_unchecked' ,\ xcb_query_text_extents ,<NONE>, 'xcb_query_text_extents' ,\ xcb_query_text_extents_reply ,<NONE>, 'xcb_query_text_extents_reply' ,\ xcb_query_text_extents_sizeof ,<NONE>, 'xcb_query_text_extents_sizeof' ,\ xcb_query_text_extents_unchecked ,<NONE>, 'xcb_query_text_extents_unchecked' ,\ xcb_query_tree ,<NONE>, 'xcb_query_tree' ,\ xcb_query_tree_children ,<NONE>, 'xcb_query_tree_children' ,\ xcb_query_tree_children_end ,<NONE>, 'xcb_query_tree_children_end' ,\ xcb_query_tree_children_length ,<NONE>, 'xcb_query_tree_children_length' ,\ xcb_query_tree_reply ,<NONE>, 'xcb_query_tree_reply' ,\ xcb_query_tree_sizeof ,<NONE>, 'xcb_query_tree_sizeof' ,\ xcb_query_tree_unchecked ,<NONE>, 'xcb_query_tree_unchecked' ,\ xcb_recolor_cursor ,<NONE>, 'xcb_recolor_cursor' ,\ xcb_recolor_cursor_checked ,<NONE>, 'xcb_recolor_cursor_checked' ,\ xcb_rectangle_end ,<NONE>, 'xcb_rectangle_end' ,\ xcb_rectangle_next ,<NONE>, 'xcb_rectangle_next' ,\ xcb_register_for_special_xge ,<NONE>, 'xcb_register_for_special_xge' ,\ xcb_reparent_window ,<NONE>, 'xcb_reparent_window' ,\ xcb_reparent_window_checked ,<NONE>, 'xcb_reparent_window_checked' ,\ xcb_request_check ,<NONE>, 'xcb_request_check' ,\ xcb_rgb_end ,<NONE>, 'xcb_rgb_end' ,\ xcb_rgb_next ,<NONE>, 'xcb_rgb_next' ,\ xcb_rotate_properties ,<NONE>, 'xcb_rotate_properties' ,\ xcb_rotate_properties_atoms ,<NONE>, 'xcb_rotate_properties_atoms' ,\ xcb_rotate_properties_atoms_end ,<NONE>, 'xcb_rotate_properties_atoms_end' ,\ xcb_rotate_properties_atoms_length ,<NONE>, 'xcb_rotate_properties_atoms_length' ,\ xcb_rotate_properties_checked ,<NONE>, 'xcb_rotate_properties_checked' ,\ xcb_rotate_properties_sizeof ,<NONE>, 'xcb_rotate_properties_sizeof' ,\ xcb_screen_allowed_depths_iterator ,<NONE>, 'xcb_screen_allowed_depths_iterator' ,\ xcb_screen_allowed_depths_length ,<NONE>, 'xcb_screen_allowed_depths_length' ,\ xcb_screen_end ,<NONE>, 'xcb_screen_end' ,\ xcb_screen_next ,<NONE>, 'xcb_screen_next' ,\ xcb_screen_sizeof ,<NONE>, 'xcb_screen_sizeof' ,\ xcb_segment_end ,<NONE>, 'xcb_segment_end' ,\ xcb_segment_next ,<NONE>, 'xcb_segment_next' ,\ xcb_send_event ,<NONE>, 'xcb_send_event' ,\ xcb_send_event_checked ,<NONE>, 'xcb_send_event_checked' ,\ xcb_send_fd ,<NONE>, 'xcb_send_fd' ,\ xcb_send_request ,<NONE>, 'xcb_send_request' ,\ xcb_send_request64 ,<NONE>, 'xcb_send_request64' ,\ xcb_send_request_with_fds ,<NONE>, 'xcb_send_request_with_fds' ,\ xcb_send_request_with_fds64 ,<NONE>, 'xcb_send_request_with_fds64' ,\ xcb_set_access_control ,<NONE>, 'xcb_set_access_control' ,\ xcb_set_access_control_checked ,<NONE>, 'xcb_set_access_control_checked' ,\ xcb_set_clip_rectangles ,<NONE>, 'xcb_set_clip_rectangles' ,\ xcb_set_clip_rectangles_checked ,<NONE>, 'xcb_set_clip_rectangles_checked' ,\ xcb_set_clip_rectangles_rectangles ,<NONE>, 'xcb_set_clip_rectangles_rectangles' ,\ xcb_set_clip_rectangles_rectangles_iterator ,<NONE>, 'xcb_set_clip_rectangles_rectangles_iterator' ,\ xcb_set_clip_rectangles_rectangles_length ,<NONE>, 'xcb_set_clip_rectangles_rectangles_length' ,\ xcb_set_clip_rectangles_sizeof ,<NONE>, 'xcb_set_clip_rectangles_sizeof' ,\ xcb_set_close_down_mode ,<NONE>, 'xcb_set_close_down_mode' ,\ xcb_set_close_down_mode_checked ,<NONE>, 'xcb_set_close_down_mode_checked' ,\ xcb_set_dashes ,<NONE>, 'xcb_set_dashes' ,\ xcb_set_dashes_checked ,<NONE>, 'xcb_set_dashes_checked' ,\ xcb_set_dashes_dashes ,<NONE>, 'xcb_set_dashes_dashes' ,\ xcb_set_dashes_dashes_end ,<NONE>, 'xcb_set_dashes_dashes_end' ,\ xcb_set_dashes_dashes_length ,<NONE>, 'xcb_set_dashes_dashes_length' ,\ xcb_set_dashes_sizeof ,<NONE>, 'xcb_set_dashes_sizeof' ,\ xcb_set_font_path ,<NONE>, 'xcb_set_font_path' ,\ xcb_set_font_path_checked ,<NONE>, 'xcb_set_font_path_checked' ,\ xcb_set_font_path_font_iterator ,<NONE>, 'xcb_set_font_path_font_iterator' ,\ xcb_set_font_path_font_length ,<NONE>, 'xcb_set_font_path_font_length' ,\ xcb_set_font_path_sizeof ,<NONE>, 'xcb_set_font_path_sizeof' ,\ xcb_set_input_focus ,<NONE>, 'xcb_set_input_focus' ,\ xcb_set_input_focus_checked ,<NONE>, 'xcb_set_input_focus_checked' ,\ xcb_set_modifier_mapping ,<NONE>, 'xcb_set_modifier_mapping' ,\ xcb_set_modifier_mapping_reply ,<NONE>, 'xcb_set_modifier_mapping_reply' ,\ xcb_set_modifier_mapping_sizeof ,<NONE>, 'xcb_set_modifier_mapping_sizeof' ,\ xcb_set_modifier_mapping_unchecked ,<NONE>, 'xcb_set_modifier_mapping_unchecked' ,\ xcb_set_pointer_mapping ,<NONE>, 'xcb_set_pointer_mapping' ,\ xcb_set_pointer_mapping_reply ,<NONE>, 'xcb_set_pointer_mapping_reply' ,\ xcb_set_pointer_mapping_sizeof ,<NONE>, 'xcb_set_pointer_mapping_sizeof' ,\ xcb_set_pointer_mapping_unchecked ,<NONE>, 'xcb_set_pointer_mapping_unchecked' ,\ xcb_set_screen_saver ,<NONE>, 'xcb_set_screen_saver' ,\ xcb_set_screen_saver_checked ,<NONE>, 'xcb_set_screen_saver_checked' ,\ xcb_set_selection_owner ,<NONE>, 'xcb_set_selection_owner' ,\ xcb_set_selection_owner_checked ,<NONE>, 'xcb_set_selection_owner_checked' ,\ xcb_setup_authenticate_end ,<NONE>, 'xcb_setup_authenticate_end' ,\ xcb_setup_authenticate_next ,<NONE>, 'xcb_setup_authenticate_next' ,\ xcb_setup_authenticate_reason ,<NONE>, 'xcb_setup_authenticate_reason' ,\ xcb_setup_authenticate_reason_end ,<NONE>, 'xcb_setup_authenticate_reason_end' ,\ xcb_setup_authenticate_reason_length ,<NONE>, 'xcb_setup_authenticate_reason_length' ,\ xcb_setup_authenticate_sizeof ,<NONE>, 'xcb_setup_authenticate_sizeof' ,\ xcb_setup_end ,<NONE>, 'xcb_setup_end' ,\ xcb_setup_failed_end ,<NONE>, 'xcb_setup_failed_end' ,\ xcb_setup_failed_next ,<NONE>, 'xcb_setup_failed_next' ,\ xcb_setup_failed_reason ,<NONE>, 'xcb_setup_failed_reason' ,\ xcb_setup_failed_reason_end ,<NONE>, 'xcb_setup_failed_reason_end' ,\ xcb_setup_failed_reason_length ,<NONE>, 'xcb_setup_failed_reason_length' ,\ xcb_setup_failed_sizeof ,<NONE>, 'xcb_setup_failed_sizeof' ,\ xcb_setup_next ,<NONE>, 'xcb_setup_next' ,\ xcb_setup_pixmap_formats ,<NONE>, 'xcb_setup_pixmap_formats' ,\ xcb_setup_pixmap_formats_iterator ,<NONE>, 'xcb_setup_pixmap_formats_iterator' ,\ xcb_setup_pixmap_formats_length ,<NONE>, 'xcb_setup_pixmap_formats_length' ,\ xcb_setup_request_authorization_protocol_data ,<NONE>, 'xcb_setup_request_authorization_protocol_data' ,\ xcb_setup_request_authorization_protocol_data_end ,<NONE>, 'xcb_setup_request_authorization_protocol_data_end' ,\ xcb_setup_request_authorization_protocol_data_length ,<NONE>, 'xcb_setup_request_authorization_protocol_data_length' ,\ xcb_setup_request_authorization_protocol_name ,<NONE>, 'xcb_setup_request_authorization_protocol_name' ,\ xcb_setup_request_authorization_protocol_name_end ,<NONE>, 'xcb_setup_request_authorization_protocol_name_end' ,\ xcb_setup_request_authorization_protocol_name_length ,<NONE>, 'xcb_setup_request_authorization_protocol_name_length' ,\ xcb_setup_request_end ,<NONE>, 'xcb_setup_request_end' ,\ xcb_setup_request_next ,<NONE>, 'xcb_setup_request_next' ,\ xcb_setup_request_sizeof ,<NONE>, 'xcb_setup_request_sizeof' ,\ xcb_setup_roots_iterator ,<NONE>, 'xcb_setup_roots_iterator' ,\ xcb_setup_roots_length ,<NONE>, 'xcb_setup_roots_length' ,\ xcb_setup_sizeof ,<NONE>, 'xcb_setup_sizeof' ,\ xcb_setup_vendor ,<NONE>, 'xcb_setup_vendor' ,\ xcb_setup_vendor_end ,<NONE>, 'xcb_setup_vendor_end' ,\ xcb_setup_vendor_length ,<NONE>, 'xcb_setup_vendor_length' ,\ xcb_store_colors ,<NONE>, 'xcb_store_colors' ,\ xcb_store_colors_checked ,<NONE>, 'xcb_store_colors_checked' ,\ xcb_store_colors_items ,<NONE>, 'xcb_store_colors_items' ,\ xcb_store_colors_items_iterator ,<NONE>, 'xcb_store_colors_items_iterator' ,\ xcb_store_colors_items_length ,<NONE>, 'xcb_store_colors_items_length' ,\ xcb_store_colors_sizeof ,<NONE>, 'xcb_store_colors_sizeof' ,\ xcb_store_named_color ,<NONE>, 'xcb_store_named_color' ,\ xcb_store_named_color_checked ,<NONE>, 'xcb_store_named_color_checked' ,\ xcb_store_named_color_name ,<NONE>, 'xcb_store_named_color_name' ,\ xcb_store_named_color_name_end ,<NONE>, 'xcb_store_named_color_name_end' ,\ xcb_store_named_color_name_length ,<NONE>, 'xcb_store_named_color_name_length' ,\ xcb_store_named_color_sizeof ,<NONE>, 'xcb_store_named_color_sizeof' ,\ xcb_str_end ,<NONE>, 'xcb_str_end' ,\ xcb_str_name ,<NONE>, 'xcb_str_name' ,\ xcb_str_name_end ,<NONE>, 'xcb_str_name_end' ,\ xcb_str_name_length ,<NONE>, 'xcb_str_name_length' ,\ xcb_str_next ,<NONE>, 'xcb_str_next' ,\ xcb_str_sizeof ,<NONE>, 'xcb_str_sizeof' ,\ xcb_sumof ,<NONE>, 'xcb_sumof' ,\ xcb_take_socket ,<NONE>, 'xcb_take_socket' ,\ xcb_timecoord_end ,<NONE>, 'xcb_timecoord_end' ,\ xcb_timecoord_next ,<NONE>, 'xcb_timecoord_next' ,\ xcb_timestamp_end ,<NONE>, 'xcb_timestamp_end' ,\ xcb_timestamp_next ,<NONE>, 'xcb_timestamp_next' ,\ xcb_total_read ,<NONE>, 'xcb_total_read' ,\ xcb_total_written ,<NONE>, 'xcb_total_written' ,\ xcb_translate_coordinates ,<NONE>, 'xcb_translate_coordinates' ,\ xcb_translate_coordinates_reply ,<NONE>, 'xcb_translate_coordinates_reply' ,\ xcb_translate_coordinates_unchecked ,<NONE>, 'xcb_translate_coordinates_unchecked' ,\ xcb_ungrab_button ,<NONE>, 'xcb_ungrab_button' ,\ xcb_ungrab_button_checked ,<NONE>, 'xcb_ungrab_button_checked' ,\ xcb_ungrab_key ,<NONE>, 'xcb_ungrab_key' ,\ xcb_ungrab_keyboard ,<NONE>, 'xcb_ungrab_keyboard' ,\ xcb_ungrab_keyboard_checked ,<NONE>, 'xcb_ungrab_keyboard_checked' ,\ xcb_ungrab_key_checked ,<NONE>, 'xcb_ungrab_key_checked' ,\ xcb_ungrab_pointer ,<NONE>, 'xcb_ungrab_pointer' ,\ xcb_ungrab_pointer_checked ,<NONE>, 'xcb_ungrab_pointer_checked' ,\ xcb_ungrab_server ,<NONE>, 'xcb_ungrab_server' ,\ xcb_ungrab_server_checked ,<NONE>, 'xcb_ungrab_server_checked' ,\ xcb_uninstall_colormap ,<NONE>, 'xcb_uninstall_colormap' ,\ xcb_uninstall_colormap_checked ,<NONE>, 'xcb_uninstall_colormap_checked' ,\ xcb_unmap_subwindows ,<NONE>, 'xcb_unmap_subwindows' ,\ xcb_unmap_subwindows_checked ,<NONE>, 'xcb_unmap_subwindows_checked' ,\ xcb_unmap_window ,<NONE>, 'xcb_unmap_window' ,\ xcb_unmap_window_checked ,<NONE>, 'xcb_unmap_window_checked' ,\ xcb_unregister_for_special_event ,<NONE>, 'xcb_unregister_for_special_event' ,\ xcb_visualid_end ,<NONE>, 'xcb_visualid_end' ,\ xcb_visualid_next ,<NONE>, 'xcb_visualid_next' ,\ xcb_visualtype_end ,<NONE>, 'xcb_visualtype_end' ,\ xcb_visualtype_next ,<NONE>, 'xcb_visualtype_next' ,\ xcb_wait_for_event ,<NONE>, 'xcb_wait_for_event' ,\ xcb_wait_for_reply ,<NONE>, 'xcb_wait_for_reply' ,\ xcb_wait_for_reply64 ,<NONE>, 'xcb_wait_for_reply64' ,\ xcb_wait_for_special_event ,<NONE>, 'xcb_wait_for_special_event' ,\ xcb_warp_pointer ,<NONE>, 'xcb_warp_pointer' ,\ xcb_warp_pointer_checked ,<NONE>, 'xcb_warp_pointer_checked' ,\ xcb_window_end ,<NONE>, 'xcb_window_end' ,\ xcb_window_next ,<NONE>, 'xcb_window_next' ,\ xcb_writev ,<NONE>, 'xcb_writev' ,\ xcb_xc_misc_get_version ,<NONE>, 'xcb_xc_misc_get_version' ,\ xcb_xc_misc_get_version_reply ,<NONE>, 'xcb_xc_misc_get_version_reply' ,\ xcb_xc_misc_get_version_unchecked ,<NONE>, 'xcb_xc_misc_get_version_unchecked' ,\ xcb_xc_misc_get_xid_list ,<NONE>, 'xcb_xc_misc_get_xid_list' ,\ xcb_xc_misc_get_xid_list_ids ,<NONE>, 'xcb_xc_misc_get_xid_list_ids' ,\ xcb_xc_misc_get_xid_list_ids_end ,<NONE>, 'xcb_xc_misc_get_xid_list_ids_end' ,\ xcb_xc_misc_get_xid_list_ids_length ,<NONE>, 'xcb_xc_misc_get_xid_list_ids_length' ,\ xcb_xc_misc_get_xid_list_reply ,<NONE>, 'xcb_xc_misc_get_xid_list_reply' ,\ xcb_xc_misc_get_xid_list_sizeof ,<NONE>, 'xcb_xc_misc_get_xid_list_sizeof' ,\ xcb_xc_misc_get_xid_list_unchecked ,<NONE>, 'xcb_xc_misc_get_xid_list_unchecked' ,\ xcb_xc_misc_get_xid_range ,<NONE>, 'xcb_xc_misc_get_xid_range' ,\ xcb_xc_misc_get_xid_range_reply ,<NONE>, 'xcb_xc_misc_get_xid_range_reply' ,\ xcb_xc_misc_get_xid_range_unchecked ,<NONE>, 'xcb_xc_misc_get_xid_range_unchecked' ,\ xcb_xc_misc_id ,<NONE>, 'xcb_xc_misc_id' import_proto 'libxcb-shm.so' ,\ xcb_shm_attach ,<NONE>, 'xcb_shm_attach' ,\ xcb_shm_attach_checked ,<NONE>, 'xcb_shm_attach_checked' ,\ xcb_shm_attach_fd ,<NONE>, 'xcb_shm_attach_fd' ,\ xcb_shm_attach_fd_checked ,<NONE>, 'xcb_shm_attach_fd_checked' ,\ xcb_shm_create_pixmap ,<NONE>, 'xcb_shm_create_pixmap' ,\ xcb_shm_create_pixmap_checked ,<NONE>, 'xcb_shm_create_pixmap_checked' ,\ xcb_shm_create_segment ,<NONE>, 'xcb_shm_create_segment' ,\ xcb_shm_create_segment_reply ,<NONE>, 'xcb_shm_create_segment_reply' ,\ xcb_shm_create_segment_reply_fds ,<NONE>, 'xcb_shm_create_segment_reply_fds' ,\ xcb_shm_create_segment_unchecked ,<NONE>, 'xcb_shm_create_segment_unchecked' ,\ xcb_shm_detach ,<NONE>, 'xcb_shm_detach' ,\ xcb_shm_detach_checked ,<NONE>, 'xcb_shm_detach_checked' ,\ xcb_shm_get_image ,<NONE>, 'xcb_shm_get_image' ,\ xcb_shm_get_image_reply ,<NONE>, 'xcb_shm_get_image_reply' ,\ xcb_shm_get_image_unchecked ,<NONE>, 'xcb_shm_get_image_unchecked' ,\ xcb_shm_put_image ,<NONE>, 'xcb_shm_put_image' ,\ xcb_shm_put_image_checked ,<NONE>, 'xcb_shm_put_image_checked' ,\ xcb_shm_query_version ,<NONE>, 'xcb_shm_query_version' ,\ xcb_shm_query_version_reply ,<NONE>, 'xcb_shm_query_version_reply' ,\ xcb_shm_query_version_unchecked ,<NONE>, 'xcb_shm_query_version_unchecked' ,\ xcb_shm_seg_end ,<NONE>, 'xcb_shm_seg_end' ,\ xcb_shm_seg_next ,<NONE>, 'xcb_shm_seg_next' ,\ xcb_shm_id ,<NONE>, 'xcb_shm_id' ;<< This is variable! |
Added freshlib/imports/Linux/pthreads.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: libpthread (posix threads) import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Needs editing of the function arguments ;_________________________________________________________________________________________ import_proto 'libpthread.so.0', \ fork ,<NONE>, 'fork', \ longjmp ,<NONE>, 'longjmp', \ pthread_atfork ,<NONE>, 'pthread_atfork', \ pthread_attr_destroy ,<NONE>, 'pthread_attr_destroy', \ pthread_attr_getaffinity_np ,<NONE>, 'pthread_attr_getaffinity_np', \ pthread_attr_getdetachstate ,<NONE>, 'pthread_attr_getdetachstate', \ pthread_attr_getguardsize ,<NONE>, 'pthread_attr_getguardsize', \ pthread_attr_getinheritsched ,<NONE>, 'pthread_attr_getinheritsched', \ pthread_attr_getschedparam ,<NONE>, 'pthread_attr_getschedparam', \ pthread_attr_getschedpolicy ,<NONE>, 'pthread_attr_getschedpolicy', \ pthread_attr_getscope ,<NONE>, 'pthread_attr_getscope', \ pthread_attr_getstack ,<NONE>, 'pthread_attr_getstack', \ pthread_attr_getstackaddr ,<NONE>, 'pthread_attr_getstackaddr', \ pthread_attr_getstacksize ,<NONE>, 'pthread_attr_getstacksize', \ pthread_attr_init ,<NONE>, 'pthread_attr_init', \ pthread_attr_setaffinity_np ,<NONE>, 'pthread_attr_setaffinity_np', \ pthread_attr_setdetachstate ,<NONE>, 'pthread_attr_setdetachstate', \ pthread_attr_setguardsize ,<NONE>, 'pthread_attr_setguardsize', \ pthread_attr_setinheritsched ,<NONE>, 'pthread_attr_setinheritsched', \ pthread_attr_setschedparam ,<NONE>, 'pthread_attr_setschedparam', \ pthread_attr_setschedpolicy ,<NONE>, 'pthread_attr_setschedpolicy', \ pthread_attr_setscope ,<NONE>, 'pthread_attr_setscope', \ pthread_attr_setstack ,<NONE>, 'pthread_attr_setstack', \ pthread_attr_setstackaddr ,<NONE>, 'pthread_attr_setstackaddr', \ pthread_attr_setstacksize ,<NONE>, 'pthread_attr_setstacksize', \ pthread_barrier_destroy ,<NONE>, 'pthread_barrier_destroy', \ pthread_barrier_init ,<NONE>, 'pthread_barrier_init', \ pthread_barrier_wait ,<NONE>, 'pthread_barrier_wait', \ pthread_barrierattr_destroy ,<NONE>, 'pthread_barrierattr_destroy', \ pthread_barrierattr_getpshared ,<NONE>, 'pthread_barrierattr_getpshared', \ pthread_barrierattr_init ,<NONE>, 'pthread_barrierattr_init', \ pthread_barrierattr_setpshared ,<NONE>, 'pthread_barrierattr_setpshared', \ pthread_cancel ,<NONE>, 'pthread_cancel', \ pthread_cond_broadcast ,<NONE>, 'pthread_cond_broadcast', \ pthread_cond_destroy ,<NONE>, 'pthread_cond_destroy', \ pthread_cond_init ,<NONE>, 'pthread_cond_init', \ pthread_cond_signal ,<NONE>, 'pthread_cond_signal', \ pthread_cond_timedwait ,<NONE>, 'pthread_cond_timedwait', \ pthread_cond_wait ,<NONE>, 'pthread_cond_wait', \ pthread_condattr_destroy ,<NONE>, 'pthread_condattr_destroy', \ pthread_condattr_getclock ,<NONE>, 'pthread_condattr_getclock', \ pthread_condattr_getpshared ,<NONE>, 'pthread_condattr_getpshared', \ pthread_condattr_init ,<NONE>, 'pthread_condattr_init', \ pthread_condattr_setclock ,<NONE>, 'pthread_condattr_setclock', \ pthread_condattr_setpshared ,<NONE>, 'pthread_condattr_setpshared', \ pthread_create ,<.pThreadID, .attr, .pThreadProc, .argument>,'pthread_create', \ pthread_detach ,<NONE>, 'pthread_detach', \ pthread_equal ,<NONE>, 'pthread_equal', \ pthread_exit ,<.retval>, 'pthread_exit', \ pthread_getaffinity_np ,<NONE>, 'pthread_getaffinity_np', \ pthread_getattr_np ,<NONE>, 'pthread_getattr_np', \ pthread_getconcurrency ,<NONE>, 'pthread_getconcurrency', \ pthread_getcpuclockid ,<NONE>, 'pthread_getcpuclockid', \ pthread_getschedparam ,<NONE>, 'pthread_getschedparam', \ pthread_getspecific ,<NONE>, 'pthread_getspecific', \ pthread_join ,<NONE>, 'pthread_join', \ pthread_key_create ,<NONE>, 'pthread_key_create', \ pthread_key_delete ,<NONE>, 'pthread_key_delete', \ pthread_kill ,<.ThreadID, .signal>, 'pthread_kill', \ pthread_kill_other_threads_np ,<NONE>, 'pthread_kill_other_threads_np', \ pthread_mutex_consistent_np ,<NONE>, 'pthread_mutex_consistent_np', \ pthread_mutex_destroy ,<.pMutex>, 'pthread_mutex_destroy', \ pthread_mutex_getprioceiling ,<NONE>, 'pthread_mutex_getprioceiling', \ pthread_mutex_init ,<.pMutex, .pAttr>, 'pthread_mutex_init', \ pthread_mutex_lock ,<.pMutex>, 'pthread_mutex_lock', \ pthread_mutex_setprioceiling ,<NONE>, 'pthread_mutex_setprioceiling', \ pthread_mutex_timedlock ,<.pMutex, .pTimeout>, 'pthread_mutex_timedlock', \ pthread_mutex_trylock ,<.pMutex>, 'pthread_mutex_trylock', \ pthread_mutex_unlock ,<.pMutex>, 'pthread_mutex_unlock', \ pthread_mutexattr_destroy ,<.pAttr>, 'pthread_mutexattr_destroy', \ pthread_mutexattr_getkind_np ,<NONE>, 'pthread_mutexattr_getkind_np', \ pthread_mutexattr_getprioceiling ,<NONE>, 'pthread_mutexattr_getprioceiling', \ pthread_mutexattr_getprotocol ,<NONE>, 'pthread_mutexattr_getprotocol', \ pthread_mutexattr_getpshared ,<NONE>, 'pthread_mutexattr_getpshared', \ pthread_mutexattr_getrobust_np ,<NONE>, 'pthread_mutexattr_getrobust_np', \ pthread_mutexattr_gettype ,<NONE>, 'pthread_mutexattr_gettype', \ pthread_mutexattr_init ,<.pAttr>, 'pthread_mutexattr_init', \ pthread_mutexattr_setkind_np ,<NONE>, 'pthread_mutexattr_setkind_np', \ pthread_mutexattr_setprioceiling ,<NONE>, 'pthread_mutexattr_setprioceiling', \ pthread_mutexattr_setprotocol ,<NONE>, 'pthread_mutexattr_setprotocol', \ pthread_mutexattr_setpshared ,<NONE>, 'pthread_mutexattr_setpshared', \ pthread_mutexattr_setrobust_np ,<NONE>, 'pthread_mutexattr_setrobust_np', \ pthread_mutexattr_settype ,<NONE>, 'pthread_mutexattr_settype', \ pthread_once ,<NONE>, 'pthread_once', \ pthread_rwlock_destroy ,<NONE>, 'pthread_rwlock_destroy', \ pthread_rwlock_init ,<NONE>, 'pthread_rwlock_init', \ pthread_rwlock_rdlock ,<NONE>, 'pthread_rwlock_rdlock', \ pthread_rwlock_timedrdlock ,<NONE>, 'pthread_rwlock_timedrdlock', \ pthread_rwlock_timedwrlock ,<NONE>, 'pthread_rwlock_timedwrlock', \ pthread_rwlock_tryrdlock ,<NONE>, 'pthread_rwlock_tryrdlock', \ pthread_rwlock_trywrlock ,<NONE>, 'pthread_rwlock_trywrlock', \ pthread_rwlock_unlock ,<NONE>, 'pthread_rwlock_unlock', \ pthread_rwlock_wrlock ,<NONE>, 'pthread_rwlock_wrlock', \ pthread_rwlockattr_destroy ,<NONE>, 'pthread_rwlockattr_destroy', \ pthread_rwlockattr_getkind_np ,<NONE>, 'pthread_rwlockattr_getkind_np', \ pthread_rwlockattr_getpshared ,<NONE>, 'pthread_rwlockattr_getpshared', \ pthread_rwlockattr_init ,<NONE>, 'pthread_rwlockattr_init', \ pthread_rwlockattr_setkind_np ,<NONE>, 'pthread_rwlockattr_setkind_np', \ pthread_rwlockattr_setpshared ,<NONE>, 'pthread_rwlockattr_setpshared', \ pthread_self ,<NONE>, 'pthread_self', \ pthread_setaffinity_np ,<NONE>, 'pthread_setaffinity_np', \ pthread_setcancelstate ,<NONE>, 'pthread_setcancelstate', \ pthread_setcanceltype ,<NONE>, 'pthread_setcanceltype', \ pthread_setconcurrency ,<NONE>, 'pthread_setconcurrency', \ pthread_setschedparam ,<NONE>, 'pthread_setschedparam', \ pthread_setschedprio ,<NONE>, 'pthread_setschedprio', \ pthread_setspecific ,<NONE>, 'pthread_setspecific', \ pthread_sigmask ,<NONE>, 'pthread_sigmask', \ pthread_spin_destroy ,<NONE>, 'pthread_spin_destroy', \ pthread_spin_init ,<NONE>, 'pthread_spin_init', \ pthread_spin_lock ,<NONE>, 'pthread_spin_lock', \ pthread_spin_trylock ,<NONE>, 'pthread_spin_trylock', \ pthread_spin_unlock ,<NONE>, 'pthread_spin_unlock', \ pthread_testcancel ,<NONE>, 'pthread_testcancel', \ pthread_timedjoin_np ,<NONE>, 'pthread_timedjoin_np', \ pthread_tryjoin_np ,<NONE>, 'pthread_tryjoin_np', \ pthread_yield ,<NONE>, 'pthread_yield', \ pwrite ,<NONE>, 'pwrite', \ pwrite64 ,<NONE>, 'pwrite64', \ raise ,<NONE>, 'raise', \ \;read ,<NONE>, 'read', \ recv ,<NONE>, 'recv', \ recvfrom ,<NONE>, 'recvfrom', \ recvmsg ,<NONE>, 'recvmsg', \ sem_close ,<NONE>, 'sem_close', \ sem_destroy ,<NONE>, 'sem_destroy', \ sem_getvalue ,<NONE>, 'sem_getvalue', \ sem_init ,<NONE>, 'sem_init', \ sem_open ,<NONE>, 'sem_open', \ sem_post ,<NONE>, 'sem_post', \ sem_timedwait ,<NONE>, 'sem_timedwait', \ sem_trywait ,<NONE>, 'sem_trywait', \ sem_unlink ,<NONE>, 'sem_unlink', \ sem_wait ,<NONE>, 'sem_wait', \ send ,<NONE>, 'send', \ sendmsg ,<NONE>, 'sendmsg', \ sendto ,<NONE>, 'sendto', \ sigaction ,<NONE>, 'sigaction', \ siglongjmp ,<NONE>, 'siglongjmp', \ sigwait ,<NONE>, 'sigwait', \ system ,<NONE>, 'system', \ tcdrain ,<NONE>, 'tcdrain', \ vfork ,<NONE>, 'vfork', \ waitpid ,<NONE>, 'waitpid';, \ \;write ,<NONE>, 'write' |
Added freshlib/imports/Linux/sdl.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SDL v1.2.11 API functions. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ; ; SDL 1.2.11 includes written by Raedwulf ; a.k.a. Tai Chi Minh Ralph Eastwood ; ; There's no warranty for the correctness nor completeness of this file ; However, please mail me at tcmreastwood@ntlworld.com if you spot ; any errors in here. ; ; Version Date: 07/11/2006 (dd/mm/yyyy) ;_________________________________________________________________________________________ import_proto 'libSDL-1.2.so.0', \ SDL_AddTimer, <NONE>, 'SDL_AddTimer', \ SDL_AllocRW, <NONE>, 'SDL_AllocRW', \ SDL_AudioDriverName, <NONE>, 'SDL_AudioDriverName', \ SDL_AudioInit, <NONE>, 'SDL_AudioInit', \ SDL_AudioQuit, <NONE>, 'SDL_AudioQuit', \ SDL_BuildAudioCVT, <NONE>, 'SDL_BuildAudioCVT', \ SDL_CDClose, <NONE>, 'SDL_CDClose', \ SDL_CDEject, <NONE>, 'SDL_CDEject', \ SDL_CDName, <NONE>, 'SDL_CDName', \ SDL_CDNumDrives, <NONE>, 'SDL_CDNumDrives', \ SDL_CDOpen, <NONE>, 'SDL_CDOpen', \ SDL_CDPause, <NONE>, 'SDL_CDPause', \ SDL_CDPlay, <NONE>, 'SDL_CDPlay', \ SDL_CDPlayTracks, <NONE>, 'SDL_CDPlayTracks',\ SDL_CDResume, <NONE>, 'SDL_CDResume',\ SDL_CDStatus, <NONE>, 'SDL_CDStatus',\ SDL_CDStop, <NONE>, 'SDL_CDStop',\ SDL_ClearError, <NONE>, 'SDL_ClearError',\ SDL_CloseAudio, <NONE>, 'SDL_CloseAudio',\ SDL_CondBroadcast, <NONE>, 'SDL_CondBroadcast',\ SDL_CondSignal, <NONE>, 'SDL_CondSignal',\ SDL_CondWait, <NONE>, 'SDL_CondWait',\ SDL_CondWaitTimeout, <NONE>, 'SDL_CondWaitTimeout',\ SDL_ConvertAudio, <NONE>, 'SDL_ConvertAudio',\ SDL_ConvertSurface, <NONE>, 'SDL_ConvertSurface',\ SDL_CreateCond, <NONE>, 'SDL_CreateCond',\ SDL_CreateCursor, <NONE>, 'SDL_CreateCursor',\ SDL_CreateMutex, <NONE>, 'SDL_CreateMutex',\ SDL_CreateRGBSurface, <NONE>, 'SDL_CreateRGBSurface',\ SDL_CreateRGBSurfaceFrom, <NONE>, 'SDL_CreateRGBSurfaceFrom',\ SDL_CreateSemaphore, <NONE>, 'SDL_CreateSemaphore',\ SDL_CreateThread, <NONE>, 'SDL_CreateThread',\ SDL_CreateYUVOverlay, <NONE>, 'SDL_CreateYUVOverlay',\ SDL_Delay, <NONE>, 'SDL_Delay',\ SDL_DestroyCond, <NONE>, 'SDL_DestroyCond',\ SDL_DestroyMutex, <NONE>, 'SDL_DestroyMutex',\ SDL_DestroySemaphore, <NONE>, 'SDL_DestroySemaphore',\ SDL_DisplayFormat, <NONE>, 'SDL_DisplayFormat',\ SDL_DisplayFormatAlpha, <NONE>, 'SDL_DisplayFormatAlpha',\ SDL_DisplayYUVOverlay, <NONE>, 'SDL_DisplayYUVOverlay',\ SDL_EnableKeyRepeat, <NONE>, 'SDL_EnableKeyRepeat',\ SDL_EnableUNICODE, <NONE>, 'SDL_EnableUNICODE',\ SDL_Error, <NONE>, 'SDL_Error',\ SDL_EventState, <NONE>, 'SDL_EventState',\ SDL_FillRect, <NONE>, 'SDL_FillRect',\ SDL_Flip, <NONE>, 'SDL_Flip',\ SDL_FreeCursor, <NONE>, 'SDL_FreeCursor',\ SDL_FreeRW, <NONE>, 'SDL_FreeRW',\ SDL_FreeSurface, <NONE>, 'SDL_FreeSurface',\ SDL_FreeWAV, <NONE>, 'SDL_FreeWAV',\ SDL_FreeYUVOverlay, <NONE>, 'SDL_FreeYUVOverlay',\ SDL_GL_GetAttribute, <NONE>, 'SDL_GL_GetAttribute',\ SDL_GL_GetProcAddress, <NONE>, 'SDL_GL_GetProcAddress',\ SDL_GL_LoadLibrary, <NONE>, 'SDL_GL_LoadLibrary',\ SDL_GL_Lock, <NONE>, 'SDL_GL_Lock',\ SDL_GL_SetAttribute, <NONE>, 'SDL_GL_SetAttribute',\ SDL_GL_SwapBuffers, <NONE>, 'SDL_GL_SwapBuffers',\ SDL_GL_Unlock, <NONE>, 'SDL_GL_Unlock',\ SDL_GL_UpdateRects, <NONE>, 'SDL_GL_UpdateRects',\ SDL_GetAppState, <NONE>, 'SDL_GetAppState',\ SDL_GetAudioStatus, <NONE>, 'SDL_GetAudioStatus',\ SDL_GetClipRect, <NONE>, 'SDL_GetClipRect',\ SDL_GetCursor, <NONE>, 'SDL_GetCursor',\ SDL_GetError, <NONE>, 'SDL_GetError',\ SDL_GetEventFilter, <NONE>, 'SDL_GetEventFilter',\ SDL_GetGammaRamp, <NONE>, 'SDL_GetGammaRamp',\ SDL_GetKeyName, <NONE>, 'SDL_GetKeyName',\ SDL_GetKeyRepeat, <NONE>, 'SDL_GetKeyRepeat',\ SDL_GetKeyState, <NONE>, 'SDL_GetKeyState',\ SDL_GetModState, <NONE>, 'SDL_GetModState',\ SDL_GetMouseState, <NONE>, 'SDL_GetMouseState',\ SDL_GetRGB, <NONE>, 'SDL_GetRGB',\ SDL_GetRGBA, <NONE>, 'SDL_GetRGBA',\ SDL_GetRelativeMouseState, <NONE>, 'SDL_GetRelativeMouseState',\ SDL_GetThreadID, <NONE>, 'SDL_GetThreadID',\ SDL_GetTicks, <NONE>, 'SDL_GetTicks',\ SDL_GetVideoInfo, <NONE>, 'SDL_GetVideoInfo',\ SDL_GetVideoSurface, <NONE>, 'SDL_GetVideoSurface',\ SDL_GetWMInfo, <NONE>, 'SDL_GetWMInfo',\ SDL_Has3DNow, <NONE>, 'SDL_Has3DNow',\ SDL_Has3DNowExt, <NONE>, 'SDL_Has3DNowExt',\ SDL_HasAltiVec, <NONE>, 'SDL_HasAltiVec',\ SDL_HasMMX, <NONE>, 'SDL_HasMMX',\ SDL_HasMMXExt, <NONE>, 'SDL_HasMMXExt',\ SDL_HasRDTSC, <NONE>, 'SDL_HasRDTSC',\ SDL_HasSSE, <NONE>, 'SDL_HasSSE',\ SDL_HasSSE2, <NONE>, 'SDL_HasSSE2',\ SDL_Init, <NONE>, 'SDL_Init',\ SDL_InitSubSystem, <NONE>, 'SDL_InitSubSystem',\ SDL_JoystickClose, <NONE>, 'SDL_JoystickClose',\ SDL_JoystickEventState, <NONE>, 'SDL_JoystickEventState',\ SDL_JoystickGetAxis, <NONE>, 'SDL_JoystickGetAxis',\ SDL_JoystickGetBall, <NONE>, 'SDL_JoystickGetBall',\ SDL_JoystickGetButton, <NONE>, 'SDL_JoystickGetButton',\ SDL_JoystickGetHat, <NONE>, 'SDL_JoystickGetHat',\ SDL_JoystickIndex, <NONE>, 'SDL_JoystickIndex',\ SDL_JoystickName, <NONE>, 'SDL_JoystickName',\ SDL_JoystickNumAxes, <NONE>, 'SDL_JoystickNumAxes',\ SDL_JoystickNumBalls, <NONE>, 'SDL_JoystickNumBalls',\ SDL_JoystickNumButtons, <NONE>, 'SDL_JoystickNumButtons',\ SDL_JoystickNumHats, <NONE>, 'SDL_JoystickNumHats',\ SDL_JoystickOpen, <NONE>, 'SDL_JoystickOpen',\ SDL_JoystickOpened, <NONE>, 'SDL_JoystickOpened',\ SDL_JoystickUpdate, <NONE>, 'SDL_JoystickUpdate',\ SDL_KillThread, <NONE>, 'SDL_KillThread',\ SDL_Linked_Version, <NONE>, 'SDL_Linked_Version',\ SDL_ListModes, <NONE>, 'SDL_ListModes',\ SDL_LoadBMP_RW, <NONE>, 'SDL_LoadBMP_RW',\ SDL_LoadFunction, <NONE>, 'SDL_LoadFunction',\ SDL_LoadObject, <NONE>, 'SDL_LoadObject',\ SDL_LoadWAV_RW, <NONE>, 'SDL_LoadWAV_RW',\ SDL_LockAudio, <NONE>, 'SDL_LockAudio',\ SDL_LockSurface, <NONE>, 'SDL_LockSurface',\ SDL_LockYUVOverlay, <NONE>, 'SDL_LockYUVOverlay',\ SDL_LowerBlit, <NONE>, 'SDL_LowerBlit',\ SDL_MapRGB, <NONE>, 'SDL_MapRGB',\ SDL_MapRGBA, <NONE>, 'SDL_MapRGBA',\ SDL_MixAudio, <NONE>, 'SDL_MixAudio',\ SDL_NumJoysticks, <NONE>, 'SDL_NumJoysticks',\ SDL_OpenAudio, <NONE>, 'SDL_OpenAudio',\ SDL_PauseAudio, <NONE>, 'SDL_PauseAudio',\ SDL_PeepEvents, <NONE>, 'SDL_PeepEvents',\ SDL_PollEvent, <NONE>, 'SDL_PollEvent',\ SDL_PumpEvents, <NONE>, 'SDL_PumpEvents',\ SDL_PushEvent, <NONE>, 'SDL_PushEvent',\ SDL_Quit, <NONE>, 'SDL_Quit',\ SDL_QuitSubSystem, <NONE>, 'SDL_QuitSubSystem',\ SDL_RWFromConstMem, <NONE>, 'SDL_RWFromConstMem',\ SDL_RWFromFP, <NONE>, 'SDL_RWFromFP',\ SDL_RWFromFile, <NONE>, 'SDL_RWFromFile',\ SDL_RWFromMem, <NONE>, 'SDL_RWFromMem',\ SDL_ReadBE16, <NONE>, 'SDL_ReadBE16',\ SDL_ReadBE32, <NONE>, 'SDL_ReadBE32',\ SDL_ReadBE64, <NONE>, 'SDL_ReadBE64',\ SDL_ReadLE16, <NONE>, 'SDL_ReadLE16',\ SDL_ReadLE32, <NONE>, 'SDL_ReadLE32',\ SDL_ReadLE64, <NONE>, 'SDL_ReadLE64',\ SDL_RegisterApp, <NONE>, 'SDL_RegisterApp',\ SDL_RemoveTimer, <NONE>, 'SDL_RemoveTimer',\ SDL_SaveBMP_RW, <NONE>, 'SDL_SaveBMP_RW',\ SDL_SemPost, <NONE>, 'SDL_SemPost',\ SDL_SemTryWait, <NONE>, 'SDL_SemTryWait',\ SDL_SemValue, <NONE>, 'SDL_SemValue',\ SDL_SemWait, <NONE>, 'SDL_SemWait',\ SDL_SemWaitTimeout, <NONE>, 'SDL_SemWaitTimeout',\ SDL_SetAlpha, <NONE>, 'SDL_SetAlpha',\ SDL_SetClipRect, <NONE>, 'SDL_SetClipRect',\ SDL_SetColorKey, <NONE>, 'SDL_SetColorKey',\ SDL_SetColors, <NONE>, 'SDL_SetColors',\ SDL_SetCursor, <NONE>, 'SDL_SetCursor',\ SDL_SetError, <NONE>, 'SDL_SetError',\ SDL_SetEventFilter, <NONE>, 'SDL_SetEventFilter',\ SDL_SetGamma, <NONE>, 'SDL_SetGamma',\ SDL_SetGammaRamp, <NONE>, 'SDL_SetGammaRamp',\ SDL_SetModState, <NONE>, 'SDL_SetModState',\ SDL_SetModuleHandle, <NONE>, 'SDL_SetModuleHandle',\ SDL_SetPalette, <NONE>, 'SDL_SetPalette',\ SDL_SetTimer, <NONE>, 'SDL_SetTimer',\ SDL_SetVideoMode, <NONE>, 'SDL_SetVideoMode',\ SDL_ShowCursor, <NONE>, 'SDL_ShowCursor',\ SDL_SoftStretch, <NONE>, 'SDL_SoftStretch',\ SDL_ThreadID, <NONE>, 'SDL_ThreadID',\ SDL_UnloadObject, <NONE>, 'SDL_UnloadObject',\ SDL_UnlockAudio, <NONE>, 'SDL_UnlockAudio',\ SDL_UnlockSurface, <NONE>, 'SDL_UnlockSurface',\ SDL_UnlockYUVOverlay, <NONE>, 'SDL_UnlockYUVOverlay',\ SDL_UnregisterApp, <NONE>, 'SDL_UnregisterApp',\ SDL_UpdateRect, <NONE>, 'SDL_UpdateRect',\ SDL_UpdateRects, <NONE>, 'SDL_UpdateRects',\ SDL_UpperBlit, <NONE>, 'SDL_UpperBlit',\ SDL_VideoDriverName, <NONE>, 'SDL_VideoDriverName',\ SDL_VideoInit, <NONE>, 'SDL_VideoInit',\ SDL_VideoModeOK, <NONE>, 'SDL_VideoModeOK',\ SDL_VideoQuit, <NONE>, 'SDL_VideoQuit',\ SDL_WM_GetCaption, <NONE>, 'SDL_WM_GetCaption',\ SDL_WM_GrabInput, <NONE>, 'SDL_WM_GrabInput',\ SDL_WM_IconifyWindow, <NONE>, 'SDL_WM_IconifyWindow',\ SDL_WM_SetCaption, <NONE>, 'SDL_WM_SetCaption',\ SDL_WM_SetIcon, <NONE>, 'SDL_WM_SetIcon',\ SDL_WM_ToggleFullScreen, <NONE>, 'SDL_WM_ToggleFullScreen',\ SDL_WaitEvent, <NONE>, 'SDL_WaitEvent',\ SDL_WaitThread, <NONE>, 'SDL_WaitThread',\ SDL_WarpMouse, <NONE>, 'SDL_WarpMouse',\ SDL_WasInit, <NONE>, 'SDL_WasInit',\ SDL_WriteBE16, <NONE>, 'SDL_WriteBE16',\ SDL_WriteBE32, <NONE>, 'SDL_WriteBE32',\ SDL_WriteBE64, <NONE>, 'SDL_WriteBE64',\ SDL_WriteLE16, <NONE>, 'SDL_WriteLE16',\ SDL_WriteLE32, <NONE>, 'SDL_WriteLE32',\ SDL_WriteLE64, <NONE>, 'SDL_WriteLE64',\ SDL_getenv, <NONE>, 'SDL_getenv',\ SDL_iconv, <NONE>, 'SDL_iconv',\ SDL_iconv_close, <NONE>, 'SDL_iconv_close',\ SDL_iconv_open, <NONE>, 'SDL_iconv_open',\ SDL_iconv_string, <NONE>, 'SDL_iconv_string',\ SDL_lltoa, <NONE>, 'SDL_lltoa',\ SDL_mutexP, <NONE>, 'SDL_mutexP',\ SDL_mutexV, <NONE>, 'SDL_mutexV',\ SDL_putenv, <NONE>, 'SDL_putenv',\ SDL_revcpy, <NONE>, 'SDL_revcpy',\ SDL_snprintf, <NONE>, 'SDL_snprintf',\ SDL_strdup, <NONE>, 'SDL_strdup',\ SDL_strlcat, <NONE>, 'SDL_strlcat',\ SDL_strlcpy, <NONE>, 'SDL_strlcpy',\ SDL_strtoull, <NONE>, 'SDL_strtoull',\ SDL_ulltoa, <NONE>, 'SDL_ulltoa',\ SDL_vsnprintf, <NONE>, 'SDL_vsnprintf' |
Added freshlib/imports/Linux/sdl_image.inc.
> > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SDL_image v1.2 API functions. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ; _______________________________________________________________________________________ import_proto 'libSDL_image-1.2.so.0', \ IMG_Load, <NONE>, 'IMG_Load' |
Added freshlib/imports/Linux/sqleet.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: sqlite3.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto './libsqleet.so', \ sqliteAggregateContext, <.context, .nbytes>, 'sqlite3_aggregate_context', \ sqliteAutoExtension, <.ptrCallback>, 'sqlite3_auto_extension', \ sqliteBackupFinish, <.ptrBackup>, 'sqlite3_backup_finish', \ sqliteBackupInit, <.ptrDestDB, .ptrDestName, .ptrSourceDB, .ptrSourceName>, 'sqlite3_backup_init', \ sqliteBackupPageCount, <.ptrBackup>, 'sqlite3_backup_pagecount', \ sqliteBackupRemaining, <.ptrBackup>, 'sqlite3_backup_remaining', \ sqliteBackupStep, <.ptrBackup, .nPage>, 'sqlite3_backup_step', \ sqliteBindBlob, <.stmt, .index, .ptrData, .nbytes, .destructor>, 'sqlite3_bind_blob', \ sqliteBindDouble, <.stmt, .index, .value>, 'sqlite3_bind_double', \ sqliteBindInt, <.stmt, .index, .value>, 'sqlite3_bind_int', \ sqliteBindInt64, <.stmt, .index, .valueLo, .valueHi>, 'sqlite3_bind_int64', \ sqliteBindNull, <.stmt, .index>, 'sqlite3_bind_null', \ sqliteBindParameterCount, <.stmt>, 'sqlite3_bind_parameter_count', \ sqliteBindParameterIndex, <.stmt, .paramName>, 'sqlite3_bind_parameter_index', \ sqliteBindParameterName, <.stmt, .paramIndex>, 'sqlite3_bind_parameter_name', \ sqliteBindText, <.stmt, .index, .ptrText, .nbytes, .destructor>, 'sqlite3_bind_text', \ sqliteBindText16, <.stmt, .index, .ptrText, .nbytes, .destructor>, 'sqlite3_bind_text16', \ sqliteBindValue, <.stmt, .index, .ptrValue>, 'sqlite3_bind_value', \ sqliteBindZeroblob, <.stmt, .index, .size>, 'sqlite3_bind_zeroblob', \ sqliteBlobBytes, <.hBlob>, 'sqlite3_blob_bytes', \ sqliteBlobClose, <.hBlob>, 'sqlite3_blob_close', \ sqliteBlobOpen, <.ptrDB, .DBname, .Table, .Column, .iRow, .flags, .ptrVarBlob>, 'sqlite3_blob_open', \ sqliteBlobRead, <.hBlob, .ptrBuffer, .bytes, .iOffset>, 'sqlite3_blob_read', \ sqliteBlobWrite, <.hBlob, .ptrBuffer, .bytes, .iOffset>, 'sqlite3_blob_write', \ sqliteBusyHandler, <.ptrDB, .ptrProc, .lParam>, 'sqlite3_busy_handler', \ sqliteBusyTimeout, <.ptrDB, .time_ms>, 'sqlite3_busy_timeout', \ sqliteChanges, <.ptrDB>, 'sqlite3_changes', \ sqliteClearBindings, <.stmt>, 'sqlite3_clear_bindings', \ sqliteClose, <.ptrDatabase>, 'sqlite3_close', \ sqliteCollationNeeded, <.ptrDB, .lparam, .ptrCallback>, 'sqlite3_collation_needed', \ sqliteCollationNeeded16, <.ptrDB, .lparam, .ptrCallback>, 'sqlite3_collation_needed16', \ sqliteColumnBlob, <.stmt, .iCol>, 'sqlite3_column_blob', \ sqliteColumnBytes, <.stmt, .iCol>, 'sqlite3_column_bytes', \ sqliteColumnBytes16, <.stmt, .iCol>, 'sqlite3_column_bytes16', \ sqliteColumnCount, <.stmt>, 'sqlite3_column_count', \ sqliteColumnDatabaseName, <.stmt, .index>, 'sqlite3_column_database_name', \ sqliteColumnDatabaseName16, <.stmt, .index>, 'sqlite3_column_database_name16', \ sqliteColumnDeclType, <.stmt, .index>, 'sqlite3_column_decltype', \ sqliteColumnDeclType16, <.stmt, .index>, 'sqlite3_column_decltype16', \ sqliteColumnDouble, <.stmt, .iCol>, 'sqlite3_column_double', \ sqliteColumnInt, <.stmt, .iCol>, 'sqlite3_column_int', \ sqliteColumnInt64, <.stmt, .iCol>, 'sqlite3_column_int64', \ sqliteColumnName, <.stmt, .index>, 'sqlite3_column_name', \ sqliteColumnName16, <.stmt, .index>, 'sqlite3_column_name16', \ sqliteColumnOriginName, <.stmt, .index>, 'sqlite3_column_origin_name', \ sqliteColumnOriginName16, <.stmt, .index>, 'sqlite3_column_origin_name16', \ sqliteColumnTableName, <.stmt, .index>, 'sqlite3_column_table_name', \ sqliteColumnTableName16, <.stmt, .index>, 'sqlite3_column_table_name16', \ sqliteColumnText, <.stmt, .iCol>, 'sqlite3_column_text', \ sqliteColumnText16, <.stmt, .iCol>, 'sqlite3_column_text16', \ sqliteColumnType, <.stmt, .iCol>, 'sqlite3_column_type', \ sqliteColumnValue, <.stmt, .iCol>, 'sqlite3_column_value', \ sqliteCommitHook, <.ptrDB, .ptrHook, .lparam>, 'sqlite3_commit_hook', \ sqliteCompileOptionGet, <.N>, 'sqlite3_compileoption_get', \ sqliteCompileOptionUsed, <.ptrOptName>, 'sqlite3_compileoption_used', \ sqliteComplete, <.ptrSQL>, 'sqlite3_complete', \ sqliteComplete16, <.ptrSQL>, 'sqlite3_complete16', \ sqliteConfig, <.index, ...>, 'sqlite3_config', \ sqliteContextDBHandle, <.context>, 'sqlite3_context_db_handle', \ sqliteCreateCollation, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare>, 'sqlite3_create_collation', \ sqliteCreateCollation16, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare>, 'sqlite3_create_collation16', \ sqliteCreateCollation_v2, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare, .ptrDestroy>, 'sqlite3_create_collation_v2', \ sqliteCreateFunction, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal>, 'sqlite3_create_function', \ sqliteCreateFunction16, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal>, 'sqlite3_create_function16', \ sqliteCreateFunction_v2, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal, .procDestroy>, 'sqlite3_create_function_v2', \ sqliteCreateModule, <.ptrDB, .ptrModuleName, .ptrVTableModule, .lparam>, 'sqlite3_create_module', \ sqliteCreateModule_v2, <.ptrDB, .ptrModuleName, .ptrVTableModule, .lparam, .procDestroy>, 'sqlite3_create_module_v2', \ sqliteDBConfig, <.ptrDB, .index, ...>, 'sqlite3_db_config', \ sqliteDBHandle, <.stmt>, 'sqlite3_db_handle', \ sqliteDBMutex, <.ptrDB>, 'sqlite3_db_mutex', \ sqliteDBStatus, <.ptrDB, .index, .ptrRetCurrent, .ptrRetHighest, .flagReset>, 'sqlite3_db_status', \ sqliteDataCount, <.stmt>, 'sqlite3_data_count', \ sqliteDeclareVtab, <.ptrDB, .ptrSQL>, 'sqlite3_declare_vtab', \ sqliteEnableLoadExtension, <.ptrDB, .flagEnable>, 'sqlite3_enable_load_extension', \ sqliteEnableSharedCache, <.flagEnable>, 'sqlite3_enable_shared_cache', \ sqliteErrCode, <.ptrDB>, 'sqlite3_errcode', \ sqliteErrMsg, <.ptrDB>, 'sqlite3_errmsg', \ sqliteErrMsg16, <.ptrDB>, 'sqlite3_errmsg16', \ sqliteErrStr, <.err_code>, 'sqlite3_errstr', \ sqliteExec, <.ptrDB, .ptrSQL, .procCallback, .lparam, .ptrVarErrMsg>, 'sqlite3_exec', \ sqliteExtendedErrCode, <.ptrDB>, 'sqlite3_extended_errcode', \ sqliteExtendedResultCodes, <.ptrDB, .flagEnable>, 'sqlite3_extended_result_codes', \ sqliteFileControl, <.ptrDB, .ptrDBName, .wparam, .lparam>, 'sqlite3_file_control', \ _sqliteFinalize, <.stmt>, 'sqlite3_finalize', \ sqliteFree, <.ptrmem>, 'sqlite3_free', \ sqliteFreeTable, <.ptrVarResult>, 'sqlite3_free_table', \ sqliteGetAutocommit, <.ptrDB>, 'sqlite3_get_autocommit', \ sqliteGetAuxdata, <.context, .N>, 'sqlite3_get_auxdata', \ sqliteGetTable, <.ptrDB, .ptrSQL, .ptrVarResult, .ptrVarRows, .ptrVarColumns, .ptrVarErrorMsg>, 'sqlite3_get_table', \ sqliteInitialize, <VOID>, 'sqlite3_initialize', \ sqliteInterrupt, <.ptrDB>, 'sqlite3_interrupt', \ sqliteLastInsertRowID, <.ptrDB>, 'sqlite3_last_insert_rowid', \ sqliteLibVersion, <VOID>, 'sqlite3_libversion', \ sqliteLibversionNumber, <VOID>, 'sqlite3_libversion_number', \ sqliteLimit, <.ptrDB, .idLimit, .newVal>, 'sqlite3_limit', \ sqliteLoadExtension, <.ptrDB, .nameDLL, .entryProc, .ptrVarErrMsg>, 'sqlite3_load_extension', \ sqliteLog, <.iErrCode, .ptrFormat, ...>, 'sqlite3_log', \ sqliteKey, <.ptrDB, .pKey, .pKeyLen>, 'sqlite3_key', \ sqliteKey_v2, <.ptrDB, .pDbName, .pKey, .pKeyLen>, 'sqlite3_key_v2', \ sqliteMAlloc, <.size>, 'sqlite3_malloc', \ sqliteMemoryHighWater, <.flagReset>, 'sqlite3_memory_highwater', \ sqliteMemoryUsed, <VOID>, 'sqlite3_memory_used', \ sqliteMprintf, <.ptrString, ...>, 'sqlite3_mprintf', \ sqliteMutexAlloc, <.type>, 'sqlite3_mutex_alloc', \ sqliteMutexEnter, <.hMutex>, 'sqlite3_mutex_enter', \ sqliteMutexFree, <.hMutex>, 'sqlite3_mutex_free', \ sqliteMutexLeave, <.hMutex>, 'sqlite3_mutex_leave', \ sqliteMutexTry, <.hMutex>, 'sqlite3_mutex_try', \ sqliteNextStmt, <.ptrDB, .stmt>, 'sqlite3_next_stmt', \ sqliteOSEnd, <VOID>, 'sqlite3_os_end', \ sqliteOSInit, <VOID>, 'sqlite3_os_init', \ sqliteOpen, <.ptrFileName, .ptrVarDB>, 'sqlite3_open', \ sqliteOpen16, <.ptrFileName, .ptrVarDB>, 'sqlite3_open16', \ sqliteOpen_v2, <.ptrFileName, .ptrVarDB, .flags, .ptrVFSName>, 'sqlite3_open_v2', \ sqliteOverloadFunction, <.ptrDB, .ptrFuncName, .lparam>, 'sqlite3_overload_function', \ sqlitePrepare, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare', \ sqlitePrepare16, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare16', \ sqlitePrepare16_v2, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare16_v2', \ _sqlitePrepare_v2, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare_v2', \ sqliteProfile, <.ptrDB, .procProfiler, .lparam>, 'sqlite3_profile', \ sqliteProgressHandler, <.ptrDB, .N, .procProgress, .lparam>, 'sqlite3_progress_handler', \ sqliteRandomness, <.bytes, .buffer>, 'sqlite3_randomness', \ sqliteReAlloc, <.ptrmem, .newsize>, 'sqlite3_realloc', \ sqliteRekey, <.ptrDB, .pNewKey, .nKeyLen>, 'sqlite3_rekey', \ sqliteRekey_v2, <.ptrDB, .pDbName, .pNewKey, .nKeyLen>, 'sqlite3_rekey_v2', \ sqliteReleaseMemory, <.bytes>, 'sqlite3_release_memory', \ sqliteReset, <.stmt>, 'sqlite3_reset', \ sqliteResetAutoExtension, <VOID>, 'sqlite3_reset_auto_extension', \ sqliteResultBlob, <.context, .ptrdata, .size, .procDestroy>, 'sqlite3_result_blob', \ sqliteResultDouble, <.context, .double>, 'sqlite3_result_double', \ sqliteResultError, <.context, .ptrErrMsg, .size>, 'sqlite3_result_error', \ sqliteResultError16, <.context, .ptrErrMsg, .size>, 'sqlite3_result_error16', \ sqliteResultErrorCode, <.context, .errcode>, 'sqlite3_result_error_code', \ sqliteResultErrorNoMem, <.context>, 'sqlite3_result_error_nomem', \ sqliteResultErrorTooBig, <.context>, 'sqlite3_result_error_toobig', \ sqliteResultInt, <.context, .integer>, 'sqlite3_result_int', \ sqliteResultInt64, <.context, .int64Lo, .int64Hi>, 'sqlite3_result_int64', \ sqliteResultNULL, <.context>, 'sqlite3_result_null', \ sqliteResultText, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text', \ sqliteResultText16, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16', \ sqliteResultText16be, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16be', \ sqliteResultText16le, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16le', \ sqliteResultValue, <.context, .ptrValue>, 'sqlite3_result_value', \ sqliteResultZeroBlob, <.context, .size>, 'sqlite3_result_zeroblob', \ sqliteRollbackHook, <.ptrDB, .ptrHook, .lparam>, 'sqlite3_rollback_hook', \ sqliteRtreeGeometryCallback, <NONE>, 'sqlite3_rtree_geometry_callback', \ sqliteSQL, <.stmt>, 'sqlite3_sql', \ sqliteSetAuthorizer, <.ptrDB, .procAuthorizer, .lparam>, 'sqlite3_set_authorizer', \ sqliteSetAuxdata, <.context, .N, .ptrData, .procDestructor>, 'sqlite3_set_auxdata', \ sqliteShutdown, <VOID>, 'sqlite3_shutdown', \ sqliteSleep, <.sleep_ms>, 'sqlite3_sleep', \ sqliteSnprintf, <.size, .ptrBuffer, .ptrString, ...>, 'sqlite3_snprintf', \ sqliteSoftHeapLimit, <.N>, 'sqlite3_soft_heap_limit', \ sqliteSoftHeapLimit64, <.sizeLo, .sizeHi>, 'sqlite3_soft_heap_limit64', \ sqliteSourceID, <VOID>, 'sqlite3_sourceid', \ sqliteStatus, <.paramIndex, .ptrVarResult, .ptrVarHighwater, .flagReset>, 'sqlite3_status', \ sqliteStep, <.stmt>, 'sqlite3_step', \ sqliteStmtStatus, <.stmt, .paramIndex, .flagReset>, 'sqlite3_stmt_status', \ sqliteStrnicmp, <.ptrStr1, .ptrStr2, .size>, 'sqlite3_strnicmp', \ sqliteTableColumnMetadata, <.ptrDB, .ptrDBName, .ptrTableName, .ptrColumnName, .ptrVarDataType, .ptrVarCollSeq, .ptrVarNotNull, \ .ptrVarPrimaryKey, .ptrVarAutoInc>, 'sqlite3_table_column_metadata', \ sqliteTestControl, <.opCode, ...>, 'sqlite3_test_control', \ sqliteThreadsafe, <VOID>, 'sqlite3_threadsafe', \ sqliteTotalChanges, <.ptrDB>, 'sqlite3_total_changes', \ sqliteTrace, <.ptrDB, .procTrace, .lparam>, 'sqlite3_trace', \ sqliteUpdateHook, <.ptrDB, .procUpdateHook, .lparam>, 'sqlite3_update_hook', \ sqliteUserData, <.context>, 'sqlite3_user_data', \ sqliteValueBlob, <.ptrValue>, 'sqlite3_value_blob', \ sqliteValueBytes, <.ptrValue>, 'sqlite3_value_bytes', \ sqliteValueBytes16, <.ptrValue>, 'sqlite3_value_bytes16', \ sqliteValueDouble, <.ptrValue>, 'sqlite3_value_double', \ sqliteValueInt, <.ptrValue>, 'sqlite3_value_int', \ sqliteValueInt64, <.ptrValue>, 'sqlite3_value_int64', \ sqliteValueNumericType, <.ptrValue>, 'sqlite3_value_numeric_type', \ sqliteValueText, <.ptrValue>, 'sqlite3_value_text', \ sqliteValueText16, <.ptrValue>, 'sqlite3_value_text16', \ sqliteValueText16be, <.ptrValue>, 'sqlite3_value_text16be', \ sqliteValueText16le, <.ptrValue>, 'sqlite3_value_text16le', \ sqliteValueType, <.ptrValue>, 'sqlite3_value_type', \ sqliteVersion, <VOID>, 'sqlite3_version', \ sqliteVfsFind, <.ptrVFSName>, 'sqlite3_vfs_find', \ sqliteVfsRegister, <.hVFS, .flagDefault>, 'sqlite3_vfs_register', \ sqliteVfsUnregister, <.hVFS>, 'sqlite3_vfs_unregister', \ sqliteVmprintf, <.ptrString, .va_list>, 'sqlite3_vmprintf', \ sqliteWalAutocheckpoint, <.ptrDB, .N>, 'sqlite3_wal_autocheckpoint', \ sqliteWalCheckpoint, <.ptrDB, .ptrDBName>, 'sqlite3_wal_checkpoint', \ sqliteWalCheckpoint_v2, <.ptrDB, .ptrDBName, .eMode, .pvarLog, .pvarCkpt>, 'sqlite3_wal_checkpoint_v2', \ sqliteWalHook, <.ptrDB, .procCommitHook, .lparam>, 'sqlite3_wal_hook', \ sqliteWin32_MbcsToUtf8, <NONE>, 'sqlite3_win32_mbcs_to_utf8' |
Added freshlib/imports/Linux/sqlite3.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: sqlite3.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto 'libsqlite3.so.0', \ sqliteAggregateContext, <.context, .nbytes>, 'sqlite3_aggregate_context', \ sqliteAggregateCount_OLD, <VOID>, 'sqlite3_aggregate_count', \ sqliteAutoExtension, <.ptrCallback>, 'sqlite3_auto_extension', \ sqliteBackupFinish, <.ptrBackup>, 'sqlite3_backup_finish', \ sqliteBackupInit, <.ptrDestDB, .ptrDestName, .ptrSourceDB, .ptrSourceName>, 'sqlite3_backup_init', \ sqliteBackupPageCount, <.ptrBackup>, 'sqlite3_backup_pagecount', \ sqliteBackupRemaining, <.ptrBackup>, 'sqlite3_backup_remaining', \ sqliteBackupStep, <.ptrBackup, .nPage>, 'sqlite3_backup_step', \ sqliteBindBlob, <.stmt, .index, .ptrData, .nbytes, .destructor>, 'sqlite3_bind_blob', \ sqliteBindDouble, <.stmt, .index, .value>, 'sqlite3_bind_double', \ sqliteBindInt, <.stmt, .index, .value>, 'sqlite3_bind_int', \ sqliteBindInt64, <.stmt, .index, .valueLo, .valueHi>, 'sqlite3_bind_int64', \ sqliteBindNull, <.stmt, .index>, 'sqlite3_bind_null', \ sqliteBindParameterCount, <.stmt>, 'sqlite3_bind_parameter_count', \ sqliteBindParameterIndex, <.stmt, .paramName>, 'sqlite3_bind_parameter_index', \ sqliteBindParameterName, <.stmt, .paramIndex>, 'sqlite3_bind_parameter_name', \ sqliteBindText, <.stmt, .index, .ptrText, .nbytes, .destructor>, 'sqlite3_bind_text', \ sqliteBindText16, <.stmt, .index, .ptrText, .nbytes, .destructor>, 'sqlite3_bind_text16', \ sqliteBindValue, <.stmt, .index, .ptrValue>, 'sqlite3_bind_value', \ sqliteBindZeroblob, <.stmt, .index, .size>, 'sqlite3_bind_zeroblob', \ sqliteBlobBytes, <.hBlob>, 'sqlite3_blob_bytes', \ sqliteBlobClose, <.hBlob>, 'sqlite3_blob_close', \ sqliteBlobOpen, <.ptrDB, .DBname, .Table, .Column, .iRow, .flags, .ptrVarBlob>, 'sqlite3_blob_open', \ sqliteBlobRead, <.hBlob, .ptrBuffer, .bytes, .iOffset>, 'sqlite3_blob_read', \ sqliteBlobWrite, <.hBlob, .ptrBuffer, .bytes, .iOffset>, 'sqlite3_blob_write', \ sqliteBusyHandler, <.ptrDB, .ptrProc, .lParam>, 'sqlite3_busy_handler', \ sqliteBusyTimeout, <.ptrDB, .time_ms>, 'sqlite3_busy_timeout', \ sqliteChanges, <.ptrDB>, 'sqlite3_changes', \ sqliteClearBindings, <.stmt>, 'sqlite3_clear_bindings', \ sqliteClose, <.ptrDatabase>, 'sqlite3_close', \ sqliteCollationNeeded, <.ptrDB, .lparam, .ptrCallback>, 'sqlite3_collation_needed', \ sqliteCollationNeeded16, <.ptrDB, .lparam, .ptrCallback>, 'sqlite3_collation_needed16', \ sqliteColumnBlob, <.stmt, .iCol>, 'sqlite3_column_blob', \ sqliteColumnBytes, <.stmt, .iCol>, 'sqlite3_column_bytes', \ sqliteColumnBytes16, <.stmt, .iCol>, 'sqlite3_column_bytes16', \ sqliteColumnCount, <.stmt>, 'sqlite3_column_count', \ sqliteColumnDatabaseName, <.stmt, .index>, 'sqlite3_column_database_name', \ sqliteColumnDatabaseName16, <.stmt, .index>, 'sqlite3_column_database_name16', \ sqliteColumnDeclType, <.stmt, .index>, 'sqlite3_column_decltype', \ sqliteColumnDeclType16, <.stmt, .index>, 'sqlite3_column_decltype16', \ sqliteColumnDouble, <.stmt, .iCol>, 'sqlite3_column_double', \ sqliteColumnInt, <.stmt, .iCol>, 'sqlite3_column_int', \ sqliteColumnInt64, <.stmt, .iCol>, 'sqlite3_column_int64', \ sqliteColumnName, <.stmt, .index>, 'sqlite3_column_name', \ sqliteColumnName16, <.stmt, .index>, 'sqlite3_column_name16', \ sqliteColumnOriginName, <.stmt, .index>, 'sqlite3_column_origin_name', \ sqliteColumnOriginName16, <.stmt, .index>, 'sqlite3_column_origin_name16', \ sqliteColumnTableName, <.stmt, .index>, 'sqlite3_column_table_name', \ sqliteColumnTableName16, <.stmt, .index>, 'sqlite3_column_table_name16', \ sqliteColumnText, <.stmt, .iCol>, 'sqlite3_column_text', \ sqliteColumnText16, <.stmt, .iCol>, 'sqlite3_column_text16', \ sqliteColumnType, <.stmt, .iCol>, 'sqlite3_column_type', \ sqliteColumnValue, <.stmt, .iCol>, 'sqlite3_column_value', \ sqliteCommitHook, <.ptrDB, .ptrHook, .lparam>, 'sqlite3_commit_hook', \ sqliteCompileOptionGet, <.N>, 'sqlite3_compileoption_get', \ sqliteCompileOptionUsed, <.ptrOptName>, 'sqlite3_compileoption_used', \ sqliteComplete, <.ptrSQL>, 'sqlite3_complete', \ sqliteComplete16, <.ptrSQL>, 'sqlite3_complete16', \ sqliteConfig, <.index, ...>, 'sqlite3_config', \ sqliteContextDBHandle, <.context>, 'sqlite3_context_db_handle', \ sqliteCreateCollation, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare>, 'sqlite3_create_collation', \ sqliteCreateCollation16, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare>, 'sqlite3_create_collation16', \ sqliteCreateCollation_v2, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare, .ptrDestroy>, 'sqlite3_create_collation_v2', \ sqliteCreateFunction, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal>, 'sqlite3_create_function', \ sqliteCreateFunction16, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal>, 'sqlite3_create_function16', \ sqliteCreateFunction_v2, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal, .procDestroy>, 'sqlite3_create_function_v2', \ sqliteCreateModule, <.ptrDB, .ptrModuleName, .ptrVTableModule, .lparam>, 'sqlite3_create_module', \ sqliteCreateModule_v2, <.ptrDB, .ptrModuleName, .ptrVTableModule, .lparam, .procDestroy>, 'sqlite3_create_module_v2', \ sqliteDBConfig, <.ptrDB, .index, ...>, 'sqlite3_db_config', \ sqliteDBHandle, <.stmt>, 'sqlite3_db_handle', \ sqliteDBMutex, <.ptrDB>, 'sqlite3_db_mutex', \ sqliteDBStatus, <.ptrDB, .index, .ptrRetCurrent, .ptrRetHighest, .flagReset>, 'sqlite3_db_status', \ sqliteDataCount, <.stmt>, 'sqlite3_data_count', \ sqliteDeclareVtab, <.ptrDB, .ptrSQL>, 'sqlite3_declare_vtab', \ sqliteEnableLoadExtension, <.ptrDB, .flagEnable>, 'sqlite3_enable_load_extension', \ sqliteEnableSharedCache, <.flagEnable>, 'sqlite3_enable_shared_cache', \ sqliteErrCode, <.ptrDB>, 'sqlite3_errcode', \ sqliteErrMsg, <.ptrDB>, 'sqlite3_errmsg', \ sqliteErrMsg16, <.ptrDB>, 'sqlite3_errmsg16', \ sqliteErrStr, <.err_code>, 'sqlite3_errstr', \ sqliteExec, <.ptrDB, .ptrSQL, .procCallback, .lparam, .ptrVarErrMsg>, 'sqlite3_exec', \ sqliteExpired, <VOID>, 'sqlite3_expired', \ sqliteExtendedErrCode, <.ptrDB>, 'sqlite3_extended_errcode', \ sqliteExtendedResultCodes, <.ptrDB, .flagEnable>, 'sqlite3_extended_result_codes', \ sqliteFileControl, <.ptrDB, .ptrDBName, .wparam, .lparam>, 'sqlite3_file_control', \ sqliteFinalize, <.stmt>, 'sqlite3_finalize', \ sqliteFree, <.ptrmem>, 'sqlite3_free', \ sqliteFreeTable, <.ptrVarResult>, 'sqlite3_free_table', \ sqliteGetAutocommit, <.ptrDB>, 'sqlite3_get_autocommit', \ sqliteGetAuxdata, <.context, .N>, 'sqlite3_get_auxdata', \ sqliteGetTable, <.ptrDB, .ptrSQL, .ptrVarResult, .ptrVarRows, .ptrVarColumns, .ptrVarErrorMsg>, 'sqlite3_get_table', \ sqliteGlobalRecover_OLD, <VOID>, 'sqlite3_global_recover', \ sqliteInitialize, <VOID>, 'sqlite3_initialize', \ sqliteInterrupt, <.ptrDB>, 'sqlite3_interrupt', \ sqliteLastInsertRowID, <.ptrDB>, 'sqlite3_last_insert_rowid', \ sqliteLibVersion, <VOID>, 'sqlite3_libversion', \ sqliteLibversionNumber, <VOID>, 'sqlite3_libversion_number', \ sqliteLimit, <.ptrDB, .idLimit, .newVal>, 'sqlite3_limit', \ sqliteLoadExtension, <.ptrDB, .nameDLL, .entryProc, .ptrVarErrMsg>, 'sqlite3_load_extension', \ sqliteLog, <.iErrCode, .ptrFormat, ...>, 'sqlite3_log', \ sqliteMAlloc, <.size>, 'sqlite3_malloc', \ sqliteMemoryHighWater, <.flagReset>, 'sqlite3_memory_highwater', \ sqliteMemoryUsed, <VOID>, 'sqlite3_memory_used', \ sqliteMprintf, <.ptrString, ...>, 'sqlite3_mprintf', \ sqliteMutexAlloc, <.type>, 'sqlite3_mutex_alloc', \ sqliteMutexEnter, <.hMutex>, 'sqlite3_mutex_enter', \ sqliteMutexFree, <.hMutex>, 'sqlite3_mutex_free', \ sqliteMutexLeave, <.hMutex>, 'sqlite3_mutex_leave', \ sqliteMutexTry, <.hMutex>, 'sqlite3_mutex_try', \ sqliteNextStmt, <.ptrDB, .stmt>, 'sqlite3_next_stmt', \ sqliteOSEnd, <VOID>, 'sqlite3_os_end', \ sqliteOSInit, <VOID>, 'sqlite3_os_init', \ sqliteOpen, <.ptrFileName, .ptrVarDB>, 'sqlite3_open', \ sqliteOpen16, <.ptrFileName, .ptrVarDB>, 'sqlite3_open16', \ sqliteOpen_v2, <.ptrFileName, .ptrVarDB, .flags, .ptrVFSName>, 'sqlite3_open_v2', \ sqliteOverloadFunction, <.ptrDB, .ptrFuncName, .lparam>, 'sqlite3_overload_function', \ sqlitePrepare, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare', \ sqlitePrepare16, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare16', \ sqlitePrepare16_v2, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare16_v2', \ _sqlitePrepare_v2, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare_v2', \ sqliteProfile, <.ptrDB, .procProfiler, .lparam>, 'sqlite3_profile', \ sqliteProgressHandler, <.ptrDB, .N, .procProgress, .lparam>, 'sqlite3_progress_handler', \ sqliteRandomness, <.bytes, .buffer>, 'sqlite3_randomness', \ sqliteReAlloc, <.ptrmem, .newsize>, 'sqlite3_realloc', \ sqliteReleaseMemory, <.bytes>, 'sqlite3_release_memory', \ sqliteReset, <.stmt>, 'sqlite3_reset', \ sqliteResetAutoExtension, <VOID>, 'sqlite3_reset_auto_extension', \ sqliteResultBlob, <.context, .ptrdata, .size, .procDestroy>, 'sqlite3_result_blob', \ sqliteResultDouble, <.context, .double>, 'sqlite3_result_double', \ sqliteResultError, <.context, .ptrErrMsg, .size>, 'sqlite3_result_error', \ sqliteResultError16, <.context, .ptrErrMsg, .size>, 'sqlite3_result_error16', \ sqliteResultErrorCode, <.context, .errcode>, 'sqlite3_result_error_code', \ sqliteResultErrorNoMem, <.context>, 'sqlite3_result_error_nomem', \ sqliteResultErrorTooBig, <.context>, 'sqlite3_result_error_toobig', \ sqliteResultInt, <.context, .integer>, 'sqlite3_result_int', \ sqliteResultInt64, <.context, .int64Lo, .int64Hi>, 'sqlite3_result_int64', \ sqliteResultNULL, <.context>, 'sqlite3_result_null', \ sqliteResultText, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text', \ sqliteResultText16, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16', \ sqliteResultText16be, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16be', \ sqliteResultText16le, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16le', \ sqliteResultValue, <.context, .ptrValue>, 'sqlite3_result_value', \ sqliteResultZeroBlob, <.context, .size>, 'sqlite3_result_zeroblob', \ sqliteRollbackHook, <.ptrDB, .ptrHook, .lparam>, 'sqlite3_rollback_hook', \ sqliteRtreeGeometryCallback, <NONE>, 'sqlite3_rtree_geometry_callback', \ sqliteSQL, <.stmt>, 'sqlite3_sql', \ sqliteSetAuthorizer, <.ptrDB, .procAuthorizer, .lparam>, 'sqlite3_set_authorizer', \ sqliteSetAuxdata, <.context, .N, .ptrData, .procDestructor>, 'sqlite3_set_auxdata', \ sqliteShutdown, <VOID>, 'sqlite3_shutdown', \ sqliteSleep, <.sleep_ms>, 'sqlite3_sleep', \ sqliteSnprintf, <.size, .ptrBuffer, .ptrString, ...>, 'sqlite3_snprintf', \ sqliteSoftHeapLimit, <.N>, 'sqlite3_soft_heap_limit', \ sqliteSoftHeapLimit64, <.sizeLo, .sizeHi>, 'sqlite3_soft_heap_limit64', \ sqliteSourceID, <VOID>, 'sqlite3_sourceid', \ sqliteStatus, <.paramIndex, .ptrVarResult, .ptrVarHighwater, .flagReset>, 'sqlite3_status', \ sqliteStep, <.stmt>, 'sqlite3_step', \ sqliteStmtStatus, <.stmt, .paramIndex, .flagReset>, 'sqlite3_stmt_status', \ sqliteStrnicmp, <.ptrStr1, .ptrStr2, .size>, 'sqlite3_strnicmp', \ sqliteTableColumnMetadata, <.ptrDB, .ptrDBName, .ptrTableName, .ptrColumnName, .ptrVarDataType, .ptrVarCollSeq, .ptrVarNotNull, \ .ptrVarPrimaryKey, .ptrVarAutoInc>, 'sqlite3_table_column_metadata', \ sqliteTestControl, <.opCode, ...>, 'sqlite3_test_control', \ sqliteThreadCleanup, <VOID>, 'sqlite3_thread_cleanup', \ sqliteThreadsafe, <VOID>, 'sqlite3_threadsafe', \ sqliteTotalChanges, <.ptrDB>, 'sqlite3_total_changes', \ sqliteTrace, <.ptrDB, .procTrace, .lparam>, 'sqlite3_trace', \ sqliteTransferBindings, <VOID>, 'sqlite3_transfer_bindings', \ sqliteUpdateHook, <.ptrDB, .procUpdateHook, .lparam>, 'sqlite3_update_hook', \ sqliteUserData, <.context>, 'sqlite3_user_data', \ sqliteValueBlob, <.ptrValue>, 'sqlite3_value_blob', \ sqliteValueBytes, <.ptrValue>, 'sqlite3_value_bytes', \ sqliteValueBytes16, <.ptrValue>, 'sqlite3_value_bytes16', \ sqliteValueDouble, <.ptrValue>, 'sqlite3_value_double', \ sqliteValueInt, <.ptrValue>, 'sqlite3_value_int', \ sqliteValueInt64, <.ptrValue>, 'sqlite3_value_int64', \ sqliteValueNumericType, <.ptrValue>, 'sqlite3_value_numeric_type', \ sqliteValueText, <.ptrValue>, 'sqlite3_value_text', \ sqliteValueText16, <.ptrValue>, 'sqlite3_value_text16', \ sqliteValueText16be, <.ptrValue>, 'sqlite3_value_text16be', \ sqliteValueText16le, <.ptrValue>, 'sqlite3_value_text16le', \ sqliteValueType, <.ptrValue>, 'sqlite3_value_type', \ sqliteVersion, <VOID>, 'sqlite3_version', \ sqliteVfsFind, <.ptrVFSName>, 'sqlite3_vfs_find', \ sqliteVfsRegister, <.hVFS, .flagDefault>, 'sqlite3_vfs_register', \ sqliteVfsUnregister, <.hVFS>, 'sqlite3_vfs_unregister', \ sqliteVmprintf, <.ptrString, .va_list>, 'sqlite3_vmprintf', \ sqliteWalAutocheckpoint, <.ptrDB, .N>, 'sqlite3_wal_autocheckpoint', \ sqliteWalCheckpoint, <.ptrDB, .ptrDBName>, 'sqlite3_wal_checkpoint', \ sqliteWalCheckpoint_v2, <.ptrDB, .ptrDBName, .eMode, .pvarLog, .pvarCkpt>, 'sqlite3_wal_checkpoint_v2', \ sqliteWalHook, <.ptrDB, .procCommitHook, .lparam>, 'sqlite3_wal_hook', \ sqliteWin32_MbcsToUtf8, <NONE>, 'sqlite3_win32_mbcs_to_utf8' |
Added freshlib/imports/Linux/xcursor.inc.
> > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: XCursors import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto 'libXcursor.so', \ XcursorShapeLoadImage ,<.shape, .theme, .size>, 'XcursorShapeLoadImage', \ XcursorShapeLoadImages, <.shape, .theme, .size>, 'XcursorShapeLoadImages' |
Added freshlib/imports/Linux/xshm.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: MIT_SHM extension import library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto 'libXext.so.6', \ XShmQueryExtension, <.Disp>, 'XShmQueryExtension', \ XShmQueryVersion, <.Disp, .piMajor, .piMinor, .pfPixmaps>, 'XShmQueryVersion', \ XShmPixmapFormat, <.Disp>, 'XShmPixmapFormat', \ XShmAttach, <.Disp, .pSegmentInfo>, 'XShmAttach', \ XShmDetach, <.Disp, .pSegmentInfo>, 'XShmDetach', \ XShmCreateImage, <.Disp, .Visual, .depth, .format, \ .pData, .pShmInfo, .width, .height>, 'XShmCreateImage', \ XShmPutImage, <.Disp, .Drawable, .context, .pImage, \ .SrcX, .SrcY, .DestX, .DestY, \ .width, .height, .fSendEvent >, 'XShmPutImage', \ XShmGetImage, <.Disp, .Drawable, .pImage, \ .X, .Y, .PlaneMask>, 'XShmGetImage', \ XShmCreatePixmap, <.Disp, .Drawable, .pData, .pShmInfo, \ .width, .height, .depth>, 'XShmCreatePixmap', \ XShmGetEventBase, <.Disp>, 'XShmGetEventBase', \ XSyncInitialize, <.Disp, .p_major, .p_minor>, 'XSyncInitialize', \ XSyncCreateCounter, <.Disp, .valueHi, .valueLo>, 'XSyncCreateCounter', \ XSyncDestroyCounter, <.Disp, .counter>, 'XSyncDestroyCounter', \ XSyncSetCounter, <.Disp, .counter, .valueHi, .valueLo>, 'XSyncSetCounter', \ XSyncQueryCounter, <.Disp, .counter, .p_return>, 'XSyncQueryCounter', \ XSyncChangeCounter, <.Disp, .counter, .valueHi, .valueLo>, 'XSyncChangeCounter' |
Added freshlib/imports/Win32/advapi32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: advapi32.dll API functions. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; advapi32.dll API calls (ASCII) import_proto advapi32, \ A_SHAFinal, <NONE>, 'A_SHAFinal', \ A_SHAInit, <NONE>, 'A_SHAInit', \ A_SHAUpdate, <NONE>, 'A_SHAUpdate', \ AbortSystemShutdownA, <.lpMachineName>, 'AbortSystemShutdownA', \ AbortSystemShutdownW, <.lpMachineName>, 'AbortSystemShutdownW', \ AccessCheck, <.pSecurityDescriptor, .ClientToken, .DesiredAccess, .GenericMapping, .PrivilegeSet, .PrivilegeSetLength, .GrantedAccess, \ .Status>, 'AccessCheck', \ AccessCheckAndAuditAlarmA, <.SubsystemName, .HandleId, .ObjectTypeName, .ObjectName, .SecurityDescriptor, .DesiredAccess, .GenericMapping, \ .ObjectCreation, .GrantedAccess, .AccessStatus, .pfGenerateOnClose>, 'AccessCheckAndAuditAlarmA', \ AccessCheckAndAuditAlarmW, <.SubsystemName, .HandleId, .ObjectTypeName, .ObjectName, .SecurityDescriptor, .DesiredAccess, .GenericMapping, \ .ObjectCreation, .GrantedAccess, .AccessStatus, .pfGenerateOnClose>, 'AccessCheckAndAuditAlarmW', \ AccessCheckByType, <.pSecurityDescriptor, .PrincipalSelfSid, .ClientToken, .DesiredAccess, .ObjectTypeList, .ObjectTypeListLength, \ .GenericMapping, .PrivilegeSet, .PrivilegeSetLength, .GrantedAccess, .AccessStatus>, 'AccessCheckByType', \ AccessCheckByTypeAndAuditAlarmA, <.SubsystemName, .HandleId, .ObjectTypeName, .ObjectName, .SecurityDescriptor, .PrincipalSelfSid, \ .DesiredAccess, .AuditType, .Flags, .ObjectTypeList, .ObjectTypeListLength, .GenericMapping, .ObjectCreation, .GrantedAccess, \ .AccessStatus, .pfGenerateOnClose>, 'AccessCheckByTypeAndAuditAlarmA', \ AccessCheckByTypeAndAuditAlarmW, <.SubsystemName, .HandleId, .ObjectTypeName, .ObjectName, .SecurityDescriptor, .PrincipalSelfSid, \ .DesiredAccess, .AuditType, .Flags, .ObjectTypeList, .ObjectTypeListLength, .GenericMapping, .ObjectCreation, .GrantedAccess, \ .AccessStatus, .pfGenerateOnClose>, 'AccessCheckByTypeAndAuditAlarmW', \ AccessCheckByTypeResultList, <.pSecurityDescriptor, .PrincipalSelfSid, .ClientToken, .DesiredAccess, .ObjectTypeList, .ObjectTypeListLength, \ .GenericMapping, .PrivilegeSet, .PrivilegeSetLength, .GrantedAccessList, .AccessStatusList>, 'AccessCheckByTypeResultList', \ AccessCheckByTypeResultListAndAuditAlarmA, <.SubsystemName, .HandleId, .ObjectTypeName, .ObjectName, .SecurityDescriptor, .PrincipalSelfSid, \ .DesiredAccess, .AuditType, .Flags, .ObjectTypeList, .ObjectTypeListLength, .GenericMapping, .ObjectCreation, .GrantedAccess, \ .AccessStatusList, .pfG>, 'AccessCheckByTypeResultListAndAuditAlarmA', \ AccessCheckByTypeResultListAndAuditAlarmByHandleA, <.SubsystemName, .HandleId, .ClientToken, .ObjectTypeName, .ObjectName, .SecurityDescriptor, \ .PrincipalSelfSid, .DesiredAccess, .AuditType, .flags, .ObjectTypeList, .ObjectTypeListLength, .GenericMapping, .ObjectCreation, \ .GrantedAccess, .AccessibleChildren, .paccContainer, .iChildStart, .cChildren, .rgvarChildren, .pcObtained>, 'AccessCheckByTypeResultListAndAuditAlarmByHandleA', \ AccessCheckByTypeResultListAndAuditAlarmByHandleW, <.SubsystemName, .HandleId, .ClientToken, .ObjectTypeName, .ObjectName, .SecurityDescriptor, \ .PrincipalSelfSid, .DesiredAccess, .AuditType, .flags, .ObjectTypeList, .ObjectTypeListLength, .GenericMapping, .ObjectCreation, \ .GrantedAccess, .AccessibleChildren, .paccContainer, .iChildStart, .cChildren, .rgvarChildren, .pcObtained>, 'AccessCheckByTypeResultListAndAuditAlarmByHandleW', \ AccessCheckByTypeResultListAndAuditAlarmW, <.SubsystemName, .HandleId, .ObjectTypeName, .ObjectName, .SecurityDescriptor, .PrincipalSelfSid, \ .DesiredAccess, .AuditType, .Flags, .ObjectTypeList, .ObjectTypeListLength, .GenericMapping, .ObjectCreation, .GrantedAccess, \ .AccessStatusList, .pfG>, 'AccessCheckByTypeResultListAndAuditAlarmW', \ AddAccessAllowedAce, <.pAcl, .dwAceRevision, .AccessMask, .pSid>, 'AddAccessAllowedAce', \ AddAccessAllowedAceEx, <.pAcl, .dwAceRevision, .AceFlags, .AccessMask, .pSid>, 'AddAccessAllowedAceEx', \ AddAccessAllowedObjectAce, <.pAcl, .dwAceRevision, .AceFlags, .AccessMask, .ObjectTypeGuid, .ByRefheritedObjectTypeGuid, .pSid, \ >, 'AddAccessAllowedObjectAce', \ AddAccessDeniedAce, <.pAcl, .dwAceRevision, .AccessMask, .pSid>, 'AddAccessDeniedAce', \ AddAccessDeniedAceEx, <.pAcl, .dwAceRevision, .AceFlags, .AccessMask, .pSid>, 'AddAccessDeniedAceEx', \ AddAccessDeniedObjectAce, <.pAcl, .dwAceRevision, .AceFlags, .AccessMask, .ObjectTypeGuid, .ByRefheritedObjectTypeGuid, .pSid, \ >, 'AddAccessDeniedObjectAce', \ AddAce, <.pAcl, .dwAceRevision, .dwStartingAceIndex, .pAceList, .nAceListLength>, 'AddAce', \ AddAuditAccessAce, <.pAcl, .dwAceRevision, .dwAccessMask, .pSid, .bAuditSuccess, .bAuditFailure>, 'AddAuditAccessAce', \ AddAuditAccessAceEx, <.pAcl, .dwAceRevision, .AceFlags, .dwAccessMask, .pSid, .bAuditSuccess, .bAuditFailure>, 'AddAuditAccessAceEx', \ AddAuditAccessObjectAce, <.pAcl, .dwAceRevision, .AceFlags, .AccessMask, .ObjectTypeGuid, .ByRefheritedObjectTypeGuid, .pSid, .bAuditSuccess, \ .bAuditFailure>, 'AddAuditAccessObjectAce', \ AddUsersToEncryptedFile, <.lpFileName, .pUsers>, 'AddUsersToEncryptedFile', \ AdjustTokenGroups, <.TokenHandle, .ResetToDefault, .NewState, .BufferLength, .PreviousState, .ReturnLength>, 'AdjustTokenGroups', \ AdjustTokenPrivileges, <.TokenHandle, .DisableAllPrivileges, .NewState, .BufferLength, .PreviousState, .ReturnLength>, 'AdjustTokenPrivileges', \ AllocateAndInitializeSid, <.pIdentifierAuthority, .nSubAuthorityCount, .nSubAuthority0, .nSubAuthority1, .nSubAuthority2, .nSubAuthority3, \ .nSubAuthority4, .nSubAuthority5, .nSubAuthority6, .nSubAuthority7, .lpPSid>, 'AllocateAndInitializeSid', \ AllocateLocallyUniqueId, <.Luid>, 'AllocateLocallyUniqueId', \ AreAllAccessesGranted, <.GrantedAccess, .DesiredAccess>, 'AreAllAccessesGranted', \ AreAnyAccessesGranted, <.GrantedAccess, .DesiredAccess>, 'AreAnyAccessesGranted', \ BackupEventLogA, <.hEventLog, .lpBackupFileName>, 'BackupEventLogA', \ BackupEventLogW, <.hEventLog, .lpBackupFileName>, 'BackupEventLogW', \ BuildExplicitAccessWithNameA, <.pExplicitAccess, .pTrusteeName, .AccessPermissions, .AccessMode, .Inheritance>, 'BuildExplicitAccessWithNameA', \ BuildExplicitAccessWithNameW, <.pExplicitAccess, .pTrusteeName, .AccessPermissions, .AccessMode, .Inheritance>, 'BuildExplicitAccessWithNameW', \ BuildImpersonateExplicitAccessWithNameA, <.pExplicitAccess, .pTrusteeName, .pTrustee, .AccessPermissions, .AccessMode, .Inheritance, \ >, 'BuildImpersonateExplicitAccessWithNameA', \ BuildImpersonateExplicitAccessWithNameW, <.pExplicitAccess, .pTrusteeName, .pTrustee, .AccessPermissions, .AccessMode, .Inheritance, \ >, 'BuildImpersonateExplicitAccessWithNameW', \ BuildImpersonateTrusteeA, <.pTrustee, .pImpersonateTrustee>, 'BuildImpersonateTrusteeA', \ BuildImpersonateTrusteeW, <.pTrustee, .pImpersonateTrustee>, 'BuildImpersonateTrusteeW', \ BuildSecurityDescriptorA, <.pOwner, .pGroup, .cCountOfAccessEntries, .pListOfAccessEntries, .cCountOfAuditEntries, .pListOfAuditEntries, \ .pOldSD, .pSizeNewSD, .pNewSD>, 'BuildSecurityDescriptorA', \ BuildSecurityDescriptorW, <.pOwner, .pGroup, .cCountOfAccessEntries, .pListOfAccessEntries, .cCountOfAuditEntries, .pListOfAuditEntries, \ .pOldSD, .pSizeNewSD, .pNewSD>, 'BuildSecurityDescriptorW', \ BuildTrusteeWithNameA, <.pTrustee, .pname>, 'BuildTrusteeWithNameA', \ BuildTrusteeWithNameW, <.pTrustee, .pname>, 'BuildTrusteeWithNameW', \ BuildTrusteeWithObjectsAndNameA, <.pTrustee, .pObjName, .ObjectType, .ObjectTypeName, .InheritedObjectTypeName, .name>, 'BuildTrusteeWithObjectsAndNameA', \ BuildTrusteeWithObjectsAndNameW, <.pTrustee, .pObjName, .ObjectType, .ObjectTypeName, .InheritedObjectTypeName, .name>, 'BuildTrusteeWithObjectsAndNameW', \ BuildTrusteeWithObjectsAndSidA, <.pTrustee, .pObjSid, .pObjectGuid, .pInheritedObjectGuid, .pSid>, 'BuildTrusteeWithObjectsAndSidA', \ BuildTrusteeWithObjectsAndSidW, <.pTrustee, .pObjSid, .pObjectGuid, .pInheritedObjectGuid, .pSid>, 'BuildTrusteeWithObjectsAndSidW', \ BuildTrusteeWithSidA, <.pTrustee, .pSid>, 'BuildTrusteeWithSidA', \ BuildTrusteeWithSidW, <.pTrustee, .pSid>, 'BuildTrusteeWithSidW', \ CancelOverlappedAccess, <NONE>, 'CancelOverlappedAccess', \ ChangeServiceConfig2A, <.hService, .dwInfoLevel, .lpInfo>, 'ChangeServiceConfig2A', \ ChangeServiceConfig2W, <.hService, .dwInfoLevel, .lpInfo>, 'ChangeServiceConfig2W', \ ChangeServiceConfigA, <.hService, .dwServiceType, .dwStartType, .dwErrorControl, .lpBinaryPathName, .lpLoadOrderGroup, .lpdwTagId, \ .lpDependencies, .lpServiceStartName, .lpPassword, .lpDisplayName>, 'ChangeServiceConfigA', \ ChangeServiceConfigW, <.hService, .dwServiceType, .dwStartType, .dwErrorControl, .lpBinaryPathName, .lpLoadOrderGroup, .lpdwTagId, \ .lpDependencies, .lpServiceStartName, .lpPassword, .lpDisplayName>, 'ChangeServiceConfigW', \ CheckTokenMembership, <.TokenHandle, .SidToCheck, .IsMember>, 'CheckTokenMembership', \ ClearEventLogA, <.hEventLog, .lpBackupFileName>, 'ClearEventLogA', \ ClearEventLogW, <.hEventLog, .lpBackupFileName>, 'ClearEventLogW', \ CloseCodeAuthzLevel, <NONE>, 'CloseCodeAuthzLevel', \ CloseEncryptedFileRaw, <.pvContext>, 'CloseEncryptedFileRaw', \ CloseEventLog, <.hEventLog>, 'CloseEventLog', \ CloseServiceHandle, <.hSCObject>, 'CloseServiceHandle', \ CloseTrace, <NONE>, 'CloseTrace', \ CommandLineFromMsiDescriptor, <NONE>, 'CommandLineFromMsiDescriptor', \ ComputeAccessTokenFromCodeAuthzLevel, <NONE>, 'ComputeAccessTokenFromCodeAuthzLevel', \ ControlService, <.hService, .dwControl, .lpServiceStatus>, 'ControlService', \ ControlTraceA, <NONE>, 'ControlTraceA', \ ControlTraceW, <NONE>, 'ControlTraceW', \ ConvertAccessToSecurityDescriptorA, <NONE>, 'ConvertAccessToSecurityDescriptorA', \ ConvertAccessToSecurityDescriptorW, <NONE>, 'ConvertAccessToSecurityDescriptorW', \ ConvertSDToStringSDRootDomainA, <NONE>, 'ConvertSDToStringSDRootDomainA', \ ConvertSDToStringSDRootDomainW, <NONE>, 'ConvertSDToStringSDRootDomainW', \ ConvertSecurityDescriptorToAccessA, <NONE>, 'ConvertSecurityDescriptorToAccessA', \ ConvertSecurityDescriptorToAccessNamedA, <NONE>, 'ConvertSecurityDescriptorToAccessNamedA', \ ConvertSecurityDescriptorToAccessNamedW, <NONE>, 'ConvertSecurityDescriptorToAccessNamedW', \ ConvertSecurityDescriptorToAccessW, <NONE>, 'ConvertSecurityDescriptorToAccessW', \ ConvertSecurityDescriptorToStringSecurityDescriptorA, <.SecurityDescriptor, .RequestedStringSDRevision, .SecurityInformation, .StringSecurityDescriptor, \ .StringSecurityDescriptorLen>, 'ConvertSecurityDescriptorToStringSecurityDescriptorA', \ ConvertSecurityDescriptorToStringSecurityDescriptorW, <.SecurityDescriptor, .RequestedStringSDRevision, .SecurityInformation, .StringSecurityDescriptor, \ .StringSecurityDescriptorLen>, 'ConvertSecurityDescriptorToStringSecurityDescriptorW', \ ConvertSidToStringSidA, <.Sid, .StringSid>, 'ConvertSidToStringSidA', \ ConvertSidToStringSidW, <.Sid, .StringSid>, 'ConvertSidToStringSidW', \ ConvertStringSDToSDDomainA, <NONE>, 'ConvertStringSDToSDDomainA', \ ConvertStringSDToSDDomainW, <NONE>, 'ConvertStringSDToSDDomainW', \ ConvertStringSDToSDRootDomainA, <NONE>, 'ConvertStringSDToSDRootDomainA', \ ConvertStringSDToSDRootDomainW, <NONE>, 'ConvertStringSDToSDRootDomainW', \ ConvertStringSecurityDescriptorToSecurityDescriptorA, <.StringSecurityDescriptor, .StringSDRevision, .SecurityDescriptor, .SecurityDescriptorSize, \ >, 'ConvertStringSecurityDescriptorToSecurityDescriptorA', \ ConvertStringSecurityDescriptorToSecurityDescriptorW, <.StringSecurityDescriptor, .StringSDRevision, .SecurityDescriptor, .SecurityDescriptorSize, \ >, 'ConvertStringSecurityDescriptorToSecurityDescriptorW', \ ConvertStringSidToSidA, <.StringSid, .Sid>, 'ConvertStringSidToSidA', \ ConvertStringSidToSidW, <.StringSid, .Sid>, 'ConvertStringSidToSidW', \ ConvertToAutoInheritPrivateObjectSecurity, <.ParentDescriptor, .CurrentSecurityDescriptor, .NewSecurityDescriptor, .ObjectType, \ .IsDirectoryObject, .GenericMapping>, 'ConvertToAutoInheritPrivateObjectSecurity', \ CopySid, <.nDestinationSidLength, .pDestinationSid, .pSourceSid>, 'CopySid', \ CreateCodeAuthzLevel, <NONE>, 'CreateCodeAuthzLevel', \ CreatePrivateObjectSecurity, <.ParentDescriptor, .CreatorDescriptor, .NewDescriptor, .IsDirectoryObject, .Token, .GenericMapping, \ >, 'CreatePrivateObjectSecurity', \ CreatePrivateObjectSecurityEx, <.ParentDescriptor, .CreatorDescriptor, .NewDescriptor, .ObjectType, .IsContainerObject, .AutoInheritFlags, \ .Token, .GenericMapping>, 'CreatePrivateObjectSecurityEx', \ CreatePrivateObjectSecurityWithMultipleInheritance, <NONE>, 'CreatePrivateObjectSecurityWithMultipleInheritance', \ CreateProcessAsUserA, <.hToken, .lpApplicationName, .lpCommandLine, .lpProcessAttributes, .lpThreadAttributes, .bInheritHandles, \ .dwCreationFlags, .lpEnvironment, .lpCurrentDirectory, .lpStartupInfo, .lpProcessInformation>, 'CreateProcessAsUserA', \ CreateProcessAsUserSecure, <NONE>, 'CreateProcessAsUserSecure', \ CreateProcessAsUserW, <.hToken, .lpApplicationName, .lpCommandLine, .lpProcessAttributes, .lpThreadAttributes, .bInheritHandles, \ .dwCreationFlags, .lpEnvironment, .lpCurrentDirectory, .lpStartupInfo, .lpProcessInformation>, 'CreateProcessAsUserW', \ CreateProcessWithLogonW, <NONE>, 'CreateProcessWithLogonW', \ CreateRestrictedToken, <.ExistingTokenHandle, .Flags, .DisableSidCount, .SidsToDisable, .DeletePrivilegeCount, .PrivilegesToDelete, \ .RestrictedSidCount, .SidsToRestrict, .NewTokenHandle>, 'CreateRestrictedToken', \ CreateServiceA, <.hSCManager, .lpServiceName, .lpDisplayName, .dwDesiredAccess, .dwServiceType, .dwStartType, .dwErrorControl, \ .lpBinaryPathName, .lpLoadOrderGroup, .lpdwTagId, .lpDependencies, .lp, .lpPassword>, 'CreateServiceA', \ CreateServiceW, <.hSCManager, .lpServiceName, .lpDisplayName, .dwDesiredAccess, .dwServiceType, .dwStartType, .dwErrorControl, \ .lpBinaryPathName, .lpLoadOrderGroup, .lpdwTagId, .lpDependencies, .lp, .lpPassword>, 'CreateServiceW', \ CreateTraceInstanceId, <NONE>, 'CreateTraceInstanceId', \ CreateWellKnownSid, <NONE>, 'CreateWellKnownSid', \ CredDeleteA, <NONE>, 'CredDeleteA', \ CredDeleteW, <NONE>, 'CredDeleteW', \ CredEnumerateA, <NONE>, 'CredEnumerateA', \ CredEnumerateW, <NONE>, 'CredEnumerateW', \ CredFree, <NONE>, 'CredFree', \ CredGetSessionTypes, <NONE>, 'CredGetSessionTypes', \ CredGetTargetInfoA, <NONE>, 'CredGetTargetInfoA', \ CredGetTargetInfoW, <NONE>, 'CredGetTargetInfoW', \ CredIsMarshaledCredentialA, <NONE>, 'CredIsMarshaledCredentialA', \ CredIsMarshaledCredentialW, <NONE>, 'CredIsMarshaledCredentialW', \ CredMarshalCredentialA, <NONE>, 'CredMarshalCredentialA', \ CredMarshalCredentialW, <NONE>, 'CredMarshalCredentialW', \ CredProfileLoaded, <NONE>, 'CredProfileLoaded', \ CredReadA, <NONE>, 'CredReadA', \ CredReadDomainCredentialsA, <NONE>, 'CredReadDomainCredentialsA', \ CredReadDomainCredentialsW, <NONE>, 'CredReadDomainCredentialsW', \ CredReadW, <NONE>, 'CredReadW', \ CredRenameA, <NONE>, 'CredRenameA', \ CredRenameW, <NONE>, 'CredRenameW', \ CredUnmarshalCredentialA, <NONE>, 'CredUnmarshalCredentialA', \ CredUnmarshalCredentialW, <NONE>, 'CredUnmarshalCredentialW', \ CredWriteA, <NONE>, 'CredWriteA', \ CredWriteDomainCredentialsA, <NONE>, 'CredWriteDomainCredentialsA', \ CredWriteDomainCredentialsW, <NONE>, 'CredWriteDomainCredentialsW', \ CredWriteW, <NONE>, 'CredWriteW', \ CredpConvertCredential, <NONE>, 'CredpConvertCredential', \ CredpConvertTargetInfo, <NONE>, 'CredpConvertTargetInfo', \ CredpDecodeCredential, <NONE>, 'CredpDecodeCredential', \ CredpEncodeCredential, <NONE>, 'CredpEncodeCredential', \ CryptAcquireContextA, <.phProv, .pszContainer, .pszProvider, .dwProvType, .dwFlags>, 'CryptAcquireContextA', \ CryptAcquireContextW, <.phProv, .pszContainer, .pszProvider, .dwProvType, .dwFlags>, 'CryptAcquireContextW', \ CryptContextAddRef, <.hProv, .pdwReserved, .dwFlags>, 'CryptContextAddRef', \ CryptCreateHash, <.hProv, .Algid, .hKey, .dwFlags, .phHash>, 'CryptCreateHash', \ CryptDecrypt, <.hKey, .hHash, .Final, .dwFlags, .pbData, .pdwDataLen>, 'CryptDecrypt', \ CryptDeriveKey, <.hProv, .Algid, .hBaseData, .dwFlags, .phKey>, 'CryptDeriveKey', \ CryptDestroyHash, <.hHash>, 'CryptDestroyHash', \ CryptDestroyKey, <.hKey>, 'CryptDestroyKey', \ CryptDuplicateHash, <.hHash, .pdwReserved, .dwFlags, .phHash>, 'CryptDuplicateHash', \ CryptDuplicateKey, <.hKey, .pdwReserved, .dwFlags, .phKey>, 'CryptDuplicateKey', \ CryptEncrypt, <.hKey, .hHash, .Final, .dwFlags, .pbData, .pdwDataLen, .dwBufLen>, 'CryptEncrypt', \ CryptEnumProviderTypesA, <.dwIndex, .pdwReserved, .dwFlags, .pdwProvType, .pszTypeName, .pcbTypeName>, 'CryptEnumProviderTypesA', \ CryptEnumProviderTypesW, <.dwIndex, .pdwReserved, .dwFlags, .pdwProvType, .pszTypeName, .pcbTypeName>, 'CryptEnumProviderTypesW', \ CryptEnumProvidersA, <.dwIndex, .pdwReserved, .dwFlags, .pdwProvType, .pszProvName, .pcbProvName>, 'CryptEnumProvidersA', \ CryptEnumProvidersW, <.dwIndex, .pdwReserved, .dwFlags, .pdwProvType, .pszProvName, .pcbProvName>, 'CryptEnumProvidersW', \ CryptExportKey, <.hKey, .hExpKey, .dwBlobType, .dwFlags, .pbData, .pdwDataLen>, 'CryptExportKey', \ CryptGenKey, <.hProv, .Algid, .dwFlags, .phKey>, 'CryptGenKey', \ CryptGenRandom, <.hProv, .dwLen, .pbBuffer>, 'CryptGenRandom', \ CryptGetDefaultProviderA, <.dwProvType, .pdwReserved, .dwFlags, .pszProvName, .pcbProvName>, 'CryptGetDefaultProviderA', \ CryptGetDefaultProviderW, <.dwProvType, .pdwReserved, .dwFlags, .pszProvName, .pcbProvName>, 'CryptGetDefaultProviderW', \ CryptGetHashParam, <.hHash, .dwParam, .pbData, .pdwDataLen, .dwFlags>, 'CryptGetHashParam', \ CryptGetKeyParam, <.hKey, .dwParam, .pbData, .pdwDataLen, .dwFlags>, 'CryptGetKeyParam', \ CryptGetProvParam, <.hProv, .dwParam, .pbData, .pdwDataLen, .dwFlags>, 'CryptGetProvParam', \ CryptGetUserKey, <.hProv, .dwKeySpec, .phUserKey>, 'CryptGetUserKey', \ CryptHashData, <.hHash, .pbData, .dwDataLen, .dwFlags>, 'CryptHashData', \ CryptHashSessionKey, <.hHash, .hKey, .dwFlags>, 'CryptHashSessionKey', \ CryptImportKey, <.hProv, .pbData, .dwDataLen, .hPubKey, .dwFlags, .phKey>, 'CryptImportKey', \ CryptReleaseContext, <.hProv, .dwFlags>, 'CryptReleaseContext', \ CryptSetHashParam, <.hHash, .dwParam, .pbData, .dwFlags>, 'CryptSetHashParam', \ CryptSetKeyParam, <.hKey, .dwParam, .pbData, .dwFlags>, 'CryptSetKeyParam', \ CryptSetProvParam, <.hProv, .dwParam, .pbData, .dwFlags>, 'CryptSetProvParam', \ CryptSetProviderA, <.pszProvName, .dwProvType>, 'CryptSetProviderA', \ CryptSetProviderExA, <.pszProvName, .dwProvType, .pdwReserved, .dwFlags>, 'CryptSetProviderExA', \ CryptSetProviderExW, <.pszProvName, .dwProvType, .pdwReserved, .dwFlags>, 'CryptSetProviderExW', \ CryptSetProviderW, <.pszProvName, .dwProvType>, 'CryptSetProviderW', \ CryptSignHashA, <.hHash, .dwKeySpec, .sDescription, .dwFlags, .pbSignature, .pdwSigLen>, 'CryptSignHashA', \ CryptSignHashW, <.hHash, .dwKeySpec, .sDescription, .dwFlags, .pbSignature, .pdwSigLen>, 'CryptSignHashW', \ CryptVerifySignatureA, <.hHash, .pbSignature, .dwSigLen, .hPubKey, .sDescription, .dwFlags>, 'CryptVerifySignatureA', \ CryptVerifySignatureW, <.hHash, .pbSignature, .dwSigLen, .hPubKey, .sDescription, .dwFlags>, 'CryptVerifySignatureW', \ DecryptFileA, <.lpFileName, .dwReserved>, 'DecryptFileA', \ DecryptFileW, <.lpFileName, .dwReserved>, 'DecryptFileW', \ DeleteAce, <.pAcl, .dwAceIndex>, 'DeleteAce', \ DeleteService, <.hService>, 'DeleteService', \ DeregisterEventSource, <.hEventLog>, 'DeregisterEventSource', \ DestroyPrivateObjectSecurity, <.ObjectDescriptor>, 'DestroyPrivateObjectSecurity', \ DuplicateEncryptionInfoFile, <NONE>, 'DuplicateEncryptionInfoFile', \ DuplicateToken, <.ExistingTokenHandle, .ImpersonationLevel, .DuplicateTokenHandle>, 'DuplicateToken', \ DuplicateTokenEx, <.hExistingToken, .dwDesiredAccess, .lpTokenAttributes, .ImpersonationLevel, .TokenType, .phNewToken>, 'DuplicateTokenEx', \ ElfBackupEventLogFileA, <NONE>, 'ElfBackupEventLogFileA', \ ElfBackupEventLogFileW, <NONE>, 'ElfBackupEventLogFileW', \ ElfChangeNotify, <NONE>, 'ElfChangeNotify', \ ElfClearEventLogFileA, <NONE>, 'ElfClearEventLogFileA', \ ElfClearEventLogFileW, <NONE>, 'ElfClearEventLogFileW', \ ElfCloseEventLog, <NONE>, 'ElfCloseEventLog', \ ElfDeregisterEventSource, <NONE>, 'ElfDeregisterEventSource', \ ElfFlushEventLog, <NONE>, 'ElfFlushEventLog', \ ElfNumberOfRecords, <NONE>, 'ElfNumberOfRecords', \ ElfOldestRecord, <NONE>, 'ElfOldestRecord', \ ElfOpenBackupEventLogA, <NONE>, 'ElfOpenBackupEventLogA', \ ElfOpenBackupEventLogW, <NONE>, 'ElfOpenBackupEventLogW', \ ElfOpenEventLogA, <NONE>, 'ElfOpenEventLogA', \ ElfOpenEventLogW, <NONE>, 'ElfOpenEventLogW', \ ElfReadEventLogA, <NONE>, 'ElfReadEventLogA', \ ElfReadEventLogW, <NONE>, 'ElfReadEventLogW', \ ElfRegisterEventSourceA, <NONE>, 'ElfRegisterEventSourceA', \ ElfRegisterEventSourceW, <NONE>, 'ElfRegisterEventSourceW', \ ElfReportEventA, <NONE>, 'ElfReportEventA', \ ElfReportEventW, <NONE>, 'ElfReportEventW', \ EnableTrace, <NONE>, 'EnableTrace', \ EncryptFileA, <.lpFileName>, 'EncryptFileA', \ EncryptFileW, <.lpFileName>, 'EncryptFileW', \ EncryptedFileKeyInfo, <NONE>, 'EncryptedFileKeyInfo', \ EncryptionDisable, <.DirPath, .Disable>, 'EncryptionDisable', \ EnumDependentServicesA, <.hService, .dwServiceState, .lpServices, .cbBufSize, .pcbBytesNeeded, .lpServicesReturned>, 'EnumDependentServicesA', \ EnumDependentServicesW, <.hService, .dwServiceState, .lpServices, .cbBufSize, .pcbBytesNeeded, .lpServicesReturned>, 'EnumDependentServicesW', \ EnumServiceGroupW, <NONE>, 'EnumServiceGroupW', \ EnumServicesStatusA, <.hSCManager, .dwServiceType, .dwServiceState, .lpServices, .cbBufSize, .pcbBytesNeeded, .lpServicesReturned, \ .lpResumeHandle>, 'EnumServicesStatusA', \ EnumServicesStatusExA, <.hSCManager, .InfoLevel, .dwServiceType, .dwServiceState, .lpServices, .cbBufSize, .pcbBytesNeeded, .lpServicesReturned, \ .lpResumeHandle, .pszGroupName>, 'EnumServicesStatusExA', \ EnumServicesStatusExW, <.hSCManager, .InfoLevel, .dwServiceType, .dwServiceState, .lpServices, .cbBufSize, .pcbBytesNeeded, .lpServicesReturned, \ .lpResumeHandle, .pszGroupName>, 'EnumServicesStatusExW', \ EnumServicesStatusW, <.hSCManager, .dwServiceType, .dwServiceState, .lpServices, .cbBufSize, .pcbBytesNeeded, .lpServicesReturned, \ .lpResumeHandle>, 'EnumServicesStatusW', \ EnumerateTraceGuids, <NONE>, 'EnumerateTraceGuids', \ EqualDomainSid, <NONE>, 'EqualDomainSid', \ EqualPrefixSid, <.pSid1, .pSid2>, 'EqualPrefixSid', \ EqualSid, <.pSid1, .pSid2>, 'EqualSid', \ FileEncryptionStatusA, <.lpFileName, .lpStatus>, 'FileEncryptionStatusA', \ FileEncryptionStatusW, <.lpFileName, .lpStatus>, 'FileEncryptionStatusW', \ FindFirstFreeAce, <.pAcl, .pAce>, 'FindFirstFreeAce', \ FlushTraceA, <NONE>, 'FlushTraceA', \ FlushTraceW, <NONE>, 'FlushTraceW', \ FreeEncryptedFileKeyInfo, <NONE>, 'FreeEncryptedFileKeyInfo', \ FreeEncryptionCertificateHashList, <.pHashes>, 'FreeEncryptionCertificateHashList', \ FreeInheritedFromArray, <.pInheritArray, .AceCnt, .pfnArray>, 'FreeInheritedFromArray', \ FreeSid, <.pSid>, 'FreeSid', \ GetAccessPermissionsForObjectA, <NONE>, 'GetAccessPermissionsForObjectA', \ GetAccessPermissionsForObjectW, <NONE>, 'GetAccessPermissionsForObjectW', \ GetAce, <.pAcl, .dwAceIndex, .pAce>, 'GetAce', \ GetAclInformation, <.pAcl, .pAclInformation, .nAclInformationLength, .dwAclInformationClass>, 'GetAclInformation', \ GetAuditedPermissionsFromAclA, <.pAcl, .pTrustee, .pSuccessfulAuditedRights, .pFailedAuditRights>, 'GetAuditedPermissionsFromAclA', \ GetAuditedPermissionsFromAclW, <.pAcl, .pTrustee, .pSuccessfulAuditedRights, .pFailedAuditRights>, 'GetAuditedPermissionsFromAclW', \ GetCurrentHwProfileA, <.lpHwProfileInfo>, 'GetCurrentHwProfileA', \ GetCurrentHwProfileW, <.lpHwProfileInfo>, 'GetCurrentHwProfileW', \ GetEffectiveRightsFromAclA, <.pAcl, .pTrustee, .pAccessRights>, 'GetEffectiveRightsFromAclA', \ GetEffectiveRightsFromAclW, <.pAcl, .pTrustee, .pAccessRights>, 'GetEffectiveRightsFromAclW', \ GetEventLogInformation, <.hEventLog, .dwInfoLevel, .lpBuffer, .cbBufSize, .pcbBytesNeeded>, 'GetEventLogInformation', \ GetExplicitEntriesFromAclA, <.pAcl, .pcCountOfExplicitEntries, .pListOfExplicitEntries>, 'GetExplicitEntriesFromAclA', \ GetExplicitEntriesFromAclW, <.pAcl, .pcCountOfExplicitEntries, .pListOfExplicitEntries>, 'GetExplicitEntriesFromAclW', \ GetFileSecurityA, <.lpFileName, .RequestedInformation, .pSecurityDescriptor, .nLength, .lpnLengthNeeded>, 'GetFileSecurityA', \ GetFileSecurityW, <.lpFileName, .RequestedInformation, .pSecurityDescriptor, .nLength, .lpnLengthNeeded>, 'GetFileSecurityW', \ GetInformationCodeAuthzLevelW, <NONE>, 'GetInformationCodeAuthzLevelW', \ GetInformationCodeAuthzPolicyW, <NONE>, 'GetInformationCodeAuthzPolicyW', \ GetInheritanceSourceA, <.pObjectName, .ObjectType, .SecurityInfo, .Container, .ObjectTypeGuid, .pAcl, .pfnArray, .pGenericMapping, \ .pInheritArray>, 'GetInheritanceSourceA', \ GetInheritanceSourceW, <.pObjectName, .ObjectType, .SecurityInfo, .Container, .ObjectTypeGuid, .pAcl, .pfnArray, .pGenericMapping, \ .pInheritArray>, 'GetInheritanceSourceW', \ GetKernelObjectSecurity, <.Handle, .RequestedInformation, .pSecurityDescriptor, .nLength, .lpnLengthNeeded>, 'GetKernelObjectSecurity', \ GetLengthSid, <.pSid>, 'GetLengthSid', \ GetLocalManagedApplicationData, <NONE>, 'GetLocalManagedApplicationData', \ GetLocalManagedApplications, <NONE>, 'GetLocalManagedApplications', \ GetManagedApplicationCategories, <NONE>, 'GetManagedApplicationCategories', \ GetManagedApplications, <NONE>, 'GetManagedApplications', \ GetMultipleTrusteeA, <.pTrustee>, 'GetMultipleTrusteeA', \ GetMultipleTrusteeOperationA, <.pTrustee>, 'GetMultipleTrusteeOperationA', \ GetMultipleTrusteeOperationW, <.pTrustee>, 'GetMultipleTrusteeOperationW', \ GetMultipleTrusteeW, <.pTrustee>, 'GetMultipleTrusteeW', \ GetNamedSecurityInfoA, <.pObjectName, .ObjectType, .SecurityInfo, .ppsidOwner, .ppsidGroup, .ppDacl, .ppSacl, .ppSecurityDescriptor, \ >, 'GetNamedSecurityInfoA', \ GetNamedSecurityInfoExA, <NONE>, 'GetNamedSecurityInfoExA', \ GetNamedSecurityInfoExW, <NONE>, 'GetNamedSecurityInfoExW', \ GetNamedSecurityInfoW, <.pObjectName, .ObjectType, .SecurityInfo, .ppsidOwner, .ppsidGroup, .ppDacl, .ppSacl, .ppSecurityDescriptor, \ >, 'GetNamedSecurityInfoW', \ GetNumberOfEventLogRecords, <.hEventLog, .NumberOfRecords>, 'GetNumberOfEventLogRecords', \ GetOldestEventLogRecord, <.hEventLog, .OldestRecord>, 'GetOldestEventLogRecord', \ GetOverlappedAccessResults, <NONE>, 'GetOverlappedAccessResults', \ GetPrivateObjectSecurity, <.ObjectDescriptor, .SecurityInformation, .ResultantDescriptor, .DescriptorLength, .ReturnLength>, 'GetPrivateObjectSecurity', \ GetSecurityDescriptorControl, <.pSecurityDescriptor, .pControl, .lpdwRevision>, 'GetSecurityDescriptorControl', \ GetSecurityDescriptorDacl, <.pSecurityDescriptor, .lpbDaclPresent, .pDacl, .lpbDaclDefaulted>, 'GetSecurityDescriptorDacl', \ GetSecurityDescriptorGroup, <.pSecurityDescriptor, .pGroup, .lpbGroupDefaulted>, 'GetSecurityDescriptorGroup', \ GetSecurityDescriptorLength, <.pSecurityDescriptor>, 'GetSecurityDescriptorLength', \ GetSecurityDescriptorOwner, <.pSecurityDescriptor, .pOwner, .lpbOwnerDefaulted>, 'GetSecurityDescriptorOwner', \ GetSecurityDescriptorRMControl, <.SecurityDescriptor, .RMControl>, 'GetSecurityDescriptorRMControl', \ GetSecurityDescriptorSacl, <.pSecurityDescriptor, .lpbSaclPresent, .pSacl, .lpbSaclDefaulted>, 'GetSecurityDescriptorSacl', \ GetSecurityInfo, <.Handle, .ObjectType, .SecurityInfo, .ppsidOwner, .ppsidGroup, .ppDacl, .ppSacl, .ppSecurityDescriptor>, 'GetSecurityInfo', \ GetSecurityInfoExA, <NONE>, 'GetSecurityInfoExA', \ GetSecurityInfoExW, <NONE>, 'GetSecurityInfoExW', \ GetServiceDisplayNameA, <.hSCManager, .lpServiceName, .lpDisplayName, .lpcchBuffer>, 'GetServiceDisplayNameA', \ GetServiceDisplayNameW, <.hSCManager, .lpServiceName, .lpDisplayName, .lpcchBuffer>, 'GetServiceDisplayNameW', \ GetServiceKeyNameA, <.hSCManager, .lpDisplayName, .lpServiceName, .lpcchBuffer>, 'GetServiceKeyNameA', \ GetServiceKeyNameW, <.hSCManager, .lpDisplayName, .lpServiceName, .lpcchBuffer>, 'GetServiceKeyNameW', \ GetSidIdentifierAuthority, <.pSid>, 'GetSidIdentifierAuthority', \ GetSidLengthRequired, <.nSubAuthorityCount>, 'GetSidLengthRequired', \ GetSidSubAuthority, <.pSid, .nSubAuthority>, 'GetSidSubAuthority', \ GetSidSubAuthorityCount, <.pSid>, 'GetSidSubAuthorityCount', \ GetTokenInformation, <.TokenHandle, .TokenInformationClass, .TokenInformation, .TokenInformationLength, .ReturnLength>, 'GetTokenInformation', \ GetTraceEnableFlags, <NONE>, 'GetTraceEnableFlags', \ GetTraceEnableLevel, <NONE>, 'GetTraceEnableLevel', \ GetTraceLoggerHandle, <NONE>, 'GetTraceLoggerHandle', \ GetTrusteeFormA, <.pTrustee>, 'GetTrusteeFormA', \ GetTrusteeFormW, <.pTrustee>, 'GetTrusteeFormW', \ GetTrusteeNameA, <.pTrustee>, 'GetTrusteeNameA', \ GetTrusteeNameW, <.pTrustee>, 'GetTrusteeNameW', \ GetTrusteeTypeA, <.pTrustee>, 'GetTrusteeTypeA', \ GetTrusteeTypeW, <.pTrustee>, 'GetTrusteeTypeW', \ GetUserNameA, <.lpBuffer, .nSize>, 'GetUserNameA', \ GetUserNameW, <.lpBuffer, .nSize>, 'GetUserNameW', \ GetWindowsAccountDomainSid, <NONE>, 'GetWindowsAccountDomainSid', \ I_ScGetCurrentGroupStateW, <NONE>, 'I_ScGetCurrentGroupStateW', \ I_ScIsSecurityProcess, <NONE>, 'I_ScIsSecurityProcess', \ I_ScPnPGetServiceName, <NONE>, 'I_ScPnPGetServiceName', \ I_ScSendTSMessage, <NONE>, 'I_ScSendTSMessage', \ I_ScSetServiceBitsA, <NONE>, 'I_ScSetServiceBitsA', \ I_ScSetServiceBitsW, <NONE>, 'I_ScSetServiceBitsW', \ IdentifyCodeAuthzLevelW, <NONE>, 'IdentifyCodeAuthzLevelW', \ ImpersonateAnonymousToken, <.ThreadHandle>, 'ImpersonateAnonymousToken', \ ImpersonateLoggedOnUser, <.hToken>, 'ImpersonateLoggedOnUser', \ ImpersonateNamedPipeClient, <.hNamedPipe>, 'ImpersonateNamedPipeClient', \ ImpersonateSelf, <.ImpersonationLevel>, 'ImpersonateSelf', \ InitializeAcl, <.pAcl, .nAclLength, .dwAclRevision>, 'InitializeAcl', \ InitializeSecurityDescriptor, <.pSecurityDescriptor, .dwRevision>, 'InitializeSecurityDescriptor', \ InitializeSid, <.Sid, .pIdentifierAuthority, .nSubAuthorityCount>, 'InitializeSid', \ InitiateSystemShutdownA, <.lpMachineName, .lpMessage, .dwTimeout, .bForceAppsClosed, .bRebootAfterShutdown>, 'InitiateSystemShutdownA', \ InitiateSystemShutdownExA, <.lpMachineName, .lpMessage, .dwTimeout, .bForceAppsClosed, .bRebootAfterShutdown, .dwReason>, 'InitiateSystemShutdownExA', \ InitiateSystemShutdownExW, <.lpMachineName, .lpMessage, .dwTimeout, .bForceAppsClosed, .bRebootAfterShutdown, .dwReason>, 'InitiateSystemShutdownExW', \ InitiateSystemShutdownW, <.lpMachineName, .lpMessage, .dwTimeout, .bForceAppsClosed, .bRebootAfterShutdown>, 'InitiateSystemShutdownW', \ InstallApplication, <NONE>, 'InstallApplication', \ IsTextUnicode, <.lpBuffer, .cb, .lpi>, 'IsTextUnicode', \ IsTokenRestricted, <.TokenHandle>, 'IsTokenRestricted', \ IsTokenUntrusted, <NONE>, 'IsTokenUntrusted', \ IsValidAcl, <.pAcl>, 'IsValidAcl', \ IsValidSecurityDescriptor, <.pSecurityDescriptor>, 'IsValidSecurityDescriptor', \ IsValidSid, <.pSid>, 'IsValidSid', \ IsWellKnownSid, <NONE>, 'IsWellKnownSid', \ LockServiceDatabase, <.hSCManager>, 'LockServiceDatabase', \ LogonUserA, <.lpszUsername, .lpszDomain, .lpszPassword, .dwLogonType, .dwLogonProvider, .phToken>, 'LogonUserA', \ LogonUserExA, <NONE>, 'LogonUserExA', \ LogonUserExW, <NONE>, 'LogonUserExW', \ LogonUserW, <.lpszUsername, .lpszDomain, .lpszPassword, .dwLogonType, .dwLogonProvider, .phToken>, 'LogonUserW', \ LookupAccountNameA, <.lpSystemName, .lpAccountName, .Sid, .cbSid, .ReferencedDomainName, .cbReferencedDomainName, .peUse>, 'LookupAccountNameA', \ LookupAccountNameW, <.lpSystemName, .lpAccountName, .Sid, .cbSid, .ReferencedDomainName, .cbReferencedDomainName, .peUse>, 'LookupAccountNameW', \ LookupAccountSidA, <.lpSystemName, .Sid, .Name, .cbName, .ReferencedDomainName, .cbReferencedDomainName, .peUse>, 'LookupAccountSidA', \ LookupAccountSidW, <.lpSystemName, .Sid, .Name, .cbName, .ReferencedDomainName, .cbReferencedDomainName, .peUse>, 'LookupAccountSidW', \ LookupPrivilegeDisplayNameA, <.lpSystemName, .lpName, .lpDisplayName, .cbDisplayName, .lpLanguageID>, 'LookupPrivilegeDisplayNameA', \ LookupPrivilegeDisplayNameW, <.lpSystemName, .lpName, .lpDisplayName, .cbDisplayName, .lpLanguageID>, 'LookupPrivilegeDisplayNameW', \ LookupPrivilegeNameA, <.lpSystemName, .lpLuid, .lpName, .cbName>, 'LookupPrivilegeNameA', \ LookupPrivilegeNameW, <.lpSystemName, .lpLuid, .lpName, .cbName>, 'LookupPrivilegeNameW', \ LookupPrivilegeValueA, <.lpSystemName, .lpName, .lpLuid>, 'LookupPrivilegeValueA', \ LookupPrivilegeValueW, <.lpSystemName, .lpName, .lpLuid>, 'LookupPrivilegeValueW', \ LookupSecurityDescriptorPartsA, <.pOwner, .pGroup, .cCountOfAccessEntries, .pListOfAccessEntries, .cCountOfAuditEntries, .pListOfAuditEntries, \ .pSD>, 'LookupSecurityDescriptorPartsA', \ LookupSecurityDescriptorPartsW, <.pOwner, .pGroup, .cCountOfAccessEntries, .pListOfAccessEntries, .cCountOfAuditEntries, .pListOfAuditEntries, \ .pSD>, 'LookupSecurityDescriptorPartsW', \ LsaAddAccountRights, <.PolicyHandle, .AccountSid, .UserRights, .CountOfRights>, 'LsaAddAccountRights', \ LsaAddPrivilegesToAccount, <NONE>, 'LsaAddPrivilegesToAccount', \ LsaClearAuditLog, <NONE>, 'LsaClearAuditLog', \ LsaClose, <.ObjectHandle>, 'LsaClose', \ LsaCreateAccount, <NONE>, 'LsaCreateAccount', \ LsaCreateSecret, <NONE>, 'LsaCreateSecret', \ LsaCreateTrustedDomain, <NONE>, 'LsaCreateTrustedDomain', \ LsaCreateTrustedDomainEx, <.PolicyHandle, .TrustedDomainInformation, .AuthenticationInformation, .DesiredAccess, .TrustedDomainHandle, \ >, 'LsaCreateTrustedDomainEx', \ LsaDelete, <NONE>, 'LsaDelete', \ LsaDeleteTrustedDomain, <.PolicyHandle, .TrustedDomainSid>, 'LsaDeleteTrustedDomain', \ LsaEnumerateAccountRights, <.PolicyHandle, .AccountSid, .UserRights, .CountOfRights>, 'LsaEnumerateAccountRights', \ LsaEnumerateAccounts, <NONE>, 'LsaEnumerateAccounts', \ LsaEnumerateAccountsWithUserRight, <.PolicyHandle, .UserRights, .EnumerationBuffer, .CountReturned>, 'LsaEnumerateAccountsWithUserRight', \ LsaEnumeratePrivileges, <NONE>, 'LsaEnumeratePrivileges', \ LsaEnumeratePrivilegesOfAccount, <NONE>, 'LsaEnumeratePrivilegesOfAccount', \ LsaEnumerateTrustedDomains, <.PolicyHandle, .EnumerationContext, .buffer, .PreferedMaximumLength, .CountReturned>, 'LsaEnumerateTrustedDomains', \ LsaEnumerateTrustedDomainsEx, <.PolicyHandle, .EnumerationContext, .buffer, .PreferedMaximumLength, .CountReturned>, 'LsaEnumerateTrustedDomainsEx', \ LsaFreeMemory, <.buffer>, 'LsaFreeMemory', \ LsaGetQuotasForAccount, <NONE>, 'LsaGetQuotasForAccount', \ LsaGetRemoteUserName, <NONE>, 'LsaGetRemoteUserName', \ LsaGetSystemAccessAccount, <NONE>, 'LsaGetSystemAccessAccount', \ LsaGetUserName, <NONE>, 'LsaGetUserName', \ LsaICLookupNames, <NONE>, 'LsaICLookupNames', \ LsaICLookupNamesWithCreds, <NONE>, 'LsaICLookupNamesWithCreds', \ LsaICLookupSids, <NONE>, 'LsaICLookupSids', \ LsaICLookupSidsWithCreds, <NONE>, 'LsaICLookupSidsWithCreds', \ LsaLookupNames, <.PolicyHandle, .count, .Names, .ReferencedDomains, .Sids>, 'LsaLookupNames', \ LsaLookupNames2, <NONE>, 'LsaLookupNames2', \ LsaLookupPrivilegeDisplayName, <NONE>, 'LsaLookupPrivilegeDisplayName', \ LsaLookupPrivilegeName, <NONE>, 'LsaLookupPrivilegeName', \ LsaLookupPrivilegeValue, <NONE>, 'LsaLookupPrivilegeValue', \ LsaLookupSids, <.PolicyHandle, .count, .Sids, .ReferencedDomains, .Names>, 'LsaLookupSids', \ LsaNtStatusToWinError, <.Status>, 'LsaNtStatusToWinError', \ LsaOpenAccount, <NONE>, 'LsaOpenAccount', \ LsaOpenPolicy, <.SystemName, .ObjectAttributes, .DesiredAccess, .PolicyHandle>, 'LsaOpenPolicy', \ LsaOpenPolicySce, <NONE>, 'LsaOpenPolicySce', \ LsaOpenSecret, <NONE>, 'LsaOpenSecret', \ LsaOpenTrustedDomain, <NONE>, 'LsaOpenTrustedDomain', \ LsaOpenTrustedDomainByName, <.PolicyHandle, .TrustedDomainName, .DesiredAccess, .TrustedDomainHandle>, 'LsaOpenTrustedDomainByName', \ LsaQueryDomainInformationPolicy, <.PolicyHandle, .InformationClass, .buffer>, 'LsaQueryDomainInformationPolicy', \ LsaQueryForestTrustInformation, <NONE>, 'LsaQueryForestTrustInformation', \ LsaQueryInfoTrustedDomain, <NONE>, 'LsaQueryInfoTrustedDomain', \ LsaQueryInformationPolicy, <.PolicyHandle, .InformationClass, .buffer>, 'LsaQueryInformationPolicy', \ LsaQuerySecret, <NONE>, 'LsaQuerySecret', \ LsaQuerySecurityObject, <NONE>, 'LsaQuerySecurityObject', \ LsaQueryTrustedDomainInfo, <.PolicyHandle, .TrustedDomainSid, .InformationClass, .buffer>, 'LsaQueryTrustedDomainInfo', \ LsaQueryTrustedDomainInfoByName, <.PolicyHandle, .TrustedDomainName, .InformationClass, .buffer>, 'LsaQueryTrustedDomainInfoByName', \ LsaRemoveAccountRights, <.PolicyHandle, .AccountSid, .AllRights, .UserRights, .CountOfRights>, 'LsaRemoveAccountRights', \ LsaRemovePrivilegesFromAccount, <NONE>, 'LsaRemovePrivilegesFromAccount', \ LsaRetrievePrivateData, <.PolicyHandle, .KeyName, .PrivateData>, 'LsaRetrievePrivateData', \ LsaSetDomainInformationPolicy, <.PolicyHandle, .InformationClass, .buffer>, 'LsaSetDomainInformationPolicy', \ LsaSetForestTrustInformation, <NONE>, 'LsaSetForestTrustInformation', \ LsaSetInformationPolicy, <.PolicyHandle, .InformationClass, .buffer>, 'LsaSetInformationPolicy', \ LsaSetInformationTrustedDomain, <NONE>, 'LsaSetInformationTrustedDomain', \ LsaSetQuotasForAccount, <NONE>, 'LsaSetQuotasForAccount', \ LsaSetSecret, <NONE>, 'LsaSetSecret', \ LsaSetSecurityObject, <NONE>, 'LsaSetSecurityObject', \ LsaSetSystemAccessAccount, <NONE>, 'LsaSetSystemAccessAccount', \ LsaSetTrustedDomainInfoByName, <.PolicyHandle, .TrustedDomainName, .InformationClass, .buffer>, 'LsaSetTrustedDomainInfoByName', \ LsaSetTrustedDomainInformation, <.PolicyHandle, .TrustedDomainSid, .InformationClass, .buffer>, 'LsaSetTrustedDomainInformation', \ LsaStorePrivateData, <.PolicyHandle, .KeyName, .PrivateData>, 'LsaStorePrivateData', \ MD4Final, <NONE>, 'MD4Final', \ MD4Init, <NONE>, 'MD4Init', \ MD4Update, <NONE>, 'MD4Update', \ MD5Final, <NONE>, 'MD5Final', \ MD5Init, <NONE>, 'MD5Init', \ MD5Update, <NONE>, 'MD5Update', \ MSChapSrvChangePassword, <NONE>, 'MSChapSrvChangePassword', \ MSChapSrvChangePassword2, <NONE>, 'MSChapSrvChangePassword2', \ MakeAbsoluteSD, <.pSelfRelativeSecurityDescriptor, .pAbsoluteSecurityDescriptor, .lpdwAbsoluteSecurityDescriptorSize, .pDacl, .lpdwDaclSize, \ .pSacl, .lpdwSaclSize, .pOwner, .lpdwOwnerSize, .pPrimaryGroup, .lpdwPrimaryGroupSize>, 'MakeAbsoluteSD', \ MakeAbsoluteSD2, <.pSelfRelativeSecurityDescriptor, .lpdwBufferSize>, 'MakeAbsoluteSD2', \ MakeSelfRelativeSD, <.pAbsoluteSecurityDescriptor, .pSelfRelativeSecurityDescriptor, .lpdwBufferLength>, 'MakeSelfRelativeSD', \ MapGenericMask, <.AccessMask, .GenericMapping>, 'MapGenericMask', \ NotifyBootConfigStatus, <.BootAcceptable>, 'NotifyBootConfigStatus', \ NotifyChangeEventLog, <.hEventLog, .hEvent>, 'NotifyChangeEventLog', \ ObjectCloseAuditAlarmA, <.SubsystemName, .HandleId, .GenerateOnClose>, 'ObjectCloseAuditAlarmA', \ ObjectCloseAuditAlarmW, <.SubsystemName, .HandleId, .GenerateOnClose>, 'ObjectCloseAuditAlarmW', \ ObjectDeleteAuditAlarmA, <.SubsystemName, .HandleId, .GenerateOnClose>, 'ObjectDeleteAuditAlarmA', \ ObjectDeleteAuditAlarmW, <.SubsystemName, .HandleId, .GenerateOnClose>, 'ObjectDeleteAuditAlarmW', \ ObjectOpenAuditAlarmA, <.SubsystemName, .HandleId, .ObjectTypeName, .ObjectName, .pSecurityDescriptor, .ClientToken, .DesiredAccess, \ .GrantedAccess, .Privileges, .ObjectCreation, .AccessGranted, .GenerateOnClose>, 'ObjectOpenAuditAlarmA', \ ObjectOpenAuditAlarmW, <.SubsystemName, .HandleId, .ObjectTypeName, .ObjectName, .pSecurityDescriptor, .ClientToken, .DesiredAccess, \ .GrantedAccess, .Privileges, .ObjectCreation, .AccessGranted, .GenerateOnClose>, 'ObjectOpenAuditAlarmW', \ ObjectPrivilegeAuditAlarmA, <.SubsystemName, .HandleId, .ClientToken, .DesiredAccess, .Privileges, .AccessGranted>, 'ObjectPrivilegeAuditAlarmA', \ ObjectPrivilegeAuditAlarmW, <.SubsystemName, .HandleId, .ClientToken, .DesiredAccess, .Privileges, .AccessGranted>, 'ObjectPrivilegeAuditAlarmW', \ OpenBackupEventLogA, <.lpUNCServerName, .lpFileName>, 'OpenBackupEventLogA', \ OpenBackupEventLogW, <.lpUNCServerName, .lpFileName>, 'OpenBackupEventLogW', \ OpenEncryptedFileRawA, <.lpFileName, .ulFlags, .pvContext>, 'OpenEncryptedFileRawA', \ OpenEncryptedFileRawW, <.lpFileName, .ulFlags, .pvContext>, 'OpenEncryptedFileRawW', \ OpenEventLogA, <.lpUNCServerName, .lpSourceName>, 'OpenEventLogA', \ OpenEventLogW, <.lpUNCServerName, .lpSourceName>, 'OpenEventLogW', \ OpenProcessToken, <.ProcessHandle, .DesiredAccess, .TokenHandle>, 'OpenProcessToken', \ OpenSCManagerA, <.lpMachineName, .lpDatabaseName, .dwDesiredAccess>, 'OpenSCManagerA', \ OpenSCManagerW, <.lpMachineName, .lpDatabaseName, .dwDesiredAccess>, 'OpenSCManagerW', \ OpenServiceA, <.hSCManager, .lpServiceName, .dwDesiredAccess>, 'OpenServiceA', \ OpenServiceW, <.hSCManager, .lpServiceName, .dwDesiredAccess>, 'OpenServiceW', \ OpenThreadToken, <.ThreadHandle, .DesiredAccess, .OpenAsSelf, .TokenHandle>, 'OpenThreadToken', \ OpenTraceA, <NONE>, 'OpenTraceA', \ OpenTraceW, <NONE>, 'OpenTraceW', \ PrivilegeCheck, <.ClientToken, .RequiredPrivileges, .pfResult>, 'PrivilegeCheck', \ PrivilegedServiceAuditAlarmA, <.SubsystemName, .ServiceName, .ClientToken, .Privileges, .AccessGranted>, 'PrivilegedServiceAuditAlarmA', \ PrivilegedServiceAuditAlarmW, <.SubsystemName, .ServiceName, .ClientToken, .Privileges, .AccessGranted>, 'PrivilegedServiceAuditAlarmW', \ ProcessIdleTasks, <NONE>, 'ProcessIdleTasks', \ ProcessTrace, <NONE>, 'ProcessTrace', \ QueryAllTracesA, <NONE>, 'QueryAllTracesA', \ QueryAllTracesW, <NONE>, 'QueryAllTracesW', \ QueryRecoveryAgentsOnEncryptedFile, <.lpFileName, .pRecoveryAgents>, 'QueryRecoveryAgentsOnEncryptedFile', \ QueryServiceConfig2A, <.hService, .dwInfoLevel, .lpBuffer, .cbBufSize, .pcbBytesNeeded>, 'QueryServiceConfig2A', \ QueryServiceConfig2W, <.hService, .dwInfoLevel, .lpBuffer, .cbBufSize, .pcbBytesNeeded>, 'QueryServiceConfig2W', \ QueryServiceConfigA, <.hService, .lpServiceConfig, .cbBufSize, .pcbBytesNeeded>, 'QueryServiceConfigA', \ QueryServiceConfigW, <.hService, .lpServiceConfig, .cbBufSize, .pcbBytesNeeded>, 'QueryServiceConfigW', \ QueryServiceLockStatusA, <.hSCManager, .lpLockStatus, .cbBufSize, .pcbBytesNeeded>, 'QueryServiceLockStatusA', \ QueryServiceLockStatusW, <.hSCManager, .lpLockStatus, .cbBufSize, .pcbBytesNeeded>, 'QueryServiceLockStatusW', \ QueryServiceObjectSecurity, <.hService, .dwSecurityInformation, .lpSecurityDescriptor, .cbBufSize, .pcbBytesNeeded>, 'QueryServiceObjectSecurity', \ QueryServiceStatus, <.hService, .lpServiceStatus>, 'QueryServiceStatus', \ QueryServiceStatusEx, <.hService, .InfoLevel, .lpBuffer, .cbBufSize, .pcbBytesNeeded>, 'QueryServiceStatusEx', \ QueryTraceA, <NONE>, 'QueryTraceA', \ QueryTraceW, <NONE>, 'QueryTraceW', \ QueryUsersOnEncryptedFile, <.lpFileName, .pUsers>, 'QueryUsersOnEncryptedFile', \ QueryWindows31FilesMigration, <NONE>, 'QueryWindows31FilesMigration', \ ReadEncryptedFileRaw, <.pfExportCallback, .pvCallbackContext, .pvContext>, 'ReadEncryptedFileRaw', \ ReadEventLogA, <.hEventLog, .dwReadFlags, .dwRecordOffset, .lpBuffer, .nNumberOfBytesToRead, .pnBytesRead, .pnMinNumberOfBytesNeeded, \ >, 'ReadEventLogA', \ ReadEventLogW, <.hEventLog, .dwReadFlags, .dwRecordOffset, .lpBuffer, .nNumberOfBytesToRead, .pnBytesRead, .pnMinNumberOfBytesNeeded, \ >, 'ReadEventLogW', \ RegCloseKey, <.hKey>, 'RegCloseKey', \ RegConnectRegistryA, <.lpMachineName, .hKey, .phkResult>, 'RegConnectRegistryA', \ RegConnectRegistryW, <.lpMachineName, .hKey, .phkResult>, 'RegConnectRegistryW', \ RegCreateKeyA, <.hKey, .lpSubKey, .phkResult>, 'RegCreateKeyA', \ RegCreateKeyExA, <.hKey, .lpSubKey, .Reserved, .lpClass, .dwOptions, .samDesired, .lpSecurityAttributes, .phkResult, .lpdwDisposition, \ >, 'RegCreateKeyExA', \ RegCreateKeyExW, <.hKey, .lpSubKey, .Reserved, .lpClass, .dwOptions, .samDesired, .lpSecurityAttributes, .phkResult, .lpdwDisposition, \ >, 'RegCreateKeyExW', \ RegCreateKeyW, <.hKey, .lpSubKey, .phkResult>, 'RegCreateKeyW', \ RegDeleteKeyA, <.hKey, .lpSubKey>, 'RegDeleteKeyA', \ RegDeleteKeyW, <.hKey, .lpSubKey>, 'RegDeleteKeyW', \ RegDeleteValueA, <.hKey, .lpValueName>, 'RegDeleteValueA', \ RegDeleteValueW, <.hKey, .lpValueName>, 'RegDeleteValueW', \ RegDisablePredefinedCache, <VOID>, 'RegDisablePredefinedCache', \ RegDisablePredefinedCacheEx, <NONE>, 'RegDisablePredefinedCacheEx', \ RegEnumKeyA, <.hKey, .dwIndex, .lpName, .cbName>, 'RegEnumKeyA', \ RegEnumKeyExA, <.hKey, .dwIndex, .lpName, .lpcbName, .lpReserved, .lpClass, .lpcbClass, .lpftLastWriteTime>, 'RegEnumKeyExA', \ RegEnumKeyExW, <.hKey, .dwIndex, .lpName, .lpcbName, .lpReserved, .lpClass, .lpcbClass, .lpftLastWriteTime>, 'RegEnumKeyExW', \ RegEnumKeyW, <.hKey, .dwIndex, .lpName, .cbName>, 'RegEnumKeyW', \ RegEnumValueA, <.hKey, .dwIndex, .lpValueName, .lpcbValueName, .lpReserved, .lpType, .lpData, .lpcbData>, 'RegEnumValueA', \ RegEnumValueW, <.hKey, .dwIndex, .lpValueName, .lpcbValueName, .lpReserved, .lpType, .lpData, .lpcbData>, 'RegEnumValueW', \ RegFlushKey, <.hKey>, 'RegFlushKey', \ RegGetKeySecurity, <.hKey, .SecurityInformation, .pSecurityDescriptor, .lpcbSecurityDescriptor>, 'RegGetKeySecurity', \ RegLoadKeyA, <.hKey, .lpSubKey, .lpFile>, 'RegLoadKeyA', \ RegLoadKeyW, <.hKey, .lpSubKey, .lpFile>, 'RegLoadKeyW', \ RegNotifyChangeKeyValue, <.hKey, .bWatchSubtree, .dwNotifyFilter, .hEvent, .fAsynchronus>, 'RegNotifyChangeKeyValue', \ RegOpenCurrentUser, <.samDesired, .phkResult>, 'RegOpenCurrentUser', \ RegOpenKeyA, <.hKey, .lpSubKey, .phkResult>, 'RegOpenKeyA', \ RegOpenKeyExA, <.hKey, .lpSubKey, .ulOptions, .samDesired, .phkResult>, 'RegOpenKeyExA', \ RegOpenKeyExW, <.hKey, .lpSubKey, .ulOptions, .samDesired, .phkResult>, 'RegOpenKeyExW', \ RegOpenKeyW, <.hKey, .lpSubKey, .phkResult>, 'RegOpenKeyW', \ RegOpenUserClassesRoot, <.hToken, .dwOptions, .samDesired, .phkResult>, 'RegOpenUserClassesRoot', \ RegOverridePredefKey, <.hKey, .hNewHKey>, 'RegOverridePredefKey', \ RegQueryInfoKeyA, <.hKey, .lpClass, .lpcbClass, .lpReserved, .lpcSubKeys, .lpcbMaxSubKeyLen, .lpcbMaxClassLen, .lpcValues, .lpcbMaxValueNameLen, \ .lpcbMaxValueLen, .lpcbSecurityDescriptor, .lpftLastWriteTime>, 'RegQueryInfoKeyA', \ RegQueryInfoKeyW, <.hKey, .lpClass, .lpcbClass, .lpReserved, .lpcSubKeys, .lpcbMaxSubKeyLen, .lpcbMaxClassLen, .lpcValues, .lpcbMaxValueNameLen, \ .lpcbMaxValueLen, .lpcbSecurityDescriptor, .lpftLastWriteTime>, 'RegQueryInfoKeyW', \ RegQueryMultipleValuesA, <.hKey, .val_list, .num_vals, .lpValueBuf, .ldwTotsize>, 'RegQueryMultipleValuesA', \ RegQueryMultipleValuesW, <.hKey, .val_list, .num_vals, .lpValueBuf, .ldwTotsize>, 'RegQueryMultipleValuesW', \ RegQueryValueA, <.hKey, .lpSubKey, .lpValue, .lpcbValue>, 'RegQueryValueA', \ RegQueryValueExA, <.hKey, .lpValueName, .lpReserved, .lpType, .lpData, .lpcbData>, 'RegQueryValueExA', \ RegQueryValueExW, <.hKey, .lpValueName, .lpReserved, .lpType, .lpData, .lpcbData>, 'RegQueryValueExW', \ RegQueryValueW, <.hKey, .lpSubKey, .lpValue, .lpcbValue>, 'RegQueryValueW', \ RegReplaceKeyA, <.hKey, .lpSubKey, .lpNewFile, .lpOldFile>, 'RegReplaceKeyA', \ RegReplaceKeyW, <.hKey, .lpSubKey, .lpNewFile, .lpOldFile>, 'RegReplaceKeyW', \ RegRestoreKeyA, <.hKey, .lpFile, .dwFlags>, 'RegRestoreKeyA', \ RegRestoreKeyW, <.hKey, .lpFile, .dwFlags>, 'RegRestoreKeyW', \ RegSaveKeyA, <.hKey, .lpFile, .lpSecurityAttributes>, 'RegSaveKeyA', \ RegSaveKeyExA, <NONE>, 'RegSaveKeyExA', \ RegSaveKeyExW, <NONE>, 'RegSaveKeyExW', \ RegSaveKeyW, <.hKey, .lpFile, .lpSecurityAttributes>, 'RegSaveKeyW', \ RegSetKeySecurity, <.hKey, .SecurityInformation, .pSecurityDescriptor>, 'RegSetKeySecurity', \ RegSetValueA, <.hKey, .lpSubKey, .dwType, .lpData, .cbData>, 'RegSetValueA', \ RegSetValueExA, <.hKey, .lpValueName, .Reserved, .dwType, .lpData, .cbData>, 'RegSetValueExA', \ RegSetValueExW, <.hKey, .lpValueName, .Reserved, .dwType, .lpData, .cbData>, 'RegSetValueExW', \ RegSetValueW, <.hKey, .lpSubKey, .dwType, .lpData, .cbData>, 'RegSetValueW', \ RegUnLoadKeyA, <.hKey, .lpSubKey>, 'RegUnLoadKeyA', \ RegUnLoadKeyW, <.hKey, .lpSubKey>, 'RegUnLoadKeyW', \ RegisterEventSourceA, <.lpUNCServerName, .lpSourceName>, 'RegisterEventSourceA', \ RegisterEventSourceW, <.lpUNCServerName, .lpSourceName>, 'RegisterEventSourceW', \ RegisterIdleTask, <NONE>, 'RegisterIdleTask', \ RegisterServiceCtrlHandlerA, <.lpServiceName, .lpHandlerProc>, 'RegisterServiceCtrlHandlerA', \ RegisterServiceCtrlHandlerExA, <.lpServiceName, .lpHandlerProc, .lpContext>, 'RegisterServiceCtrlHandlerExA', \ RegisterServiceCtrlHandlerExW, <.lpServiceName, .lpHandlerProc, .lpContext>, 'RegisterServiceCtrlHandlerExW', \ RegisterServiceCtrlHandlerW, <.lpServiceName, .lpHandlerProc>, 'RegisterServiceCtrlHandlerW', \ RegisterTraceGuidsA, <NONE>, 'RegisterTraceGuidsA', \ RegisterTraceGuidsW, <NONE>, 'RegisterTraceGuidsW', \ RemoveTraceCallback, <NONE>, 'RemoveTraceCallback', \ RemoveUsersFromEncryptedFile, <.lpFileName, .pHashes>, 'RemoveUsersFromEncryptedFile', \ ReportEventA, <.hEventLog, .wType, .wCategory, .dwEventID, .lpUserSid, .wNumStrings, .dwDataSize, .lpStrings, .lpRawData>, 'ReportEventA', \ ReportEventW, <.hEventLog, .wType, .wCategory, .dwEventID, .lpUserSid, .wNumStrings, .dwDataSize, .lpStrings, .lpRawData>, 'ReportEventW', \ RevertToSelf, <VOID>, 'RevertToSelf', \ SaferCloseLevel, <NONE>, 'SaferCloseLevel', \ SaferComputeTokenFromLevel, <NONE>, 'SaferComputeTokenFromLevel', \ SaferCreateLevel, <NONE>, 'SaferCreateLevel', \ SaferGetLevelInformation, <NONE>, 'SaferGetLevelInformation', \ SaferGetPolicyInformation, <NONE>, 'SaferGetPolicyInformation', \ SaferIdentifyLevel, <NONE>, 'SaferIdentifyLevel', \ SaferRecordEventLogEntry, <NONE>, 'SaferRecordEventLogEntry', \ SaferSetLevelInformation, <NONE>, 'SaferSetLevelInformation', \ SaferSetPolicyInformation, <NONE>, 'SaferSetPolicyInformation', \ SaferiChangeRegistryScope, <NONE>, 'SaferiChangeRegistryScope', \ SaferiCompareTokenLevels, <NONE>, 'SaferiCompareTokenLevels', \ SaferiIsExecutableFileType, <NONE>, 'SaferiIsExecutableFileType', \ SaferiPopulateDefaultsInRegistry, <NONE>, 'SaferiPopulateDefaultsInRegistry', \ SaferiRecordEventLogEntry, <NONE>, 'SaferiRecordEventLogEntry', \ SaferiReplaceProcessThreadTokens, <NONE>, 'SaferiReplaceProcessThreadTokens', \ SaferiSearchMatchingHashRules, <NONE>, 'SaferiSearchMatchingHashRules', \ SetAclInformation, <.pAcl, .pAclInformation, .nAclInformationLength, .dwAclInformationClass>, 'SetAclInformation', \ SetEntriesInAccessListA, <NONE>, 'SetEntriesInAccessListA', \ SetEntriesInAccessListW, <NONE>, 'SetEntriesInAccessListW', \ SetEntriesInAclA, <.cCountOfExplicitEntries, .pListOfExplicitEntries, .OldAcl, .NewAcl>, 'SetEntriesInAclA', \ SetEntriesInAclW, <.cCountOfExplicitEntries, .pListOfExplicitEntries, .OldAcl, .NewAcl>, 'SetEntriesInAclW', \ SetEntriesInAuditListA, <NONE>, 'SetEntriesInAuditListA', \ SetEntriesInAuditListW, <NONE>, 'SetEntriesInAuditListW', \ SetFileSecurityA, <.lpFileName, .SecurityInformation, .pSecurityDescriptor>, 'SetFileSecurityA', \ SetFileSecurityW, <.lpFileName, .SecurityInformation, .pSecurityDescriptor>, 'SetFileSecurityW', \ SetInformationCodeAuthzLevelW, <NONE>, 'SetInformationCodeAuthzLevelW', \ SetInformationCodeAuthzPolicyW, <NONE>, 'SetInformationCodeAuthzPolicyW', \ SetKernelObjectSecurity, <.Handle, .SecurityInformation, .SecurityDescriptor>, 'SetKernelObjectSecurity', \ SetNamedSecurityInfoA, <.pObjectName, .ObjectType, .SecurityInfo, .psidOwner, .psidGroup, .pDacl, .pSacl>, 'SetNamedSecurityInfoA', \ SetNamedSecurityInfoExA, <NONE>, 'SetNamedSecurityInfoExA', \ SetNamedSecurityInfoExW, <NONE>, 'SetNamedSecurityInfoExW', \ SetNamedSecurityInfoW, <.pObjectName, .ObjectType, .SecurityInfo, .psidOwner, .psidGroup, .pDacl, .pSacl>, 'SetNamedSecurityInfoW', \ SetPrivateObjectSecurity, <.SecurityInformation, .ModificationDescriptor, .ObjectsSecurityDescriptor, .GenericMapping, .Token, \ >, 'SetPrivateObjectSecurity', \ SetPrivateObjectSecurityEx, <.SecurityInformation, .ModificationDescriptor, .ObjectsSecurityDescriptor, .AutoInheritFlags, .GenericMapping, \ .Token>, 'SetPrivateObjectSecurityEx', \ SetSecurityDescriptorControl, <.pSecurityDescriptor, .ControlBitsOfInterest, .ControlBitsToSet>, 'SetSecurityDescriptorControl', \ SetSecurityDescriptorDacl, <.pSecurityDescriptor, .bDaclPresent, .pDacl, .bDaclDefaulted>, 'SetSecurityDescriptorDacl', \ SetSecurityDescriptorGroup, <.pSecurityDescriptor, .pGroup, .bGroupDefaulted>, 'SetSecurityDescriptorGroup', \ SetSecurityDescriptorOwner, <.pSecurityDescriptor, .pOwner, .bOwnerDefaulted>, 'SetSecurityDescriptorOwner', \ SetSecurityDescriptorRMControl, <.SecurityDescriptor, .RMControl>, 'SetSecurityDescriptorRMControl', \ SetSecurityDescriptorSacl, <.pSecurityDescriptor, .bSaclPresent, .pSacl, .bSaclDefaulted>, 'SetSecurityDescriptorSacl', \ SetSecurityInfo, <.handle, .ObjectType, .SecurityInfo, .psidOwner, .psidGroup, .pDacl, .pSacl>, 'SetSecurityInfo', \ SetSecurityInfoExA, <NONE>, 'SetSecurityInfoExA', \ SetSecurityInfoExW, <NONE>, 'SetSecurityInfoExW', \ SetServiceBits, <.hServiceStatus, .dwServiceBits, .bSetBitsOn, .bUpdateImmediately>, 'SetServiceBits', \ SetServiceObjectSecurity, <.hService, .dwSecurityInformation, .lpSecurityDescriptor>, 'SetServiceObjectSecurity', \ SetServiceStatus, <.hServiceStatus, .lpServiceStatus>, 'SetServiceStatus', \ SetThreadToken, <.Thread, .Token>, 'SetThreadToken', \ SetTokenInformation, <.TokenHandle, .TokenInformationClass, .TokenInformation, .TokenInformationLength>, 'SetTokenInformation', \ SetTraceCallback, <NONE>, 'SetTraceCallback', \ SetUserFileEncryptionKey, <.pEncryptionCertificate>, 'SetUserFileEncryptionKey', \ StartServiceA, <.hService, .dwNumServiceArgs, .lpServiceArgVectors>, 'StartServiceA', \ StartServiceCtrlDispatcherA, <.lpServiceStartTable>, 'StartServiceCtrlDispatcherA', \ StartServiceCtrlDispatcherW, <.lpServiceStartTable>, 'StartServiceCtrlDispatcherW', \ StartServiceW, <.hService, .dwNumServiceArgs, .lpServiceArgVectors>, 'StartServiceW', \ StartTraceA, <NONE>, 'StartTraceA', \ StartTraceW, <NONE>, 'StartTraceW', \ StopTraceA, <NONE>, 'StopTraceA', \ StopTraceW, <NONE>, 'StopTraceW', \ SynchronizeWindows31FilesAndWindowsNTRegistry, <NONE>, 'SynchronizeWindows31FilesAndWindowsNTRegistry', \ SystemFunction001, <NONE>, 'SystemFunction001', \ SystemFunction002, <NONE>, 'SystemFunction002', \ SystemFunction003, <NONE>, 'SystemFunction003', \ SystemFunction004, <NONE>, 'SystemFunction004', \ SystemFunction005, <NONE>, 'SystemFunction005', \ SystemFunction006, <NONE>, 'SystemFunction006', \ SystemFunction007, <NONE>, 'SystemFunction007', \ SystemFunction008, <NONE>, 'SystemFunction008', \ SystemFunction009, <NONE>, 'SystemFunction009', \ SystemFunction010, <NONE>, 'SystemFunction010', \ SystemFunction011, <NONE>, 'SystemFunction011', \ SystemFunction012, <NONE>, 'SystemFunction012', \ SystemFunction013, <NONE>, 'SystemFunction013', \ SystemFunction014, <NONE>, 'SystemFunction014', \ SystemFunction015, <NONE>, 'SystemFunction015', \ SystemFunction016, <NONE>, 'SystemFunction016', \ SystemFunction017, <NONE>, 'SystemFunction017', \ SystemFunction018, <NONE>, 'SystemFunction018', \ SystemFunction019, <NONE>, 'SystemFunction019', \ SystemFunction020, <NONE>, 'SystemFunction020', \ SystemFunction021, <NONE>, 'SystemFunction021', \ SystemFunction022, <NONE>, 'SystemFunction022', \ SystemFunction023, <NONE>, 'SystemFunction023', \ SystemFunction024, <NONE>, 'SystemFunction024', \ SystemFunction025, <NONE>, 'SystemFunction025', \ SystemFunction026, <NONE>, 'SystemFunction026', \ SystemFunction027, <NONE>, 'SystemFunction027', \ SystemFunction028, <NONE>, 'SystemFunction028', \ SystemFunction029, <NONE>, 'SystemFunction029', \ SystemFunction030, <NONE>, 'SystemFunction030', \ SystemFunction031, <NONE>, 'SystemFunction031', \ SystemFunction032, <NONE>, 'SystemFunction032', \ SystemFunction033, <NONE>, 'SystemFunction033', \ SystemFunction034, <NONE>, 'SystemFunction034', \ SystemFunction035, <NONE>, 'SystemFunction035', \ SystemFunction036, <NONE>, 'SystemFunction036', \ SystemFunction040, <NONE>, 'SystemFunction040', \ SystemFunction041, <NONE>, 'SystemFunction041', \ TraceEvent, <NONE>, 'TraceEvent', \ TraceEventInstance, <NONE>, 'TraceEventInstance', \ TraceMessage, <NONE>, 'TraceMessage', \ TraceMessageVa, <NONE>, 'TraceMessageVa', \ TreeResetNamedSecurityInfoA, <.pObjectName, .ObjectType, .SecurityInfo, .pOwner, .pGroup, .pDacl, .pSacl, .KeepExplicit, .fnProgress, \ .ProgressInvokeSetting, .Args>, 'TreeResetNamedSecurityInfoA', \ TreeResetNamedSecurityInfoW, <.pObjectName, .ObjectType, .SecurityInfo, .pOwner, .pGroup, .pDacl, .pSacl, .KeepExplicit, .fnProgress, \ .ProgressInvokeSetting, .Args>, 'TreeResetNamedSecurityInfoW', \ TrusteeAccessToObjectA, <NONE>, 'TrusteeAccessToObjectA', \ TrusteeAccessToObjectW, <NONE>, 'TrusteeAccessToObjectW', \ UninstallApplication, <NONE>, 'UninstallApplication', \ UnlockServiceDatabase, <.ScLock>, 'UnlockServiceDatabase', \ UnregisterIdleTask, <NONE>, 'UnregisterIdleTask', \ UnregisterTraceGuids, <NONE>, 'UnregisterTraceGuids', \ UpdateTraceA, <NONE>, 'UpdateTraceA', \ UpdateTraceW, <NONE>, 'UpdateTraceW', \ WdmWmiServiceMain, <NONE>, 'WdmWmiServiceMain', \ WmiCloseBlock, <NONE>, 'WmiCloseBlock', \ WmiCloseTraceWithCursor, <NONE>, 'WmiCloseTraceWithCursor', \ WmiConvertTimestamp, <NONE>, 'WmiConvertTimestamp', \ WmiDevInstToInstanceNameA, <NONE>, 'WmiDevInstToInstanceNameA', \ WmiDevInstToInstanceNameW, <NONE>, 'WmiDevInstToInstanceNameW', \ WmiEnumerateGuids, <NONE>, 'WmiEnumerateGuids', \ WmiExecuteMethodA, <NONE>, 'WmiExecuteMethodA', \ WmiExecuteMethodW, <NONE>, 'WmiExecuteMethodW', \ WmiFileHandleToInstanceNameA, <NONE>, 'WmiFileHandleToInstanceNameA', \ WmiFileHandleToInstanceNameW, <NONE>, 'WmiFileHandleToInstanceNameW', \ WmiFreeBuffer, <NONE>, 'WmiFreeBuffer', \ WmiGetFirstTraceOffset, <NONE>, 'WmiGetFirstTraceOffset', \ WmiGetNextEvent, <NONE>, 'WmiGetNextEvent', \ WmiGetTraceHeader, <NONE>, 'WmiGetTraceHeader', \ WmiMofEnumerateResourcesA, <NONE>, 'WmiMofEnumerateResourcesA', \ WmiMofEnumerateResourcesW, <NONE>, 'WmiMofEnumerateResourcesW', \ WmiNotificationRegistrationA, <NONE>, 'WmiNotificationRegistrationA', \ WmiNotificationRegistrationW, <NONE>, 'WmiNotificationRegistrationW', \ WmiOpenBlock, <NONE>, 'WmiOpenBlock', \ WmiOpenTraceWithCursor, <NONE>, 'WmiOpenTraceWithCursor', \ WmiParseTraceEvent, <NONE>, 'WmiParseTraceEvent', \ WmiQueryAllDataA, <NONE>, 'WmiQueryAllDataA', \ WmiQueryAllDataMultipleA, <NONE>, 'WmiQueryAllDataMultipleA', \ WmiQueryAllDataMultipleW, <NONE>, 'WmiQueryAllDataMultipleW', \ WmiQueryAllDataW, <NONE>, 'WmiQueryAllDataW', \ WmiQueryGuidInformation, <NONE>, 'WmiQueryGuidInformation', \ WmiQuerySingleInstanceA, <NONE>, 'WmiQuerySingleInstanceA', \ WmiQuerySingleInstanceMultipleA, <NONE>, 'WmiQuerySingleInstanceMultipleA', \ WmiQuerySingleInstanceMultipleW, <NONE>, 'WmiQuerySingleInstanceMultipleW', \ WmiQuerySingleInstanceW, <NONE>, 'WmiQuerySingleInstanceW', \ WmiReceiveNotificationsA, <NONE>, 'WmiReceiveNotificationsA', \ WmiReceiveNotificationsW, <NONE>, 'WmiReceiveNotificationsW', \ WmiSetSingleInstanceA, <NONE>, 'WmiSetSingleInstanceA', \ WmiSetSingleInstanceW, <NONE>, 'WmiSetSingleInstanceW', \ WmiSetSingleItemA, <NONE>, 'WmiSetSingleItemA', \ WmiSetSingleItemW, <NONE>, 'WmiSetSingleItemW', \ Wow64Win32ApiEntry, <NONE>, 'Wow64Win32ApiEntry', \ WriteEncryptedFileRaw, <.pfImportCallback, .pvCallbackContext, .pvContext>, 'WriteEncryptedFileRaw' |
Deleted freshlib/imports/Win32/allimports.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/advapi32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/comctl32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/comdlg32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/gdi32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/kernel32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/msimg32.inc.
|
| < < < < < < < |
Deleted freshlib/imports/Win32/api/odbc32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/ole32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/shell32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/sqlite3.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/user32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/imports/Win32/api/wsock32.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added freshlib/imports/Win32/comctl32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: comctl32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto comctl32, \ AddMRUStringW, <NONE>, 'AddMRUStringW', \ CreateMRUListW, <NONE>, 'CreateMRUListW', \ CreateMappedBitmap, <.hInstance, .idBitmap, .wFlags, .lpColorMap, .ByValumMaps>, 'CreateMappedBitmap', \ CreatePropertySheetPage, <.lpcpropsheetpagea>, 'CreatePropertySheetPage', \ CreatePropertySheetPageA, <.lpcpropsheetpagea>, 'CreatePropertySheetPageA', \ CreatePropertySheetPageW, <.lpcpropsheetpagea>, 'CreatePropertySheetPageW', \ CreateStatusWindow, <.dwStyle, .lpszText, .hWndParent, .wID>, 'CreateStatusWindow', \ CreateStatusWindowA, <.dwStyle, .lpszText, .hWndParent, .wID>, 'CreateStatusWindowA', \ CreateStatusWindowW, <.dwStyle, .lpszText, .hWndParent, .wID>, 'CreateStatusWindowW', \ CreateToolbar, <NONE>, 'CreateToolbar', \ CreateToolbarEx, <.hWndParent, .dwStyle, .wID, .nBitmaps, .hBMInst, .wBMID, .lpButtons, .iNumButtons, .dxButton, .dyButton, .dxBitmap, \ .dyBitmap, .uStructSize>, 'CreateToolbarEx', \ CreateUpDownControl, <.dwStyle, .x, .y, .cx, .cy, .hParent, .nID, .hInst, .hBuddy, .nUpper, .nLower, .nPos>, 'CreateUpDownControl', \ DPA_Create, <NONE>, 'DPA_Create', \ DPA_DeleteAllPtrs, <NONE>, 'DPA_DeleteAllPtrs', \ DPA_DeletePtr, <NONE>, 'DPA_DeletePtr', \ DPA_Destroy, <NONE>, 'DPA_Destroy', \ DPA_DestroyCallback, <NONE>, 'DPA_DestroyCallback', \ DPA_EnumCallback, <NONE>, 'DPA_EnumCallback', \ DPA_GetPtr, <NONE>, 'DPA_GetPtr', \ DPA_InsertPtr, <NONE>, 'DPA_InsertPtr', \ DPA_Search, <NONE>, 'DPA_Search', \ DPA_SetPtr, <NONE>, 'DPA_SetPtr', \ DPA_Sort, <NONE>, 'DPA_Sort', \ DSA_Create, <NONE>, 'DSA_Create', \ DSA_DeleteAllItems, <NONE>, 'DSA_DeleteAllItems', \ DSA_Destroy, <NONE>, 'DSA_Destroy', \ DSA_DestroyCallback, <NONE>, 'DSA_DestroyCallback', \ DSA_GetItemPtr, <NONE>, 'DSA_GetItemPtr', \ DSA_InsertItem, <NONE>, 'DSA_InsertItem', \ DefSubclassProc, <NONE>, 'DefSubclassProc', \ DestroyPropertySheetPage, <.hpropsheetpage>, 'DestroyPropertySheetPage', \ DrawInsert, <.handParent, .hLB, .nItem>, 'DrawInsert', \ DrawStatusText, <.hDC, .lprc, .pszText, .uFlags>, 'DrawStatusText', \ DrawStatusTextA, <.hDC, .lprc, .pszText, .uFlags>, 'DrawStatusTextA', \ DrawStatusTextW, <.hDC, .lprc, .pszText, .uFlags>, 'DrawStatusTextW', \ EnumMRUListW, <NONE>, 'EnumMRUListW', \ FlatSB_EnableScrollBar, <.hwnd, .ByValt, .uint>, 'FlatSB_EnableScrollBar', \ FlatSB_GetScrollInfo, <.hwnd, .code, .lpscrollinfo>, 'FlatSB_GetScrollInfo', \ FlatSB_GetScrollPos, <.hwnd, .code>, 'FlatSB_GetScrollPos', \ FlatSB_GetScrollProp, <.hwnd, .propIndex, .lpint>, 'FlatSB_GetScrollProp', \ FlatSB_GetScrollRange, <.hwnd, .code, .lpint>, 'FlatSB_GetScrollRange', \ FlatSB_SetScrollInfo, <.hwnd, .code, .lpscrollinfo, .fRedraw>, 'FlatSB_SetScrollInfo', \ FlatSB_SetScrollPos, <.hwnd, .code, .pos, .fRedraw>, 'FlatSB_SetScrollPos', \ FlatSB_SetScrollProp, <.hwnd, .index, .newValue, .bool>, 'FlatSB_SetScrollProp', \ FlatSB_SetScrollRange, <.hwnd, .code, .min, .max, .fRedraw>, 'FlatSB_SetScrollRange', \ FlatSB_ShowScrollBar, <.hwnd, .code, .bool>, 'FlatSB_ShowScrollBar', \ FreeMRUList, <NONE>, 'FreeMRUList', \ GetEffectiveClientRect, <.hWnd, .lprc, .lpInfo>, 'GetEffectiveClientRect', \ GetMUILanguage, <VOID>, 'GetMUILanguage', \ ImageList_Add, <.himl, .hbmImage, .hbmMask>, 'ImageList_Add', \ ImageList_AddIcon, <NONE>, 'ImageList_AddIcon', \ ImageList_AddMasked, <.himl, .hbmImage, .crMask>, 'ImageList_AddMasked', \ ImageList_BeginDrag, <.himlTrack, .iTrack, .dxHotspot, .dyHotspot>, 'ImageList_BeginDrag', \ ImageList_Copy, <.himlDst, .iDst, .himlSrc, .iSrc, .uFlags>, 'ImageList_Copy', \ ImageList_Create, <.cx, .cy, .flags, .cInitial, .cGrow>, 'ImageList_Create', \ ImageList_Destroy, <.himl>, 'ImageList_Destroy', \ ImageList_DragEnter, <.hwndLock, .x, .y>, 'ImageList_DragEnter', \ ImageList_DragLeave, <.hWndOwner>, 'ImageList_DragLeave', \ ImageList_DragMove, <.x, .y>, 'ImageList_DragMove', \ ImageList_DragShowNolock, <.fBoolean>, 'ImageList_DragShowNolock', \ ImageList_Draw, <.himl, .i, .hdcDst, .x, .y, .fStyle>, 'ImageList_Draw', \ ImageList_DrawEx, <.himl, .i, .hdcDst, .x, .y, .dx, .dy, .rgbBk, .rgbFg, .fStyle>, 'ImageList_DrawEx', \ ImageList_DrawIndirect, <.pimldp>, 'ImageList_DrawIndirect', \ ImageList_Duplicate, <.himl>, 'ImageList_Duplicate', \ ImageList_EndDrag, <VOID>, 'ImageList_EndDrag', \ ImageList_GetBkColor, <.himl>, 'ImageList_GetBkColor', \ ImageList_GetDragImage, <.ppt, .pptHotspot>, 'ImageList_GetDragImage', \ ImageList_GetFlags, <NONE>, 'ImageList_GetFlags', \ ImageList_GetIcon, <.himl, .i, .flags>, 'ImageList_GetIcon', \ ImageList_GetIconSize, <.himl, .cx, .cy>, 'ImageList_GetIconSize', \ ImageList_GetImageCount, <.himl>, 'ImageList_GetImageCount', \ ImageList_GetImageInfo, <.himl, .i, .pImageInfo>, 'ImageList_GetImageInfo', \ ImageList_GetImageRect, <NONE>, 'ImageList_GetImageRect', \ ImageList_LoadImage, <.hInst, .lpszbmp, .cx, .cGrow, .crMask, .uType, .uFlags>, 'ImageList_LoadImage', \ ImageList_LoadImageA, <.hInst, .lpszbmp, .cx, .cGrow, .crMask, .uType, .uFlags>, 'ImageList_LoadImageA', \ ImageList_LoadImageW, <.hInst, .lpszbmp, .cx, .cGrow, .crMask, .uType, .uFlags>, 'ImageList_LoadImageW', \ ImageList_Merge, <.himl1, .i1, .himl2, .i2, .dx, .dy>, 'ImageList_Merge', \ ImageList_Read, <.pstm>, 'ImageList_Read', \ ImageList_Remove, <.himl, .i>, 'ImageList_Remove', \ ImageList_Replace, <.himl, .i, .hbmImage, .hbmMask>, 'ImageList_Replace', \ ImageList_ReplaceIcon, <.himl, .i, .hicon>, 'ImageList_ReplaceIcon', \ ImageList_SetBkColor, <.himl, .clrBk>, 'ImageList_SetBkColor', \ ImageList_SetDragCursorImage, <.himlDrag, .iDrag, .dxHotspot, .dyHotspot>, 'ImageList_SetDragCursorImage', \ ImageList_SetFilter, <NONE>, 'ImageList_SetFilter', \ ImageList_SetFlags, <NONE>, 'ImageList_SetFlags', \ ImageList_SetIconSize, <.himl, .cx, .cy>, 'ImageList_SetIconSize', \ ImageList_SetImageCount, <.himl, .uNewCount>, 'ImageList_SetImageCount', \ ImageList_SetOverlayImage, <.himl, .iImage, .iOverlay>, 'ImageList_SetOverlayImage', \ ImageList_Write, <.himl, .pstm>, 'ImageList_Write', \ InitCommonControls, <VOID>, 'InitCommonControls', \ InitCommonControlsEx, <.pIcce>, 'InitCommonControlsEx', \ InitMUILanguage, <.uiLang>, 'InitMUILanguage', \ InitializeFlatSB, <.hwnd>, 'InitializeFlatSB', \ LBItemFromPt, <.hLB, .pt, .bAutoScroll>, 'LBItemFromPt', \ MakeDragList, <.hLB>, 'MakeDragList', \ MenuHelp, <.uMsg, .wParam, .lParam, .hMainMenu, .hInst, .hwndStatus, .lpwIDs>, 'MenuHelp', \ PropertySheet, <.lpcpropsheetheadera>, 'PropertySheet', \ PropertySheetA, <.lpcpropsheetheadera>, 'PropertySheetA', \ PropertySheetW, <.lpcpropsheetheadera>, 'PropertySheetW', \ RemoveWindowSubclass, <NONE>, 'RemoveWindowSubclass', \ SetWindowSubclass, <NONE>, 'SetWindowSubclass', \ ShowHideMenuCtl, <.hWnd, .uFlags, .lpInfo>, 'ShowHideMenuCtl', \ Str_SetPtrW, <NONE>, 'Str_SetPtrW', \ UninitializeFlatSB, <.hwnd>, 'UninitializeFlatSB', \ _TrackMouseEvent, <NONE>, '_TrackMouseEvent' |
Added freshlib/imports/Win32/comdlg32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: comdlg32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto comdlg32, \ ChooseColorA, <.pChoosecolor>, 'ChooseColorA', \ ChooseColorW, <.pChoosecolor>, 'ChooseColorW', \ ChooseFontA, <.pChoosefont>, 'ChooseFontA', \ ChooseFontW, <.pChoosefont>, 'ChooseFontW', \ CommDlgExtendedError, <VOID>, 'CommDlgExtendedError', \ FindTextA, <.pFindreplace>, 'FindTextA', \ FindTextW, <.pFindreplace>, 'FindTextW', \ GetFileTitleA, <.lpszFile, .lpszTitle, .cbBuf>, 'GetFileTitleA', \ GetFileTitleW, <.lpszFile, .lpszTitle, .cbBuf>, 'GetFileTitleW', \ GetOpenFileNameA, <.pOpenfilename>, 'GetOpenFileNameA', \ GetOpenFileNameW, <.pOpenfilename>, 'GetOpenFileNameW', \ GetSaveFileNameA, <.pOpenfilename>, 'GetSaveFileNameA', \ GetSaveFileNameW, <.pOpenfilename>, 'GetSaveFileNameW', \ LoadAlterBitmap, <NONE>, 'LoadAlterBitmap', \ PageSetupDlgA, <.pPagesetupdlg>, 'PageSetupDlgA', \ PageSetupDlgW, <.pPagesetupdlg>, 'PageSetupDlgW', \ PrintDlgA, <.pPrintdlg>, 'PrintDlgA', \ PrintDlgExA, <.TLPPRINTDLGEXA>, 'PrintDlgExA', \ PrintDlgExW, <.TLPPRINTDLGEXA>, 'PrintDlgExW', \ PrintDlgW, <.pPrintdlg>, 'PrintDlgW', \ ReplaceTextA, <.pFindreplace>, 'ReplaceTextA', \ ReplaceTextW, <.pFindreplace>, 'ReplaceTextW', \ Ssync_ANSI_UNICODE_Struct_For_WOW, <NONE>, 'Ssync_ANSI_UNICODE_Struct_For_WOW', \ WantArrows, <NONE>, 'WantArrows', \ dwLBSubclass, <NONE>, 'dwLBSubclass', \ dwOKSubclass, <NONE>, 'dwOKSubclass' |
Added freshlib/imports/Win32/crtdll.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: crtdll.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto crtdll, \ _CIacos, <NONE>, '_CIacos', \ _CIasin, <NONE>, '_CIasin', \ _CIatan, <NONE>, '_CIatan', \ _CIatan2, <NONE>, '_CIatan2', \ _CIcos, <NONE>, '_CIcos', \ _CIcosh, <NONE>, '_CIcosh', \ _CIexp, <NONE>, '_CIexp', \ _CIfmod, <NONE>, '_CIfmod', \ _CIlog, <NONE>, '_CIlog', \ _CIlog10, <NONE>, '_CIlog10', \ _CIpow, <NONE>, '_CIpow', \ _CIsin, <NONE>, '_CIsin', \ _CIsinh, <NONE>, '_CIsinh', \ _CIsqrt, <NONE>, '_CIsqrt', \ _CItan, <NONE>, '_CItan', \ _CItanh, <NONE>, '_CItanh', \ _HUGE_dll, <NONE>, '_HUGE_dll', \ _XcptFilter, <NONE>, '_XcptFilter', \ __GetMainArgs, <NONE>, '__GetMainArgs', \ __argc_dll, <NONE>, '__argc_dll', \ __argv_dll, <NONE>, '__argv_dll', \ __dllonexit, <NONE>, '__dllonexit', \ __doserrno, <NONE>, '__doserrno', \ __fpecode, <NONE>, '__fpecode', \ __isascii, <NONE>, '__isascii', \ __iscsym, <NONE>, '__iscsym', \ __iscsymf, <NONE>, '__iscsymf', \ __mb_cur_max_dll, <NONE>, '__mb_cur_max_dll', \ __pxcptinfoptrs, <NONE>, '__pxcptinfoptrs', \ __threadhandle, <NONE>, '__threadhandle', \ __threadid, <NONE>, '__threadid', \ __toascii, <NONE>, '__toascii', \ _abnormal_termination, <NONE>, '_abnormal_termination', \ _access, <NONE>, '_access', \ _acmdln_dll, <NONE>, '_acmdln_dll', \ _aexit_rtn_dll, <NONE>, '_aexit_rtn_dll', \ _amsg_exit, <NONE>, '_amsg_exit', \ _assert, <NONE>, '_assert', \ _basemajor_dll, <NONE>, '_basemajor_dll', \ _baseminor_dll, <NONE>, '_baseminor_dll', \ _baseversion_dll, <NONE>, '_baseversion_dll', \ _beep, <NONE>, '_beep', \ _beginthread, <NONE>, '_beginthread', \ _c_exit, <NONE>, '_c_exit', \ _cabs, <NONE>, '_cabs', \ _cexit, <NONE>, '_cexit', \ _cgets, <NONE>, '_cgets', \ _chdir, <NONE>, '_chdir', \ _chdrive, <NONE>, '_chdrive', \ _chgsign, <NONE>, '_chgsign', \ _chmod, <NONE>, '_chmod', \ _chsize, <NONE>, '_chsize', \ _clearfp, <NONE>, '_clearfp', \ _commit, <NONE>, '_commit', \ _commode_dll, <NONE>, '_commode_dll', \ _control87, <NONE>, '_control87', \ _controlfp, <NONE>, '_controlfp', \ _copysign, <NONE>, '_copysign', \ _cprintf, <NONE>, '_cprintf', \ _cpumode_dll, <NONE>, '_cpumode_dll', \ _cputs, <NONE>, '_cputs', \ _cscanf, <NONE>, '_cscanf', \ _ctype, <NONE>, '_ctype', \ _cwait, <NONE>, '_cwait', \ _daylight_dll, <NONE>, '_daylight_dll', \ _dup, <NONE>, '_dup', \ _dup2, <NONE>, '_dup2', \ _ecvt, <NONE>, '_ecvt', \ _endthread, <NONE>, '_endthread', \ _environ_dll, <NONE>, '_environ_dll', \ _eof, <NONE>, '_eof', \ _errno, <NONE>, '_errno', \ _except_handler2, <NONE>, '_except_handler2', \ _execl, <NONE>, '_execl', \ _execle, <NONE>, '_execle', \ _execlp, <NONE>, '_execlp', \ _execlpe, <NONE>, '_execlpe', \ _execv, <NONE>, '_execv', \ _execve, <NONE>, '_execve', \ _execvp, <NONE>, '_execvp', \ _execvpe, <NONE>, '_execvpe', \ _exit, <NONE>, '_exit', \ _expand, <NONE>, '_expand', \ _fcloseall, <NONE>, '_fcloseall', \ _fcvt, <NONE>, '_fcvt', \ _fdopen, <NONE>, '_fdopen', \ _fgetchar, <NONE>, '_fgetchar', \ _fgetwchar, <NONE>, '_fgetwchar', \ _filbuf, <NONE>, '_filbuf', \ _fileinfo_dll, <NONE>, '_fileinfo_dll', \ _filelength, <NONE>, '_filelength', \ _fileno, <NONE>, '_fileno', \ _findclose, <NONE>, '_findclose', \ _findfirst, <NONE>, '_findfirst', \ _findnext, <NONE>, '_findnext', \ _finite, <NONE>, '_finite', \ _flsbuf, <NONE>, '_flsbuf', \ _flushall, <NONE>, '_flushall', \ _fmode_dll, <NONE>, '_fmode_dll', \ _fpclass, <NONE>, '_fpclass', \ _fpieee_flt, <NONE>, '_fpieee_flt', \ _fpreset, <NONE>, '_fpreset', \ _fputchar, <NONE>, '_fputchar', \ _fputwchar, <NONE>, '_fputwchar', \ _fsopen, <NONE>, '_fsopen', \ _fstat, <NONE>, '_fstat', \ _ftime, <NONE>, '_ftime', \ _ftol, <NONE>, '_ftol', \ _fullpath, <NONE>, '_fullpath', \ _futime, <NONE>, '_futime', \ _gcvt, <NONE>, '_gcvt', \ _get_osfhandle, <NONE>, '_get_osfhandle', \ _getch, <NONE>, '_getch', \ _getche, <NONE>, '_getche', \ _getcwd, <NONE>, '_getcwd', \ _getdcwd, <NONE>, '_getdcwd', \ _getdiskfree, <NONE>, '_getdiskfree', \ _getdllprocaddr, <NONE>, '_getdllprocaddr', \ _getdrive, <NONE>, '_getdrive', \ _getdrives, <NONE>, '_getdrives', \ _getpid, <NONE>, '_getpid', \ _getsystime, <NONE>, '_getsystime', \ _getw, <NONE>, '_getw', \ _global_unwind2, <NONE>, '_global_unwind2', \ _heapchk, <NONE>, '_heapchk', \ _heapmin, <NONE>, '_heapmin', \ _heapset, <NONE>, '_heapset', \ _heapwalk, <NONE>, '_heapwalk', \ _hypot, <NONE>, '_hypot', \ _initterm, <NONE>, '_initterm', \ _iob, <NONE>, '_iob', \ _isatty, <NONE>, '_isatty', \ _isctype, <NONE>, '_isctype', \ _ismbbalnum, <NONE>, '_ismbbalnum', \ _ismbbalpha, <NONE>, '_ismbbalpha', \ _ismbbgraph, <NONE>, '_ismbbgraph', \ _ismbbkalnum, <NONE>, '_ismbbkalnum', \ _ismbbkana, <NONE>, '_ismbbkana', \ _ismbbkpunct, <NONE>, '_ismbbkpunct', \ _ismbblead, <NONE>, '_ismbblead', \ _ismbbprint, <NONE>, '_ismbbprint', \ _ismbbpunct, <NONE>, '_ismbbpunct', \ _ismbbtrail, <NONE>, '_ismbbtrail', \ _ismbcalpha, <NONE>, '_ismbcalpha', \ _ismbcdigit, <NONE>, '_ismbcdigit', \ _ismbchira, <NONE>, '_ismbchira', \ _ismbckata, <NONE>, '_ismbckata', \ _ismbcl0, <NONE>, '_ismbcl0', \ _ismbcl1, <NONE>, '_ismbcl1', \ _ismbcl2, <NONE>, '_ismbcl2', \ _ismbclegal, <NONE>, '_ismbclegal', \ _ismbclower, <NONE>, '_ismbclower', \ _ismbcprint, <NONE>, '_ismbcprint', \ _ismbcspace, <NONE>, '_ismbcspace', \ _ismbcsymbol, <NONE>, '_ismbcsymbol', \ _ismbcupper, <NONE>, '_ismbcupper', \ _ismbslead, <NONE>, '_ismbslead', \ _ismbstrail, <NONE>, '_ismbstrail', \ _isnan, <NONE>, '_isnan', \ _itoa, <NONE>, '_itoa', \ _itow, <NONE>, '_itow', \ _j0, <NONE>, '_j0', \ _j1, <NONE>, '_j1', \ _jn, <NONE>, '_jn', \ _kbhit, <NONE>, '_kbhit', \ _lfind, <NONE>, '_lfind', \ _loaddll, <NONE>, '_loaddll', \ _local_unwind2, <NONE>, '_local_unwind2', \ _locking, <NONE>, '_locking', \ _logb, <NONE>, '_logb', \ _lrotl, <NONE>, '_lrotl', \ _lrotr, <NONE>, '_lrotr', \ _lsearch, <NONE>, '_lsearch', \ _ltoa, <NONE>, '_ltoa', \ _ltow, <NONE>, '_ltow', \ _makepath, <NONE>, '_makepath', \ _matherr, <NONE>, '_matherr', \ _mbbtombc, <NONE>, '_mbbtombc', \ _mbbtype, <NONE>, '_mbbtype', \ _mbccpy, <NONE>, '_mbccpy', \ _mbcjistojms, <NONE>, '_mbcjistojms', \ _mbcjmstojis, <NONE>, '_mbcjmstojis', \ _mbclen, <NONE>, '_mbclen', \ _mbctohira, <NONE>, '_mbctohira', \ _mbctokata, <NONE>, '_mbctokata', \ _mbctolower, <NONE>, '_mbctolower', \ _mbctombb, <NONE>, '_mbctombb', \ _mbctoupper, <NONE>, '_mbctoupper', \ _mbctype, <NONE>, '_mbctype', \ _mbsbtype, <NONE>, '_mbsbtype', \ _mbscat, <NONE>, '_mbscat', \ _mbschr, <NONE>, '_mbschr', \ _mbscmp, <NONE>, '_mbscmp', \ _mbscpy, <NONE>, '_mbscpy', \ _mbscspn, <NONE>, '_mbscspn', \ _mbsdec, <NONE>, '_mbsdec', \ _mbsdup, <NONE>, '_mbsdup', \ _mbsicmp, <NONE>, '_mbsicmp', \ _mbsinc, <NONE>, '_mbsinc', \ _mbslen, <NONE>, '_mbslen', \ _mbslwr, <NONE>, '_mbslwr', \ _mbsnbcat, <NONE>, '_mbsnbcat', \ _mbsnbcmp, <NONE>, '_mbsnbcmp', \ _mbsnbcnt, <NONE>, '_mbsnbcnt', \ _mbsnbcpy, <NONE>, '_mbsnbcpy', \ _mbsnbicmp, <NONE>, '_mbsnbicmp', \ _mbsnbset, <NONE>, '_mbsnbset', \ _mbsncat, <NONE>, '_mbsncat', \ _mbsnccnt, <NONE>, '_mbsnccnt', \ _mbsncmp, <NONE>, '_mbsncmp', \ _mbsncpy, <NONE>, '_mbsncpy', \ _mbsnextc, <NONE>, '_mbsnextc', \ _mbsnicmp, <NONE>, '_mbsnicmp', \ _mbsninc, <NONE>, '_mbsninc', \ _mbsnset, <NONE>, '_mbsnset', \ _mbspbrk, <NONE>, '_mbspbrk', \ _mbsrchr, <NONE>, '_mbsrchr', \ _mbsrev, <NONE>, '_mbsrev', \ _mbsset, <NONE>, '_mbsset', \ _mbsspn, <NONE>, '_mbsspn', \ _mbsspnp, <NONE>, '_mbsspnp', \ _mbsstr, <NONE>, '_mbsstr', \ _mbstok, <NONE>, '_mbstok', \ _mbstrlen, <NONE>, '_mbstrlen', \ _mbsupr, <NONE>, '_mbsupr', \ _memccpy, <NONE>, '_memccpy', \ _memicmp, <NONE>, '_memicmp', \ _mkdir, <NONE>, '_mkdir', \ _mktemp, <NONE>, '_mktemp', \ _msize, <NONE>, '_msize', \ _nextafter, <NONE>, '_nextafter', \ _onexit, <NONE>, '_onexit', \ _open_osfhandle, <NONE>, '_open_osfhandle', \ _osmajor_dll, <NONE>, '_osmajor_dll', \ _osminor_dll, <NONE>, '_osminor_dll', \ _osmode_dll, <NONE>, '_osmode_dll', \ _osver_dll, <NONE>, '_osver_dll', \ _osversion_dll, <NONE>, '_osversion_dll', \ _pclose, <NONE>, '_pclose', \ _pctype_dll, <NONE>, '_pctype_dll', \ _pgmptr_dll, <NONE>, '_pgmptr_dll', \ _pipe, <NONE>, '_pipe', \ _popen, <NONE>, '_popen', \ _purecall, <NONE>, '_purecall', \ _putch, <NONE>, '_putch', \ _putenv, <NONE>, '_putenv', \ _putw, <NONE>, '_putw', \ _pwctype_dll, <NONE>, '_pwctype_dll', \ _rmdir, <NONE>, '_rmdir', \ _rmtmp, <NONE>, '_rmtmp', \ _rotl, <NONE>, '_rotl', \ _rotr, <NONE>, '_rotr', \ _scalb, <NONE>, '_scalb', \ _searchenv, <NONE>, '_searchenv', \ _seterrormode, <NONE>, '_seterrormode', \ _setjmp, <NONE>, '_setjmp', \ _setmode, <NONE>, '_setmode', \ _setsystime, <NONE>, '_setsystime', \ _sleep, <NONE>, '_sleep', \ _snprintf, <NONE>, '_snprintf', \ _snwprintf, <NONE>, '_snwprintf', \ _sopen, <NONE>, '_sopen', \ _spawnl, <NONE>, '_spawnl', \ _spawnle, <NONE>, '_spawnle', \ _spawnlp, <NONE>, '_spawnlp', \ _spawnlpe, <NONE>, '_spawnlpe', \ _spawnv, <NONE>, '_spawnv', \ _spawnve, <NONE>, '_spawnve', \ _spawnvp, <NONE>, '_spawnvp', \ _spawnvpe, <NONE>, '_spawnvpe', \ _splitpath, <NONE>, '_splitpath', \ _stat, <NONE>, '_stat', \ _statusfp, <NONE>, '_statusfp', \ _strcmpi, <NONE>, '_strcmpi', \ _strdate, <NONE>, '_strdate', \ _strdec, <NONE>, '_strdec', \ _strdup, <NONE>, '_strdup', \ _strerror, <NONE>, '_strerror', \ _stricmp, <NONE>, '_stricmp', \ _stricoll, <NONE>, '_stricoll', \ _strinc, <NONE>, '_strinc', \ _strlwr, <NONE>, '_strlwr', \ _strncnt, <NONE>, '_strncnt', \ _strnextc, <NONE>, '_strnextc', \ _strnicmp, <NONE>, '_strnicmp', \ _strninc, <NONE>, '_strninc', \ _strnset, <NONE>, '_strnset', \ _strrev, <NONE>, '_strrev', \ _strset, <NONE>, '_strset', \ _strspnp, <NONE>, '_strspnp', \ _strtime, <NONE>, '_strtime', \ _strupr, <NONE>, '_strupr', \ _swab, <NONE>, '_swab', \ _sys_errlist, <NONE>, '_sys_errlist', \ _sys_nerr_dll, <NONE>, '_sys_nerr_dll', \ _tell, <NONE>, '_tell', \ _tempnam, <NONE>, '_tempnam', \ _timezone_dll, <NONE>, '_timezone_dll', \ _tolower, <NONE>, '_tolower', \ _toupper, <NONE>, '_toupper', \ _tzname, <NONE>, '_tzname', \ _tzset, <NONE>, '_tzset', \ _ultoa, <NONE>, '_ultoa', \ _ultow, <NONE>, '_ultow', \ _umask, <NONE>, '_umask', \ _ungetch, <NONE>, '_ungetch', \ _unlink, <NONE>, '_unlink', \ _unloaddll, <NONE>, '_unloaddll', \ _utime, <NONE>, '_utime', \ _vsnprintf, <NONE>, '_vsnprintf', \ _vsnwprintf, <NONE>, '_vsnwprintf', \ _wcsdup, <NONE>, '_wcsdup', \ _wcsicmp, <NONE>, '_wcsicmp', \ _wcsicoll, <NONE>, '_wcsicoll', \ _wcslwr, <NONE>, '_wcslwr', \ _wcsnicmp, <NONE>, '_wcsnicmp', \ _wcsnset, <NONE>, '_wcsnset', \ _wcsrev, <NONE>, '_wcsrev', \ _wcsset, <NONE>, '_wcsset', \ _wcsupr, <NONE>, '_wcsupr', \ _winmajor_dll, <NONE>, '_winmajor_dll', \ _winminor_dll, <NONE>, '_winminor_dll', \ _winver_dll, <NONE>, '_winver_dll', \ _wtoi, <NONE>, '_wtoi', \ _wtol, <NONE>, '_wtol', \ _y0, <NONE>, '_y0', \ _y1, <NONE>, '_y1', \ _yn, <NONE>, '_yn', \ abort, <NONE>, 'abort', \ abs, <NONE>, 'abs', \ acos, <NONE>, 'acos', \ asctime, <NONE>, 'asctime', \ asin, <NONE>, 'asin', \ atan, <NONE>, 'atan', \ atan2, <NONE>, 'atan2', \ atexit, <NONE>, 'atexit', \ atof, <NONE>, 'atof', \ atoi, <NONE>, 'atoi', \ atol, <NONE>, 'atol', \ bsearch, <NONE>, 'bsearch', \ calloc, <NONE>, 'calloc', \ ceil, <NONE>, 'ceil', \ clearerr, <NONE>, 'clearerr', \ clock, <NONE>, 'clock', \ cos, <NONE>, 'cos', \ cosh, <NONE>, 'cosh', \ ctime, <NONE>, 'ctime', \ difftime, <NONE>, 'difftime', \ div, <NONE>, 'div', \ exit, <NONE>, 'exit', \ exp, <NONE>, 'exp', \ fabs, <NONE>, 'fabs', \ fclose, <NONE>, 'fclose', \ feof, <NONE>, 'feof', \ ferror, <NONE>, 'ferror', \ fflush, <NONE>, 'fflush', \ fgetc, <NONE>, 'fgetc', \ fgetpos, <NONE>, 'fgetpos', \ fgets, <NONE>, 'fgets', \ fgetwc, <NONE>, 'fgetwc', \ floor, <NONE>, 'floor', \ fmod, <NONE>, 'fmod', \ fopen, <NONE>, 'fopen', \ fprintf, <NONE>, 'fprintf', \ fputc, <NONE>, 'fputc', \ fputs, <NONE>, 'fputs', \ fputwc, <NONE>, 'fputwc', \ fread, <NONE>, 'fread', \ free, <.TM_aKey>, 'free', \ freopen, <NONE>, 'freopen', \ frexp, <NONE>, 'frexp', \ fscanf, <NONE>, 'fscanf', \ fseek, <NONE>, 'fseek', \ fsetpos, <NONE>, 'fsetpos', \ ftell, <NONE>, 'ftell', \ fwprintf, <NONE>, 'fwprintf', \ fwrite, <NONE>, 'fwrite', \ fwscanf, <NONE>, 'fwscanf', \ getc, <NONE>, 'getc', \ getchar, <NONE>, 'getchar', \ getenv, <NONE>, 'getenv', \ gets, <NONE>, 'gets', \ gmtime, <NONE>, 'gmtime', \ hread, <.hFile, .lpBuffer, .lBytes>, 'hread', \ hwrite, <.hFile, .lpBuffer, .lBytes>, 'hwrite', \ is_wctype, <NONE>, 'is_wctype', \ isalnum, <NONE>, 'isalnum', \ isalpha, <NONE>, 'isalpha', \ iscntrl, <NONE>, 'iscntrl', \ isdigit, <NONE>, 'isdigit', \ isgraph, <NONE>, 'isgraph', \ isleadbyte, <NONE>, 'isleadbyte', \ islower, <NONE>, 'islower', \ isprint, <NONE>, 'isprint', \ ispunct, <NONE>, 'ispunct', \ isspace, <NONE>, 'isspace', \ isupper, <NONE>, 'isupper', \ iswalnum, <NONE>, 'iswalnum', \ iswalpha, <NONE>, 'iswalpha', \ iswascii, <NONE>, 'iswascii', \ iswcntrl, <NONE>, 'iswcntrl', \ iswctype, <NONE>, 'iswctype', \ iswdigit, <NONE>, 'iswdigit', \ iswgraph, <NONE>, 'iswgraph', \ iswlower, <NONE>, 'iswlower', \ iswprint, <NONE>, 'iswprint', \ iswpunct, <NONE>, 'iswpunct', \ iswspace, <NONE>, 'iswspace', \ iswupper, <NONE>, 'iswupper', \ iswxdigit, <NONE>, 'iswxdigit', \ isxdigit, <NONE>, 'isxdigit', \ labs, <NONE>, 'labs', \ lclose, <.hFile>, 'lclose', \ lcreat, <.lpPathName, .iAttribute>, 'lcreat', \ ldexp, <NONE>, 'ldexp', \ ldiv, <NONE>, 'ldiv', \ llseek, <.hFile, .lOffset, .iOrigin>, 'llseek', \ localeconv, <NONE>, 'localeconv', \ localtime, <NONE>, 'localtime', \ log, <NONE>, 'log', \ log10, <NONE>, 'log10', \ longjmp, <NONE>, 'longjmp', \ lopen, <.lpPathName, .iReadWrite>, 'lopen', \ malloc, <NONE>, 'malloc', \ mblen, <NONE>, 'mblen', \ mbstowcs, <NONE>, 'mbstowcs', \ mbtowc, <NONE>, 'mbtowc', \ memchr, <NONE>, 'memchr', \ memcmp, <NONE>, 'memcmp', \ memcpy, <NONE>, 'memcpy', \ memmove, <.pVoid, .FunctionCall>, 'memmove', \ memset, <NONE>, 'memset', \ mktime, <NONE>, 'mktime', \ modf, <NONE>, 'modf', \ perror, <NONE>, 'perror', \ pow, <NONE>, 'pow', \ printf, <NONE>, 'printf', \ putc, <NONE>, 'putc', \ putchar, <NONE>, 'putchar', \ puts, <NONE>, 'puts', \ qsort, <NONE>, 'qsort', \ raise, <NONE>, 'raise', \ rand, <NONE>, 'rand', \ realloc, <NONE>, 'realloc', \ remove, <NONE>, 'remove', \ rename, <NONE>, 'rename', \ rewind, <NONE>, 'rewind', \ scanf, <NONE>, 'scanf', \ setbuf, <NONE>, 'setbuf', \ setlocale, <NONE>, 'setlocale', \ setvbuf, <NONE>, 'setvbuf', \ signal, <NONE>, 'signal', \ sin, <NONE>, 'sin', \ sinh, <NONE>, 'sinh', \ sprintf, <NONE>, 'sprintf', \ sqrt, <NONE>, 'sqrt', \ srand, <NONE>, 'srand', \ sscanf, <NONE>, 'sscanf', \ strcat, <NONE>, 'strcat', \ strchr, <.lpStart, .wMatch>, 'strchr', \ strcmp, <NONE>, 'strcmp', \ strcoll, <NONE>, 'strcoll', \ strcpy, <NONE>, 'strcpy', \ strcspn, <.lpStr, .lpSet>, 'strcspn', \ strerror, <NONE>, 'strerror', \ strftime, <NONE>, 'strftime', \ strlen, <NONE>, 'strlen', \ strncat, <.psz1, .psz2, .cchMax>, 'strncat', \ strncmp, <NONE>, 'strncmp', \ strncpy, <NONE>, 'strncpy', \ strpbrk, <.psz, .pszSet>, 'strpbrk', \ strrchr, <.lpStart, .lpEnd, .wMatch>, 'strrchr', \ strspn, <.psz, .pszSet>, 'strspn', \ strstr, <.lpFirst, .lpSrch>, 'strstr', \ strtod, <NONE>, 'strtod', \ strtok, <NONE>, 'strtok', \ strtol, <NONE>, 'strtol', \ strtoul, <NONE>, 'strtoul', \ strxfrm, <NONE>, 'strxfrm', \ swprintf, <NONE>, 'swprintf', \ swscanf, <NONE>, 'swscanf', \ system, <NONE>, 'system', \ tan, <NONE>, 'tan', \ tanh, <NONE>, 'tanh', \ time, <NONE>, 'time', \ tmpfile, <NONE>, 'tmpfile', \ tmpnam, <NONE>, 'tmpnam', \ tolower, <NONE>, 'tolower', \ toupper, <NONE>, 'toupper', \ towlower, <NONE>, 'towlower', \ towupper, <NONE>, 'towupper', \ ungetc, <NONE>, 'ungetc', \ ungetwc, <NONE>, 'ungetwc', \ vfprintf, <NONE>, 'vfprintf', \ vfwprintf, <NONE>, 'vfwprintf', \ vprintf, <NONE>, 'vprintf', \ vsprintf, <NONE>, 'vsprintf', \ vswprintf, <NONE>, 'vswprintf', \ vwprintf, <NONE>, 'vwprintf', \ wcscat, <NONE>, 'wcscat', \ wcschr, <NONE>, 'wcschr', \ wcscmp, <NONE>, 'wcscmp', \ wcscoll, <NONE>, 'wcscoll', \ wcscpy, <NONE>, 'wcscpy', \ wcscspn, <NONE>, 'wcscspn', \ wcsftime, <NONE>, 'wcsftime', \ wcslen, <NONE>, 'wcslen', \ wcsncat, <NONE>, 'wcsncat', \ wcsncmp, <NONE>, 'wcsncmp', \ wcsncpy, <NONE>, 'wcsncpy', \ wcspbrk, <NONE>, 'wcspbrk', \ wcsrchr, <NONE>, 'wcsrchr', \ wcsspn, <NONE>, 'wcsspn', \ wcsstr, <NONE>, 'wcsstr', \ wcstod, <NONE>, 'wcstod', \ wcstok, <NONE>, 'wcstok', \ wcstol, <NONE>, 'wcstol', \ wcstombs, <NONE>, 'wcstombs', \ wcstoul, <NONE>, 'wcstoul', \ wcsxfrm, <NONE>, 'wcsxfrm', \ wctomb, <NONE>, 'wctomb', \ wprintf, <NONE>, 'wprintf', \ wscanf, <NONE>, 'wscanf' |
Added freshlib/imports/Win32/gdi32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: gdi32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto gdi32, \ AbortDoc, <.hdc>, 'AbortDoc', \ AbortPath, <.hdc>, 'AbortPath', \ AddFontMemResourceEx, <.pvoid, .dword, .pDword>, 'AddFontMemResourceEx', \ AddFontResourceA, <.lpFileName>, 'AddFontResourceA', \ AddFontResourceExA, <.lpcstr, .flags, .reserved>, 'AddFontResourceExA', \ AddFontResourceExW, <.lpcstr, .flags, .reserved>, 'AddFontResourceExW', \ AddFontResourceTracking, <NONE>, 'AddFontResourceTracking', \ AddFontResourceW, <.lpFileName>, 'AddFontResourceW', \ AngleArc, <.hdc, .x, .y, .dwRadius, .eStartAngle, .eSweepAngle>, 'AngleArc', \ AnimatePalette, <.hPalette, .wStartIndex, .wNumEntries, .lpPaletteColors>, 'AnimatePalette', \ AnyLinkedFonts, <NONE>, 'AnyLinkedFonts', \ Arc, <.hdc, .X1, .Y1, .X2, .Y2, .X3, .Y3, .X4, .Y4>, 'Arc', \ ArcTo, <.hdc, .X1, .Y1, .X2, .Y2, .X3, .Y3, .X4, .Y4>, 'ArcTo', \ BRUSHOBJ_hGetColorTransform, <NONE>, 'BRUSHOBJ_hGetColorTransform', \ BRUSHOBJ_pvAllocRbrush, <NONE>, 'BRUSHOBJ_pvAllocRbrush', \ BRUSHOBJ_pvGetRbrush, <NONE>, 'BRUSHOBJ_pvGetRbrush', \ BRUSHOBJ_ulGetBrushColor, <NONE>, 'BRUSHOBJ_ulGetBrushColor', \ BeginPath, <.hdc>, 'BeginPath', \ BitBlt, <.hDestDC, .x, .y, .nWidth, .nHeight, .hSrcDC, .xSrc, .ySrc, .dwRop>, 'BitBlt', \ CLIPOBJ_bEnum, <NONE>, 'CLIPOBJ_bEnum', \ CLIPOBJ_cEnumStart, <NONE>, 'CLIPOBJ_cEnumStart', \ CLIPOBJ_ppoGetPath, <NONE>, 'CLIPOBJ_ppoGetPath', \ CancelDC, <.hdc>, 'CancelDC', \ CheckColorsInGamut, <.hdc, .lpv, .lpv2, .dw>, 'CheckColorsInGamut', \ ChoosePixelFormat, <.hDC, .pPixelFormatDescriptor>, 'ChoosePixelFormat', \ Chord, <.hdc, .X1, .Y1, .X2, .Y2, .X3, .Y3, .X4, .Y4>, 'Chord', \ ClearBitmapAttributes, <NONE>, 'ClearBitmapAttributes', \ ClearBrushAttributes, <NONE>, 'ClearBrushAttributes', \ CloseEnhMetaFile, <.hdc>, 'CloseEnhMetaFile', \ CloseFigure, <.hdc>, 'CloseFigure', \ CloseMetaFile, <.hMF>, 'CloseMetaFile', \ ColorCorrectPalette, <.hdc, .hpalette, .dword>, 'ColorCorrectPalette', \ ColorMatchToTarget, <.hdc, .hdc2, .dw>, 'ColorMatchToTarget', \ CombineRgn, <.hDestRgn, .hSrcRgn1, .hSrcRgn2, .nCombineMode>, 'CombineRgn', \ CombineTransform, <.lpxformResult, .lpxform1, .lpxform2>, 'CombineTransform', \ CopyEnhMetaFileA, <.hemfSrc, .lpszFile>, 'CopyEnhMetaFileA', \ CopyEnhMetaFileW, <.hemfSrc, .lpszFile>, 'CopyEnhMetaFileW', \ CopyMetaFileA, <.hMF, .lpFileName>, 'CopyMetaFileA', \ CopyMetaFileW, <.hMF, .lpFileName>, 'CopyMetaFileW', \ CreateBitmap, <.nWidth, .nHeight, .nPlanes, .nBitCount, .lpBits>, 'CreateBitmap', \ CreateBitmapIndirect, <.lpBitmap>, 'CreateBitmapIndirect', \ CreateBrushIndirect, <.lpLogBrush>, 'CreateBrushIndirect', \ CreateColorSpaceA, <.lplogcolorspace>, 'CreateColorSpaceA', \ CreateColorSpaceW, <.lplogcolorspace>, 'CreateColorSpaceW', \ CreateCompatibleBitmap, <.hdc, .nWidth, .nHeight>, 'CreateCompatibleBitmap', \ CreateCompatibleDC, <.hdc>, 'CreateCompatibleDC', \ CreateDCA, <.lpDriverName, .lpDeviceName, .lpOutput, .lpInitData>, 'CreateDCA', \ CreateDCW, <.lpDriverName, .lpDeviceName, .lpOutput, .lpInitData>, 'CreateDCW', \ CreateDIBPatternBrush, <.hPackedDIB, .wUsage>, 'CreateDIBPatternBrush', \ CreateDIBPatternBrushPt, <.lpPackedDIB, .iUsage>, 'CreateDIBPatternBrushPt', \ CreateDIBSection, <.hDC, .pBitmapInfo, .un, .lplpVoid, .handle, .dw>, 'CreateDIBSection', \ CreateDIBitmap, <.hdc, .lpInfoHeader, .dwUsage, .lpInitBits, .lpInitInfo, .wUsage>, 'CreateDIBitmap', \ CreateDiscardableBitmap, <.hdc, .nWidth, .nHeight>, 'CreateDiscardableBitmap', \ CreateEllipticRgn, <.X1, .Y1, .X2, .Y2>, 'CreateEllipticRgn', \ CreateEllipticRgnIndirect, <.lpRect>, 'CreateEllipticRgnIndirect', \ CreateEnhMetaFileA, <.hdcRef, .lpFileName, .lpRect, .lpDescription>, 'CreateEnhMetaFileA', \ CreateEnhMetaFileW, <.hdcRef, .lpFileName, .lpRect, .lpDescription>, 'CreateEnhMetaFileW', \ CreateFontA, <.iHeight, .iWidth, .iEscapement, .iOriantation, .iWeight, .fItalic, .fUnderline, .fStrikeOut, .fCharSet, .fOutputPrecision, .fClipPrecision, .fQuality, .fPitchAndFamily, .pFace>, 'CreateFontA', \ CreateFontIndirectA, <.lpLogFont>, 'CreateFontIndirectA', \ CreateFontIndirectExA, <.ENUMLOGFONTEXDVA>, 'CreateFontIndirectExA', \ CreateFontIndirectExW, <.ENUMLOGFONTEXDVA>, 'CreateFontIndirectExW', \ CreateFontIndirectW, <.lpLogFont>, 'CreateFontIndirectW', \ CreateFontW, <.iHeight, .iWidth, .iEscapement, .iOriantation, .iWeight, .fItalic, .fUnderline, .fStrikeOut, .fCharSet, .fOutputPrecision, .fClipPrecision, .fQuality, .fPitchAndFamily, .pFace>, 'CreateFontW', \ CreateHalftonePalette, <.hdc>, 'CreateHalftonePalette', \ CreateHatchBrush, <.nIndex, .crColor>, 'CreateHatchBrush', \ CreateICA, <.lpDriverName, .lpDeviceName, .lpOutput, .lpInitData>, 'CreateICA', \ CreateICW, <.lpDriverName, .lpDeviceName, .lpOutput, .lpInitData>, 'CreateICW', \ CreateMetaFileA, <.lpString>, 'CreateMetaFileA', \ CreateMetaFileW, <.lpString>, 'CreateMetaFileW', \ CreatePalette, <.lpLogPalette>, 'CreatePalette', \ CreatePatternBrush, <.hBitmap>, 'CreatePatternBrush', \ CreatePen, <.nPenStyle, .nWidth, .crColor>, 'CreatePen', \ CreatePenIndirect, <.lpLogPen>, 'CreatePenIndirect', \ CreatePolyPolygonRgn, <.lpPoint, .lpPolyCounts, .nCount, .nPolyFillMode>, 'CreatePolyPolygonRgn', \ CreatePolygonRgn, <.lpPoint, .nCount, .nPolyFillMode>, 'CreatePolygonRgn', \ CreateRectRgn, <.X1, .Y1, .X2, .Y2>, 'CreateRectRgn', \ CreateRectRgnIndirect, <.lpRect>, 'CreateRectRgnIndirect', \ CreateRoundRectRgn, <.X1, .Y1, .X2, .Y2, .X3, .Y3>, 'CreateRoundRectRgn', \ CreateScalableFontResourceA, <.fHidden, .lpszResourceFile, .lpszFontFile, .lpszCurrentPath>, 'CreateScalableFontResourceA', \ CreateScalableFontResourceW, <.fHidden, .lpszResourceFile, .lpszFontFile, .lpszCurrentPath>, 'CreateScalableFontResourceW', \ CreateSolidBrush, <.crColor>, 'CreateSolidBrush', \ DPtoLP, <.hdc, .lpPoint, .nCount>, 'DPtoLP', \ DdEntry0, <NONE>, 'DdEntry0', \ DdEntry1, <NONE>, 'DdEntry1', \ DdEntry10, <NONE>, 'DdEntry10', \ DdEntry11, <NONE>, 'DdEntry11', \ DdEntry12, <NONE>, 'DdEntry12', \ DdEntry13, <NONE>, 'DdEntry13', \ DdEntry14, <NONE>, 'DdEntry14', \ DdEntry15, <NONE>, 'DdEntry15', \ DdEntry16, <NONE>, 'DdEntry16', \ DdEntry17, <NONE>, 'DdEntry17', \ DdEntry18, <NONE>, 'DdEntry18', \ DdEntry19, <NONE>, 'DdEntry19', \ DdEntry2, <NONE>, 'DdEntry2', \ DdEntry20, <NONE>, 'DdEntry20', \ DdEntry21, <NONE>, 'DdEntry21', \ DdEntry22, <NONE>, 'DdEntry22', \ DdEntry23, <NONE>, 'DdEntry23', \ DdEntry24, <NONE>, 'DdEntry24', \ DdEntry25, <NONE>, 'DdEntry25', \ DdEntry26, <NONE>, 'DdEntry26', \ DdEntry27, <NONE>, 'DdEntry27', \ DdEntry28, <NONE>, 'DdEntry28', \ DdEntry29, <NONE>, 'DdEntry29', \ DdEntry3, <NONE>, 'DdEntry3', \ DdEntry30, <NONE>, 'DdEntry30', \ DdEntry31, <NONE>, 'DdEntry31', \ DdEntry32, <NONE>, 'DdEntry32', \ DdEntry33, <NONE>, 'DdEntry33', \ DdEntry34, <NONE>, 'DdEntry34', \ DdEntry35, <NONE>, 'DdEntry35', \ DdEntry36, <NONE>, 'DdEntry36', \ DdEntry37, <NONE>, 'DdEntry37', \ DdEntry38, <NONE>, 'DdEntry38', \ DdEntry39, <NONE>, 'DdEntry39', \ DdEntry4, <NONE>, 'DdEntry4', \ DdEntry40, <NONE>, 'DdEntry40', \ DdEntry41, <NONE>, 'DdEntry41', \ DdEntry42, <NONE>, 'DdEntry42', \ DdEntry43, <NONE>, 'DdEntry43', \ DdEntry44, <NONE>, 'DdEntry44', \ DdEntry45, <NONE>, 'DdEntry45', \ DdEntry46, <NONE>, 'DdEntry46', \ DdEntry47, <NONE>, 'DdEntry47', \ DdEntry48, <NONE>, 'DdEntry48', \ DdEntry49, <NONE>, 'DdEntry49', \ DdEntry5, <NONE>, 'DdEntry5', \ DdEntry50, <NONE>, 'DdEntry50', \ DdEntry51, <NONE>, 'DdEntry51', \ DdEntry52, <NONE>, 'DdEntry52', \ DdEntry53, <NONE>, 'DdEntry53', \ DdEntry54, <NONE>, 'DdEntry54', \ DdEntry55, <NONE>, 'DdEntry55', \ DdEntry56, <NONE>, 'DdEntry56', \ DdEntry6, <NONE>, 'DdEntry6', \ DdEntry7, <NONE>, 'DdEntry7', \ DdEntry8, <NONE>, 'DdEntry8', \ DdEntry9, <NONE>, 'DdEntry9', \ DeleteColorSpace, <.hcolorspace>, 'DeleteColorSpace', \ DeleteDC, <.hdc>, 'DeleteDC', \ DeleteEnhMetaFile, <.hemf>, 'DeleteEnhMetaFile', \ DeleteMetaFile, <.hMF>, 'DeleteMetaFile', \ DeleteObject, <.hObject>, 'DeleteObject', \ DescribePixelFormat, <.hDC, .n, .un, .lpPixelFormatDescriptor>, 'DescribePixelFormat', \ DeviceCapabilitiesExA, <NONE>, 'DeviceCapabilitiesExA', \ DeviceCapabilitiesExW, <NONE>, 'DeviceCapabilitiesExW', \ DrawEscape, <.hdc, .nEscape, .cbInput, .lpszInData>, 'DrawEscape', \ Ellipse, <.hdc, .X1, .Y1, .X2, .Y2>, 'Ellipse', \ EnableEUDC, <NONE>, 'EnableEUDC', \ EndDoc, <.hDC>, 'EndDoc', \ EndFormPage, <.hdc>, 'EndFormPage', \ EndPage, <.hdc>, 'EndPage', \ EndPath, <.hdc>, 'EndPath', \ EngAcquireSemaphore, <NONE>, 'EngAcquireSemaphore', \ EngAlphaBlend, <NONE>, 'EngAlphaBlend', \ EngAssociateSurface, <NONE>, 'EngAssociateSurface', \ EngBitBlt, <NONE>, 'EngBitBlt', \ EngCheckAbort, <NONE>, 'EngCheckAbort', \ EngComputeGlyphSet, <NONE>, 'EngComputeGlyphSet', \ EngCopyBits, <NONE>, 'EngCopyBits', \ EngCreateBitmap, <NONE>, 'EngCreateBitmap', \ EngCreateClip, <NONE>, 'EngCreateClip', \ EngCreateDeviceBitmap, <NONE>, 'EngCreateDeviceBitmap', \ EngCreateDeviceSurface, <NONE>, 'EngCreateDeviceSurface', \ EngCreatePalette, <NONE>, 'EngCreatePalette', \ EngCreateSemaphore, <NONE>, 'EngCreateSemaphore', \ EngDeleteClip, <NONE>, 'EngDeleteClip', \ EngDeletePalette, <NONE>, 'EngDeletePalette', \ EngDeletePath, <NONE>, 'EngDeletePath', \ EngDeleteSemaphore, <NONE>, 'EngDeleteSemaphore', \ EngDeleteSurface, <NONE>, 'EngDeleteSurface', \ EngEraseSurface, <NONE>, 'EngEraseSurface', \ EngFillPath, <NONE>, 'EngFillPath', \ EngFindResource, <NONE>, 'EngFindResource', \ EngFreeModule, <NONE>, 'EngFreeModule', \ EngGetCurrentCodePage, <NONE>, 'EngGetCurrentCodePage', \ EngGetDriverName, <NONE>, 'EngGetDriverName', \ EngGetPrinterDataFileName, <NONE>, 'EngGetPrinterDataFileName', \ EngGradientFill, <NONE>, 'EngGradientFill', \ EngLineTo, <NONE>, 'EngLineTo', \ EngLoadModule, <NONE>, 'EngLoadModule', \ EngLockSurface, <NONE>, 'EngLockSurface', \ EngMarkBandingSurface, <NONE>, 'EngMarkBandingSurface', \ EngMultiByteToUnicodeN, <NONE>, 'EngMultiByteToUnicodeN', \ EngMultiByteToWideChar, <NONE>, 'EngMultiByteToWideChar', \ EngPaint, <NONE>, 'EngPaint', \ EngPlgBlt, <NONE>, 'EngPlgBlt', \ EngQueryEMFInfo, <NONE>, 'EngQueryEMFInfo', \ EngQueryLocalTime, <NONE>, 'EngQueryLocalTime', \ EngReleaseSemaphore, <NONE>, 'EngReleaseSemaphore', \ EngStretchBlt, <NONE>, 'EngStretchBlt', \ EngStretchBltROP, <NONE>, 'EngStretchBltROP', \ EngStrokeAndFillPath, <NONE>, 'EngStrokeAndFillPath', \ EngStrokePath, <NONE>, 'EngStrokePath', \ EngTextOut, <NONE>, 'EngTextOut', \ EngTransparentBlt, <NONE>, 'EngTransparentBlt', \ EngUnicodeToMultiByteN, <NONE>, 'EngUnicodeToMultiByteN', \ EngUnlockSurface, <NONE>, 'EngUnlockSurface', \ EngWideCharToMultiByte, <NONE>, 'EngWideCharToMultiByte', \ EnumEnhMetaFile, <.hdc, .hemf, .lpEnhMetaFunc, .lpData, .lpRect>, 'EnumEnhMetaFile', \ EnumFontFamiliesA, <.hdc, .lpszFamily, .lpEnumFontFamProc, .lParam>, 'EnumFontFamiliesA', \ EnumFontFamiliesExA, <.hdc, .lpLogFont, .lpEnumFontProc, .lParam, .dw>, 'EnumFontFamiliesExA', \ EnumFontFamiliesExW, <.hdc, .lpLogFont, .lpEnumFontProc, .lParam, .dw>, 'EnumFontFamiliesExW', \ EnumFontFamiliesW, <.hdc, .lpszFamily, .lpEnumFontFamProc, .lParam>, 'EnumFontFamiliesW', \ EnumFontsA, <.hDC, .lpsz, .lpFontEnumProc, .lParam>, 'EnumFontsA', \ EnumFontsW, <.hDC, .lpsz, .lpFontEnumProc, .lParam>, 'EnumFontsW', \ EnumICMProfilesA, <.hdc, .icmEnumProc, .lParam>, 'EnumICMProfilesA', \ EnumICMProfilesW, <.hdc, .icmEnumProc, .lParam>, 'EnumICMProfilesW', \ EnumMetaFile, <.hDC, .hMetafile, .lpMFEnumProc, .lParam>, 'EnumMetaFile', \ EnumObjects, <.hDC, .n, .lpGOBJEnumProc, .lpVoid>, 'EnumObjects', \ EqualRgn, <.hSrcRgn1, .hSrcRgn2>, 'EqualRgn', \ Escape, <.hdc, .nEscape, .nCount, .lpInData, .lpOutData>, 'Escape', \ EudcLoadLinkW, <NONE>, 'EudcLoadLinkW', \ EudcUnloadLinkW, <NONE>, 'EudcUnloadLinkW', \ ExcludeClipRect, <.hdc, .X1, .Y1, .X2, .Y2>, 'ExcludeClipRect', \ ExtCreatePen, <.dwPenStyle, .dwWidth, .lplb, .dwStyleCount, .lpStyle>, 'ExtCreatePen', \ ExtCreateRegion, <.lpXform, .nCount, .lpRgnData>, 'ExtCreateRegion', \ ExtEscape, <.hdc, .nEscape, .cbInput, .lpszInData, .cbOutput, .lpszOutData>, 'ExtEscape', \ ExtFloodFill, <.hdc, .x, .y, .crColor, .wFillType>, 'ExtFloodFill', \ ExtSelectClipRgn, <.hdc, .hRgn, .fnMode>, 'ExtSelectClipRgn', \ ExtTextOutA, <.hdc, .x, .y, .wOptions, .lpRect, .lpString, .nCount, .lpDx>, 'ExtTextOutA', \ ExtTextOutW, <.hdc, .x, .y, .wOptions, .lpRect, .lpString, .nCount, .lpDx>, 'ExtTextOutW', \ FONTOBJ_cGetAllGlyphHandles, <NONE>, 'FONTOBJ_cGetAllGlyphHandles', \ FONTOBJ_cGetGlyphs, <NONE>, 'FONTOBJ_cGetGlyphs', \ FONTOBJ_pQueryGlyphAttrs, <NONE>, 'FONTOBJ_pQueryGlyphAttrs', \ FONTOBJ_pfdg, <NONE>, 'FONTOBJ_pfdg', \ FONTOBJ_pifi, <NONE>, 'FONTOBJ_pifi', \ FONTOBJ_pvTrueTypeFontFile, <NONE>, 'FONTOBJ_pvTrueTypeFontFile', \ FONTOBJ_pxoGetXform, <NONE>, 'FONTOBJ_pxoGetXform', \ FONTOBJ_vGetInfo, <NONE>, 'FONTOBJ_vGetInfo', \ FillPath, <.hdc>, 'FillPath', \ FillRgn, <.hdc, .hRgn, .hBrush>, 'FillRgn', \ FixBrushOrgEx, <.hDC, .n1, .n2, .lpPoint>, 'FixBrushOrgEx', \ FlattenPath, <.hdc>, 'FlattenPath', \ FloodFill, <.hdc, .x, .y, .crColor>, 'FloodFill', \ FontIsLinked, <NONE>, 'FontIsLinked', \ FrameRgn, <.hdc, .hRgn, .hBrush, .nWidth, .nHeight>, 'FrameRgn', \ GdiAddFontResourceW, <NONE>, 'GdiAddFontResourceW', \ GdiAddGlsBounds, <NONE>, 'GdiAddGlsBounds', \ GdiAddGlsRecord, <NONE>, 'GdiAddGlsRecord', \ GdiAlphaBlend, <NONE>, 'GdiAlphaBlend', \ GdiArtificialDecrementDriver, <NONE>, 'GdiArtificialDecrementDriver', \ GdiCleanCacheDC, <NONE>, 'GdiCleanCacheDC', \ GdiComment, <.hdc, .cbSize, .lpData>, 'GdiComment', \ GdiConsoleTextOut, <NONE>, 'GdiConsoleTextOut', \ GdiConvertAndCheckDC, <NONE>, 'GdiConvertAndCheckDC', \ GdiConvertBitmap, <NONE>, 'GdiConvertBitmap', \ GdiConvertBitmapV5, <NONE>, 'GdiConvertBitmapV5', \ GdiConvertBrush, <NONE>, 'GdiConvertBrush', \ GdiConvertDC, <NONE>, 'GdiConvertDC', \ GdiConvertEnhMetaFile, <NONE>, 'GdiConvertEnhMetaFile', \ GdiConvertFont, <NONE>, 'GdiConvertFont', \ GdiConvertMetaFilePict, <NONE>, 'GdiConvertMetaFilePict', \ GdiConvertPalette, <NONE>, 'GdiConvertPalette', \ GdiConvertRegion, <NONE>, 'GdiConvertRegion', \ GdiConvertToDevmodeW, <NONE>, 'GdiConvertToDevmodeW', \ GdiCreateLocalEnhMetaFile, <NONE>, 'GdiCreateLocalEnhMetaFile', \ GdiCreateLocalMetaFilePict, <NONE>, 'GdiCreateLocalMetaFilePict', \ GdiDeleteLocalDC, <NONE>, 'GdiDeleteLocalDC', \ GdiDeleteSpoolFileHandle, <NONE>, 'GdiDeleteSpoolFileHandle', \ GdiDescribePixelFormat, <NONE>, 'GdiDescribePixelFormat', \ GdiDllInitialize, <NONE>, 'GdiDllInitialize', \ GdiDrawStream, <NONE>, 'GdiDrawStream', \ GdiEndDocEMF, <NONE>, 'GdiEndDocEMF', \ GdiEndPageEMF, <NONE>, 'GdiEndPageEMF', \ GdiEntry1, <NONE>, 'GdiEntry1', \ GdiEntry10, <NONE>, 'GdiEntry10', \ GdiEntry11, <NONE>, 'GdiEntry11', \ GdiEntry12, <NONE>, 'GdiEntry12', \ GdiEntry13, <NONE>, 'GdiEntry13', \ GdiEntry14, <NONE>, 'GdiEntry14', \ GdiEntry15, <NONE>, 'GdiEntry15', \ GdiEntry16, <NONE>, 'GdiEntry16', \ GdiEntry2, <NONE>, 'GdiEntry2', \ GdiEntry3, <NONE>, 'GdiEntry3', \ GdiEntry4, <NONE>, 'GdiEntry4', \ GdiEntry5, <NONE>, 'GdiEntry5', \ GdiEntry6, <NONE>, 'GdiEntry6', \ GdiEntry7, <NONE>, 'GdiEntry7', \ GdiEntry8, <NONE>, 'GdiEntry8', \ GdiEntry9, <NONE>, 'GdiEntry9', \ GdiFixUpHandle, <NONE>, 'GdiFixUpHandle', \ GdiFlush, <VOID>, 'GdiFlush', \ GdiFullscreenControl, <NONE>, 'GdiFullscreenControl', \ GdiGetBatchLimit, <VOID>, 'GdiGetBatchLimit', \ GdiGetBitmapBitsSize, <NONE>, 'GdiGetBitmapBitsSize', \ GdiGetCharDimensions, <NONE>, 'GdiGetCharDimensions', \ GdiGetCodePage, <NONE>, 'GdiGetCodePage', \ GdiGetDC, <NONE>, 'GdiGetDC', \ GdiGetDevmodeForPage, <NONE>, 'GdiGetDevmodeForPage', \ GdiGetLocalBrush, <NONE>, 'GdiGetLocalBrush', \ GdiGetLocalDC, <NONE>, 'GdiGetLocalDC', \ GdiGetLocalFont, <NONE>, 'GdiGetLocalFont', \ GdiGetPageCount, <NONE>, 'GdiGetPageCount', \ GdiGetPageHandle, <NONE>, 'GdiGetPageHandle', \ GdiGetSpoolFileHandle, <NONE>, 'GdiGetSpoolFileHandle', \ GdiGetSpoolMessage, <NONE>, 'GdiGetSpoolMessage', \ GdiGradientFill, <NONE>, 'GdiGradientFill', \ GdiInitSpool, <NONE>, 'GdiInitSpool', \ GdiInitializeLanguagePack, <NONE>, 'GdiInitializeLanguagePack', \ GdiIsMetaFileDC, <NONE>, 'GdiIsMetaFileDC', \ GdiIsMetaPrintDC, <NONE>, 'GdiIsMetaPrintDC', \ GdiIsPlayMetafileDC, <NONE>, 'GdiIsPlayMetafileDC', \ GdiPlayDCScript, <NONE>, 'GdiPlayDCScript', \ GdiPlayEMF, <NONE>, 'GdiPlayEMF', \ GdiPlayJournal, <NONE>, 'GdiPlayJournal', \ GdiPlayPageEMF, <NONE>, 'GdiPlayPageEMF', \ GdiPlayPrivatePageEMF, <NONE>, 'GdiPlayPrivatePageEMF', \ GdiPlayScript, <NONE>, 'GdiPlayScript', \ GdiPrinterThunk, <NONE>, 'GdiPrinterThunk', \ GdiProcessSetup, <NONE>, 'GdiProcessSetup', \ GdiQueryFonts, <NONE>, 'GdiQueryFonts', \ GdiQueryTable, <NONE>, 'GdiQueryTable', \ GdiRealizationInfo, <NONE>, 'GdiRealizationInfo', \ GdiReleaseDC, <NONE>, 'GdiReleaseDC', \ GdiReleaseLocalDC, <NONE>, 'GdiReleaseLocalDC', \ GdiResetDCEMF, <NONE>, 'GdiResetDCEMF', \ GdiSetAttrs, <NONE>, 'GdiSetAttrs', \ GdiSetBatchLimit, <.dwLimit>, 'GdiSetBatchLimit', \ GdiSetLastError, <NONE>, 'GdiSetLastError', \ GdiSetPixelFormat, <NONE>, 'GdiSetPixelFormat', \ GdiSetServerAttr, <NONE>, 'GdiSetServerAttr', \ GdiStartDocEMF, <NONE>, 'GdiStartDocEMF', \ GdiStartPageEMF, <NONE>, 'GdiStartPageEMF', \ GdiSwapBuffers, <NONE>, 'GdiSwapBuffers', \ GdiTransparentBlt, <NONE>, 'GdiTransparentBlt', \ GdiValidateHandle, <NONE>, 'GdiValidateHandle', \ GetArcDirection, <.hdc>, 'GetArcDirection', \ GetAspectRatioFilterEx, <.hdc, .lpAspectRatio>, 'GetAspectRatioFilterEx', \ GetBitmapAttributes, <NONE>, 'GetBitmapAttributes', \ GetBitmapBits, <.hBitmap, .dwCount, .lpBits>, 'GetBitmapBits', \ GetBitmapDimensionEx, <.hBitmap, .lpDimension>, 'GetBitmapDimensionEx', \ GetBkColor, <.hdc>, 'GetBkColor', \ GetBkMode, <.hdc>, 'GetBkMode', \ GetBoundsRect, <.hdc, .lprcBounds, .flags>, 'GetBoundsRect', \ GetBrushAttributes, <NONE>, 'GetBrushAttributes', \ GetBrushOrgEx, <.hDC, .lpPoint>, 'GetBrushOrgEx', \ GetCharABCWidthsA, <.hdc, .uFirstChar, .uLastChar, .lpabc>, 'GetCharABCWidthsA', \ GetCharABCWidthsFloatA, <.hdc, .iFirstChar, .iLastChar, .lpABCF>, 'GetCharABCWidthsFloatA', \ GetCharABCWidthsFloatW, <.hdc, .iFirstChar, .iLastChar, .lpABCF>, 'GetCharABCWidthsFloatW', \ GetCharABCWidthsI, <.hdc, .uint, .lpword, .lpabc>, 'GetCharABCWidthsI', \ GetCharABCWidthsW, <.hdc, .uFirstChar, .uLastChar, .lpabc>, 'GetCharABCWidthsW', \ GetCharWidth32A, <.hdc, .iFirstChar, .iLastChar, .lpBuffer>, 'GetCharWidth32A', \ GetCharWidth32W, <.hdc, .iFirstChar, .iLastChar, .lpBuffer>, 'GetCharWidth32W', \ GetCharWidthA, <.hdc, .wFirstChar, .wLastChar, .lpBuffer>, 'GetCharWidthA', \ GetCharWidthFloatA, <.hdc, .iFirstChar, .iLastChar, .pxBuffer>, 'GetCharWidthFloatA', \ GetCharWidthFloatW, <.hdc, .iFirstChar, .iLastChar, .pxBuffer>, 'GetCharWidthFloatW', \ GetCharWidthI, <.hdc, .uint, .lpword, .lpint>, 'GetCharWidthI', \ GetCharWidthInfo, <NONE>, 'GetCharWidthInfo', \ GetCharWidthW, <.hdc, .wFirstChar, .wLastChar, .lpBuffer>, 'GetCharWidthW', \ GetCharacterPlacementA, <.hdc, .lpsz, .n1, .n2, .lpGcpResults, .dw>, 'GetCharacterPlacementA', \ GetCharacterPlacementW, <.hdc, .lpsz, .n1, .n2, .lpGcpResults, .dw>, 'GetCharacterPlacementW', \ GetClipBox, <.hdc, .lpRect>, 'GetClipBox', \ GetClipRgn, <.hdc, .hRgn>, 'GetClipRgn', \ GetColorAdjustment, <.hdc, .lpca>, 'GetColorAdjustment', \ GetColorSpace, <.hdc>, 'GetColorSpace', \ GetCurrentObject, <.hdc, .uObjectType>, 'GetCurrentObject', \ GetCurrentPositionEx, <.hdc, .lpPoint>, 'GetCurrentPositionEx', \ GetDCBrushColor, <.hdc>, 'GetDCBrushColor', \ GetDCOrgEx, <.hdc, .lpPoint>, 'GetDCOrgEx', \ GetDCPenColor, <.hdc>, 'GetDCPenColor', \ GetDIBColorTable, <.hDC, .un1, .un2, .pRGBQuad>, 'GetDIBColorTable', \ GetDIBits, <.aHDC, .hBitmap, .nStartScan, .nNumScans, .lpBits, .lpBI, .wUsage>, 'GetDIBits', \ GetDeviceCaps, <.hdc, .nIndex>, 'GetDeviceCaps', \ GetDeviceGammaRamp, <.hdc, .lpv>, 'GetDeviceGammaRamp', \ GetETM, <NONE>, 'GetETM', \ GetEUDCTimeStamp, <NONE>, 'GetEUDCTimeStamp', \ GetEUDCTimeStampExW, <NONE>, 'GetEUDCTimeStampExW', \ GetEnhMetaFileA, <.lpszMetaFile>, 'GetEnhMetaFileA', \ GetEnhMetaFileBits, <.hemf, .cbBuffer, .lpbBuffer>, 'GetEnhMetaFileBits', \ GetEnhMetaFileDescriptionA, <.hemf, .cchBuffer, .lpszDescription>, 'GetEnhMetaFileDescriptionA', \ GetEnhMetaFileDescriptionW, <.hemf, .cchBuffer, .lpszDescription>, 'GetEnhMetaFileDescriptionW', \ GetEnhMetaFileHeader, <.hemf, .cbBuffer, .lpemh>, 'GetEnhMetaFileHeader', \ GetEnhMetaFilePaletteEntries, <.hemf, .cEntries, .lppe>, 'GetEnhMetaFilePaletteEntries', \ GetEnhMetaFilePixelFormat, <.henhmetafile, .uint, .PIXELFORMATDESCRIPTOR>, 'GetEnhMetaFilePixelFormat', \ GetEnhMetaFileW, <.lpszMetaFile>, 'GetEnhMetaFileW', \ GetFontAssocStatus, <NONE>, 'GetFontAssocStatus', \ GetFontData, <.hdc, .dwTable, .dwOffset, .lpvBuffer, .cbData>, 'GetFontData', \ GetFontLanguageInfo, <.hdc>, 'GetFontLanguageInfo', \ GetFontResourceInfoW, <NONE>, 'GetFontResourceInfoW', \ GetFontUnicodeRanges, <.hdc, .LPGLYPHSET>, 'GetFontUnicodeRanges', \ GetGlyphIndicesA, <.hdc, .lpcstr, .ByValt, .lpword, .dword>, 'GetGlyphIndicesA', \ GetGlyphIndicesW, <.hdc, .lpcstr, .ByValt, .lpword, .dword>, 'GetGlyphIndicesW', \ GetGlyphOutline, <.hdc, .uChar, .fuFormat, .lpgm, .cbBuffer, .lpBuffer, .lpmat2>, 'GetGlyphOutline', \ GetGlyphOutlineA, <.hdc, .uChar, .fuFormat, .lpgm, .cbBuffer, .lpBuffer, .lpmat2>, 'GetGlyphOutlineA', \ GetGlyphOutlineW, <.hdc, .uChar, .fuFormat, .lpgm, .cbBuffer, .lpBuffer, .lpmat2>, 'GetGlyphOutlineW', \ GetGlyphOutlineWow, <NONE>, 'GetGlyphOutlineWow', \ GetGraphicsMode, <.hdc>, 'GetGraphicsMode', \ GetHFONT, <NONE>, 'GetHFONT', \ GetICMProfileA, <.hdc, .dw, .lpStr>, 'GetICMProfileA', \ GetICMProfileW, <.hdc, .dw, .lpStr>, 'GetICMProfileW', \ GetKerningPairs, <.hdc, .cPairs, .lpkrnpair>, 'GetKerningPairs', \ GetKerningPairsA, <.hdc, .cPairs, .lpkrnpair>, 'GetKerningPairsA', \ GetKerningPairsW, <.hdc, .cPairs, .lpkrnpair>, 'GetKerningPairsW', \ GetLayout, <.hdc>, 'GetLayout', \ GetLogColorSpaceA, <.hcolorspace, .lplogcolorspace, .dw>, 'GetLogColorSpaceA', \ GetLogColorSpaceW, <.hcolorspace, .lplogcolorspace, .dw>, 'GetLogColorSpaceW', \ GetMapMode, <.hdc>, 'GetMapMode', \ GetMetaFileA, <.lpFileName>, 'GetMetaFileA', \ GetMetaFileBitsEx, <.hMF, .nSize, .lpvData>, 'GetMetaFileBitsEx', \ GetMetaFileW, <.lpFileName>, 'GetMetaFileW', \ GetMetaRgn, <.hdc, .hRgn>, 'GetMetaRgn', \ GetMiterLimit, <.hdc, .peLimit>, 'GetMiterLimit', \ GetNearestColor, <.hdc, .crColor>, 'GetNearestColor', \ GetNearestPaletteIndex, <.hPalette, .crColor>, 'GetNearestPaletteIndex', \ GetObjectA, <.hObject, .nCount, .lpObject>, 'GetObjectA', \ GetObjectType, <.hgdiobj>, 'GetObjectType', \ GetObjectW, <.hObject, .nCount, .lpObject>, 'GetObjectW', \ GetOutlineTextMetricsA, <.hdc, .cbData, .lpotm>, 'GetOutlineTextMetricsA', \ GetOutlineTextMetricsW, <.hdc, .cbData, .lpotm>, 'GetOutlineTextMetricsW', \ GetPaletteEntries, <.hPalette, .wStartIndex, .wNumEntries, .lpPaletteEntries>, 'GetPaletteEntries', \ GetPath, <.hdc, .lpPoint, .lpTypes, .nSize>, 'GetPath', \ GetPixel, <.hdc, .x, .y>, 'GetPixel', \ GetPixelFormat, <.hDC>, 'GetPixelFormat', \ GetPolyFillMode, <.hdc>, 'GetPolyFillMode', \ GetROP2, <.hdc>, 'GetROP2', \ GetRandomRgn, <.hdc, .hrgn, .ByValt>, 'GetRandomRgn', \ GetRasterizerCaps, <.lpraststat, .cb>, 'GetRasterizerCaps', \ GetRegionData, <.hRgn, .dwCount, .lpRgnData>, 'GetRegionData', \ GetRelAbs, <NONE>, 'GetRelAbs', \ GetRgnBox, <.hRgn, .lpRect>, 'GetRgnBox', \ GetStockObject, <.fnObject>, 'GetStockObject', \ GetStretchBltMode, <.hdc>, 'GetStretchBltMode', \ GetStringBitmapA, <NONE>, 'GetStringBitmapA', \ GetStringBitmapW, <NONE>, 'GetStringBitmapW', \ GetSystemPaletteEntries, <.hdc, .wStartIndex, .wNumEntries, .lpPaletteEntries>, 'GetSystemPaletteEntries', \ GetSystemPaletteUse, <.hdc>, 'GetSystemPaletteUse', \ GetTextAlign, <.hdc>, 'GetTextAlign', \ GetTextCharacterExtra, <.hdc>, 'GetTextCharacterExtra', \ GetTextCharset, <.hdc>, 'GetTextCharset', \ GetTextCharsetInfo, <.hdc, .lpSig, .dwFlags>, 'GetTextCharsetInfo', \ GetTextColor, <.hdc>, 'GetTextColor', \ GetTextExtentExPointA, <.hdc, .lpszStr, .cchString, .nMaxExtent, .lpnFit, .alpDx, .lpSize>, 'GetTextExtentExPointA', \ GetTextExtentExPointI, <.hdc, .lpword, .ByValt, .lpint, .lpsize>, 'GetTextExtentExPointI', \ GetTextExtentExPointW, <.hdc, .lpszStr, .cchString, .nMaxExtent, .lpnFit, .alpDx, .lpSize>, 'GetTextExtentExPointW', \ GetTextExtentExPointWPri, <NONE>, 'GetTextExtentExPointWPri', \ GetTextExtentPoint32A, <.hdc, .lpsz, .cbString, .lpSize>, 'GetTextExtentPoint32A', \ GetTextExtentPoint32W, <.hdc, .lpsz, .cbString, .lpSize>, 'GetTextExtentPoint32W', \ GetTextExtentPointA, <.hdc, .lpszString, .cbString, .lpSize>, 'GetTextExtentPointA', \ GetTextExtentPointI, <.hdc, .lpword, .ByValt, .lpsize>, 'GetTextExtentPointI', \ GetTextExtentPointW, <.hdc, .lpszString, .cbString, .lpSize>, 'GetTextExtentPointW', \ GetTextFaceA, <.hdc, .nCount, .lpFacename>, 'GetTextFaceA', \ GetTextFaceAliasW, <NONE>, 'GetTextFaceAliasW', \ GetTextFaceW, <.hdc, .nCount, .lpFacename>, 'GetTextFaceW', \ GetTextMetricsA, <.hdc, .lpMetrics>, 'GetTextMetricsA', \ GetTextMetricsW, <.hdc, .lpMetrics>, 'GetTextMetricsW', \ GetTransform, <NONE>, 'GetTransform', \ GetViewportExtEx, <.hdc, .lpSize>, 'GetViewportExtEx', \ GetViewportOrgEx, <.hdc, .lpPoint>, 'GetViewportOrgEx', \ GetWinMetaFileBits, <.hemf, .cbBuffer, .lpbBuffer, .fnMapMode, .hdcRef>, 'GetWinMetaFileBits', \ GetWindowExtEx, <.hdc, .lpSize>, 'GetWindowExtEx', \ GetWindowOrgEx, <.hdc, .lpPoint>, 'GetWindowOrgEx', \ GetWorldTransform, <.hdc, .lpXform>, 'GetWorldTransform', \ HT_Get8BPPFormatPalette, <NONE>, 'HT_Get8BPPFormatPalette', \ HT_Get8BPPMaskPalette, <NONE>, 'HT_Get8BPPMaskPalette', \ IntersectClipRect, <.hdc, .X1, .Y1, .X2, .Y2>, 'IntersectClipRect', \ InvertRgn, <.hdc, .hRgn>, 'InvertRgn', \ IsValidEnhMetaRecord, <NONE>, 'IsValidEnhMetaRecord', \ IsValidEnhMetaRecordOffExt, <NONE>, 'IsValidEnhMetaRecordOffExt', \ LPtoDP, <.hdc, .lpPoint, .nCount>, 'LPtoDP', \ LineDDA, <.ByValt, .pLineddaproc, .lparam>, 'LineDDA', \ LineTo, <.hdc, .x, .y>, 'LineTo', \ MaskBlt, <.hdcDest, .nXDest, .nYDest, .nWidth, .nHeight, .hdcSrc, .nXSrc, .nYSrc, .hbmMask, .xMask, .yMask, .dwRop>, 'MaskBlt', \ MirrorRgn, <NONE>, 'MirrorRgn', \ ModifyWorldTransform, <.hdc, .lpXform, .iMode>, 'ModifyWorldTransform', \ MoveToEx, <.hdc, .x, .y, .lpPoint>, 'MoveToEx', \ NamedEscape, <NONE>, 'NamedEscape', \ OffsetClipRgn, <.hdc, .x, .y>, 'OffsetClipRgn', \ OffsetRgn, <.hRgn, .x, .y>, 'OffsetRgn', \ OffsetViewportOrgEx, <.hdc, .nX, .nY, .lpPoint>, 'OffsetViewportOrgEx', \ OffsetWindowOrgEx, <.hdc, .nX, .nY, .lpPoint>, 'OffsetWindowOrgEx', \ PATHOBJ_bEnum, <NONE>, 'PATHOBJ_bEnum', \ PATHOBJ_bEnumClipLines, <NONE>, 'PATHOBJ_bEnumClipLines', \ PATHOBJ_vEnumStart, <NONE>, 'PATHOBJ_vEnumStart', \ PATHOBJ_vEnumStartClipLines, <NONE>, 'PATHOBJ_vEnumStartClipLines', \ PATHOBJ_vGetBounds, <NONE>, 'PATHOBJ_vGetBounds', \ PaintRgn, <.hdc, .hRgn>, 'PaintRgn', \ PatBlt, <.hdc, .x, .y, .nWidth, .nHeight, .dwRop>, 'PatBlt', \ PathToRegion, <.hdc>, 'PathToRegion', \ Pie, <.hdc, .X1, .Y1, .X2, .Y2, .X3, .Y3, .X4, .Y4>, 'Pie', \ PlayEnhMetaFile, <.hdc, .hemf, .lpRect>, 'PlayEnhMetaFile', \ PlayEnhMetaFileRecord, <.hdc, .lpHandletable, .lpEnhMetaRecord, .nHandles>, 'PlayEnhMetaFileRecord', \ PlayMetaFile, <.hdc, .hMF>, 'PlayMetaFile', \ PlayMetaFileRecord, <.hdc, .lpHandletable, .lpMetaRecord, .nHandles>, 'PlayMetaFileRecord', \ PlgBlt, <.hdcDest, .lpPoint, .hdcSrc, .nXSrc, .nYSrc, .nWidth, .nHeight, .hbmMask, .xMask, .yMask>, 'PlgBlt', \ PolyBezier, <.hdc, .lppt, .cPoints>, 'PolyBezier', \ PolyBezierTo, <.hdc, .lppt, .cCount>, 'PolyBezierTo', \ PolyDraw, <.hdc, .lppt, .lpbTypes, .cCount>, 'PolyDraw', \ PolyPatBlt, <NONE>, 'PolyPatBlt', \ PolyPolygon, <.hdc, .lpPoint, .lpPolyCounts, .nCount>, 'PolyPolygon', \ PolyPolyline, <.hdc, .lppt, .lpdwPolyPoints, .cCount>, 'PolyPolyline', \ PolyTextOutA, <.hdc, .pptxt, .cStrings>, 'PolyTextOutA', \ PolyTextOutW, <.hdc, .pptxt, .cStrings>, 'PolyTextOutW', \ Polygon, <.hdc, .lpPoint, .nCount>, 'Polygon', \ Polyline, <.hdc, .lpPoint, .nCount>, 'Polyline', \ PolylineTo, <.hdc, .lppt, .cCount>, 'PolylineTo', \ PtInRegion, <.hRgn, .x, .y>, 'PtInRegion', \ PtVisible, <.hdc, .x, .y>, 'PtVisible', \ QueryFontAssocStatus, <NONE>, 'QueryFontAssocStatus', \ RealizePalette, <.hdc>, 'RealizePalette', \ RectInRegion, <.hRgn, .lpRect>, 'RectInRegion', \ RectVisible, <.hdc, .lpRect>, 'RectVisible', \ Rectangle, <.hdc, .X1, .Y1, .X2, .Y2>, 'Rectangle', \ RemoveFontMemResourceEx, <.handle>, 'RemoveFontMemResourceEx', \ RemoveFontResourceA, <.lpFileName>, 'RemoveFontResourceA', \ RemoveFontResourceExA, <.lpcstr, .dword, .DESIGNVECTOR>, 'RemoveFontResourceExA', \ RemoveFontResourceExW, <.lpcstr, .dword, .DESIGNVECTOR>, 'RemoveFontResourceExW', \ RemoveFontResourceTracking, <NONE>, 'RemoveFontResourceTracking', \ RemoveFontResourceW, <.lpFileName>, 'RemoveFontResourceW', \ ResetDCA, <.hdc, .lpInitData>, 'ResetDCA', \ ResetDCW, <.hdc, .lpInitData>, 'ResetDCW', \ ResizePalette, <.hPalette, .nNumEntries>, 'ResizePalette', \ RestoreDC, <.hdc, .nSavedDC>, 'RestoreDC', \ RoundRect, <.hdc, .X1, .Y1, .X2, .Y2, .X3, .Y3>, 'RoundRect', \ STROBJ_bEnum, <NONE>, 'STROBJ_bEnum', \ STROBJ_bEnumPositionsOnly, <NONE>, 'STROBJ_bEnumPositionsOnly', \ STROBJ_bGetAdvanceWidths, <NONE>, 'STROBJ_bGetAdvanceWidths', \ STROBJ_dwGetCodePage, <NONE>, 'STROBJ_dwGetCodePage', \ STROBJ_vEnumStart, <NONE>, 'STROBJ_vEnumStart', \ SaveDC, <.hdc>, 'SaveDC', \ ScaleViewportExtEx, <.hdc, .nXnum, .nXdenom, .nYnum, .nYdenom, .lpSize>, 'ScaleViewportExtEx', \ ScaleWindowExtEx, <.hdc, .nXnum, .nXdenom, .nYnum, .nYdenom, .lpSize>, 'ScaleWindowExtEx', \ SelectBrushLocal, <NONE>, 'SelectBrushLocal', \ SelectClipPath, <.hdc, .iMode>, 'SelectClipPath', \ SelectClipRgn, <.hdc, .hRgn>, 'SelectClipRgn', \ SelectFontLocal, <NONE>, 'SelectFontLocal', \ SelectObject, <.hdc, .hObject>, 'SelectObject', \ SelectPalette, <.hdc, .hPalette, .bForceBackground>, 'SelectPalette', \ SetAbortProc, <.hDC, .lpAbortProc>, 'SetAbortProc', \ SetArcDirection, <.hdc, .ArcDirection>, 'SetArcDirection', \ SetBitmapAttributes, <NONE>, 'SetBitmapAttributes', \ SetBitmapBits, <.hBitmap, .dwCount, .lpBits>, 'SetBitmapBits', \ SetBitmapDimensionEx, <.hbm, .nX, .nY, .lpSize>, 'SetBitmapDimensionEx', \ SetBkColor, <.hdc, .crColor>, 'SetBkColor', \ SetBkMode, <.hdc, .nBkMode>, 'SetBkMode', \ SetBoundsRect, <.hdc, .lprcBounds, .flags>, 'SetBoundsRect', \ SetBrushAttributes, <NONE>, 'SetBrushAttributes', \ SetBrushOrgEx, <.hdc, .nXOrg, .nYOrg, .lppt>, 'SetBrushOrgEx', \ SetColorAdjustment, <.hdc, .lpca>, 'SetColorAdjustment', \ SetColorSpace, <.hdc, .hcolorspace>, 'SetColorSpace', \ SetDCBrushColor, <.hdc, .colorref>, 'SetDCBrushColor', \ SetDCPenColor, <.hdc, .colorref>, 'SetDCPenColor', \ SetDIBColorTable, <.hDC, .un1, .un2, .pcRGBQuad>, 'SetDIBColorTable', \ SetDIBits, <.hdc, .hBitmap, .nStartScan, .nNumScans, .lpBits, .lpBI, .wUsage>, 'SetDIBits', \ SetDIBitsToDevice, <.hdc, .x, .y, .dx, .dy, .SrcX, .SrcY, .Scan, .NumScans, .Bits, .BitsInfo, .wUsage>, 'SetDIBitsToDevice', \ SetDeviceGammaRamp, <.hdc, .lpv>, 'SetDeviceGammaRamp', \ SetEnhMetaFileBits, <.cbBuffer, .lpData>, 'SetEnhMetaFileBits', \ SetFontEnumeration, <NONE>, 'SetFontEnumeration', \ SetGraphicsMode, <.hdc, .iMode>, 'SetGraphicsMode', \ SetICMMode, <.hdc, .n>, 'SetICMMode', \ SetICMProfileA, <.hdc, .lpStr>, 'SetICMProfileA', \ SetICMProfileW, <.hdc, .lpStr>, 'SetICMProfileW', \ SetLayout, <.hdc, .dword>, 'SetLayout', \ SetLayoutWidth, <NONE>, 'SetLayoutWidth', \ SetMagicColors, <NONE>, 'SetMagicColors', \ SetMapMode, <.hdc, .nMapMode>, 'SetMapMode', \ SetMapperFlags, <.hdc, .dwFlag>, 'SetMapperFlags', \ SetMetaFileBitsEx, <.nSize, .lpData>, 'SetMetaFileBitsEx', \ SetMetaRgn, <.hdc>, 'SetMetaRgn', \ SetMiterLimit, <.hdc, .eNewLimit, .peOldLimit>, 'SetMiterLimit', \ SetPaletteEntries, <.hPalette, .wStartIndex, .wNumEntries, .lpPaletteEntries>, 'SetPaletteEntries', \ SetPixel, <.hdc, .x, .y, .crColor>, 'SetPixel', \ SetPixelFormat, <.hDC, .n, .pcPixelFormatDescriptor>, 'SetPixelFormat', \ SetPixelV, <.hdc, .x, .y, .crColor>, 'SetPixelV', \ SetPolyFillMode, <.hdc, .nPolyFillMode>, 'SetPolyFillMode', \ SetROP2, <.hdc, .nDrawMode>, 'SetROP2', \ SetRectRgn, <.hRgn, .X1, .Y1, .X2, .Y2>, 'SetRectRgn', \ SetRelAbs, <NONE>, 'SetRelAbs', \ SetStretchBltMode, <.hdc, .nStretchMode>, 'SetStretchBltMode', \ SetSystemPaletteUse, <.hdc, .wUsage>, 'SetSystemPaletteUse', \ SetTextAlign, <.hdc, .fMode>, 'SetTextAlign', \ SetTextCharacterExtra, <.hdc, .nCharExtra>, 'SetTextCharacterExtra', \ SetTextColor, <.hdc, .crColor>, 'SetTextColor', \ SetTextJustification, <.hdc, .nBreakExtra, .nBreakCount>, 'SetTextJustification', \ SetViewportExtEx, <.hdc, .nX, .nY, .lpSize>, 'SetViewportExtEx', \ SetViewportOrgEx, <.hdc, .nX, .nY, .lpPoint>, 'SetViewportOrgEx', \ SetVirtualResolution, <NONE>, 'SetVirtualResolution', \ SetWinMetaFileBits, <.cbBuffer, .lpbBuffer, .hdcRef, .lpmfp>, 'SetWinMetaFileBits', \ SetWindowExtEx, <.hdc, .nX, .nY, .lpSize>, 'SetWindowExtEx', \ SetWindowOrgEx, <.hdc, .nX, .nY, .lpPoint>, 'SetWindowOrgEx', \ SetWorldTransform, <.hdc, .lpXform>, 'SetWorldTransform', \ StartDocA, <.hdc, .lpdi>, 'StartDocA', \ StartDocW, <.hdc, .lpdi>, 'StartDocW', \ StartFormPage, <.hdc>, 'StartFormPage', \ StartPage, <.hdc>, 'StartPage', \ StretchBlt, <.hdc, .x, .y, .nWidth, .nHeight, .hSrcDC, .xSrc, .ySrc, .nSrcWidth, .nSrcHeight, .dwRop>, 'StretchBlt', \ StretchDIBits, <.hdc, .x, .y, .dx, .dy, .SrcX, .SrcY, .wSrcWidth, .wSrcHeight, .lpBits, .lpBitsInfo, .wUsage, .dwRop>, 'StretchDIBits', \ StrokeAndFillPath, <.hdc>, 'StrokeAndFillPath', \ StrokePath, <.hdc>, 'StrokePath', \ SwapBuffers, <.hDC>, 'SwapBuffers', \ TextOutA, <.hdc, .x, .y, .lpString, .nCount>, 'TextOutA', \ TextOutW, <.hdc, .x, .y, .lpString, .nCount>, 'TextOutW', \ TranslateCharsetInfo, <.lpSrc, .lpcs, .dwFlags>, 'TranslateCharsetInfo', \ UnloadNetworkFonts, <NONE>, 'UnloadNetworkFonts', \ UnrealizeObject, <.hObject>, 'UnrealizeObject', \ UpdateColors, <.hdc>, 'UpdateColors', \ UpdateICMRegKeyA, <.dword, .lpstr, .uint>, 'UpdateICMRegKeyA', \ UpdateICMRegKeyW, <.dword, .lpstr, .uint>, 'UpdateICMRegKeyW', \ WidenPath, <.hdc>, 'WidenPath', \ XFORMOBJ_bApplyXform, <NONE>, 'XFORMOBJ_bApplyXform', \ XFORMOBJ_iGetXform, <NONE>, 'XFORMOBJ_iGetXform', \ XLATEOBJ_cGetPalette, <NONE>, 'XLATEOBJ_cGetPalette', \ XLATEOBJ_hGetColorTransform, <NONE>, 'XLATEOBJ_hGetColorTransform', \ XLATEOBJ_iXlate, <NONE>, 'XLATEOBJ_iXlate', \ XLATEOBJ_piVector, <NONE>, 'XLATEOBJ_piVector', \ bInitSystemAndFontsDirectoriesW, <NONE>, 'bInitSystemAndFontsDirectoriesW', \ bMakePathNameW, <NONE>, 'bMakePathNameW', \ cGetTTFFromFOT, <NONE>, 'cGetTTFFromFOT', \ gdiPlaySpoolStream, <NONE>, 'gdiPlaySpoolStream' |
Added freshlib/imports/Win32/gdiplus.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 | ; gdiplus.dll API calls (ASCII) import_proto gdiplus, \ GdipAddPathArc, <NONE>, 'GdipAddPathArc', \ GdipAddPathArcI, <NONE>, 'GdipAddPathArcI', \ GdipAddPathBezier, <NONE>, 'GdipAddPathBezier', \ GdipAddPathBezierI, <NONE>, 'GdipAddPathBezierI', \ GdipAddPathBeziers, <NONE>, 'GdipAddPathBeziers', \ GdipAddPathBeziersI, <NONE>, 'GdipAddPathBeziersI', \ GdipAddPathClosedCurve, <NONE>, 'GdipAddPathClosedCurve', \ GdipAddPathClosedCurve2, <NONE>, 'GdipAddPathClosedCurve2', \ GdipAddPathClosedCurve2I, <NONE>, 'GdipAddPathClosedCurve2I', \ GdipAddPathClosedCurveI, <NONE>, 'GdipAddPathClosedCurveI', \ GdipAddPathCurve, <NONE>, 'GdipAddPathCurve', \ GdipAddPathCurve2, <NONE>, 'GdipAddPathCurve2', \ GdipAddPathCurve2I, <NONE>, 'GdipAddPathCurve2I', \ GdipAddPathCurve3, <NONE>, 'GdipAddPathCurve3', \ GdipAddPathCurve3I, <NONE>, 'GdipAddPathCurve3I', \ GdipAddPathCurveI, <NONE>, 'GdipAddPathCurveI', \ GdipAddPathEllipse, <NONE>, 'GdipAddPathEllipse', \ GdipAddPathEllipseI, <NONE>, 'GdipAddPathEllipseI', \ GdipAddPathLine, <NONE>, 'GdipAddPathLine', \ GdipAddPathLine2, <NONE>, 'GdipAddPathLine2', \ GdipAddPathLine2I, <NONE>, 'GdipAddPathLine2I', \ GdipAddPathLineI, <NONE>, 'GdipAddPathLineI', \ GdipAddPathPath, <NONE>, 'GdipAddPathPath', \ GdipAddPathPie, <NONE>, 'GdipAddPathPie', \ GdipAddPathPieI, <NONE>, 'GdipAddPathPieI', \ GdipAddPathPolygon, <NONE>, 'GdipAddPathPolygon', \ GdipAddPathPolygonI, <NONE>, 'GdipAddPathPolygonI', \ GdipAddPathRectangle, <NONE>, 'GdipAddPathRectangle', \ GdipAddPathRectangleI, <NONE>, 'GdipAddPathRectangleI', \ GdipAddPathRectangles, <NONE>, 'GdipAddPathRectangles', \ GdipAddPathRectanglesI, <NONE>, 'GdipAddPathRectanglesI', \ GdipAddPathString, <NONE>, 'GdipAddPathString', \ GdipAddPathStringI, <NONE>, 'GdipAddPathStringI', \ GdipAlloc, <NONE>, 'GdipAlloc', \ GdipBeginContainer, <NONE>, 'GdipBeginContainer', \ GdipBeginContainer2, <NONE>, 'GdipBeginContainer2', \ GdipBeginContainerI, <NONE>, 'GdipBeginContainerI', \ GdipBitmapApplyEffect, <NONE>, 'GdipBitmapApplyEffect', \ GdipBitmapConvertFormat, <NONE>, 'GdipBitmapConvertFormat', \ GdipBitmapCreateApplyEffect, <NONE>, 'GdipBitmapCreateApplyEffect', \ GdipBitmapGetHistogram, <NONE>, 'GdipBitmapGetHistogram', \ GdipBitmapGetHistogramSize, <NONE>, 'GdipBitmapGetHistogramSize', \ GdipBitmapGetPixel, <NONE>, 'GdipBitmapGetPixel', \ GdipBitmapLockBits, <NONE>, 'GdipBitmapLockBits', \ GdipBitmapSetPixel, <NONE>, 'GdipBitmapSetPixel', \ GdipBitmapSetResolution, <NONE>, 'GdipBitmapSetResolution', \ GdipBitmapUnlockBits, <NONE>, 'GdipBitmapUnlockBits', \ GdipClearPathMarkers, <NONE>, 'GdipClearPathMarkers', \ GdipCloneBitmapArea, <NONE>, 'GdipCloneBitmapArea', \ GdipCloneBitmapAreaI, <NONE>, 'GdipCloneBitmapAreaI', \ GdipCloneBrush, <NONE>, 'GdipCloneBrush', \ GdipCloneCustomLineCap, <NONE>, 'GdipCloneCustomLineCap', \ GdipCloneFont, <NONE>, 'GdipCloneFont', \ GdipCloneFontFamily, <NONE>, 'GdipCloneFontFamily', \ GdipCloneImage, <NONE>, 'GdipCloneImage', \ GdipCloneImageAttributes, <NONE>, 'GdipCloneImageAttributes', \ GdipCloneMatrix, <NONE>, 'GdipCloneMatrix', \ GdipClonePath, <NONE>, 'GdipClonePath', \ GdipClonePen, <NONE>, 'GdipClonePen', \ GdipCloneRegion, <NONE>, 'GdipCloneRegion', \ GdipCloneStringFormat, <NONE>, 'GdipCloneStringFormat', \ GdipClosePathFigure, <NONE>, 'GdipClosePathFigure', \ GdipClosePathFigures, <NONE>, 'GdipClosePathFigures', \ GdipCombineRegionPath, <NONE>, 'GdipCombineRegionPath', \ GdipCombineRegionRect, <NONE>, 'GdipCombineRegionRect', \ GdipCombineRegionRectI, <NONE>, 'GdipCombineRegionRectI', \ GdipCombineRegionRegion, <NONE>, 'GdipCombineRegionRegion', \ GdipComment, <NONE>, 'GdipComment', \ GdipConvertToEmfPlus, <NONE>, 'GdipConvertToEmfPlus', \ GdipConvertToEmfPlusToFile, <NONE>, 'GdipConvertToEmfPlusToFile', \ GdipConvertToEmfPlusToStream, <NONE>, 'GdipConvertToEmfPlusToStream', \ GdipCreateAdjustableArrowCap, <NONE>, 'GdipCreateAdjustableArrowCap', \ GdipCreateBitmapFromDirectDrawSurface, <NONE>, 'GdipCreateBitmapFromDirectDrawSurface', \ GdipCreateBitmapFromFile, <NONE>, 'GdipCreateBitmapFromFile', \ GdipCreateBitmapFromFileICM, <NONE>, 'GdipCreateBitmapFromFileICM', \ GdipCreateBitmapFromGdiDib, <NONE>, 'GdipCreateBitmapFromGdiDib', \ GdipCreateBitmapFromGraphics, <NONE>, 'GdipCreateBitmapFromGraphics', \ GdipCreateBitmapFromHBITMAP, <NONE>, 'GdipCreateBitmapFromHBITMAP', \ GdipCreateBitmapFromHICON, <NONE>, 'GdipCreateBitmapFromHICON', \ GdipCreateBitmapFromResource, <NONE>, 'GdipCreateBitmapFromResource', \ GdipCreateBitmapFromScan0, <NONE>, 'GdipCreateBitmapFromScan0', \ GdipCreateBitmapFromStream, <NONE>, 'GdipCreateBitmapFromStream', \ GdipCreateBitmapFromStreamICM, <NONE>, 'GdipCreateBitmapFromStreamICM', \ GdipCreateCachedBitmap, <NONE>, 'GdipCreateCachedBitmap', \ GdipCreateCustomLineCap, <NONE>, 'GdipCreateCustomLineCap', \ GdipCreateEffect, <NONE>, 'GdipCreateEffect', \ GdipCreateFont, <NONE>, 'GdipCreateFont', \ GdipCreateFontFamilyFromName, <NONE>, 'GdipCreateFontFamilyFromName', \ GdipCreateFontFromDC, <NONE>, 'GdipCreateFontFromDC', \ GdipCreateFontFromLogfontA, <NONE>, 'GdipCreateFontFromLogfontA', \ GdipCreateFontFromLogfontW, <NONE>, 'GdipCreateFontFromLogfontW', \ GdipCreateFromHDC, <NONE>, 'GdipCreateFromHDC', \ GdipCreateFromHDC2, <NONE>, 'GdipCreateFromHDC2', \ GdipCreateFromHWND, <NONE>, 'GdipCreateFromHWND', \ GdipCreateFromHWNDICM, <NONE>, 'GdipCreateFromHWNDICM', \ GdipCreateHBITMAPFromBitmap, <NONE>, 'GdipCreateHBITMAPFromBitmap', \ GdipCreateHICONFromBitmap, <NONE>, 'GdipCreateHICONFromBitmap', \ GdipCreateHalftonePalette, <NONE>, 'GdipCreateHalftonePalette', \ GdipCreateHatchBrush, <NONE>, 'GdipCreateHatchBrush', \ GdipCreateImageAttributes, <NONE>, 'GdipCreateImageAttributes', \ GdipCreateLineBrush, <NONE>, 'GdipCreateLineBrush', \ GdipCreateLineBrushFromRect, <NONE>, 'GdipCreateLineBrushFromRect', \ GdipCreateLineBrushFromRectI, <NONE>, 'GdipCreateLineBrushFromRectI', \ GdipCreateLineBrushFromRectWithAngle, <NONE>, 'GdipCreateLineBrushFromRectWithAngle', \ GdipCreateLineBrushFromRectWithAngleI, <NONE>, 'GdipCreateLineBrushFromRectWithAngleI', \ GdipCreateLineBrushI, <NONE>, 'GdipCreateLineBrushI', \ GdipCreateMatrix, <NONE>, 'GdipCreateMatrix', \ GdipCreateMatrix2, <NONE>, 'GdipCreateMatrix2', \ GdipCreateMatrix3, <NONE>, 'GdipCreateMatrix3', \ GdipCreateMatrix3I, <NONE>, 'GdipCreateMatrix3I', \ GdipCreateMetafileFromEmf, <NONE>, 'GdipCreateMetafileFromEmf', \ GdipCreateMetafileFromFile, <NONE>, 'GdipCreateMetafileFromFile', \ GdipCreateMetafileFromStream, <NONE>, 'GdipCreateMetafileFromStream', \ GdipCreateMetafileFromWmf, <NONE>, 'GdipCreateMetafileFromWmf', \ GdipCreateMetafileFromWmfFile, <NONE>, 'GdipCreateMetafileFromWmfFile', \ GdipCreatePath, <NONE>, 'GdipCreatePath', \ GdipCreatePath2, <NONE>, 'GdipCreatePath2', \ GdipCreatePath2I, <NONE>, 'GdipCreatePath2I', \ GdipCreatePathGradient, <NONE>, 'GdipCreatePathGradient', \ GdipCreatePathGradientFromPath, <NONE>, 'GdipCreatePathGradientFromPath', \ GdipCreatePathGradientI, <NONE>, 'GdipCreatePathGradientI', \ GdipCreatePathIter, <NONE>, 'GdipCreatePathIter', \ GdipCreatePen1, <NONE>, 'GdipCreatePen1', \ GdipCreatePen2, <NONE>, 'GdipCreatePen2', \ GdipCreateRegion, <NONE>, 'GdipCreateRegion', \ GdipCreateRegionHrgn, <NONE>, 'GdipCreateRegionHrgn', \ GdipCreateRegionPath, <NONE>, 'GdipCreateRegionPath', \ GdipCreateRegionRect, <NONE>, 'GdipCreateRegionRect', \ GdipCreateRegionRectI, <NONE>, 'GdipCreateRegionRectI', \ GdipCreateRegionRgnData, <NONE>, 'GdipCreateRegionRgnData', \ GdipCreateSolidFill, <NONE>, 'GdipCreateSolidFill', \ GdipCreateStreamOnFile, <NONE>, 'GdipCreateStreamOnFile', \ GdipCreateStringFormat, <NONE>, 'GdipCreateStringFormat', \ GdipCreateTexture, <NONE>, 'GdipCreateTexture', \ GdipCreateTexture2, <NONE>, 'GdipCreateTexture2', \ GdipCreateTexture2I, <NONE>, 'GdipCreateTexture2I', \ GdipCreateTextureIA, <NONE>, 'GdipCreateTextureIA', \ GdipCreateTextureIAI, <NONE>, 'GdipCreateTextureIAI', \ GdipDeleteBrush, <NONE>, 'GdipDeleteBrush', \ GdipDeleteCachedBitmap, <NONE>, 'GdipDeleteCachedBitmap', \ GdipDeleteCustomLineCap, <NONE>, 'GdipDeleteCustomLineCap', \ GdipDeleteEffect, <NONE>, 'GdipDeleteEffect', \ GdipDeleteFont, <NONE>, 'GdipDeleteFont', \ GdipDeleteFontFamily, <NONE>, 'GdipDeleteFontFamily', \ GdipDeleteGraphics, <NONE>, 'GdipDeleteGraphics', \ GdipDeleteMatrix, <NONE>, 'GdipDeleteMatrix', \ GdipDeletePath, <NONE>, 'GdipDeletePath', \ GdipDeletePathIter, <NONE>, 'GdipDeletePathIter', \ GdipDeletePen, <NONE>, 'GdipDeletePen', \ GdipDeletePrivateFontCollection, <NONE>, 'GdipDeletePrivateFontCollection', \ GdipDeleteRegion, <NONE>, 'GdipDeleteRegion', \ GdipDeleteStringFormat, <NONE>, 'GdipDeleteStringFormat', \ GdipDisposeImage, <NONE>, 'GdipDisposeImage', \ GdipDisposeImageAttributes, <NONE>, 'GdipDisposeImageAttributes', \ GdipDrawArc, <NONE>, 'GdipDrawArc', \ GdipDrawArcI, <NONE>, 'GdipDrawArcI', \ GdipDrawBezier, <NONE>, 'GdipDrawBezier', \ GdipDrawBezierI, <NONE>, 'GdipDrawBezierI', \ GdipDrawBeziers, <NONE>, 'GdipDrawBeziers', \ GdipDrawBeziersI, <NONE>, 'GdipDrawBeziersI', \ GdipDrawCachedBitmap, <NONE>, 'GdipDrawCachedBitmap', \ GdipDrawClosedCurve, <NONE>, 'GdipDrawClosedCurve', \ GdipDrawClosedCurve2, <NONE>, 'GdipDrawClosedCurve2', \ GdipDrawClosedCurve2I, <NONE>, 'GdipDrawClosedCurve2I', \ GdipDrawClosedCurveI, <NONE>, 'GdipDrawClosedCurveI', \ GdipDrawCurve, <NONE>, 'GdipDrawCurve', \ GdipDrawCurve2, <NONE>, 'GdipDrawCurve2', \ GdipDrawCurve2I, <NONE>, 'GdipDrawCurve2I', \ GdipDrawCurve3, <NONE>, 'GdipDrawCurve3', \ GdipDrawCurve3I, <NONE>, 'GdipDrawCurve3I', \ GdipDrawCurveI, <NONE>, 'GdipDrawCurveI', \ GdipDrawDriverString, <NONE>, 'GdipDrawDriverString', \ GdipDrawEllipse, <NONE>, 'GdipDrawEllipse', \ GdipDrawEllipseI, <NONE>, 'GdipDrawEllipseI', \ GdipDrawImage, <NONE>, 'GdipDrawImage', \ GdipDrawImageFX, <NONE>, 'GdipDrawImageFX', \ GdipDrawImageI, <NONE>, 'GdipDrawImageI', \ GdipDrawImagePointRect, <NONE>, 'GdipDrawImagePointRect', \ GdipDrawImagePointRectI, <NONE>, 'GdipDrawImagePointRectI', \ GdipDrawImagePoints, <NONE>, 'GdipDrawImagePoints', \ GdipDrawImagePointsI, <NONE>, 'GdipDrawImagePointsI', \ GdipDrawImagePointsRect, <NONE>, 'GdipDrawImagePointsRect', \ GdipDrawImagePointsRectI, <NONE>, 'GdipDrawImagePointsRectI', \ GdipDrawImageRect, <NONE>, 'GdipDrawImageRect', \ GdipDrawImageRectI, <NONE>, 'GdipDrawImageRectI', \ GdipDrawImageRectRect, <NONE>, 'GdipDrawImageRectRect', \ GdipDrawImageRectRectI, <NONE>, 'GdipDrawImageRectRectI', \ GdipDrawLine, <NONE>, 'GdipDrawLine', \ GdipDrawLineI, <NONE>, 'GdipDrawLineI', \ GdipDrawLines, <NONE>, 'GdipDrawLines', \ GdipDrawLinesI, <NONE>, 'GdipDrawLinesI', \ GdipDrawPath, <NONE>, 'GdipDrawPath', \ GdipDrawPie, <NONE>, 'GdipDrawPie', \ GdipDrawPieI, <NONE>, 'GdipDrawPieI', \ GdipDrawPolygon, <NONE>, 'GdipDrawPolygon', \ GdipDrawPolygonI, <NONE>, 'GdipDrawPolygonI', \ GdipDrawRectangle, <NONE>, 'GdipDrawRectangle', \ GdipDrawRectangleI, <NONE>, 'GdipDrawRectangleI', \ GdipDrawRectangles, <NONE>, 'GdipDrawRectangles', \ GdipDrawRectanglesI, <NONE>, 'GdipDrawRectanglesI', \ GdipDrawString, <NONE>, 'GdipDrawString', \ GdipEmfToWmfBits, <NONE>, 'GdipEmfToWmfBits', \ GdipEndContainer, <NONE>, 'GdipEndContainer', \ GdipEnumerateMetafileDestPoint, <NONE>, 'GdipEnumerateMetafileDestPoint', \ GdipEnumerateMetafileDestPointI, <NONE>, 'GdipEnumerateMetafileDestPointI', \ GdipEnumerateMetafileDestPoints, <NONE>, 'GdipEnumerateMetafileDestPoints', \ GdipEnumerateMetafileDestPointsI, <NONE>, 'GdipEnumerateMetafileDestPointsI', \ GdipEnumerateMetafileDestRect, <NONE>, 'GdipEnumerateMetafileDestRect', \ GdipEnumerateMetafileDestRectI, <NONE>, 'GdipEnumerateMetafileDestRectI', \ GdipEnumerateMetafileSrcRectDestPoint, <NONE>, 'GdipEnumerateMetafileSrcRectDestPoint', \ GdipEnumerateMetafileSrcRectDestPointI, <NONE>, 'GdipEnumerateMetafileSrcRectDestPointI', \ GdipEnumerateMetafileSrcRectDestPoints, <NONE>, 'GdipEnumerateMetafileSrcRectDestPoints', \ GdipEnumerateMetafileSrcRectDestPointsI, <NONE>, 'GdipEnumerateMetafileSrcRectDestPointsI', \ GdipEnumerateMetafileSrcRectDestRect, <NONE>, 'GdipEnumerateMetafileSrcRectDestRect', \ GdipEnumerateMetafileSrcRectDestRectI, <NONE>, 'GdipEnumerateMetafileSrcRectDestRectI', \ GdipFillClosedCurve, <NONE>, 'GdipFillClosedCurve', \ GdipFillClosedCurve2, <NONE>, 'GdipFillClosedCurve2', \ GdipFillClosedCurve2I, <NONE>, 'GdipFillClosedCurve2I', \ GdipFillClosedCurveI, <NONE>, 'GdipFillClosedCurveI', \ GdipFillEllipse, <NONE>, 'GdipFillEllipse', \ GdipFillEllipseI, <NONE>, 'GdipFillEllipseI', \ GdipFillPath, <NONE>, 'GdipFillPath', \ GdipFillPie, <NONE>, 'GdipFillPie', \ GdipFillPieI, <NONE>, 'GdipFillPieI', \ GdipFillPolygon, <NONE>, 'GdipFillPolygon', \ GdipFillPolygon2, <NONE>, 'GdipFillPolygon2', \ GdipFillPolygon2I, <NONE>, 'GdipFillPolygon2I', \ GdipFillPolygonI, <NONE>, 'GdipFillPolygonI', \ GdipFillRectangle, <NONE>, 'GdipFillRectangle', \ GdipFillRectangleI, <NONE>, 'GdipFillRectangleI', \ GdipFillRectangles, <NONE>, 'GdipFillRectangles', \ GdipFillRectanglesI, <NONE>, 'GdipFillRectanglesI', \ GdipFillRegion, <NONE>, 'GdipFillRegion', \ GdipFindFirstImageItem, <NONE>, 'GdipFindFirstImageItem', \ GdipFindNextImageItem, <NONE>, 'GdipFindNextImageItem', \ GdipFlattenPath, <NONE>, 'GdipFlattenPath', \ GdipFlush, <NONE>, 'GdipFlush', \ GdipFree, <NONE>, 'GdipFree', \ GdipGetAdjustableArrowCapFillState, <NONE>, 'GdipGetAdjustableArrowCapFillState', \ GdipGetAdjustableArrowCapHeight, <NONE>, 'GdipGetAdjustableArrowCapHeight', \ GdipGetAdjustableArrowCapMiddleInset, <NONE>, 'GdipGetAdjustableArrowCapMiddleInset', \ GdipGetAdjustableArrowCapWidth, <NONE>, 'GdipGetAdjustableArrowCapWidth', \ GdipGetAllPropertyItems, <NONE>, 'GdipGetAllPropertyItems', \ GdipGetBrushType, <NONE>, 'GdipGetBrushType', \ GdipGetCellAscent, <NONE>, 'GdipGetCellAscent', \ GdipGetCellDescent, <NONE>, 'GdipGetCellDescent', \ GdipGetClip, <NONE>, 'GdipGetClip', \ GdipGetClipBounds, <NONE>, 'GdipGetClipBounds', \ GdipGetClipBoundsI, <NONE>, 'GdipGetClipBoundsI', \ GdipGetCompositingMode, <NONE>, 'GdipGetCompositingMode', \ GdipGetCompositingQuality, <NONE>, 'GdipGetCompositingQuality', \ GdipGetCustomLineCapBaseCap, <NONE>, 'GdipGetCustomLineCapBaseCap', \ GdipGetCustomLineCapBaseInset, <NONE>, 'GdipGetCustomLineCapBaseInset', \ GdipGetCustomLineCapStrokeCaps, <NONE>, 'GdipGetCustomLineCapStrokeCaps', \ GdipGetCustomLineCapStrokeJoin, <NONE>, 'GdipGetCustomLineCapStrokeJoin', \ GdipGetCustomLineCapType, <NONE>, 'GdipGetCustomLineCapType', \ GdipGetCustomLineCapWidthScale, <NONE>, 'GdipGetCustomLineCapWidthScale', \ GdipGetDC, <NONE>, 'GdipGetDC', \ GdipGetDpiX, <NONE>, 'GdipGetDpiX', \ GdipGetDpiY, <NONE>, 'GdipGetDpiY', \ GdipGetEffectParameterSize, <NONE>, 'GdipGetEffectParameterSize', \ GdipGetEffectParameters, <NONE>, 'GdipGetEffectParameters', \ GdipGetEmHeight, <NONE>, 'GdipGetEmHeight', \ GdipGetEncoderParameterList, <NONE>, 'GdipGetEncoderParameterList', \ GdipGetEncoderParameterListSize, <NONE>, 'GdipGetEncoderParameterListSize', \ GdipGetFamily, <NONE>, 'GdipGetFamily', \ GdipGetFamilyName, <NONE>, 'GdipGetFamilyName', \ GdipGetFontCollectionFamilyCount, <NONE>, 'GdipGetFontCollectionFamilyCount', \ GdipGetFontCollectionFamilyList, <NONE>, 'GdipGetFontCollectionFamilyList', \ GdipGetFontHeight, <NONE>, 'GdipGetFontHeight', \ GdipGetFontHeightGivenDPI, <NONE>, 'GdipGetFontHeightGivenDPI', \ GdipGetFontSize, <NONE>, 'GdipGetFontSize', \ GdipGetFontStyle, <NONE>, 'GdipGetFontStyle', \ GdipGetFontUnit, <NONE>, 'GdipGetFontUnit', \ GdipGetGenericFontFamilyMonospace, <NONE>, 'GdipGetGenericFontFamilyMonospace', \ GdipGetGenericFontFamilySansSerif, <NONE>, 'GdipGetGenericFontFamilySansSerif', \ GdipGetGenericFontFamilySerif, <NONE>, 'GdipGetGenericFontFamilySerif', \ GdipGetHatchBackgroundColor, <NONE>, 'GdipGetHatchBackgroundColor', \ GdipGetHatchForegroundColor, <NONE>, 'GdipGetHatchForegroundColor', \ GdipGetHatchStyle, <NONE>, 'GdipGetHatchStyle', \ GdipGetHemfFromMetafile, <NONE>, 'GdipGetHemfFromMetafile', \ GdipGetImageAttributesAdjustedPalette, <NONE>, 'GdipGetImageAttributesAdjustedPalette', \ GdipGetImageBounds, <NONE>, 'GdipGetImageBounds', \ GdipGetImageDecoders, <NONE>, 'GdipGetImageDecoders', \ GdipGetImageDecodersSize, <NONE>, 'GdipGetImageDecodersSize', \ GdipGetImageDimension, <NONE>, 'GdipGetImageDimension', \ GdipGetImageEncoders, <NONE>, 'GdipGetImageEncoders', \ GdipGetImageEncodersSize, <NONE>, 'GdipGetImageEncodersSize', \ GdipGetImageFlags, <NONE>, 'GdipGetImageFlags', \ GdipGetImageGraphicsContext, <NONE>, 'GdipGetImageGraphicsContext', \ GdipGetImageHeight, <NONE>, 'GdipGetImageHeight', \ GdipGetImageHorizontalResolution, <NONE>, 'GdipGetImageHorizontalResolution', \ GdipGetImageItemData, <NONE>, 'GdipGetImageItemData', \ GdipGetImagePalette, <NONE>, 'GdipGetImagePalette', \ GdipGetImagePaletteSize, <NONE>, 'GdipGetImagePaletteSize', \ GdipGetImagePixelFormat, <NONE>, 'GdipGetImagePixelFormat', \ GdipGetImageRawFormat, <NONE>, 'GdipGetImageRawFormat', \ GdipGetImageThumbnail, <NONE>, 'GdipGetImageThumbnail', \ GdipGetImageType, <NONE>, 'GdipGetImageType', \ GdipGetImageVerticalResolution, <NONE>, 'GdipGetImageVerticalResolution', \ GdipGetImageWidth, <NONE>, 'GdipGetImageWidth', \ GdipGetInterpolationMode, <NONE>, 'GdipGetInterpolationMode', \ GdipGetLineBlend, <NONE>, 'GdipGetLineBlend', \ GdipGetLineBlendCount, <NONE>, 'GdipGetLineBlendCount', \ GdipGetLineColors, <NONE>, 'GdipGetLineColors', \ GdipGetLineGammaCorrection, <NONE>, 'GdipGetLineGammaCorrection', \ GdipGetLinePresetBlend, <NONE>, 'GdipGetLinePresetBlend', \ GdipGetLinePresetBlendCount, <NONE>, 'GdipGetLinePresetBlendCount', \ GdipGetLineRect, <NONE>, 'GdipGetLineRect', \ GdipGetLineRectI, <NONE>, 'GdipGetLineRectI', \ GdipGetLineSpacing, <NONE>, 'GdipGetLineSpacing', \ GdipGetLineTransform, <NONE>, 'GdipGetLineTransform', \ GdipGetLineWrapMode, <NONE>, 'GdipGetLineWrapMode', \ GdipGetLogFontA, <NONE>, 'GdipGetLogFontA', \ GdipGetLogFontW, <NONE>, 'GdipGetLogFontW', \ GdipGetMatrixElements, <NONE>, 'GdipGetMatrixElements', \ GdipGetMetafileDownLevelRasterizationLimit, <NONE>, 'GdipGetMetafileDownLevelRasterizationLimit', \ GdipGetMetafileHeaderFromEmf, <NONE>, 'GdipGetMetafileHeaderFromEmf', \ GdipGetMetafileHeaderFromFile, <NONE>, 'GdipGetMetafileHeaderFromFile', \ GdipGetMetafileHeaderFromMetafile, <NONE>, 'GdipGetMetafileHeaderFromMetafile', \ GdipGetMetafileHeaderFromStream, <NONE>, 'GdipGetMetafileHeaderFromStream', \ GdipGetMetafileHeaderFromWmf, <NONE>, 'GdipGetMetafileHeaderFromWmf', \ GdipGetNearestColor, <NONE>, 'GdipGetNearestColor', \ GdipGetPageScale, <NONE>, 'GdipGetPageScale', \ GdipGetPageUnit, <NONE>, 'GdipGetPageUnit', \ GdipGetPathData, <NONE>, 'GdipGetPathData', \ GdipGetPathFillMode, <NONE>, 'GdipGetPathFillMode', \ GdipGetPathGradientBlend, <NONE>, 'GdipGetPathGradientBlend', \ GdipGetPathGradientBlendCount, <NONE>, 'GdipGetPathGradientBlendCount', \ GdipGetPathGradientCenterColor, <NONE>, 'GdipGetPathGradientCenterColor', \ GdipGetPathGradientCenterPoint, <NONE>, 'GdipGetPathGradientCenterPoint', \ GdipGetPathGradientCenterPointI, <NONE>, 'GdipGetPathGradientCenterPointI', \ GdipGetPathGradientFocusScales, <NONE>, 'GdipGetPathGradientFocusScales', \ GdipGetPathGradientGammaCorrection, <NONE>, 'GdipGetPathGradientGammaCorrection', \ GdipGetPathGradientPath, <NONE>, 'GdipGetPathGradientPath', \ GdipGetPathGradientPointCount, <NONE>, 'GdipGetPathGradientPointCount', \ GdipGetPathGradientPresetBlend, <NONE>, 'GdipGetPathGradientPresetBlend', \ GdipGetPathGradientPresetBlendCount, <NONE>, 'GdipGetPathGradientPresetBlendCount', \ GdipGetPathGradientRect, <NONE>, 'GdipGetPathGradientRect', \ GdipGetPathGradientRectI, <NONE>, 'GdipGetPathGradientRectI', \ GdipGetPathGradientSurroundColorCount, <NONE>, 'GdipGetPathGradientSurroundColorCount', \ GdipGetPathGradientSurroundColorsWithCount, <NONE>, 'GdipGetPathGradientSurroundColorsWithCount', \ GdipGetPathGradientTransform, <NONE>, 'GdipGetPathGradientTransform', \ GdipGetPathGradientWrapMode, <NONE>, 'GdipGetPathGradientWrapMode', \ GdipGetPathLastPoint, <NONE>, 'GdipGetPathLastPoint', \ GdipGetPathPoints, <NONE>, 'GdipGetPathPoints', \ GdipGetPathPointsI, <NONE>, 'GdipGetPathPointsI', \ GdipGetPathTypes, <NONE>, 'GdipGetPathTypes', \ GdipGetPathWorldBounds, <NONE>, 'GdipGetPathWorldBounds', \ GdipGetPathWorldBoundsI, <NONE>, 'GdipGetPathWorldBoundsI', \ GdipGetPenBrushFill, <NONE>, 'GdipGetPenBrushFill', \ GdipGetPenColor, <NONE>, 'GdipGetPenColor', \ GdipGetPenCompoundArray, <NONE>, 'GdipGetPenCompoundArray', \ GdipGetPenCompoundCount, <NONE>, 'GdipGetPenCompoundCount', \ GdipGetPenCustomEndCap, <NONE>, 'GdipGetPenCustomEndCap', \ GdipGetPenCustomStartCap, <NONE>, 'GdipGetPenCustomStartCap', \ GdipGetPenDashArray, <NONE>, 'GdipGetPenDashArray', \ GdipGetPenDashCap197819, <NONE>, 'GdipGetPenDashCap197819', \ GdipGetPenDashCount, <NONE>, 'GdipGetPenDashCount', \ GdipGetPenDashOffset, <NONE>, 'GdipGetPenDashOffset', \ GdipGetPenDashStyle, <NONE>, 'GdipGetPenDashStyle', \ GdipGetPenEndCap, <NONE>, 'GdipGetPenEndCap', \ GdipGetPenFillType, <NONE>, 'GdipGetPenFillType', \ GdipGetPenLineJoin, <NONE>, 'GdipGetPenLineJoin', \ GdipGetPenMiterLimit, <NONE>, 'GdipGetPenMiterLimit', \ GdipGetPenMode, <NONE>, 'GdipGetPenMode', \ GdipGetPenStartCap, <NONE>, 'GdipGetPenStartCap', \ GdipGetPenTransform, <NONE>, 'GdipGetPenTransform', \ GdipGetPenUnit, <NONE>, 'GdipGetPenUnit', \ GdipGetPenWidth, <NONE>, 'GdipGetPenWidth', \ GdipGetPixelOffsetMode, <NONE>, 'GdipGetPixelOffsetMode', \ GdipGetPointCount, <NONE>, 'GdipGetPointCount', \ GdipGetPropertyCount, <NONE>, 'GdipGetPropertyCount', \ GdipGetPropertyIdList, <NONE>, 'GdipGetPropertyIdList', \ GdipGetPropertyItem, <NONE>, 'GdipGetPropertyItem', \ GdipGetPropertyItemSize, <NONE>, 'GdipGetPropertyItemSize', \ GdipGetPropertySize, <NONE>, 'GdipGetPropertySize', \ GdipGetRegionBounds, <NONE>, 'GdipGetRegionBounds', \ GdipGetRegionBoundsI, <NONE>, 'GdipGetRegionBoundsI', \ GdipGetRegionData, <NONE>, 'GdipGetRegionData', \ GdipGetRegionDataSize, <NONE>, 'GdipGetRegionDataSize', \ GdipGetRegionHRgn, <NONE>, 'GdipGetRegionHRgn', \ GdipGetRegionScans, <NONE>, 'GdipGetRegionScans', \ GdipGetRegionScansCount, <NONE>, 'GdipGetRegionScansCount', \ GdipGetRegionScansI, <NONE>, 'GdipGetRegionScansI', \ GdipGetRenderingOrigin, <NONE>, 'GdipGetRenderingOrigin', \ GdipGetSmoothingMode, <NONE>, 'GdipGetSmoothingMode', \ GdipGetSolidFillColor, <NONE>, 'GdipGetSolidFillColor', \ GdipGetStringFormatAlign, <NONE>, 'GdipGetStringFormatAlign', \ GdipGetStringFormatDigitSubstitution, <NONE>, 'GdipGetStringFormatDigitSubstitution', \ GdipGetStringFormatFlags, <NONE>, 'GdipGetStringFormatFlags', \ GdipGetStringFormatHotkeyPrefix, <NONE>, 'GdipGetStringFormatHotkeyPrefix', \ GdipGetStringFormatLineAlign, <NONE>, 'GdipGetStringFormatLineAlign', \ GdipGetStringFormatMeasurableCharacterRangeCount, <NONE>, 'GdipGetStringFormatMeasurableCharacterRangeCount', \ GdipGetStringFormatTabStopCount, <NONE>, 'GdipGetStringFormatTabStopCount', \ GdipGetStringFormatTabStops, <NONE>, 'GdipGetStringFormatTabStops', \ GdipGetStringFormatTrimming, <NONE>, 'GdipGetStringFormatTrimming', \ GdipGetTextContrast, <NONE>, 'GdipGetTextContrast', \ GdipGetTextRenderingHint, <NONE>, 'GdipGetTextRenderingHint', \ GdipGetTextureImage, <NONE>, 'GdipGetTextureImage', \ GdipGetTextureTransform, <NONE>, 'GdipGetTextureTransform', \ GdipGetTextureWrapMode, <NONE>, 'GdipGetTextureWrapMode', \ GdipGetVisibleClipBounds, <NONE>, 'GdipGetVisibleClipBounds', \ GdipGetVisibleClipBoundsI, <NONE>, 'GdipGetVisibleClipBoundsI', \ GdipGetWorldTransform, <NONE>, 'GdipGetWorldTransform', \ GdipGraphicsClear, <NONE>, 'GdipGraphicsClear', \ GdipGraphicsSetAbort, <NONE>, 'GdipGraphicsSetAbort', \ GdipImageForceValidation, <NONE>, 'GdipImageForceValidation', \ GdipImageGetFrameCount, <NONE>, 'GdipImageGetFrameCount', \ GdipImageGetFrameDimensionsCount, <NONE>, 'GdipImageGetFrameDimensionsCount', \ GdipImageGetFrameDimensionsList, <NONE>, 'GdipImageGetFrameDimensionsList', \ GdipImageRotateFlip, <NONE>, 'GdipImageRotateFlip', \ GdipImageSelectActiveFrame, <NONE>, 'GdipImageSelectActiveFrame', \ GdipImageSetAbort, <NONE>, 'GdipImageSetAbort', \ GdipInitializePalette, <NONE>, 'GdipInitializePalette', \ GdipInvertMatrix, <NONE>, 'GdipInvertMatrix', \ GdipIsClipEmpty, <NONE>, 'GdipIsClipEmpty', \ GdipIsEmptyRegion, <NONE>, 'GdipIsEmptyRegion', \ GdipIsEqualRegion, <NONE>, 'GdipIsEqualRegion', \ GdipIsInfiniteRegion, <NONE>, 'GdipIsInfiniteRegion', \ GdipIsMatrixEqual, <NONE>, 'GdipIsMatrixEqual', \ GdipIsMatrixIdentity, <NONE>, 'GdipIsMatrixIdentity', \ GdipIsMatrixInvertible, <NONE>, 'GdipIsMatrixInvertible', \ GdipIsOutlineVisiblePathPoint, <NONE>, 'GdipIsOutlineVisiblePathPoint', \ GdipIsOutlineVisiblePathPointI, <NONE>, 'GdipIsOutlineVisiblePathPointI', \ GdipIsStyleAvailable, <NONE>, 'GdipIsStyleAvailable', \ GdipIsVisibleClipEmpty, <NONE>, 'GdipIsVisibleClipEmpty', \ GdipIsVisiblePathPoint, <NONE>, 'GdipIsVisiblePathPoint', \ GdipIsVisiblePathPointI, <NONE>, 'GdipIsVisiblePathPointI', \ GdipIsVisiblePoint, <NONE>, 'GdipIsVisiblePoint', \ GdipIsVisiblePointI, <NONE>, 'GdipIsVisiblePointI', \ GdipIsVisibleRect, <NONE>, 'GdipIsVisibleRect', \ GdipIsVisibleRectI, <NONE>, 'GdipIsVisibleRectI', \ GdipIsVisibleRegionPoint, <NONE>, 'GdipIsVisibleRegionPoint', \ GdipIsVisibleRegionPointI, <NONE>, 'GdipIsVisibleRegionPointI', \ GdipIsVisibleRegionRect, <NONE>, 'GdipIsVisibleRegionRect', \ GdipIsVisibleRegionRectI, <NONE>, 'GdipIsVisibleRegionRectI', \ GdipLoadImageFromFile, <NONE>, 'GdipLoadImageFromFile', \ GdipLoadImageFromFileICM, <NONE>, 'GdipLoadImageFromFileICM', \ GdipLoadImageFromStream, <NONE>, 'GdipLoadImageFromStream', \ GdipLoadImageFromStreamICM, <NONE>, 'GdipLoadImageFromStreamICM', \ GdipMeasureCharacterRanges, <NONE>, 'GdipMeasureCharacterRanges', \ GdipMeasureDriverString, <NONE>, 'GdipMeasureDriverString', \ GdipMeasureString, <NONE>, 'GdipMeasureString', \ GdipMultiplyLineTransform, <NONE>, 'GdipMultiplyLineTransform', \ GdipMultiplyMatrix, <NONE>, 'GdipMultiplyMatrix', \ GdipMultiplyPathGradientTransform, <NONE>, 'GdipMultiplyPathGradientTransform', \ GdipMultiplyPenTransform, <NONE>, 'GdipMultiplyPenTransform', \ GdipMultiplyTextureTransform, <NONE>, 'GdipMultiplyTextureTransform', \ GdipMultiplyWorldTransform, <NONE>, 'GdipMultiplyWorldTransform', \ GdipNewInstalledFontCollection, <NONE>, 'GdipNewInstalledFontCollection', \ GdipNewPrivateFontCollection, <NONE>, 'GdipNewPrivateFontCollection', \ GdipPathIterCopyData, <NONE>, 'GdipPathIterCopyData', \ GdipPathIterEnumerate, <NONE>, 'GdipPathIterEnumerate', \ GdipPathIterGetCount, <NONE>, 'GdipPathIterGetCount', \ GdipPathIterGetSubpathCount, <NONE>, 'GdipPathIterGetSubpathCount', \ GdipPathIterHasCurve, <NONE>, 'GdipPathIterHasCurve', \ GdipPathIterIsValid, <NONE>, 'GdipPathIterIsValid', \ GdipPathIterNextMarker, <NONE>, 'GdipPathIterNextMarker', \ GdipPathIterNextMarkerPath, <NONE>, 'GdipPathIterNextMarkerPath', \ GdipPathIterNextPathType, <NONE>, 'GdipPathIterNextPathType', \ GdipPathIterNextSubpath, <NONE>, 'GdipPathIterNextSubpath', \ GdipPathIterNextSubpathPath, <NONE>, 'GdipPathIterNextSubpathPath', \ GdipPathIterRewind, <NONE>, 'GdipPathIterRewind', \ GdipPlayMetafileRecord, <NONE>, 'GdipPlayMetafileRecord', \ GdipPlayTSClientRecord, <NONE>, 'GdipPlayTSClientRecord', \ GdipPrivateAddFontFile, <NONE>, 'GdipPrivateAddFontFile', \ GdipPrivateAddMemoryFont, <NONE>, 'GdipPrivateAddMemoryFont', \ GdipRecordMetafile, <NONE>, 'GdipRecordMetafile', \ GdipRecordMetafileFileName, <NONE>, 'GdipRecordMetafileFileName', \ GdipRecordMetafileFileNameI, <NONE>, 'GdipRecordMetafileFileNameI', \ GdipRecordMetafileI, <NONE>, 'GdipRecordMetafileI', \ GdipRecordMetafileStream, <NONE>, 'GdipRecordMetafileStream', \ GdipRecordMetafileStreamI, <NONE>, 'GdipRecordMetafileStreamI', \ GdipReleaseDC, <NONE>, 'GdipReleaseDC', \ GdipRemovePropertyItem, <NONE>, 'GdipRemovePropertyItem', \ GdipResetClip, <NONE>, 'GdipResetClip', \ GdipResetImageAttributes, <NONE>, 'GdipResetImageAttributes', \ GdipResetLineTransform, <NONE>, 'GdipResetLineTransform', \ GdipResetPageTransform, <NONE>, 'GdipResetPageTransform', \ GdipResetPath, <NONE>, 'GdipResetPath', \ GdipResetPathGradientTransform, <NONE>, 'GdipResetPathGradientTransform', \ GdipResetPenTransform, <NONE>, 'GdipResetPenTransform', \ GdipResetTextureTransform, <NONE>, 'GdipResetTextureTransform', \ GdipResetWorldTransform, <NONE>, 'GdipResetWorldTransform', \ GdipRestoreGraphics, <NONE>, 'GdipRestoreGraphics', \ GdipReversePath, <NONE>, 'GdipReversePath', \ GdipRotateLineTransform, <NONE>, 'GdipRotateLineTransform', \ GdipRotateMatrix, <NONE>, 'GdipRotateMatrix', \ GdipRotatePathGradientTransform, <NONE>, 'GdipRotatePathGradientTransform', \ GdipRotatePenTransform, <NONE>, 'GdipRotatePenTransform', \ GdipRotateTextureTransform, <NONE>, 'GdipRotateTextureTransform', \ GdipRotateWorldTransform, <NONE>, 'GdipRotateWorldTransform', \ GdipSaveAdd, <NONE>, 'GdipSaveAdd', \ GdipSaveAddImage, <NONE>, 'GdipSaveAddImage', \ GdipSaveGraphics, <NONE>, 'GdipSaveGraphics', \ GdipSaveImageToFile, <NONE>, 'GdipSaveImageToFile', \ GdipSaveImageToStream, <NONE>, 'GdipSaveImageToStream', \ GdipScaleLineTransform, <NONE>, 'GdipScaleLineTransform', \ GdipScaleMatrix, <NONE>, 'GdipScaleMatrix', \ GdipScalePathGradientTransform, <NONE>, 'GdipScalePathGradientTransform', \ GdipScalePenTransform, <NONE>, 'GdipScalePenTransform', \ GdipScaleTextureTransform, <NONE>, 'GdipScaleTextureTransform', \ GdipScaleWorldTransform, <NONE>, 'GdipScaleWorldTransform', \ GdipSetAdjustableArrowCapFillState, <NONE>, 'GdipSetAdjustableArrowCapFillState', \ GdipSetAdjustableArrowCapHeight, <NONE>, 'GdipSetAdjustableArrowCapHeight', \ GdipSetAdjustableArrowCapMiddleInset, <NONE>, 'GdipSetAdjustableArrowCapMiddleInset', \ GdipSetAdjustableArrowCapWidth, <NONE>, 'GdipSetAdjustableArrowCapWidth', \ GdipSetClipGraphics, <NONE>, 'GdipSetClipGraphics', \ GdipSetClipHrgn, <NONE>, 'GdipSetClipHrgn', \ GdipSetClipPath, <NONE>, 'GdipSetClipPath', \ GdipSetClipRect, <NONE>, 'GdipSetClipRect', \ GdipSetClipRectI, <NONE>, 'GdipSetClipRectI', \ GdipSetClipRegion, <NONE>, 'GdipSetClipRegion', \ GdipSetCompositingMode, <NONE>, 'GdipSetCompositingMode', \ GdipSetCompositingQuality, <NONE>, 'GdipSetCompositingQuality', \ GdipSetCustomLineCapBaseCap, <NONE>, 'GdipSetCustomLineCapBaseCap', \ GdipSetCustomLineCapBaseInset, <NONE>, 'GdipSetCustomLineCapBaseInset', \ GdipSetCustomLineCapStrokeCaps, <NONE>, 'GdipSetCustomLineCapStrokeCaps', \ GdipSetCustomLineCapStrokeJoin, <NONE>, 'GdipSetCustomLineCapStrokeJoin', \ GdipSetCustomLineCapWidthScale, <NONE>, 'GdipSetCustomLineCapWidthScale', \ GdipSetEffectParameters, <NONE>, 'GdipSetEffectParameters', \ GdipSetEmpty, <NONE>, 'GdipSetEmpty', \ GdipSetImageAttributesCachedBackground, <NONE>, 'GdipSetImageAttributesCachedBackground', \ GdipSetImageAttributesColorKeys, <NONE>, 'GdipSetImageAttributesColorKeys', \ GdipSetImageAttributesColorMatrix, <NONE>, 'GdipSetImageAttributesColorMatrix', \ GdipSetImageAttributesGamma, <NONE>, 'GdipSetImageAttributesGamma', \ GdipSetImageAttributesNoOp, <NONE>, 'GdipSetImageAttributesNoOp', \ GdipSetImageAttributesOutputChannel, <NONE>, 'GdipSetImageAttributesOutputChannel', \ GdipSetImageAttributesOutputChannelColorProfile, <NONE>, 'GdipSetImageAttributesOutputChannelColorProfile', \ GdipSetImageAttributesRemapTable, <NONE>, 'GdipSetImageAttributesRemapTable', \ GdipSetImageAttributesThreshold, <NONE>, 'GdipSetImageAttributesThreshold', \ GdipSetImageAttributesToIdentity, <NONE>, 'GdipSetImageAttributesToIdentity', \ GdipSetImageAttributesWrapMode, <NONE>, 'GdipSetImageAttributesWrapMode', \ GdipSetImagePalette, <NONE>, 'GdipSetImagePalette', \ GdipSetInfinite, <NONE>, 'GdipSetInfinite', \ GdipSetInterpolationMode, <NONE>, 'GdipSetInterpolationMode', \ GdipSetLineBlend, <NONE>, 'GdipSetLineBlend', \ GdipSetLineColors, <NONE>, 'GdipSetLineColors', \ GdipSetLineGammaCorrection, <NONE>, 'GdipSetLineGammaCorrection', \ GdipSetLineLinearBlend, <NONE>, 'GdipSetLineLinearBlend', \ GdipSetLinePresetBlend, <NONE>, 'GdipSetLinePresetBlend', \ GdipSetLineSigmaBlend, <NONE>, 'GdipSetLineSigmaBlend', \ GdipSetLineTransform, <NONE>, 'GdipSetLineTransform', \ GdipSetLineWrapMode, <NONE>, 'GdipSetLineWrapMode', \ GdipSetMatrixElements, <NONE>, 'GdipSetMatrixElements', \ GdipSetMetafileDownLevelRasterizationLimit, <NONE>, 'GdipSetMetafileDownLevelRasterizationLimit', \ GdipSetPageScale, <NONE>, 'GdipSetPageScale', \ GdipSetPageUnit, <NONE>, 'GdipSetPageUnit', \ GdipSetPathFillMode, <NONE>, 'GdipSetPathFillMode', \ GdipSetPathGradientBlend, <NONE>, 'GdipSetPathGradientBlend', \ GdipSetPathGradientCenterColor, <NONE>, 'GdipSetPathGradientCenterColor', \ GdipSetPathGradientCenterPoint, <NONE>, 'GdipSetPathGradientCenterPoint', \ GdipSetPathGradientCenterPointI, <NONE>, 'GdipSetPathGradientCenterPointI', \ GdipSetPathGradientFocusScales, <NONE>, 'GdipSetPathGradientFocusScales', \ GdipSetPathGradientGammaCorrection, <NONE>, 'GdipSetPathGradientGammaCorrection', \ GdipSetPathGradientLinearBlend, <NONE>, 'GdipSetPathGradientLinearBlend', \ GdipSetPathGradientPath, <NONE>, 'GdipSetPathGradientPath', \ GdipSetPathGradientPresetBlend, <NONE>, 'GdipSetPathGradientPresetBlend', \ GdipSetPathGradientSigmaBlend, <NONE>, 'GdipSetPathGradientSigmaBlend', \ GdipSetPathGradientSurroundColorsWithCount, <NONE>, 'GdipSetPathGradientSurroundColorsWithCount', \ GdipSetPathGradientTransform, <NONE>, 'GdipSetPathGradientTransform', \ GdipSetPathGradientWrapMode, <NONE>, 'GdipSetPathGradientWrapMode', \ GdipSetPathMarker, <NONE>, 'GdipSetPathMarker', \ GdipSetPenBrushFill, <NONE>, 'GdipSetPenBrushFill', \ GdipSetPenColor, <NONE>, 'GdipSetPenColor', \ GdipSetPenCompoundArray, <NONE>, 'GdipSetPenCompoundArray', \ GdipSetPenCustomEndCap, <NONE>, 'GdipSetPenCustomEndCap', \ GdipSetPenCustomStartCap, <NONE>, 'GdipSetPenCustomStartCap', \ GdipSetPenDashArray, <NONE>, 'GdipSetPenDashArray', \ GdipSetPenDashCap197819, <NONE>, 'GdipSetPenDashCap197819', \ GdipSetPenDashOffset, <NONE>, 'GdipSetPenDashOffset', \ GdipSetPenDashStyle, <NONE>, 'GdipSetPenDashStyle', \ GdipSetPenEndCap, <NONE>, 'GdipSetPenEndCap', \ GdipSetPenLineCap197819, <NONE>, 'GdipSetPenLineCap197819', \ GdipSetPenLineJoin, <NONE>, 'GdipSetPenLineJoin', \ GdipSetPenMiterLimit, <NONE>, 'GdipSetPenMiterLimit', \ GdipSetPenMode, <NONE>, 'GdipSetPenMode', \ GdipSetPenStartCap, <NONE>, 'GdipSetPenStartCap', \ GdipSetPenTransform, <NONE>, 'GdipSetPenTransform', \ GdipSetPenUnit, <NONE>, 'GdipSetPenUnit', \ GdipSetPenWidth, <NONE>, 'GdipSetPenWidth', \ GdipSetPixelOffsetMode, <NONE>, 'GdipSetPixelOffsetMode', \ GdipSetPropertyItem, <NONE>, 'GdipSetPropertyItem', \ GdipSetRenderingOrigin, <NONE>, 'GdipSetRenderingOrigin', \ GdipSetSmoothingMode, <NONE>, 'GdipSetSmoothingMode', \ GdipSetSolidFillColor, <NONE>, 'GdipSetSolidFillColor', \ GdipSetStringFormatAlign, <NONE>, 'GdipSetStringFormatAlign', \ GdipSetStringFormatDigitSubstitution, <NONE>, 'GdipSetStringFormatDigitSubstitution', \ GdipSetStringFormatFlags, <NONE>, 'GdipSetStringFormatFlags', \ GdipSetStringFormatHotkeyPrefix, <NONE>, 'GdipSetStringFormatHotkeyPrefix', \ GdipSetStringFormatLineAlign, <NONE>, 'GdipSetStringFormatLineAlign', \ GdipSetStringFormatMeasurableCharacterRanges, <NONE>, 'GdipSetStringFormatMeasurableCharacterRanges', \ GdipSetStringFormatTabStops, <NONE>, 'GdipSetStringFormatTabStops', \ GdipSetStringFormatTrimming, <NONE>, 'GdipSetStringFormatTrimming', \ GdipSetTextContrast, <NONE>, 'GdipSetTextContrast', \ GdipSetTextRenderingHint, <NONE>, 'GdipSetTextRenderingHint', \ GdipSetTextureTransform, <NONE>, 'GdipSetTextureTransform', \ GdipSetTextureWrapMode, <NONE>, 'GdipSetTextureWrapMode', \ GdipSetWorldTransform, <NONE>, 'GdipSetWorldTransform', \ GdipShearMatrix, <NONE>, 'GdipShearMatrix', \ GdipStartPathFigure, <NONE>, 'GdipStartPathFigure', \ GdipStringFormatGetGenericDefault, <NONE>, 'GdipStringFormatGetGenericDefault', \ GdipStringFormatGetGenericTypographic, <NONE>, 'GdipStringFormatGetGenericTypographic', \ GdipTestControl, <NONE>, 'GdipTestControl', \ GdipTransformMatrixPoints, <NONE>, 'GdipTransformMatrixPoints', \ GdipTransformMatrixPointsI, <NONE>, 'GdipTransformMatrixPointsI', \ GdipTransformPath, <NONE>, 'GdipTransformPath', \ GdipTransformPoints, <NONE>, 'GdipTransformPoints', \ GdipTransformPointsI, <NONE>, 'GdipTransformPointsI', \ GdipTransformRegion, <NONE>, 'GdipTransformRegion', \ GdipTranslateClip, <NONE>, 'GdipTranslateClip', \ GdipTranslateClipI, <NONE>, 'GdipTranslateClipI', \ GdipTranslateLineTransform, <NONE>, 'GdipTranslateLineTransform', \ GdipTranslateMatrix, <NONE>, 'GdipTranslateMatrix', \ GdipTranslatePathGradientTransform, <NONE>, 'GdipTranslatePathGradientTransform', \ GdipTranslatePenTransform, <NONE>, 'GdipTranslatePenTransform', \ GdipTranslateRegion, <NONE>, 'GdipTranslateRegion', \ GdipTranslateRegionI, <NONE>, 'GdipTranslateRegionI', \ GdipTranslateTextureTransform, <NONE>, 'GdipTranslateTextureTransform', \ GdipTranslateWorldTransform, <NONE>, 'GdipTranslateWorldTransform', \ GdipVectorTransformMatrixPoints, <NONE>, 'GdipVectorTransformMatrixPoints', \ GdipVectorTransformMatrixPointsI, <NONE>, 'GdipVectorTransformMatrixPointsI', \ GdipWarpPath, <NONE>, 'GdipWarpPath', \ GdipWidenPath, <NONE>, 'GdipWidenPath', \ GdipWindingModeOutline, <NONE>, 'GdipWindingModeOutline', \ GdiplusNotificationHook, <NONE>, 'GdiplusNotificationHook', \ GdiplusNotificationUnhook, <NONE>, 'GdiplusNotificationUnhook', \ GdiplusShutdown, <NONE>, 'GdiplusShutdown', \ GdiplusStartup, <NONE>, 'GdiplusStartup' |
Added freshlib/imports/Win32/kernel32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: kernel32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto kernel32, \ ActivateActCtx, <NONE>, 'ActivateActCtx', \ AddAtomA, <.lpString>, 'AddAtomA', \ AddAtomW, <.lpString>, 'AddAtomW', \ AddConsoleAliasA, <NONE>, 'AddConsoleAliasA', \ AddConsoleAliasW, <NONE>, 'AddConsoleAliasW', \ AddLocalAlternateComputerNameA, <NONE>, 'AddLocalAlternateComputerNameA', \ AddLocalAlternateComputerNameW, <NONE>, 'AddLocalAlternateComputerNameW', \ AddRefActCtx, <NONE>, 'AddRefActCtx', \ AddVectoredExceptionHandler, <NONE>, 'AddVectoredExceptionHandler', \ AllocConsole, <VOID>, 'AllocConsole', \ AllocateUserPhysicalPages, <.hProcess, .NumberOfPages, .PageArray>, 'AllocateUserPhysicalPages', \ AreFileApisANSI, <VOID>, 'AreFileApisANSI', \ AssignProcessToJobObject, <.hJob, .hProcess>, 'AssignProcessToJobObject', \ AttachConsole, <NONE>, 'AttachConsole', \ BackupRead, <.hFile, .lpBuffer, .nNumberOfBytesToRead, .lpNumberOfBytesRead, .bAbort, .bProcessSecurity, .lpContext>, 'BackupRead', \ BackupSeek, <.hFile, .dwLowBytesToSeek, .dwHighBytesToSeek, .lpdwLowByteSeeked, .lpdwHighByteSeeked, .lpContext>, 'BackupSeek', \ BackupWrite, <.hFile, .lpBuffer, .nNumberOfBytesToWrite, .lpNumberOfBytesWritten, .bAbort, .bProcessSecurity, .lpContext>, 'BackupWrite', \ BaseCheckAppcompatCache, <NONE>, 'BaseCheckAppcompatCache', \ BaseCleanupAppcompatCache, <NONE>, 'BaseCleanupAppcompatCache', \ BaseCleanupAppcompatCacheSupport, <NONE>, 'BaseCleanupAppcompatCacheSupport', \ BaseDumpAppcompatCache, <NONE>, 'BaseDumpAppcompatCache', \ BaseFlushAppcompatCache, <NONE>, 'BaseFlushAppcompatCache', \ BaseInitAppcompatCache, <NONE>, 'BaseInitAppcompatCache', \ BaseInitAppcompatCacheSupport, <NONE>, 'BaseInitAppcompatCacheSupport', \ BaseProcessInitPostImport, <NONE>, 'BaseProcessInitPostImport', \ BaseQueryModuleData, <NONE>, 'BaseQueryModuleData', \ BaseUpdateAppcompatCache, <NONE>, 'BaseUpdateAppcompatCache', \ BasepCheckWinSaferRestrictions, <NONE>, 'BasepCheckWinSaferRestrictions', \ Beep, <.dwFreq, .dwDuration>, 'Beep', \ BeginUpdateResourceA, <.pFileName, .bDeleteExistingResources>, 'BeginUpdateResourceA', \ BeginUpdateResourceW, <.pFileName, .bDeleteExistingResources>, 'BeginUpdateResourceW', \ BindIoCompletionCallback, <.FileHandle, .lFunction, .Flags>, 'BindIoCompletionCallback', \ BuildCommDCBA, <.lpDef, .lpDCB>, 'BuildCommDCBA', \ BuildCommDCBAndTimeoutsA, <.lpDef, .lpDCB, .lpCommTimeouts>, 'BuildCommDCBAndTimeoutsA', \ BuildCommDCBAndTimeoutsW, <.lpDef, .lpDCB, .lpCommTimeouts>, 'BuildCommDCBAndTimeoutsW', \ BuildCommDCBW, <.lpDef, .lpDCB>, 'BuildCommDCBW', \ CallNamedPipeA, <.lpNamedPipeName, .lpInBuffer, .nInBufferSize, .lpOutBuffer, .nOutBufferSize, .lpBytesRead, .nTimeOut>, 'CallNamedPipeA', \ CallNamedPipeW, <.lpNamedPipeName, .lpInBuffer, .nInBufferSize, .lpOutBuffer, .nOutBufferSize, .lpBytesRead, .nTimeOut>, 'CallNamedPipeW', \ CancelDeviceWakeupRequest, <.hDevice>, 'CancelDeviceWakeupRequest', \ CancelIo, <.hFile>, 'CancelIo', \ CancelTimerQueueTimer, <.TimerQueue, .Timer>, 'CancelTimerQueueTimer', \ CancelWaitableTimer, <.hTimer>, 'CancelWaitableTimer', \ ChangeTimerQueueTimer, <.TimerQueue, .Timer, .DueTime, .Period>, 'ChangeTimerQueueTimer', \ CheckNameLegalDOS8Dot3A, <NONE>, 'CheckNameLegalDOS8Dot3A', \ CheckNameLegalDOS8Dot3W, <NONE>, 'CheckNameLegalDOS8Dot3W', \ CheckRemoteDebuggerPresent, <NONE>, 'CheckRemoteDebuggerPresent', \ ClearCommBreak, <.nCid>, 'ClearCommBreak', \ ClearCommError, <.hFile, .lpErrors, .lpStat>, 'ClearCommError', \ CloseConsoleHandle, <NONE>, 'CloseConsoleHandle', \ CloseHandle, <.hObject>, 'CloseHandle', \ CloseProfileUserMapping, <NONE>, 'CloseProfileUserMapping', \ CmdBatNotification, <NONE>, 'CmdBatNotification', \ CommConfigDialogA, <.lpszName, .hWnd, .lpCC>, 'CommConfigDialogA', \ CommConfigDialogW, <.lpszName, .hWnd, .lpCC>, 'CommConfigDialogW', \ CompareFileTime, <.lpFileTime1, .lpFileTime2>, 'CompareFileTime', \ CompareStringA, <.Locale, .dwCmpFlags, .lpString1, .cchCount1, .lpString2, .cchCount2>, 'CompareStringA', \ CompareStringW, <.Locale, .dwCmpFlags, .lpString1, .cchCount1, .lpString2, .cchCount2>, 'CompareStringW', \ ConnectNamedPipe, <.hNamedPipe, .lpOverlapped>, 'ConnectNamedPipe', \ ConsoleMenuControl, <NONE>, 'ConsoleMenuControl', \ ContinueDebugEvent, <.dwProcessId, .dwThreadId, .dwContinueStatus>, 'ContinueDebugEvent', \ ConvertDefaultLocale, <.Locale>, 'ConvertDefaultLocale', \ ConvertFiberToThread, <NONE>, 'ConvertFiberToThread', \ ConvertThreadToFiber, <.lpParameter>, 'ConvertThreadToFiber', \ CopyFileA, <.lpExistingFileName, .lpNewFileName, .bFailIfExists>, 'CopyFileA', \ CopyFileExA, <.lpExistingFileName, .lpNewFileName, .lpProgressRoutine, .lpData, .pbCancel, .dwCopyFlags>, 'CopyFileExA', \ CopyFileExW, <.lpExistingFileName, .lpNewFileName, .lpProgressRoutine, .lpData, .pbCancel, .dwCopyFlags>, 'CopyFileExW', \ CopyFileW, <.lpExistingFileName, .lpNewFileName, .bFailIfExists>, 'CopyFileW', \ CopyLZFile, <.n1, .n2>, 'CopyLZFile', \ CreateActCtxA, <NONE>, 'CreateActCtxA', \ CreateActCtxW, <NONE>, 'CreateActCtxW', \ CreateConsoleScreenBuffer, <.dwDesiredAccess, .dwShareMode, .lpSecurityAttributes, .dwFlags, .lpScreenBufferData>, 'CreateConsoleScreenBuffer', \ CreateDirectoryA, <.lpPathName, .lpSecurityAttributes>, 'CreateDirectoryA', \ CreateDirectoryExA, <.lpTemplateDirectory, .lpNewDirectory, .lpSecurityAttributes>, 'CreateDirectoryExA', \ CreateDirectoryExW, <.lpTemplateDirectory, .lpNewDirectory, .lpSecurityAttributes>, 'CreateDirectoryExW', \ CreateDirectoryW, <.lpPathName, .lpSecurityAttributes>, 'CreateDirectoryW', \ CreateEventA, <.lpEventAttributes, .bManualReset, .bInitialState, .lpName>, 'CreateEventA', \ CreateEventW, <.lpEventAttributes, .bManualReset, .bInitialState, .lpName>, 'CreateEventW', \ CreateFiber, <.dwStackSize, .lpStartAddress, .lpParameter>, 'CreateFiber', \ CreateFiberEx, <NONE>, 'CreateFiberEx', \ CreateFileA, <.lpFileName, .dwDesiredAccess, .dwShareMode, .lpSecurityAttributes, .dwCreationDisposition, .dwFlagsAndAttributes, \ .hTemplateFile>, 'CreateFileA', \ CreateFileMappingA, <.hFile, .lpFileMappigAttributes, .flProtect, .dwMaximumSizeHigh, .dwMaximumSizeLow, .lpName>, 'CreateFileMappingA', \ CreateFileMappingW, <.hFile, .lpFileMappigAttributes, .flProtect, .dwMaximumSizeHigh, .dwMaximumSizeLow, .lpName>, 'CreateFileMappingW', \ CreateFileW, <.lpFileName, .dwDesiredAccess, .dwShareMode, .lpSecurityAttributes, .dwCreationDisposition, .dwFlagsAndAttributes, \ .hTemplateFile>, 'CreateFileW', \ CreateHardLinkA, <.lpFileName, .lpExistingFileName, .lpSecurityAttributes>, 'CreateHardLinkA', \ CreateHardLinkW, <.lpFileName, .lpExistingFileName, .lpSecurityAttributes>, 'CreateHardLinkW', \ CreateIoCompletionPort, <.FileHandle, .ExistingCompletionPort, .CompletionKey, .NumberOfConcurrentThreads>, 'CreateIoCompletionPort', \ CreateJobObjectA, <.lpJobAttributes, .lpName>, 'CreateJobObjectA', \ CreateJobObjectW, <.lpJobAttributes, .lpName>, 'CreateJobObjectW', \ CreateJobSet, <NONE>, 'CreateJobSet', \ CreateMailslotA, <.lpName, .nMaxMessageSize, .lReadTimeout, .lpSecurityAttributes>, 'CreateMailslotA', \ CreateMailslotW, <.lpName, .nMaxMessageSize, .lReadTimeout, .lpSecurityAttributes>, 'CreateMailslotW', \ CreateMemoryResourceNotification, <NONE>, 'CreateMemoryResourceNotification', \ CreateMutexA, <.lpMutexAttributes, .bInitialOwner, .lpName>, 'CreateMutexA', \ CreateMutexW, <.lpMutexAttributes, .bInitialOwner, .lpName>, 'CreateMutexW', \ CreateNamedPipeA, <.lpName, .dwOpenMode, .dwPipeMode, .nMaxInstances, .nOutBufferSize, .nInBufferSize, .nDefaultTimeOut, .lpSecurityAttributes, \ >, 'CreateNamedPipeA', \ CreateNamedPipeW, <.lpName, .dwOpenMode, .dwPipeMode, .nMaxInstances, .nOutBufferSize, .nInBufferSize, .nDefaultTimeOut, .lpSecurityAttributes, \ >, 'CreateNamedPipeW', \ CreateNlsSecurityDescriptor, <NONE>, 'CreateNlsSecurityDescriptor', \ CreatePipe, <.phReadPipe, .phWritePipe, .lpPipeAttributes, .nSize>, 'CreatePipe', \ CreateProcessA, <.lpApplicationName, .lpCommandLine, .lpProcessAttributes, .lpThreadAttributes, .bInheritHandles, .dwCreationFlags, \ .lpEnvironment, .lpCurrentDriectory, .lpStartupInfo, .lpProcessInformation>, 'CreateProcessA', \ CreateProcessInternalA, <NONE>, 'CreateProcessInternalA', \ CreateProcessInternalW, <NONE>, 'CreateProcessInternalW', \ CreateProcessInternalWSecure, <NONE>, 'CreateProcessInternalWSecure', \ CreateProcessW, <.lpApplicationName, .lpCommandLine, .lpProcessAttributes, .lpThreadAttributes, .bInheritHandles, .dwCreationFlags, \ .lpEnvironment, .lpCurrentDriectory, .lpStartupInfo, .lpProcessInformation>, 'CreateProcessW', \ CreateRemoteThread, <.hProcess, .lpThreadAttributes, .dwStackSize, .lpStartAddress, .lpParameter, .dwCreationFlags, .lpThreadId, \ >, 'CreateRemoteThread', \ CreateSemaphoreA, <.lpSemaphoreAttributes, .lInitialCount, .lMaximumCount, .lpName>, 'CreateSemaphoreA', \ CreateSemaphoreW, <.lpSemaphoreAttributes, .lInitialCount, .lMaximumCount, .lpName>, 'CreateSemaphoreW', \ CreateSocketHandle, <NONE>, 'CreateSocketHandle', \ CreateTapePartition, <.hDevice, .dwPartitionMethod, .dwCount, .dwSize>, 'CreateTapePartition', \ CreateThread, <.lpThreadAttributes, .dwStackSize, .lpStartAddress, .lpParameter, .dwCreationFlags, .lpThreadId>, 'CreateThread', \ CreateTimerQueue, <VOID>, 'CreateTimerQueue', \ CreateTimerQueueTimer, <NONE>, 'CreateTimerQueueTimer', \ CreateToolhelp32Snapshot, <.dwFlags, .th32ProcessID>, 'CreateToolhelp32Snapshot', \ CreateVirtualBuffer, <NONE>, 'CreateVirtualBuffer', \ CreateWaitableTimerA, <.lpTimerAttributes, .bManualReset, .lpTimerName>, 'CreateWaitableTimerA', \ CreateWaitableTimerW, <.lpTimerAttributes, .bManualReset, .lpTimerName>, 'CreateWaitableTimerW', \ DeactivateActCtx, <NONE>, 'DeactivateActCtx', \ DebugActiveProcess, <.dwProcessId>, 'DebugActiveProcess', \ DebugActiveProcessStop, <NONE>, 'DebugActiveProcessStop', \ DebugBreak, <VOID>, 'DebugBreak', \ DebugBreakProcess, <NONE>, 'DebugBreakProcess', \ DebugSetProcessKillOnExit, <NONE>, 'DebugSetProcessKillOnExit', \ DecodePointer, <NONE>, 'DecodePointer', \ DecodeSystemPointer, <NONE>, 'DecodeSystemPointer', \ DefineDosDeviceA, <.dwFlags, .lpDeviceName, .lpTargetPath>, 'DefineDosDeviceA', \ DefineDosDeviceW, <.dwFlags, .lpDeviceName, .lpTargetPath>, 'DefineDosDeviceW', \ DelayLoadFailureHook, <NONE>, 'DelayLoadFailureHook', \ DeleteAtom, <.nAtom>, 'DeleteAtom', \ DeleteCriticalSection, <.lpCriticalSection>, 'DeleteCriticalSection', \ DeleteFiber, <.lpFiber>, 'DeleteFiber', \ DeleteFileA, <.lpFileName>, 'DeleteFileA', \ DeleteFileW, <.lpFileName>, 'DeleteFileW', \ DeleteTimerQueue, <.TimerQueue>, 'DeleteTimerQueue', \ DeleteTimerQueueEx, <.TimerQueue, .CompletionEvent>, 'DeleteTimerQueueEx', \ DeleteTimerQueueTimer, <.TimerQueue, .Timer, .CompletionEvent>, 'DeleteTimerQueueTimer', \ DeleteVolumeMountPointA, <.lpszVolumeMountPoint>, 'DeleteVolumeMountPointA', \ DeleteVolumeMountPointW, <.lpszVolumeMountPoint>, 'DeleteVolumeMountPointW', \ DeviceIoControl, <.hDevice, .dwIoControlCode, .lpInBuffer, .nInBufferSize, .lpOutBuffer, .nOutBufferSize, .lpBytesReturned, .lpOverlapped, \ >, 'DeviceIoControl', \ DisableThreadLibraryCalls, <.hLibModule>, 'DisableThreadLibraryCalls', \ DisconnectNamedPipe, <.hNamedPipe>, 'DisconnectNamedPipe', \ DnsHostnameToComputerNameA, <.Hostname, .ComputerName, .nSize>, 'DnsHostnameToComputerNameA', \ DnsHostnameToComputerNameW, <.Hostname, .ComputerName, .nSize>, 'DnsHostnameToComputerNameW', \ DosDateTimeToFileTime, <.wFatDate, .wFatTime, .lpFileTime>, 'DosDateTimeToFileTime', \ DosPathToSessionPathA, <.SessionId, .pInPath, .ppOutPath>, 'DosPathToSessionPathA', \ DosPathToSessionPathW, <.SessionId, .pInPath, .ppOutPath>, 'DosPathToSessionPathW', \ DuplicateConsoleHandle, <NONE>, 'DuplicateConsoleHandle', \ DuplicateHandle, <.hSourceProcessHandle, .hSourceHandle, .hTargetProcessHandle, .lpTargetHandle, .dwDesiredAccess, .bInheritHandle, \ .dwOptions>, 'DuplicateHandle', \ EncodePointer, <NONE>, 'EncodePointer', \ EncodeSystemPointer, <NONE>, 'EncodeSystemPointer', \ EndUpdateResourceA, <.hUpdate, .fDiscard>, 'EndUpdateResourceA', \ EndUpdateResourceW, <.hUpdate, .fDiscard>, 'EndUpdateResourceW', \ EnterCriticalSection, <.lpCriticalSection>, 'EnterCriticalSection', \ EnumCalendarInfoA, <.lpCalInfoEnumProc, .Locale, .Calendar, .CalType>, 'EnumCalendarInfoA', \ EnumCalendarInfoExA, <.lpCalInfoEnumProcEx, .Locale, .Calendar, .CalType>, 'EnumCalendarInfoExA', \ EnumCalendarInfoExW, <.lpCalInfoEnumProcEx, .Locale, .Calendar, .CalType>, 'EnumCalendarInfoExW', \ EnumCalendarInfoW, <.lpCalInfoEnumProc, .Locale, .Calendar, .CalType>, 'EnumCalendarInfoW', \ EnumDateFormatsA, <.lpDateFmtEnumProc, .Locale, .dwFlags>, 'EnumDateFormatsA', \ EnumDateFormatsExA, <.lpDateFmtEnumProcEx, .Locale, .dwFlags>, 'EnumDateFormatsExA', \ EnumDateFormatsExW, <.lpDateFmtEnumProcEx, .Locale, .dwFlags>, 'EnumDateFormatsExW', \ EnumDateFormatsW, <.lpDateFmtEnumProc, .Locale, .dwFlags>, 'EnumDateFormatsW', \ EnumLanguageGroupLocalesA, <.lpLangGroupLocaleEnumProc, .LanguageGroup, .dwFlags, .lParam>, 'EnumLanguageGroupLocalesA', \ EnumLanguageGroupLocalesW, <.lpLangGroupLocaleEnumProc, .LanguageGroup, .dwFlags, .lParam>, 'EnumLanguageGroupLocalesW', \ EnumResourceLanguagesA, <.hModule, .lpType, .lpName, .lpEnumFunc, .lParam>, 'EnumResourceLanguagesA', \ EnumResourceLanguagesW, <.hModule, .lpType, .lpName, .lpEnumFunc, .lParam>, 'EnumResourceLanguagesW', \ EnumResourceNamesA, <.hModule, .lpType, .lpEnumFunc, .lParam>, 'EnumResourceNamesA', \ EnumResourceNamesW, <.hModule, .lpType, .lpEnumFunc, .lParam>, 'EnumResourceNamesW', \ EnumResourceTypesA, <.hModule, .lpEnumFunc, .lParam>, 'EnumResourceTypesA', \ EnumResourceTypesW, <.hModule, .lpEnumFunc, .lParam>, 'EnumResourceTypesW', \ EnumSystemCodePagesA, <.lpCodePageEnumProc, .dwFlags>, 'EnumSystemCodePagesA', \ EnumSystemCodePagesW, <.lpCodePageEnumProc, .dwFlags>, 'EnumSystemCodePagesW', \ EnumSystemGeoID, <NONE>, 'EnumSystemGeoID', \ EnumSystemLanguageGroupsA, <.lpLanguageGroupEnumProc, .dwFlags, .lParam>, 'EnumSystemLanguageGroupsA', \ EnumSystemLanguageGroupsW, <.lpLanguageGroupEnumProc, .dwFlags, .lParam>, 'EnumSystemLanguageGroupsW', \ EnumSystemLocalesA, <.lpLocaleEnumProc, .dwFlags>, 'EnumSystemLocalesA', \ EnumSystemLocalesW, <.lpLocaleEnumProc, .dwFlags>, 'EnumSystemLocalesW', \ EnumTimeFormatsA, <.lpTimeFmtEnumProc, .Locale, .dwFlags>, 'EnumTimeFormatsA', \ EnumTimeFormatsW, <.lpTimeFmtEnumProc, .Locale, .dwFlags>, 'EnumTimeFormatsW', \ EnumUILanguagesA, <.lpUILanguageEnumProc, .dwFlags, .lParam>, 'EnumUILanguagesA', \ EnumUILanguagesW, <.lpUILanguageEnumProc, .dwFlags, .lParam>, 'EnumUILanguagesW', \ EnumerateLocalComputerNamesA, <NONE>, 'EnumerateLocalComputerNamesA', \ EnumerateLocalComputerNamesW, <NONE>, 'EnumerateLocalComputerNamesW', \ EraseTape, <.hDevice, .dwEraseType, .bimmediate>, 'EraseTape', \ EscapeCommFunction, <.nCid, .nFunc>, 'EscapeCommFunction', \ ExitProcess, <.uExitCode>, 'ExitProcess', \ ExitThread, <.dwExitCode>, 'ExitThread', \ ExitVDM, <NONE>, 'ExitVDM', \ ExpandEnvironmentStringsA, <.lpSrc, .lpDst, .nSize>, 'ExpandEnvironmentStringsA', \ ExpandEnvironmentStringsW, <.lpSrc, .lpDst, .nSize>, 'ExpandEnvironmentStringsW', \ ExpungeConsoleCommandHistoryA, <NONE>, 'ExpungeConsoleCommandHistoryA', \ ExpungeConsoleCommandHistoryW, <NONE>, 'ExpungeConsoleCommandHistoryW', \ ExtendVirtualBuffer, <NONE>, 'ExtendVirtualBuffer', \ FatalAppExitA, <.uAction, .lpMessageText>, 'FatalAppExitA', \ FatalAppExitW, <.uAction, .lpMessageText>, 'FatalAppExitW', \ FatalExit, <.code>, 'FatalExit', \ FileTimeToDosDateTime, <.lpFileTime, .lpFatDate, .lpFatTime>, 'FileTimeToDosDateTime', \ FileTimeToLocalFileTime, <.lpFileTime, .lpLocalFileTime>, 'FileTimeToLocalFileTime', \ FileTimeToSystemTime, <.lpFileTime, .lpSystemTime>, 'FileTimeToSystemTime', \ FillConsoleOutputAttribute, <.hConsoleOutput, .wAttribute, .nLength, .dwWriteCoord, .lpNumberOfAttrsWritten>, 'FillConsoleOutputAttribute', \ FillConsoleOutputCharacterA, <.hConsoleOutput, .cCharacter, .nLength, .dwWriteCoord, .lpNumberOfCharsWritten>, 'FillConsoleOutputCharacterA', \ FillConsoleOutputCharacterW, <.hConsoleOutput, .cCharacter, .nLength, .dwWriteCoord, .lpNumberOfCharsWritten>, 'FillConsoleOutputCharacterW', \ FindActCtxSectionGuid, <NONE>, 'FindActCtxSectionGuid', \ FindActCtxSectionStringA, <NONE>, 'FindActCtxSectionStringA', \ FindActCtxSectionStringW, <NONE>, 'FindActCtxSectionStringW', \ FindAtomA, <.lpString>, 'FindAtomA', \ FindAtomW, <.lpString>, 'FindAtomW', \ FindClose, <.hFindFile>, 'FindClose', \ FindCloseChangeNotification, <.hChangeHandle>, 'FindCloseChangeNotification', \ FindFirstChangeNotificationA, <.lpPathName, .bWatchSubtree, .dwNotifyFilter>, 'FindFirstChangeNotificationA', \ FindFirstChangeNotificationW, <.lpPathName, .bWatchSubtree, .dwNotifyFilter>, 'FindFirstChangeNotificationW', \ FindFirstFileA, <.lpFileName, .lpFindFileData>, 'FindFirstFileA', \ FindFirstFileExA, <.lpFileName, .fInfoLevelId, .lpFindFileData, .fSearchOp, .lpSearchFilter, .dwAdditionalFlags>, 'FindFirstFileExA', \ FindFirstFileExW, <.lpFileName, .fInfoLevelId, .lpFindFileData, .fSearchOp, .lpSearchFilter, .dwAdditionalFlags>, 'FindFirstFileExW', \ FindFirstFileW, <.lpFileName, .lpFindFileData>, 'FindFirstFileW', \ FindFirstVolumeA, <.lpszVolumeName, .cchBufferLength>, 'FindFirstVolumeA', \ FindFirstVolumeMountPointA, <.lpszRootPathName, .lpszVolumeMountPoint, .cchBufferLength>, 'FindFirstVolumeMountPointA', \ FindFirstVolumeMountPointW, <.lpszRootPathName, .lpszVolumeMountPoint, .cchBufferLength>, 'FindFirstVolumeMountPointW', \ FindFirstVolumeW, <.lpszVolumeName, .cchBufferLength>, 'FindFirstVolumeW', \ FindNextChangeNotification, <.hChangeHandle>, 'FindNextChangeNotification', \ FindNextFileA, <.hFindFile, .lpFindFileData>, 'FindNextFileA', \ FindNextFileW, <.hFindFile, .lpFindFileData>, 'FindNextFileW', \ FindNextVolumeA, <.hFindVolume, .lpszVolumeName, .cchBufferLength>, 'FindNextVolumeA', \ FindNextVolumeMountPointA, <.hFindVolumeMountPoint, .lpszVolumeMountPoint, .cchBufferLength>, 'FindNextVolumeMountPointA', \ FindNextVolumeMountPointW, <.hFindVolumeMountPoint, .lpszVolumeMountPoint, .cchBufferLength>, 'FindNextVolumeMountPointW', \ FindNextVolumeW, <.hFindVolume, .lpszVolumeName, .cchBufferLength>, 'FindNextVolumeW', \ FindResourceA, <.hInstance, .lpName, .lpType>, 'FindResourceA', \ FindResourceExA, <.hModule, .lpType, .lpName, .wLanguage>, 'FindResourceExA', \ FindResourceExW, <.hModule, .lpType, .lpName, .wLanguage>, 'FindResourceExW', \ FindResourceW, <.hInstance, .lpName, .lpType>, 'FindResourceW', \ FindVolumeClose, <.hFindVolume>, 'FindVolumeClose', \ FindVolumeMountPointClose, <.hFindVolumeMountPoint>, 'FindVolumeMountPointClose', \ FlushConsoleInputBuffer, <.hConsoleInput>, 'FlushConsoleInputBuffer', \ FlushFileBuffers, <.hFile>, 'FlushFileBuffers', \ FlushInstructionCache, <.hProcess, .lpBaseAddress, .dwSize>, 'FlushInstructionCache', \ FlushViewOfFile, <.lpBaseAddress, .dwNumberOfBytesToFlush>, 'FlushViewOfFile', \ FoldStringA, <.dwMapFlags, .lpSrcStr, .cchSrc, .lpDestStr, .cchDest>, 'FoldStringA', \ FoldStringW, <.dwMapFlags, .lpSrcStr, .cchSrc, .lpDestStr, .cchDest>, 'FoldStringW', \ FormatMessageA, <.dwFlags, .lpSource, .dwMessageId, .dwLanguageId, .lpBuffer, .nSize, .Arguments>, 'FormatMessageA', \ FormatMessageW, <.dwFlags, .lpSource, .dwMessageId, .dwLanguageId, .lpBuffer, .nSize, .Arguments>, 'FormatMessageW', \ FreeConsole, <VOID>, 'FreeConsole', \ FreeEnvironmentStringsA, <.lpsz>, 'FreeEnvironmentStringsA', \ FreeEnvironmentStringsW, <.lpsz>, 'FreeEnvironmentStringsW', \ FreeLibrary, <.hLibModule>, 'FreeLibrary', \ FreeLibraryAndExitThread, <.hLibModule, .dwExitCode>, 'FreeLibraryAndExitThread', \ FreeResource, <.hResData>, 'FreeResource', \ FreeUserPhysicalPages, <.hProcess, .NumberOfPages, .PageArray>, 'FreeUserPhysicalPages', \ FreeVirtualBuffer, <NONE>, 'FreeVirtualBuffer', \ GenerateConsoleCtrlEvent, <.dwCtrlEvent, .dwProcessGroupId>, 'GenerateConsoleCtrlEvent', \ GetACP, <VOID>, 'GetACP', \ GetAtomNameA, <.nAtom, .lpBuffer, .nSize>, 'GetAtomNameA', \ GetAtomNameW, <.nAtom, .lpBuffer, .nSize>, 'GetAtomNameW', \ GetBinaryType, <.lpApplicationName, .lpBinaryType>, 'GetBinaryType', \ GetBinaryTypeA, <.lpApplicationName, .lpBinaryType>, 'GetBinaryTypeA', \ GetBinaryTypeW, <.lpApplicationName, .lpBinaryType>, 'GetBinaryTypeW', \ GetCPFileNameFromRegistry, <NONE>, 'GetCPFileNameFromRegistry', \ GetCPInfo, <.CodePage, .lpCPInfo>, 'GetCPInfo', \ GetCPInfoExA, <.CodePage, .dwFlags, .lpCPInfoEx>, 'GetCPInfoExA', \ GetCPInfoExW, <.CodePage, .dwFlags, .lpCPInfoEx>, 'GetCPInfoExW', \ GetCalendarInfoA, <.Locale, .Calendar, .CalType, .lpCalData, .cchData, .lpValue>, 'GetCalendarInfoA', \ GetCalendarInfoW, <.Locale, .Calendar, .CalType, .lpCalData, .cchData, .lpValue>, 'GetCalendarInfoW', \ GetComPlusPackageInstallStatus, <NONE>, 'GetComPlusPackageInstallStatus', \ GetCommConfig, <.hCommDev, .lpCC, .lpdwSize>, 'GetCommConfig', \ GetCommMask, <.hFile, .lpEvtMask>, 'GetCommMask', \ GetCommModemStatus, <.hFile, .lpModemStat>, 'GetCommModemStatus', \ GetCommProperties, <.hFile, .lpCommProp>, 'GetCommProperties', \ GetCommState, <.nCid, .lpDCB>, 'GetCommState', \ GetCommTimeouts, <.hFile, .lpCommTimeouts>, 'GetCommTimeouts', \ GetCommandLineA, <VOID>, 'GetCommandLineA', \ GetCommandLineW, <VOID>, 'GetCommandLineW', \ GetCompressedFileSizeA, <.lpFileName, .lpFileSizeHigh>, 'GetCompressedFileSizeA', \ GetCompressedFileSizeW, <.lpFileName, .lpFileSizeHigh>, 'GetCompressedFileSizeW', \ GetComputerNameA, <.lpBuffer, .nSize>, 'GetComputerNameA', \ GetComputerNameExA, <.NameType, .lpBuffer, .nSize>, 'GetComputerNameExA', \ GetComputerNameExW, <.NameType, .lpBuffer, .nSize>, 'GetComputerNameExW', \ GetComputerNameW, <.lpBuffer, .nSize>, 'GetComputerNameW', \ GetConsoleAliasA, <NONE>, 'GetConsoleAliasA', \ GetConsoleAliasExesA, <NONE>, 'GetConsoleAliasExesA', \ GetConsoleAliasExesLengthA, <NONE>, 'GetConsoleAliasExesLengthA', \ GetConsoleAliasExesLengthW, <NONE>, 'GetConsoleAliasExesLengthW', \ GetConsoleAliasExesW, <NONE>, 'GetConsoleAliasExesW', \ GetConsoleAliasW, <NONE>, 'GetConsoleAliasW', \ GetConsoleAliasesA, <NONE>, 'GetConsoleAliasesA', \ GetConsoleAliasesLengthA, <NONE>, 'GetConsoleAliasesLengthA', \ GetConsoleAliasesLengthW, <NONE>, 'GetConsoleAliasesLengthW', \ GetConsoleAliasesW, <NONE>, 'GetConsoleAliasesW', \ GetConsoleCP, <VOID>, 'GetConsoleCP', \ GetConsoleCharType, <NONE>, 'GetConsoleCharType', \ GetConsoleCommandHistoryA, <NONE>, 'GetConsoleCommandHistoryA', \ GetConsoleCommandHistoryLengthA, <NONE>, 'GetConsoleCommandHistoryLengthA', \ GetConsoleCommandHistoryLengthW, <NONE>, 'GetConsoleCommandHistoryLengthW', \ GetConsoleCommandHistoryW, <NONE>, 'GetConsoleCommandHistoryW', \ GetConsoleCursorInfo, <.hConsoleOutput, .lpConsoleCursorInfo>, 'GetConsoleCursorInfo', \ GetConsoleCursorMode, <NONE>, 'GetConsoleCursorMode', \ GetConsoleDisplayMode, <NONE>, 'GetConsoleDisplayMode', \ GetConsoleFontInfo, <NONE>, 'GetConsoleFontInfo', \ GetConsoleFontSize, <NONE>, 'GetConsoleFontSize', \ GetConsoleHardwareState, <NONE>, 'GetConsoleHardwareState', \ GetConsoleInputExeNameA, <NONE>, 'GetConsoleInputExeNameA', \ GetConsoleInputExeNameW, <NONE>, 'GetConsoleInputExeNameW', \ GetConsoleInputWaitHandle, <NONE>, 'GetConsoleInputWaitHandle', \ GetConsoleKeyboardLayoutNameA, <NONE>, 'GetConsoleKeyboardLayoutNameA', \ GetConsoleKeyboardLayoutNameW, <NONE>, 'GetConsoleKeyboardLayoutNameW', \ GetConsoleMode, <.hConsoleHandle, .lpMode>, 'GetConsoleMode', \ GetConsoleNlsMode, <NONE>, 'GetConsoleNlsMode', \ GetConsoleOutputCP, <VOID>, 'GetConsoleOutputCP', \ GetConsoleProcessList, <NONE>, 'GetConsoleProcessList', \ GetConsoleScreenBufferInfo, <.hConsoleOutput, .lpConsoleScreenBufferInfo>, 'GetConsoleScreenBufferInfo', \ GetConsoleSelectionInfo, <NONE>, 'GetConsoleSelectionInfo', \ GetConsoleTitleA, <.lpConsoleTitle, .nSize>, 'GetConsoleTitleA', \ GetConsoleTitleW, <.lpConsoleTitle, .nSize>, 'GetConsoleTitleW', \ GetConsoleWindow, <NONE>, 'GetConsoleWindow', \ GetCurrencyFormatA, <.Locale, .dwFlags, .lpValue, .lpFormat, .lpCurrencyStr, .cchCurrency>, 'GetCurrencyFormatA', \ GetCurrencyFormatW, <.Locale, .dwFlags, .lpValue, .lpFormat, .lpCurrencyStr, .cchCurrency>, 'GetCurrencyFormatW', \ GetCurrentActCtx, <NONE>, 'GetCurrentActCtx', \ GetCurrentConsoleFont, <NONE>, 'GetCurrentConsoleFont', \ GetCurrentDirectoryA, <.nBufferLength, .lpBuffer>, 'GetCurrentDirectoryA', \ GetCurrentDirectoryW, <.nBufferLength, .lpBuffer>, 'GetCurrentDirectoryW', \ GetCurrentProcess, <VOID>, 'GetCurrentProcess', \ GetCurrentProcessId, <VOID>, 'GetCurrentProcessId', \ GetCurrentThread, <VOID>, 'GetCurrentThread', \ GetCurrentThreadId, <VOID>, 'GetCurrentThreadId', \ GetDateFormatA, <.Locale, .dwFlags, .lpDate, .lpFormat, .lpDateStr, .cchDate>, 'GetDateFormatA', \ GetDateFormatW, <.Locale, .dwFlags, .lpDate, .lpFormat, .lpDateStr, .cchDate>, 'GetDateFormatW', \ GetDefaultCommConfigA, <.lpszName, .lpCC, .lpdwSize>, 'GetDefaultCommConfigA', \ GetDefaultCommConfigW, <.lpszName, .lpCC, .lpdwSize>, 'GetDefaultCommConfigW', \ GetDefaultSortkeySize, <NONE>, 'GetDefaultSortkeySize', \ GetDevicePowerState, <.hDevice, .pfOn>, 'GetDevicePowerState', \ GetDiskFreeSpaceA, <.lpRootPathName, .lpSectorsPerCluster, .lpBytesPerSector, .lpNumberOfFreeClusters, .lpTotalNumberOfClusters, \ >, 'GetDiskFreeSpaceA', \ GetDiskFreeSpaceExA, <.lpDirectoryName, .lpFreeBytesAvailableToCaller, .lpTotalNumberOfBytes, .lpTotalNumberOfFreeBytes>, 'GetDiskFreeSpaceExA', \ GetDiskFreeSpaceExW, <.lpDirectoryName, .lpFreeBytesAvailableToCaller, .lpTotalNumberOfBytes, .lpTotalNumberOfFreeBytes>, 'GetDiskFreeSpaceExW', \ GetDiskFreeSpaceW, <.lpRootPathName, .lpSectorsPerCluster, .lpBytesPerSector, .lpNumberOfFreeClusters, .lpTotalNumberOfClusters, \ >, 'GetDiskFreeSpaceW', \ GetDllDirectoryA, <NONE>, 'GetDllDirectoryA', \ GetDllDirectoryW, <NONE>, 'GetDllDirectoryW', \ GetDriveTypeA, <.nDrive>, 'GetDriveTypeA', \ GetDriveTypeW, <.nDrive>, 'GetDriveTypeW', \ GetEnvironmentStrings, <VOID>, 'GetEnvironmentStrings', \ GetEnvironmentStringsA, <VOID>, 'GetEnvironmentStringsA', \ GetEnvironmentStringsW, <VOID>, 'GetEnvironmentStringsW', \ GetEnvironmentVariableA, <.lpName, .lpBuffer, .nSize>, 'GetEnvironmentVariableA', \ GetEnvironmentVariableW, <.lpName, .lpBuffer, .nSize>, 'GetEnvironmentVariableW', \ GetExitCodeProcess, <.hProcess, .lpExitCode>, 'GetExitCodeProcess', \ GetExitCodeThread, <.hThread, .lpExitCode>, 'GetExitCodeThread', \ GetExpandedNameA, <.lpszSource, .lpszBuffer>, 'GetExpandedNameA', \ GetExpandedNameW, <.lpszSource, .lpszBuffer>, 'GetExpandedNameW', \ GetFileAttributesA, <.lpFileName>, 'GetFileAttributesA', \ GetFileAttributesExA, <.lpFileName, .fInfoLevelId, .lpFileInformation>, 'GetFileAttributesExA', \ GetFileAttributesExW, <.lpFileName, .fInfoLevelId, .lpFileInformation>, 'GetFileAttributesExW', \ GetFileAttributesW, <.lpFileName>, 'GetFileAttributesW', \ GetFileInformationByHandle, <.hFile, .lpFileInformation>, 'GetFileInformationByHandle', \ GetFileSize, <.hFile, .lpFileSizeHigh>, 'GetFileSize', \ GetFileSizeEx, <.hFile, .lpFileSize>, 'GetFileSizeEx', \ GetFileTime, <.hFile, .lpCreationTime, .lpLastAccessTime, .lpLastWriteTime>, 'GetFileTime', \ GetFileType, <.hFile>, 'GetFileType', \ GetFirmwareEnvironmentVariableA, <NONE>, 'GetFirmwareEnvironmentVariableA', \ GetFirmwareEnvironmentVariableW, <NONE>, 'GetFirmwareEnvironmentVariableW', \ GetFullPathNameA, <.lpFileName, .nBufferLength, .lpBuffer, .lpFilePart>, 'GetFullPathNameA', \ GetFullPathNameW, <.lpFileName, .nBufferLength, .lpBuffer, .lpFilePart>, 'GetFullPathNameW', \ GetGeoInfoA, <NONE>, 'GetGeoInfoA', \ GetGeoInfoW, <NONE>, 'GetGeoInfoW', \ GetHandleContext, <NONE>, 'GetHandleContext', \ GetHandleInformation, <.hObject, .lpdwFlags>, 'GetHandleInformation', \ GetLargestConsoleWindowSize, <.hConsoleOutput>, 'GetLargestConsoleWindowSize', \ GetLastError, <VOID>, 'GetLastError', \ GetLinguistLangSize, <NONE>, 'GetLinguistLangSize', \ GetLocalTime, <.lpSystemTime>, 'GetLocalTime', \ GetLocaleInfoA, <.Locale, .LCType, .lpLCData, .cchData>, 'GetLocaleInfoA', \ GetLocaleInfoW, <.Locale, .LCType, .lpLCData, .cchData>, 'GetLocaleInfoW', \ GetLogicalDriveStringsA, <.nBufferLength, .lpBuffer>, 'GetLogicalDriveStringsA', \ GetLogicalDriveStringsW, <.nBufferLength, .lpBuffer>, 'GetLogicalDriveStringsW', \ GetLogicalDrives, <VOID>, 'GetLogicalDrives', \ GetLogicalProcessorInformation, <NONE>, 'GetLogicalProcessorInformation', \ GetLongPathNameA, <.lpszShortPath, .lpszLongPath, .cchBuffer>, 'GetLongPathNameA', \ GetLongPathNameW, <.lpszShortPath, .lpszLongPath, .cchBuffer>, 'GetLongPathNameW', \ GetMailslotInfo, <.hMailslot, .lpMaxMessageSize, .lpNextSize, .lpMessageCount, .lpReadTimeout>, 'GetMailslotInfo', \ GetModuleFileNameA, <.hModule, .lpFileName, .nSize>, 'GetModuleFileNameA', \ GetModuleFileNameW, <.hModule, .lpFileName, .nSize>, 'GetModuleFileNameW', \ GetModuleHandleA, <.lpModuleName>, 'GetModuleHandleA', \ GetModuleHandleExA, <NONE>, 'GetModuleHandleExA', \ GetModuleHandleExW, <NONE>, 'GetModuleHandleExW', \ GetModuleHandleW, <.lpModuleName>, 'GetModuleHandleW', \ GetNamedPipeHandleStateA, <.hNamedPipe, .lpState, .lpCurInstances, .lpMaxCollectionCount, .lpCollectDataTimeout, .lpUserName, .nMaxUserNameSize, \ >, 'GetNamedPipeHandleStateA', \ GetNamedPipeHandleStateW, <.hNamedPipe, .lpState, .lpCurInstances, .lpMaxCollectionCount, .lpCollectDataTimeout, .lpUserName, .nMaxUserNameSize, \ >, 'GetNamedPipeHandleStateW', \ GetNamedPipeInfo, <.hNamedPipe, .lpFlags, .lpOutBufferSize, .lpInBufferSize, .lpMaxInstances>, 'GetNamedPipeInfo', \ GetNativeSystemInfo, <NONE>, 'GetNativeSystemInfo', \ GetNextVDMCommand, <NONE>, 'GetNextVDMCommand', \ GetNlsSectionName, <NONE>, 'GetNlsSectionName', \ GetNumaAvailableMemory, <NONE>, 'GetNumaAvailableMemory', \ GetNumaAvailableMemoryNode, <NONE>, 'GetNumaAvailableMemoryNode', \ GetNumaHighestNodeNumber, <NONE>, 'GetNumaHighestNodeNumber', \ GetNumaNodeProcessorMask, <NONE>, 'GetNumaNodeProcessorMask', \ GetNumaProcessorMap, <NONE>, 'GetNumaProcessorMap', \ GetNumaProcessorNode, <NONE>, 'GetNumaProcessorNode', \ GetNumberFormatA, <.Locale, .dwFlags, .lpValue, .lpFormat, .lpNumberStr, .cchNumber>, 'GetNumberFormatA', \ GetNumberFormatW, <.Locale, .dwFlags, .lpValue, .lpFormat, .lpNumberStr, .cchNumber>, 'GetNumberFormatW', \ GetNumberOfConsoleFonts, <NONE>, 'GetNumberOfConsoleFonts', \ GetNumberOfConsoleInputEvents, <.hConsoleInput, .lpNumberOfEvents>, 'GetNumberOfConsoleInputEvents', \ GetNumberOfConsoleMouseButtons, <.lpNumberOfMouseButtons>, 'GetNumberOfConsoleMouseButtons', \ GetOEMCP, <VOID>, 'GetOEMCP', \ GetOverlappedResult, <.hFile, .lpOverlapped, .lpNumberOfBytesTransferred, .bWait>, 'GetOverlappedResult', \ GetPriorityClass, <.hProcess>, 'GetPriorityClass', \ GetPrivateProfileIntA, <.lpApplicationName, .lpKeyName, .nDefault, .lpFileName>, 'GetPrivateProfileIntA', \ GetPrivateProfileIntW, <.lpApplicationName, .lpKeyName, .nDefault, .lpFileName>, 'GetPrivateProfileIntW', \ GetPrivateProfileSectionA, <.lpAppName, .lpReturnedString, .nSize, .lpFileName>, 'GetPrivateProfileSectionA', \ GetPrivateProfileSectionNamesA, <.lpszReturnBuffer, .nSize, .lpFileName>, 'GetPrivateProfileSectionNamesA', \ GetPrivateProfileSectionNamesW, <.lpszReturnBuffer, .nSize, .lpFileName>, 'GetPrivateProfileSectionNamesW', \ GetPrivateProfileSectionW, <.lpAppName, .lpReturnedString, .nSize, .lpFileName>, 'GetPrivateProfileSectionW', \ GetPrivateProfileStringA, <.lpApplicationName, .lpKeyName, .lpDefault, .lpReturnedString, .nSize, .lpFileName>, 'GetPrivateProfileStringA', \ GetPrivateProfileStringW, <.lpApplicationName, .lpKeyName, .lpDefault, .lpReturnedString, .nSize, .lpFileName>, 'GetPrivateProfileStringW', \ GetPrivateProfileStructA, <.lpszSection, .lpszKey, .lpStruct, .uSizeStruct, .szFile>, 'GetPrivateProfileStructA', \ GetPrivateProfileStructW, <.lpszSection, .lpszKey, .lpStruct, .uSizeStruct, .szFile>, 'GetPrivateProfileStructW', \ GetProcAddress, <.hModule, .lpProcName>, 'GetProcAddress', \ GetProcessAffinityMask, <.hProcess, .lpProcessAffinityMask, .SystemAffinityMask>, 'GetProcessAffinityMask', \ GetProcessDEPPolicy, <NONE>, 'GetProcessDEPPolicy', \ GetProcessHandleCount, <NONE>, 'GetProcessHandleCount', \ GetProcessHeap, <VOID>, 'GetProcessHeap', \ GetProcessHeaps, <.NumberOfHeaps, .ProcessHeaps>, 'GetProcessHeaps', \ GetProcessId, <NONE>, 'GetProcessId', \ GetProcessIoCounters, <.hProcess, .lpIoCounters>, 'GetProcessIoCounters', \ GetProcessPriorityBoost, <.hProcess, .pDisablePriorityBoost>, 'GetProcessPriorityBoost', \ GetProcessShutdownParameters, <.lpdwLevel, .lpdwFlags>, 'GetProcessShutdownParameters', \ GetProcessTimes, <.hProcess, .lpCreationTime, .lpExitTime, .lpKernelTime, .lpUserTime>, 'GetProcessTimes', \ GetProcessVersion, <.ProcessId>, 'GetProcessVersion', \ GetProcessWorkingSetSize, <.hProcess, .lpMinimumWorkingSetSize, .lpMaximumWorkingSetSize>, 'GetProcessWorkingSetSize', \ GetProfileIntA, <.lpAppName, .lpKeyName, .nDefault>, 'GetProfileIntA', \ GetProfileIntW, <.lpAppName, .lpKeyName, .nDefault>, 'GetProfileIntW', \ GetProfileSectionA, <.lpAppName, .lpReturnedString, .nSize>, 'GetProfileSectionA', \ GetProfileSectionW, <.lpAppName, .lpReturnedString, .nSize>, 'GetProfileSectionW', \ GetProfileStringA, <.lpAppName, .lpKeyName, .lpDefault, .lpReturnedString, .nSize>, 'GetProfileStringA', \ GetProfileStringW, <.lpAppName, .lpKeyName, .lpDefault, .lpReturnedString, .nSize>, 'GetProfileStringW', \ GetQueuedCompletionStatus, <.CompletionPort, .lpNumberOfBytesTransferred, .lpCompletionKey, .lpOverlapped, .dwMilliseconds>, 'GetQueuedCompletionStatus', \ GetShortPathNameA, <.lpszLongPath, .lpszShortPath, .cchBuffer>, 'GetShortPathNameA', \ GetShortPathNameW, <.lpszLongPath, .lpszShortPath, .cchBuffer>, 'GetShortPathNameW', \ GetStartupInfoA, <.lpStartupInfo>, 'GetStartupInfoA', \ GetStartupInfoW, <.lpStartupInfo>, 'GetStartupInfoW', \ GetStdHandle, <.nStdHandle>, 'GetStdHandle', \ GetStringTypeA, <.Locale, .dwInfoType, .lpSrcStr, .cchSrc, .lpCharType>, 'GetStringTypeA', \ GetStringTypeExA, <.Locale, .dwInfoType, .lpSrcStr, .cchSrc, .lpCharType>, 'GetStringTypeExA', \ GetStringTypeExW, <.Locale, .dwInfoType, .lpSrcStr, .cchSrc, .lpCharType>, 'GetStringTypeExW', \ GetStringTypeW, <.Locale, .dwInfoType, .lpSrcStr, .cchSrc, .lpCharType>, 'GetStringTypeW', \ GetSystemDEPPolicy, <NONE>, 'GetSystemDEPPolicy', \ GetSystemDefaultLCID, <VOID>, 'GetSystemDefaultLCID', \ GetSystemDefaultLangID, <VOID>, 'GetSystemDefaultLangID', \ GetSystemDefaultUILanguage, <VOID>, 'GetSystemDefaultUILanguage', \ GetSystemDirectoryA, <.lpBuffer, .nSize>, 'GetSystemDirectoryA', \ GetSystemDirectoryW, <.lpBuffer, .nSize>, 'GetSystemDirectoryW', \ GetSystemInfo, <.lpSystemInfo>, 'GetSystemInfo', \ GetSystemPowerStatus, <.lpSystemPowerStatus>, 'GetSystemPowerStatus', \ GetSystemRegistryQuota, <NONE>, 'GetSystemRegistryQuota', \ GetSystemTime, <.lpSystemTime>, 'GetSystemTime', \ GetSystemTimeAdjustment, <.lpTimeAdjustment, .lpTimeIncrement, .lpTimeAdjustmentDisabled>, 'GetSystemTimeAdjustment', \ GetSystemTimeAsFileTime, <.lpSystemTimeAsFileTime>, 'GetSystemTimeAsFileTime', \ GetSystemTimes, <NONE>, 'GetSystemTimes', \ GetSystemWindowsDirectoryA, <.lpBuffer, .uSize>, 'GetSystemWindowsDirectoryA', \ GetSystemWindowsDirectoryW, <.lpBuffer, .uSize>, 'GetSystemWindowsDirectoryW', \ GetSystemWow64DirectoryA, <NONE>, 'GetSystemWow64DirectoryA', \ GetSystemWow64DirectoryW, <NONE>, 'GetSystemWow64DirectoryW', \ GetTapeParameters, <.hDevice, .dwOperation, .lpdwSize, .lpTapeInformation>, 'GetTapeParameters', \ GetTapePosition, <.hDevice, .dwPositionType, .lpdwPartition, .lpdwOffsetLow, .lpdwOffsetHigh>, 'GetTapePosition', \ GetTapeStatus, <.hDevice>, 'GetTapeStatus', \ GetTempFileNameA, <.lpszPath, .lpPrefixString, .wUnique, .lpTempFileName>, 'GetTempFileNameA', \ GetTempFileNameW, <.lpszPath, .lpPrefixString, .wUnique, .lpTempFileName>, 'GetTempFileNameW', \ GetTempPathA, <.nBufferLength, .lpBuffer>, 'GetTempPathA', \ GetTempPathW, <.nBufferLength, .lpBuffer>, 'GetTempPathW', \ GetThreadContext, <.hThread, .lpContext>, 'GetThreadContext', \ GetThreadIOPendingFlag, <NONE>, 'GetThreadIOPendingFlag', \ GetThreadLocale, <VOID>, 'GetThreadLocale', \ GetThreadPriority, <.hThread>, 'GetThreadPriority', \ GetThreadPriorityBoost, <.hThread, .pDisablePriorityBoost>, 'GetThreadPriorityBoost', \ GetThreadSelectorEntry, <.hThread, .dwSelector, .lpSelectorEntry>, 'GetThreadSelectorEntry', \ GetThreadTimes, <.hThread, .lpCreationTime, .lpExitTime, .lpKernelTime, .lpUserTime>, 'GetThreadTimes', \ GetTickCount, <VOID>, 'GetTickCount', \ GetTimeFormatA, <.Locale, .dwFlags, .lpTime, .lpFormat, .lpTimeStr, .cchTime>, 'GetTimeFormatA', \ GetTimeFormatW, <.Locale, .dwFlags, .lpTime, .lpFormat, .lpTimeStr, .cchTime>, 'GetTimeFormatW', \ GetTimeZoneInformation, <.lpTimeZoneInformation>, 'GetTimeZoneInformation', \ GetUserDefaultLCID, <VOID>, 'GetUserDefaultLCID', \ GetUserDefaultLangID, <VOID>, 'GetUserDefaultLangID', \ GetUserDefaultUILanguage, <VOID>, 'GetUserDefaultUILanguage', \ GetUserGeoID, <NONE>, 'GetUserGeoID', \ GetVDMCurrentDirectories, <NONE>, 'GetVDMCurrentDirectories', \ GetVersion, <VOID>, 'GetVersion', \ GetVersionExA, <.lpVersionInformation>, 'GetVersionExA', \ GetVersionExW, <.lpVersionInformation>, 'GetVersionExW', \ GetVolumeInformationA, <.lpRootPathName, .lpVolumeNameBuffer, .nVolumeNameSize, .lpVolumeSerialNumber, .lpMaximumComponentLength, \ .lpFileSystemFlags, .lpFileSystemNameBuffer, .nFileSystemNameSize>, 'GetVolumeInformationA', \ GetVolumeInformationW, <.lpRootPathName, .lpVolumeNameBuffer, .nVolumeNameSize, .lpVolumeSerialNumber, .lpMaximumComponentLength, \ .lpFileSystemFlags, .lpFileSystemNameBuffer, .nFileSystemNameSize>, 'GetVolumeInformationW', \ GetVolumeNameForVolumeMountPointA, <.lpszVolumeMountPoint, .lpszVolumeName, .cchBufferLength>, 'GetVolumeNameForVolumeMountPointA', \ GetVolumeNameForVolumeMountPointW, <.lpszVolumeMountPoint, .lpszVolumeName, .cchBufferLength>, 'GetVolumeNameForVolumeMountPointW', \ GetVolumePathNameA, <.lpszFileName, .lpszVolumePathName, .cchBufferLength>, 'GetVolumePathNameA', \ GetVolumePathNameW, <.lpszFileName, .lpszVolumePathName, .cchBufferLength>, 'GetVolumePathNameW', \ GetVolumePathNamesForVolumeNameA, <NONE>, 'GetVolumePathNamesForVolumeNameA', \ GetVolumePathNamesForVolumeNameW, <NONE>, 'GetVolumePathNamesForVolumeNameW', \ GetWindowsDirectoryA, <.lpBuffer, .nSize>, 'GetWindowsDirectoryA', \ GetWindowsDirectoryW, <.lpBuffer, .nSize>, 'GetWindowsDirectoryW', \ GetWriteWatch, <.dwFlags, .lpBaseAddress, .dwRegionSize, .lpAddresses, .lpdwCount, .lpdwGranularity>, 'GetWriteWatch', \ GlobalAddAtomA, <.lpString>, 'GlobalAddAtomA', \ GlobalAddAtomW, <.lpString>, 'GlobalAddAtomW', \ GlobalAlloc, <.uFlags, .dwBytes>, 'GlobalAlloc', \ GlobalCompact, <.dwMinFree>, 'GlobalCompact', \ GlobalDeleteAtom, <.nAtom>, 'GlobalDeleteAtom', \ GlobalFindAtomA, <.lpString>, 'GlobalFindAtomA', \ GlobalFindAtomW, <.lpString>, 'GlobalFindAtomW', \ GlobalFix, <.hMem>, 'GlobalFix', \ GlobalFlags, <.hMem>, 'GlobalFlags', \ GlobalFree, <.hMem>, 'GlobalFree', \ GlobalGetAtomNameA, <.nAtom, .lpBuffer, .nSize>, 'GlobalGetAtomNameA', \ GlobalGetAtomNameW, <.nAtom, .lpBuffer, .nSize>, 'GlobalGetAtomNameW', \ GlobalHandle, <.wMem>, 'GlobalHandle', \ GlobalLock, <.hMem>, 'GlobalLock', \ GlobalMemoryStatus, <.lpBuffer>, 'GlobalMemoryStatus', \ GlobalMemoryStatusEx, <.lpBuffer>, 'GlobalMemoryStatusEx', \ GlobalReAlloc, <.hMem, .dwBytes, .wFlags>, 'GlobalReAlloc', \ GlobalSize, <.hMem>, 'GlobalSize', \ GlobalUnWire, <.hMem>, 'GlobalUnWire', \ GlobalUnfix, <.hMem>, 'GlobalUnfix', \ GlobalUnlock, <.hMem>, 'GlobalUnlock', \ GlobalWire, <.hMem>, 'GlobalWire', \ Heap32First, <.lphe, .th32ProcessID, .th32HeapID>, 'Heap32First', \ Heap32ListFirst, <.hSnapshot, .lphl>, 'Heap32ListFirst', \ Heap32ListNext, <.hSnapshot, .lphl>, 'Heap32ListNext', \ Heap32Next, <.lphe>, 'Heap32Next', \ HeapAlloc, <.hHeap, .dwFlags, .dwBytes>, 'HeapAlloc', \ HeapCompact, <.hHeap, .dwFlags>, 'HeapCompact', \ HeapCreate, <.flOptions, .dwInitialSize, .dwMaximumSize>, 'HeapCreate', \ HeapCreateTagsW, <NONE>, 'HeapCreateTagsW', \ HeapDestroy, <.hHeap>, 'HeapDestroy', \ HeapExtend, <NONE>, 'HeapExtend', \ HeapFree, <.hHeap, .dwFlags, .lpMem>, 'HeapFree', \ HeapLock, <.hHeap>, 'HeapLock', \ HeapQueryInformation, <NONE>, 'HeapQueryInformation', \ HeapQueryTagW, <NONE>, 'HeapQueryTagW', \ HeapReAlloc, <.hHeap, .dwFlags, .lpMem, .dwBytes>, 'HeapReAlloc', \ HeapSetInformation, <NONE>, 'HeapSetInformation', \ HeapSize, <.hHeap, .dwFlags, .lpMem>, 'HeapSize', \ HeapSummary, <NONE>, 'HeapSummary', \ HeapUnlock, <.hHeap>, 'HeapUnlock', \ HeapUsage, <NONE>, 'HeapUsage', \ HeapValidate, <.hHeap, .dwFlags, .lpMem>, 'HeapValidate', \ HeapWalk, <.hHeap, .lpEntry>, 'HeapWalk', \ InitAtomTable, <.nSize>, 'InitAtomTable', \ InitializeCriticalSection, <.lpCriticalSection>, 'InitializeCriticalSection', \ InitializeCriticalSectionAndSpinCount, <.lpCriticalSection, .dwSpinCount>, 'InitializeCriticalSectionAndSpinCount', \ InitializeSListHead, <NONE>, 'InitializeSListHead', \ InterlockedCompareExchange, <.Destination, .Exchange, .Comperand>, 'InterlockedCompareExchange', \ InterlockedDecrement, <.lpAddend>, 'InterlockedDecrement', \ InterlockedExchange, <.Target, .Value>, 'InterlockedExchange', \ InterlockedExchangeAdd, <.Addend, .Value>, 'InterlockedExchangeAdd', \ InterlockedFlushSList, <NONE>, 'InterlockedFlushSList', \ InterlockedIncrement, <.lpAddend>, 'InterlockedIncrement', \ InterlockedPopEntrySList, <NONE>, 'InterlockedPopEntrySList', \ InterlockedPushEntrySList, <NONE>, 'InterlockedPushEntrySList', \ InvalidateConsoleDIBits, <NONE>, 'InvalidateConsoleDIBits', \ IsBadCodePtr, <.lpfn>, 'IsBadCodePtr', \ IsBadHugeReadPtr, <.lp, .ucb>, 'IsBadHugeReadPtr', \ IsBadHugeWritePtr, <.lp, .ucb>, 'IsBadHugeWritePtr', \ IsBadReadPtr, <.lp, .ucb>, 'IsBadReadPtr', \ IsBadStringPtrA, <.lpsz, .ucchMax>, 'IsBadStringPtrA', \ IsBadStringPtrW, <.lpsz, .ucchMax>, 'IsBadStringPtrW', \ IsBadWritePtr, <.lp, .ucb>, 'IsBadWritePtr', \ IsDBCSLeadByte, <.bTestChar>, 'IsDBCSLeadByte', \ IsDBCSLeadByteEx, <.CodePage, .TestChar>, 'IsDBCSLeadByteEx', \ IsDebuggerPresent, <VOID>, 'IsDebuggerPresent', \ IsProcessInJob, <NONE>, 'IsProcessInJob', \ IsProcessorFeaturePresent, <.ProcessorFeature>, 'IsProcessorFeaturePresent', \ IsSystemResumeAutomatic, <VOID>, 'IsSystemResumeAutomatic', \ IsValidCodePage, <.CodePage>, 'IsValidCodePage', \ IsValidLanguageGroup, <.LanguageGroup, .dwFlags>, 'IsValidLanguageGroup', \ IsValidLocale, <.Locale, .dwFlags>, 'IsValidLocale', \ IsValidUILanguage, <NONE>, 'IsValidUILanguage', \ IsWow64Process, <NONE>, 'IsWow64Process', \ LCMapStringA, <.Locale, .dwMapFlags, .lpSrcStr, .cchSrc, .lpDestStr, .cchDest>, 'LCMapStringA', \ LCMapStringW, <.Locale, .dwMapFlags, .lpSrcStr, .cchSrc, .lpDestStr, .cchDest>, 'LCMapStringW', \ LZClose, <.hfFile>, 'LZClose', \ LZCloseFile, <NONE>, 'LZCloseFile', \ LZCopy, <.hfSource, .hfDest>, 'LZCopy', \ LZCreateFileW, <NONE>, 'LZCreateFileW', \ LZDone, <VOID>, 'LZDone', \ LZInit, <.hfSrc>, 'LZInit', \ LZOpenFileA, <.lpszFile, .lpOf, .style>, 'LZOpenFileA', \ LZOpenFileW, <.lpszFile, .lpOf, .style>, 'LZOpenFileW', \ LZRead, <.hfFile, .lpvBuf, .cbread>, 'LZRead', \ LZSeek, <.hfFile, .lOffset, .nOrigin>, 'LZSeek', \ LZStart, <VOID>, 'LZStart', \ LeaveCriticalSection, <.lpCriticalSection>, 'LeaveCriticalSection', \ LoadLibraryA, <.lpLibFileName>, 'LoadLibraryA', \ LoadLibraryExA, <.lpLibFileName, .hFile, .dwFlags>, 'LoadLibraryExA', \ LoadLibraryExW, <.lpLibFileName, .hFile, .dwFlags>, 'LoadLibraryExW', \ LoadLibraryW, <.lpLibFileName>, 'LoadLibraryW', \ LoadModule, <.lpModuleName, .lpParameterBlock>, 'LoadModule', \ LoadResource, <.hInstance, .hResInfo>, 'LoadResource', \ LocalAlloc, <.wFlags, .wBytes>, 'LocalAlloc', \ LocalCompact, <.uMinFree>, 'LocalCompact', \ LocalFileTimeToFileTime, <.lpLocalFileTime, .lpFileTime>, 'LocalFileTimeToFileTime', \ LocalFlags, <.hMem>, 'LocalFlags', \ LocalFree, <.hMem>, 'LocalFree', \ LocalHandle, <.wMem>, 'LocalHandle', \ LocalLock, <.hMem>, 'LocalLock', \ LocalReAlloc, <.hMem, .wBytes, .wFlags>, 'LocalReAlloc', \ LocalShrink, <.hMem, .cbNewSize>, 'LocalShrink', \ LocalSize, <.hMem>, 'LocalSize', \ LocalUnlock, <.hMem>, 'LocalUnlock', \ LockFile, <.hFile, .dwFileOffsetLow, .dwFileOffsetHigh, .nNumberOfBytesToLockLow, .nNumberOfBytesToLockHigh>, 'LockFile', \ LockFileEx, <.hFile, .dwFlags, .dwReserved, .nNumberOfBytesToLockLow, .nNumberOfBytesToLockHigh, .lpOverlapped>, 'LockFileEx', \ LockResource, <.hResData>, 'LockResource', \ MapUserPhysicalPages, <.VirtualAddress, .NumberOfPages, .PageArray>, 'MapUserPhysicalPages', \ MapUserPhysicalPagesScatter, <.VirtualAddresses, .NumberOfPages, .PageArray>, 'MapUserPhysicalPagesScatter', \ MapViewOfFile, <.hFileMappingObject, .dwDesiredAccess, .dwFileOffsetHigh, .dwFileOffsetLow, .dwNumberOfBytesToMap>, 'MapViewOfFile', \ MapViewOfFileEx, <.hFileMappingObject, .dwDesiredAccess, .dwFileOffsetHigh, .dwFileOffsetLow, .dwNumberOfBytesToMap, .lpBaseAddress, \ >, 'MapViewOfFileEx', \ Module32First, <.hSnapshot, .lpme>, 'Module32First', \ Module32FirstW, <.hSnapshot, .lpme>, 'Module32FirstW', \ Module32Next, <.hSnapshot, .lpme>, 'Module32Next', \ Module32NextW, <.hSnapshot, .lpme>, 'Module32NextW', \ MoveFileA, <.lpExistingFileName, .lpNewFileName>, 'MoveFileA', \ MoveFileExA, <.lpExistingFileName, .lpNewFileName, .dwFlags>, 'MoveFileExA', \ MoveFileExW, <.lpExistingFileName, .lpNewFileName, .dwFlags>, 'MoveFileExW', \ MoveFileW, <.lpExistingFileName, .lpNewFileName>, 'MoveFileW', \ MoveFileWithProgressA, <.lpExistingFileName, .lpNewFileName, .lpProgressRoutine, .lpData, .dwFlags>, 'MoveFileWithProgressA', \ MoveFileWithProgressW, <.lpExistingFileName, .lpNewFileName, .lpProgressRoutine, .lpData, .dwFlags>, 'MoveFileWithProgressW', \ MulDiv, <.nNumber, .nNumerator, .nDenominator>, 'MulDiv', \ MultiByteToWideChar, <.CodePage, .dwFlags, .lpMultiByteStr, .cchMultiByte, .lpWideCharStr, .cchWideChar>, 'MultiByteToWideChar', \ NlsConvertIntegerToString, <NONE>, 'NlsConvertIntegerToString', \ NlsGetCacheUpdateCount, <NONE>, 'NlsGetCacheUpdateCount', \ NlsResetProcessLocale, <NONE>, 'NlsResetProcessLocale', \ NumaVirtualQueryNode, <NONE>, 'NumaVirtualQueryNode', \ OpenConsoleW, <NONE>, 'OpenConsoleW', \ OpenDataFile, <NONE>, 'OpenDataFile', \ OpenEventA, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenEventA', \ OpenEventW, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenEventW', \ OpenFile, <.lpFileName, .lpReOpenBuff, .wStyle>, 'OpenFile', \ OpenFileMappingA, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenFileMappingA', \ OpenFileMappingW, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenFileMappingW', \ OpenJobObjectA, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenJobObjectA', \ OpenJobObjectW, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenJobObjectW', \ OpenMutexA, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenMutexA', \ OpenMutexW, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenMutexW', \ OpenProcess, <.dwDesiredAccess, .bInheritHandle, .dwProcessId>, 'OpenProcess', \ OpenProfileUserMapping, <NONE>, 'OpenProfileUserMapping', \ OpenSemaphoreA, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenSemaphoreA', \ OpenSemaphoreW, <.dwDesiredAccess, .bInheritHandle, .lpName>, 'OpenSemaphoreW', \ OpenThread, <.dwDesiredAccess, .bInheritHandle, .dwThreadId>, 'OpenThread', \ OpenWaitableTimerA, <.dwDesiredAccess, .bInheritHandle, .lpTimerName>, 'OpenWaitableTimerA', \ OpenWaitableTimerW, <.dwDesiredAccess, .bInheritHandle, .lpTimerName>, 'OpenWaitableTimerW', \ OutputDebugStringA, <.lpOutputString>, 'OutputDebugStringA', \ OutputDebugStringW, <.lpOutputString>, 'OutputDebugStringW', \ PeekConsoleInputA, <.hConsoleInput, .lpBuffer, .nLength, .lpNumberOfEventsRead>, 'PeekConsoleInputA', \ PeekConsoleInputW, <.hConsoleInput, .lpBuffer, .nLength, .lpNumberOfEventsRead>, 'PeekConsoleInputW', \ PeekNamedPipe, <.hNamedPipe, .lpBuffer, .nBufferSize, .lpBytesRead, .lpTotalBytesAvail, .lpBytesLeftThisMessage>, 'PeekNamedPipe', \ PostQueuedCompletionStatus, <.CompletionPort, .dwNumberOfBytesTransferred, .dwCompletionKey, .lpOverlapped>, 'PostQueuedCompletionStatus', \ PrepareTape, <.hDevice, .dwOperation, .bimmediate>, 'PrepareTape', \ PrivCopyFileExW, <NONE>, 'PrivCopyFileExW', \ PrivMoveFileIdentityW, <NONE>, 'PrivMoveFileIdentityW', \ Process32First, <.hSnapshot, .lppe>, 'Process32First', \ Process32FirstW, <.hSnapshot, .lppe>, 'Process32FirstW', \ Process32Next, <.hSnapshot, .lppe>, 'Process32Next', \ Process32NextW, <.hSnapshot, .lppe>, 'Process32NextW', \ ProcessIdToSessionId, <.dwProcessId, .pSessionId>, 'ProcessIdToSessionId', \ PulseEvent, <.hEvent>, 'PulseEvent', \ PurgeComm, <.hFile, .dwFlags>, 'PurgeComm', \ QueryActCtxW, <NONE>, 'QueryActCtxW', \ QueryDepthSList, <NONE>, 'QueryDepthSList', \ QueryDosDeviceA, <.lpDeviceName, .lpTargetPath, .ucchMax>, 'QueryDosDeviceA', \ QueryDosDeviceW, <.lpDeviceName, .lpTargetPath, .ucchMax>, 'QueryDosDeviceW', \ QueryInformationJobObject, <.hJob, .JobObjectInformationClass, .lpJobObjectInformation, .cbJobObjectInformationLength, .lpReturnLength, \ >, 'QueryInformationJobObject', \ QueryMemoryResourceNotification, <NONE>, 'QueryMemoryResourceNotification', \ QueryPerformanceCounter, <.lpPerformanceCount>, 'QueryPerformanceCounter', \ QueryPerformanceFrequency, <.lpFrequency>, 'QueryPerformanceFrequency', \ QueryWin31IniFilesMappedToRegistry, <NONE>, 'QueryWin31IniFilesMappedToRegistry', \ QueueUserAPC, <.pfnAPC, .hThread, .dwData>, 'QueueUserAPC', \ QueueUserWorkItem, <.lFunction, .Context, .Flags>, 'QueueUserWorkItem', \ RaiseException, <.dwExceptionCode, .dwExceptionFlags, .nNumberOfArguments, .lpArguments>, 'RaiseException', \ ReadConsoleA, <.hConsoleInput, .lpBuffer, .nNumberOfCharsToRead, .lpNumberOfCharsRead, .lpReserved>, 'ReadConsoleA', \ ReadConsoleInputA, <.hConsoleInput, .lpBuffer, .nLength, .lpNumberOfEventsRead>, 'ReadConsoleInputA', \ ReadConsoleInputExA, <NONE>, 'ReadConsoleInputExA', \ ReadConsoleInputExW, <NONE>, 'ReadConsoleInputExW', \ ReadConsoleInputW, <.hConsoleInput, .lpBuffer, .nLength, .lpNumberOfEventsRead>, 'ReadConsoleInputW', \ ReadConsoleOutputA, <.hConsoleOutput, .lpBuffer, .dwBufferSize, .dwBufferCoord, .lpReadRegion>, 'ReadConsoleOutputA', \ ReadConsoleOutputAttribute, <.hConsoleOutput, .lpAttribute, .nLength, .dwReadCoord, .lpNumberOfAttrsRead>, 'ReadConsoleOutputAttribute', \ ReadConsoleOutputCharacterA, <.hConsoleOutput, .lpCharacter, .nLength, .dwReadCoord, .lpNumberOfCharsRead>, 'ReadConsoleOutputCharacterA', \ ReadConsoleOutputCharacterW, <.hConsoleOutput, .lpCharacter, .nLength, .dwReadCoord, .lpNumberOfCharsRead>, 'ReadConsoleOutputCharacterW', \ ReadConsoleOutputW, <.hConsoleOutput, .lpBuffer, .dwBufferSize, .dwBufferCoord, .lpReadRegion>, 'ReadConsoleOutputW', \ ReadConsoleW, <.hConsoleInput, .lpBuffer, .nNumberOfCharsToRead, .lpNumberOfCharsRead, .lpReserved>, 'ReadConsoleW', \ ReadDirectoryChangesW, <NONE>, 'ReadDirectoryChangesW', \ ReadFile, <.hFile, .lpBuffer, .nNumberOfBytesToRead, .lpNumberOfBytesRead, .lpOverlapped>, 'ReadFile', \ ReadFileEx, <.hFile, .lpBuffer, .nNumberOfBytesToRead, .lpOverlapped, .lpCompletionRoutine>, 'ReadFileEx', \ ReadFileScatter, <.hFile, .aSegmentArray, .nNumberOfBytesToRead, .lpReserved, .lpOverlapped>, 'ReadFileScatter', \ ReadProcessMemory, <.hProcess, .lpBaseAddress, .lpBuffer, .nSize, .lpNumberOfBytesWritten>, 'ReadProcessMemory', \ RegisterConsoleIME, <NONE>, 'RegisterConsoleIME', \ RegisterConsoleOS2, <NONE>, 'RegisterConsoleOS2', \ RegisterConsoleVDM, <NONE>, 'RegisterConsoleVDM', \ RegisterWaitForInputIdle, <NONE>, 'RegisterWaitForInputIdle', \ RegisterWaitForSingleObject, <.phNewWaitObject, .hObject, .Callback, .Context, .dwMilliseconds, .dwFlags>, 'RegisterWaitForSingleObject', \ RegisterWaitForSingleObjectEx, <.hObject, .Callback, .Context, .dwMilliseconds, .dwFlags>, 'RegisterWaitForSingleObjectEx', \ RegisterWowBaseHandlers, <NONE>, 'RegisterWowBaseHandlers', \ RegisterWowExec, <NONE>, 'RegisterWowExec', \ ReleaseActCtx, <NONE>, 'ReleaseActCtx', \ ReleaseMutex, <.hMutex>, 'ReleaseMutex', \ ReleaseSemaphore, <.hSemaphore, .lReleaseCount, .lpPreviousCount>, 'ReleaseSemaphore', \ RemoveDirectoryA, <.lpPathName>, 'RemoveDirectoryA', \ RemoveDirectoryW, <.lpPathName>, 'RemoveDirectoryW', \ RemoveLocalAlternateComputerNameA, <NONE>, 'RemoveLocalAlternateComputerNameA', \ RemoveLocalAlternateComputerNameW, <NONE>, 'RemoveLocalAlternateComputerNameW', \ RemoveVectoredExceptionHandler, <NONE>, 'RemoveVectoredExceptionHandler', \ ReplaceFile, <.lpReplacedFileName, .lpReplacementFileName, .lpBackupFileName, .dwReplaceFlags, .lpExclude, .lpReserved>, 'ReplaceFile', \ ReplaceFileA, <.lpReplacedFileName, .lpReplacementFileName, .lpBackupFileName, .dwReplaceFlags, .lpExclude, .lpReserved>, 'ReplaceFileA', \ ReplaceFileW, <.lpReplacedFileName, .lpReplacementFileName, .lpBackupFileName, .dwReplaceFlags, .lpExclude, .lpReserved>, 'ReplaceFileW', \ RequestDeviceWakeup, <.hDevice>, 'RequestDeviceWakeup', \ RequestWakeupLatency, <.latency>, 'RequestWakeupLatency', \ ResetEvent, <.hEvent>, 'ResetEvent', \ ResetWriteWatch, <.lpBaseAddress, .dwRegionSize>, 'ResetWriteWatch', \ RestoreLastError, <NONE>, 'RestoreLastError', \ ResumeThread, <.hThread>, 'ResumeThread', \ RtlCaptureContext, <NONE>, 'RtlCaptureContext', \ RtlCaptureStackBackTrace, <NONE>, 'RtlCaptureStackBackTrace', \ RtlFillMemory, <.Destination, .Length, .Fill>, 'RtlFillMemory', \ RtlMoveMemory, <.dest, .source, .numBytes>, 'RtlMoveMemory', \ RtlUnwind, <NONE>, 'RtlUnwind', \ RtlZeroMemory, <.dest, .numBytes>, 'RtlZeroMemory', \ ScrollConsoleScreenBufferA, <.hConsoleOutput, .lpScrollRectangle, .lpClipRectangle, .dwDestinationOrigin, .lpFill>, 'ScrollConsoleScreenBufferA', \ ScrollConsoleScreenBufferW, <.hConsoleOutput, .lpScrollRectangle, .lpClipRectangle, .dwDestinationOrigin, .lpFill>, 'ScrollConsoleScreenBufferW', \ SearchPathA, <.lpPath, .lpFileName, .lpExtension, .nBufferLength, .lpBuffer, .lpFilePart>, 'SearchPathA', \ SearchPathW, <.lpPath, .lpFileName, .lpExtension, .nBufferLength, .lpBuffer, .lpFilePart>, 'SearchPathW', \ SetCPGlobal, <NONE>, 'SetCPGlobal', \ SetCalendarInfoA, <.Locale, .Calendar, .CalType, .lpCalData>, 'SetCalendarInfoA', \ SetCalendarInfoW, <.Locale, .Calendar, .CalType, .lpCalData>, 'SetCalendarInfoW', \ SetClientTimeZoneInformation, <NONE>, 'SetClientTimeZoneInformation', \ SetComPlusPackageInstallStatus, <NONE>, 'SetComPlusPackageInstallStatus', \ SetCommBreak, <.nCid>, 'SetCommBreak', \ SetCommConfig, <.hCommDev, .lpCC, .dwSize>, 'SetCommConfig', \ SetCommMask, <.hFile, .dwEvtMask>, 'SetCommMask', \ SetCommState, <.hCommDev, .lpDCB>, 'SetCommState', \ SetCommTimeouts, <.hFile, .lpCommTimeouts>, 'SetCommTimeouts', \ SetComputerNameA, <.lpComputerName>, 'SetComputerNameA', \ SetComputerNameExA, <.NameType, .lpBuffer>, 'SetComputerNameExA', \ SetComputerNameExW, <.NameType, .lpBuffer>, 'SetComputerNameExW', \ SetComputerNameW, <.lpComputerName>, 'SetComputerNameW', \ SetConsoleActiveScreenBuffer, <.hConsoleOutput>, 'SetConsoleActiveScreenBuffer', \ SetConsoleCP, <.wCodePageID>, 'SetConsoleCP', \ SetConsoleCommandHistoryMode, <NONE>, 'SetConsoleCommandHistoryMode', \ SetConsoleCtrlHandler, <.HandlerRoutine, .Add>, 'SetConsoleCtrlHandler', \ SetConsoleCursor, <NONE>, 'SetConsoleCursor', \ SetConsoleCursorInfo, <.hConsoleOutput, .lpConsoleCursorInfo>, 'SetConsoleCursorInfo', \ SetConsoleCursorMode, <NONE>, 'SetConsoleCursorMode', \ SetConsoleCursorPosition, <.hConsoleOutput, .dwCursorPosition>, 'SetConsoleCursorPosition', \ SetConsoleDisplayMode, <NONE>, 'SetConsoleDisplayMode', \ SetConsoleFont, <NONE>, 'SetConsoleFont', \ SetConsoleHardwareState, <NONE>, 'SetConsoleHardwareState', \ SetConsoleIcon, <NONE>, 'SetConsoleIcon', \ SetConsoleInputExeNameA, <NONE>, 'SetConsoleInputExeNameA', \ SetConsoleInputExeNameW, <NONE>, 'SetConsoleInputExeNameW', \ SetConsoleKeyShortcuts, <NONE>, 'SetConsoleKeyShortcuts', \ SetConsoleLocalEUDC, <NONE>, 'SetConsoleLocalEUDC', \ SetConsoleMaximumWindowSize, <NONE>, 'SetConsoleMaximumWindowSize', \ SetConsoleMenuClose, <NONE>, 'SetConsoleMenuClose', \ SetConsoleMode, <.hConsoleHandle, .dwMode>, 'SetConsoleMode', \ SetConsoleNlsMode, <NONE>, 'SetConsoleNlsMode', \ SetConsoleNumberOfCommandsA, <NONE>, 'SetConsoleNumberOfCommandsA', \ SetConsoleNumberOfCommandsW, <NONE>, 'SetConsoleNumberOfCommandsW', \ SetConsoleOS2OemFormat, <NONE>, 'SetConsoleOS2OemFormat', \ SetConsoleOutputCP, <.wCodePageID>, 'SetConsoleOutputCP', \ SetConsolePalette, <NONE>, 'SetConsolePalette', \ SetConsoleScreenBufferSize, <.hConsoleOutput, .dwSize>, 'SetConsoleScreenBufferSize', \ SetConsoleTextAttribute, <.hConsoleOutput, .wAttributes>, 'SetConsoleTextAttribute', \ SetConsoleTitleA, <.lpConsoleTitle>, 'SetConsoleTitleA', \ SetConsoleTitleW, <.lpConsoleTitle>, 'SetConsoleTitleW', \ SetConsoleWindowInfo, <.hConsoleOutput, .bAbsolute, .lpConsoleWindow>, 'SetConsoleWindowInfo', \ SetCriticalSectionSpinCount, <.lpCriticalSection, .dwSpinCount>, 'SetCriticalSectionSpinCount', \ SetCurrentDirectoryA, <.lpPathName>, 'SetCurrentDirectoryA', \ SetCurrentDirectoryW, <.lpPathName>, 'SetCurrentDirectoryW', \ SetDefaultCommConfigA, <.lpszName, .lpCC, .dwSize>, 'SetDefaultCommConfigA', \ SetDefaultCommConfigW, <.lpszName, .lpCC, .dwSize>, 'SetDefaultCommConfigW', \ SetDllDirectoryA, <NONE>, 'SetDllDirectoryA', \ SetDllDirectoryW, <NONE>, 'SetDllDirectoryW', \ SetEndOfFile, <.hFile>, 'SetEndOfFile', \ SetEnvironmentVariableA, <.lpName, .lpValue>, 'SetEnvironmentVariableA', \ SetEnvironmentVariableW, <.lpName, .lpValue>, 'SetEnvironmentVariableW', \ SetErrorMode, <.wMode>, 'SetErrorMode', \ SetEvent, <.hEvent>, 'SetEvent', \ SetFileApisToANSI, <VOID>, 'SetFileApisToANSI', \ SetFileApisToOEM, <VOID>, 'SetFileApisToOEM', \ SetFileAttributesA, <.lpFileName, .dwFileAttributes>, 'SetFileAttributesA', \ SetFileAttributesW, <.lpFileName, .dwFileAttributes>, 'SetFileAttributesW', \ SetFilePointer, <.hFile, .lDistanceToMove, .lpDistanceToMoveHigh, .dwMoveMethod>, 'SetFilePointer', \ SetFilePointerEx, <.hFile, .liDistanceToMove, .lpNewFilePointer, .dwMoveMethod>, 'SetFilePointerEx', \ SetFileShortNameA, <NONE>, 'SetFileShortNameA', \ SetFileShortNameW, <NONE>, 'SetFileShortNameW', \ SetFileTime, <.hFile, .lpCreationTime, .lpLastAccessTime, .lpLastWriteTime>, 'SetFileTime', \ SetFileValidData, <NONE>, 'SetFileValidData', \ SetFirmwareEnvironmentVariableA, <NONE>, 'SetFirmwareEnvironmentVariableA', \ SetFirmwareEnvironmentVariableW, <NONE>, 'SetFirmwareEnvironmentVariableW', \ SetHandleContext, <NONE>, 'SetHandleContext', \ SetHandleCount, <.wNumber>, 'SetHandleCount', \ SetHandleInformation, <.hObject, .dwMask, .dwFlags>, 'SetHandleInformation', \ SetInformationJobObject, <.hJob, .JobObjectInformationClass, .lpJobObjectInformation, .cbJobObjectInformationLength>, 'SetInformationJobObject', \ SetLastConsoleEventActive, <NONE>, 'SetLastConsoleEventActive', \ SetLastError, <.dwErrCode>, 'SetLastError', \ SetLocalPrimaryComputerNameA, <NONE>, 'SetLocalPrimaryComputerNameA', \ SetLocalPrimaryComputerNameW, <NONE>, 'SetLocalPrimaryComputerNameW', \ SetLocalTime, <.lpSystemTime>, 'SetLocalTime', \ SetLocaleInfoA, <.Locale, .LCType, .lpLCData>, 'SetLocaleInfoA', \ SetLocaleInfoW, <.Locale, .LCType, .lpLCData>, 'SetLocaleInfoW', \ SetMailslotInfo, <.hMailslot, .lReadTimeout>, 'SetMailslotInfo', \ SetMessageWaitingIndicator, <.hMsgIndicator, .ulMsgCount>, 'SetMessageWaitingIndicator', \ SetNamedPipeHandleState, <.hNamedPipe, .lpMode, .lpMaxCollectionCount, .lpCollectDataTimeout>, 'SetNamedPipeHandleState', \ SetPriorityClass, <.hProcess, .dwPriorityClass>, 'SetPriorityClass', \ SetProcessAffinityMask, <.hProcess, .dwProcessAffinityMask>, 'SetProcessAffinityMask', \ SetProcessDEPPolicy, <NONE>, 'SetProcessDEPPolicy', \ SetProcessPriorityBoost, <.hProcess, .bDisablePriorityBoost>, 'SetProcessPriorityBoost', \ SetProcessShutdownParameters, <.dwLevel, .dwFlags>, 'SetProcessShutdownParameters', \ SetProcessWorkingSetSize, <.hProcess, .dwMinimumWorkingSetSize, .dwMaximumWorkingSetSize>, 'SetProcessWorkingSetSize', \ SetStdHandle, <.nStdHandle, .nHandle>, 'SetStdHandle', \ SetSystemPowerState, <.fSuspend, .fForce>, 'SetSystemPowerState', \ SetSystemTime, <.lpSystemTime>, 'SetSystemTime', \ SetSystemTimeAdjustment, <.dwTimeAdjustment, .bTimeAdjustmentDisabled>, 'SetSystemTimeAdjustment', \ SetTapeParameters, <.hDevice, .dwOperation, .lpTapeInformation>, 'SetTapeParameters', \ SetTapePosition, <.hDevice, .dwPositionMethod, .dwPartition, .dwOffsetLow, .dwOffsetHigh, .bimmediate>, 'SetTapePosition', \ SetTermsrvAppInstallMode, <NONE>, 'SetTermsrvAppInstallMode', \ SetThreadAffinityMask, <.hThread, .dwThreadAffinityMask>, 'SetThreadAffinityMask', \ SetThreadContext, <.hThread, .lpContext>, 'SetThreadContext', \ SetThreadExecutionState, <.esFlags>, 'SetThreadExecutionState', \ SetThreadIdealProcessor, <.hThread, .dwIdealProcessor>, 'SetThreadIdealProcessor', \ SetThreadLocale, <.Locale>, 'SetThreadLocale', \ SetThreadPriority, <.hThread, .nPriority>, 'SetThreadPriority', \ SetThreadPriorityBoost, <.hThread, .bDisablePriorityBoost>, 'SetThreadPriorityBoost', \ SetThreadUILanguage, <NONE>, 'SetThreadUILanguage', \ SetTimeZoneInformation, <.lpTimeZoneInformation>, 'SetTimeZoneInformation', \ SetTimerQueueTimer, <.TimerQueue, .Callback, .Parameter, .DueTime, .Period, .PreferIo>, 'SetTimerQueueTimer', \ SetUnhandledExceptionFilter, <.lpTopLevelExceptionFilter>, 'SetUnhandledExceptionFilter', \ SetUserGeoID, <NONE>, 'SetUserGeoID', \ SetVDMCurrentDirectories, <NONE>, 'SetVDMCurrentDirectories', \ SetVolumeLabelA, <.lpRootPathName, .lpVolumeName>, 'SetVolumeLabelA', \ SetVolumeLabelW, <.lpRootPathName, .lpVolumeName>, 'SetVolumeLabelW', \ SetVolumeMountPointA, <.lpszVolumeMountPoint, .lpszVolumeName>, 'SetVolumeMountPointA', \ SetVolumeMountPointW, <.lpszVolumeMountPoint, .lpszVolumeName>, 'SetVolumeMountPointW', \ SetWaitableTimer, <.hTimer, .lpDueTime, .lPeriod, .pfnCompletionRoutine, .lpArgToCompletionRoutine, .fResume>, 'SetWaitableTimer', \ SetupComm, <.hFile, .dwInQueue, .dwOutQueue>, 'SetupComm', \ ShowConsoleCursor, <NONE>, 'ShowConsoleCursor', \ SignalObjectAndWait, <.hObjectToSignal, .hObjectToWaitOn, .dwMilliseconds, .bAlertable>, 'SignalObjectAndWait', \ SizeofResource, <.hInstance, .hResInfo>, 'SizeofResource', \ SleepWin, <.dwMilliseconds>, 'Sleep', \ SleepEx, <.dwMilliseconds, .bAlertable>, 'SleepEx', \ SuspendThread, <.hThread>, 'SuspendThread', \ SwitchToFiber, <.lpFiber>, 'SwitchToFiber', \ SwitchToThread, <VOID>, 'SwitchToThread', \ SystemTimeToFileTime, <.lpSystemTime, .lpFileTime>, 'SystemTimeToFileTime', \ SystemTimeToTzSpecificLocalTime, <.lpTimeZoneInformation, .lpUniversalTime, .lpLocalTime>, 'SystemTimeToTzSpecificLocalTime', \ TerminateJobObject, <.hJob, .uExitCode>, 'TerminateJobObject', \ TerminateProcess, <.hProcess, .uExitCode>, 'TerminateProcess', \ TerminateThread, <.hThread, .dwExitCode>, 'TerminateThread', \ TermsrvAppInstallMode, <NONE>, 'TermsrvAppInstallMode', \ Thread32First, <.hSnapshot, .lpte>, 'Thread32First', \ Thread32Next, <.hSnapshot, .lpte>, 'Thread32Next', \ TlsAlloc, <VOID>, 'TlsAlloc', \ TlsFree, <.dwTlsIndex>, 'TlsFree', \ TlsGetValue, <.dwTlsIndex>, 'TlsGetValue', \ TlsSetValue, <.dwTlsIndex, .lpTlsValue>, 'TlsSetValue', \ Toolhelp32ReadProcessMemory, <.th32ProcessID, .lpBaseAddress, .lpBuffer, .cbRead, .lpNumberOfBytesRead>, 'Toolhelp32ReadProcessMemory', \ TransactNamedPipe, <.hNamedPipe, .lpInBuffer, .nInBufferSize, .lpOutBuffer, .nOutBufferSize, .lpBytesRead, .lpOverlapped>, 'TransactNamedPipe', \ TransmitCommChar, <.nCid, .cChar>, 'TransmitCommChar', \ TrimVirtualBuffer, <NONE>, 'TrimVirtualBuffer', \ TryEnterCriticalSection, <.lpCriticalSection>, 'TryEnterCriticalSection', \ TzSpecificLocalTimeToSystemTime, <NONE>, 'TzSpecificLocalTimeToSystemTime', \ UTRegister, <NONE>, 'UTRegister', \ UTUnRegister, <NONE>, 'UTUnRegister', \ UnhandledExceptionFilter, <.ExceptionInfo>, 'UnhandledExceptionFilter', \ UnlockFile, <.hFile, .dwFileOffsetLow, .dwFileOffsetHigh, .nNumberOfBytesToUnlockLow, .nNumberOfBytesToUnlockHigh>, 'UnlockFile', \ UnlockFileEx, <.hFile, .dwReserved, .nNumberOfBytesToUnlockLow, .nNumberOfBytesToUnlockHigh, .lpOverlapped>, 'UnlockFileEx', \ UnmapViewOfFile, <.lpBaseAddress>, 'UnmapViewOfFile', \ UnregisterConsoleIME, <NONE>, 'UnregisterConsoleIME', \ UnregisterWait, <.WaitHandle>, 'UnregisterWait', \ UnregisterWaitEx, <.WaitHandle, .CompletionEvent>, 'UnregisterWaitEx', \ UpdateResourceA, <.hUpdate, .lpType, .lpName, .wLanguage, .lpData, .cbData>, 'UpdateResourceA', \ UpdateResourceW, <.hUpdate, .lpType, .lpName, .wLanguage, .lpData, .cbData>, 'UpdateResourceW', \ VDMConsoleOperation, <NONE>, 'VDMConsoleOperation', \ VDMOperationStarted, <NONE>, 'VDMOperationStarted', \ ValidateLCType, <NONE>, 'ValidateLCType', \ ValidateLocale, <NONE>, 'ValidateLocale', \ VerLanguageNameA, <.wLang, .szLang, .nSize>, 'VerLanguageNameA', \ VerLanguageNameW, <.wLang, .szLang, .nSize>, 'VerLanguageNameW', \ VerSetConditionMask, <.ConditionMask, .TypeMask, .Condition>, 'VerSetConditionMask', \ VerifyConsoleIoHandle, <NONE>, 'VerifyConsoleIoHandle', \ VerifyVersionInfoA, <.lpVersionInformation, .dwTypeMask, .dwlConditionMask>, 'VerifyVersionInfoA', \ VerifyVersionInfoW, <.lpVersionInformation, .dwTypeMask, .dwlConditionMask>, 'VerifyVersionInfoW', \ VirtualAlloc, <.lpAddress, .dwSize, .flAllocationType, .flProtect>, 'VirtualAlloc', \ VirtualAllocEx, <.hProcess, .lpAddress, .dwSize, .flAllocationType, .flProtect>, 'VirtualAllocEx', \ VirtualBufferExceptionHandler, <NONE>, 'VirtualBufferExceptionHandler', \ VirtualFree, <.lpAddress, .dwSize, .dwFreeType>, 'VirtualFree', \ VirtualFreeEx, <.hProcess, .lpAddress, .dwSize, .dwFreeType>, 'VirtualFreeEx', \ VirtualLock, <.lpAddress, .dwSize>, 'VirtualLock', \ VirtualProtect, <.lpAddress, .dwSize, .flNewProtect, .lpflOldProtect>, 'VirtualProtect', \ VirtualProtectEx, <.hProcess, .lpAddress, .dwSize, .flNewProtect, .lpflOldProtect>, 'VirtualProtectEx', \ VirtualQuery, <.lpAddress, .lpBuffer, .dwLength>, 'VirtualQuery', \ VirtualQueryEx, <.hProcess, .lpAddress, .lpBuffer, .dwLength>, 'VirtualQueryEx', \ VirtualUnlock, <.lpAddress, .dwSize>, 'VirtualUnlock', \ WTSGetActiveConsoleSessionId, <NONE>, 'WTSGetActiveConsoleSessionId', \ WaitCommEvent, <.hFile, .lpEvtMask, .lpOverlapped>, 'WaitCommEvent', \ WaitForDebugEvent, <.lpDebugEvent, .dwMilliseconds>, 'WaitForDebugEvent', \ WaitForMultipleObjects, <.nCount, .lpHandles, .bWaitAll, .dwMilliseconds>, 'WaitForMultipleObjects', \ WaitForMultipleObjectsEx, <.nCount, .lpHandles, .bWaitAll, .dwMilliseconds, .bAlertable>, 'WaitForMultipleObjectsEx', \ WaitForSingleObject, <.hHandle, .dwMilliseconds>, 'WaitForSingleObject', \ WaitForSingleObjectEx, <.hHandle, .dwMilliseconds, .bAlertable>, 'WaitForSingleObjectEx', \ WaitNamedPipeA, <.lpNamedPipeName, .nTimeOut>, 'WaitNamedPipeA', \ WaitNamedPipeW, <.lpNamedPipeName, .nTimeOut>, 'WaitNamedPipeW', \ WideCharToMultiByte, <.CodePage, .dwFlags, .lpWideCharStr, .cchWideChar, .lpMultiByteStr, .cchMultiByte, .lpDefaultChar, .lpUsedDefaultChar, \ >, 'WideCharToMultiByte', \ WinExec, <.lpCmdLine, .nCmdShow>, 'WinExec', \ WriteConsoleA, <.hConsoleOutput, .lpBuffer, .nNumberOfCharsToWrite, .lpNumberOfCharsWritten, .lpReserved>, 'WriteConsoleA', \ WriteConsoleInputA, <.hConsoleInput, .lpBuffer, .nLength, .lpNumberOfEventsWritten>, 'WriteConsoleInputA', \ WriteConsoleInputVDMA, <NONE>, 'WriteConsoleInputVDMA', \ WriteConsoleInputVDMW, <NONE>, 'WriteConsoleInputVDMW', \ WriteConsoleInputW, <.hConsoleInput, .lpBuffer, .nLength, .lpNumberOfEventsWritten>, 'WriteConsoleInputW', \ WriteConsoleOutputA, <.hConsoleOutput, .lpBuffer, .dwBufferSize, .dwBufferCoord, .lpWriteRegion>, 'WriteConsoleOutputA', \ WriteConsoleOutputAttribute, <.hConsoleOutput, .lpAttribute, .nLength, .dwWriteCoord, .lpNumberOfAttrsWritten>, 'WriteConsoleOutputAttribute', \ WriteConsoleOutputCharacterA, <.hConsoleOutput, .lpCharacter, .nLength, .dwWriteCoord, .lpNumberOfCharsWritten>, 'WriteConsoleOutputCharacterA', \ WriteConsoleOutputCharacterW, <.hConsoleOutput, .lpCharacter, .nLength, .dwWriteCoord, .lpNumberOfCharsWritten>, 'WriteConsoleOutputCharacterW', \ WriteConsoleOutputW, <.hConsoleOutput, .lpBuffer, .dwBufferSize, .dwBufferCoord, .lpWriteRegion>, 'WriteConsoleOutputW', \ WriteConsoleW, <.hConsoleOutput, .lpBuffer, .nNumberOfCharsToWrite, .lpNumberOfCharsWritten, .lpReserved>, 'WriteConsoleW', \ WriteFile, <.hFile, .lpBuffer, .nNumberOfBytesToWrite, .lpNumberOfBytesWritten, .lpOverlapped>, 'WriteFile', \ WriteFileEx, <.hFile, .lpBuffer, .nNumberOfBytesToWrite, .lpOverlapped, .lpCompletionRoutine>, 'WriteFileEx', \ WriteFileGather, <.hFile, .aSegmentArray, .nNumberOfBytesToWrite, .lpReserved, .lpOverlapped>, 'WriteFileGather', \ WritePrivateProfileSectionA, <.lpAppName, .lpString, .lpFileName>, 'WritePrivateProfileSectionA', \ WritePrivateProfileSectionW, <.lpAppName, .lpString, .lpFileName>, 'WritePrivateProfileSectionW', \ WritePrivateProfileStringA, <.lpApplicationName, .lpKeyName, .lpString, .lpFileName>, 'WritePrivateProfileStringA', \ WritePrivateProfileStringW, <.lpApplicationName, .lpKeyName, .lpString, .lpFileName>, 'WritePrivateProfileStringW', \ WritePrivateProfileStructA, <.lpszSection, .lpszKey, .lpStruct, .uSizeStruct, .szFile>, 'WritePrivateProfileStructA', \ WritePrivateProfileStructW, <.lpszSection, .lpszKey, .lpStruct, .uSizeStruct, .szFile>, 'WritePrivateProfileStructW', \ WriteProcessMemory, <.hProcess, .lpBaseAddress, .lpBuffer, .nSize, .lpNumberOfBytesWritten>, 'WriteProcessMemory', \ WriteProfileSectionA, <.lpAppName, .lpString>, 'WriteProfileSectionA', \ WriteProfileSectionW, <.lpAppName, .lpString>, 'WriteProfileSectionW', \ WriteProfileStringA, <.lpszSection, .lpszKeyName, .lpszString>, 'WriteProfileStringA', \ WriteProfileStringW, <.lpszSection, .lpszKeyName, .lpszString>, 'WriteProfileStringW', \ WriteTapemark, <.hDevice, .dwTapemarkType, .dwTapemarkCount, .bimmediate>, 'WriteTapemark', \ ZombifyActCtx, <NONE>, 'ZombifyActCtx', \ _hread, <NONE>, '_hread', \ _hwrite, <NONE>, '_hwrite', \ _lclose, <NONE>, '_lclose', \ _lcreat, <NONE>, '_lcreat', \ _llseek, <NONE>, '_llseek', \ _lopen, <NONE>, '_lopen', \ _lread, <NONE>, '_lread', \ _lwrite, <NONE>, '_lwrite', \ lstrcat, <.lpString1, .lpString2>, 'lstrcat', \ lstrcatA, <.lpString1, .lpString2>, 'lstrcatA', \ lstrcatW, <.lpString1, .lpString2>, 'lstrcatW', \ lstrcmp, <.lpString1, .lpString2>, 'lstrcmp', \ lstrcmpA, <.lpString1, .lpString2>, 'lstrcmpA', \ lstrcmpW, <.lpString1, .lpString2>, 'lstrcmpW', \ lstrcmpi, <.lpString1, .lpString2>, 'lstrcmpi', \ lstrcmpiA, <.lpString1, .lpString2>, 'lstrcmpiA', \ lstrcmpiW, <.lpString1, .lpString2>, 'lstrcmpiW', \ lstrcpy, <.lpString1, .lpString2>, 'lstrcpy', \ lstrcpyA, <.lpString1, .lpString2>, 'lstrcpyA', \ lstrcpyW, <.lpString1, .lpString2>, 'lstrcpyW', \ lstrcpyn, <.lpString1, .lpString2, .iMaxLength>, 'lstrcpyn', \ lstrcpynA, <.lpString1, .lpString2, .iMaxLength>, 'lstrcpynA', \ lstrcpynW, <.lpString1, .lpString2, .iMaxLength>, 'lstrcpynW', \ lstrlen, <.lpString>, 'lstrlen', \ lstrlenA, <.lpString>, 'lstrlenA', \ lstrlenW, <.lpString>, 'lstrlenW' |
Added freshlib/imports/Win32/msimg32.inc.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: msimg32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto msimg32, \ AlphaBlend, <.hdcDest, .xDest, .yDest, .wDest, .hDest, .hdcSrc, .xSrc, .ySrc, .wSrc, .hSrc, .pBlendFn>, 'AlphaBlend', \ GradientFill, <.hdc, .PTRIVERTEX, .ulong, .pvoid>, 'GradientFill', \ TransparentBlt, <.hdc, .t, .uint>, 'TransparentBlt', \ vSetDdrawflag, <NONE>, 'vSetDdrawflag' |
Added freshlib/imports/Win32/odbc32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: odbc32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto odbc32, \ CloseODBCPerfData, <NONE>, 'CloseODBCPerfData', \ CollectODBCPerfData, <NONE>, 'CollectODBCPerfData', \ CursorLibLockDbc, <NONE>, 'CursorLibLockDbc', \ CursorLibLockDesc, <NONE>, 'CursorLibLockDesc', \ CursorLibLockStmt, <NONE>, 'CursorLibLockStmt', \ CursorLibTransact, <NONE>, 'CursorLibTransact', \ GetODBCSharedData, <NONE>, 'GetODBCSharedData', \ LockHandle, <NONE>, 'LockHandle', \ MpHeapAlloc, <NONE>, 'MpHeapAlloc', \ MpHeapCompact, <NONE>, 'MpHeapCompact', \ MpHeapCreate, <NONE>, 'MpHeapCreate', \ MpHeapDestroy, <NONE>, 'MpHeapDestroy', \ MpHeapFree, <NONE>, 'MpHeapFree', \ MpHeapReAlloc, <NONE>, 'MpHeapReAlloc', \ MpHeapSize, <NONE>, 'MpHeapSize', \ MpHeapValidate, <NONE>, 'MpHeapValidate', \ ODBCGetTryWaitValue, <VOID>, 'ODBCGetTryWaitValue', \ ODBCInternalConnectW, <NONE>, 'ODBCInternalConnectW', \ ODBCQualifyFileDSNW, <NONE>, 'ODBCQualifyFileDSNW', \ ODBCSetTryWaitValue, <.dwValue>, 'ODBCSetTryWaitValue', \ OpenODBCPerfData, <NONE>, 'OpenODBCPerfData', \ PostComponentError, <NONE>, 'PostComponentError', \ PostODBCComponentError, <NONE>, 'PostODBCComponentError', \ PostODBCError, <NONE>, 'PostODBCError', \ SQLAllocConnect, <.henv, .phdbc>, 'SQLAllocConnect', \ SQLAllocEnv, <.phenv>, 'SQLAllocEnv', \ SQLAllocHandle, <.HandleType, .InputHandle, .OutputHandle>, 'SQLAllocHandle', \ SQLAllocHandleStd, <.fHandleType, .hInput, .phOutput>, 'SQLAllocHandleStd', \ SQLAllocStmt, <.hdbc, .phstmt>, 'SQLAllocStmt', \ SQLBindCol, <.hstmt, .icol, .fCType, .rgbValue, .cbValueMax, .pcbValue>, 'SQLBindCol', \ SQLBindParam, <.StatementHandle, .ParameterNumber, .ValueType, .ParameterType, .LengthPrecision, .ParameterScale, .ParameterValue, \ .StrLen_or_Ind>, 'SQLBindParam', \ SQLBindParameter, <.hstmt, .ipar, .fParamType, .fCType, .fSqlType, .cbColDef, .ibScale, .rgbValue, .cbValueMax, .pcbValue>, 'SQLBindParameter', \ SQLBrowseConnect, <.hdbc, .szConnStrIn, .cbConnStrIn, .szConnStrOut, .cbConnStrOutMax, .pcbConnStrOut>, 'SQLBrowseConnect', \ SQLBrowseConnectA, <.hdbc, .szConnStrIn, .cbConnStrIn, .szConnStrOut, .cbConnStrOutMax, .pcbConnStrOut>, 'SQLBrowseConnectA', \ SQLBrowseConnectW, <.hdbc, .szConnStrIn, .cbConnStrIn, .szConnStrOut, .cbConnStrOutMax, .pcbConnStrOut>, 'SQLBrowseConnectW', \ SQLBulkOperations, <.StatementHandle, .Operation>, 'SQLBulkOperations', \ SQLCancel, <.hstmt>, 'SQLCancel', \ SQLCloseCursor, <.StatementHandle>, 'SQLCloseCursor', \ SQLColAttribute, <.hstmt, .iCol, .iField, .pCharAttr, .cbCharAttrMax, .pcbCharAttr, .pNumAttr>, 'SQLColAttribute', \ SQLColAttributeA, <.hstmt, .iCol, .iField, .pCharAttr, .cbCharAttrMax, .pcbCharAttr, .pNumAttr>, 'SQLColAttributeA', \ SQLColAttributeW, <.hstmt, .iCol, .iField, .pCharAttr, .cbCharAttrMax, .pcbCharAttr, .pNumAttr>, 'SQLColAttributeW', \ SQLColAttributes, <.hstmt, .icol, .fDescType, .rgbDesc, .cbDescMax, .pcbDesc, .pfDesc>, 'SQLColAttributes', \ SQLColAttributesA, <.hstmt, .icol, .fDescType, .rgbDesc, .cbDescMax, .pcbDesc, .pfDesc>, 'SQLColAttributesA', \ SQLColAttributesW, <.hstmt, .icol, .fDescType, .rgbDesc, .cbDescMax, .pcbDesc, .pfDesc>, 'SQLColAttributesW', \ SQLColumnPrivileges, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .szColumnName, \ .cbColumnName>, 'SQLColumnPrivileges', \ SQLColumnPrivilegesA, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .szColumnName, \ .cbColumnName>, 'SQLColumnPrivilegesA', \ SQLColumnPrivilegesW, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .szColumnName, \ .cbColumnName>, 'SQLColumnPrivilegesW', \ SQLColumns, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .szColumnName, .cbColumnName, \ >, 'SQLColumns', \ SQLColumnsA, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .szColumnName, \ .cbColumnName>, 'SQLColumnsA', \ SQLColumnsW, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .szColumnName, \ .cbColumnName>, 'SQLColumnsW', \ SQLConnect, <.hdbc, .szDSN, .cbDSN, .szUID, .cbUID, .szAuthStr, .cbAuthStr>, 'SQLConnect', \ SQLConnectA, <.hdbc, .szDSN, .cbDSN, .szUID, .cbUID, .szAuthStr, .cbAuthStr>, 'SQLConnectA', \ SQLConnectW, <.hdbc, .szDSN, .cbDSN, .szUID, .cbUID, .szAuthStr, .cbAuthStr>, 'SQLConnectW', \ SQLCopyDesc, <.SourceDescHandle, .TargetDescHandle>, 'SQLCopyDesc', \ SQLDataSources, <.henv, .fDirection, .szDSN, .cbDSNMax, .pcbDSN, .szDescription, .cbDescriptionMax, .pcbDescription>, 'SQLDataSources', \ SQLDataSourcesA, <.henv, .fDirection, .szDSN, .cbDSNMax, .pcbDSN, .szDescription, .cbDescriptionMax, .pcbDescription>, 'SQLDataSourcesA', \ SQLDataSourcesW, <.henv, .fDirection, .szDSN, .cbDSNMax, .pcbDSN, .szDescription, .cbDescriptionMax, .pcbDescription>, 'SQLDataSourcesW', \ SQLDescribeCol, <.hstmt, .icol, .szColName, .cbColNameMax, .pcbColName, .pfSqlType, .pcbColDef, .pibScale, .pfNullable>, 'SQLDescribeCol', \ SQLDescribeColA, <.hstmt, .icol, .szColName, .cbColNameMax, .pcbColName, .pfSqlType, .pcbColDef, .pibScale, .pfNullable>, 'SQLDescribeColA', \ SQLDescribeColW, <.hstmt, .icol, .szColName, .cbColNameMax, .pcbColName, .pfSqlType, .pcbColDef, .pibScale, .pfNullable>, 'SQLDescribeColW', \ SQLDescribeParam, <.hstmt, .ipar, .pfSqlType, .pcbParamDef, .pibScale, .pfNullable>, 'SQLDescribeParam', \ SQLDisconnect, <.hdbc>, 'SQLDisconnect', \ SQLDriverConnect, <.hdbc, .hwnd, .szConnStrIn, .cbConnStrIn, .szConnStrOut, .cbConnStrOutMax, .pcbConnStrOut, .fDriverCompletion, \ >, 'SQLDriverConnect', \ SQLDriverConnectA, <.hdbc, .hwnd, .szConnStrIn, .cbConnStrIn, .szConnStrOut, .cbConnStrOutMax, .pcbConnStrOut, .fDriverCompletion, \ >, 'SQLDriverConnectA', \ SQLDriverConnectW, <.hdbc, .hwnd, .szConnStrIn, .cbConnStrIn, .szConnStrOut, .cbConnStrOutMax, .pcbConnStrOut, .fDriverCompletion, \ >, 'SQLDriverConnectW', \ SQLDrivers, <.henv, .fDirection, .szDriverDesc, .cbDriverDescMax, .pcbDriverDesc, .szDriverAttributes, .cbDrvrAttrMax, .pcbDrvrAttr, \ >, 'SQLDrivers', \ SQLDriversA, <.henv, .fDirection, .szDriverDesc, .cbDriverDescMax, .pcbDriverDesc, .szDriverAttributes, .cbDrvrAttrMax, .pcbDrvrAttr, \ >, 'SQLDriversA', \ SQLDriversW, <.henv, .fDirection, .szDriverDesc, .cbDriverDescMax, .pcbDriverDesc, .szDriverAttributes, .cbDrvrAttrMax, .pcbDrvrAttr, \ >, 'SQLDriversW', \ SQLEndTran, <.HandleType, .handle, .CompletionType>, 'SQLEndTran', \ SQLError, <.henv, .hdbc, .hstmt, .szSqlState, .pfNativeError, .szErrorMsg, .cbErrorMsgMax, .pcbErrorMsg>, 'SQLError', \ SQLErrorA, <.henv, .hdbc, .hstmt, .szSqlState, .pfNativeError, .szErrorMsg, .cbErrorMsgMax, .pcbErrorMsg>, 'SQLErrorA', \ SQLErrorW, <.henv, .hdbc, .hstmt, .szSqlState, .pfNativeError, .szErrorMsg, .cbErrorMsgMax, .pcbErrorMsg>, 'SQLErrorW', \ SQLExecDirect, <.hstmt, .szSqlStr, .cbSqlStr>, 'SQLExecDirect', \ SQLExecDirectA, <.hstmt, .szSqlStr, .cbSqlStr>, 'SQLExecDirectA', \ SQLExecDirectW, <.hstmt, .szSqlStr, .cbSqlStr>, 'SQLExecDirectW', \ SQLExecute, <.hstmt>, 'SQLExecute', \ SQLExtendedFetch, <.hstmt, .fFetchType, .irow, .pcrow, .rgfRowStatus>, 'SQLExtendedFetch', \ SQLFetch, <.hstmt>, 'SQLFetch', \ SQLFetchScroll, <.StatementHandle, .FetchOrientation, .FetchOffset>, 'SQLFetchScroll', \ SQLForeignKeys, <.hstmt, .szPkCatalogName, .cbPkCatalogName, .szPkSchemaName, .cbPkSchemaName, .szPkTableName, .cbPkTableName, \ .szFkCatalogName, .cbFkCatalogName, .szFkSchemaName, .cbFkSchemaName, .szFkTableName, .cbFkTableName>, 'SQLForeignKeys', \ SQLForeignKeysA, <.hstmt, .szPkCatalogName, .cbPkCatalogName, .szPkSchemaName, .cbPkSchemaName, .szPkTableName, .cbPkTableName, \ .szFkCatalogName, .cbFkCatalogName, .szFkSchemaName, .cbFkSchemaName, .szFkTableName, .cbFkTableName>, 'SQLForeignKeysA', \ SQLForeignKeysW, <.hstmt, .szPkCatalogName, .cbPkCatalogName, .szPkSchemaName, .cbPkSchemaName, .szPkTableName, .cbPkTableName, \ .szFkCatalogName, .cbFkCatalogName, .szFkSchemaName, .cbFkSchemaName, .szFkTableName, .cbFkTableName>, 'SQLForeignKeysW', \ SQLFreeConnect, <.hdbc>, 'SQLFreeConnect', \ SQLFreeEnv, <.henv>, 'SQLFreeEnv', \ SQLFreeHandle, <.HandleType, .handle>, 'SQLFreeHandle', \ SQLFreeStmt, <.hstmt, .fOption>, 'SQLFreeStmt', \ SQLGetConnectAttr, <.ConnectionHandle, .lAttribute, .lValue, .BufferLength, .StringLength>, 'SQLGetConnectAttr', \ SQLGetConnectAttrA, <.ConnectionHandle, .lAttribute, .lValue, .BufferLength, .StringLength>, 'SQLGetConnectAttrA', \ SQLGetConnectAttrW, <.ConnectionHandle, .lAttribute, .lValue, .BufferLength, .StringLength>, 'SQLGetConnectAttrW', \ SQLGetConnectOption, <.hdbc, .fOption, .pvParam>, 'SQLGetConnectOption', \ SQLGetConnectOptionA, <.hdbc, .fOption, .pvParam>, 'SQLGetConnectOptionA', \ SQLGetConnectOptionW, <.hdbc, .fOption, .pvParam>, 'SQLGetConnectOptionW', \ SQLGetCursorName, <.hstmt, .szCursor, .cbCursorMax, .pcbCursor>, 'SQLGetCursorName', \ SQLGetCursorNameA, <.hstmt, .szCursor, .cbCursorMax, .pcbCursor>, 'SQLGetCursorNameA', \ SQLGetCursorNameW, <.hstmt, .szCursor, .cbCursorMax, .pcbCursor>, 'SQLGetCursorNameW', \ SQLGetData, <.hstmt, .icol, .fCType, .rgbValue, .cbValueMax, .pcbValue>, 'SQLGetData', \ SQLGetDescField, <.hdesc, .iRecord, .iField, .rgbValue, .cbValueMax, .pcbValue>, 'SQLGetDescField', \ SQLGetDescFieldA, <.hdesc, .iRecord, .iField, .rgbValue, .cbValueMax, .pcbValue>, 'SQLGetDescFieldA', \ SQLGetDescFieldW, <.hdesc, .iRecord, .iField, .rgbValue, .cbValueMax, .pcbValue>, 'SQLGetDescFieldW', \ SQLGetDescRec, <.hdesc, .iRecord, .szName, .cbNameMax, .pcbName, .pfType, .pfSubType, .pLength, .pPrecision, .pScale, .pNullable, \ >, 'SQLGetDescRec', \ SQLGetDescRecA, <.hdesc, .iRecord, .szName, .cbNameMax, .pcbName, .pfType, .pfSubType, .pLength, .pPrecision, .pScale, .pNullable, \ >, 'SQLGetDescRecA', \ SQLGetDescRecW, <.hdesc, .iRecord, .szName, .cbNameMax, .pcbName, .pfType, .pfSubType, .pLength, .pPrecision, .pScale, .pNullable, \ >, 'SQLGetDescRecW', \ SQLGetDiagField, <.HandleType, .handle, .RecNumber, .DiagIdentifier, .DiagInfo, .BufferLength, .StringLength>, 'SQLGetDiagField', \ SQLGetDiagFieldA, <.HandleType, .handle, .RecNumber, .DiagIdentifier, .DiagInfo, .BufferLength, .StringLength>, 'SQLGetDiagFieldA', \ SQLGetDiagFieldW, <.HandleType, .handle, .RecNumber, .DiagIdentifier, .DiagInfo, .BufferLength, .StringLength>, 'SQLGetDiagFieldW', \ SQLGetDiagRec, <.fHandleType, .handle, .iRecord, .szSqlState, .pfNativeError, .szErrorMsg, .cbErrorMsgMax, .pcbErrorMsg>, 'SQLGetDiagRec', \ SQLGetDiagRecA, <.fHandleType, .handle, .iRecord, .szSqlState, .pfNativeError, .szErrorMsg, .cbErrorMsgMax, .pcbErrorMsg>, 'SQLGetDiagRecA', \ SQLGetDiagRecW, <.fHandleType, .handle, .iRecord, .szSqlState, .pfNativeError, .szErrorMsg, .cbErrorMsgMax, .pcbErrorMsg>, 'SQLGetDiagRecW', \ SQLGetEnvAttr, <.EnvironmentHandle, .lAttribute, .lValue, .BufferLength, .StringLength>, 'SQLGetEnvAttr', \ SQLGetFunctions, <.hdbc, .fFunction, .pfExists>, 'SQLGetFunctions', \ SQLGetInfo, <.hdbc, .fInfoType, .rgbInfoValue, .cbInfoValueMax, .pcbInfoValue>, 'SQLGetInfo', \ SQLGetInfoA, <.hdbc, .fInfoType, .rgbInfoValue, .cbInfoValueMax, .pcbInfoValue>, 'SQLGetInfoA', \ SQLGetInfoW, <.hdbc, .fInfoType, .rgbInfoValue, .cbInfoValueMax, .pcbInfoValue>, 'SQLGetInfoW', \ SQLGetStmtAttr, <.hstmt, .fAttribute, .rgbValue, .cbValueMax, .pcbValue>, 'SQLGetStmtAttr', \ SQLGetStmtAttrA, <.hstmt, .fAttribute, .rgbValue, .cbValueMax, .pcbValue>, 'SQLGetStmtAttrA', \ SQLGetStmtAttrW, <.hstmt, .fAttribute, .rgbValue, .cbValueMax, .pcbValue>, 'SQLGetStmtAttrW', \ SQLGetStmtOption, <.hstmt, .fOption, .pvParam>, 'SQLGetStmtOption', \ SQLGetTypeInfo, <.hstmt, .fSqlType>, 'SQLGetTypeInfo', \ SQLGetTypeInfoA, <.hstmt, .fSqlType>, 'SQLGetTypeInfoA', \ SQLGetTypeInfoW, <.hstmt, .fSqlType>, 'SQLGetTypeInfoW', \ SQLMoreResults, <.hstmt>, 'SQLMoreResults', \ SQLNativeSql, <.hdbc, .szSqlStrIn, .cbSqlStrIn, .szSqlStr, .cbSqlStrMax, .pcbSqlStr>, 'SQLNativeSql', \ SQLNativeSqlA, <.hdbc, .szSqlStrIn, .cbSqlStrIn, .szSqlStr, .cbSqlStrMax, .pcbSqlStr>, 'SQLNativeSqlA', \ SQLNativeSqlW, <.hdbc, .szSqlStrIn, .cbSqlStrIn, .szSqlStr, .cbSqlStrMax, .pcbSqlStr>, 'SQLNativeSqlW', \ SQLNumParams, <.hstmt, .pcpar>, 'SQLNumParams', \ SQLNumResultCols, <.hstmt, .pccol>, 'SQLNumResultCols', \ SQLParamData, <.hstmt, .prgbValue>, 'SQLParamData', \ SQLParamOptions, <.hstmt, .crow, .pirow>, 'SQLParamOptions', \ SQLPrepare, <.hstmt, .szSqlStr, .cbSqlStr>, 'SQLPrepare', \ SQLPrepareA, <.hstmt, .szSqlStr, .cbSqlStr>, 'SQLPrepareA', \ SQLPrepareW, <.hstmt, .szSqlStr, .cbSqlStr>, 'SQLPrepareW', \ SQLPrimaryKeys, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName>, 'SQLPrimaryKeys', \ SQLPrimaryKeysA, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName>, 'SQLPrimaryKeysA', \ SQLPrimaryKeysW, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName>, 'SQLPrimaryKeysW', \ SQLProcedureColumns, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szProcName, .cbProcName, .szColumnName, \ .cbColumnName>, 'SQLProcedureColumns', \ SQLProcedureColumnsA, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szProcName, .cbProcName, .szColumnName, \ .cbColumnName>, 'SQLProcedureColumnsA', \ SQLProcedureColumnsW, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szProcName, .cbProcName, .szColumnName, \ .cbColumnName>, 'SQLProcedureColumnsW', \ SQLProcedures, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szProcName, .cbProcName>, 'SQLProcedures', \ SQLProceduresA, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szProcName, .cbProcName>, 'SQLProceduresA', \ SQLProceduresW, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szProcName, .cbProcName>, 'SQLProceduresW', \ SQLPutData, <.hstmt, .rgbValue, .cbValue>, 'SQLPutData', \ SQLRowCount, <.hstmt, .pcrow>, 'SQLRowCount', \ SQLSetConnectAttr, <.hdbc, .fAttribute, .rgbValue, .cbValue>, 'SQLSetConnectAttr', \ SQLSetConnectAttrA, <.hdbc, .fAttribute, .rgbValue, .cbValue>, 'SQLSetConnectAttrA', \ SQLSetConnectAttrW, <.hdbc, .fAttribute, .rgbValue, .cbValue>, 'SQLSetConnectAttrW', \ SQLSetConnectOption, <.hdbc, .fOption, .vParam>, 'SQLSetConnectOption', \ SQLSetConnectOptionA, <.hdbc, .fOption, .vParam>, 'SQLSetConnectOptionA', \ SQLSetConnectOptionW, <.hdbc, .fOption, .vParam>, 'SQLSetConnectOptionW', \ SQLSetCursorName, <.hstmt, .szCursor, .cbCursor>, 'SQLSetCursorName', \ SQLSetCursorNameA, <.hstmt, .szCursor, .cbCursor>, 'SQLSetCursorNameA', \ SQLSetCursorNameW, <.hstmt, .szCursor, .cbCursor>, 'SQLSetCursorNameW', \ SQLSetDescField, <.DescriptorHandle, .RecNumber, .FieldIdentifier, .Value, .BufferLength>, 'SQLSetDescField', \ SQLSetDescFieldA, <.DescriptorHandle, .RecNumber, .FieldIdentifier, .Value, .BufferLength>, 'SQLSetDescFieldA', \ SQLSetDescFieldW, <.DescriptorHandle, .RecNumber, .FieldIdentifier, .Value, .BufferLength>, 'SQLSetDescFieldW', \ SQLSetDescRec, <.DescriptorHandle, .RecNumber, .lType, .SubType, .Length, .Precision, .kScale, .Data, .StringLength, .Indicator, \ >, 'SQLSetDescRec', \ SQLSetEnvAttr, <.EnvironmentHandle, .lAttribute, .Value, .StringLength>, 'SQLSetEnvAttr', \ SQLSetParam, <.hstmt, .ipar, .fCType, .fSqlType, .cbParamDef, .ibScale, .rgbValue, .pcbValue>, 'SQLSetParam', \ SQLSetPos, <.hstmt, .irow, .fOption, .fLock>, 'SQLSetPos', \ SQLSetScrollOptions, <.hstmt, .fConcurrency, .crowKeyset, .crowRowset>, 'SQLSetScrollOptions', \ SQLSetStmtAttr, <.StatementHandle, .lAttribute, .Value, .StringLength>, 'SQLSetStmtAttr', \ SQLSetStmtAttrA, <.StatementHandle, .lAttribute, .Value, .StringLength>, 'SQLSetStmtAttrA', \ SQLSetStmtAttrW, <.StatementHandle, .lAttribute, .Value, .StringLength>, 'SQLSetStmtAttrW', \ SQLSetStmtOption, <.hstmt, .fOption, .vParam>, 'SQLSetStmtOption', \ SQLSpecialColumns, <.hstmt, .fColType, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, \ .fScope, .fNullable>, 'SQLSpecialColumns', \ SQLSpecialColumnsA, <.hstmt, .fColType, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, \ .fScope, .fNullable>, 'SQLSpecialColumnsA', \ SQLSpecialColumnsW, <.hstmt, .fColType, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, \ .fScope, .fNullable>, 'SQLSpecialColumnsW', \ SQLStatistics, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .fUnique, .fAccuracy, \ >, 'SQLStatistics', \ SQLStatisticsA, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .fUnique, .fAccuracy, \ >, 'SQLStatisticsA', \ SQLStatisticsW, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .fUnique, .fAccuracy, \ >, 'SQLStatisticsW', \ SQLTablePrivileges, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName>, 'SQLTablePrivileges', \ SQLTablePrivilegesA, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName>, 'SQLTablePrivilegesA', \ SQLTablePrivilegesW, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName>, 'SQLTablePrivilegesW', \ SQLTables, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .szTableType, .cbTableType, \ >, 'SQLTables', \ SQLTablesA, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .szTableType, .cbTableType, \ >, 'SQLTablesA', \ SQLTablesW, <.hstmt, .szCatalogName, .cbCatalogName, .szSchemaName, .cbSchemaName, .szTableName, .cbTableName, .szTableType, .cbTableType, \ >, 'SQLTablesW', \ SQLTransact, <.henv, .hdbc, .fType>, 'SQLTransact', \ SearchStatusCode, <NONE>, 'SearchStatusCode', \ VFreeErrors, <NONE>, 'VFreeErrors', \ VRetrieveDriverErrorsRowCol, <NONE>, 'VRetrieveDriverErrorsRowCol', \ ValidateErrorQueue, <NONE>, 'ValidateErrorQueue', \ g_hHeapMalloc, <NONE>, 'g_hHeapMalloc' |
Added freshlib/imports/Win32/ole32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: ole32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto ole32, \ BindMoniker, <.pmk, .grfOpt, .iidResult, .ppvResult>, 'BindMoniker', \ CLIPFORMAT_UserFree, <.pLong, .pClipformat>, 'CLIPFORMAT_UserFree', \ CLIPFORMAT_UserMarshal, <.pLong, .pChar, .pClipformat>, 'CLIPFORMAT_UserMarshal', \ CLIPFORMAT_UserSize, <.pLong, .lLong, .pClipformat>, 'CLIPFORMAT_UserSize', \ CLIPFORMAT_UserUnmarshal, <.pLong, .pChar, .pClipformat>, 'CLIPFORMAT_UserUnmarshal', \ CLSIDFromOle1Class, <NONE>, 'CLSIDFromOle1Class', \ CLSIDFromProgID, <.TSzProgID, .T>, 'CLSIDFromProgID', \ CLSIDFromProgIDEx, <.lpszProgID, .lpclsid>, 'CLSIDFromProgIDEx', \ CLSIDFromString, <.lpsz, .pclsid>, 'CLSIDFromString', \ CoAddRefServerProcess, <VOID>, 'CoAddRefServerProcess', \ CoAllowSetForegroundWindow, <.pUnk, .lpvReserved>, 'CoAllowSetForegroundWindow', \ CoBuildVersion, <VOID>, 'CoBuildVersion', \ CoCancelCall, <.dwThreadId, .ulTimeout>, 'CoCancelCall', \ CoCopyProxy, <.pProxy, .ppCopy>, 'CoCopyProxy', \ CoCreateFreeThreadedMarshaler, <.punkOuter, .ppunkMarshal>, 'CoCreateFreeThreadedMarshaler', \ CoCreateGuid, <.pguid>, 'CoCreateGuid', \ CoCreateInstance, <.rclsid, .pUnkOuter, .dwClsContext, .riid, .ppv>, 'CoCreateInstance', \ CoCreateInstanceEx, <.Clsid, .punkOuter, .dwClsCtx, .pServerInfo, .dwCount, .pResults>, 'CoCreateInstanceEx', \ CoCreateObjectInContext, <NONE>, 'CoCreateObjectInContext', \ CoDeactivateObject, <NONE>, 'CoDeactivateObject', \ CoDisableCallCancellation, <.pReserved>, 'CoDisableCallCancellation', \ CoDisconnectObject, <.pUnk, .dwReserved>, 'CoDisconnectObject', \ CoDosDateTimeToFileTime, <.nDosDate, .nDosTime, .lpFileTime>, 'CoDosDateTimeToFileTime', \ CoEnableCallCancellation, <.pReserved>, 'CoEnableCallCancellation', \ CoFileTimeNow, <.lpFileTime>, 'CoFileTimeNow', \ CoFileTimeToDosDateTime, <.lpFileTime, .lpDosDate, .lpDosTime>, 'CoFileTimeToDosDateTime', \ CoFreeAllLibraries, <VOID>, 'CoFreeAllLibraries', \ CoFreeLibrary, <.hInst>, 'CoFreeLibrary', \ CoFreeUnusedLibraries, <VOID>, 'CoFreeUnusedLibraries', \ CoFreeUnusedLibrariesEx, <NONE>, 'CoFreeUnusedLibrariesEx', \ CoGetApartmentID, <NONE>, 'CoGetApartmentID', \ CoGetCallContext, <.riid, .ppInterface>, 'CoGetCallContext', \ CoGetCallerTID, <NONE>, 'CoGetCallerTID', \ CoGetCancelObject, <.dwThreadId, .iid, .ppUnk>, 'CoGetCancelObject', \ CoGetClassObject, <.rclsid, .dwClsContext, .pvReserved, .riid, .ppv>, 'CoGetClassObject', \ CoGetClassVersion, <.pClassSpec, .pdwVersionMS, .pdwVersionLS>, 'CoGetClassVersion', \ CoGetComCatalog, <NONE>, 'CoGetComCatalog', \ CoGetContextToken, <NONE>, 'CoGetContextToken', \ CoGetCurrentLogicalThreadId, <NONE>, 'CoGetCurrentLogicalThreadId', \ CoGetCurrentProcess, <VOID>, 'CoGetCurrentProcess', \ CoGetDefaultContext, <NONE>, 'CoGetDefaultContext', \ CoGetInstanceFromFile, <.pServerInfo, .pClsid, .punkOuter, .dwClsCtx, .grfMode, .pwszName, .dwCount, .pResults>, 'CoGetInstanceFromFile', \ CoGetInstanceFromIStorage, <.pServerInfo, .pClsid, .punkOuter, .dwClsCtx, .pstg, .dwCount, .pResults>, 'CoGetInstanceFromIStorage', \ CoGetInterceptor, <NONE>, 'CoGetInterceptor', \ CoGetInterceptorFromTypeInfo, <NONE>, 'CoGetInterceptorFromTypeInfo', \ CoGetInterfaceAndReleaseStream, <.pStm, .iid, .ppv>, 'CoGetInterfaceAndReleaseStream', \ CoGetMalloc, <.dwMemContext, .ppMalloc>, 'CoGetMalloc', \ CoGetMarshalSizeMax, <.pulSize, .riid, .pUnk, .dwDestContext, .pvDestContext, .mshlflags>, 'CoGetMarshalSizeMax', \ CoGetObject, <.pszName, .pBindOptions, .riid, .ppv>, 'CoGetObject', \ CoGetObjectContext, <.riid, .ppv>, 'CoGetObjectContext', \ CoGetPSClsid, <.riid, .pClsid>, 'CoGetPSClsid', \ CoGetProcessIdentifier, <NONE>, 'CoGetProcessIdentifier', \ CoGetStandardMarshal, <.riid, .pUnk, .dwDestContext, .pvDestContext, .mshlflags, .ppMarshal>, 'CoGetStandardMarshal', \ CoGetState, <NONE>, 'CoGetState', \ CoGetStdMarshalEx, <.pUnkOuter, .smexflags, .ppUnkInner>, 'CoGetStdMarshalEx', \ CoGetSystemSecurityPermissions, <NONE>, 'CoGetSystemSecurityPermissions', \ CoGetTreatAsClass, <.clsidOld, .pClsidNew>, 'CoGetTreatAsClass', \ CoImpersonateClient, <VOID>, 'CoImpersonateClient', \ CoInitialize, <.pzReserved>, 'CoInitialize', \ CoInitializeEx, <.pvReserved, .dwCoInit>, 'CoInitializeEx', \ CoInitializeSecurity, <.pSecDesc, .cAuthSvc, .asAuthSvc, .pReserved1, .dwAuthnLevel, .dwImpLevel, .pAuthList, .dwCapabilities, \ .pReserved3>, 'CoInitializeSecurity', \ CoInitializeWOW, <NONE>, 'CoInitializeWOW', \ CoInstall, <.pbc, .dwFlags, .pClassSpec, .pQuery, .pszCodeBase>, 'CoInstall', \ CoInvalidateRemoteMachineBindings, <NONE>, 'CoInvalidateRemoteMachineBindings', \ CoIsHandlerConnected, <.pUnk>, 'CoIsHandlerConnected', \ CoIsOle1Class, <.rclsid>, 'CoIsOle1Class', \ CoLoadLibrary, <.lpszLibName, .bAutoFree>, 'CoLoadLibrary', \ CoLockObjectExternal, <.pUnk, .fLock, .fLastUnlockReleases>, 'CoLockObjectExternal', \ CoMarshalHresult, <.pstm, .hresult>, 'CoMarshalHresult', \ CoMarshalInterThreadInterfaceInStream, <.riid, .pUnk, .ppStm>, 'CoMarshalInterThreadInterfaceInStream', \ CoMarshalInterface, <.pStm, .riid, .pUnk, .dwDestContext, .pvDestContext, .mshlflags>, 'CoMarshalInterface', \ CoPopServiceDomain, <NONE>, 'CoPopServiceDomain', \ CoPushServiceDomain, <NONE>, 'CoPushServiceDomain', \ CoQueryAuthenticationServices, <.pcAuthSvc, .asAuthSvc>, 'CoQueryAuthenticationServices', \ CoQueryClientBlanket, <.pAuthnSvc, .pAuthzSvc, .pServerPrincName, .pAuthnLevel, .pImpLevel, .pPrivs, .pCapabilities>, 'CoQueryClientBlanket', \ CoQueryProxyBlanket, <.pProxy, .pwAuthnSvc, .pAuthzSvc, .pServerPrincName, .pAuthnLevel, .pImpLevel, .pAuthInfo, .pCapabilites, \ >, 'CoQueryProxyBlanket', \ CoQueryReleaseObject, <NONE>, 'CoQueryReleaseObject', \ CoReactivateObject, <NONE>, 'CoReactivateObject', \ CoRegisterChannelHook, <.ExtensionUuid, .pChannelHook>, 'CoRegisterChannelHook', \ CoRegisterClassObject, <.rclsid, .pUnk, .dwClsContext, .flags, .lpdwRegister>, 'CoRegisterClassObject', \ CoRegisterInitializeSpy, <NONE>, 'CoRegisterInitializeSpy', \ CoRegisterMallocSpy, <.pMallocSpy>, 'CoRegisterMallocSpy', \ CoRegisterMessageFilter, <.lpMessageFilter, .lplpMessageFilter>, 'CoRegisterMessageFilter', \ CoRegisterPSClsid, <.riid, .rclsid>, 'CoRegisterPSClsid', \ CoRegisterSurrogate, <.pSurrogate>, 'CoRegisterSurrogate', \ CoRegisterSurrogateEx, <NONE>, 'CoRegisterSurrogateEx', \ CoReleaseMarshalData, <.pStm>, 'CoReleaseMarshalData', \ CoReleaseServerProcess, <VOID>, 'CoReleaseServerProcess', \ CoResumeClassObjects, <VOID>, 'CoResumeClassObjects', \ CoRetireServer, <NONE>, 'CoRetireServer', \ CoRevertToSelf, <VOID>, 'CoRevertToSelf', \ CoRevokeClassObject, <.dwRegister>, 'CoRevokeClassObject', \ CoRevokeInitializeSpy, <NONE>, 'CoRevokeInitializeSpy', \ CoRevokeMallocSpy, <VOID>, 'CoRevokeMallocSpy', \ CoSetCancelObject, <.pUnk>, 'CoSetCancelObject', \ CoSetProxyBlanket, <.pProxy, .dwAuthnSvc, .dwAuthzSvc, .pServerPrincName, .dwAuthnLevel, .dwImpLevel, .pAuthInfo, .dwCapabilities, \ >, 'CoSetProxyBlanket', \ CoSetState, <NONE>, 'CoSetState', \ CoSuspendClassObjects, <VOID>, 'CoSuspendClassObjects', \ CoSwitchCallContext, <.pNewObject, .ppOldObject>, 'CoSwitchCallContext', \ CoTaskMemAlloc, <.cb>, 'CoTaskMemAlloc', \ CoTaskMemFree, <.lpIDList>, 'CoTaskMemFree', \ CoTaskMemRealloc, <.pv, .cb>, 'CoTaskMemRealloc', \ CoTestCancel, <VOID>, 'CoTestCancel', \ CoTreatAsClass, <.clsidOld, .clsidNew>, 'CoTreatAsClass', \ CoUninitialize, <VOID>, 'CoUninitialize', \ CoUnloadingWOW, <NONE>, 'CoUnloadingWOW', \ CoUnmarshalHresult, <.pstm, .phresult>, 'CoUnmarshalHresult', \ CoUnmarshalInterface, <.pStm, .riid, .ppv>, 'CoUnmarshalInterface', \ CoWaitForMultipleHandles, <.dwFlags, .dwTimeout, .cHandles, .pHandles, .lpdwindex>, 'CoWaitForMultipleHandles', \ ComPs_CStdStubBuffer_AddRef, <NONE>, 'ComPs_CStdStubBuffer_AddRef', \ ComPs_CStdStubBuffer_Connect, <NONE>, 'ComPs_CStdStubBuffer_Connect', \ ComPs_CStdStubBuffer_CountRefs, <NONE>, 'ComPs_CStdStubBuffer_CountRefs', \ ComPs_CStdStubBuffer_DebugServerQueryInterface, <NONE>, 'ComPs_CStdStubBuffer_DebugServerQueryInterface', \ ComPs_CStdStubBuffer_DebugServerRelease, <NONE>, 'ComPs_CStdStubBuffer_DebugServerRelease', \ ComPs_CStdStubBuffer_Disconnect, <NONE>, 'ComPs_CStdStubBuffer_Disconnect', \ ComPs_CStdStubBuffer_Invoke, <NONE>, 'ComPs_CStdStubBuffer_Invoke', \ ComPs_CStdStubBuffer_IsIIDSupported, <NONE>, 'ComPs_CStdStubBuffer_IsIIDSupported', \ ComPs_CStdStubBuffer_QueryInterface, <NONE>, 'ComPs_CStdStubBuffer_QueryInterface', \ ComPs_IUnknown_AddRef_Proxy, <NONE>, 'ComPs_IUnknown_AddRef_Proxy', \ ComPs_IUnknown_QueryInterface_Proxy, <NONE>, 'ComPs_IUnknown_QueryInterface_Proxy', \ ComPs_IUnknown_Release_Proxy, <NONE>, 'ComPs_IUnknown_Release_Proxy', \ ComPs_NdrCStdStubBuffer2_Release, <NONE>, 'ComPs_NdrCStdStubBuffer2_Release', \ ComPs_NdrCStdStubBuffer_Release, <NONE>, 'ComPs_NdrCStdStubBuffer_Release', \ ComPs_NdrClientCall2, <NONE>, 'ComPs_NdrClientCall2', \ ComPs_NdrClientCall2_va, <NONE>, 'ComPs_NdrClientCall2_va', \ ComPs_NdrDllCanUnloadNow, <NONE>, 'ComPs_NdrDllCanUnloadNow', \ ComPs_NdrDllGetClassObject, <NONE>, 'ComPs_NdrDllGetClassObject', \ ComPs_NdrDllRegisterProxy, <NONE>, 'ComPs_NdrDllRegisterProxy', \ ComPs_NdrDllUnregisterProxy, <NONE>, 'ComPs_NdrDllUnregisterProxy', \ ComPs_NdrStubCall2, <NONE>, 'ComPs_NdrStubCall2', \ ComPs_NdrStubForwardingFunction, <NONE>, 'ComPs_NdrStubForwardingFunction', \ CreateAntiMoniker, <.ppmk>, 'CreateAntiMoniker', \ CreateBindCtx, <.reserved, .ppbc>, 'CreateBindCtx', \ CreateClassMoniker, <.rclsid, .ppmk>, 'CreateClassMoniker', \ CreateDataAdviseHolder, <.ppDAHolder>, 'CreateDataAdviseHolder', \ CreateDataCache, <.pUnkOuter, .rclsid, .iid, .ppv>, 'CreateDataCache', \ CreateErrorInfo, <.pperrinfo>, 'CreateErrorInfo', \ CreateFileMoniker, <.lpszPathName, .ppmk>, 'CreateFileMoniker', \ CreateGenericComposite, <.pmkFirst, .pmkRest, .ppmkComposite>, 'CreateGenericComposite', \ CreateILockBytesOnHGlobal, <.hGlobal, .fDeleteOnRelease, .pplkbyt>, 'CreateILockBytesOnHGlobal', \ CreateItemMoniker, <.lpszDelim, .lpszItem, .ppmk>, 'CreateItemMoniker', \ CreateObjrefMoniker, <.punk, .ppmk>, 'CreateObjrefMoniker', \ CreateOleAdviseHolder, <.ppOAHolder>, 'CreateOleAdviseHolder', \ CreatePointerMoniker, <.punk, .ppmk>, 'CreatePointerMoniker', \ CreateStdProgressIndicator, <.hwndParent, .pszTitle, .pIbscCaller, .ppIbsc>, 'CreateStdProgressIndicator', \ CreateStreamOnHGlobal, <.hGlobal, .fDeleteOnRelease, .ppstm>, 'CreateStreamOnHGlobal', \ DcomChannelSetHResult, <NONE>, 'DcomChannelSetHResult', \ DoDragDrop, <.pDataObj, .pDropSource, .dwOKEffects, .pdwEffect>, 'DoDragDrop', \ EnableHookObject, <NONE>, 'EnableHookObject', \ FmtIdToPropStgName, <.pfmtid, .oszName>, 'FmtIdToPropStgName', \ FreePropVariantArray, <.cVariants, .rgvars>, 'FreePropVariantArray', \ GetClassFile, <.szFilename, .pclsid>, 'GetClassFile', \ GetConvertStg, <.pStg>, 'GetConvertStg', \ GetDocumentBitStg, <NONE>, 'GetDocumentBitStg', \ GetErrorInfo, <.dwReserved, .pperrinfo>, 'GetErrorInfo', \ GetHGlobalFromILockBytes, <.plkbyt, .phglobal>, 'GetHGlobalFromILockBytes', \ GetHGlobalFromStream, <.pstm, .phglobal>, 'GetHGlobalFromStream', \ GetHookInterface, <NONE>, 'GetHookInterface', \ GetRunningObjectTable, <.reserved, .pprot>, 'GetRunningObjectTable', \ HACCEL_UserFree, <.pLong, .pHaccel>, 'HACCEL_UserFree', \ HACCEL_UserMarshal, <.pLong, .pChar, .pHaccel>, 'HACCEL_UserMarshal', \ HACCEL_UserSize, <.pLong, .lLong, .pHaccel>, 'HACCEL_UserSize', \ HACCEL_UserUnmarshal, <.pLong, .pChar, .pHaccel>, 'HACCEL_UserUnmarshal', \ HBITMAP_UserFree, <.pLong, .pHbitmap>, 'HBITMAP_UserFree', \ HBITMAP_UserMarshal, <.pLong, .pChar, .pHbitmap>, 'HBITMAP_UserMarshal', \ HBITMAP_UserSize, <.pLong, .lLong, .pHbitmap>, 'HBITMAP_UserSize', \ HBITMAP_UserUnmarshal, <.pLong, .pChar, .pHbitmap>, 'HBITMAP_UserUnmarshal', \ HBRUSH_UserFree, <NONE>, 'HBRUSH_UserFree', \ HBRUSH_UserMarshal, <NONE>, 'HBRUSH_UserMarshal', \ HBRUSH_UserSize, <NONE>, 'HBRUSH_UserSize', \ HBRUSH_UserUnmarshal, <NONE>, 'HBRUSH_UserUnmarshal', \ HDC_UserFree, <.pLong, .pHdc>, 'HDC_UserFree', \ HDC_UserMarshal, <.pLong, .pChar, .pHdc>, 'HDC_UserMarshal', \ HDC_UserSize, <.pLong, .lLong, .pHdc>, 'HDC_UserSize', \ HDC_UserUnmarshal, <.pLong, .pChar, .pHdc>, 'HDC_UserUnmarshal', \ HENHMETAFILE_UserFree, <NONE>, 'HENHMETAFILE_UserFree', \ HENHMETAFILE_UserMarshal, <NONE>, 'HENHMETAFILE_UserMarshal', \ HENHMETAFILE_UserSize, <NONE>, 'HENHMETAFILE_UserSize', \ HENHMETAFILE_UserUnmarshal, <NONE>, 'HENHMETAFILE_UserUnmarshal', \ HGLOBAL_UserFree, <.pLong, .pHglobal>, 'HGLOBAL_UserFree', \ HGLOBAL_UserMarshal, <.pLong, .pChar, .pHglobal>, 'HGLOBAL_UserMarshal', \ HGLOBAL_UserSize, <.pLong, .lLong, .pHglobal>, 'HGLOBAL_UserSize', \ HGLOBAL_UserUnmarshal, <.pLong, .pChar, .pHglobal>, 'HGLOBAL_UserUnmarshal', \ HICON_UserFree, <.pLong, .pHicon>, 'HICON_UserFree', \ HICON_UserMarshal, <.pLong, .pChar, .pHicon>, 'HICON_UserMarshal', \ HICON_UserSize, <.pLong, .llong, .pHicon>, 'HICON_UserSize', \ HICON_UserUnmarshal, <.pLong, .pChar, .pHicon>, 'HICON_UserUnmarshal', \ HMENU_UserFree, <.pLong, .pHmenu>, 'HMENU_UserFree', \ HMENU_UserMarshal, <.pLong, .pChar, .pHmenu>, 'HMENU_UserMarshal', \ HMENU_UserSize, <.pLong, .lLong, .pHmenu>, 'HMENU_UserSize', \ HMENU_UserUnmarshal, <.pLong, .pChar, .pHmenu>, 'HMENU_UserUnmarshal', \ HMETAFILEPICT_UserFree, <NONE>, 'HMETAFILEPICT_UserFree', \ HMETAFILEPICT_UserMarshal, <NONE>, 'HMETAFILEPICT_UserMarshal', \ HMETAFILEPICT_UserSize, <NONE>, 'HMETAFILEPICT_UserSize', \ HMETAFILEPICT_UserUnmarshal, <NONE>, 'HMETAFILEPICT_UserUnmarshal', \ HMETAFILE_UserFree, <NONE>, 'HMETAFILE_UserFree', \ HMETAFILE_UserMarshal, <NONE>, 'HMETAFILE_UserMarshal', \ HMETAFILE_UserSize, <NONE>, 'HMETAFILE_UserSize', \ HMETAFILE_UserUnmarshal, <NONE>, 'HMETAFILE_UserUnmarshal', \ HPALETTE_UserFree, <.pLong, .pHpalette>, 'HPALETTE_UserFree', \ HPALETTE_UserMarshal, <.pLong, .pChar, .pHpalette>, 'HPALETTE_UserMarshal', \ HPALETTE_UserSize, <.pLong, .lLong, .pHpalette>, 'HPALETTE_UserSize', \ HPALETTE_UserUnmarshal, <.pLong, .pChar, .pHpalette>, 'HPALETTE_UserUnmarshal', \ HWND_UserFree, <.pLong, .pHwnd>, 'HWND_UserFree', \ HWND_UserMarshal, <.pLong, .pChar, .pHwnd>, 'HWND_UserMarshal', \ HWND_UserSize, <.pLong, .lLong, .pHwnd>, 'HWND_UserSize', \ HWND_UserUnmarshal, <.pLong, .pChar, .pHwnd>, 'HWND_UserUnmarshal', \ HkOleRegisterObject, <NONE>, 'HkOleRegisterObject', \ IIDFromString, <.lpsz, .lpiid>, 'IIDFromString', \ IsAccelerator, <.hAccel, .cAccelEntries, .lpMsg, .lpwCmd>, 'IsAccelerator', \ IsEqualGUID, <NONE>, 'IsEqualGUID', \ IsValidIid, <NONE>, 'IsValidIid', \ IsValidInterface, <NONE>, 'IsValidInterface', \ IsValidPtrIn, <NONE>, 'IsValidPtrIn', \ IsValidPtrOut, <NONE>, 'IsValidPtrOut', \ MkParseDisplayName, <.pbc, .szUserName, .pchEaten, .ppmk>, 'MkParseDisplayName', \ MonikerCommonPrefixWith, <.pmkThis, .pmkOther, .ppmkCommon>, 'MonikerCommonPrefixWith', \ MonikerRelativePathTo, <.pmkSrc, .pmkDest, .ppmkRelPath, .dwReserved>, 'MonikerRelativePathTo', \ OleBuildVersion, <VOID>, 'OleBuildVersion', \ OleConvertIStorageToOLESTREAM, <.pstg, .lpolestream>, 'OleConvertIStorageToOLESTREAM', \ OleConvertIStorageToOLESTREAMEx, <.pstg, .cfFormat, .lWidth, .lHeight, .dwSize, .pmedium, .polestm>, 'OleConvertIStorageToOLESTREAMEx', \ OleConvertOLESTREAMToIStorage, <.lpolestream, .pstg, .ptd>, 'OleConvertOLESTREAMToIStorage', \ OleConvertOLESTREAMToIStorageEx, <.polestm, .pstg, .pcfFormat, .plwWidth, .plHeight, .pdwSize, .pmedium>, 'OleConvertOLESTREAMToIStorageEx', \ OleCreate, <.rclsid, .riid, .renderopt, .pFormatEtc, .pClientSite, .pStg, .ppvObj>, 'OleCreate', \ OleCreateDefaultHandler, <.clsid, .pUnkOuter, .riid, .lplpObj>, 'OleCreateDefaultHandler', \ OleCreateEmbeddingHelper, <.clsid, .pUnkOuter, .flags, .pCF, .riid, .lplpObj>, 'OleCreateEmbeddingHelper', \ OleCreateEx, <.rclsid, .riid, .dwFlags, .renderopt, .cFormats, .rgAdvf, .rgFormatEtc, .lpAdviseSink, .rgdwConnection, .pClientSite, \ .pStg, .ppvObj>, 'OleCreateEx', \ OleCreateFromData, <.pSrcDataObj, .riid, .renderopt, .pFormatEtc, .pClientSite, .pStg, .ppvObj>, 'OleCreateFromData', \ OleCreateFromDataEx, <.pSrcDataObj, .riid, .dwFlags, .renderopt, .cFormats, .rgAdvf, .rgFormatEtc, .lpAdviseSink, .rgdwConnection, \ .pClientSite, .pStg, .ppvObj>, 'OleCreateFromDataEx', \ OleCreateFromFile, <.rclsid, .lpszFileName, .riid, .renderopt, .lpFormatEtc, .pClientSite, .pStg, .ppvObj>, 'OleCreateFromFile', \ OleCreateFromFileEx, <.rclsid, .lpszFileName, .riid, .dwFlags, .renderopt, .cFormats, .rgAdvf, .rgFormatEtc, .lpAdviseSink, .rgdwConnection, \ .pClientSite, .pStg, .ppvObj>, 'OleCreateFromFileEx', \ OleCreateLink, <.pmkLinkSrc, .riid, .renderopt, .lpFormatEtc, .pClientSite, .pStg, .ppvObj>, 'OleCreateLink', \ OleCreateLinkEx, <.pmkLinkSrc, .riid, .dwFlags, .renderopt, .cFormats, .rgAdvf, .rgFormatEtc, .lpAdviseSink, .rgdwConnection, .pClientSite, \ .pStg, .ppvObj>, 'OleCreateLinkEx', \ OleCreateLinkFromData, <.pSrcDataObj, .riid, .renderopt, .pFormatEtc, .pClientSite, .pStg, .ppvObj>, 'OleCreateLinkFromData', \ OleCreateLinkFromDataEx, <.pSrcDataObj, .riid, .dwFlags, .renderopt, .cFormats, .rgAdvf, .rgFormatEtc, .lpAdviseSink, .rgdwConnection, \ .pClientSite, .pStg, .ppvObj>, 'OleCreateLinkFromDataEx', \ OleCreateLinkToFile, <.lpszFileName, .riid, .renderopt, .lpFormatEtc, .pClientSite, .pStg, .ppvObj>, 'OleCreateLinkToFile', \ OleCreateLinkToFileEx, <.lpszFileName, .riid, .dwFlags, .renderopt, .cFormats, .rgAdvf, .rgFormatEtc, .lpAdviseSink, .rgdwConnection, \ .pClientSite, .pStg, .ppvObj>, 'OleCreateLinkToFileEx', \ OleCreateMenuDescriptor, <.hmenuCombined, .lpMenuWidths>, 'OleCreateMenuDescriptor', \ OleCreateStaticFromData, <.pSrcDataObj, .iid, .renderopt, .pFormatEtc, .pClientSite, .pStg, .ppvObj>, 'OleCreateStaticFromData', \ OleDestroyMenuDescriptor, <.holemenu>, 'OleDestroyMenuDescriptor', \ OleDoAutoConvert, <.pStg, .pClsidNew>, 'OleDoAutoConvert', \ OleDraw, <.pUnknown, .dwAspect, .hdcDraw, .lprcBounds>, 'OleDraw', \ OleDuplicateData, <.hSrc, .cfFormat, .uiFlags>, 'OleDuplicateData', \ OleFlushClipboard, <VOID>, 'OleFlushClipboard', \ OleGetAutoConvert, <.clsidOld, .pClsidNew>, 'OleGetAutoConvert', \ OleGetClipboard, <.ppDataObj>, 'OleGetClipboard', \ OleGetIconOfClass, <.rclsid, .lpszLabel, .fUseTypeAsLabel>, 'OleGetIconOfClass', \ OleGetIconOfFile, <.lpszPath, .fUseFileAsLabel>, 'OleGetIconOfFile', \ OleInitialize, <.pvReserved>, 'OleInitialize', \ OleInitializeWOW, <NONE>, 'OleInitializeWOW', \ OleIsCurrentClipboard, <.pDataObj>, 'OleIsCurrentClipboard', \ OleIsRunning, <.pObject>, 'OleIsRunning', \ OleLoad, <.pStg, .riid, .pClientSite, .ppvObj>, 'OleLoad', \ OleLoadFromStream, <.pStm, .iidInterface, .ppvObj>, 'OleLoadFromStream', \ OleLockRunning, <.pUnknown, .fLock, .fLastUnlockCloses>, 'OleLockRunning', \ OleMetafilePictFromIconAndLabel, <.hIcon, .lpszLabel, .lpszSourceFile, .iIconIndex>, 'OleMetafilePictFromIconAndLabel', \ OleNoteObjectVisible, <.pUnknown, .fVisible>, 'OleNoteObjectVisible', \ OleQueryCreateFromData, <.pSrcDataObject>, 'OleQueryCreateFromData', \ OleQueryLinkFromData, <.pSrcDataObject>, 'OleQueryLinkFromData', \ OleRegEnumFormatEtc, <.clsid, .dwDirection, .ppenum>, 'OleRegEnumFormatEtc', \ OleRegEnumVerbs, <.clsid, .ppenum>, 'OleRegEnumVerbs', \ OleRegGetMiscStatus, <.clsid, .dwAspect, .pdwStatus>, 'OleRegGetMiscStatus', \ OleRegGetUserType, <.clsid, .dwFormOfType, .pszUserType>, 'OleRegGetUserType', \ OleRun, <.pUnknown>, 'OleRun', \ OleSave, <.pPS, .pStg, .fSameAsLoad>, 'OleSave', \ OleSaveToStream, <.pPStm, .pStm>, 'OleSaveToStream', \ OleSetAutoConvert, <.clsidOld, .clsidNew>, 'OleSetAutoConvert', \ OleSetClipboard, <.pDataObj>, 'OleSetClipboard', \ OleSetContainedObject, <.pUnknown, .fContained>, 'OleSetContainedObject', \ OleSetMenuDescriptor, <.holemenu, .hwndFrame, .hwndActiveObject, .lpFrame, .lpActiveObj>, 'OleSetMenuDescriptor', \ OleTranslateAccelerator, <.lpFrame, .lpFrameInfo, .lpmsg>, 'OleTranslateAccelerator', \ OleUninitialize, <VOID>, 'OleUninitialize', \ OpenOrCreateStream, <NONE>, 'OpenOrCreateStream', \ ProgIDFromCLSID, <.clsid, .lplpszProgID>, 'ProgIDFromCLSID', \ PropStgNameToFmtId, <.oszName, .pfmtid>, 'PropStgNameToFmtId', \ PropSysAllocString, <NONE>, 'PropSysAllocString', \ PropSysFreeString, <NONE>, 'PropSysFreeString', \ PropVariantChangeType, <NONE>, 'PropVariantChangeType', \ PropVariantClear, <.pvar>, 'PropVariantClear', \ PropVariantCopy, <.pvarDest, .pvarSrc>, 'PropVariantCopy', \ ReadClassStg, <.pStg, .pclsid>, 'ReadClassStg', \ ReadClassStm, <.pStm, .pclsid>, 'ReadClassStm', \ ReadFmtUserTypeStg, <.pstg, .pcf, .lplpszUserType>, 'ReadFmtUserTypeStg', \ ReadOleStg, <NONE>, 'ReadOleStg', \ ReadStringStream, <NONE>, 'ReadStringStream', \ RegisterDragDrop, <.hwnd, .pDropTarget>, 'RegisterDragDrop', \ ReleaseStgMedium, <.lpstgmedium>, 'ReleaseStgMedium', \ RevokeDragDrop, <.hwnd>, 'RevokeDragDrop', \ SNB_UserFree, <.pLong, .pSnb>, 'SNB_UserFree', \ SNB_UserMarshal, <.pLong, .pChar, .pSnb>, 'SNB_UserMarshal', \ SNB_UserSize, <.pLong, .lLong, .pSnb>, 'SNB_UserSize', \ SNB_UserUnmarshal, <.pLong, .pChar, .pSnb>, 'SNB_UserUnmarshal', \ STGMEDIUM_UserFree, <.pLong, .pStgmedium>, 'STGMEDIUM_UserFree', \ STGMEDIUM_UserMarshal, <.pLong, .pChar, .pStgmedium>, 'STGMEDIUM_UserMarshal', \ STGMEDIUM_UserSize, <.pLong, .long, .pStgmedium>, 'STGMEDIUM_UserSize', \ STGMEDIUM_UserUnmarshal, <.pLong, .pChar, .pStgmedium>, 'STGMEDIUM_UserUnmarshal', \ SetConvertStg, <.pStg, .fConvert>, 'SetConvertStg', \ SetDocumentBitStg, <NONE>, 'SetDocumentBitStg', \ SetErrorInfo, <.dwReserved, .perrinfo>, 'SetErrorInfo', \ StgConvertPropertyToVariant, <NONE>, 'StgConvertPropertyToVariant', \ StgConvertVariantToProperty, <NONE>, 'StgConvertVariantToProperty', \ StgCreateDocfile, <.pwcsName, .grfMode, .reserved, .ppstgOpen>, 'StgCreateDocfile', \ StgCreateDocfileOnILockBytes, <.plkbyt, .grfMode, .reserved, .ppstgOpen>, 'StgCreateDocfileOnILockBytes', \ StgCreatePropSetStg, <.pStorage, .dwReserved, .ppPropSetStg>, 'StgCreatePropSetStg', \ StgCreatePropStg, <.pUnk, .fmtid, .pclsid, .grfFlags, .dwReserved, .ppPropStg>, 'StgCreatePropStg', \ StgCreateStorageEx, <.pwcsName, .grfMode, .stgfmt, .grfAttrs, .pStgOptions, .reserved, .riid, .ppObjectOpen>, 'StgCreateStorageEx', \ StgGetIFillLockBytesOnFile, <.pwcsName, .ppflb>, 'StgGetIFillLockBytesOnFile', \ StgGetIFillLockBytesOnILockBytes, <.pilb, .ppflb>, 'StgGetIFillLockBytesOnILockBytes', \ StgIsStorageFile, <.pwcsName>, 'StgIsStorageFile', \ StgIsStorageILockBytes, <.plkbyt>, 'StgIsStorageILockBytes', \ StgOpenAsyncDocfileOnIFillLockBytes, <.pflb, .grfMode, .asyncFlags, .ppstgOpen>, 'StgOpenAsyncDocfileOnIFillLockBytes', \ StgOpenPropStg, <.pUnk, .fmtid, .grfFlags, .dwReserved, .ppPropStg>, 'StgOpenPropStg', \ StgOpenStorage, <.pwcsName, .pstgPriority, .grfMode, .snbExclude, .reserved, .ppstgOpen>, 'StgOpenStorage', \ StgOpenStorageEx, <.pwcsName, .grfMode, .stgfmt, .grfAttrs, .pStgOptions, .reserved, .riid, .ppObjectOpen>, 'StgOpenStorageEx', \ StgOpenStorageOnHandle, <NONE>, 'StgOpenStorageOnHandle', \ StgOpenStorageOnILockBytes, <.plkbyt, .pstgPriority, .grfMode, .snbExclude, .reserved, .ppstgOpen>, 'StgOpenStorageOnILockBytes', \ StgPropertyLengthAsVariant, <NONE>, 'StgPropertyLengthAsVariant', \ StgSetTimes, <.lpszName, .pctime, .patime, .pmtime>, 'StgSetTimes', \ StringFromCLSID, <.rclsid, .lplpsz>, 'StringFromCLSID', \ StringFromGUID2, <.rguid, .lpsz, .cchMax>, 'StringFromGUID2', \ StringFromIID, <.rclsid, .lplpsz>, 'StringFromIID', \ UpdateDCOMSettings, <NONE>, 'UpdateDCOMSettings', \ UtConvertDvtd16toDvtd32, <NONE>, 'UtConvertDvtd16toDvtd32', \ UtConvertDvtd32toDvtd16, <NONE>, 'UtConvertDvtd32toDvtd16', \ UtGetDvtd16Info, <NONE>, 'UtGetDvtd16Info', \ UtGetDvtd32Info, <NONE>, 'UtGetDvtd32Info', \ WdtpInterfacePointer_UserFree, <NONE>, 'WdtpInterfacePointer_UserFree', \ WdtpInterfacePointer_UserMarshal, <NONE>, 'WdtpInterfacePointer_UserMarshal', \ WdtpInterfacePointer_UserSize, <NONE>, 'WdtpInterfacePointer_UserSize', \ WdtpInterfacePointer_UserUnmarshal, <NONE>, 'WdtpInterfacePointer_UserUnmarshal', \ WriteClassStg, <.pStg, .rclsid>, 'WriteClassStg', \ WriteClassStm, <.pStm, .rclsid>, 'WriteClassStm', \ WriteFmtUserTypeStg, <.pstg, .cf, .lpszUserType>, 'WriteFmtUserTypeStg', \ WriteOleStg, <NONE>, 'WriteOleStg', \ WriteStringStream, <NONE>, 'WriteStringStream' |
Added freshlib/imports/Win32/oleaut32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 | ; oleaut32.dll API calls (ASCII) import_proto oleaut32, \ BSTR_UserFree, <.pLong, .pBstr>, 'BSTR_UserFree', \ BSTR_UserMarshal, <.pLong, .pChar, .pBstr>, 'BSTR_UserMarshal', \ BSTR_UserSize, <.pLong, .lLong, .pBstr>, 'BSTR_UserSize', \ BSTR_UserUnmarshal, <.pLong, .pChar, .pBstr>, 'BSTR_UserUnmarshal', \ BstrFromVector, <.psa, .pBstr>, 'BstrFromVector', \ ClearCustData, <.pCustData>, 'ClearCustData', \ CreateDispTypeInfo, <.pidata, .lcid, .pptinfo>, 'CreateDispTypeInfo', \ CreateErrorInfo_Aut, <.pperrinfo>, 'CreateErrorInfo', \ CreateStdDispatch, <.punkOuter, .pvThis, .ptinfo, .ppunkStdDisp>, 'CreateStdDispatch', \ CreateTypeLib, <.syskind, .szFile, .ppctlib>, 'CreateTypeLib', \ CreateTypeLib2, <.syskind, .szFile, .ppctlib>, 'CreateTypeLib2', \ DispCallFunc, <.pvInstance, .oVft, .cc, .vtReturn, .cActuals, .prgvt, .prgpvarg, .pvargResult>, 'DispCallFunc', \ DispGetIDsOfNames, <.ptinfo, .rgszNames, .cNames, .rgdispid>, 'DispGetIDsOfNames', \ DispGetParam, <.pdispparams, .position, .vtTarg, .pvarResult, .puArgErr>, 'DispGetParam', \ DispInvoke, <.this, .ptinfo, .dispidMember, .wFlags, .pparams, .pvarResult, .pexcepinfo, .puArgErr>, 'DispInvoke', \ DllCanUnloadNow, <VOID>, 'DllCanUnloadNow', \ DllGetClassObject, <.rclsid, .riid, .ppv>, 'DllGetClassObject', \ DllRegisterServer, <VOID>, 'DllRegisterServer', \ DllUnregisterServer, <VOID>, 'DllUnregisterServer', \ DosDateTimeToVariantTime, <.wDosDate, .wDosTime, .pvtime>, 'DosDateTimeToVariantTime', \ GetActiveObject, <.rclsid, .pvReserved, .ppunk>, 'GetActiveObject', \ GetAltMonthNames, <.lcid, .prgp>, 'GetAltMonthNames', \ GetErrorInfo_Aut, <.dwReserved, .pperrinfo>, 'GetErrorInfo', \ GetRecordInfoFromGuids, <.rGuidTypeLib, .uVerMajor, .uVerMinor, .lcid, .rGuidTypeInfo, .ppRecInfo>, 'GetRecordInfoFromGuids', \ GetRecordInfoFromTypeInfo, <.pTypeInfo, .ppRecInfo>, 'GetRecordInfoFromTypeInfo', \ GetVarConversionLocaleSetting, <NONE>, 'GetVarConversionLocaleSetting', \ LHashValOfNameSys, <.syskind, .lcid, .szName>, 'LHashValOfNameSys', \ LHashValOfNameSysA, <.syskind, .lcid, .szName>, 'LHashValOfNameSysA', \ LPSAFEARRAY_Marshal, <NONE>, 'LPSAFEARRAY_Marshal', \ LPSAFEARRAY_Size, <NONE>, 'LPSAFEARRAY_Size', \ LPSAFEARRAY_Unmarshal, <NONE>, 'LPSAFEARRAY_Unmarshal', \ LPSAFEARRAY_UserFree, <.pLong, .lpsafearray>, 'LPSAFEARRAY_UserFree', \ LPSAFEARRAY_UserMarshal, <.pLong, .pChar, .lpsafearray>, 'LPSAFEARRAY_UserMarshal', \ LPSAFEARRAY_UserSize, <.pLong, .lLong, .lpsafearray>, 'LPSAFEARRAY_UserSize', \ LPSAFEARRAY_UserUnmarshal, <.pLong, .pChar, .lpsafearray>, 'LPSAFEARRAY_UserUnmarshal', \ LoadRegTypeLib, <.rguid, .wVerMajor, .wVerMinor, .lcid, .pptlib>, 'LoadRegTypeLib', \ LoadTypeLib, <.TLpszModule, .TPpTypeLib>, 'LoadTypeLib', \ LoadTypeLibEx, <.szFile, .regkind, .pptlib>, 'LoadTypeLibEx', \ OACreateTypeLib2, <NONE>, 'OACreateTypeLib2', \ OaBuildVersion, <VOID>, 'OaBuildVersion', \ OleCreateFontIndirect, <.lpFontDesc, .riid, .lplpvObj>, 'OleCreateFontIndirect', \ OleCreatePictureIndirect, <.lpPictDesc, .riid, .fOwn, .lplpvObj>, 'OleCreatePictureIndirect', \ OleCreatePropertyFrame, <.hwndOwner, .x, .y, .lpszCaption, .cObjects, .ppUnk, .cPages, .pPageClsID, .lcid, .dwReserved, .pvReserved, \ >, 'OleCreatePropertyFrame', \ OleCreatePropertyFrameIndirect, <.lpParams>, 'OleCreatePropertyFrameIndirect', \ OleIconToCursor, <.hinstExe, .hIcon>, 'OleIconToCursor', \ OleLoadPicture, <.lpstream, .lSize, .fRunmode, .riid, .lplpvObj>, 'OleLoadPicture', \ OleLoadPictureEx, <.lpstream, .lSize, .fRunmode, .riid, .xSizeDesired, .ySizeDesired, .dwFlags, .lplpvObj>, 'OleLoadPictureEx', \ OleLoadPictureFile, <.varFileName, .lplpdispPicture>, 'OleLoadPictureFile', \ OleLoadPictureFileEx, <.varFileName, .xSizeDesired, .ySizeDesired, .dwFlags, .lplpdispPicture>, 'OleLoadPictureFileEx', \ OleLoadPicturePath, <.szURLorPath, .punkCaller, .dwReserved, .clrReserved, .riid, .ppvRet>, 'OleLoadPicturePath', \ OleSavePictureFile, <.lpdispPicture, .bstrFileName>, 'OleSavePictureFile', \ OleTranslateColor, <.lOleColor, .lHPalette, .lColorRef>, 'OleTranslateColor', \ QueryPathOfRegTypeLib, <.guid, .wMaj, .wMin, .lcid, .lpbstrPathName>, 'QueryPathOfRegTypeLib', \ RegisterActiveObject, <.punk, .rclsid, .dwFlags, .pdwRegister>, 'RegisterActiveObject', \ RegisterTypeLib, <.ptlib, .szFullPath, .szHelpDir>, 'RegisterTypeLib', \ RegisterTypeLibForUser, <NONE>, 'RegisterTypeLibForUser', \ RevokeActiveObject, <.dwRegister, .pvReserved>, 'RevokeActiveObject', \ SafeArrayAccessData, <.psa, .ppvData>, 'SafeArrayAccessData', \ SafeArrayAllocData, <.psa>, 'SafeArrayAllocData', \ SafeArrayAllocDescriptor, <.cDims, .ppsaOut>, 'SafeArrayAllocDescriptor', \ SafeArrayAllocDescriptorEx, <.vt, .cDims, .ppsaOut>, 'SafeArrayAllocDescriptorEx', \ SafeArrayCopy, <.psa, .ppsaOut>, 'SafeArrayCopy', \ SafeArrayCopyData, <.psaSource, .psaTarget>, 'SafeArrayCopyData', \ SafeArrayCreate, <.vt, .cDims, .rgsabound>, 'SafeArrayCreate', \ SafeArrayCreateEx, <.vt, .cDims, .rgsabound, .pvExtra>, 'SafeArrayCreateEx', \ SafeArrayCreateVector, <.vt, .lLbound, .cElements>, 'SafeArrayCreateVector', \ SafeArrayCreateVectorEx, <.vt, .lLbound, .cElements, .pvExtra>, 'SafeArrayCreateVectorEx', \ SafeArrayDestroy, <.psa>, 'SafeArrayDestroy', \ SafeArrayDestroyData, <.psa>, 'SafeArrayDestroyData', \ SafeArrayDestroyDescriptor, <.psa>, 'SafeArrayDestroyDescriptor', \ SafeArrayGetDim, <.psa>, 'SafeArrayGetDim', \ SafeArrayGetElement, <.psa, .rgIndices, .pv>, 'SafeArrayGetElement', \ SafeArrayGetElemsize, <.psa>, 'SafeArrayGetElemsize', \ SafeArrayGetIID, <.psa, .pguid>, 'SafeArrayGetIID', \ SafeArrayGetLBound, <.psa, .nDim, .plLbound>, 'SafeArrayGetLBound', \ SafeArrayGetRecordInfo, <.psa, .prinfo>, 'SafeArrayGetRecordInfo', \ SafeArrayGetUBound, <.psa, .nDim, .plUbound>, 'SafeArrayGetUBound', \ SafeArrayGetVartype, <.psa, .pvt>, 'SafeArrayGetVartype', \ SafeArrayLock, <.psa>, 'SafeArrayLock', \ SafeArrayPtrOfIndex, <.psa, .rgIndices, .ppvData>, 'SafeArrayPtrOfIndex', \ SafeArrayPutElement, <.psa, .rgIndices, .pv>, 'SafeArrayPutElement', \ SafeArrayRedim, <.psa, .psaboundNew>, 'SafeArrayRedim', \ SafeArraySetIID, <.psa, .guid>, 'SafeArraySetIID', \ SafeArraySetRecordInfo, <.psa, .prinfo>, 'SafeArraySetRecordInfo', \ SafeArrayUnaccessData, <.psa>, 'SafeArrayUnaccessData', \ SafeArrayUnlock, <.psa>, 'SafeArrayUnlock', \ SetErrorInfo_Aut, <.dwReserved, .perrinfo>, 'SetErrorInfo', \ SetOaNoCache, <NONE>, 'SetOaNoCache', \ SetVarConversionLocaleSetting, <NONE>, 'SetVarConversionLocaleSetting', \ SysAllocString, <.pOlechar>, 'SysAllocString', \ SysAllocStringByteLen, <.m_pBase, .FunctionCall>, 'SysAllocStringByteLen', \ SysAllocStringLen, <.pOlechar, .uint>, 'SysAllocStringLen', \ SysFreeString, <.bstr>, 'SysFreeString', \ SysReAllocString, <.pBstr, .pOlechar>, 'SysReAllocString', \ SysReAllocStringLen, <.pBstr, .pOlechar, .uint>, 'SysReAllocStringLen', \ SysStringByteLen, <.bstr>, 'SysStringByteLen', \ SysStringLen, <.bstr>, 'SysStringLen', \ SystemTimeToVariantTime, <.lpSystemTime, .pvtime>, 'SystemTimeToVariantTime', \ UnRegisterTypeLib, <.libID, .wVerMajor, .wVerMinor, .lcid, .syskind>, 'UnRegisterTypeLib', \ UnRegisterTypeLibForUser, <NONE>, 'UnRegisterTypeLibForUser', \ VARIANT_UserFree, <.pLong, .pVariant>, 'VARIANT_UserFree', \ VARIANT_UserMarshal, <.pLong, .pChar, .pVariant>, 'VARIANT_UserMarshal', \ VARIANT_UserSize, <.pLong, .lLong, .pVariant>, 'VARIANT_UserSize', \ VARIANT_UserUnmarshal, <.pLong, .pChar, .pVariant>, 'VARIANT_UserUnmarshal', \ VarAbs, <.pvarIn, .pvarResult>, 'VarAbs', \ VarAdd, <.pvarLeft, .pvarRight, .pvarResult>, 'VarAdd', \ VarAnd, <.pvarLeft, .pvarRight, .pvarResult>, 'VarAnd', \ VarBoolFromCy, <.cyIn, .pboolOut>, 'VarBoolFromCy', \ VarBoolFromDate, <.dateIn, .pboolOut>, 'VarBoolFromDate', \ VarBoolFromDec, <.pdecIn, .pboolOut>, 'VarBoolFromDec', \ VarBoolFromDisp, <.pdispIn, .lcid, .pboolOut>, 'VarBoolFromDisp', \ VarBoolFromI1, <.cIn, .pboolOut>, 'VarBoolFromI1', \ VarBoolFromI2, <.sIn, .pboolOut>, 'VarBoolFromI2', \ VarBoolFromI4, <.lIn, .pboolOut>, 'VarBoolFromI4', \ VarBoolFromI8, <NONE>, 'VarBoolFromI8', \ VarBoolFromR4, <.fltIn, .pboolOut>, 'VarBoolFromR4', \ VarBoolFromR8, <.dblIn, .pboolOut>, 'VarBoolFromR8', \ VarBoolFromStr, <.strIn, .lcid, .dwFlags, .pboolOut>, 'VarBoolFromStr', \ VarBoolFromUI1, <.bIn, .pboolOut>, 'VarBoolFromUI1', \ VarBoolFromUI2, <.uiIn, .pboolOut>, 'VarBoolFromUI2', \ VarBoolFromUI4, <.ulIn, .pboolOut>, 'VarBoolFromUI4', \ VarBoolFromUI8, <NONE>, 'VarBoolFromUI8', \ VarBstrCat, <.bstrLeft, .bstrRight, .pbstrResult>, 'VarBstrCat', \ VarBstrCmp, <.bstrLeft, .bstrRight, .lcid, .dwFlags>, 'VarBstrCmp', \ VarBstrFromBool, <.boolIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromBool', \ VarBstrFromCy, <.cyIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromCy', \ VarBstrFromDate, <.dateIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromDate', \ VarBstrFromDec, <.pdecIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromDec', \ VarBstrFromDisp, <.pdispIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromDisp', \ VarBstrFromI1, <.cIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromI1', \ VarBstrFromI2, <.iVal, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromI2', \ VarBstrFromI4, <.lIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromI4', \ VarBstrFromI8, <NONE>, 'VarBstrFromI8', \ VarBstrFromR4, <.fltIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromR4', \ VarBstrFromR8, <.dblIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromR8', \ VarBstrFromUI1, <.bVal, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromUI1', \ VarBstrFromUI2, <.uiIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromUI2', \ VarBstrFromUI4, <.ulIn, .lcid, .dwFlags, .pbstrOut>, 'VarBstrFromUI4', \ VarBstrFromUI8, <NONE>, 'VarBstrFromUI8', \ VarCat, <.pvarLeft, .pvarRight, .pvarResult>, 'VarCat', \ VarCmp, <.pvarLeft, .pvarRight, .lcid, .dwFlags>, 'VarCmp', \ VarCyAbs, <.cyIn, .pcyResult>, 'VarCyAbs', \ VarCyAdd, <.cyLeft, .cyRight, .pcyResult>, 'VarCyAdd', \ VarCyCmp, <.cyLeft, .cyRight>, 'VarCyCmp', \ VarCyCmpR8, <.cyLeft, .dblRight>, 'VarCyCmpR8', \ VarCyFix, <.cyIn, .pcyResult>, 'VarCyFix', \ VarCyFromBool, <.boolIn, .pcyOut>, 'VarCyFromBool', \ VarCyFromDate, <.dateIn, .pcyOut>, 'VarCyFromDate', \ VarCyFromDec, <.pdecIn, .pcyOut>, 'VarCyFromDec', \ VarCyFromDisp, <.pdispIn, .lcid, .pcyOut>, 'VarCyFromDisp', \ VarCyFromI1, <.cIn, .pcyOut>, 'VarCyFromI1', \ VarCyFromI2, <.sIn, .pcyOut>, 'VarCyFromI2', \ VarCyFromI4, <.lIn, .pcyOut>, 'VarCyFromI4', \ VarCyFromI8, <NONE>, 'VarCyFromI8', \ VarCyFromR4, <.fltIn, .pcyOut>, 'VarCyFromR4', \ VarCyFromR8, <.dblIn, .pcyOut>, 'VarCyFromR8', \ VarCyFromStr, <.strIn, .lcid, .dwFlags, .pcyOut>, 'VarCyFromStr', \ VarCyFromUI1, <.bIn, .pcyOut>, 'VarCyFromUI1', \ VarCyFromUI2, <.uiIn, .pcyOut>, 'VarCyFromUI2', \ VarCyFromUI4, <.ulIn, .pcyOut>, 'VarCyFromUI4', \ VarCyFromUI8, <NONE>, 'VarCyFromUI8', \ VarCyInt, <.cyIn, .pcyResult>, 'VarCyInt', \ VarCyMul, <.cyLeft, .cyRight, .pcyResult>, 'VarCyMul', \ VarCyMulI4, <.cyLeft, .lRight, .pcyResult>, 'VarCyMulI4', \ VarCyMulI8, <NONE>, 'VarCyMulI8', \ VarCyNeg, <.cyIn, .pcyResult>, 'VarCyNeg', \ VarCyRound, <.cyIn, .cDecimals, .pcyResult>, 'VarCyRound', \ VarCySub, <.cyLeft, .cyRight, .pcyResult>, 'VarCySub', \ VarDateFromBool, <.boolIn, .pdateOut>, 'VarDateFromBool', \ VarDateFromCy, <.cyIn, .pdateOut>, 'VarDateFromCy', \ VarDateFromDec, <.pdecIn, .pdateOut>, 'VarDateFromDec', \ VarDateFromDisp, <.pdispIn, .lcid, .pdateOut>, 'VarDateFromDisp', \ VarDateFromI1, <.cIn, .pdateOut>, 'VarDateFromI1', \ VarDateFromI2, <.sIn, .pdateOut>, 'VarDateFromI2', \ VarDateFromI4, <.lIn, .pdateOut>, 'VarDateFromI4', \ VarDateFromI8, <NONE>, 'VarDateFromI8', \ VarDateFromR4, <.fltIn, .pdateOut>, 'VarDateFromR4', \ VarDateFromR8, <.dblIn, .pdateOut>, 'VarDateFromR8', \ VarDateFromStr, <.strIn, .lcid, .dwFlags, .pdateOut>, 'VarDateFromStr', \ VarDateFromUI1, <.bIn, .pdateOut>, 'VarDateFromUI1', \ VarDateFromUI2, <.uiIn, .pdateOut>, 'VarDateFromUI2', \ VarDateFromUI4, <.ulIn, .pdateOut>, 'VarDateFromUI4', \ VarDateFromUI8, <NONE>, 'VarDateFromUI8', \ VarDateFromUdate, <.pudateIn, .dwFlags, .pdateOut>, 'VarDateFromUdate', \ VarDateFromUdateEx, <.pudateIn, .lcid, .dwFlags, .pdateOut>, 'VarDateFromUdateEx', \ VarDecAbs, <.pdecIn, .pdecResult>, 'VarDecAbs', \ VarDecAdd, <.pdecLeft, .pdecRight, .pdecResult>, 'VarDecAdd', \ VarDecCmp, <.pdecLeft, .pdecRight>, 'VarDecCmp', \ VarDecCmpR8, <.pdecLeft, .dblRight>, 'VarDecCmpR8', \ VarDecDiv, <.pdecLeft, .pdecRight, .pdecResult>, 'VarDecDiv', \ VarDecFix, <.pdecIn, .pdecResult>, 'VarDecFix', \ VarDecFromBool, <.boolIn, .pdecOut>, 'VarDecFromBool', \ VarDecFromCy, <.cyIn, .pdecOut>, 'VarDecFromCy', \ VarDecFromDate, <.dateIn, .pdecOut>, 'VarDecFromDate', \ VarDecFromDisp, <.pdispIn, .lcid, .pdecOut>, 'VarDecFromDisp', \ VarDecFromI1, <.cIn, .pdecOut>, 'VarDecFromI1', \ VarDecFromI2, <.uiIn, .pdecOut>, 'VarDecFromI2', \ VarDecFromI4, <.lIn, .pdecOut>, 'VarDecFromI4', \ VarDecFromI8, <NONE>, 'VarDecFromI8', \ VarDecFromR4, <.fltIn, .pdecOut>, 'VarDecFromR4', \ VarDecFromR8, <.dblIn, .pdecOut>, 'VarDecFromR8', \ VarDecFromStr, <.strIn, .lcid, .dwFlags, .pdecOut>, 'VarDecFromStr', \ VarDecFromUI1, <.bIn, .pdecOut>, 'VarDecFromUI1', \ VarDecFromUI2, <.uiIn, .pdecOut>, 'VarDecFromUI2', \ VarDecFromUI4, <.ulIn, .pdecOut>, 'VarDecFromUI4', \ VarDecFromUI8, <NONE>, 'VarDecFromUI8', \ VarDecInt, <.pdecIn, .pdecResult>, 'VarDecInt', \ VarDecMul, <.pdecLeft, .pdecRight, .pdecResult>, 'VarDecMul', \ VarDecNeg, <.pdecIn, .pdecResult>, 'VarDecNeg', \ VarDecRound, <.pdecIn, .cDecimals, .pdecResult>, 'VarDecRound', \ VarDecSub, <.pdecLeft, .pdecRight, .pdecResult>, 'VarDecSub', \ VarDiv, <.pvarLeft, .pvarRight, .pvarResult>, 'VarDiv', \ VarEqv, <.pvarLeft, .pvarRight, .pvarResult>, 'VarEqv', \ VarFix, <.pvarIn, .pvarResult>, 'VarFix', \ VarFormat, <.pvarIn, .pstrFormat, .iFirstDay, .iFirstWeek, .dwFlags, .pbstrOut>, 'VarFormat', \ VarFormatCurrency, <.pvarIn, .ByValumDig, .iIncLead, .iUseParens, .iGroup, .dwFlags, .pbstrOut>, 'VarFormatCurrency', \ VarFormatDateTime, <.pvarIn, .ByValamedFormat, .dwFlags, .pbstrOut>, 'VarFormatDateTime', \ VarFormatFromTokens, <.pvarIn, .pstrFormat, .pbTokCur, .dwFlags, .pbstrOut, .lcid>, 'VarFormatFromTokens', \ VarFormatNumber, <.pvarIn, .ByValumDig, .iIncLead, .iUseParens, .iGroup, .dwFlags, .pbstrOut>, 'VarFormatNumber', \ VarFormatPercent, <.pvarIn, .ByValumDig, .iIncLead, .iUseParens, .iGroup, .dwFlags, .pbstrOut>, 'VarFormatPercent', \ VarI1FromBool, <.boolIn, .pcOut>, 'VarI1FromBool', \ VarI1FromCy, <.cyIn, .pcOut>, 'VarI1FromCy', \ VarI1FromDate, <.dateIn, .pcOut>, 'VarI1FromDate', \ VarI1FromDec, <.pdecIn, .pcOut>, 'VarI1FromDec', \ VarI1FromDisp, <.pdispIn, .lcid, .pcOut>, 'VarI1FromDisp', \ VarI1FromI2, <.uiIn, .pcOut>, 'VarI1FromI2', \ VarI1FromI4, <.lIn, .pcOut>, 'VarI1FromI4', \ VarI1FromI8, <NONE>, 'VarI1FromI8', \ VarI1FromR4, <.fltIn, .pcOut>, 'VarI1FromR4', \ VarI1FromR8, <.dblIn, .pcOut>, 'VarI1FromR8', \ VarI1FromStr, <.strIn, .lcid, .dwFlags, .pcOut>, 'VarI1FromStr', \ VarI1FromUI1, <.bIn, .pcOut>, 'VarI1FromUI1', \ VarI1FromUI2, <.uiIn, .pcOut>, 'VarI1FromUI2', \ VarI1FromUI4, <.ulIn, .pcOut>, 'VarI1FromUI4', \ VarI1FromUI8, <NONE>, 'VarI1FromUI8', \ VarI2FromBool, <.boolIn, .psOut>, 'VarI2FromBool', \ VarI2FromCy, <.cyIn, .psOut>, 'VarI2FromCy', \ VarI2FromDate, <.dateIn, .psOut>, 'VarI2FromDate', \ VarI2FromDec, <.pdecIn, .psOut>, 'VarI2FromDec', \ VarI2FromDisp, <.pdispIn, .lcid, .psOut>, 'VarI2FromDisp', \ VarI2FromI1, <.cIn, .psOut>, 'VarI2FromI1', \ VarI2FromI4, <.lIn, .psOut>, 'VarI2FromI4', \ VarI2FromI8, <NONE>, 'VarI2FromI8', \ VarI2FromR4, <.fltIn, .psOut>, 'VarI2FromR4', \ VarI2FromR8, <.dblIn, .psOut>, 'VarI2FromR8', \ VarI2FromStr, <.strIn, .lcid, .dwFlags, .psOut>, 'VarI2FromStr', \ VarI2FromUI1, <.bIn, .psOut>, 'VarI2FromUI1', \ VarI2FromUI2, <.uiIn, .psOut>, 'VarI2FromUI2', \ VarI2FromUI4, <.ulIn, .psOut>, 'VarI2FromUI4', \ VarI2FromUI8, <NONE>, 'VarI2FromUI8', \ VarI4FromBool, <.boolIn, .plOut>, 'VarI4FromBool', \ VarI4FromCy, <.cyIn, .plOut>, 'VarI4FromCy', \ VarI4FromDate, <.dateIn, .plOut>, 'VarI4FromDate', \ VarI4FromDec, <.pdecIn, .plOut>, 'VarI4FromDec', \ VarI4FromDisp, <.pdispIn, .lcid, .plOut>, 'VarI4FromDisp', \ VarI4FromI1, <.cIn, .plOut>, 'VarI4FromI1', \ VarI4FromI2, <.sIn, .plOut>, 'VarI4FromI2', \ VarI4FromI8, <NONE>, 'VarI4FromI8', \ VarI4FromR4, <.fltIn, .plOut>, 'VarI4FromR4', \ VarI4FromR8, <.dblIn, .plOut>, 'VarI4FromR8', \ VarI4FromStr, <.strIn, .lcid, .dwFlags, .plOut>, 'VarI4FromStr', \ VarI4FromUI1, <.bIn, .plOut>, 'VarI4FromUI1', \ VarI4FromUI2, <.uiIn, .plOut>, 'VarI4FromUI2', \ VarI4FromUI4, <.ulIn, .plOut>, 'VarI4FromUI4', \ VarI4FromUI8, <NONE>, 'VarI4FromUI8', \ VarI8FromBool, <NONE>, 'VarI8FromBool', \ VarI8FromCy, <NONE>, 'VarI8FromCy', \ VarI8FromDate, <NONE>, 'VarI8FromDate', \ VarI8FromDec, <NONE>, 'VarI8FromDec', \ VarI8FromDisp, <NONE>, 'VarI8FromDisp', \ VarI8FromI1, <NONE>, 'VarI8FromI1', \ VarI8FromI2, <NONE>, 'VarI8FromI2', \ VarI8FromR4, <NONE>, 'VarI8FromR4', \ VarI8FromR8, <NONE>, 'VarI8FromR8', \ VarI8FromStr, <NONE>, 'VarI8FromStr', \ VarI8FromUI1, <NONE>, 'VarI8FromUI1', \ VarI8FromUI2, <NONE>, 'VarI8FromUI2', \ VarI8FromUI4, <NONE>, 'VarI8FromUI4', \ VarI8FromUI8, <NONE>, 'VarI8FromUI8', \ VarIdiv, <.pvarLeft, .pvarRight, .pvarResult>, 'VarIdiv', \ VarImp, <.pvarLeft, .pvarRight, .pvarResult>, 'VarImp', \ VarInt, <.pvarIn, .pvarResult>, 'VarInt', \ VarMod, <.pvarLeft, .pvarRight, .pvarResult>, 'VarMod', \ VarMonthName, <.iMonth, .fAbbrev, .dwFlags, .pbstrOut>, 'VarMonthName', \ VarMul, <.pvarLeft, .pvarRight, .pvarResult>, 'VarMul', \ VarNeg, <.pvarIn, .pvarResult>, 'VarNeg', \ VarNot, <.pvarIn, .pvarResult>, 'VarNot', \ VarNumFromParseNum, <.pnumprs, .rgbDig, .dwVtBits, .pvar>, 'VarNumFromParseNum', \ VarOr, <.pvarLeft, .pvarRight, .pvarResult>, 'VarOr', \ VarParseNumFromStr, <.strIn, .lcid, .dwFlags, .pnumprs, .rgbDig>, 'VarParseNumFromStr', \ VarPow, <.pvarLeft, .pvarRight, .pvarResult>, 'VarPow', \ VarR4CmpR8, <.fltLeft, .dblRight>, 'VarR4CmpR8', \ VarR4FromBool, <.boolIn, .pfltOut>, 'VarR4FromBool', \ VarR4FromCy, <.cyIn, .pfltOut>, 'VarR4FromCy', \ VarR4FromDate, <.dateIn, .pfltOut>, 'VarR4FromDate', \ VarR4FromDec, <.pdecIn, .pfltOut>, 'VarR4FromDec', \ VarR4FromDisp, <.pdispIn, .lcid, .pfltOut>, 'VarR4FromDisp', \ VarR4FromI1, <.cIn, .pfltOut>, 'VarR4FromI1', \ VarR4FromI2, <.sIn, .pfltOut>, 'VarR4FromI2', \ VarR4FromI4, <.lIn, .pfltOut>, 'VarR4FromI4', \ VarR4FromI8, <NONE>, 'VarR4FromI8', \ VarR4FromR8, <.dblIn, .pfltOut>, 'VarR4FromR8', \ VarR4FromStr, <.strIn, .lcid, .dwFlags, .pfltOut>, 'VarR4FromStr', \ VarR4FromUI1, <.bIn, .pfltOut>, 'VarR4FromUI1', \ VarR4FromUI2, <.uiIn, .pfltOut>, 'VarR4FromUI2', \ VarR4FromUI4, <.ulIn, .pfltOut>, 'VarR4FromUI4', \ VarR4FromUI8, <NONE>, 'VarR4FromUI8', \ VarR8FromBool, <.boolIn, .pdblOut>, 'VarR8FromBool', \ VarR8FromCy, <.cyIn, .pdblOut>, 'VarR8FromCy', \ VarR8FromDate, <.dateIn, .pdblOut>, 'VarR8FromDate', \ VarR8FromDec, <.pdecIn, .pdblOut>, 'VarR8FromDec', \ VarR8FromDisp, <.pdispIn, .lcid, .pdblOut>, 'VarR8FromDisp', \ VarR8FromI1, <.cIn, .pdblOut>, 'VarR8FromI1', \ VarR8FromI2, <.sIn, .pdblOut>, 'VarR8FromI2', \ VarR8FromI4, <.lIn, .pdblOut>, 'VarR8FromI4', \ VarR8FromI8, <NONE>, 'VarR8FromI8', \ VarR8FromR4, <.fltIn, .pdblOut>, 'VarR8FromR4', \ VarR8FromStr, <.strIn, .lcid, .dwFlags, .pdblOut>, 'VarR8FromStr', \ VarR8FromUI1, <.bIn, .pdblOut>, 'VarR8FromUI1', \ VarR8FromUI2, <.uiIn, .pdblOut>, 'VarR8FromUI2', \ VarR8FromUI4, <.ulIn, .pdblOut>, 'VarR8FromUI4', \ VarR8FromUI8, <NONE>, 'VarR8FromUI8', \ VarR8Pow, <.dblLeft, .dblRight, .pdblResult>, 'VarR8Pow', \ VarR8Round, <.dblIn, .cDecimals, .pdblResult>, 'VarR8Round', \ VarRound, <.pvarIn, .cDecimals, .pvarResult>, 'VarRound', \ VarSub, <.pvarLeft, .pvarRight, .pvarResult>, 'VarSub', \ VarTokenizeFormatString, <.pstrFormat, .rgbTok, .cbTok, .iFirstDay, .iFirstWeek, .lcid, .pcbActual>, 'VarTokenizeFormatString', \ VarUI1FromBool, <.boolIn, .pbOut>, 'VarUI1FromBool', \ VarUI1FromCy, <.cyIn, .pbOut>, 'VarUI1FromCy', \ VarUI1FromDate, <.dateIn, .pbOut>, 'VarUI1FromDate', \ VarUI1FromDec, <.pdecIn, .pbOut>, 'VarUI1FromDec', \ VarUI1FromDisp, <.pdispIn, .lcid, .pbOut>, 'VarUI1FromDisp', \ VarUI1FromI1, <.cIn, .pbOut>, 'VarUI1FromI1', \ VarUI1FromI2, <.sIn, .pbOut>, 'VarUI1FromI2', \ VarUI1FromI4, <.lIn, .pbOut>, 'VarUI1FromI4', \ VarUI1FromI8, <NONE>, 'VarUI1FromI8', \ VarUI1FromR4, <.fltIn, .pbOut>, 'VarUI1FromR4', \ VarUI1FromR8, <.dblIn, .pbOut>, 'VarUI1FromR8', \ VarUI1FromStr, <.strIn, .lcid, .dwFlags, .pbOut>, 'VarUI1FromStr', \ VarUI1FromUI2, <.uiIn, .pbOut>, 'VarUI1FromUI2', \ VarUI1FromUI4, <.ulIn, .pbOut>, 'VarUI1FromUI4', \ VarUI1FromUI8, <NONE>, 'VarUI1FromUI8', \ VarUI2FromBool, <.boolIn, .puiOut>, 'VarUI2FromBool', \ VarUI2FromCy, <.cyIn, .puiOut>, 'VarUI2FromCy', \ VarUI2FromDate, <.dateIn, .puiOut>, 'VarUI2FromDate', \ VarUI2FromDec, <.pdecIn, .puiOut>, 'VarUI2FromDec', \ VarUI2FromDisp, <.pdispIn, .lcid, .puiOut>, 'VarUI2FromDisp', \ VarUI2FromI1, <.cIn, .puiOut>, 'VarUI2FromI1', \ VarUI2FromI2, <.uiIn, .puiOut>, 'VarUI2FromI2', \ VarUI2FromI4, <.lIn, .puiOut>, 'VarUI2FromI4', \ VarUI2FromI8, <NONE>, 'VarUI2FromI8', \ VarUI2FromR4, <.fltIn, .puiOut>, 'VarUI2FromR4', \ VarUI2FromR8, <.dblIn, .puiOut>, 'VarUI2FromR8', \ VarUI2FromStr, <.strIn, .lcid, .dwFlags, .puiOut>, 'VarUI2FromStr', \ VarUI2FromUI1, <.bIn, .puiOut>, 'VarUI2FromUI1', \ VarUI2FromUI4, <.ulIn, .puiOut>, 'VarUI2FromUI4', \ VarUI2FromUI8, <NONE>, 'VarUI2FromUI8', \ VarUI4FromBool, <.boolIn, .pulOut>, 'VarUI4FromBool', \ VarUI4FromCy, <.cyIn, .pulOut>, 'VarUI4FromCy', \ VarUI4FromDate, <.dateIn, .pulOut>, 'VarUI4FromDate', \ VarUI4FromDec, <.pdecIn, .pulOut>, 'VarUI4FromDec', \ VarUI4FromDisp, <.pdispIn, .lcid, .pulOut>, 'VarUI4FromDisp', \ VarUI4FromI1, <.cIn, .pulOut>, 'VarUI4FromI1', \ VarUI4FromI2, <.uiIn, .pulOut>, 'VarUI4FromI2', \ VarUI4FromI4, <.lIn, .pulOut>, 'VarUI4FromI4', \ VarUI4FromI8, <NONE>, 'VarUI4FromI8', \ VarUI4FromR4, <.fltIn, .pulOut>, 'VarUI4FromR4', \ VarUI4FromR8, <.dblIn, .pulOut>, 'VarUI4FromR8', \ VarUI4FromStr, <.strIn, .lcid, .dwFlags, .pulOut>, 'VarUI4FromStr', \ VarUI4FromUI1, <.bIn, .pulOut>, 'VarUI4FromUI1', \ VarUI4FromUI2, <.uiIn, .pulOut>, 'VarUI4FromUI2', \ VarUI4FromUI8, <NONE>, 'VarUI4FromUI8', \ VarUI8FromBool, <NONE>, 'VarUI8FromBool', \ VarUI8FromCy, <NONE>, 'VarUI8FromCy', \ VarUI8FromDate, <NONE>, 'VarUI8FromDate', \ VarUI8FromDec, <NONE>, 'VarUI8FromDec', \ VarUI8FromDisp, <NONE>, 'VarUI8FromDisp', \ VarUI8FromI1, <NONE>, 'VarUI8FromI1', \ VarUI8FromI2, <NONE>, 'VarUI8FromI2', \ VarUI8FromI8, <NONE>, 'VarUI8FromI8', \ VarUI8FromR4, <NONE>, 'VarUI8FromR4', \ VarUI8FromR8, <NONE>, 'VarUI8FromR8', \ VarUI8FromStr, <NONE>, 'VarUI8FromStr', \ VarUI8FromUI1, <NONE>, 'VarUI8FromUI1', \ VarUI8FromUI2, <NONE>, 'VarUI8FromUI2', \ VarUI8FromUI4, <NONE>, 'VarUI8FromUI4', \ VarUdateFromDate, <.dateIn, .dwFlags, .pudateOut>, 'VarUdateFromDate', \ VarWeekdayName, <.iWeekday, .fAbbrev, .iFirstDay, .dwFlags, .pbstrOut>, 'VarWeekdayName', \ VarXor, <.pvarLeft, .pvarRight, .pvarResult>, 'VarXor', \ VariantChangeType, <.pvargDest, .pvarSrc, .wFlags, .vt>, 'VariantChangeType', \ VariantChangeTypeEx, <.pvargDest, .pvarSrc, .lcid, .wFlags, .vt>, 'VariantChangeTypeEx', \ VariantClear, <.pvarg>, 'VariantClear', \ VariantCopy, <.pvargDest, .pvargSrc>, 'VariantCopy', \ VariantCopyInd, <.pvarDest, .pvargSrc>, 'VariantCopyInd', \ VariantInit, <.pvarg>, 'VariantInit', \ VariantTimeToDosDateTime, <.vtime, .pwDosDate, .pwDosTime>, 'VariantTimeToDosDateTime', \ VariantTimeToSystemTime, <.vtime, .lpSystemTime>, 'VariantTimeToSystemTime', \ VectorFromBstr, <.bstr, .ppsa>, 'VectorFromBstr' |
Added freshlib/imports/Win32/sdl.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SDL v1.2.11 API functions. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ; ; SDL 1.2.11 includes written by Raedwulf ; a.k.a. Tai Chi Minh Ralph Eastwood ; ; There's no warranty for the correctness nor completeness of this file ; However, please mail me at tcmreastwood@ntlworld.com if you spot ; any errors in here. ; ; Version Date: 07/11/2006 (dd/mm/yyyy) ;_________________________________________________________________________________________ import_proto sdl, \ SDL_AddTimer, <NONE>, 'SDL_AddTimer', \ SDL_AllocRW, <NONE>, 'SDL_AllocRW', \ SDL_AudioDriverName, <NONE>, 'SDL_AudioDriverName', \ SDL_AudioInit, <NONE>, 'SDL_AudioInit', \ SDL_AudioQuit, <NONE>, 'SDL_AudioQuit', \ SDL_BuildAudioCVT, <NONE>, 'SDL_BuildAudioCVT', \ SDL_CDClose, <NONE>, 'SDL_CDClose', \ SDL_CDEject, <NONE>, 'SDL_CDEject', \ SDL_CDName, <NONE>, 'SDL_CDName', \ SDL_CDNumDrives, <NONE>, 'SDL_CDNumDrives', \ SDL_CDOpen, <NONE>, 'SDL_CDOpen', \ SDL_CDPause, <NONE>, 'SDL_CDPause', \ SDL_CDPlay, <NONE>, 'SDL_CDPlay', \ SDL_CDPlayTracks, <NONE>, 'SDL_CDPlayTracks',\ SDL_CDResume, <NONE>, 'SDL_CDResume',\ SDL_CDStatus, <NONE>, 'SDL_CDStatus',\ SDL_CDStop, <NONE>, 'SDL_CDStop',\ SDL_ClearError, <NONE>, 'SDL_ClearError',\ SDL_CloseAudio, <NONE>, 'SDL_CloseAudio',\ SDL_CondBroadcast, <NONE>, 'SDL_CondBroadcast',\ SDL_CondSignal, <NONE>, 'SDL_CondSignal',\ SDL_CondWait, <NONE>, 'SDL_CondWait',\ SDL_CondWaitTimeout, <NONE>, 'SDL_CondWaitTimeout',\ SDL_ConvertAudio, <NONE>, 'SDL_ConvertAudio',\ SDL_ConvertSurface, <NONE>, 'SDL_ConvertSurface',\ SDL_CreateCond, <NONE>, 'SDL_CreateCond',\ SDL_CreateCursor, <NONE>, 'SDL_CreateCursor',\ SDL_CreateMutex, <NONE>, 'SDL_CreateMutex',\ SDL_CreateRGBSurface, <NONE>, 'SDL_CreateRGBSurface',\ SDL_CreateRGBSurfaceFrom, <NONE>, 'SDL_CreateRGBSurfaceFrom',\ SDL_CreateSemaphore, <NONE>, 'SDL_CreateSemaphore',\ SDL_CreateThread, <NONE>, 'SDL_CreateThread',\ SDL_CreateYUVOverlay, <NONE>, 'SDL_CreateYUVOverlay',\ SDL_Delay, <NONE>, 'SDL_Delay',\ SDL_DestroyCond, <NONE>, 'SDL_DestroyCond',\ SDL_DestroyMutex, <NONE>, 'SDL_DestroyMutex',\ SDL_DestroySemaphore, <NONE>, 'SDL_DestroySemaphore',\ SDL_DisplayFormat, <NONE>, 'SDL_DisplayFormat',\ SDL_DisplayFormatAlpha, <NONE>, 'SDL_DisplayFormatAlpha',\ SDL_DisplayYUVOverlay, <NONE>, 'SDL_DisplayYUVOverlay',\ SDL_EnableKeyRepeat, <NONE>, 'SDL_EnableKeyRepeat',\ SDL_EnableUNICODE, <NONE>, 'SDL_EnableUNICODE',\ SDL_Error, <NONE>, 'SDL_Error',\ SDL_EventState, <NONE>, 'SDL_EventState',\ SDL_FillRect, <NONE>, 'SDL_FillRect',\ SDL_Flip, <NONE>, 'SDL_Flip',\ SDL_FreeCursor, <NONE>, 'SDL_FreeCursor',\ SDL_FreeRW, <NONE>, 'SDL_FreeRW',\ SDL_FreeSurface, <NONE>, 'SDL_FreeSurface',\ SDL_FreeWAV, <NONE>, 'SDL_FreeWAV',\ SDL_FreeYUVOverlay, <NONE>, 'SDL_FreeYUVOverlay',\ SDL_GL_GetAttribute, <NONE>, 'SDL_GL_GetAttribute',\ SDL_GL_GetProcAddress, <NONE>, 'SDL_GL_GetProcAddress',\ SDL_GL_LoadLibrary, <NONE>, 'SDL_GL_LoadLibrary',\ SDL_GL_Lock, <NONE>, 'SDL_GL_Lock',\ SDL_GL_SetAttribute, <NONE>, 'SDL_GL_SetAttribute',\ SDL_GL_SwapBuffers, <NONE>, 'SDL_GL_SwapBuffers',\ SDL_GL_Unlock, <NONE>, 'SDL_GL_Unlock',\ SDL_GL_UpdateRects, <NONE>, 'SDL_GL_UpdateRects',\ SDL_GetAppState, <NONE>, 'SDL_GetAppState',\ SDL_GetAudioStatus, <NONE>, 'SDL_GetAudioStatus',\ SDL_GetClipRect, <NONE>, 'SDL_GetClipRect',\ SDL_GetCursor, <NONE>, 'SDL_GetCursor',\ SDL_GetError, <NONE>, 'SDL_GetError',\ SDL_GetEventFilter, <NONE>, 'SDL_GetEventFilter',\ SDL_GetGammaRamp, <NONE>, 'SDL_GetGammaRamp',\ SDL_GetKeyName, <NONE>, 'SDL_GetKeyName',\ SDL_GetKeyRepeat, <NONE>, 'SDL_GetKeyRepeat',\ SDL_GetKeyState, <NONE>, 'SDL_GetKeyState',\ SDL_GetModState, <NONE>, 'SDL_GetModState',\ SDL_GetMouseState, <NONE>, 'SDL_GetMouseState',\ SDL_GetRGB, <NONE>, 'SDL_GetRGB',\ SDL_GetRGBA, <NONE>, 'SDL_GetRGBA',\ SDL_GetRelativeMouseState, <NONE>, 'SDL_GetRelativeMouseState',\ SDL_GetThreadID, <NONE>, 'SDL_GetThreadID',\ SDL_GetTicks, <NONE>, 'SDL_GetTicks',\ SDL_GetVideoInfo, <NONE>, 'SDL_GetVideoInfo',\ SDL_GetVideoSurface, <NONE>, 'SDL_GetVideoSurface',\ SDL_GetWMInfo, <NONE>, 'SDL_GetWMInfo',\ SDL_Has3DNow, <NONE>, 'SDL_Has3DNow',\ SDL_Has3DNowExt, <NONE>, 'SDL_Has3DNowExt',\ SDL_HasAltiVec, <NONE>, 'SDL_HasAltiVec',\ SDL_HasMMX, <NONE>, 'SDL_HasMMX',\ SDL_HasMMXExt, <NONE>, 'SDL_HasMMXExt',\ SDL_HasRDTSC, <NONE>, 'SDL_HasRDTSC',\ SDL_HasSSE, <NONE>, 'SDL_HasSSE',\ SDL_HasSSE2, <NONE>, 'SDL_HasSSE2',\ SDL_Init, <NONE>, 'SDL_Init',\ SDL_InitSubSystem, <NONE>, 'SDL_InitSubSystem',\ SDL_JoystickClose, <NONE>, 'SDL_JoystickClose',\ SDL_JoystickEventState, <NONE>, 'SDL_JoystickEventState',\ SDL_JoystickGetAxis, <NONE>, 'SDL_JoystickGetAxis',\ SDL_JoystickGetBall, <NONE>, 'SDL_JoystickGetBall',\ SDL_JoystickGetButton, <NONE>, 'SDL_JoystickGetButton',\ SDL_JoystickGetHat, <NONE>, 'SDL_JoystickGetHat',\ SDL_JoystickIndex, <NONE>, 'SDL_JoystickIndex',\ SDL_JoystickName, <NONE>, 'SDL_JoystickName',\ SDL_JoystickNumAxes, <NONE>, 'SDL_JoystickNumAxes',\ SDL_JoystickNumBalls, <NONE>, 'SDL_JoystickNumBalls',\ SDL_JoystickNumButtons, <NONE>, 'SDL_JoystickNumButtons',\ SDL_JoystickNumHats, <NONE>, 'SDL_JoystickNumHats',\ SDL_JoystickOpen, <NONE>, 'SDL_JoystickOpen',\ SDL_JoystickOpened, <NONE>, 'SDL_JoystickOpened',\ SDL_JoystickUpdate, <NONE>, 'SDL_JoystickUpdate',\ SDL_KillThread, <NONE>, 'SDL_KillThread',\ SDL_Linked_Version, <NONE>, 'SDL_Linked_Version',\ SDL_ListModes, <NONE>, 'SDL_ListModes',\ SDL_LoadBMP_RW, <NONE>, 'SDL_LoadBMP_RW',\ SDL_LoadFunction, <NONE>, 'SDL_LoadFunction',\ SDL_LoadObject, <NONE>, 'SDL_LoadObject',\ SDL_LoadWAV_RW, <NONE>, 'SDL_LoadWAV_RW',\ SDL_LockAudio, <NONE>, 'SDL_LockAudio',\ SDL_LockSurface, <NONE>, 'SDL_LockSurface',\ SDL_LockYUVOverlay, <NONE>, 'SDL_LockYUVOverlay',\ SDL_LowerBlit, <NONE>, 'SDL_LowerBlit',\ SDL_MapRGB, <NONE>, 'SDL_MapRGB',\ SDL_MapRGBA, <NONE>, 'SDL_MapRGBA',\ SDL_MixAudio, <NONE>, 'SDL_MixAudio',\ SDL_NumJoysticks, <NONE>, 'SDL_NumJoysticks',\ SDL_OpenAudio, <NONE>, 'SDL_OpenAudio',\ SDL_PauseAudio, <NONE>, 'SDL_PauseAudio',\ SDL_PeepEvents, <NONE>, 'SDL_PeepEvents',\ SDL_PollEvent, <NONE>, 'SDL_PollEvent',\ SDL_PumpEvents, <NONE>, 'SDL_PumpEvents',\ SDL_PushEvent, <NONE>, 'SDL_PushEvent',\ SDL_Quit, <NONE>, 'SDL_Quit',\ SDL_QuitSubSystem, <NONE>, 'SDL_QuitSubSystem',\ SDL_RWFromConstMem, <NONE>, 'SDL_RWFromConstMem',\ SDL_RWFromFP, <NONE>, 'SDL_RWFromFP',\ SDL_RWFromFile, <NONE>, 'SDL_RWFromFile',\ SDL_RWFromMem, <NONE>, 'SDL_RWFromMem',\ SDL_ReadBE16, <NONE>, 'SDL_ReadBE16',\ SDL_ReadBE32, <NONE>, 'SDL_ReadBE32',\ SDL_ReadBE64, <NONE>, 'SDL_ReadBE64',\ SDL_ReadLE16, <NONE>, 'SDL_ReadLE16',\ SDL_ReadLE32, <NONE>, 'SDL_ReadLE32',\ SDL_ReadLE64, <NONE>, 'SDL_ReadLE64',\ SDL_RegisterApp, <NONE>, 'SDL_RegisterApp',\ SDL_RemoveTimer, <NONE>, 'SDL_RemoveTimer',\ SDL_SaveBMP_RW, <NONE>, 'SDL_SaveBMP_RW',\ SDL_SemPost, <NONE>, 'SDL_SemPost',\ SDL_SemTryWait, <NONE>, 'SDL_SemTryWait',\ SDL_SemValue, <NONE>, 'SDL_SemValue',\ SDL_SemWait, <NONE>, 'SDL_SemWait',\ SDL_SemWaitTimeout, <NONE>, 'SDL_SemWaitTimeout',\ SDL_SetAlpha, <NONE>, 'SDL_SetAlpha',\ SDL_SetClipRect, <NONE>, 'SDL_SetClipRect',\ SDL_SetColorKey, <NONE>, 'SDL_SetColorKey',\ SDL_SetColors, <NONE>, 'SDL_SetColors',\ SDL_SetCursor, <NONE>, 'SDL_SetCursor',\ SDL_SetError, <NONE>, 'SDL_SetError',\ SDL_SetEventFilter, <NONE>, 'SDL_SetEventFilter',\ SDL_SetGamma, <NONE>, 'SDL_SetGamma',\ SDL_SetGammaRamp, <NONE>, 'SDL_SetGammaRamp',\ SDL_SetModState, <NONE>, 'SDL_SetModState',\ SDL_SetModuleHandle, <NONE>, 'SDL_SetModuleHandle',\ SDL_SetPalette, <NONE>, 'SDL_SetPalette',\ SDL_SetTimer, <NONE>, 'SDL_SetTimer',\ SDL_SetVideoMode, <NONE>, 'SDL_SetVideoMode',\ SDL_ShowCursor, <NONE>, 'SDL_ShowCursor',\ SDL_SoftStretch, <NONE>, 'SDL_SoftStretch',\ SDL_ThreadID, <NONE>, 'SDL_ThreadID',\ SDL_UnloadObject, <NONE>, 'SDL_UnloadObject',\ SDL_UnlockAudio, <NONE>, 'SDL_UnlockAudio',\ SDL_UnlockSurface, <NONE>, 'SDL_UnlockSurface',\ SDL_UnlockYUVOverlay, <NONE>, 'SDL_UnlockYUVOverlay',\ SDL_UnregisterApp, <NONE>, 'SDL_UnregisterApp',\ SDL_UpdateRect, <NONE>, 'SDL_UpdateRect',\ SDL_UpdateRects, <NONE>, 'SDL_UpdateRects',\ SDL_UpperBlit, <NONE>, 'SDL_UpperBlit',\ SDL_VideoDriverName, <NONE>, 'SDL_VideoDriverName',\ SDL_VideoInit, <NONE>, 'SDL_VideoInit',\ SDL_VideoModeOK, <NONE>, 'SDL_VideoModeOK',\ SDL_VideoQuit, <NONE>, 'SDL_VideoQuit',\ SDL_WM_GetCaption, <NONE>, 'SDL_WM_GetCaption',\ SDL_WM_GrabInput, <NONE>, 'SDL_WM_GrabInput',\ SDL_WM_IconifyWindow, <NONE>, 'SDL_WM_IconifyWindow',\ SDL_WM_SetCaption, <NONE>, 'SDL_WM_SetCaption',\ SDL_WM_SetIcon, <NONE>, 'SDL_WM_SetIcon',\ SDL_WM_ToggleFullScreen, <NONE>, 'SDL_WM_ToggleFullScreen',\ SDL_WaitEvent, <NONE>, 'SDL_WaitEvent',\ SDL_WaitThread, <NONE>, 'SDL_WaitThread',\ SDL_WarpMouse, <NONE>, 'SDL_WarpMouse',\ SDL_WasInit, <NONE>, 'SDL_WasInit',\ SDL_WriteBE16, <NONE>, 'SDL_WriteBE16',\ SDL_WriteBE32, <NONE>, 'SDL_WriteBE32',\ SDL_WriteBE64, <NONE>, 'SDL_WriteBE64',\ SDL_WriteLE16, <NONE>, 'SDL_WriteLE16',\ SDL_WriteLE32, <NONE>, 'SDL_WriteLE32',\ SDL_WriteLE64, <NONE>, 'SDL_WriteLE64',\ SDL_getenv, <NONE>, 'SDL_getenv',\ SDL_iconv, <NONE>, 'SDL_iconv',\ SDL_iconv_close, <NONE>, 'SDL_iconv_close',\ SDL_iconv_open, <NONE>, 'SDL_iconv_open',\ SDL_iconv_string, <NONE>, 'SDL_iconv_string',\ SDL_lltoa, <NONE>, 'SDL_lltoa',\ SDL_mutexP, <NONE>, 'SDL_mutexP',\ SDL_mutexV, <NONE>, 'SDL_mutexV',\ SDL_putenv, <NONE>, 'SDL_putenv',\ SDL_revcpy, <NONE>, 'SDL_revcpy',\ SDL_snprintf, <NONE>, 'SDL_snprintf',\ SDL_strdup, <NONE>, 'SDL_strdup',\ SDL_strlcat, <NONE>, 'SDL_strlcat',\ SDL_strlcpy, <NONE>, 'SDL_strlcpy',\ SDL_strtoull, <NONE>, 'SDL_strtoull',\ SDL_ulltoa, <NONE>, 'SDL_ulltoa',\ SDL_vsnprintf, <NONE>, 'SDL_vsnprintf' |
Added freshlib/imports/Win32/sdl_image.inc.
> > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SDL_image v1.2 API functions. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ; _______________________________________________________________________________________ import_proto sdl_image, \ IMG_Load, <NONE>, 'IMG_Load' |
Added freshlib/imports/Win32/shell32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: shell32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto shell32, \ Activate_RunDLL, <NONE>, 'Activate_RunDLL', \ AppCompat_RunDLLW, <NONE>, 'AppCompat_RunDLLW', \ CDefFolderMenu_Create, <NONE>, 'CDefFolderMenu_Create', \ CDefFolderMenu_Create2, <NONE>, 'CDefFolderMenu_Create2', \ CallCPLEntry16, <NONE>, 'CallCPLEntry16', \ CheckEscapesA, <NONE>, 'CheckEscapesA', \ CheckEscapesW, <NONE>, 'CheckEscapesW', \ CommandLineToArgvW, <.lpCmdLine, .pNumArgs>, 'CommandLineToArgvW', \ Control_FillCache_RunDLL, <NONE>, 'Control_FillCache_RunDLL', \ Control_FillCache_RunDLLA, <NONE>, 'Control_FillCache_RunDLLA', \ Control_FillCache_RunDLLW, <NONE>, 'Control_FillCache_RunDLLW', \ Control_RunDLL, <NONE>, 'Control_RunDLL', \ Control_RunDLLA, <NONE>, 'Control_RunDLLA', \ Control_RunDLLAsUserW, <NONE>, 'Control_RunDLLAsUserW', \ Control_RunDLLW, <NONE>, 'Control_RunDLLW', \ DAD_AutoScroll, <NONE>, 'DAD_AutoScroll', \ DAD_DragEnterEx, <NONE>, 'DAD_DragEnterEx', \ DAD_DragEnterEx2, <NONE>, 'DAD_DragEnterEx2', \ DAD_DragLeave, <NONE>, 'DAD_DragLeave', \ DAD_DragMove, <NONE>, 'DAD_DragMove', \ DAD_SetDragImage, <NONE>, 'DAD_SetDragImage', \ DAD_ShowDragImage, <NONE>, 'DAD_ShowDragImage', \ DoEnvironmentSubstA, <.szString, .cbString>, 'DoEnvironmentSubstA', \ DoEnvironmentSubstW, <.szString, .cbString>, 'DoEnvironmentSubstW', \ DragAcceptFiles, <.hwnd, .fAccept>, 'DragAcceptFiles', \ DragFinish, <.hDrop>, 'DragFinish', \ DragQueryFile, <.HDROP, .UINT, .lpStr, .ch>, 'DragQueryFile', \ DragQueryFileA, <.HDROP, .UINT, .lpStr, .ch>, 'DragQueryFileA', \ DragQueryFileAorW, <NONE>, 'DragQueryFileAorW', \ DragQueryFileW, <.HDROP, .UINT, .lpStr, .ch>, 'DragQueryFileW', \ DragQueryPoint, <.HDROP, .lpPoint>, 'DragQueryPoint', \ DriveType, <NONE>, 'DriveType', \ DuplicateIcon, <.hInst, .hIcon>, 'DuplicateIcon', \ ExtractAssociatedIconA, <.hInst, .lpIconPath, .lpiIcon>, 'ExtractAssociatedIconA', \ ExtractAssociatedIconExA, <NONE>, 'ExtractAssociatedIconExA', \ ExtractAssociatedIconExW, <NONE>, 'ExtractAssociatedIconExW', \ ExtractAssociatedIconW, <.hInst, .lpIconPath, .lpiIcon>, 'ExtractAssociatedIconW', \ ExtractIconA, <.hInst, .lpszExeFileName, .nIconIndex>, 'ExtractIconA', \ ExtractIconEx, <.lpszFile, .nIconIndex, .phiconLarge, .phiconSmall, .nIcons>, 'ExtractIconEx', \ ExtractIconExA, <.lpszFile, .nIconIndex, .phiconLarge, .phiconSmall, .nIcons>, 'ExtractIconExA', \ ExtractIconExW, <.lpszFile, .nIconIndex, .phiconLarge, .phiconSmall, .nIcons>, 'ExtractIconExW', \ ExtractIconResInfoA, <NONE>, 'ExtractIconResInfoA', \ ExtractIconResInfoW, <NONE>, 'ExtractIconResInfoW', \ ExtractIconW, <.hInst, .lpszExeFileName, .nIconIndex>, 'ExtractIconW', \ ExtractVersionResource16W, <NONE>, 'ExtractVersionResource16W', \ FindExeDlgProc, <NONE>, 'FindExeDlgProc', \ FindExecutableA, <.lpFile, .lpDirectory, .lpResult>, 'FindExecutableA', \ FindExecutableW, <.lpFile, .lpDirectory, .lpResult>, 'FindExecutableW', \ FreeIconList, <NONE>, 'FreeIconList', \ GetFileNameFromBrowse, <NONE>, 'GetFileNameFromBrowse', \ ILAppendID, <NONE>, 'ILAppendID', \ ILClone, <NONE>, 'ILClone', \ ILCloneFirst, <NONE>, 'ILCloneFirst', \ ILCombine, <NONE>, 'ILCombine', \ ILCreateFromPath, <NONE>, 'ILCreateFromPath', \ ILCreateFromPathA, <NONE>, 'ILCreateFromPathA', \ ILCreateFromPathW, <NONE>, 'ILCreateFromPathW', \ ILFindChild, <NONE>, 'ILFindChild', \ ILFindLastID, <NONE>, 'ILFindLastID', \ ILFree, <NONE>, 'ILFree', \ ILGetNext, <NONE>, 'ILGetNext', \ ILGetSize, <NONE>, 'ILGetSize', \ ILIsEqual, <NONE>, 'ILIsEqual', \ ILIsParent, <NONE>, 'ILIsParent', \ ILLoadFromStream, <NONE>, 'ILLoadFromStream', \ ILRemoveLastID, <NONE>, 'ILRemoveLastID', \ ILSaveToStream, <NONE>, 'ILSaveToStream', \ InternalExtractIconListA, <NONE>, 'InternalExtractIconListA', \ InternalExtractIconListW, <NONE>, 'InternalExtractIconListW', \ IsLFNDrive, <NONE>, 'IsLFNDrive', \ IsLFNDriveA, <NONE>, 'IsLFNDriveA', \ IsLFNDriveW, <NONE>, 'IsLFNDriveW', \ IsNetDrive, <NONE>, 'IsNetDrive', \ IsUserAnAdmin, <NONE>, 'IsUserAnAdmin', \ OpenAs_RunDLL, <NONE>, 'OpenAs_RunDLL', \ OpenAs_RunDLLA, <NONE>, 'OpenAs_RunDLLA', \ OpenAs_RunDLLW, <NONE>, 'OpenAs_RunDLLW', \ OpenRegStream, <NONE>, 'OpenRegStream', \ Options_RunDLL, <NONE>, 'Options_RunDLL', \ Options_RunDLLA, <NONE>, 'Options_RunDLLA', \ Options_RunDLLW, <NONE>, 'Options_RunDLLW', \ PathCleanupSpec, <NONE>, 'PathCleanupSpec', \ PathGetShortPath, <NONE>, 'PathGetShortPath', \ PathIsExe, <NONE>, 'PathIsExe', \ PathIsSlowA, <NONE>, 'PathIsSlowA', \ PathIsSlowW, <NONE>, 'PathIsSlowW', \ PathMakeUniqueName, <NONE>, 'PathMakeUniqueName', \ PathProcessCommand, <NONE>, 'PathProcessCommand', \ PathQualify, <NONE>, 'PathQualify', \ PathResolve, <NONE>, 'PathResolve', \ PathYetAnotherMakeUniqueName, <NONE>, 'PathYetAnotherMakeUniqueName', \ PickIconDlg, <NONE>, 'PickIconDlg', \ PifMgr_CloseProperties, <NONE>, 'PifMgr_CloseProperties', \ PifMgr_GetProperties, <NONE>, 'PifMgr_GetProperties', \ PifMgr_OpenProperties, <NONE>, 'PifMgr_OpenProperties', \ PifMgr_SetProperties, <NONE>, 'PifMgr_SetProperties', \ PrintersGetCommand_RunDLL, <NONE>, 'PrintersGetCommand_RunDLL', \ PrintersGetCommand_RunDLLA, <NONE>, 'PrintersGetCommand_RunDLLA', \ PrintersGetCommand_RunDLLW, <NONE>, 'PrintersGetCommand_RunDLLW', \ ReadCabinetState, <NONE>, 'ReadCabinetState', \ RealDriveType, <NONE>, 'RealDriveType', \ RealShellExecuteA, <NONE>, 'RealShellExecuteA', \ RealShellExecuteExA, <NONE>, 'RealShellExecuteExA', \ RealShellExecuteExW, <NONE>, 'RealShellExecuteExW', \ RealShellExecuteW, <NONE>, 'RealShellExecuteW', \ RegenerateUserEnvironment, <NONE>, 'RegenerateUserEnvironment', \ RestartDialog, <NONE>, 'RestartDialog', \ RestartDialogEx, <NONE>, 'RestartDialogEx', \ SHAddFromPropSheetExtArray, <NONE>, 'SHAddFromPropSheetExtArray', \ SHAddToRecentDocs, <.uFlags, .pv>, 'SHAddToRecentDocs', \ SHAlloc, <NONE>, 'SHAlloc', \ SHAllocShared, <NONE>, 'SHAllocShared', \ SHAppBarMessage, <.dwMessage, .pData>, 'SHAppBarMessage', \ SHBindToParent, <.pidl, .riid, .ppv, .ppidlLast>, 'SHBindToParent', \ SHBrowseForFolder, <.lpbi>, 'SHBrowseForFolder', \ SHBrowseForFolderA, <.lpbi>, 'SHBrowseForFolderA', \ SHBrowseForFolderW, <.lpbi>, 'SHBrowseForFolderW', \ SHCLSIDFromString, <NONE>, 'SHCLSIDFromString', \ SHChangeNotification_Lock, <NONE>, 'SHChangeNotification_Lock', \ SHChangeNotification_Unlock, <NONE>, 'SHChangeNotification_Unlock', \ SHChangeNotify, <.wEventId, .uFlags, .dwItem1, .dwItem2>, 'SHChangeNotify', \ SHChangeNotifyDeregister, <NONE>, 'SHChangeNotifyDeregister', \ SHChangeNotifyRegister, <NONE>, 'SHChangeNotifyRegister', \ SHChangeNotifySuspendResume, <NONE>, 'SHChangeNotifySuspendResume', \ SHCloneSpecialIDList, <NONE>, 'SHCloneSpecialIDList', \ SHCoCreateInstance, <NONE>, 'SHCoCreateInstance', \ SHCreateDirectory, <NONE>, 'SHCreateDirectory', \ SHCreateDirectoryExA, <.hwnd, .pszPath, .psa>, 'SHCreateDirectoryExA', \ SHCreateDirectoryExW, <.hwnd, .pszPath, .psa>, 'SHCreateDirectoryExW', \ SHCreateFileExtractIconW, <NONE>, 'SHCreateFileExtractIconW', \ SHCreateLocalServerRunDll, <NONE>, 'SHCreateLocalServerRunDll', \ SHCreateProcessAsUserW, <NONE>, 'SHCreateProcessAsUserW', \ SHCreatePropSheetExtArray, <NONE>, 'SHCreatePropSheetExtArray', \ SHCreateQueryCancelAutoPlayMoniker, <NONE>, 'SHCreateQueryCancelAutoPlayMoniker', \ SHCreateShellFolderView, <NONE>, 'SHCreateShellFolderView', \ SHCreateShellFolderViewEx, <NONE>, 'SHCreateShellFolderViewEx', \ SHCreateShellItem, <NONE>, 'SHCreateShellItem', \ SHCreateStdEnumFmtEtc, <NONE>, 'SHCreateStdEnumFmtEtc', \ SHDefExtractIconA, <NONE>, 'SHDefExtractIconA', \ SHDefExtractIconW, <NONE>, 'SHDefExtractIconW', \ SHDestroyPropSheetExtArray, <NONE>, 'SHDestroyPropSheetExtArray', \ SHDoDragDrop, <NONE>, 'SHDoDragDrop', \ SHEmptyRecycleBinA, <.hwnd, .pszRootPath, .dwFlags>, 'SHEmptyRecycleBinA', \ SHEmptyRecycleBinW, <.hwnd, .pszRootPath, .dwFlags>, 'SHEmptyRecycleBinW', \ SHEnableServiceObject, <NONE>, 'SHEnableServiceObject', \ SHEnumerateUnreadMailAccountsW, <NONE>, 'SHEnumerateUnreadMailAccountsW', \ SHExtractIconsW, <NONE>, 'SHExtractIconsW', \ SHFileOperation, <.lpFileOp>, 'SHFileOperation', \ SHFileOperationA, <.lpFileOp>, 'SHFileOperationA', \ SHFileOperationW, <.lpFileOp>, 'SHFileOperationW', \ SHFindFiles, <NONE>, 'SHFindFiles', \ SHFind_InitMenuPopup, <NONE>, 'SHFind_InitMenuPopup', \ SHFlushClipboard, <NONE>, 'SHFlushClipboard', \ SHFlushSFCache, <NONE>, 'SHFlushSFCache', \ SHFormatDrive, <NONE>, 'SHFormatDrive', \ SHFree, <NONE>, 'SHFree', \ SHFreeNameMappings, <.hNameMappings>, 'SHFreeNameMappings', \ SHFreeShared, <NONE>, 'SHFreeShared', \ SHGetAttributesFromDataObject, <NONE>, 'SHGetAttributesFromDataObject', \ SHGetDataFromIDListA, <.psf, .pidl, .nFormat, .pv, .cb>, 'SHGetDataFromIDListA', \ SHGetDataFromIDListW, <.psf, .pidl, .nFormat, .pv, .cb>, 'SHGetDataFromIDListW', \ SHGetDesktopFolder, <.ppshf>, 'SHGetDesktopFolder', \ SHGetDiskFreeSpaceA, <NONE>, 'SHGetDiskFreeSpaceA', \ SHGetDiskFreeSpaceExA, <.pszDirectoryName, .pulFreeBytesAvailableToCaller, .pulTotalNumberOfBytes, .pulTotalNumberOfFreeBytes, \ >, 'SHGetDiskFreeSpaceExA', \ SHGetDiskFreeSpaceExW, <.pszDirectoryName, .pulFreeBytesAvailableToCaller, .pulTotalNumberOfBytes, .pulTotalNumberOfFreeBytes, \ >, 'SHGetDiskFreeSpaceExW', \ SHGetFileInfo, <.pszPath, .dwFileAttributes, .psfi, .cbFileInfo, .uFlags>, 'SHGetFileInfo', \ SHGetFileInfoA, <.pszPath, .dwFileAttributes, .psfi, .cbFileInfo, .uFlags>, 'SHGetFileInfoA', \ SHGetFileInfoW, <.pszPath, .dwFileAttributes, .psfi, .cbFileInfo, .uFlags>, 'SHGetFileInfoW', \ SHGetFolderLocation, <.hwnd, .csidl, .hToken, .dwFlags, .ppidl>, 'SHGetFolderLocation', \ SHGetFolderPathA, <.hwnd, .csidl, .hToken, .dwFlags, .pszPath>, 'SHGetFolderPathA', \ SHGetFolderPathAndSubDirA, <NONE>, 'SHGetFolderPathAndSubDirA', \ SHGetFolderPathAndSubDirW, <NONE>, 'SHGetFolderPathAndSubDirW', \ SHGetFolderPathW, <.hwnd, .csidl, .hToken, .dwFlags, .pszPath>, 'SHGetFolderPathW', \ SHGetIconOverlayIndexA, <.pszIconPath, .iIconIndex>, 'SHGetIconOverlayIndexA', \ SHGetIconOverlayIndexW, <.pszIconPath, .iIconIndex>, 'SHGetIconOverlayIndexW', \ SHGetImageList, <NONE>, 'SHGetImageList', \ SHGetInstanceExplorer, <.ppunk>, 'SHGetInstanceExplorer', \ SHGetMalloc, <.ppMalloc>, 'SHGetMalloc', \ SHGetNewLinkInfo, <.pszLinkto, .pszDir, .pszName, .pfMustCopy, .uFlags>, 'SHGetNewLinkInfo', \ SHGetNewLinkInfoA, <.pszLinkto, .pszDir, .pszName, .pfMustCopy, .uFlags>, 'SHGetNewLinkInfoA', \ SHGetNewLinkInfoW, <.pszLinkto, .pszDir, .pszName, .pfMustCopy, .uFlags>, 'SHGetNewLinkInfoW', \ SHGetPathFromIDList, <.pidl, .pszPath>, 'SHGetPathFromIDList', \ SHGetPathFromIDListA, <.pidl, .pszPath>, 'SHGetPathFromIDListA', \ SHGetPathFromIDListW, <.pidl, .pszPath>, 'SHGetPathFromIDListW', \ SHGetRealIDL, <NONE>, 'SHGetRealIDL', \ SHGetSetFolderCustomSettingsW, <NONE>, 'SHGetSetFolderCustomSettingsW', \ SHGetSetSettings, <NONE>, 'SHGetSetSettings', \ SHGetSettings, <.lpsfs, .dwMask>, 'SHGetSettings', \ SHGetShellStyleHInstance, <NONE>, 'SHGetShellStyleHInstance', \ SHGetSpecialFolderLocation, <.hwnd, .csidl, .ppidl>, 'SHGetSpecialFolderLocation', \ SHGetSpecialFolderPathA, <.hwnd, .pszPath, .csidl, .fCreate>, 'SHGetSpecialFolderPathA', \ SHGetSpecialFolderPathW, <.hwnd, .pszPath, .csidl, .fCreate>, 'SHGetSpecialFolderPathW', \ SHGetUnreadMailCountW, <NONE>, 'SHGetUnreadMailCountW', \ SHHandleUpdateImage, <NONE>, 'SHHandleUpdateImage', \ SHHelpShortcuts_RunDLL, <NONE>, 'SHHelpShortcuts_RunDLL', \ SHHelpShortcuts_RunDLLA, <NONE>, 'SHHelpShortcuts_RunDLLA', \ SHHelpShortcuts_RunDLLW, <NONE>, 'SHHelpShortcuts_RunDLLW', \ SHILCreateFromPath, <NONE>, 'SHILCreateFromPath', \ SHInvokePrinterCommandA, <.hwnd, .uAction, .lpBuf1, .lpBuf2, .fModal>, 'SHInvokePrinterCommandA', \ SHInvokePrinterCommandW, <.hwnd, .uAction, .lpBuf1, .lpBuf2, .fModal>, 'SHInvokePrinterCommandW', \ SHIsFileAvailableOffline, <.pwszPath, .pdwStatus>, 'SHIsFileAvailableOffline', \ SHLimitInputEdit, <NONE>, 'SHLimitInputEdit', \ SHLoadInProc, <.rclsid>, 'SHLoadInProc', \ SHLoadNonloadedIconOverlayIdentifiers, <VOID>, 'SHLoadNonloadedIconOverlayIdentifiers', \ SHLoadOLE, <NONE>, 'SHLoadOLE', \ SHLockShared, <NONE>, 'SHLockShared', \ SHMapIDListToImageListIndexAsync, <NONE>, 'SHMapIDListToImageListIndexAsync', \ SHMapPIDLToSystemImageListIndex, <NONE>, 'SHMapPIDLToSystemImageListIndex', \ SHMultiFileProperties, <NONE>, 'SHMultiFileProperties', \ SHObjectProperties, <NONE>, 'SHObjectProperties', \ SHOpenFolderAndSelectItems, <NONE>, 'SHOpenFolderAndSelectItems', \ SHOpenPropSheetW, <NONE>, 'SHOpenPropSheetW', \ SHParseDisplayName, <NONE>, 'SHParseDisplayName', \ SHPathPrepareForWriteA, <.hwnd, .punkEnableModless, .pszPath, .dwFlags>, 'SHPathPrepareForWriteA', \ SHPathPrepareForWriteW, <.hwnd, .punkEnableModless, .pszPath, .dwFlags>, 'SHPathPrepareForWriteW', \ SHPropStgCreate, <NONE>, 'SHPropStgCreate', \ SHPropStgReadMultiple, <NONE>, 'SHPropStgReadMultiple', \ SHPropStgWriteMultiple, <NONE>, 'SHPropStgWriteMultiple', \ SHQueryRecycleBinA, <.pszRootPath, .pSHQueryRBInfo>, 'SHQueryRecycleBinA', \ SHQueryRecycleBinW, <.pszRootPath, .pSHQueryRBInfo>, 'SHQueryRecycleBinW', \ SHReplaceFromPropSheetExtArray, <NONE>, 'SHReplaceFromPropSheetExtArray', \ SHRestricted, <NONE>, 'SHRestricted', \ SHRunControlPanel, <NONE>, 'SHRunControlPanel', \ SHSetInstanceExplorer, <NONE>, 'SHSetInstanceExplorer', \ SHSetLocalizedName, <NONE>, 'SHSetLocalizedName', \ SHSetUnreadMailCountW, <NONE>, 'SHSetUnreadMailCountW', \ SHShellFolderView_Message, <NONE>, 'SHShellFolderView_Message', \ SHSimpleIDListFromPath, <NONE>, 'SHSimpleIDListFromPath', \ SHStartNetConnectionDialogW, <NONE>, 'SHStartNetConnectionDialogW', \ SHTestTokenMembership, <NONE>, 'SHTestTokenMembership', \ SHUnlockShared, <NONE>, 'SHUnlockShared', \ SHUpdateImageA, <NONE>, 'SHUpdateImageA', \ SHUpdateImageW, <NONE>, 'SHUpdateImageW', \ SHUpdateRecycleBinIcon, <NONE>, 'SHUpdateRecycleBinIcon', \ SHValidateUNC, <NONE>, 'SHValidateUNC', \ SheChangeDirA, <NONE>, 'SheChangeDirA', \ SheChangeDirExA, <NONE>, 'SheChangeDirExA', \ SheChangeDirExW, <NONE>, 'SheChangeDirExW', \ SheChangeDirW, <NONE>, 'SheChangeDirW', \ SheConvertPathW, <NONE>, 'SheConvertPathW', \ SheFullPathA, <NONE>, 'SheFullPathA', \ SheFullPathW, <NONE>, 'SheFullPathW', \ SheGetCurDrive, <NONE>, 'SheGetCurDrive', \ SheGetDirA, <NONE>, 'SheGetDirA', \ SheGetDirExW, <NONE>, 'SheGetDirExW', \ SheGetDirW, <NONE>, 'SheGetDirW', \ SheGetPathOffsetW, <NONE>, 'SheGetPathOffsetW', \ SheRemoveQuotesA, <NONE>, 'SheRemoveQuotesA', \ SheRemoveQuotesW, <NONE>, 'SheRemoveQuotesW', \ SheSetCurDrive, <NONE>, 'SheSetCurDrive', \ SheShortenPathA, <NONE>, 'SheShortenPathA', \ SheShortenPathW, <NONE>, 'SheShortenPathW', \ ShellAboutA, <.hwnd, .szApp, .szOtherStuff, .hIcon>, 'ShellAboutA', \ ShellAboutW, <.hwnd, .szApp, .szOtherStuff, .hIcon>, 'ShellAboutW', \ ShellExec_RunDLL, <NONE>, 'ShellExec_RunDLL', \ ShellExec_RunDLLA, <NONE>, 'ShellExec_RunDLLA', \ ShellExec_RunDLLW, <NONE>, 'ShellExec_RunDLLW', \ ShellExecuteA, <.hwnd, .lpOperation, .lpFile, .lpParameters, .lpDirectory, .nCmdShow>, 'ShellExecuteA', \ ShellExecuteEx, <.lpExecInfo>, 'ShellExecuteEx', \ ShellExecuteExA, <.lpExecInfo>, 'ShellExecuteExA', \ ShellExecuteExW, <.lpExecInfo>, 'ShellExecuteExW', \ ShellExecuteW, <.hwnd, .lpOperation, .lpFile, .lpParameters, .lpDirectory, .nCmdShow>, 'ShellExecuteW', \ ShellHookProc, <NONE>, 'ShellHookProc', \ ShellMessageBoxA, <NONE>, 'ShellMessageBoxA', \ ShellMessageBoxW, <NONE>, 'ShellMessageBoxW', \ Shell_GetCachedImageIndex, <NONE>, 'Shell_GetCachedImageIndex', \ Shell_GetImageLists, <NONE>, 'Shell_GetImageLists', \ Shell_MergeMenus, <NONE>, 'Shell_MergeMenus', \ Shell_NotifyIcon, <.dwMessage, .lpData>, 'Shell_NotifyIcon', \ Shell_NotifyIconA, <.dwMessage, .lpData>, 'Shell_NotifyIconA', \ Shell_NotifyIconW, <.dwMessage, .lpData>, 'Shell_NotifyIconW', \ SignalFileOpen, <NONE>, 'SignalFileOpen', \ StrChrA, <.lpStart, .wMatch>, 'StrChrA', \ StrChrIA, <.lpStart, .wMatch>, 'StrChrIA', \ StrChrIW, <.lpStart, .wMatch>, 'StrChrIW', \ StrChrW, <.lpStart, .wMatch>, 'StrChrW', \ StrCmpNA, <.lpStr1, .lpStr2, .nChar>, 'StrCmpNA', \ StrCmpNIA, <.lpStr1, .lpStr2, .nChar>, 'StrCmpNIA', \ StrCmpNIW, <.lpStr1, .lpStr2, .nChar>, 'StrCmpNIW', \ StrCmpNW, <.lpStr1, .lpStr2, .nChar>, 'StrCmpNW', \ StrCpyNA, <NONE>, 'StrCpyNA', \ StrCpyNW, <NONE>, 'StrCpyNW', \ StrNCmpA, <NONE>, 'StrNCmpA', \ StrNCmpIA, <NONE>, 'StrNCmpIA', \ StrNCmpIW, <NONE>, 'StrNCmpIW', \ StrNCmpW, <NONE>, 'StrNCmpW', \ StrNCpyA, <NONE>, 'StrNCpyA', \ StrNCpyW, <NONE>, 'StrNCpyW', \ StrRChrA, <.lpStart, .lpEnd, .wMatch>, 'StrRChrA', \ StrRChrIA, <.lpStart, .lpEnd, .wMatch>, 'StrRChrIA', \ StrRChrIW, <.lpStart, .lpEnd, .wMatch>, 'StrRChrIW', \ StrRChrW, <.lpStart, .lpEnd, .wMatch>, 'StrRChrW', \ StrRStrA, <NONE>, 'StrRStrA', \ StrRStrIA, <.lpSource, .lpLast, .lpSrch>, 'StrRStrIA', \ StrRStrIW, <.lpSource, .lpLast, .lpSrch>, 'StrRStrIW', \ StrRStrW, <NONE>, 'StrRStrW', \ StrStrA, <.lpFirst, .lpSrch>, 'StrStrA', \ StrStrIA, <.lpFirst, .lpSrch>, 'StrStrIA', \ StrStrIW, <.lpFirst, .lpSrch>, 'StrStrIW', \ StrStrW, <.lpFirst, .lpSrch>, 'StrStrW', \ WOWShellExecute, <NONE>, 'WOWShellExecute', \ Win32DeleteFile, <NONE>, 'Win32DeleteFile', \ WriteCabinetState, <NONE>, 'WriteCabinetState' |
Added freshlib/imports/Win32/sqleet.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: sqlite3.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto sqleet, \ sqliteAggregateContext, <.context, .nbytes>, 'sqlite3_aggregate_context', \ sqliteAggregateCount_OLD, <VOID>, 'sqlite3_aggregate_count', \ sqliteAutoExtension, <.ptrCallback>, 'sqlite3_auto_extension', \ sqliteBackupFinish, <.ptrBackup>, 'sqlite3_backup_finish', \ sqliteBackupInit, <.ptrDestDB, .ptrDestName, .ptrSourceDB, .ptrSourceName>, 'sqlite3_backup_init', \ sqliteBackupPageCount, <.ptrBackup>, 'sqlite3_backup_pagecount', \ sqliteBackupRemaining, <.ptrBackup>, 'sqlite3_backup_remaining', \ sqliteBackupStep, <.ptrBackup, .nPage>, 'sqlite3_backup_step', \ sqliteBindBlob, <.stmt, .index, .ptrData, .nbytes, .destructor>, 'sqlite3_bind_blob', \ sqliteBindDouble, <.stmt, .index, .value>, 'sqlite3_bind_double', \ sqliteBindInt, <.stmt, .index, .value>, 'sqlite3_bind_int', \ sqliteBindInt64, <.stmt, .index, .valueLo, .valueHi>, 'sqlite3_bind_int64', \ sqliteBindNull, <.stmt, .index>, 'sqlite3_bind_null', \ sqliteBindParameterCount, <.stmt>, 'sqlite3_bind_parameter_count', \ sqliteBindParameterIndex, <.stmt, .paramName>, 'sqlite3_bind_parameter_index', \ sqliteBindParameterName, <.stmt, .paramIndex>, 'sqlite3_bind_parameter_name', \ sqliteBindText, <.stmt, .index, .ptrText, .nbytes, .destructor>, 'sqlite3_bind_text', \ sqliteBindText16, <.stmt, .index, .ptrText, .nbytes, .destructor>, 'sqlite3_bind_text16', \ sqliteBindValue, <.stmt, .index, .ptrValue>, 'sqlite3_bind_value', \ sqliteBindZeroblob, <.stmt, .index, .size>, 'sqlite3_bind_zeroblob', \ sqliteBlobBytes, <.hBlob>, 'sqlite3_blob_bytes', \ sqliteBlobClose, <.hBlob>, 'sqlite3_blob_close', \ sqliteBlobOpen, <.ptrDB, .DBname, .Table, .Column, .iRow, .flags, .ptrVarBlob>, 'sqlite3_blob_open', \ sqliteBlobRead, <.hBlob, .ptrBuffer, .bytes, .iOffset>, 'sqlite3_blob_read', \ sqliteBlobWrite, <.hBlob, .ptrBuffer, .bytes, .iOffset>, 'sqlite3_blob_write', \ sqliteBusyHandler, <.ptrDB, .ptrProc, .lParam>, 'sqlite3_busy_handler', \ sqliteBusyTimeout, <.ptrDB, .time_ms>, 'sqlite3_busy_timeout', \ sqliteChanges, <.ptrDB>, 'sqlite3_changes', \ sqliteClearBindings, <.stmt>, 'sqlite3_clear_bindings', \ sqliteClose, <.ptrDatabase>, 'sqlite3_close', \ sqliteCollationNeeded, <.ptrDB, .lparam, .ptrCallback>, 'sqlite3_collation_needed', \ sqliteCollationNeeded16, <.ptrDB, .lparam, .ptrCallback>, 'sqlite3_collation_needed16', \ sqliteColumnBlob, <.stmt, .iCol>, 'sqlite3_column_blob', \ sqliteColumnBytes, <.stmt, .iCol>, 'sqlite3_column_bytes', \ sqliteColumnBytes16, <.stmt, .iCol>, 'sqlite3_column_bytes16', \ sqliteColumnCount, <.stmt>, 'sqlite3_column_count', \ sqliteColumnDatabaseName, <.stmt, .index>, 'sqlite3_column_database_name', \ sqliteColumnDatabaseName16, <.stmt, .index>, 'sqlite3_column_database_name16', \ sqliteColumnDeclType, <.stmt, .index>, 'sqlite3_column_decltype', \ sqliteColumnDeclType16, <.stmt, .index>, 'sqlite3_column_decltype16', \ sqliteColumnDouble, <.stmt, .iCol>, 'sqlite3_column_double', \ sqliteColumnInt, <.stmt, .iCol>, 'sqlite3_column_int', \ sqliteColumnInt64, <.stmt, .iCol>, 'sqlite3_column_int64', \ sqliteColumnName, <.stmt, .index>, 'sqlite3_column_name', \ sqliteColumnName16, <.stmt, .index>, 'sqlite3_column_name16', \ sqliteColumnOriginName, <.stmt, .index>, 'sqlite3_column_origin_name', \ sqliteColumnOriginName16, <.stmt, .index>, 'sqlite3_column_origin_name16', \ sqliteColumnTableName, <.stmt, .index>, 'sqlite3_column_table_name', \ sqliteColumnTableName16, <.stmt, .index>, 'sqlite3_column_table_name16', \ sqliteColumnText, <.stmt, .iCol>, 'sqlite3_column_text', \ sqliteColumnText16, <.stmt, .iCol>, 'sqlite3_column_text16', \ sqliteColumnType, <.stmt, .iCol>, 'sqlite3_column_type', \ sqliteColumnValue, <.stmt, .iCol>, 'sqlite3_column_value', \ sqliteCommitHook, <.ptrDB, .ptrHook, .lparam>, 'sqlite3_commit_hook', \ sqliteCompileOptionGet, <.N>, 'sqlite3_compileoption_get', \ sqliteCompileOptionUsed, <.ptrOptName>, 'sqlite3_compileoption_used', \ sqliteComplete, <.ptrSQL>, 'sqlite3_complete', \ sqliteComplete16, <.ptrSQL>, 'sqlite3_complete16', \ sqliteConfig, <.index, ...>, 'sqlite3_config', \ sqliteContextDBHandle, <.context>, 'sqlite3_context_db_handle', \ sqliteCreateCollation, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare>, 'sqlite3_create_collation', \ sqliteCreateCollation16, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare>, 'sqlite3_create_collation16', \ sqliteCreateCollation_v2, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare, .ptrDestroy>, 'sqlite3_create_collation_v2', \ sqliteCreateFunction, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal>, 'sqlite3_create_function', \ sqliteCreateFunction16, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal>, 'sqlite3_create_function16', \ sqliteCreateFunction_v2, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal, .procDestroy>, 'sqlite3_create_function_v2', \ sqliteCreateModule, <.ptrDB, .ptrModuleName, .ptrVTableModule, .lparam>, 'sqlite3_create_module', \ sqliteCreateModule_v2, <.ptrDB, .ptrModuleName, .ptrVTableModule, .lparam, .procDestroy>, 'sqlite3_create_module_v2', \ sqliteDBConfig, <.ptrDB, .index, ...>, 'sqlite3_db_config', \ sqliteDBHandle, <.stmt>, 'sqlite3_db_handle', \ sqliteDBMutex, <.ptrDB>, 'sqlite3_db_mutex', \ sqliteDBStatus, <.ptrDB, .index, .ptrRetCurrent, .ptrRetHighest, .flagReset>, 'sqlite3_db_status', \ sqliteDataCount, <.stmt>, 'sqlite3_data_count', \ sqliteDeclareVtab, <.ptrDB, .ptrSQL>, 'sqlite3_declare_vtab', \ sqliteEnableLoadExtension, <.ptrDB, .flagEnable>, 'sqlite3_enable_load_extension', \ sqliteEnableSharedCache, <.flagEnable>, 'sqlite3_enable_shared_cache', \ sqliteErrCode, <.ptrDB>, 'sqlite3_errcode', \ sqliteErrMsg, <.ptrDB>, 'sqlite3_errmsg', \ sqliteErrMsg16, <.ptrDB>, 'sqlite3_errmsg16', \ sqliteExec, <.ptrDB, .ptrSQL, .procCallback, .lparam, .ptrVarErrMsg>, 'sqlite3_exec', \ sqliteExpired, <VOID>, 'sqlite3_expired', \ sqliteExtendedErrCode, <.ptrDB>, 'sqlite3_extended_errcode', \ sqliteExtendedResultCodes, <.ptrDB, .flagEnable>, 'sqlite3_extended_result_codes', \ sqliteFileControl, <.ptrDB, .ptrDBName, .wparam, .lparam>, 'sqlite3_file_control', \ _sqliteFinalize, <.stmt>, 'sqlite3_finalize', \ sqliteFree, <.ptrmem>, 'sqlite3_free', \ sqliteFreeTable, <.ptrVarResult>, 'sqlite3_free_table', \ sqliteGetAutocommit, <.ptrDB>, 'sqlite3_get_autocommit', \ sqliteGetAuxdata, <.context, .N>, 'sqlite3_get_auxdata', \ sqliteGetTable, <.ptrDB, .ptrSQL, .ptrVarResult, .ptrVarRows, .ptrVarColumns, .ptrVarErrorMsg>, 'sqlite3_get_table', \ sqliteGlobalRecover_OLD, <VOID>, 'sqlite3_global_recover', \ sqliteInitialize, <VOID>, 'sqlite3_initialize', \ sqliteInterrupt, <.ptrDB>, 'sqlite3_interrupt', \ sqliteKey, <.ptrDB, .pKey, .pKeyLen>, 'sqlite3_key', \ sqliteKey_v2, <.ptrDB, .pDbName, .pKey, .pKeyLen>, 'sqlite3_key_v2', \ sqliteLastInsertRowID, <.ptrDB>, 'sqlite3_last_insert_rowid', \ sqliteLibVersion, <VOID>, 'sqlite3_libversion', \ sqliteLibversionNumber, <VOID>, 'sqlite3_libversion_number', \ sqliteLimit, <.ptrDB, .idLimit, .newVal>, 'sqlite3_limit', \ sqliteLoadExtension, <.ptrDB, .nameDLL, .entryProc, .ptrVarErrMsg>, 'sqlite3_load_extension', \ sqliteLog, <.iErrCode, .ptrFormat, ...>, 'sqlite3_log', \ sqliteMAlloc, <.size>, 'sqlite3_malloc', \ sqliteMemoryAlarm_OLD, <VOID>, 'sqlite3_memory_alarm', \ sqliteMemoryHighWater, <.flagReset>, 'sqlite3_memory_highwater', \ sqliteMemoryUsed, <VOID>, 'sqlite3_memory_used', \ sqliteMprintf, <.ptrString, ...>, 'sqlite3_mprintf', \ sqliteMutexAlloc, <.type>, 'sqlite3_mutex_alloc', \ sqliteMutexEnter, <.hMutex>, 'sqlite3_mutex_enter', \ sqliteMutexFree, <.hMutex>, 'sqlite3_mutex_free', \ sqliteMutexLeave, <.hMutex>, 'sqlite3_mutex_leave', \ sqliteMutexTry, <.hMutex>, 'sqlite3_mutex_try', \ sqliteNextStmt, <.ptrDB, .stmt>, 'sqlite3_next_stmt', \ sqliteOSEnd, <VOID>, 'sqlite3_os_end', \ sqliteOSInit, <VOID>, 'sqlite3_os_init', \ sqliteOpen, <.ptrFileName, .ptrVarDB>, 'sqlite3_open', \ sqliteOpen16, <.ptrFileName, .ptrVarDB>, 'sqlite3_open16', \ sqliteOpen_v2, <.ptrFileName, .ptrVarDB, .flags, .ptrVFSName>, 'sqlite3_open_v2', \ sqliteOverloadFunction, <.ptrDB, .ptrFuncName, .lparam>, 'sqlite3_overload_function', \ sqlitePrepare, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare', \ sqlitePrepare16, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare16', \ sqlitePrepare16_v2, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare16_v2', \ _sqlitePrepare_v2, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare_v2', \ sqliteProfile, <.ptrDB, .procProfiler, .lparam>, 'sqlite3_profile', \ sqliteProgressHandler, <.ptrDB, .N, .procProgress, .lparam>, 'sqlite3_progress_handler', \ sqliteRandomness, <.bytes, .buffer>, 'sqlite3_randomness', \ sqliteReAlloc, <.ptrmem, .newsize>, 'sqlite3_realloc', \ sqliteRekey, <.ptrDB, .pNewKey, .nKeyLen>, 'sqlite3_rekey', \ sqliteRekey_v2, <.ptrDB, .pDbName, .pNewKey, .nKeyLen>, 'sqlite3_rekey_v2', \ sqliteReleaseMemory, <.bytes>, 'sqlite3_release_memory', \ sqliteReset, <.stmt>, 'sqlite3_reset', \ sqliteResetAutoExtension, <VOID>, 'sqlite3_reset_auto_extension', \ sqliteResultBlob, <.context, .ptrdata, .size, .procDestroy>, 'sqlite3_result_blob', \ sqliteResultDouble, <.context, .double>, 'sqlite3_result_double', \ sqliteResultError, <.context, .ptrErrMsg, .size>, 'sqlite3_result_error', \ sqliteResultError16, <.context, .ptrErrMsg, .size>, 'sqlite3_result_error16', \ sqliteResultErrorCode, <.context, .errcode>, 'sqlite3_result_error_code', \ sqliteResultErrorNoMem, <.context>, 'sqlite3_result_error_nomem', \ sqliteResultErrorTooBig, <.context>, 'sqlite3_result_error_toobig', \ sqliteResultInt, <.context, .integer>, 'sqlite3_result_int', \ sqliteResultInt64, <.context, .int64Lo, .int64Hi>, 'sqlite3_result_int64', \ sqliteResultNULL, <.context>, 'sqlite3_result_null', \ sqliteResultText, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text', \ sqliteResultText16, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16', \ sqliteResultText16be, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16be', \ sqliteResultText16le, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16le', \ sqliteResultValue, <.context, .ptrValue>, 'sqlite3_result_value', \ sqliteResultZeroBlob, <.context, .size>, 'sqlite3_result_zeroblob', \ sqliteRollbackHook, <.ptrDB, .ptrHook, .lparam>, 'sqlite3_rollback_hook', \ sqliteRtreeGeometryCallback, <NONE>, 'sqlite3_rtree_geometry_callback', \ sqliteSQL, <.stmt>, 'sqlite3_sql', \ sqliteSetAuthorizer, <.ptrDB, .procAuthorizer, .lparam>, 'sqlite3_set_authorizer', \ sqliteSetAuxdata, <.context, .N, .ptrData, .procDestructor>, 'sqlite3_set_auxdata', \ sqliteShutdown, <VOID>, 'sqlite3_shutdown', \ sqliteSleep, <.sleep_ms>, 'sqlite3_sleep', \ sqliteSnprintf, <.size, .ptrBuffer, .ptrString, ...>, 'sqlite3_snprintf', \ sqliteSoftHeapLimit, <.N>, 'sqlite3_soft_heap_limit', \ sqliteSoftHeapLimit64, <.sizeLo, .sizeHi>, 'sqlite3_soft_heap_limit64', \ sqliteSourceID, <VOID>, 'sqlite3_sourceid', \ sqliteStatus, <.paramIndex, .ptrVarResult, .ptrVarHighwater, .flagReset>, 'sqlite3_status', \ sqliteStep, <.stmt>, 'sqlite3_step', \ sqliteStmtStatus, <.stmt, .paramIndex, .flagReset>, 'sqlite3_stmt_status', \ sqliteStrnicmp, <.ptrStr1, .ptrStr2, .size>, 'sqlite3_strnicmp', \ sqliteTableColumnMetadata, <.ptrDB, .ptrDBName, .ptrTableName, .ptrColumnName, .ptrVarDataType, .ptrVarCollSeq, .ptrVarNotNull, \ .ptrVarPrimaryKey, .ptrVarAutoInc>, 'sqlite3_table_column_metadata', \ sqliteTestControl, <.opCode, ...>, 'sqlite3_test_control', \ sqliteThreadCleanup, <VOID>, 'sqlite3_thread_cleanup', \ sqliteThreadsafe, <VOID>, 'sqlite3_threadsafe', \ sqliteTotalChanges, <.ptrDB>, 'sqlite3_total_changes', \ sqliteTrace, <.ptrDB, .procTrace, .lparam>, 'sqlite3_trace', \ sqliteTransferBindings, <VOID>, 'sqlite3_transfer_bindings', \ sqliteUpdateHook, <.ptrDB, .procUpdateHook, .lparam>, 'sqlite3_update_hook', \ sqliteUserData, <.context>, 'sqlite3_user_data', \ sqliteValueBlob, <.ptrValue>, 'sqlite3_value_blob', \ sqliteValueBytes, <.ptrValue>, 'sqlite3_value_bytes', \ sqliteValueBytes16, <.ptrValue>, 'sqlite3_value_bytes16', \ sqliteValueDouble, <.ptrValue>, 'sqlite3_value_double', \ sqliteValueInt, <.ptrValue>, 'sqlite3_value_int', \ sqliteValueInt64, <.ptrValue>, 'sqlite3_value_int64', \ sqliteValueNumericType, <.ptrValue>, 'sqlite3_value_numeric_type', \ sqliteValueText, <.ptrValue>, 'sqlite3_value_text', \ sqliteValueText16, <.ptrValue>, 'sqlite3_value_text16', \ sqliteValueText16be, <.ptrValue>, 'sqlite3_value_text16be', \ sqliteValueText16le, <.ptrValue>, 'sqlite3_value_text16le', \ sqliteValueType, <.ptrValue>, 'sqlite3_value_type', \ sqliteVersion, <VOID>, 'sqlite3_version', \ sqliteVfsFind, <.ptrVFSName>, 'sqlite3_vfs_find', \ sqliteVfsRegister, <.hVFS, .flagDefault>, 'sqlite3_vfs_register', \ sqliteVfsUnregister, <.hVFS>, 'sqlite3_vfs_unregister', \ sqliteVmprintf, <.ptrString, .va_list>, 'sqlite3_vmprintf', \ sqliteWalAutocheckpoint, <.ptrDB, .N>, 'sqlite3_wal_autocheckpoint', \ sqliteWalCheckpoint, <.ptrDB, .ptrDBName>, 'sqlite3_wal_checkpoint', \ sqliteWalCheckpoint_v2, <.ptrDB, .ptrDBName, .eMode, .pvarLog, .pvarCkpt>, 'sqlite3_wal_checkpoint_v2', \ sqliteWalHook, <.ptrDB, .procCommitHook, .lparam>, 'sqlite3_wal_hook', \ sqliteWin32_MbcsToUtf8, <NONE>, 'sqlite3_win32_mbcs_to_utf8' |
Added freshlib/imports/Win32/sqlite3.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: sqlite3.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto sqlite3, \ sqliteAggregateContext, <.context, .nbytes>, 'sqlite3_aggregate_context', \ sqliteAggregateCount_OLD, <VOID>, 'sqlite3_aggregate_count', \ sqliteAutoExtension, <.ptrCallback>, 'sqlite3_auto_extension', \ sqliteBackupFinish, <.ptrBackup>, 'sqlite3_backup_finish', \ sqliteBackupInit, <.ptrDestDB, .ptrDestName, .ptrSourceDB, .ptrSourceName>, 'sqlite3_backup_init', \ sqliteBackupPageCount, <.ptrBackup>, 'sqlite3_backup_pagecount', \ sqliteBackupRemaining, <.ptrBackup>, 'sqlite3_backup_remaining', \ sqliteBackupStep, <.ptrBackup, .nPage>, 'sqlite3_backup_step', \ sqliteBindBlob, <.stmt, .index, .ptrData, .nbytes, .destructor>, 'sqlite3_bind_blob', \ sqliteBindDouble, <.stmt, .index, .value>, 'sqlite3_bind_double', \ sqliteBindInt, <.stmt, .index, .value>, 'sqlite3_bind_int', \ sqliteBindInt64, <.stmt, .index, .valueLo, .valueHi>, 'sqlite3_bind_int64', \ sqliteBindNull, <.stmt, .index>, 'sqlite3_bind_null', \ sqliteBindParameterCount, <.stmt>, 'sqlite3_bind_parameter_count', \ sqliteBindParameterIndex, <.stmt, .paramName>, 'sqlite3_bind_parameter_index', \ sqliteBindParameterName, <.stmt, .paramIndex>, 'sqlite3_bind_parameter_name', \ sqliteBindText, <.stmt, .index, .ptrText, .nbytes, .destructor>, 'sqlite3_bind_text', \ sqliteBindText16, <.stmt, .index, .ptrText, .nbytes, .destructor>, 'sqlite3_bind_text16', \ sqliteBindValue, <.stmt, .index, .ptrValue>, 'sqlite3_bind_value', \ sqliteBindZeroblob, <.stmt, .index, .size>, 'sqlite3_bind_zeroblob', \ sqliteBlobBytes, <.hBlob>, 'sqlite3_blob_bytes', \ sqliteBlobClose, <.hBlob>, 'sqlite3_blob_close', \ sqliteBlobOpen, <.ptrDB, .DBname, .Table, .Column, .iRow, .flags, .ptrVarBlob>, 'sqlite3_blob_open', \ sqliteBlobRead, <.hBlob, .ptrBuffer, .bytes, .iOffset>, 'sqlite3_blob_read', \ sqliteBlobWrite, <.hBlob, .ptrBuffer, .bytes, .iOffset>, 'sqlite3_blob_write', \ sqliteBusyHandler, <.ptrDB, .ptrProc, .lParam>, 'sqlite3_busy_handler', \ sqliteBusyTimeout, <.ptrDB, .time_ms>, 'sqlite3_busy_timeout', \ sqliteChanges, <.ptrDB>, 'sqlite3_changes', \ sqliteClearBindings, <.stmt>, 'sqlite3_clear_bindings', \ sqliteClose, <.ptrDatabase>, 'sqlite3_close', \ sqliteCollationNeeded, <.ptrDB, .lparam, .ptrCallback>, 'sqlite3_collation_needed', \ sqliteCollationNeeded16, <.ptrDB, .lparam, .ptrCallback>, 'sqlite3_collation_needed16', \ sqliteColumnBlob, <.stmt, .iCol>, 'sqlite3_column_blob', \ sqliteColumnBytes, <.stmt, .iCol>, 'sqlite3_column_bytes', \ sqliteColumnBytes16, <.stmt, .iCol>, 'sqlite3_column_bytes16', \ sqliteColumnCount, <.stmt>, 'sqlite3_column_count', \ sqliteColumnDatabaseName, <.stmt, .index>, 'sqlite3_column_database_name', \ sqliteColumnDatabaseName16, <.stmt, .index>, 'sqlite3_column_database_name16', \ sqliteColumnDeclType, <.stmt, .index>, 'sqlite3_column_decltype', \ sqliteColumnDeclType16, <.stmt, .index>, 'sqlite3_column_decltype16', \ sqliteColumnDouble, <.stmt, .iCol>, 'sqlite3_column_double', \ sqliteColumnInt, <.stmt, .iCol>, 'sqlite3_column_int', \ sqliteColumnInt64, <.stmt, .iCol>, 'sqlite3_column_int64', \ sqliteColumnName, <.stmt, .index>, 'sqlite3_column_name', \ sqliteColumnName16, <.stmt, .index>, 'sqlite3_column_name16', \ sqliteColumnOriginName, <.stmt, .index>, 'sqlite3_column_origin_name', \ sqliteColumnOriginName16, <.stmt, .index>, 'sqlite3_column_origin_name16', \ sqliteColumnTableName, <.stmt, .index>, 'sqlite3_column_table_name', \ sqliteColumnTableName16, <.stmt, .index>, 'sqlite3_column_table_name16', \ sqliteColumnText, <.stmt, .iCol>, 'sqlite3_column_text', \ sqliteColumnText16, <.stmt, .iCol>, 'sqlite3_column_text16', \ sqliteColumnType, <.stmt, .iCol>, 'sqlite3_column_type', \ sqliteColumnValue, <.stmt, .iCol>, 'sqlite3_column_value', \ sqliteCommitHook, <.ptrDB, .ptrHook, .lparam>, 'sqlite3_commit_hook', \ sqliteCompileOptionGet, <.N>, 'sqlite3_compileoption_get', \ sqliteCompileOptionUsed, <.ptrOptName>, 'sqlite3_compileoption_used', \ sqliteComplete, <.ptrSQL>, 'sqlite3_complete', \ sqliteComplete16, <.ptrSQL>, 'sqlite3_complete16', \ sqliteConfig, <.index, ...>, 'sqlite3_config', \ sqliteContextDBHandle, <.context>, 'sqlite3_context_db_handle', \ sqliteCreateCollation, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare>, 'sqlite3_create_collation', \ sqliteCreateCollation16, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare>, 'sqlite3_create_collation16', \ sqliteCreateCollation_v2, <.ptrDB, .ptrName, .eTextRep, .lparam, .procCompare, .ptrDestroy>, 'sqlite3_create_collation_v2', \ sqliteCreateFunction, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal>, 'sqlite3_create_function', \ sqliteCreateFunction16, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal>, 'sqlite3_create_function16', \ sqliteCreateFunction_v2, <.ptrDB, .ptrFunctionName, .nArg, .eTextRep, .lparam, .procFunc, .procStep, .procFinal, .procDestroy>, 'sqlite3_create_function_v2', \ sqliteCreateModule, <.ptrDB, .ptrModuleName, .ptrVTableModule, .lparam>, 'sqlite3_create_module', \ sqliteCreateModule_v2, <.ptrDB, .ptrModuleName, .ptrVTableModule, .lparam, .procDestroy>, 'sqlite3_create_module_v2', \ sqliteDBConfig, <.ptrDB, .index, ...>, 'sqlite3_db_config', \ sqliteDBHandle, <.stmt>, 'sqlite3_db_handle', \ sqliteDBMutex, <.ptrDB>, 'sqlite3_db_mutex', \ sqliteDBStatus, <.ptrDB, .index, .ptrRetCurrent, .ptrRetHighest, .flagReset>, 'sqlite3_db_status', \ sqliteDataCount, <.stmt>, 'sqlite3_data_count', \ sqliteDeclareVtab, <.ptrDB, .ptrSQL>, 'sqlite3_declare_vtab', \ sqliteEnableLoadExtension, <.ptrDB, .flagEnable>, 'sqlite3_enable_load_extension', \ sqliteEnableSharedCache, <.flagEnable>, 'sqlite3_enable_shared_cache', \ sqliteErrCode, <.ptrDB>, 'sqlite3_errcode', \ sqliteErrMsg, <.ptrDB>, 'sqlite3_errmsg', \ sqliteErrMsg16, <.ptrDB>, 'sqlite3_errmsg16', \ sqliteErrStr, <.err_code>, 'sqlite3_errstr', \ sqliteExec, <.ptrDB, .ptrSQL, .procCallback, .lparam, .ptrVarErrMsg>, 'sqlite3_exec', \ sqliteExpired, <VOID>, 'sqlite3_expired', \ sqliteExtendedErrCode, <.ptrDB>, 'sqlite3_extended_errcode', \ sqliteExtendedResultCodes, <.ptrDB, .flagEnable>, 'sqlite3_extended_result_codes', \ sqliteFileControl, <.ptrDB, .ptrDBName, .wparam, .lparam>, 'sqlite3_file_control', \ sqliteFinalize, <.stmt>, 'sqlite3_finalize', \ sqliteFree, <.ptrmem>, 'sqlite3_free', \ sqliteFreeTable, <.ptrVarResult>, 'sqlite3_free_table', \ sqliteGetAutocommit, <.ptrDB>, 'sqlite3_get_autocommit', \ sqliteGetAuxdata, <.context, .N>, 'sqlite3_get_auxdata', \ sqliteGetTable, <.ptrDB, .ptrSQL, .ptrVarResult, .ptrVarRows, .ptrVarColumns, .ptrVarErrorMsg>, 'sqlite3_get_table', \ sqliteGlobalRecover_OLD, <VOID>, 'sqlite3_global_recover', \ sqliteInitialize, <VOID>, 'sqlite3_initialize', \ sqliteInterrupt, <.ptrDB>, 'sqlite3_interrupt', \ sqliteLastInsertRowID, <.ptrDB>, 'sqlite3_last_insert_rowid', \ sqliteLibVersion, <VOID>, 'sqlite3_libversion', \ sqliteLibversionNumber, <VOID>, 'sqlite3_libversion_number', \ sqliteLimit, <.ptrDB, .idLimit, .newVal>, 'sqlite3_limit', \ sqliteLoadExtension, <.ptrDB, .nameDLL, .entryProc, .ptrVarErrMsg>, 'sqlite3_load_extension', \ sqliteLog, <.iErrCode, .ptrFormat, ...>, 'sqlite3_log', \ sqliteMAlloc, <.size>, 'sqlite3_malloc', \ sqliteMemoryAlarm_OLD, <VOID>, 'sqlite3_memory_alarm', \ sqliteMemoryHighWater, <.flagReset>, 'sqlite3_memory_highwater', \ sqliteMemoryUsed, <VOID>, 'sqlite3_memory_used', \ sqliteMprintf, <.ptrString, ...>, 'sqlite3_mprintf', \ sqliteMutexAlloc, <.type>, 'sqlite3_mutex_alloc', \ sqliteMutexEnter, <.hMutex>, 'sqlite3_mutex_enter', \ sqliteMutexFree, <.hMutex>, 'sqlite3_mutex_free', \ sqliteMutexLeave, <.hMutex>, 'sqlite3_mutex_leave', \ sqliteMutexTry, <.hMutex>, 'sqlite3_mutex_try', \ sqliteNextStmt, <.ptrDB, .stmt>, 'sqlite3_next_stmt', \ sqliteOSEnd, <VOID>, 'sqlite3_os_end', \ sqliteOSInit, <VOID>, 'sqlite3_os_init', \ sqliteOpen, <.ptrFileName, .ptrVarDB>, 'sqlite3_open', \ sqliteOpen16, <.ptrFileName, .ptrVarDB>, 'sqlite3_open16', \ sqliteOpen_v2, <.ptrFileName, .ptrVarDB, .flags, .ptrVFSName>, 'sqlite3_open_v2', \ sqliteOverloadFunction, <.ptrDB, .ptrFuncName, .lparam>, 'sqlite3_overload_function', \ sqlitePrepare, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare', \ sqlitePrepare16, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare16', \ sqlitePrepare16_v2, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare16_v2', \ sqlitePrepare_v2, <.ptrDB, .ptrSQL, .lenSQL, .ptrVarStmt, .ptrVarNext>, 'sqlite3_prepare_v2', \ sqliteProfile, <.ptrDB, .procProfiler, .lparam>, 'sqlite3_profile', \ sqliteProgressHandler, <.ptrDB, .N, .procProgress, .lparam>, 'sqlite3_progress_handler', \ sqliteRandomness, <.bytes, .buffer>, 'sqlite3_randomness', \ sqliteReAlloc, <.ptrmem, .newsize>, 'sqlite3_realloc', \ sqliteReleaseMemory, <.bytes>, 'sqlite3_release_memory', \ sqliteReset, <.stmt>, 'sqlite3_reset', \ sqliteResetAutoExtension, <VOID>, 'sqlite3_reset_auto_extension', \ sqliteResultBlob, <.context, .ptrdata, .size, .procDestroy>, 'sqlite3_result_blob', \ sqliteResultDouble, <.context, .double>, 'sqlite3_result_double', \ sqliteResultError, <.context, .ptrErrMsg, .size>, 'sqlite3_result_error', \ sqliteResultError16, <.context, .ptrErrMsg, .size>, 'sqlite3_result_error16', \ sqliteResultErrorCode, <.context, .errcode>, 'sqlite3_result_error_code', \ sqliteResultErrorNoMem, <.context>, 'sqlite3_result_error_nomem', \ sqliteResultErrorTooBig, <.context>, 'sqlite3_result_error_toobig', \ sqliteResultInt, <.context, .integer>, 'sqlite3_result_int', \ sqliteResultInt64, <.context, .int64Lo, .int64Hi>, 'sqlite3_result_int64', \ sqliteResultNULL, <.context>, 'sqlite3_result_null', \ sqliteResultText, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text', \ sqliteResultText16, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16', \ sqliteResultText16be, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16be', \ sqliteResultText16le, <.context, .ptrText, .size, .procDestroy>, 'sqlite3_result_text16le', \ sqliteResultValue, <.context, .ptrValue>, 'sqlite3_result_value', \ sqliteResultZeroBlob, <.context, .size>, 'sqlite3_result_zeroblob', \ sqliteRollbackHook, <.ptrDB, .ptrHook, .lparam>, 'sqlite3_rollback_hook', \ sqliteRtreeGeometryCallback, <NONE>, 'sqlite3_rtree_geometry_callback', \ sqliteSQL, <.stmt>, 'sqlite3_sql', \ sqliteSetAuthorizer, <.ptrDB, .procAuthorizer, .lparam>, 'sqlite3_set_authorizer', \ sqliteSetAuxdata, <.context, .N, .ptrData, .procDestructor>, 'sqlite3_set_auxdata', \ sqliteShutdown, <VOID>, 'sqlite3_shutdown', \ sqliteSleep, <.sleep_ms>, 'sqlite3_sleep', \ sqliteSnprintf, <.size, .ptrBuffer, .ptrString, ...>, 'sqlite3_snprintf', \ sqliteSoftHeapLimit, <.N>, 'sqlite3_soft_heap_limit', \ sqliteSoftHeapLimit64, <.sizeLo, .sizeHi>, 'sqlite3_soft_heap_limit64', \ sqliteSourceID, <VOID>, 'sqlite3_sourceid', \ sqliteStatus, <.paramIndex, .ptrVarResult, .ptrVarHighwater, .flagReset>, 'sqlite3_status', \ sqliteStep, <.stmt>, 'sqlite3_step', \ sqliteStmtStatus, <.stmt, .paramIndex, .flagReset>, 'sqlite3_stmt_status', \ sqliteStrnicmp, <.ptrStr1, .ptrStr2, .size>, 'sqlite3_strnicmp', \ sqliteTableColumnMetadata, <.ptrDB, .ptrDBName, .ptrTableName, .ptrColumnName, .ptrVarDataType, .ptrVarCollSeq, .ptrVarNotNull, \ .ptrVarPrimaryKey, .ptrVarAutoInc>, 'sqlite3_table_column_metadata', \ sqliteTestControl, <.opCode, ...>, 'sqlite3_test_control', \ sqliteThreadCleanup, <VOID>, 'sqlite3_thread_cleanup', \ sqliteThreadsafe, <VOID>, 'sqlite3_threadsafe', \ sqliteTotalChanges, <.ptrDB>, 'sqlite3_total_changes', \ sqliteTrace, <.ptrDB, .procTrace, .lparam>, 'sqlite3_trace', \ sqliteTransferBindings, <VOID>, 'sqlite3_transfer_bindings', \ sqliteUpdateHook, <.ptrDB, .procUpdateHook, .lparam>, 'sqlite3_update_hook', \ sqliteUserData, <.context>, 'sqlite3_user_data', \ sqliteValueBlob, <.ptrValue>, 'sqlite3_value_blob', \ sqliteValueBytes, <.ptrValue>, 'sqlite3_value_bytes', \ sqliteValueBytes16, <.ptrValue>, 'sqlite3_value_bytes16', \ sqliteValueDouble, <.ptrValue>, 'sqlite3_value_double', \ sqliteValueInt, <.ptrValue>, 'sqlite3_value_int', \ sqliteValueInt64, <.ptrValue>, 'sqlite3_value_int64', \ sqliteValueNumericType, <.ptrValue>, 'sqlite3_value_numeric_type', \ sqliteValueText, <.ptrValue>, 'sqlite3_value_text', \ sqliteValueText16, <.ptrValue>, 'sqlite3_value_text16', \ sqliteValueText16be, <.ptrValue>, 'sqlite3_value_text16be', \ sqliteValueText16le, <.ptrValue>, 'sqlite3_value_text16le', \ sqliteValueType, <.ptrValue>, 'sqlite3_value_type', \ sqliteVersion, <VOID>, 'sqlite3_version', \ sqliteVfsFind, <.ptrVFSName>, 'sqlite3_vfs_find', \ sqliteVfsRegister, <.hVFS, .flagDefault>, 'sqlite3_vfs_register', \ sqliteVfsUnregister, <.hVFS>, 'sqlite3_vfs_unregister', \ sqliteVmprintf, <.ptrString, .va_list>, 'sqlite3_vmprintf', \ sqliteWalAutocheckpoint, <.ptrDB, .N>, 'sqlite3_wal_autocheckpoint', \ sqliteWalCheckpoint, <.ptrDB, .ptrDBName>, 'sqlite3_wal_checkpoint', \ sqliteWalCheckpoint_v2, <.ptrDB, .ptrDBName, .eMode, .pvarLog, .pvarCkpt>, 'sqlite3_wal_checkpoint_v2', \ sqliteWalHook, <.ptrDB, .procCommitHook, .lparam>, 'sqlite3_wal_hook', \ sqliteWin32_MbcsToUtf8, <NONE>, 'sqlite3_win32_mbcs_to_utf8' |
Added freshlib/imports/Win32/ucrtbase.inc.
> > > > > > | 1 2 3 4 5 6 | ; msvcrt.dll API calls (ASCII) import_proto ucrtbase, \ _aligned_free, <.p_mem>, '_aligned_free', \ _aligned_malloc, <.size, .alignment>, '_aligned_malloc', \ _aligned_realloc, <.p_mem, .size, .alignment>, '_aligned_realloc', \ _aligned_msize, <.p_mem, .alignment, .offset>, '_aligned_msize' |
Added freshlib/imports/Win32/user32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: user32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; user32.dll API calls import_proto user32, \ ActivateKeyboardLayout, <.HKL, .flags>, 'ActivateKeyboardLayout', \ AdjustWindowRect, <.lpRect, .dwStyle, .bMenu>, 'AdjustWindowRect', \ AdjustWindowRectEx, <.lpRect, .dwStyle, .bMenu, .dwExStyle>, 'AdjustWindowRectEx', \ AlignRects, <NONE>, 'AlignRects', \ AllowForegroundActivation, <NONE>, 'AllowForegroundActivation', \ AllowSetForegroundWindow, <.dwProcessId>, 'AllowSetForegroundWindow', \ AnimateWindow, <.hwnd, .dwTime, .dwFlags>, 'AnimateWindow', \ AnyPopup, <VOID>, 'AnyPopup', \ AppendMenuA, <.hMenu, .wFlags, .wIDNewItem, .lpNewItem>, 'AppendMenuA', \ AppendMenuW, <.hMenu, .wFlags, .wIDNewItem, .lpNewItem>, 'AppendMenuW', \ ArrangeIconicWindows, <.hwnd>, 'ArrangeIconicWindows', \ AttachThreadInput, <.idAttach, .idAttachTo, .fAttach>, 'AttachThreadInput', \ BeginDeferWindowPos, <.nNumWindows>, 'BeginDeferWindowPos', \ BeginPaint, <.hwnd, .lpPaint>, 'BeginPaint', \ BlockInput, <.fBlockIt>, 'BlockInput', \ BringWindowToTop, <.hwnd>, 'BringWindowToTop', \ BroadcastSystemMessage, <.dw, .pdw, .un, .wParam, .lParam>, 'BroadcastSystemMessage', \ BroadcastSystemMessageA, <.dw, .pdw, .un, .wParam, .lParam>, 'BroadcastSystemMessageA', \ BroadcastSystemMessageExA, <NONE>, 'BroadcastSystemMessageExA', \ BroadcastSystemMessageExW, <NONE>, 'BroadcastSystemMessageExW', \ BroadcastSystemMessageW, <.dw, .pdw, .un, .wParam, .lParam>, 'BroadcastSystemMessageW', \ BuildReasonArray, <NONE>, 'BuildReasonArray', \ CalcMenuBar, <NONE>, 'CalcMenuBar', \ CallMsgFilter, <.lpMsg, .ncode>, 'CallMsgFilter', \ CallMsgFilterA, <.lpMsg, .ncode>, 'CallMsgFilterA', \ CallMsgFilterW, <.lpMsg, .ncode>, 'CallMsgFilterW', \ CallNextHookEx, <.hHook, .ncode, .wParam, .lParam>, 'CallNextHookEx', \ CallWindowProcA, <.lpPrevWndFunc, .hWnd, .Msg, .wParam, .lParam>, 'CallWindowProcA', \ CallWindowProcW, <.lpPrevWndFunc, .hWnd, .Msg, .wParam, .lParam>, 'CallWindowProcW', \ CascadeChildWindows, <NONE>, 'CascadeChildWindows', \ CascadeWindows, <.hwndParent, .wHow, .lpRect, .cKids, .lpkids>, 'CascadeWindows', \ ChangeClipboardChain, <.hwnd, .hWndNext>, 'ChangeClipboardChain', \ ChangeDisplaySettingsA, <.lpDevMode, .dwFlags>, 'ChangeDisplaySettingsA', \ ChangeDisplaySettingsExA, <.lpszDeviceName, .lpDevMode, .hwnd, .dwflags, .lParam>, 'ChangeDisplaySettingsExA', \ ChangeDisplaySettingsExW, <.lpszDeviceName, .lpDevMode, .hwnd, .dwflags, .lParam>, 'ChangeDisplaySettingsExW', \ ChangeDisplaySettingsW, <.lpDevMode, .dwFlags>, 'ChangeDisplaySettingsW', \ ChangeMenuA, <.hMenu, .cmd, .lpszNewItem, .cmdInsert, .flags>, 'ChangeMenuA', \ ChangeMenuW, <.hMenu, .cmd, .lpszNewItem, .cmdInsert, .flags>, 'ChangeMenuW', \ CharLowerA, <.lpsz>, 'CharLowerA', \ CharLowerBuffA, <.lpsz, .cchLength>, 'CharLowerBuffA', \ CharLowerBuffW, <.lpsz, .cchLength>, 'CharLowerBuffW', \ CharLowerW, <.lpsz>, 'CharLowerW', \ CharNextA, <.lpsz>, 'CharNextA', \ CharNextExA, <.CodePage, .lpCurrentChar, .dwFlags>, 'CharNextExA', \ CharNextW, <.lpsz>, 'CharNextW', \ CharPrevA, <.lpszStart, .lpszCurrent>, 'CharPrevA', \ CharPrevExA, <.CodePage, .lpStart, .lpCurrentChar, .dwFlags>, 'CharPrevExA', \ CharPrevW, <.lpszStart, .lpszCurrent>, 'CharPrevW', \ CharToOemA, <.lpszSrc, .lpszDst>, 'CharToOemA', \ CharToOemBuffA, <.lpszSrc, .lpszDst, .cchDstLength>, 'CharToOemBuffA', \ CharToOemBuffW, <.lpszSrc, .lpszDst, .cchDstLength>, 'CharToOemBuffW', \ CharToOemW, <.lpszSrc, .lpszDst>, 'CharToOemW', \ CharUpperA, <.lpsz>, 'CharUpperA', \ CharUpperBuffA, <.lpsz, .cchLength>, 'CharUpperBuffA', \ CharUpperBuffW, <.lpsz, .cchLength>, 'CharUpperBuffW', \ CharUpperW, <.lpsz>, 'CharUpperW', \ CheckDlgButton, <.hDlg, .nIDButton, .uCheck>, 'CheckDlgButton', \ CheckMenuItem, <.hMenu, .wIDCheckItem, .wCheck>, 'CheckMenuItem', \ CheckMenuRadioItem, <.hMenu, .un1, .un2, .un3, .un4>, 'CheckMenuRadioItem', \ CheckRadioButton, <.hDlg, .nIDFirstButton, .nIDLastButton, .nIDCheckButton>, 'CheckRadioButton', \ ChildWindowFromPoint, <.hWnd, .xPoint, .yPoint>, 'ChildWindowFromPoint', \ ChildWindowFromPointEx, <.hWnd, .pt, .un>, 'ChildWindowFromPointEx', \ CliImmSetHotKey, <NONE>, 'CliImmSetHotKey', \ ClientThreadSetup, <NONE>, 'ClientThreadSetup', \ ClientToScreen, <.hwnd, .lpPoint>, 'ClientToScreen', \ ClipCursor, <.lpRect>, 'ClipCursor', \ CloseClipboard, <VOID>, 'CloseClipboard', \ CloseDesktop, <.hDesktop>, 'CloseDesktop', \ CloseWindow, <.hwnd>, 'CloseWindow', \ CloseWindowStation, <.hWinSta>, 'CloseWindowStation', \ CopyAcceleratorTableA, <.hAccelSrc, .lpAccelDst, .cAccelEntries>, 'CopyAcceleratorTableA', \ CopyAcceleratorTableW, <.hAccelSrc, .lpAccelDst, .cAccelEntries>, 'CopyAcceleratorTableW', \ CopyIcon, <.hIcon>, 'CopyIcon', \ CopyImage, <.handle, .un1, .n1, .n2, .un2>, 'CopyImage', \ CopyRect, <.lpDestRect, .lpSourceRect>, 'CopyRect', \ CountClipboardFormats, <VOID>, 'CountClipboardFormats', \ CreateAcceleratorTableA, <.lpaccl, .cEntries>, 'CreateAcceleratorTableA', \ CreateAcceleratorTableW, <.lpaccl, .cEntries>, 'CreateAcceleratorTableW', \ CreateCaret, <.hwnd, .hBitmap, .nWidth, .nHeight>, 'CreateCaret', \ CreateCursor, <.hInstance, .nXhotspot, .nYhotspot, .nWidth, .nHeight, .lpANDbitPlane, .lpXORbitPlane>, 'CreateCursor', \ CreateDesktopA, <.lpszDesktop, .lpszDevice, .pDevmode, .dwFlags, .dwDesiredAccess, .lpsa>, 'CreateDesktopA', \ CreateDesktopW, <.lpszDesktop, .lpszDevice, .pDevmode, .dwFlags, .dwDesiredAccess, .lpsa>, 'CreateDesktopW', \ CreateDialogIndirectParamA, <.hInstance, .lpTemplate, .hWndParent, .lpDialogFunc, .dwInitParam>, 'CreateDialogIndirectParamA', \ CreateDialogIndirectParamAorW, <NONE>, 'CreateDialogIndirectParamAorW', \ CreateDialogIndirectParamW, <.hInstance, .lpTemplate, .hWndParent, .lpDialogFunc, .dwInitParam>, 'CreateDialogIndirectParamW', \ CreateDialogParamA, <.hInstance, .lpName, .hWndParent, .lpDialogFunc, .lParamInit>, 'CreateDialogParamA', \ CreateDialogParamW, <.hInstance, .lpName, .hWndParent, .lpDialogFunc, .lParamInit>, 'CreateDialogParamW', \ CreateIcon, <.hInstance, .nWidth, .nHeight, .nPlanes, .nBitsPixel, .lpANDbits, .lpXORbits>, 'CreateIcon', \ CreateIconFromResource, <.presbits, .dwResSize, .fIcon, .dwVer>, 'CreateIconFromResource', \ CreateIconFromResourceEx, <.presbits, .dwResSize, .fIcon, .dwVer, .cxDesired, .cyDesired, .Flags>, 'CreateIconFromResourceEx', \ CreateIconIndirect, <.piconinfo>, 'CreateIconIndirect', \ CreateMDIWindowA, <.lpClassName, .lpWindowName, .dwStyle, .x, .y, .nWidth, .nHeight, .hWndParent, .hInstance, .lParam>, 'CreateMDIWindowA', \ CreateMDIWindowW, <.lpClassName, .lpWindowName, .dwStyle, .x, .y, .nWidth, .nHeight, .hWndParent, .hInstance, .lParam>, 'CreateMDIWindowW', \ CreateMenu, <VOID>, 'CreateMenu', \ CreatePopupMenu, <VOID>, 'CreatePopupMenu', \ CreateSystemThreads, <NONE>, 'CreateSystemThreads', \ CreateWindowExA, <.dwExStyle, .lpClassName, .lpWindowName, .dwStyle, .x, .y, .nWidth, .nHeight, .hWndParent, .hMenu, .hInstance, \ .lpParam>, 'CreateWindowExA', \ CreateWindowExW, <.dwExStyle, .lpClassName, .lpWindowName, .dwStyle, .x, .y, .nWidth, .nHeight, .hWndParent, .hMenu, .hInstance, \ .lpParam>, 'CreateWindowExW', \ CreateWindowStationA, <.lpwinsta, .dwReserved, .dwDesiredAccess, .lpsa>, 'CreateWindowStationA', \ CreateWindowStationW, <.lpwinsta, .dwReserved, .dwDesiredAccess, .lpsa>, 'CreateWindowStationW', \ CsrBroadcastSystemMessageExW, <NONE>, 'CsrBroadcastSystemMessageExW', \ CtxInitUser32, <NONE>, 'CtxInitUser32', \ DdeAbandonTransaction, <.idInst, .hConv, .idTransaction>, 'DdeAbandonTransaction', \ DdeAccessData, <.hData, .pcbDataSize>, 'DdeAccessData', \ DdeAddData, <.hData, .pSrc, .cb, .cbOff>, 'DdeAddData', \ DdeClientTransaction, <.pData, .cbData, .hConv, .hszItem, .wFmt, .wType, .dwTimeout, .pdwResult>, 'DdeClientTransaction', \ DdeCmpStringHandles, <.hsz1, .hsz2>, 'DdeCmpStringHandles', \ DdeConnect, <.idInst, .hszService, .hszTopic, .pCC>, 'DdeConnect', \ DdeConnectList, <.idInst, .hszService, .hszTopic, .hConvList, .pCC>, 'DdeConnectList', \ DdeCreateDataHandle, <.idInst, .pSrc, .cb, .cbOff, .hszItem, .wFmt, .afCmd>, 'DdeCreateDataHandle', \ DdeCreateStringHandleA, <.idInst, .psz, .iCodePage>, 'DdeCreateStringHandleA', \ DdeCreateStringHandleW, <.idInst, .psz, .iCodePage>, 'DdeCreateStringHandleW', \ DdeDisconnect, <.hConv>, 'DdeDisconnect', \ DdeDisconnectList, <.hConvList>, 'DdeDisconnectList', \ DdeEnableCallback, <.idInst, .hConv, .wCmd>, 'DdeEnableCallback', \ DdeFreeDataHandle, <.hData>, 'DdeFreeDataHandle', \ DdeFreeStringHandle, <.idInst, .hsz>, 'DdeFreeStringHandle', \ DdeGetData, <.hData, .pDst, .cbMax, .cbOff>, 'DdeGetData', \ DdeGetLastError, <.idInst>, 'DdeGetLastError', \ DdeGetQualityOfService, <NONE>, 'DdeGetQualityOfService', \ DdeImpersonateClient, <.hConv>, 'DdeImpersonateClient', \ DdeInitializeA, <.pidInst, .pfnCallback, .afCmd, .ulRes>, 'DdeInitializeA', \ DdeInitializeW, <.pidInst, .pfnCallback, .afCmd, .ulRes>, 'DdeInitializeW', \ DdeKeepStringHandle, <.idInst, .hsz>, 'DdeKeepStringHandle', \ DdeNameService, <.idInst, .hsz1, .hsz2, .afCmd>, 'DdeNameService', \ DdePostAdvise, <.idInst, .hszTopic, .hszItem>, 'DdePostAdvise', \ DdeQueryConvInfo, <.hConv, .idTransaction, .pConvInfo>, 'DdeQueryConvInfo', \ DdeQueryNextServer, <.hConvList, .hConvPrev>, 'DdeQueryNextServer', \ DdeQueryStringA, <.idInst, .hsz, .psz, .cchMax, .iCodePage>, 'DdeQueryStringA', \ DdeQueryStringW, <.idInst, .hsz, .psz, .cchMax, .iCodePage>, 'DdeQueryStringW', \ DdeReconnect, <.hConv>, 'DdeReconnect', \ DdeSetQualityOfService, <.hWndClient, .pqosNew, .pqosPrev>, 'DdeSetQualityOfService', \ DdeSetUserHandle, <.hConv, .id, .hUser>, 'DdeSetUserHandle', \ DdeUnaccessData, <.hData>, 'DdeUnaccessData', \ DdeUninitialize, <.idInst>, 'DdeUninitialize', \ DefDlgProcA, <.hDlg, .wMsg, .wParam, .lParam>, 'DefDlgProcA', \ DefDlgProcW, <.hDlg, .wMsg, .wParam, .lParam>, 'DefDlgProcW', \ DefFrameProcA, <.hwnd, .hWndMDIClient, .wMsg, .wParam, .lParam>, 'DefFrameProcA', \ DefFrameProcW, <.hwnd, .hWndMDIClient, .wMsg, .wParam, .lParam>, 'DefFrameProcW', \ DefMDIChildProcA, <.hwnd, .wMsg, .wParam, .lParam>, 'DefMDIChildProcA', \ DefMDIChildProcW, <.hwnd, .wMsg, .wParam, .lParam>, 'DefMDIChildProcW', \ DefRawInputProc, <NONE>, 'DefRawInputProc', \ DefWindowProcA, <.hwnd, .wMsg, .wParam, .lParam>, 'DefWindowProcA', \ DefWindowProcW, <.hwnd, .wMsg, .wParam, .lParam>, 'DefWindowProcW', \ DeferWindowPos, <.hWinPosInfo, .hwnd, .hWndInsertAfter, .x, .y, .cx, .cy, .wFlags>, 'DeferWindowPos', \ DeleteMenu, <.hMenu, .nPosition, .wFlags>, 'DeleteMenu', \ DeregisterShellHookWindow, <NONE>, 'DeregisterShellHookWindow', \ DestroyAcceleratorTable, <.haccel>, 'DestroyAcceleratorTable', \ DestroyCaret, <VOID>, 'DestroyCaret', \ DestroyCursor, <.hCursor>, 'DestroyCursor', \ DestroyIcon, <.hIcon>, 'DestroyIcon', \ DestroyMenu, <.hMenu>, 'DestroyMenu', \ DestroyReasons, <NONE>, 'DestroyReasons', \ DestroyWindow, <.hwnd>, 'DestroyWindow', \ DeviceEventWorker, <NONE>, 'DeviceEventWorker', \ DialogBoxIndirectParamA, <.hInstance, .hDialogTemplate, .hWndParent, .lpDialogFunc, .dwInitParam>, 'DialogBoxIndirectParamA', \ DialogBoxIndirectParamAorW, <NONE>, 'DialogBoxIndirectParamAorW', \ DialogBoxIndirectParamW, <.hInstance, .hDialogTemplate, .hWndParent, .lpDialogFunc, .dwInitParam>, 'DialogBoxIndirectParamW', \ DialogBoxParamA, <.hInstance, .lpTemplateName, .hWndParent, .lpDialogFunc, .dwInitParam>, 'DialogBoxParamA', \ DialogBoxParamW, <.hInstance, .lpTemplateName, .hWndParent, .lpDialogFunc, .dwInitParam>, 'DialogBoxParamW', \ DisableProcessWindowsGhosting, <NONE>, 'DisableProcessWindowsGhosting', \ DispatchMessageA, <.lpMsg>, 'DispatchMessageA', \ DispatchMessageW, <.lpMsg>, 'DispatchMessageW', \ DisplayExitWindowsWarnings, <NONE>, 'DisplayExitWindowsWarnings', \ DlgDirListA, <.hDlg, .lpPathSpec, .nIDListBox, .nIDStaticPath, .wFileType>, 'DlgDirListA', \ DlgDirListComboBoxA, <.hDlg, .lpPathSpec, .nIDComboBox, .nIDStaticPath, .wFileType>, 'DlgDirListComboBoxA', \ DlgDirListComboBoxW, <.hDlg, .lpPathSpec, .nIDComboBox, .nIDStaticPath, .wFileType>, 'DlgDirListComboBoxW', \ DlgDirListW, <.hDlg, .lpPathSpec, .nIDListBox, .nIDStaticPath, .wFileType>, 'DlgDirListW', \ DlgDirSelectComboBoxExA, <.hWndDlg, .lpszPath, .cbPath, .idComboBox>, 'DlgDirSelectComboBoxExA', \ DlgDirSelectComboBoxExW, <.hWndDlg, .lpszPath, .cbPath, .idComboBox>, 'DlgDirSelectComboBoxExW', \ DlgDirSelectExA, <.hWndDlg, .lpszPath, .cbPath, .idListBox>, 'DlgDirSelectExA', \ DlgDirSelectExW, <.hWndDlg, .lpszPath, .cbPath, .idListBox>, 'DlgDirSelectExW', \ DragDetect, <.hWnd, .pt>, 'DragDetect', \ DragObject, <.hWnd1, .hWnd2, .un, .dw, .hCursor>, 'DragObject', \ DrawAnimatedRects, <.hwnd, .idAni, .lprcFrom, .lprcTo>, 'DrawAnimatedRects', \ DrawCaption, <.hWnd, .hDC, .pcRect, .uDCFlags>, 'DrawCaption', \ DrawCaptionTempA, <NONE>, 'DrawCaptionTempA', \ DrawCaptionTempW, <NONE>, 'DrawCaptionTempW', \ DrawEdge, <.hdc, .qrc, .edge, .grfFlags>, 'DrawEdge', \ DrawFocusRect, <.hdc, .lpRect>, 'DrawFocusRect', \ DrawFrame, <NONE>, 'DrawFrame', \ DrawFrameControl, <.hDC, .lpRect, .uFrameType, .uFrameState>, 'DrawFrameControl', \ DrawIcon, <.hdc, .x, .y, .hIcon>, 'DrawIcon', \ DrawIconEx, <.hdc, .xLeft, .yTop, .hIcon, .cxWidth, .cyWidth, .istepIfAniCur, .hbrFlickerFreeDraw, .diFlags>, 'DrawIconEx', \ DrawMenuBar, <.hwnd>, 'DrawMenuBar', \ DrawMenuBarTemp, <NONE>, 'DrawMenuBarTemp', \ DrawStateA, <.hDC, .hBrush, .lpDrawStateProc, .lParam, .wParam, .n1, .n2, .n3, .n4, .un>, 'DrawStateA', \ DrawStateW, <.hDC, .hBrush, .lpDrawStateProc, .lParam, .wParam, .n1, .n2, .n3, .n4, .un>, 'DrawStateW', \ DrawTextA, <.hdc, .lpStr, .nCount, .lpRect, .wFormat>, 'DrawTextA', \ DrawTextExA, <.hDC, .lpsz, .n, .lpRect, .un, .lpDrawTextParams>, 'DrawTextExA', \ DrawTextExW, <.hDC, .lpsz, .n, .lpRect, .un, .lpDrawTextParams>, 'DrawTextExW', \ DrawTextW, <.hdc, .lpStr, .nCount, .lpRect, .wFormat>, 'DrawTextW', \ EditWndProc, <NONE>, 'EditWndProc', \ EmptyClipboard, <VOID>, 'EmptyClipboard', \ EnableMenuItem, <.hMenu, .wIDEnableItem, .wEnable>, 'EnableMenuItem', \ EnableScrollBar, <.hwnd, .wSBflags, .wArrows>, 'EnableScrollBar', \ EnableWindow, <.hwnd, .fBoolean>, 'EnableWindow', \ EndDeferWindowPos, <.hWinPosInfo>, 'EndDeferWindowPos', \ EndDialog, <.hDlg, .nResult>, 'EndDialog', \ _EndMenu, <VOID>, 'EndMenu', \ EndPaint, <.hwnd, .lpPaint>, 'EndPaint', \ EndTask, <NONE>, 'EndTask', \ EnterReaderModeHelper, <NONE>, 'EnterReaderModeHelper', \ EnumChildWindows, <.hWndParent, .lpEnumFunc, .lParam>, 'EnumChildWindows', \ EnumClipboardFormats, <.wFormat>, 'EnumClipboardFormats', \ EnumDesktopWindows, <.hDesktop, .lpfn, .lParam>, 'EnumDesktopWindows', \ EnumDesktopsA, <.hwinsta, .lpEnumFunc, .lParam>, 'EnumDesktopsA', \ EnumDesktopsW, <.hwinsta, .lpEnumFunc, .lParam>, 'EnumDesktopsW', \ EnumDisplayDevicesA, <.lpDevice, .iDevNum, .lpDisplayDevice, .dwFlags>, 'EnumDisplayDevicesA', \ EnumDisplayDevicesW, <.lpDevice, .iDevNum, .lpDisplayDevice, .dwFlags>, 'EnumDisplayDevicesW', \ EnumDisplayMonitors, <.hdc, .lprcClip, .lpfnEnum, .dwData>, 'EnumDisplayMonitors', \ EnumDisplaySettingsA, <.lpszDeviceName, .iModeNum, .lpDevMode>, 'EnumDisplaySettingsA', \ EnumDisplaySettingsExA, <.lpszDeviceName, .iModeNum, .lpDevMode, .dwFlags>, 'EnumDisplaySettingsExA', \ EnumDisplaySettingsExW, <.lpszDeviceName, .iModeNum, .lpDevMode, .dwFlags>, 'EnumDisplaySettingsExW', \ EnumDisplaySettingsW, <.lpszDeviceName, .iModeNum, .lpDevMode>, 'EnumDisplaySettingsW', \ EnumPropsA, <.hWnd, .lpEnumFunc>, 'EnumPropsA', \ EnumPropsExA, <.hWnd, .lpEnumFunc, .lParam>, 'EnumPropsExA', \ EnumPropsExW, <.hWnd, .lpEnumFunc, .lParam>, 'EnumPropsExW', \ EnumPropsW, <.hWnd, .lpEnumFunc>, 'EnumPropsW', \ EnumThreadWindows, <.dwThreadId, .lpfn, .lParam>, 'EnumThreadWindows', \ EnumWindowStationsA, <.lpEnumFunc, .lParam>, 'EnumWindowStationsA', \ EnumWindowStationsW, <.lpEnumFunc, .lParam>, 'EnumWindowStationsW', \ EnumWindows, <.lpEnumFunc, .lParam>, 'EnumWindows', \ EqualRect, <.lpRect1, .lpRect2>, 'EqualRect', \ ExcludeUpdateRgn, <.hdc, .hwnd>, 'ExcludeUpdateRgn', \ ExitWindowsEx, <.uFlags, .dwReserved>, 'ExitWindowsEx', \ FillRect, <.hdc, .lpRect, .hBrush>, 'FillRect', \ FindWindowA, <.lpClassName, .lpWindowName>, 'FindWindowA', \ FindWindowExA, <.hWnd1, .hWnd2, .lpsz1, .lpsz2>, 'FindWindowExA', \ FindWindowExW, <.hWnd1, .hWnd2, .lpsz1, .lpsz2>, 'FindWindowExW', \ FindWindowW, <.lpClassName, .lpWindowName>, 'FindWindowW', \ FlashWindow, <.hwnd, .bInvert>, 'FlashWindow', \ FlashWindowEx, <.pfwi>, 'FlashWindowEx', \ FrameRect, <.hdc, .lpRect, .hBrush>, 'FrameRect', \ FreeDDElParam, <.msg, .lParam>, 'FreeDDElParam', \ GetActiveWindow, <VOID>, 'GetActiveWindow', \ GetAltTabInfo, <.hwnd, .iItem, .pati, .pszItemText, .cchItemText>, 'GetAltTabInfo', \ GetAltTabInfoA, <.hwnd, .iItem, .pati, .pszItemText, .cchItemText>, 'GetAltTabInfoA', \ GetAltTabInfoW, <.hwnd, .iItem, .pati, .pszItemText, .cchItemText>, 'GetAltTabInfoW', \ GetAncestor, <.hwnd, .gaFlags>, 'GetAncestor', \ GetAppCompatFlags, <NONE>, 'GetAppCompatFlags', \ GetAppCompatFlags2, <NONE>, 'GetAppCompatFlags2', \ GetAsyncKeyState, <.vKey>, 'GetAsyncKeyState', \ GetCapture, <VOID>, 'GetCapture', \ GetCaretBlinkTime, <VOID>, 'GetCaretBlinkTime', \ GetCaretPos, <.lpPoint>, 'GetCaretPos', \ GetClassInfoA, <.hInstance, .lpClassName, .lpWndClass>, 'GetClassInfoA', \ GetClassInfoExA, <.hinstance, .lpcstr, .lpwndclassexa>, 'GetClassInfoExA', \ GetClassInfoExW, <.hinstance, .lpcstr, .lpwndclassexa>, 'GetClassInfoExW', \ GetClassInfoW, <.hInstance, .lpClassName, .lpWndClass>, 'GetClassInfoW', \ GetClassLongA, <.hwnd, .nIndex>, 'GetClassLongA', \ GetClassLongW, <.hwnd, .nIndex>, 'GetClassLongW', \ GetClassNameA, <.hwnd, .lpClassName, .nMaxCount>, 'GetClassNameA', \ GetClassNameW, <.hwnd, .lpClassName, .nMaxCount>, 'GetClassNameW', \ GetClassWord, <.hwnd, .nIndex>, 'GetClassWord', \ GetClientRect, <.hwnd, .lpRect>, 'GetClientRect', \ GetClipCursor, <.lprc>, 'GetClipCursor', \ GetClipboardData, <.wFormat>, 'GetClipboardData', \ GetClipboardFormatNameA, <.wFormat, .lpString, .nMaxCount>, 'GetClipboardFormatNameA', \ GetClipboardFormatNameW, <.wFormat, .lpString, .nMaxCount>, 'GetClipboardFormatNameW', \ GetClipboardOwner, <VOID>, 'GetClipboardOwner', \ GetClipboardSequenceNumber, <VOID>, 'GetClipboardSequenceNumber', \ GetClipboardViewer, <VOID>, 'GetClipboardViewer', \ GetComboBoxInfo, <.hwndCombo, .pcbi>, 'GetComboBoxInfo', \ GetCursor, <VOID>, 'GetCursor', \ GetCursorFrameInfo, <NONE>, 'GetCursorFrameInfo', \ GetCursorInfo, <.pci>, 'GetCursorInfo', \ GetCursorPos, <.lpPoint>, 'GetCursorPos', \ GetDC, <.hwnd>, 'GetDC', \ GetDCEx, <.hwnd, .hrgnclip, .fdwOptions>, 'GetDCEx', \ GetDesktopWindow, <VOID>, 'GetDesktopWindow', \ GetDialogBaseUnits, <VOID>, 'GetDialogBaseUnits', \ GetDlgCtrlID, <.hwnd>, 'GetDlgCtrlID', \ GetDlgItem, <.hDlg, .nIDDlgItem>, 'GetDlgItem', \ GetDlgItemInt, <.hDlg, .nIDDlgItem, .lpTranslated, .bSigned>, 'GetDlgItemInt', \ GetDlgItemTextA, <.hDlg, .nIDDlgItem, .lpString, .nMaxCount>, 'GetDlgItemTextA', \ GetDlgItemTextW, <.hDlg, .nIDDlgItem, .lpString, .nMaxCount>, 'GetDlgItemTextW', \ GetDoubleClickTime, <VOID>, 'GetDoubleClickTime', \ GetFocus, <VOID>, 'GetFocus', \ GetForegroundWindow, <VOID>, 'GetForegroundWindow', \ GetGUIThreadInfo, <.idThread, .pgui>, 'GetGUIThreadInfo', \ GetGuiResources, <.hProcess, .uiFlags>, 'GetGuiResources', \ GetIconInfo, <.hIcon, .piconinfo>, 'GetIconInfo', \ GetInputDesktop, <NONE>, 'GetInputDesktop', \ GetInputState, <VOID>, 'GetInputState', \ GetInternalWindowPos, <NONE>, 'GetInternalWindowPos', \ GetKBCodePage, <VOID>, 'GetKBCodePage', \ GetKeyNameTextA, <.lParam, .lpBuffer, .nSize>, 'GetKeyNameTextA', \ GetKeyNameTextW, <.lParam, .lpBuffer, .nSize>, 'GetKeyNameTextW', \ GetKeyState, <.nVirtKey>, 'GetKeyState', \ GetKeyboardLayout, <.dwLayout>, 'GetKeyboardLayout', \ GetKeyboardLayoutList, <.nBuff, .lpList>, 'GetKeyboardLayoutList', \ GetKeyboardLayoutNameA, <.pwszKLID>, 'GetKeyboardLayoutNameA', \ GetKeyboardLayoutNameW, <.pwszKLID>, 'GetKeyboardLayoutNameW', \ GetKeyboardState, <.pbKeyState>, 'GetKeyboardState', \ GetKeyboardType, <.nTypeFlag>, 'GetKeyboardType', \ GetLastActivePopup, <.hwndOwnder>, 'GetLastActivePopup', \ GetLastInputInfo, <.plii>, 'GetLastInputInfo', \ GetLayeredWindowAttributes, <NONE>, 'GetLayeredWindowAttributes', \ GetListBoxInfo, <.hwnd>, 'GetListBoxInfo', \ GetMenu, <.hwnd>, 'GetMenu', \ GetMenuBarInfo, <.hwnd, .idObject, .idItem, .pmbi>, 'GetMenuBarInfo', \ GetMenuCheckMarkDimensions, <VOID>, 'GetMenuCheckMarkDimensions', \ GetMenuContextHelpId, <.hMenu>, 'GetMenuContextHelpId', \ GetMenuDefaultItem, <.hMenu, .fByPos, .gmdiFlags>, 'GetMenuDefaultItem', \ GetMenuInfo, <.hmenu, .LPMENUINFO>, 'GetMenuInfo', \ GetMenuItemCount, <.hMenu>, 'GetMenuItemCount', \ GetMenuItemID, <.hMenu, .nPos>, 'GetMenuItemID', \ GetMenuItemInfoA, <.hMenu, .un, .fBoolean, .lpMenuItemInfo>, 'GetMenuItemInfoA', \ GetMenuItemInfoW, <.hMenu, .un, .fBoolean, .lpMenuItemInfo>, 'GetMenuItemInfoW', \ GetMenuItemRect, <.hWnd, .hMenu, .uItem, .lprcItem>, 'GetMenuItemRect', \ GetMenuState, <.hMenu, .wID, .wFlags>, 'GetMenuState', \ GetMenuStringA, <.hMenu, .wIDItem, .lpString, .nMaxCount, .wFlags>, 'GetMenuStringA', \ GetMenuStringW, <.hMenu, .wIDItem, .lpString, .nMaxCount, .wFlags>, 'GetMenuStringW', \ GetMessageA, <.lpMsg, .hwnd, .wMsgFilterMin, .wMsgFilterMax>, 'GetMessageA', \ GetMessageExtraInfo, <VOID>, 'GetMessageExtraInfo', \ GetMessagePos, <VOID>, 'GetMessagePos', \ GetMessageTime, <VOID>, 'GetMessageTime', \ GetMessageW, <.lpMsg, .hwnd, .wMsgFilterMin, .wMsgFilterMax>, 'GetMessageW', \ GetMonitorInfoA, <.hMonitor, .lpmi>, 'GetMonitorInfoA', \ GetMonitorInfoW, <.hMonitor, .lpmi>, 'GetMonitorInfoW', \ GetMouseMovePointsEx, <.cbSize, .lppt, .lpptBuf, .nBufPoints, .resolution>, 'GetMouseMovePointsEx', \ GetNextDlgGroupItem, <.hDlg, .hCtl, .bPrevious>, 'GetNextDlgGroupItem', \ GetNextDlgTabItem, <.hDlg, .hCtl, .bPrevious>, 'GetNextDlgTabItem', \ GetOpenClipboardWindow, <VOID>, 'GetOpenClipboardWindow', \ GetParent, <.hwnd>, 'GetParent', \ GetPriorityClipboardFormat, <.lpPriorityList, .nCount>, 'GetPriorityClipboardFormat', \ GetProcessDefaultLayout, <.pdwDefaultLayout>, 'GetProcessDefaultLayout', \ GetProcessWindowStation, <VOID>, 'GetProcessWindowStation', \ GetProgmanWindow, <NONE>, 'GetProgmanWindow', \ GetPropA, <.hwnd, .lpString>, 'GetPropA', \ GetPropW, <.hwnd, .lpString>, 'GetPropW', \ GetQueueStatus, <.fuFlags>, 'GetQueueStatus', \ GetRawInputBuffer, <NONE>, 'GetRawInputBuffer', \ GetRawInputData, <NONE>, 'GetRawInputData', \ GetRawInputDeviceInfoA, <NONE>, 'GetRawInputDeviceInfoA', \ GetRawInputDeviceInfoW, <NONE>, 'GetRawInputDeviceInfoW', \ GetRawInputDeviceList, <NONE>, 'GetRawInputDeviceList', \ GetReasonTitleFromReasonCode, <NONE>, 'GetReasonTitleFromReasonCode', \ GetRegisteredRawInputDevices, <NONE>, 'GetRegisteredRawInputDevices', \ GetScrollBarInfo, <.hwnd, .idObject, .psbi>, 'GetScrollBarInfo', \ GetScrollInfo, <.hWnd, .n, .lpScrollInfo>, 'GetScrollInfo', \ GetScrollPos, <.hwnd, .nBar>, 'GetScrollPos', \ GetScrollRange, <.hwnd, .nBar, .lpMinPos, .lpMaxPos>, 'GetScrollRange', \ GetShellWindow, <NONE>, 'GetShellWindow', \ GetSubMenu, <.hMenu, .nPos>, 'GetSubMenu', \ GetSysColor, <.nSysColor>, 'GetSysColor', \ GetSysColorBrush, <.nSysColor>, 'GetSysColorBrush', \ GetSystemMenu, <.hwnd, .fBoolean>, 'GetSystemMenu', \ GetSystemMetrics, <.nIndex>, 'GetSystemMetrics', \ GetTabbedTextExtentA, <.hdc, .lpString, .nCount, .nTabPositions, .lpnTabStopPositions>, 'GetTabbedTextExtentA', \ GetTabbedTextExtentW, <.hdc, .lpString, .nCount, .nTabPositions, .lpnTabStopPositions>, 'GetTabbedTextExtentW', \ GetTaskmanWindow, <NONE>, 'GetTaskmanWindow', \ GetThreadDesktop, <.dwThread>, 'GetThreadDesktop', \ GetTitleBarInfo, <.hwnd, .pti>, 'GetTitleBarInfo', \ GetTopWindow, <.hwnd>, 'GetTopWindow', \ GetUpdateRect, <.hwnd, .lpRect, .bErase>, 'GetUpdateRect', \ GetUpdateRgn, <.hwnd, .hRgn, .fErase>, 'GetUpdateRgn', \ GetUserObjectInformationA, <.hObj, .nIndex, .pvInfo, .nLength, .lpnLengthNeeded>, 'GetUserObjectInformationA', \ GetUserObjectInformationW, <.hObj, .nIndex, .pvInfo, .nLength, .lpnLengthNeeded>, 'GetUserObjectInformationW', \ GetUserObjectSecurity, <.hObj, .pSIRequested, .pSd, .nLength, .lpnLengthNeeded>, 'GetUserObjectSecurity', \ GetWinStationInfo, <NONE>, 'GetWinStationInfo', \ GetWindow, <.hwnd, .wCmd>, 'GetWindow', \ GetWindowContextHelpId, <.hWnd>, 'GetWindowContextHelpId', \ GetWindowDC, <.hwnd>, 'GetWindowDC', \ GetWindowInfo, <.hwnd, .pwi>, 'GetWindowInfo', \ GetWindowLongA, <.hwnd, .nIndex>, 'GetWindowLongA', \ GetWindowLongW, <.hwnd, .nIndex>, 'GetWindowLongW', \ GetWindowModuleFileName, <.hwnd, .pszFileName, .cchFileNameMax>, 'GetWindowModuleFileName', \ GetWindowModuleFileNameA, <.hwnd, .pszFileName, .cchFileNameMax>, 'GetWindowModuleFileNameA', \ GetWindowModuleFileNameW, <.hwnd, .pszFileName, .cchFileNameMax>, 'GetWindowModuleFileNameW', \ GetWindowPlacement, <.hwnd, .lpwndpl>, 'GetWindowPlacement', \ GetWindowRect, <.hwnd, .lpRect>, 'GetWindowRect', \ GetWindowRgn, <.hWnd, .hRgn>, 'GetWindowRgn', \ GetWindowRgnBox, <NONE>, 'GetWindowRgnBox', \ GetWindowTextA, <.hwnd, .lpString, .cch>, 'GetWindowTextA', \ GetWindowTextLengthA, <.hwnd>, 'GetWindowTextLengthA', \ GetWindowTextLengthW, <.hwnd>, 'GetWindowTextLengthW', \ GetWindowTextW, <.hwnd, .lpString, .cch>, 'GetWindowTextW', \ GetWindowThreadProcessId, <.hwnd, .lpdwProcessId>, 'GetWindowThreadProcessId', \ GetWindowWord, <.hwnd, .nIndex>, 'GetWindowWord', \ GrayStringA, <.hDC, .hBrush, .lpOutputFunc, .lpData, .nCount, .X, .Y, .nWidth, .nHeight>, 'GrayStringA', \ GrayStringW, <.hDC, .hBrush, .lpOutputFunc, .lpData, .nCount, .X, .Y, .nWidth, .nHeight>, 'GrayStringW', \ HideCaret, <.hwnd>, 'HideCaret', \ HiliteMenuItem, <.hwnd, .hMenu, .wIDHiliteItem, .wHilite>, 'HiliteMenuItem', \ IMPGetIMEA, <.hwnd, .LPIMEPROA>, 'IMPGetIMEA', \ IMPGetIMEW, <.hwnd, .LPIMEPROA>, 'IMPGetIMEW', \ IMPQueryIMEA, <.LPIMEPROA>, 'IMPQueryIMEA', \ IMPQueryIMEW, <.LPIMEPROA>, 'IMPQueryIMEW', \ IMPSetIMEA, <.hwnd, .LPIMEPROA>, 'IMPSetIMEA', \ IMPSetIMEW, <.hwnd, .LPIMEPROA>, 'IMPSetIMEW', \ ImpersonateDdeClientWindow, <.hWndClient, .hWndServer>, 'ImpersonateDdeClientWindow', \ InSendMessage, <VOID>, 'InSendMessage', \ InSendMessageEx, <.lpReserved>, 'InSendMessageEx', \ InflateRect, <.lpRect, .x, .y>, 'InflateRect', \ InitializeLpkHooks, <NONE>, 'InitializeLpkHooks', \ InitializeWin32EntryTable, <NONE>, 'InitializeWin32EntryTable', \ InsertMenuA, <.hMenu, .nPosition, .wFlags, .wIDNewItem, .lpNewItem>, 'InsertMenuA', \ InsertMenuItemA, <.hMenu, .uItem, .bool, .ByRef>, 'InsertMenuItemA', \ InsertMenuItemW, <.hMenu, .uItem, .bool, .ByRef>, 'InsertMenuItemW', \ InsertMenuW, <.hMenu, .nPosition, .wFlags, .wIDNewItem, .lpNewItem>, 'InsertMenuW', \ InternalGetWindowText, <NONE>, 'InternalGetWindowText', \ IntersectRect, <.lpDestRect, .lpSrc1Rect, .lpSrc2Rect>, 'IntersectRect', \ InvalidateRect, <.hwnd, .lpRect, .fBoolean>, 'InvalidateRect', \ InvalidateRgn, <.hwnd, .hRgn, .bErase>, 'InvalidateRgn', \ InvertRect, <.hdc, .lpRect>, 'InvertRect', \ IsCharAlphaA, <.cChar>, 'IsCharAlphaA', \ IsCharAlphaNumericA, <.cChar>, 'IsCharAlphaNumericA', \ IsCharAlphaNumericW, <.cChar>, 'IsCharAlphaNumericW', \ IsCharAlphaW, <.cChar>, 'IsCharAlphaW', \ IsCharLowerA, <.cChar>, 'IsCharLowerA', \ IsCharLowerW, <.cChar>, 'IsCharLowerW', \ IsCharUpperA, <.cChar>, 'IsCharUpperA', \ IsCharUpperW, <.cChar>, 'IsCharUpperW', \ IsChild, <.hWndParent, .hwnd>, 'IsChild', \ IsClipboardFormatAvailable, <.wFormat>, 'IsClipboardFormatAvailable', \ IsDialogMessage, <.hDlg, .lpMsg>, 'IsDialogMessage', \ IsDialogMessageA, <.hDlg, .lpMsg>, 'IsDialogMessageA', \ IsDialogMessageW, <.hDlg, .lpMsg>, 'IsDialogMessageW', \ IsDlgButtonChecked, <.hDlg, .nIDButton>, 'IsDlgButtonChecked', \ IsGUIThread, <NONE>, 'IsGUIThread', \ IsHungAppWindow, <NONE>, 'IsHungAppWindow', \ IsIconic, <.hwnd>, 'IsIconic', \ IsMenu, <.hMenu>, 'IsMenu', \ IsRectEmpty, <.lpRect>, 'IsRectEmpty', \ IsServerSideWindow, <NONE>, 'IsServerSideWindow', \ IsWinEventHookInstalled, <NONE>, 'IsWinEventHookInstalled', \ IsWindow, <.hwnd>, 'IsWindow', \ IsWindowEnabled, <.hwnd>, 'IsWindowEnabled', \ IsWindowInDestroy, <NONE>, 'IsWindowInDestroy', \ IsWindowUnicode, <.hwnd>, 'IsWindowUnicode', \ IsWindowVisible, <.hwnd>, 'IsWindowVisible', \ IsZoomed, <.hwnd>, 'IsZoomed', \ KillSystemTimer, <NONE>, 'KillSystemTimer', \ KillTimer, <.hwnd, .nIDEvent>, 'KillTimer', \ LoadAcceleratorsA, <.hInstance, .lpTableName>, 'LoadAcceleratorsA', \ LoadAcceleratorsW, <.hInstance, .lpTableName>, 'LoadAcceleratorsW', \ LoadBitmapA, <.hInstance, .lpBitmapName>, 'LoadBitmapA', \ LoadBitmapW, <.hInstance, .lpBitmapName>, 'LoadBitmapW', \ LoadCursorA, <.hInstance, .lpCursorName>, 'LoadCursorA', \ LoadCursorFromFileA, <.lpFileName>, 'LoadCursorFromFileA', \ LoadCursorFromFileW, <.lpFileName>, 'LoadCursorFromFileW', \ LoadCursorW, <.hInstance, .lpCursorName>, 'LoadCursorW', \ LoadIconA, <.hInstance, .lpIconName>, 'LoadIconA', \ LoadIconW, <.hInstance, .lpIconName>, 'LoadIconW', \ LoadImageA, <.hInst, .lpsz, .uType, .n1, .n2, .uFlags>, 'LoadImageA', \ LoadImageW, <.hInst, .lpsz, .uType, .n1, .n2, .uFlags>, 'LoadImageW', \ LoadKeyboardLayoutA, <.pwszKLID, .flags>, 'LoadKeyboardLayoutA', \ LoadKeyboardLayoutEx, <NONE>, 'LoadKeyboardLayoutEx', \ LoadKeyboardLayoutW, <.pwszKLID, .flags>, 'LoadKeyboardLayoutW', \ LoadLocalFonts, <NONE>, 'LoadLocalFonts', \ LoadMenuA, <.hInstance, .lpString>, 'LoadMenuA', \ LoadMenuIndirectA, <.lpMenuTemplate>, 'LoadMenuIndirectA', \ LoadMenuIndirectW, <.lpMenuTemplate>, 'LoadMenuIndirectW', \ LoadMenuW, <.hInstance, .lpString>, 'LoadMenuW', \ LoadRemoteFonts, <NONE>, 'LoadRemoteFonts', \ LoadStringA, <.hInstance, .wID, .lpBuffer, .nBufferMax>, 'LoadStringA', \ LoadStringW, <.hInstance, .wID, .lpBuffer, .nBufferMax>, 'LoadStringW', \ LockSetForegroundWindow, <.uLockCode>, 'LockSetForegroundWindow', \ LockWindowStation, <NONE>, 'LockWindowStation', \ LockWindowUpdate, <.hwndLock>, 'LockWindowUpdate', \ LockWorkStation, <VOID>, 'LockWorkStation', \ LookupIconIdFromDirectory, <.presbits, .fIcon>, 'LookupIconIdFromDirectory', \ LookupIconIdFromDirectoryEx, <.presbits, .fIcon, .cxDesired, .cyDesired, .Flags>, 'LookupIconIdFromDirectoryEx', \ MBToWCSEx, <NONE>, 'MBToWCSEx', \ MB_GetString, <NONE>, 'MB_GetString', \ MapDialogRect, <.hDlg, .lpRect>, 'MapDialogRect', \ MapVirtualKeyA, <.wCode, .wMapType>, 'MapVirtualKeyA', \ MapVirtualKeyExA, <.uCode, .uMapType, .dwhkl>, 'MapVirtualKeyExA', \ MapVirtualKeyExW, <.uCode, .uMapType, .dwhkl>, 'MapVirtualKeyExW', \ MapVirtualKeyW, <.wCode, .wMapType>, 'MapVirtualKeyW', \ MapWindowPoints, <.hwndFrom, .hwndTo, .lppt, .cPoints>, 'MapWindowPoints', \ MenuItemFromPoint, <.hWnd, .hMenu, .ptScreen>, 'MenuItemFromPoint', \ MenuWindowProcA, <NONE>, 'MenuWindowProcA', \ MenuWindowProcW, <NONE>, 'MenuWindowProcW', \ MessageBeep, <.wType>, 'MessageBeep', \ MessageBoxA, <.hwnd, .lpText, .lpCaption, .wType>, 'MessageBoxA', \ MessageBoxExA, <.hwnd, .lpText, .lpCaption, .wType, .wLanguageId>, 'MessageBoxExA', \ MessageBoxExW, <.hwnd, .lpText, .lpCaption, .wType, .wLanguageId>, 'MessageBoxExW', \ MessageBoxIndirectA, <.lpMsgBoxParams>, 'MessageBoxIndirectA', \ MessageBoxIndirectW, <.lpMsgBoxParams>, 'MessageBoxIndirectW', \ MessageBoxTimeoutA, <NONE>, 'MessageBoxTimeoutA', \ MessageBoxTimeoutW, <NONE>, 'MessageBoxTimeoutW', \ MessageBoxW, <.hwnd, .lpText, .lpCaption, .wType>, 'MessageBoxW', \ ModifyMenuA, <.hMenu, .nPosition, .wFlags, .wIDNewItem, .lpString>, 'ModifyMenuA', \ ModifyMenuW, <.hMenu, .nPosition, .wFlags, .wIDNewItem, .lpString>, 'ModifyMenuW', \ MonitorFromPoint, <.pt, .dwFlags>, 'MonitorFromPoint', \ MonitorFromRect, <.lprc, .dwFlags>, 'MonitorFromRect', \ MonitorFromWindow, <.hwnd, .dwFlags>, 'MonitorFromWindow', \ MoveWindow, <.hwnd, .x, .y, .nWidth, .nHeight, .fBoolean>, 'MoveWindow', \ MsgWaitForMultipleObjects, <.nCount, .pHandles, .fWaitAll, .dwMilliseconds, .dwWakeMask>, 'MsgWaitForMultipleObjects', \ MsgWaitForMultipleObjectsEx, <.nCount, .pHandles, .dwMilliseconds, .dwWakeMask, .dwFlags>, 'MsgWaitForMultipleObjectsEx', \ NotifyWinEvent, <.lEvent, .hwnd, .idObject, .idChild>, 'NotifyWinEvent', \ OemKeyScan, <.wOemChar>, 'OemKeyScan', \ OemToCharA, <.lpszSrc, .lpszDst>, 'OemToCharA', \ OemToCharBuffA, <.lpszSrc, .lpszDst, .cchDstLength>, 'OemToCharBuffA', \ OemToCharBuffW, <.lpszSrc, .lpszDst, .cchDstLength>, 'OemToCharBuffW', \ OemToCharW, <.lpszSrc, .lpszDst>, 'OemToCharW', \ OffsetRect, <.lpRect, .x, .y>, 'OffsetRect', \ OpenClipboard, <.hwnd>, 'OpenClipboard', \ OpenDesktopA, <.lpszDesktop, .dwFlags, .fInherit, .dwDesiredAccess>, 'OpenDesktopA', \ OpenDesktopW, <.lpszDesktop, .dwFlags, .fInherit, .dwDesiredAccess>, 'OpenDesktopW', \ OpenIcon, <.hwnd>, 'OpenIcon', \ OpenInputDesktop, <.dwFlags, .fInherit, .dwDesiredAccess>, 'OpenInputDesktop', \ OpenWindowStationA, <.lpszWinSta, .fInherit, .dwDesiredAccess>, 'OpenWindowStationA', \ OpenWindowStationW, <.lpszWinSta, .fInherit, .dwDesiredAccess>, 'OpenWindowStationW', \ PackDDElParam, <.msg, .uiLo, .uiHi>, 'PackDDElParam', \ PaintDesktop, <.hdc>, 'PaintDesktop', \ PaintMenuBar, <NONE>, 'PaintMenuBar', \ PeekMessageA, <.lpMsg, .hwnd, .wMsgFilterMin, .wMsgFilterMax, .wRemoveMsg>, 'PeekMessageA', \ PeekMessageW, <.lpMsg, .hwnd, .wMsgFilterMin, .wMsgFilterMax, .wRemoveMsg>, 'PeekMessageW', \ PostMessageA, <.hwnd, .wMsg, .wParam, .lParam>, 'PostMessageA', \ PostMessageW, <.hwnd, .wMsg, .wParam, .lParam>, 'PostMessageW', \ PostQuitMessage, <.nExitCode>, 'PostQuitMessage', \ PostThreadMessageA, <.idThread, .msg, .wParam, .lParam>, 'PostThreadMessageA', \ PostThreadMessageW, <.idThread, .msg, .wParam, .lParam>, 'PostThreadMessageW', \ PrintWindow, <.hWnd, .hdcBlt, .nFlags>, 'PrintWindow', \ PrivateExtractIconExA, <NONE>, 'PrivateExtractIconExA', \ PrivateExtractIconExW, <NONE>, 'PrivateExtractIconExW', \ PrivateExtractIconsA, <NONE>, 'PrivateExtractIconsA', \ PrivateExtractIconsW, <NONE>, 'PrivateExtractIconsW', \ PrivateSetDbgTag, <NONE>, 'PrivateSetDbgTag', \ PrivateSetRipFlags, <NONE>, 'PrivateSetRipFlags', \ PtInRect, <.lpRect, .x, .y>, 'PtInRect', \ QuerySendMessage, <NONE>, 'QuerySendMessage', \ QueryUserCounters, <NONE>, 'QueryUserCounters', \ RealChildWindowFromPoint, <.hwndParent, .ptParentClientCoords>, 'RealChildWindowFromPoint', \ RealGetWindowClass, <.hwnd, .pszType, .cchType>, 'RealGetWindowClass', \ RealGetWindowClassA, <.hwnd, .pszType, .cchType>, 'RealGetWindowClassA', \ RealGetWindowClassW, <.hwnd, .pszType, .cchType>, 'RealGetWindowClassW', \ ReasonCodeNeedsBugID, <NONE>, 'ReasonCodeNeedsBugID', \ ReasonCodeNeedsComment, <NONE>, 'ReasonCodeNeedsComment', \ RecordShutdownReason, <NONE>, 'RecordShutdownReason', \ RedrawWindow, <.hwnd, .lprcUpdate, .hrgnUpdate, .fuRedraw>, 'RedrawWindow', \ RegisterClassA, <.Class>, 'RegisterClassA', \ RegisterClassExA, <.pcWndClassEx>, 'RegisterClassExA', \ RegisterClassExW, <.pcWndClassEx>, 'RegisterClassExW', \ RegisterClassW, <.Class>, 'RegisterClassW', \ RegisterClipboardFormatA, <.lpString>, 'RegisterClipboardFormatA', \ RegisterClipboardFormatW, <.lpString>, 'RegisterClipboardFormatW', \ RegisterDeviceNotificationA, <.hRecipient, .NotificationFilter, .Flags>, 'RegisterDeviceNotificationA', \ RegisterDeviceNotificationW, <.hRecipient, .NotificationFilter, .Flags>, 'RegisterDeviceNotificationW', \ RegisterHotKey, <.hwnd, .id, .fsModifiers, .vk>, 'RegisterHotKey', \ RegisterLogonProcess, <NONE>, 'RegisterLogonProcess', \ RegisterMessagePumpHook, <NONE>, 'RegisterMessagePumpHook', \ RegisterRawInputDevices, <NONE>, 'RegisterRawInputDevices', \ RegisterServicesProcess, <NONE>, 'RegisterServicesProcess', \ RegisterShellHookWindow, <NONE>, 'RegisterShellHookWindow', \ RegisterSystemThread, <NONE>, 'RegisterSystemThread', \ RegisterTasklist, <NONE>, 'RegisterTasklist', \ RegisterUserApiHook, <NONE>, 'RegisterUserApiHook', \ RegisterWindowMessageA, <.lpString>, 'RegisterWindowMessageA', \ RegisterWindowMessageW, <.lpString>, 'RegisterWindowMessageW', \ ReleaseCapture, <VOID>, 'ReleaseCapture', \ ReleaseDC, <.hwnd, .hdc>, 'ReleaseDC', \ RemoveMenu, <.hMenu, .nPosition, .wFlags>, 'RemoveMenu', \ RemovePropA, <.hwnd, .lpString>, 'RemovePropA', \ RemovePropW, <.hwnd, .lpString>, 'RemovePropW', \ ReplyMessage, <.lReply>, 'ReplyMessage', \ ResolveDesktopForWOW, <NONE>, 'ResolveDesktopForWOW', \ ReuseDDElParam, <.lParam, .msgIn, .msgOut, .uiLo, .uiHi>, 'ReuseDDElParam', \ ScreenToClient, <.hwnd, .lpPoint>, 'ScreenToClient', \ ScrollChildren, <NONE>, 'ScrollChildren', \ ScrollDC, <.hdc, .dx, .dy, .lprcScroll, .lprcClip, .hrgnUpdate, .lprcUpdate>, 'ScrollDC', \ ScrollWindow, <.hWnd, .XAmount, .YAmount, .lpRect, .lpClipRect>, 'ScrollWindow', \ ScrollWindowEx, <.hwnd, .dx, .dy, .lprcScroll, .lprcClip, .hrgnUpdate, .lprcUpdate, .fuScroll>, 'ScrollWindowEx', \ SendDlgItemMessageA, <.hDlg, .nIDDlgItem, .wMsg, .wParam, .lParam>, 'SendDlgItemMessageA', \ SendDlgItemMessageW, <.hDlg, .nIDDlgItem, .wMsg, .wParam, .lParam>, 'SendDlgItemMessageW', \ SendIMEMessageExA, <.hwnd, .lparam>, 'SendIMEMessageExA', \ SendIMEMessageExW, <.hwnd, .lparam>, 'SendIMEMessageExW', \ SendInput, <.cInputs, .pInputs, .cbSize>, 'SendInput', \ SendMessageA, <.hwnd, .wMsg, .wParam, .lParam>, 'SendMessageA', \ SendMessageCallbackA, <.hwnd, .wMsg, .wParam, .lParam, .lpResultCallBack, .dwData>, 'SendMessageCallbackA', \ SendMessageCallbackW, <.hwnd, .wMsg, .wParam, .lParam, .lpResultCallBack, .dwData>, 'SendMessageCallbackW', \ SendMessageTimeoutA, <.hwnd, .msg, .wParam, .lParam, .fuFlags, .uTimeout, .lpdwResult>, 'SendMessageTimeoutA', \ SendMessageTimeoutW, <.hwnd, .msg, .wParam, .lParam, .fuFlags, .uTimeout, .lpdwResult>, 'SendMessageTimeoutW', \ SendMessageW, <.hwnd, .wMsg, .wParam, .lParam>, 'SendMessageW', \ SendNotifyMessageA, <.hwnd, .msg, .wParam, .lParam>, 'SendNotifyMessageA', \ SendNotifyMessageW, <.hwnd, .msg, .wParam, .lParam>, 'SendNotifyMessageW', \ SetActiveWindow, <.hwnd>, 'SetActiveWindow', \ SetCapture, <.hwnd>, 'SetCapture', \ SetCaretBlinkTime, <.wMSeconds>, 'SetCaretBlinkTime', \ SetCaretPos, <.x, .y>, 'SetCaretPos', \ SetClassLongA, <.hwnd, .nIndex, .dwNewLong>, 'SetClassLongA', \ SetClassLongW, <.hwnd, .nIndex, .dwNewLong>, 'SetClassLongW', \ SetClassWord, <.hwnd, .nIndex, .wNewWord>, 'SetClassWord', \ SetClipboardData, <.uFormat, .hMem>, 'SetClipboardData', \ SetClipboardViewer, <.hwnd>, 'SetClipboardViewer', \ SetConsoleReserveKeys, <NONE>, 'SetConsoleReserveKeys', \ SetCursor, <.hCursor>, 'SetCursor', \ SetCursorContents, <NONE>, 'SetCursorContents', \ SetCursorPos, <.x, .y>, 'SetCursorPos', \ SetDebugErrorLevel, <.dwLevel>, 'SetDebugErrorLevel', \ SetDeskWallpaper, <NONE>, 'SetDeskWallpaper', \ SetDlgItemInt, <.hDlg, .nIDDlgItem, .wValue, .bSigned>, 'SetDlgItemInt', \ SetDlgItemTextA, <.hDlg, .nIDDlgItem, .lpString>, 'SetDlgItemTextA', \ SetDlgItemTextW, <.hDlg, .nIDDlgItem, .lpString>, 'SetDlgItemTextW', \ SetDoubleClickTime, <.wCount>, 'SetDoubleClickTime', \ SetFocus, <.hwnd>, 'SetFocus', \ SetForegroundWindow, <.hwnd>, 'SetForegroundWindow', \ SetInternalWindowPos, <NONE>, 'SetInternalWindowPos', \ SetKeyboardState, <.lppbKeyState>, 'SetKeyboardState', \ SetLastErrorEx, <.dwErrCode, .dwType>, 'SetLastErrorEx', \ SetLayeredWindowAttributes, <.hwnd, .crKey, .bAlpha, .dwFlags>, 'SetLayeredWindowAttributes', \ SetLogonNotifyWindow, <NONE>, 'SetLogonNotifyWindow', \ SetMenu, <.hwnd, .hMenu>, 'SetMenu', \ SetMenuContextHelpId, <.hMenu, .dw>, 'SetMenuContextHelpId', \ SetMenuDefaultItem, <.hMenu, .uItem, .fByPos>, 'SetMenuDefaultItem', \ SetMenuInfo, <.hmenu, .LPCMENUINFO>, 'SetMenuInfo', \ SetMenuItemBitmaps, <.hMenu, .nPosition, .wFlags, .hBitmapUnchecked, .hBitmapChecked>, 'SetMenuItemBitmaps', \ SetMenuItemInfoA, <.hMenu, .un, .fBoolean, .lpcMenuItemInfo>, 'SetMenuItemInfoA', \ SetMenuItemInfoW, <.hMenu, .un, .fBoolean, .lpcMenuItemInfo>, 'SetMenuItemInfoW', \ SetMessageExtraInfo, <.lParam>, 'SetMessageExtraInfo', \ SetMessageQueue, <.cMessagesMax>, 'SetMessageQueue', \ SetParent, <.hWndChild, .hWndNewParent>, 'SetParent', \ SetProcessDefaultLayout, <.dwDefaultLayout>, 'SetProcessDefaultLayout', \ SetProcessWindowStation, <.hWinSta>, 'SetProcessWindowStation', \ SetProgmanWindow, <NONE>, 'SetProgmanWindow', \ SetPropA, <.hwnd, .lpString, .hData>, 'SetPropA', \ SetPropW, <.hwnd, .lpString, .hData>, 'SetPropW', \ SetRect, <.lpRect, .X1, .Y1, .X2, .Y2>, 'SetRect', \ SetRectEmpty, <.lpRect>, 'SetRectEmpty', \ SetScrollInfo, <.hWnd, .n, .lpcScrollInfo, .bool>, 'SetScrollInfo', \ SetScrollPos, <.hwnd, .nBar, .nPos, .fBoolean>, 'SetScrollPos', \ SetScrollRange, <.hwnd, .nBar, .nMinPos, .nMaxPos, .bRedraw>, 'SetScrollRange', \ SetShellWindow, <NONE>, 'SetShellWindow', \ SetShellWindowEx, <NONE>, 'SetShellWindowEx', \ SetSysColors, <.nChanges, .lpSysColor, .lpColorValues>, 'SetSysColors', \ SetSysColorsTemp, <NONE>, 'SetSysColorsTemp', \ SetSystemCursor, <.hcur, .id>, 'SetSystemCursor', \ SetSystemMenu, <NONE>, 'SetSystemMenu', \ SetSystemTimer, <NONE>, 'SetSystemTimer', \ SetTaskmanWindow, <NONE>, 'SetTaskmanWindow', \ SetThreadDesktop, <.hDesktop>, 'SetThreadDesktop', \ SetTimer, <.hWnd, .nIDEvent, .uElapse, .lpTimerFunc>, 'SetTimer', \ SetUserObjectInformationA, <.hObj, .nIndex, .pvInfo, .nLength>, 'SetUserObjectInformationA', \ SetUserObjectInformationW, <.hObj, .nIndex, .pvInfo, .nLength>, 'SetUserObjectInformationW', \ SetUserObjectSecurity, <.hObj, .pSIRequested, .pSd>, 'SetUserObjectSecurity', \ SetWinEventHook, <.eventMin, .eventMax, .hmodWinEventProc, .pfnWinEventProc, .idProcess, .idThread, .dwFlags>, 'SetWinEventHook', \ SetWindowContextHelpId, <.hWnd, .dw>, 'SetWindowContextHelpId', \ SetWindowLongA, <.hwnd, .nIndex, .dwNewLong>, 'SetWindowLongA', \ SetWindowLongW, <.hwnd, .nIndex, .dwNewLong>, 'SetWindowLongW', \ SetWindowPlacement, <.hwnd, .lpwndpl>, 'SetWindowPlacement', \ SetWindowPos, <.hwnd, .hWndInsertAfter, .x, .y, .cx, .cy, .wFlags>, 'SetWindowPos', \ SetWindowRgn, <.hWnd, .hRgn, .bRedraw>, 'SetWindowRgn', \ SetWindowStationUser, <NONE>, 'SetWindowStationUser', \ SetWindowTextA, <.hwnd, .lpString>, 'SetWindowTextA', \ SetWindowTextW, <.hwnd, .lpString>, 'SetWindowTextW', \ SetWindowWord, <.hwnd, .nIndex, .wNewWord>, 'SetWindowWord', \ SetWindowsHookA, <.nFilterType, .pfnFilterProc>, 'SetWindowsHookA', \ SetWindowsHookExA, <.idHook, .lpfn, .hmod, .dwThreadId>, 'SetWindowsHookExA', \ SetWindowsHookExW, <.idHook, .lpfn, .hmod, .dwThreadId>, 'SetWindowsHookExW', \ SetWindowsHookW, <.nFilterType, .pfnFilterProc>, 'SetWindowsHookW', \ ShowCaret, <.hwnd>, 'ShowCaret', \ ShowCursor, <.bShow>, 'ShowCursor', \ ShowOwnedPopups, <.hwnd, .fBoolean>, 'ShowOwnedPopups', \ ShowScrollBar, <.hwnd, .wBar, .bShow>, 'ShowScrollBar', \ ShowStartGlass, <NONE>, 'ShowStartGlass', \ ShowWindow, <.hwnd, .nCmdShow>, 'ShowWindow', \ ShowWindowAsync, <.hWnd, .nCmdShow>, 'ShowWindowAsync', \ SoftModalMessageBox, <NONE>, 'SoftModalMessageBox', \ SubtractRect, <.lprcDst, .lprcSrc1, .lprcSrc2>, 'SubtractRect', \ SwapMouseButton, <.bSwap>, 'SwapMouseButton', \ SwitchDesktop, <.hDesktop>, 'SwitchDesktop', \ SwitchToThisWindow, <NONE>, 'SwitchToThisWindow', \ SystemParametersInfoA, <.uAction, .uParam, .ByRef, .fuWinIni>, 'SystemParametersInfoA', \ SystemParametersInfoW, <.uAction, .uParam, .ByRef, .fuWinIni>, 'SystemParametersInfoW', \ TabbedTextOutA, <.hdc, .x, .y, .lpString, .nCount, .nTabPositions, .lpnTabStopPositions, .nTabOrigin>, 'TabbedTextOutA', \ TabbedTextOutW, <.hdc, .x, .y, .lpString, .nCount, .nTabPositions, .lpnTabStopPositions, .nTabOrigin>, 'TabbedTextOutW', \ TileChildWindows, <NONE>, 'TileChildWindows', \ TileWindows, <.hwndParent, .wHow, .lpRect, .cKids, .lpKids>, 'TileWindows', \ ToAscii, <.uVirtKey, .uScanCode, .lpbKeyState, .lpwTransKey, .fuState>, 'ToAscii', \ ToAsciiEx, <.uVirtKey, .uScanCode, .lpKeyState, .lpChar, .uFlags, .dwhkl>, 'ToAsciiEx', \ ToUnicode, <.wVirtKey, .wScanCode, .lpKeyState, .pwszBuff, .cchBuff, .wFlags>, 'ToUnicode', \ ToUnicodeEx, <.wVirtKey, .wScanCode, .lpKeyState, .pwszBuff, .cchBuff, .wFlags, .dwhkl>, 'ToUnicodeEx', \ TrackMouseEvent, <.lpEventTrack>, 'TrackMouseEvent', \ TrackPopupMenu, <.hMenu, .uFlags, .x, .y, .nReserved, .hwnd, .lprc>, 'TrackPopupMenu', \ TrackPopupMenuEx, <.hMenu, .un, .n1, .n2, .hWnd, .lpTPMParams>, 'TrackPopupMenuEx', \ TranslateAccelerator, <.hwnd, .hAccTable, .lpMsg>, 'TranslateAccelerator', \ TranslateAcceleratorA, <.hwnd, .hAccTable, .lpMsg>, 'TranslateAcceleratorA', \ TranslateAcceleratorW, <.hwnd, .hAccTable, .lpMsg>, 'TranslateAcceleratorW', \ TranslateMDISysAccel, <.hWndClient, .lpMsg>, 'TranslateMDISysAccel', \ TranslateMessage, <.lpMsg>, 'TranslateMessage', \ TranslateMessageEx, <NONE>, 'TranslateMessageEx', \ UnhookWinEvent, <.hWinEventHook>, 'UnhookWinEvent', \ UnhookWindowsHook, <.nCode, .pfnFilterProc>, 'UnhookWindowsHook', \ UnhookWindowsHookEx, <.hHook>, 'UnhookWindowsHookEx', \ UnionRect, <.lpDestRect, .lpSrc1Rect, .lpSrc2Rect>, 'UnionRect', \ UnloadKeyboardLayout, <.HKL>, 'UnloadKeyboardLayout', \ UnlockWindowStation, <NONE>, 'UnlockWindowStation', \ UnpackDDElParam, <.msg, .lParam, .puiLo, .puiHi>, 'UnpackDDElParam', \ UnregisterClassA, <.lpClassName, .hInstance>, 'UnregisterClassA', \ UnregisterClassW, <.lpClassName, .hInstance>, 'UnregisterClassW', \ UnregisterDeviceNotification, <.Handle>, 'UnregisterDeviceNotification', \ UnregisterHotKey, <.hwnd, .id>, 'UnregisterHotKey', \ UnregisterMessagePumpHook, <NONE>, 'UnregisterMessagePumpHook', \ UnregisterUserApiHook, <NONE>, 'UnregisterUserApiHook', \ UpdateLayeredWindow, <.hWnd, .hdcDst, .pptDst, .psize, .hdcSrc, .pptSrc, .crKey, .pblend, .dwFlags>, 'UpdateLayeredWindow', \ UpdatePerUserSystemParameters, <NONE>, 'UpdatePerUserSystemParameters', \ UpdateWindow, <.hwnd>, 'UpdateWindow', \ User32InitializeImmEntryTable, <NONE>, 'User32InitializeImmEntryTable', \ UserClientDllInitialize, <NONE>, 'UserClientDllInitialize', \ UserHandleGrantAccess, <.hUserHandle, .hJob, .bGrant>, 'UserHandleGrantAccess', \ UserLpkPSMTextOut, <NONE>, 'UserLpkPSMTextOut', \ UserLpkTabbedTextOut, <NONE>, 'UserLpkTabbedTextOut', \ UserRealizePalette, <NONE>, 'UserRealizePalette', \ UserRegisterWowHandlers, <NONE>, 'UserRegisterWowHandlers', \ VRipOutput, <NONE>, 'VRipOutput', \ VTagOutput, <NONE>, 'VTagOutput', \ ValidateRect, <.hwnd, .lpRect>, 'ValidateRect', \ ValidateRgn, <.hwnd, .hRgn>, 'ValidateRgn', \ VkKeyScanA, <.cChar>, 'VkKeyScanA', \ VkKeyScanExA, <.ch, .dwhkl>, 'VkKeyScanExA', \ VkKeyScanExW, <.ch, .dwhkl>, 'VkKeyScanExW', \ VkKeyScanW, <.cChar>, 'VkKeyScanW', \ WCSToMBEx, <NONE>, 'WCSToMBEx', \ WINNLSEnableIME, <.hwnd, .bool>, 'WINNLSEnableIME', \ WINNLSGetEnableStatus, <.hwnd>, 'WINNLSGetEnableStatus', \ WINNLSGetIMEHotkey, <.hwnd>, 'WINNLSGetIMEHotkey', \ WaitForInputIdle, <.hProcess, .dwMilliseconds>, 'WaitForInputIdle', \ WaitMessage, <VOID>, 'WaitMessage', \ Win32PoolAllocationStats, <NONE>, 'Win32PoolAllocationStats', \ WinHelpA, <.hwnd, .lpHelpFile, .wCommand, .dwData>, 'WinHelpA', \ WinHelpW, <.hwnd, .lpHelpFile, .wCommand, .dwData>, 'WinHelpW', \ WindowFromDC, <.hdc>, 'WindowFromDC', \ WindowFromPoint, <.xPoint, .yPoint>, 'WindowFromPoint', \ keybd_event, <.bVk, .bScan, .dwFlags, .dwExtraInfo>, 'keybd_event', \ mouse_event, <.dwFlags, .dx, .dy, .cButtons, .dwExtraInfo>, 'mouse_event', \ wsprintfA, <.lpOut, .lpFmt, .etc>, 'wsprintfA', \ wsprintfW, <.lpOut, .lpFmt, .etc>, 'wsprintfW', \ wvsprintfA, <NONE>, 'wvsprintfA', \ wvsprintfW, <NONE>, 'wvsprintfW' |
Added freshlib/imports/Win32/ws2_32.inc.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: ws2_32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto ws2_32, \ freeaddrinfo, <.pAddrInfo>, 'freeaddrinfo', \ FreeAddrInfoW, <.pAddrInfo>, 'FreeAddrInfoW', \ getaddrinfo, <.pNodeName, .pServiceName, .pHints, .ppResult>, 'getaddrinfo', \ GetAddrInfoW, <.pNodeName, .pServiceName, .pHints, .ppResult>, 'GetAddrInfoW' |
Added freshlib/imports/Win32/wsock32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: wsock32.dll API calls ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ import_proto wsock32, \ AcceptEx, <.sListenSocket, .sAcceptSocket, .lpOutputBuffer, .dwReceiveDataLength, .dwLocalAddressLength, .dwRemoteAddressLength, \ .lpdwBytesReceived, .lpOverlapped>, 'AcceptEx', \ EnumProtocolsA, <.lpiProtocols, .lpProtocolBuffer, .lpdwBufferLength>, 'EnumProtocolsA', \ EnumProtocolsW, <.lpiProtocols, .lpProtocolBuffer, .lpdwBufferLength>, 'EnumProtocolsW', \ GetAcceptExSockaddrs, <.lpOutputBuffer, .dwReceiveDataLength, .dwLocalAddressLength, .dwRemoteAddressLength, .LocalSockaddr, .LocalSockaddrLength, \ .RemoteSockaddr, .RemoteSockaddrLength>, 'GetAcceptExSockaddrs', \ GetAddressByNameA, <.dwNameSpace, .lpServiceType, .lpServiceName, .lpiProtocols, .dwResolution, .lpServiceAs, .lpCsaddrBuffer, \ .lpdwBufferLength, .lpAliasBuffer, .lpdwAliasBufferLength>, 'GetAddressByNameA', \ GetAddressByNameW, <.dwNameSpace, .lpServiceType, .lpServiceName, .lpiProtocols, .dwResolution, .lpServiceAs, .lpCsaddrBuffer, \ .lpdwBufferLength, .lpAliasBuffer, .lpdwAliasBufferLength>, 'GetAddressByNameW', \ GetNameByTypeA, <.lpServiceType, .lpServiceName, .dwNameLength>, 'GetNameByTypeA', \ GetNameByTypeW, <.lpServiceType, .lpServiceName, .dwNameLength>, 'GetNameByTypeW', \ GetServiceA, <.dwNameSpace, .lpGuid, .lpServiceName, .dwProperties, .lpBuffer, .lpdwBufferSize, .lpServiceAs>, 'GetServiceA', \ GetServiceW, <.dwNameSpace, .lpGuid, .lpServiceName, .dwProperties, .lpBuffer, .lpdwBufferSize, .lpServiceAs>, 'GetServiceW', \ GetTypeByNameA, <.lpServiceName, .lpServiceType>, 'GetTypeByNameA', \ GetTypeByNameW, <.lpServiceName, .lpServiceType>, 'GetTypeByNameW', \ MigrateWinsockConfiguration, <NONE>, 'MigrateWinsockConfiguration', \ NPLoadNameSpaces, <NONE>, 'NPLoadNameSpaces', \ SetServiceA, <.dwNameSpace, .dwOperation, .dwFlags, .lpServiceInfo, .lpServiceAsyncInfo, .lpdwStatusFlags>, 'SetServiceA', \ SetServiceW, <.dwNameSpace, .dwOperation, .dwFlags, .lpServiceInfo, .lpServiceAsyncInfo, .lpdwStatusFlags>, 'SetServiceW', \ TransmitFile, <.hSocket, .hFile, .nNumberOfBytesToWrite, .nNumberOfBytesPerSend, .lpOverlapped, .lpTransmitBuffers, .dwReserved, \ >, 'TransmitFile', \ WEP, <NONE>, 'WEP', \ WSAAsyncGetHostByAddr, <.hWnd, .wMsg, .addr, .lLen, .lType, .buf, .buflen>, 'WSAAsyncGetHostByAddr', \ WSAAsyncGetHostByName, <.hWnd, .wMsg, .name, .buf, .buflen>, 'WSAAsyncGetHostByName', \ WSAAsyncGetProtoByName, <.hWnd, .wMsg, .name, .buf, .buflen>, 'WSAAsyncGetProtoByName', \ WSAAsyncGetProtoByNumber, <.hWnd, .wMsg, .number, .buf, .buflen>, 'WSAAsyncGetProtoByNumber', \ WSAAsyncGetServByName, <.hWnd, .wMsg, .name, .proto, .buf, .buflen>, 'WSAAsyncGetServByName', \ WSAAsyncGetServByPort, <.hWnd, .wMsg, .port, .proto, .buf, .buflen>, 'WSAAsyncGetServByPort', \ WSAAsyncSelect, <.s, .hWnd, .wMsg, .lEvent>, 'WSAAsyncSelect', \ WSACancelAsyncRequest, <.hAsyncTaskHandle>, 'WSACancelAsyncRequest', \ WSACancelBlockingCall, <VOID>, 'WSACancelBlockingCall', \ WSACleanup, <VOID>, 'WSACleanup', \ WSAGetLastError, <VOID>, 'WSAGetLastError', \ WSAIsBlocking, <VOID>, 'WSAIsBlocking', \ WSARecvEx, <.s, .buf, .lLen, .flags>, 'WSARecvEx', \ WSASetBlockingHook, <.lpBlockFunc>, 'WSASetBlockingHook', \ WSASetLastError, <.iError>, 'WSASetLastError', \ WSAStartup, <.wVersionRequired, .lpWSAData>, 'WSAStartup', \ WSAUnhookBlockingHook, <VOID>, 'WSAUnhookBlockingHook', \ WSApSetPostRoutine, <NONE>, 'WSApSetPostRoutine', \ __WSAFDIsSet, <NONE>, '__WSAFDIsSet', \ accept, <.s, .addr, .addrlen>, 'accept', \ bind, <.s, .addr, .namelen>, 'bind', \ closesocket, <.s>, 'closesocket', \ connect, <.s, .name, .namelen>, 'connect', \ dn_expand, <NONE>, 'dn_expand', \ gethostbyaddr, <.addr, .len, .type>, 'gethostbyaddr', \ gethostbyname, <.name>, 'gethostbyname', \ gethostname, <.name, .namelen>, 'gethostname', \ getnetbyname, <NONE>, 'getnetbyname', \ getpeername, <.s, .name, .namelen>, 'getpeername', \ getprotobyname, <.name>, 'getprotobyname', \ getprotobynumber, <.number>, 'getprotobynumber', \ getservbyname, <.name, .proto>, 'getservbyname', \ getservbyport, <.port, .proto>, 'getservbyport', \ getsockname, <.s, .name, .namelen>, 'getsockname', \ getsockopt, <.s, .level, .optname, .optval, .optlen>, 'getsockopt', \ htonl, <.hostlong>, 'htonl', \ htons, <.hostshort>, 'htons', \ inet_addr, <.cp>, 'inet_addr', \ inet_network, <NONE>, 'inet_network', \ inet_ntoa, <.lIn>, 'inet_ntoa', \ ioctlsocket, <.s, .cmd, .argp>, 'ioctlsocket', \ listen, <.s, .backlog>, 'listen', \ ntohl, <.netlong>, 'ntohl', \ ntohs, <.netshort>, 'ntohs', \ rcmd, <NONE>, 'rcmd', \ recv, <.s, .buf, .lLen, .flags>, 'recv', \ recvfrom, <.s, .buf, .lLen, .flags, .from, .fromlen>, 'recvfrom', \ rexec, <NONE>, 'rexec', \ rresvport, <NONE>, 'rresvport', \ s_perror, <NONE>, 's_perror', \ select, <NONE>, 'select', \ send, <.s, .buf, .lLen, .flags>, 'send', \ sendto, <.s, .buf, .lLen, .flags, .to, .tolen>, 'sendto', \ sethostname, <NONE>, 'sethostname', \ setsockopt, <.s, .level, .optname, .optval, .optlen>, 'setsockopt', \ shutdown, <.s, .how>, 'shutdown', \ socket, <.af, .lType, .protocol>, 'socket' |
Deleted freshlib/imports/allimports.asm.
|
| < |
Added freshlib/macros/Dummy/_executable.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Executable file formating macro library. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ TargetOS equ Dummy macro @BinaryType type { if type eq GUI end if if type eq console end if if type eq DLL end if } macro @AllDataSection { IncludeAllGlobals } macro @AllDataEmbeded { @AllDataSection } macro __create_dll_list { DynamicLibList equ rept DynamicLibList@count i:1 \{ match any, DynamicLibList \\{ match name:filename, DynamicLibList\\#i \\\{ DynamicLibList equ DynamicLibList, name, \\\`name\\\#'.dll' \\\} \\} match , DynamicLibList \\{ match name:filename, DynamicLibList\\#i \\\{ DynamicLibList equ name, \\\`name\\\#'.dll' \\\} \\} \} } macro __create_all_imports { __create_dll_list match liblist, DynamicLibList \{ library liblist \} rept DynamicLibList@count i:1 \{ match name:filename, DynamicLibList\#i \\{ \\include filename \\} \} } macro @AllImportSection { ; section '.idata' import readable ; __create_all_imports } macro @AllImportEmbeded { ; data import ; __create_all_imports ; end data } |
Added freshlib/macros/Dummy/allmacros.inc.
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Combined include of all Win32 specific macros. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ |
Added freshlib/macros/KolibriOS/_executable.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Executable file formating macro library. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ TargetOS equ KolibriOS strTargetOS equ 'KolibriOS' STACK_SIZE = 1024 * 1024 ; 1MB hdrVersionConsole = 1 macro @BinaryType type, model { if type eq GUI | type eq console format binary as 'kex' use32 org $0 db 'MENUET01' dd hdrVersionConsole dd start dd __end_code dd __end_data + STACK_SIZE dd __end_data + STACK_SIZE dd __bufferArguments dd __bufferPath STDIO dd 0 STDDBG dd 0 end if addrHeapStart = __end_data + STACK_SIZE ; ??????????????????????? if type eq DLL format PE GUI 4.0 DLL entry EntryPoint section '.code' code readable writeable executable end if postpone \{ ?FAKE_COMPILE = 0 match =TRUE, ___FAKE_COMPILE \\{ ?FAKE_COMPILE = 1 \\} if ?FAKE_COMPILE = 0 __AllDataSection __AllImportSection end if \} } macro __AllDataSection { local begin align 4 begin = $ disp 3, 'Initialized data address: $', <begin, 16>, 13 IncludeIGlobals DispSize 'Initialized data', ($ - begin) align 4 begin = $ disp 3, 'Strings address: $', <$, 16>, 13 _IncludeAllStrings DispSize 'String data', ($ - begin) align 4 begin = $ disp 3, 'I18n strings data:', <begin, 16>, 13 __IncludeI18nStrings DispSize 'I18n strings data', ($ - begin) __end_code: if used bufferArguments bufferArguments rb 1024 __bufferArguments = bufferArguments else __bufferArguments = 0 end if if used bufferPath bufferPath rb 1024 __bufferPath = bufferPath else __bufferPath = 0 end if align 4 begin = $ disp 3, 'Uninitialized data address: $', <begin, 16>, 13 IncludeUGlobals DispSize 'Uninitialized data', ($ - begin) align 4 begin = $ disp 3, 'I18n strings placeholders: $', <begin, 16>, 13 IncludeI18nLabels DispSize 'I18n strings placeholders', ($ - begin) align 4096 __end_data: } macro __create_dll_list { DynamicLibList equ rept DynamicLibList@count i:1 \{ match any, DynamicLibList \\{ match name:filename, DynamicLibList\\#i \\\{ DynamicLibList equ DynamicLibList, name, \\\`name\\\#'.dll' \\\} \\} match , DynamicLibList \\{ match name:filename, DynamicLibList\\#i \\\{ DynamicLibList equ name, \\\`name\\\#'.dll' \\\} \\} \} } macro __create_all_imports { __create_dll_list match liblist, DynamicLibList \{ library liblist \} rept DynamicLibList@count i:1 \{ match name:filename, DynamicLibList\#i \\{ \\include filename \\} \} } macro __AllImportSection { ; section '.idata' import readable ; __create_all_imports } |
Added freshlib/macros/KolibriOS/allmacros.inc.
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Combined include of all Win32 specific macros. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ |
Changes to freshlib/macros/Linux/_elf.inc.
1 2 3 4 5 6 7 | macro Elf32_Sym name,value,size,bind,type,other,shndx { dd name+0 dd value+0 dd size+0 db (bind+0) shl 4 + (type+0) | > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: ELF format macros. Used internally in _import.inc ; ; Target OS: Linux (ELF) ; ; Dependencies: ; ; Notes: The form and use of these macros is somehow unsystematic. ;_________________________________________________________________________________________ macro Elf32_Sym name,value,size,bind,type,other,shndx { dd name+0 dd value+0 dd size+0 db (bind+0) shl 4 + (type+0) |
︙ | ︙ |
Added freshlib/macros/Linux/_executable.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Executable file formating macro library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ TargetOS equ Linux strTargetOS equ 'Linux' match =LINUX_INTERPRETER, LINUX_INTERPRETER { LINUX_INTERPRETER equ '/lib/ld-linux.so.2' } macro @BinaryType type, model { if type eq GUI format ELF executable 3 entry start end if if type eq console format ELF executable 3 entry start end if if type eq DLL format ELF dynamic 3 end if postpone \{ ?FAKE_COMPILE = 0 match =TRUE, ___FAKE_COMPILE \\{ ?FAKE_COMPILE = 1 \\} if ?FAKE_COMPILE = 0 ; global data if (model eq )|(model eq default) segment readable writeable end if if ~(model eq manual) \IncludeAllGlobals end if ; imports \__create_all_imports end if \} if __imported_count > 0 segment interpreter readable interpreter LINUX_INTERPRETER end if segment readable writeable executable } macro __create_all_imports { rept DynamicLibList@count i:1 \{ match name:filename, DynamicLibList\#i \\{ \\include filename \\} \} __ImportAll } |
Changes to freshlib/macros/Linux/_import.inc.
|
| > > > > > | | > > > > > > > > > > > < | > > | | > > > > > > > > > > > > > > > > > > > > > | | | > > > > > > > | > > > > > > | > > > > > > > > > > | | | | | < > > | | < | < < < > | > > > > > > > | > | > | > > > > > | < | | > > | > > > > | > > > > | | | > > > > > > | > > > > > | > > > > > > > > | | > > | | | | | > | | | | | | | | | > > | | | > > | > | > > > > > > | | | > > | | > > | > > > > > > | > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Macros for importing functions in Linux ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ options.AlignStackExt = 1 ; SYSTEM V ABI requires stack aligned on 16 bytes on calls. include '_elf.inc' macro interpreter [library] { db library,0 } macro __define_import_arguments [arg] { common local ..start if arg eq VOID .__info.argtype=1 else if arg eq NONE .__info.argtype = 0 else virtual at ebp+8 ..start: forward if ~arg eq ... arg dd ? else label .more_arguments dword end if common .__info.argsize = $ - ..start end virtual .__info.argtype = 2 end if end if } macro __InitImportMacros { common local libs, func libs equ 0 func equ 0 ; creates symbols list with needed libraries. macro import_proto library, [iname, arg, ename] \{ \common \local str, cnt, use rept 1 i:libs+1 \\{ libs equ i libs\\#i equ str:cnt:use:library \\} \forward \local fstr rept 1 i:func+1 \\{ func equ i func\\#i equ fstr:cnt:iname:ename:arg iname\\#.@here = 1 \\} \} macro __ImportAll \{ \common \local strtab,strsz,symtab,rel,relsz,hash,tcnt, size1, size2 tcnt = 0 if defined options.ShowImported & options.ShowImported disp 3, 'Imported functions: ', <__imported_count, 10>, $09 end if rept func i:1 \\{ match fstr:cnt:iname:ename:arg, func\\#i \\\{ if used iname tcnt = tcnt + 1 if defined options.ShowImported & options.ShowImported display 3, 'Imported "', \\\`iname, '" function.', $0a end if end if \\\} \\} __imported_count = tcnt; size1 = 0 if __imported_count>0 segment dynamic readable rept libs i:1 \\{ match str:cnt:use:library, libs\\#i \\\{ cnt = 0 if use > 0 dd DT_NEEDED, str-strtab end if \\\} \\} dd DT_STRTAB, strtab dd DT_STRSZ, strsz dd DT_SYMTAB, symtab dd DT_SYMENT, sizeof.Elf32_Sym dd DT_REL, rel dd DT_RELSZ, relsz dd DT_RELENT, sizeof.Elf32_Rel dd DT_HASH, hash dd DT_NULL, 0 size1 = $ - $$ zalign 4, ? segment readable writeable symtab: Elf32_Sym rept func i:1 \\{ match fstr:cnt:iname:ename:arg, func\\#i \\\{ if used iname Elf32_Sym fstr-strtab,0,0,STB_GLOBAL,STT_FUNC,0,0 cnt = cnt + 1 end if \\\} \\} rel: \local counter counter = 1 rept func i:1 \\{ match fstr:cnt:iname:ename:arg, func\\#i \\\{ if used iname Elf32_Rel iname, counter, R_386_32 counter = counter + 1 end if \\\} \\} relsz = $-rel hash: dd 1, counter dd 0 repeat counter if % = counter dd 0 else dd % end if end repeat strtab db 0 rept func i:1 \\{ match fstr:cnt:iname:ename:arg, func\\#i \\\{ if used iname fstr db ename, 0 end if \\\} \\} rept libs i:1 \\{ match str:cnt:use:library, libs\\#i \\\{ use = cnt if use > 0 str db library, 0 end if \\\} \\} strsz = $-strtab rept func i:1 \\{ match fstr:cnt:iname:ename:arg, func\\#i \\\{ if used iname iname dd 0 else iname = 0 end if __define_import_arguments arg \\\} \\} else size1 = $ - $$ end if size2 = $ - $$ DispSize 'ELF Import data1:', size1 DispSize 'ELF Import data2:', size2 \} } __InitImportMacros |
Added freshlib/macros/Linux/_linproc.inc.
> > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Linux variant or return instruction for thread procedures. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ macro thread_return { cret } |
Changes to freshlib/macros/Linux/allmacros.inc.
1 | include '_import.inc' | > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Combined include of all Linux specific macros. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ include '_import.inc' include '_export.inc' include '_linproc.inc' |
Added freshlib/macros/Win32/_com32.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Win32 COM interface macros. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ macro cominvk ptr_object, method, [arg] { common if ~ arg eq reverse pushx arg common end if if ~defined ptr_object#.com.object ERROR! `ptr_object is not a com object. end if mov eax, [ptr_object] push eax mov eax,[eax] call [eax+ptr_object#.#method] } macro comcall handle, interface, proc,[arg] { common if ~ arg eq reverse pushx arg common end if if ~defined interface#.com.interface ERROR! `interface is not a com interface. end if if handle eqtype eax | handle eqtype 0 ; ??? local ..handle label ..handle at handle push handle mov eax, [..handle] else mov eax, handle push eax mov eax, [eax] end if call [eax+interface#.#proc] } macro com_interface name, [proc] { common struc name \{ match , @struct \\{ define field@struct .,name, \\} match no, @struct \\{ . dd ? virtual at 0 forward .#proc dd ? common .\\#\\.com.object = name#.com.interface end virtual \\} \} virtual at 0 forward name#.#proc dd ? common name#.com.interface = $ shr 2 end virtual } struc GUID def { if used . label . dword match d1-d2-d3-d4-d5, def \{ .Data1 dd $\#d1 .Data2 dw $\#d2 .Data3 dw $\#d3 .Data4 db $\#d4 shr 8, $\#d4 and 0FFh .Data5 db $\#d5 shr 40, $\#d5 shr 32 and 0FFh, $\#d5 shr 24 and 0FFh db $\#d5 shr 16 and 0FFh, $\#d5 shr 8 and 0FFh, $\#d5 and 0FFh \} end if } ; ends with two word zero terminators. struc BSTR [txt] { common local ..len .length dd ..len . du txt ..len = $ - . dw 0, 0 } |
Changes to freshlib/macros/Win32/_exceptions.inc.
1 2 3 4 5 6 7 | ..TryLevel = 0 macro beginTry { common ptrExceptionContext equ esp+$0c ptrExceptionRecord equ esp+$04 | > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Win32 exception handling macros. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ..TryLevel = 0 macro beginTry { common ptrExceptionContext equ esp+$0c ptrExceptionRecord equ esp+$04 |
︙ | ︙ |
Added freshlib/macros/Win32/_executable.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Executable file formating macro library. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ TargetOS equ Win32 strTargetOS equ 'Win32' ; model can be "compact", "default", "manual" macro @BinaryType type, model { if type eq GUI format PE GUI 4.0 entry start end if if type eq console format PE Console 4.0 entry start end if if type eq DLL format PE GUI 4.0 DLL entry EntryPoint end if postpone \{ ?FAKE_COMPILE = 0 match =TRUE, ___FAKE_COMPILE \\{ ?FAKE_COMPILE = 1 \\} if ?FAKE_COMPILE = 0 ; imports if model eq compact data import else if (model eq )|(model eq default) section '.idata' import readable else end if end if if ~(model eq manual) \__create_all_imports end if if model eq compact end data end if ; global data if (model eq )|(model eq default) section '.data' data readable writeable end if if ~(model eq manual) \IncludeAllGlobals end if if type eq DLL section '.reloc' fixups data readable discardable DispSize "fixups section", $-$$ if $=$$ dd 0,8 ; if there are no fixups, generate dummy entry end if end if end if \} section '.code' code readable writeable executable } macro __create_dll_list { DynamicLibList equ rept DynamicLibList@count i:1 \{ match any, DynamicLibList \\{ match name:filename, DynamicLibList\\#i \\\{ DynamicLibList equ DynamicLibList, name, \\\`name\\\#'.dll' \\\} \\} match , DynamicLibList \\{ match name:filename, DynamicLibList\\#i \\\{ DynamicLibList equ name, \\\`name\\\#'.dll' \\\} \\} \} } macro __create_all_imports { __create_dll_list match liblist, DynamicLibList \{ library liblist \} rept DynamicLibList@count i:1 \{ match name:filename, DynamicLibList\#i \\{ \\include filename \\} \} } ;macro @AllImportSection { ; section '.idata' import readable ; __create_all_imports ;} ;macro @AllImportEmbeded { ; data import ; __create_all_imports ; end data ;} |
Changes to freshlib/macros/Win32/_export.inc.
1 2 3 4 5 | ; macroinstruction for making export section macro export dllname,[label,string] ; strings must be sorted { common | > > > > > > > > > > > > > | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Win32 export sections creating macros. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; macroinstruction for making export section macro export dllname,[label,string] ; strings must be sorted { common local mod,addresses,names,ordinal,count count = 0 forward count = count+1 common dd 0,0,0,RVA mod,1 dd count,count,RVA addresses,RVA names,RVA ordinal addresses: forward dd RVA label common names: forward local name dd RVA name common ordinal: count = 0 forward dw count count = count+1 common mod db dllname,0 forward name db string,0 } |
Changes to freshlib/macros/Win32/_import.inc.
1 2 3 4 | ; macroinstruction for making import section macro library [name,string] { forward local _label | > > > > > > > > > > > > > > > > > > > | | < | | | | | | > > > > > > | | < < < < < < < < < < | | > > | | | | | | | | | < < | | < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Win32 import macros. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: Only import_proto should be used in portable applications. Here we have some ; old macros that needs revision or even removing. ;_________________________________________________________________________________________ options.AlignStackExt = 0 ; Windows needs regular stack alignment on 4. ; macroinstruction for making import section macro library [name,string] { forward local _label if name#.needed dd 0,0,0,RVA _label,RVA name end if common dd 0,0,0,0,0 forward if name#.needed _label db string,0 end if } macro import name, [lbl, string] { common name: forward if used lbl local _label lbl dd RVA _label end if common if $ > name name#.needed = TRUE dd 0 else name#.needed = FALSE end if forward if used lbl _label dw 0 db string,0 end if } macro define_import_arguments [argument] { common virtual at ebp+8 forward if ~ argument eq ... argument dd ? else label .more… dword end if common end virtual } macro import_proto name, [lbl, arg, string] { common name: forward local ..lbl, ..used @label equ lbl ..used = 0 if used lbl lbl dd RVA ..lbl ..used = 1 else label lbl dword at 0 end if if ~(arg eq NONE) if arg eq VOID .__info.argtype = 1 else define_import_arguments arg .__info.argtype = 2 end if else .__info.argtype = 0 end if common if $ > name name#.needed = TRUE dd 0 else name#.needed = FALSE end if forward if ..used ..lbl dw 0 db string,0 end if } |
Deleted freshlib/macros/Win32/_winproc.inc.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to freshlib/macros/Win32/allmacros.inc.
|
| > > > > > > > > > > > > > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Combined include of all Win32 specific macros. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ include '_import.inc' include '_export.inc' include '_exceptions.inc' include '_com32.inc' |
Changes to freshlib/macros/_datamacros.inc.
1 2 3 4 5 6 7 | macro IndexedStrings [lparam, string] { forward local ..lbl dd ..lbl, lparam common dd 0 forward | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Several data definition/manipulation macros. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ macro zalign number*, fill { local ..sz if fill eq align number else virtual align number ..sz = $ - $$ end virtual db ..sz dup fill end if } macro getfile lblname*, filename* { if used lblname lblname file filename .size = $ - lblname end if } macro StringTable [string] { forward local ..lbl dd ..lbl common dd 0 forward ..lbl db string, 0 } macro IndexedStrings [lparam, string] { forward local ..lbl dd ..lbl, lparam common dd 0 forward |
︙ | ︙ | |||
15 16 17 18 19 20 21 22 | macro seqname [name] \{ name = seqname#.current seqname#.current = seqname#.current + 1 if defined seqname#.display & seqname#.display disp iconInfo, `seqname, ' value: ', \`#name, ' = $', <name, 16>, $0d end if \} } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | macro seqname [name] \{ name = seqname#.current seqname#.current = seqname#.current + 1 if defined seqname#.display & seqname#.display disp iconInfo, `seqname, ' value: ', \`#name, ' = $', <name, 16>, $0d end if \} } struc StripText source_file, syntax { local ..lbl, source, string, len, rawlen, char, pchar, j, flag, quot label . byte ..lbl: rb len .length = len dd 0 virtual at 0 source:: string file source_file rawlen = $ end virtual if rawlen = 0 err end if j = 0 pchar = ' ' flag = 1 quot = 0 repeat rawlen load char byte from source:(%-1) if ~quot & (syntax eq SQL) if flag if (char = '*' & pchar = "/") | (char = "-" & pchar = "-") flag = 0 char = ' ' pchar = ' ' j = j - 1 end if else if (char = "/" & pchar = "*" ) | char = 13 | char = 10 flag = 1 char = ' ' pchar = ' ' end if end if end if if flag & (char = "'" | char = '"' | char = "`") & (syntax eq SQL) if ~quot quot = char else if quot = char quot = 0 end if end if end if if ~quot & ( char < ' ' ) char = ' ' end if if quot | (flag & ( char > ' ' | (char = ' ' & pchar<>' '))) if j < len store byte char at ..lbl + j end if j = j + 1 end if pchar = char end repeat len = j } |
Added freshlib/macros/_dispatch.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | macro dispatch arg { ; begins procedure instructions common local ..caselist, ..caseaddr, ..casesize case@size equ ..casesize case@list equ ..caselist case@addr equ ..caseaddr macro oncase idname \{ \local ..offset store byte $3d at ..caseaddr ; cmp eax, dword imm ; 5 bytes store dword idname at ..caseaddr+1 ..caseaddr = ..caseaddr + 5 ..offset = $ - ..caseaddr - 2 store word $840f at ..caseaddr ; je dword offset ; 6 bytes store dword ..offset - 4 at ..caseaddr+2 ..caseaddr = ..caseaddr + 6 \} mov eax, arg ..caselist: ..caseaddr = $ rb ..casesize } macro enddispatch { case@size = case@addr - case@list restore case@size, case@addr, case@list purge oncase } |
Changes to freshlib/macros/_display.inc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | iconWarning = 1 iconError = 2 iconInfo = 3 iconFind = 4 iconNone = 5 iconDebug = 6 macro __digit num { if num < 10 display '0'+num else display 'A'+num-10 end if } | > > > > > > > > > > > > > > | | > > | > > > > | > > > > | > > > > | > | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Macro library for displaying compile time messages. ; ; Target OS: Any (FASM compiler) ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ iconWarning = 1 iconError = 2 iconInfo = 3 iconFind = 4 iconNone = 5 iconDebug = 6 macro __digit num { if num < 10 display '0'+num else display 'A'+num-10 end if } macro _disp arg1, arg2 { if arg2 eq display arg1 else local ..tmp, ..val if arg1 relativeto 0 ..tmp = arg1 else ..tmp = rva arg1 end if virtual at 0 repeat 32 if ..tmp > 0 db ..tmp mod arg2 ..tmp = ..tmp / arg2 end if end repeat repeat $ load ..tmp byte from $-% __digit ..tmp end repeat if $ = 0 display '0' end if end virtual end if } macro disp [arg] { _disp arg } macro DispSize Text, Sz { local size size = Sz; if defined options.ShowSizes & options.ShowSizes if ~(defined options.SkipZeroSizes & options.SkipZeroSizes & Sz=0) if Text eqtype "A" disp 3,"Sizeof [", Text, "] is: " else disp 3,"Sizeof [", `Text, "] is: " end if if Sz>10000 size = size / 1024 disp <size,10>, 'K',$0d,$0a else disp <size,10>, ' bytes.',$0d,$0a end if end if end if } |
Added freshlib/macros/_executable.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Executable file formating macro library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Includes OS dependent versions of the library. ;_________________________________________________________________________________________ include '%TargetOS%/_executable.inc' macro module name { ___StartLibAddress = $ ___LibraryName equ name } macro endmodule { DispSize ___LibraryName, $-___StartLibAddress restore ___LibraryName } macro uses [libname] { forward local nm, fn nm equ libname fn equ '%lib%/imports/%TargetOS%/'#`libname#'.inc' match name:filename, libname \{ nm equ name fn equ filename \} ppAddUniqueList DynamicLibList, nm#:#fn } ppInitList DynamicLibList |
Changes to freshlib/macros/_globals.inc.
|
| | | | | < < | < < < < < < < < < | < < | < | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Macto library for global variables handling. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ;------------------------------------------------------------------ ; use "iglobal" for inserting initialized global data definitions. ;------------------------------------------------------------------ macro iglobal { IGlobals equ IGlobals, macro __IGlobalBlock \{ |
︙ | ︙ | |||
77 78 79 80 81 82 83 84 85 | \} match U, UGlobals \{ U \} } | > > > > > > < < | | | < < < < < < < < | | | < > | | | | | | > > | > | < < < | > | | < > > | | | | | | | | | | | | > | < | | | | | | > > | | | < < | | | | < | | > > | > > > > > | < | > > > > | | > | > | < < < < < | | > > > | | < < | | < | > | | | < | > | > | | < | | < > | | > | | | > | > | < > > > | | < | < < < > | < | > | < < < | < | | | | < | | < < > > | < < < | > > > > > | | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | \} match U, UGlobals \{ U \} } macro __InitStringEngine { local ..hashtable, ..strbase, strlist virtual at 0 ..hashtable:: dd 65536 dup ($ffffffff) end virtual strlist equ 0 struc text [arg] \{ \common rept 1 x:strlist+1 \\{ strlist equ x strlist\\#x equ ., arg .@here = 0 \\} \} macro _add_one_str lbl, [dta] \{ \common \local ..buff, sz, h, sh, ch1, ch2, i, f if used lbl virtual at 0 ..buff:: db dta, 0 sz = $ end virtual h = $811C9DC5 repeat sz load ch1 byte from ..buff:(%-1) h = ((h xor ch1) * $01000193) and $ffffffff end repeat h = ((h shr 16) xor h) and $ffff sh = h while 1 load i dword from ..hashtable: h*4 if i = $ffffffff break else f = 1 repeat sz/8 load ch1 qword from ..buff:((%-1)*8) load ch2 qword from $$+i+(%-1)*8 if ch1<>ch2 f = 0 break end if end repeat if f repeat sz mod 8 load ch1 byte from ..buff:((sz and $fffffff8)+(%-1)) load ch2 byte from $$+i+(sz and $fffffff8)+(%-1) if ch1<>ch2 f = 0 break end if end repeat end if if f break end if end if h = (h+1) and $ffff if h = sh err "Hash table full." end if end while if i = $ffffffff store dword $-$$ at ..hashtable:4*h lbl db dta, 0 align 4 else label lbl byte at i+$$ end if lbl\#.length = sz-1 else if defined options.ShowSkipped & options.ShowSkipped display 1, 'String <', dta, '> skipped, because not used.', 13 end if end if \} macro _IncludeAllStrings \{ ..strbase: rept strlist x \\{ match onestr, _add_one_str strlist\\#x \\\{ onestr \\\} \\} \} } __InitStringEngine macro IncludeAllGlobals { local ..start align 4 ..start = $ disp 3, 'Initialized data address: $', <..start, 16>, 13 IncludeIGlobals DispSize 'Initialized data', ($ - ..start) align 4 ..start = $ disp 3, 'Strings address: $', <..start, 16>, 13 _IncludeAllStrings DispSize 'String data', ($ - ..start) align 4 ..start = $ disp 3, 'I18n strings data:', <..start, 16>, 13 __IncludeI18nStrings DispSize 'I18n strings data', ($ - ..start) align 4 ..start = $ disp 3, 'Uninitialized data address: $', <..start, 16>, 13 IncludeUGlobals DispSize 'Uninitialized data', ($ - ..start) align 4 ..start = $ disp 3, 'I18n strings placeholders: $', <..start, 16>, 13 IncludeI18nLabels DispSize 'I18n strings placeholders', ($ - ..start) } macro var expr { common match name==value, expr \{ if used name name dd value else name = 0 end if \} } macro movx target, txt { common local ..txt ..txt text txt mov target, ..txt } iglobal endg uglobal endg |
Added freshlib/macros/_itext.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | ; r - list with the labels ; v - list with the values ; c - counter for the strings ; lc - counter for the languages ; ll - list with the languages macro __InitI18nEngine { local r, v, c, lc, lf, ll c equ 0 lc equ 0 macro _max_length lbl, [arg] \{ \common \local max max=0 \forward virtual at 0 match lang:text, arg \\{ db text if $ > max max = $ end if \\} end virtual \common lbl\#.maxlen = max \} struc itext [val] \{ \common .@here = 0 \local max rept 1 x:c+1 \\{ c equ x r\\#x equ . \\} _max_length ., val \forward match lang:text, val \\{ rept 1 x:c \\\{ v\\\#lang\\\#x equ text \\\} lf equ FALSE rept lc x:1 \\\{ match =lang, ll\\\#x \\\\{ lf equ TRUE \\\\} \\\} match =FALSE, lf \\\{ rept 1 x:lc+1 \\\\{ lc equ x ll\\\\#x equ lang \\\\} \\\} \\} \} macro __IncludeI18nStrings \{ \common label I18nLanguages dword rept lc y \\{ match lang, ll\\#y \\\{ dd \\\`lang dd Language\\\#lang \\\} \\} if lc>0 dd 0 end if rept lc y \\{ match lang, ll\\#y \\\{ times (($ + 15) and $fffffff0) - $ db 0 label Language\\\#lang byte rept c x \\\\{ \\\\local f f equ TRUE match =v\\\\#lang\\\\#x, v\\\\#lang\\\\#x \\\\\{ f equ FALSE \\\\\} times (($ + 3) and $fffffffc) - $ db 0 match lbl1, r\\\\#x \\\\\{ label lbl1\\\\\#.\\\\\#lang byte \\\\\} match =TRUE, f \\\\\{ db v\\\\\#lang\\\\\#x db 0 \\\\\} match lbl1, r\\\\#x \\\\\{ match lbl2, lbl1\\\\\#.\\\\\#lang \\\\\\{ times (lbl1\\\\\\#.maxlen - ($ - lbl2)+1) db 0 \\\\\\} \\\\\} \\\\} Language\\\#lang\\\#.length = $ - Language\\\#lang \\\} \\} \} macro IncludeI18nLabels \{ \common label I18nStrings byte rept c x \\{ rb (($ + 3) and $fffffffc) - $ match lbl, r\\#x \\\{ lbl rb lbl\\\#.maxlen rb 1 \\\} \\} I18nStrings.length = $ - I18nStrings \} } __InitI18nEngine |
Added freshlib/macros/_minihash.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | ; Pearsons hash function table: struct TPHashItem .pKeyname dd ? ; pointer to the key name. on [.pKeyname-1] is 1 byte key length. .Value dd ? ; user defined value of the hash table cell. ends ; ; Builds static Pearsons hash table. ; The table contains 256 elements of TPHashItem (in total 2048 bytes) ; ; Arguments: ; table - the lable of the hash table. ; Pfunc - table of 256 random (or not random) bytes - values of the Pearsons hash function. ; key - string that to be hashed. Pointer to this string is placed in the .pKeyname field of ; the respective record of the hash table. The hash of the key is computed case insensitive. ; value - user data. Placed in the .Value field of the respective TPHashItem element. ; ; Notice, that the table does not resolve hash collisions. If collision happens, the compilation ends ; with error. The conflict can be resolved in two ways - changing the hash function in order to ; avoid collisions, or changing the key that causes collision. ; macro PHashTable table, Pfunc, [key, value] { common if used table local ..error ..error = 0 if defined options.ShowHashes & options.ShowHashes disp 3, 'Hash table "', `table, '"', 9 end if table dd 256 dup(0,0) forward local ..keynm, ..len, ..hash, ..char, ..prev db ..len ..keynm db key ..len = $ - ..keynm db 0 if value ..hash = 0 repeat ..len load ..char byte from ..keynm + % - 1 if ..char and $40 ..char = ..char or $20 end if ..hash = ..hash xor ..char load ..hash byte from Pfunc + ..hash store byte ..char at ..keynm + % - 1 end repeat if defined options.ShowHashes & options.ShowHashes disp 3,'Keyword hash : ', <..hash, 10>, ' on "', key, '"', 10 end if load ..prev dword from table + ..hash * 8 if ..prev = 0 store dword ..keynm at table + ..hash * 8 store dword value at table + ..hash * 8 + 4 else disp 2,'Hash collision: ', <..hash, 10>, ' on "', key, '"', 10 ..error = 1 end if end if common if defined options.ShowHashes & options.ShowHashes disp 6, '---', 13 end if assert ~..error end if } ; ; Computes the Pearsons hash in the same way as PHashTable macro. ; Useful for defining constants with the hash value of some key. ; ; usage: ; MyHashConst phash PFUNK, "my_string" ; struc phash Pfunc, key { local ..keynm, ..len, ..hash, ..char virtual at 0 ..keynm:: db key ..len = $ end virtual ..hash = 0 repeat ..len load ..char byte from ..keynm:(% - 1) if ..char and $40 ..char = ..char or $20 end if ..hash = ..hash xor ..char load ..hash byte from Pfunc + ..hash end repeat if defined options.ShowHashes & options.ShowHashes disp 3,'Keyword hash : ', <..hash, 10>, ' on "', key, '"', 10 end if . = ..hash } |
Added freshlib/macros/_realobjects.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 | cParamMask = $fffe0000 cMethodMask = $ffff0000 macro __search_method flag, num, count, list, cname, method { define flag FALSE rept count i:1 \{ match mname, method \\{ match class | name , list\\#i \\\{ match =mname, name \\\\{ define flag TRUE num equ i \\\\} \\\} \\} \} } macro object name, parent { obj@name equ name obj@parent equ parent name#.param?num = 0 name#@count equ 0 match any, parent \{ name\#@count equ parent\#@count rept parent\#@count i:1 \\{ name\\#@method\\#i equ parent\\#@method\\#i match class | mname, parent\\#@method\\#i \\\{ name\\\#mname\\\#.arguments equ parent\\\#mname\\\#.arguments \\\} \\} \} macro param paramname*, getval*, setval* \{ paramname = name#.param?num or cParamMask name#.param?num = name#.param?num + 1 if getval eq NONE paramname\#.get = -1 else paramname\#.get = getval end if if setval eq NONE ; read only paramname\#.set = -1 else if setval eqtype 1 paramname\#.set = setval else match name : arg, setval \\{ paramname\\#.set = name paramname\\#.set.arg = arg \\} end if end if \} macro method mname, [marg] \{ \common \local f1, n1 name\#mname\#.arguments equ marg define f1 FALSE __search_method f1, n1, name\#@count, name\#@method, parent, mname match =FALSE, f1 \\{ rept 1 x:name\\#@count+1 \\\{ name\\\#@count equ x name\\\#@method\\\#x equ name | mname ; display 3,'New method:', \\\`name,\\\`mname, ' = ', \\\`x, 13, 10 methods.\\\#name\\\#mname\\\#.inherited equ NONE \\\} \\} match =TRUE, f1 \\{ match num, n1 \\\{ match class | mmname, name\\\#@method\\\#num \\\\{ methods.\\\\#name\\\\#mname\\\\#.inherited equ methods.\\\\#class\\\\#mmname \\\\} name\\\#@method\\\#num equ name | mname ; display 3,'Redefinition:', \\\`name,\\\`mname, ' = ', \\\`num, 13, 10 \\\} \\} \} macro abstract mname, [marg] \{ \common method mname, marg methods.\#name\#mname = 0 \} macro name#@members \{ macro method mname, [marg] \\{ \\} macro abstract mname, [marg] \\{ \\} match any, parent \\{ parent\\#@members \\} purge method, abstract } endobj fix } obj_helper macro stack_arguments method, [arg] { common virtual at ebp+8 forward method#arg dd ? ; display 1, `method, "::::", `arg, 13 common end virtual } macro obj_helper { local f1 match name, obj@name \{ local vtable virtual at 0 name dd ? ; pointer to the methods table. name\#@members sizeof.\#name = $ end virtual rept name\#@count i:1 \\{ match class | meth, name\\#@method\\#i \\\{ name\\\#meth = (i-1) or cMethodMask f1 equ TRUE match =class\\\#meth\\\#.arguments, class\\\#meth\\\#.arguments \\\\{ f1 equ FALSE \\\\} match =TRUE, f1 \\\\{ match args, class\\\\#meth\\\#.arguments \\\\\{ stack_arguments meth, args \\\\\} \\\\} \\\} \\} label vtable label vtables.\#name dword if used vtables.\#name\#.parent | used vtables.\#name .parent dd 0 end if match parent, obj@parent \\{ if defined vtables.\\#parent\\#.parent store dword vtables.\\#parent\\#.parent at .parent end if \\} if used vtables.\#name .mcount dd name\#@count ; methods count rept name\#@count i:1 \\{ match class | meth, name\\#@method\\#i \\\{ dd methods.\\\#class\\\#meth \\\} \\} end if .size = $ - vtable \} purge method, param restore obj@name, obj@parent } macro method name { local f1, f2 define f1 TRUE if used methods.#name match =NONE, methods.#name#.inherited \{ define f1 FALSE dd 0 \} match =TRUE, f1 \{ dd methods.\#name\#.inherited \} end if match =name#.arguments, name#.arguments \{ "Error! Method not defined in any object." \} f2 equ FALSE match arguments, name#.arguments \{ f2 equ TRUE proc methods.\#name, .self, arguments \} match =FALSE, f2 \{ proc methods.\#name, .self \} name#.@here = 1 } ; Object manipulation macros. They all generate some assembly code and its syntax is ; designed to resemble the usual assembly language syntax. These macros are some ; kind of quasiinstructions. ; These macros uses FreshLib in order to allocate/deallocate dynamic memory. macro create target, class, [arg] { common if ~target eq eax push eax end if stdcall GetMem, sizeof.#class mov dword [eax], vtables.#class if ~target eq eax mov target, eax pop eax end if reverse if ~arg eq pushx arg end if common if defined class#.Create & (class#.Create and $ffff0000) = cMethodMask exec target, class#:Create end if } macro destroy ptrObj { if defined TObject.Destroy & (TObject.Destroy and $ffff0000) = cMethodMask push eax exec ptrObj, TObject:Destroy pop eax end if stdcall FreeMem, ptrObj } macro exec ptrobj, method, [arg] { common local ind ind equ NONE match class:meth, method \{ ind equ class\#.\#meth \} match =NONE, ind \{ disp 2, "Error! Invalid syntax. Use class:method.", 13, 10 err \} if defined ind & ~(ind and $ffff0000) = cMethodMask match meth, ind \{ disp 2, 'Error! ', \`meth, ' is not a method.', 13, 10 err \} end if reverse if ~arg eq pushx arg end if common if ptrobj eqtype 1 pushd [ptrobj] else pushd ptrobj ; push .self argument end if if ptrobj eqtype eax mov eax, [ptrobj] else if ptrobj eqtype 1 mov eax, [ptrobj] mov eax, [eax] else mov eax, ptrobj mov eax, [eax] end if end if call dword [eax+8+4*(ind and $ffff)] } macro getm target, ptrobj, method { local ind ind equ NONE match class:meth, method \{ ind equ class\#.\#meth \} match =NONE, ind \{ disp 2, "Error! Invalid syntax. Use class:method.", 13, 10 err \} if defined ind & ~(ind and $ffff0000) = cMethodMask match meth, ind \{ disp 2, 'Error! ', \`meth, ' is not a method.', 13, 10 err \} end if if ~target eq eax push eax end if if ptrobj eqtype eax mov eax, [ptrobj] else if ptrobj eqtype 1 mov eax, [ptrobj] mov eax, [eax] else mov eax, ptrobj mov eax, [eax] end if end if push dword [eax+8+4*(ind and $ffff)] pop target if ~target eq eax pop eax end if } macro inherited [arg] { common if ~arg eq reverse pushx arg common end if push [.self] call dword [.__info.start-4] } macro get target, obj, param { local flag flag equ FALSE match class:par, param \{ flag equ TRUE \} match =FALSE, flag \{ disp 2, "Error! Invalid syntax. Use class:method.", 13, 10 err \} match class:par, param \{ if class\#.\#par\#.get < sizeof.\#class ; field if obj eqtype eax if target eqtype eax mov target, [obj+class\#.\#par\#.get] else pushd [obj+class\#.\#par\#.get] popd target end if else if ~target eq eax push eax end if if obj eqtype 1 mov eax, [obj] else mov eax, obj end if if target eqtype eax mov target, [eax+class\#.\#par\#.get] else pushd [eax+class\#.\#par\#.get] popd target end if if ~target eq eax pop eax end if end if else ; by method if ~target eq eax push eax end if exec obj, class\#:\#par\#.get if ~target eq eax mov target, eax pop eax end if end if \} } macro set obj, param, value { local flag flag equ FALSE match class:par, param \{ flag equ TRUE \} match =FALSE, flag \{ disp 2, "Error! Invalid syntax. Use class:method.", 13, 10 err \} match class:par, param \{ if class\#.\#par\#.set < sizeof.\#class ; field if obj eqtype eax if value eqtype eax mov [obj+class\#.\#par\#.set], value else pushd value popd [obj+class\#.\#par\#.set] end if else if value eq eax push ecx mov ecx, obj mov [ecx+class\#.\#par\#.set], value pop ecx else push eax mov eax, obj if value eqtype eax mov [eax+class\#.\#par\#.set], value else pushd value popd [eax+class\#.\#par\#.set] end if pop eax end if end if else ; by method push eax if defined class\#.\#par\#.set.arg if class\#.\#par\#.set.arg = 3 exec obj, class\#:\#par\#.set, class\#.\#par, class\#.\#par\#.get, value else if class\#.\#par\#.set.arg = 2 exec obj, class\#:\#par\#.set, class\#.\#par, value else if class\#.\#par\#.set.arg = 1 exec obj, class\#:\#par\#.set, value else disp 2, "Error! The set method can have only 1 or 2 arguments in this implementation.", 13, 10 err end if end if end if else exec obj, class\#:\#par\#.set, value end if pop eax end if \} } ; returns ZF = 1 if the type matches ; returns ZF = 0 if the type does not matches. macro istype ptrobj, class { local ..itis, ..loop push ecx if ptrobj eqtype eax ; register if ~ptrobj eq ecx mov ecx, ptrobj end if else mov ecx, ptrobj end if test ecx, ecx ..loop: mov ecx, [ecx] ; get vtable, or the parent vtable jecxz ..itis ; if jump, ZF=0 cmp ecx, vtables.#class jne ..loop ; here ZF = 1 ..itis: pop ecx } |
Changes to freshlib/macros/_stdcall.inc.
|
| | | > > > > > > > > > | > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Macros for create and call of high level procedures. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ macro locals { local ..locsize locsize equ ..locsize virtual at ebp - ..locsize - .__info.commonframe.size @@: } |
︙ | ︙ | |||
21 22 23 24 25 26 27 | restore locsize } macro err@endp { } | | | | > > > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | restore locsize } macro err@endp { } macro proc2 name, [arg] { common err@endp macro err@endp \{ end if Missing 'endp' before the procedure. \} if defined options.AlignCode & options.AlignCode align 16 end if label name .__info.id = 1 .__info.start = $ virtual at ebp+8 if ~ arg eq forward arg dd ? if ~ defined name#arg ERROR! the argument `arg MUST begins with dot end if common end if .__info.argsize = $-ebp-8 end virtual if ~ used name if defined options.ShowSkipped & options.ShowSkipped display 1,'Procedure skipped: ',`name, $0d, $0a end if else virtual at ebp - .__info.commonframe.size .__info.commonframe.begin: } macro doas name1, name2, [arg] { common proc2 name1, arg } macro proc name, [arg] { common local ..norm define ..norm TRUE match pname =as iface, name \{ define ..norm FALSE if ~defined interfaces.\#iface ERROR! Not defined \`iface interface. end if match interface, interface@\#iface \\{ doas pname, interface \\} \} match =TRUE, ..norm \{ proc2 name, arg \} } macro begin { rb (4 - ($ - .__info.commonframe.begin) and 11b) and 11b .__info.commonframe.size = $ - .__info.commonframe.begin end virtual local ..maxsize |
︙ | ︙ | |||
116 117 118 119 120 121 122 123 124 125 126 127 128 129 | end if } macro endp { .__info.framesize = maxsize + .__info.commonframe.size end if restore maxsize purge err@endp } | > > > > > > > > | > | < < | | < | < < < | < < | < < < < < < < < | | < > > > | < < < > | < < < < < < < | < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | | | | | > > > > > > | > > | > > | | > > | > > | > > | > > > > > > > > > > > > > > > > > > > > | > > > | > > > > | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 | end if } macro endp { .__info.framesize = maxsize + .__info.commonframe.size .__info.codesize = $ - .__info.start end if restore maxsize purge err@endp } ; Defines procedure interface, separate from the procedure body. Useful for ; portable libraries, where the body is an OS dependent, but the interface should not. ; Must be defined prior to the "body" definition. macro interface name, [arg] { common \interface@#name equ name, arg interfaces.#name = 1 } ; Defines procedure body, for already defined interface. macro body name { if ~defined interfaces.#name ERROR! Not defined interface for `name procedure. end if match interface, interface@#name \{ proc interface \} } macro event name, [arg] { common name dd ? interfaces.#name = 1 interface@#name equ name forward match var, interface@#name \{ \interface@#name equ var, .#arg \} } ;***************************************** ; Call macroses ;***************************************** macro pushx [arg] { common local f1, f2, cnt, sz cnt = 0 sz = 0 f1 = 1 f2 equ FALSE forward match any, arg \{ match `arg, arg \\{ f2 equ TRUE \\} \} cnt = cnt + 1 if arg eqtype '' virtual at 0 db arg sz = sz + $ end virtual end if common local lbl match =txt string, arg \{ f1 = 0 lbl text string f2 equ FALSE \} if (sz > 4) | (cnt>1) f1 = 0 end if if f1 pushd arg else pushd lbl end if match =TRUE, f2 \{ lbl text arg \} } macro stdcall proc, [arg] { ; call procedure common local ..argsize ..argsize = 0 if ~ arg eq reverse pushx arg ..argsize = ..argsize + 4 common end if if defined options.CheckArguments & options.CheckArguments if (proc eqtype 1) & (defined proc#.__info.argsize) & (proc#.__info.argsize <> ..argsize) display 1, 'Warning! Argument count on call of: <<',`proc, '>> ', $0d end if end if call proc } macro invoke proc,[arg] { ; invoke procedure (indirect) common if ~ arg eq reverse pushx arg common end if call [proc] } macro ccall proc,[arg] { ; call procedure in C calling convention common local ..size ..size = 0 reverse pushx arg ..size = ..size+4 common call proc if defined proc#.__info.argsize if proc#.__info.argsize > 0 add esp, proc#.__info.argsize end if else if ..size > 0 add esp,..size end if end if } macro cinvoke proc, [arg] { ; invoke procedure (indirect) common local ..size, ..ofs ..size = 0 if ~ arg eq reverse ..size = ..size + 4 common end if if defined options.AlignStackExt & options.AlignStackExt mov [esp-$10], esp mov [esp-$0c], esp mov [esp-$08], esp mov [esp-$04], esp sub esp, ..size + 4 and esp, $fffffff0 if ..size > 0 add esp, ..size end if end if if ..size > 0 reverse pushx arg common end if call [proc] if ..size > 0 add esp, ..size end if if defined options.AlignStackExt & options.AlignStackExt mov esp, [esp] end if } ;**************************************** ; INT3 break point, when first = second. ;**************************************** macro BreakEq first, second { local .lbl |
︙ | ︙ |
Changes to freshlib/macros/_struct.inc.
|
| > > > > > | | > > > > > > > | > > | > > > > > > > > > > > > > > > > < | < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Macro to make complex data structures. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ macro struct name { macro name@struct \{ virtual at 0 name name sizeof.#name = $ end virtual \} struc name \{ } macro rstruct name { macro name@struct \{ \local ..start, ..size virtual at -..size ..start: name name ..size = $ - ..start sizeof.#name = ..size end virtual \} struc name \{ } ends fix } struct_helper macro struct_helper { name@struct purge name@struc } |
Added freshlib/macros/_uniquelists.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | ; list - name of the list. ; list@count - count of the list items. macro __search_list flag, list, item { forward flag equ FALSE rept list#@count i:1 \{ match iitem, item \\{ match =iitem, list\\#i \\\{ define flag TRUE \\\} \\} \} } macro ppAddUniqueList list, [listitem] { forward local fFound __search_list fFound, list, listitem match =FALSE, fFound \{ rept 1 x:list#\@count+1 \\{ list\\#@count equ x list\\#x equ listitem \\} \} } macro ppInitList list { list#@count equ 0 } macro __InitInitializeEngine { local i,f,ci,cf ci equ 0 cf equ 0 macro add_initialize procname \{ \common rept 1 x:ci+1 \\{ ci equ x i\\#x equ procname \\} \} macro add_finalize procname \{ \common rept 1 x:cf+1 \\{ cf equ x f\\#x equ procname \\} \} macro initialize procname \{ \common rept 1 x:ci+1 \\{ ci equ x i\\#x equ procname proc procname \\} \} macro finalize procname \{ \common rept 1 x:cf+1 \\{ cf equ x f\\#x equ procname proc procname \\} \} macro InitializeAll \{ \common rept ci x \\{ \\forward if defined i\\#x call i\\#x end if \\} \} macro FinalizeAll \{ \common rept cf x \\{ \\reverse if defined f\\#x call f\\#x end if \\} \} } __InitInitializeEngine |
Changes to freshlib/macros/allmacros.inc.
|
| > > > > > > > > > > > > > > > > | | > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Includes all macro libraries at once. ; ; Target OS: ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ include '_uniquelists.inc' include '_executable.inc' include '_stdcall.inc' include '_struct.inc' include '_display.inc' include '_itext.inc' include '_globals.inc' include '_datamacros.inc' include '_dispatch.inc' include '_realobjects.inc' include '_minihash.inc' include '%TargetOS%/allmacros.inc' |
Deleted freshlib/mouse/Linux/mouse.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/mouse/Win32/mouse.asm.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted freshlib/mouse/mouse.asm.
|
| < < < < < < < < < < |
Changes to freshlib/readme.txt.
|
| > > > > > > > | > > | > > > | > > > > > > > > > > > | > | > > > | > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | _______________________________________________________________________________________ | | | ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | | | | (c)2003, 2004, 2005, 2010, 2011, 2012 Fresh developement team | |_______________________________________________________________________________________| FreshLib is standard Fresh IDE library. FreshLib contains macros, equates and code to allow writing of portable applications. FreshLib is free, open source project, distributed under the terms of "BSD 2-clause license". The text of the license is in the file "License.txt" FreshLib is created and maintained by Fresh development team. Every member of the team have some contribution to the project. Here is the list of people contributed to the project (in order of appearance; newer first): vid pelaillo scientica (Fredrik Klasson) tommy (Tommy Lilehagen) VeSCeRa (Yunus Sina Gulsen) roticv (Victor Loh) decard (Mateusz Tymek) John Found Special thanks to Tomasz Grysztar for creating FASM. Tomasz also provided some really useful macros. _________________________________________________________________________________________ For additional information about Fresh and FreshLib, look at following locations: http://fresh.flatassembler.net - main site of the project Fresh. http://board.flatassembler.net - Flat assembler message board. _________________________________________________________________________________________ The test project for FreshLib is "TestFreshLib.fpr" You can compile and run it as Win32, or as Linux application. Use Fresh IDE or compile TestLib.asm file with FASM compiler. |
Added freshlib/simpledebug/Dummy/debug.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SimpleDebug library. ; ; Target OS: Dummy ; ; Dependencies: Not dependent on other libraries. ; ; Notes: ;_________________________________________________________________________________________ proc Output, .ptrStr begin pushad popad return endp proc GetTimestamp begin pushad popad return endp |
Added freshlib/simpledebug/KolibriOS/debug.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license. | ;|_______________________________________________________________________________________| ; ; Description: SimpleDebug library. ; ; Target OS: KolibriOS ; ; Dependencies: Not dependent on other libraries. ; ; Notes: ;_________________________________________________________________________________________ DBG_CHAR_NEWLINE equ $0d, $0a CONSOLE_X_SIZE = 128 CONSOLE_X_SHIFT = 7 CONSOLE_Y_SIZE = 256 CONSOLE_Y_SHIFT = 8 FONT_HEIGHT = 9 FONT_WIDTH = 6 CONSOLE_TEXT_COLOR = $00000000 CONSOLE_BG_COLOR = $fffff0 if used CharOut | used STDIN | used STDOUT | used STDERR initialize InitConsole begin mov eax, sys_threads mov ebx, 1 mov ecx, ConsoleThread mov edx, ConsoleSP int $40 mov [hConsoleThread], eax return endp end if uglobal if used ConsoleSP rd 16383 ConsoleSP dd ? end if if used DebugBuffer xDebugBuffer dd ? ; current X position yDebugBuffer dd ? ; current Y position rDebugBuffer dd ? ; the top row of the console sDebugBuffer dd ? ; start of the debug buffer. fDebugRefresh dd ? ; flag that the console needs refresh. hConsoleThread dd ? DebugBuffer rb CONSOLE_X_SIZE * CONSOLE_Y_SIZE KeyboardHead dd 0 KeyboardTail dd 0 KeyboardBuffer rb 1024 end if endg proc Output, .ptrString begin push eax esi mov esi, [.ptrString] .loop: lodsb test al, al jz .end_output stdcall CharOut, eax jmp .loop .end_output: pop esi eax return endp ; this one writes to the KolibriOS debug message board. ;proc Output, .ptrStr ;begin ; pushad ; ; mov esi, [.ptrStr] ; mov eax, sys_msg_board ; mov ebx, 1 ; ;.loop: ; mov cl, [esi] ; test cl,cl ; jz .finish ; lea esi, [esi+1] ; int $40 ; jmp .loop ; ;.finish: ; popad ; return ;endp proc GetTimestamp begin pushad mov eax, sys_getsetup mov ebx, 9 int $40 imul eax, 10 ; in [ms] mov [esp+4*regEAX], eax popad return endp proc GetFineTimestamp begin return endp proc ConsoleThread .info __TThreadInfo begin mov eax, sys_process_def mov ebx, 1 mov ecx, 0 int $40 stdcall DrawConsole, 1 mov eax, sys_set_app_param mov ebx, emaskRedraw or emaskGUIButton or emaskKeyboard or emaskMouse or emaskNetwork int $40 .event_loop: cmp [fDebugRefresh], 0 jne .redraw mov eax, sys_wait_event_timeout mov ebx, 1 int $40 test eax, eax jz .event_loop cmp eax, eventRedraw je .redraw cmp eax, eventKeyboard je .keyboard cmp eax, eventGUIButton je .button cmp eax, eventMouse je .mouse cmp eax, eventNetwork je .network jmp .event_loop .network: jmp .event_loop .redraw: stdcall DrawConsole, [fDebugRefresh] mov [fDebugRefresh], 0 jmp .event_loop .keyboard: mov eax, sys_getkey int $40 ; jmp .ascii ; ; cmp eax, 1 ; je .event_loop ; ; test al, al ; jz .ascii ; ; cmp ah, keyUp ; je .up1 ; cmp ah, keyDown ; je .dn1 ; cmp ah, keyPgUp ; je .up2 ; cmp ah, keyPgDown ; je .dn2 ; ; jmp .event_loop ; ;.ascii: mov ebx, [KeyboardHead] mov ecx, ebx inc ebx and ebx, $fff cmp ebx, [KeyboardTail] ; overflow? Don't store then. je .event_loop mov [KeyboardBuffer+ecx], ah mov [KeyboardHead], ebx movzx eax, ah stdcall CharOut, eax jmp .event_loop .up1: mov eax, -1 jmp .scroll .dn1: mov eax, 1 jmp .scroll .up2: call .get_info neg eax jmp .scroll .dn2: call .get_info jmp .scroll .mouse: mov eax, sys_readmousepos mov ebx, 7 int $40 cwde shl eax, 1 .scroll: mov edx, [rDebugBuffer] test eax, eax jz .event_loop js .minusloop .plusloop: inc edx and edx, CONSOLE_Y_SIZE - 1 cmp edx, [sDebugBuffer] je .redraw mov [rDebugBuffer], edx dec eax jnz .plusloop jmp .redraw .minusloop: dec edx and edx, CONSOLE_Y_SIZE - 1 mov ecx, [sDebugBuffer] dec ecx and ecx, CONSOLE_Y_SIZE - 1 cmp edx, ecx je .redraw mov [rDebugBuffer], edx inc eax jnz .minusloop jmp .redraw .button: mov eax, sys_getbutton int $40 cmp ah, 1 jne .event_loop .finish: mov eax, sys_end int $40 .get_info: mov eax, sys_cpuusage lea ebx, [.info] mov ecx, -1 int $40 mov eax, [.info.ClientHeight] cdq mov ecx, FONT_HEIGHT sub eax, ecx div ecx retn endp cDebugWindowHeader text 'FreshLib console' proc DrawConsole, .fScroll .info __TThreadInfo begin ; start draw mov eax, 12 mov ebx, 1 int $40 ; draw standard elements. mov eax, sys_drawwindow mov ebx, 480+8 mov ecx, 320+32 mov edx, $33000000 or CONSOLE_BG_COLOR mov edi, cDebugWindowHeader int $40 ; draw the text from the buffer ; get the window size: mov eax, sys_cpuusage lea ebx, [.info] mov ecx, -1 int $40 sub [.info.ClientHeight], FONT_HEIGHT ; check for scroll cmp [.fScroll], 0 je .scrollok mov eax, [.info.ClientHeight] cdq mov ecx, FONT_HEIGHT div ecx mov edx, [yDebugBuffer] sub edx, [rDebugBuffer] and edx, CONSOLE_Y_SIZE - 1 cmp edx, eax jbe .scrollok sub edx, eax add [rDebugBuffer], edx .scrollok: mov eax, sys_writetext xor ebx, ebx mov ecx, CONSOLE_TEXT_COLOR ; text color and options. mov edi, [rDebugBuffer] mov esi, CONSOLE_X_SIZE .text_loop: mov edx, edi shl edx, CONSOLE_X_SHIFT add edx, DebugBuffer int $40 inc edi and edi, CONSOLE_Y_SIZE - 1 cmp edi, [sDebugBuffer] je .text_ok add ebx, FONT_HEIGHT cmp ebx, [.info.ClientHeight] jbe .text_loop .text_ok: mov eax, 12 mov ebx, 2 int $40 return endp proc CharOut, .char begin pushad mov ecx, [xDebugBuffer] mov edx, [yDebugBuffer] mov eax, [.char] cmp al, $20 jb .control .charout: mov edi, edx shl edi, CONSOLE_X_SHIFT add edi, ecx mov [edi+DebugBuffer], al inc ecx cmp ecx, CONSOLE_X_SIZE jb .end_output xor ecx, ecx .LF: inc edx and edx, CONSOLE_Y_SIZE - 1 cmp edx, [sDebugBuffer] jne @f inc [sDebugBuffer] and [sDebugBuffer], CONSOLE_Y_SIZE - 1 @@: call .clearEOL .end_output: mov [xDebugBuffer], ecx mov [yDebugBuffer], edx mov [fDebugRefresh], 1 popad return .control: cmp al, $0d je .CR cmp al, $0a je .LF mov al, '.' ; replace ctrl code with "." jmp .charout .CR: xor ecx, ecx jmp .end_output ; clear the row. .clearEOL: xor eax, eax mov edi, edx shl edi, CONSOLE_X_SHIFT add edi, ecx add edi, DebugBuffer push ecx mov ecx, CONSOLE_X_SIZE / 4 rep stosd pop ecx retn endp |
Changes to freshlib/simpledebug/Linux/debug.asm.
1 2 3 4 5 6 7 8 | proc Output, .ptrStr begin pushad stdcall __simpStrLength, [.ptrStr] mov edx, ecx mov eax, 4 | > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > | > > > | | > | | | | > > | > | < < | > > > < > > > > < > > | > | > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SimpleDebug library. ; ; Target OS: Linux ; ; Dependencies: Not dependent on other libraries. ; ; Notes: ;_________________________________________________________________________________________ DBG_CHAR_NEWLINE equ $0a proc Output, .ptrStr begin pushad stdcall __simpStrLength, [.ptrStr] mov edx, ecx mov eax, 4 mov ebx, 2 mov ecx, [.ptrStr] int $80 popad return endp proc OutputSz, .ptrStr, .size begin pushad mov edx, [.size] mov eax, 4 mov ebx, 2 mov ecx, [.ptrStr] int $80 popad return endp macro OutputEvent event { if defined options.DebugMode & options.DebugMode stdcall __OutputEvent, event end if } proc __OutputEvent, .pEvent begin pushad stdcall Output, cEventLabel mov esi, [.pEvent] mov eax, [esi+XEvent.type] cmp eax, 2 jl .bynumber cmp eax, 35 jg .bynumber sub eax, 2 mov eax, [__EventStrings+4*eax] stdcall Output, eax stdcall Output, cEventLabel1 .window: mov eax, [esi+XEvent.type] stdcall OutputNumber, eax, 10, 3 stdcall Output, cEventLabel2 stdcall OutputNumber, [esi+XEvent.window], 16, 8 stdcall Output, cEventLabel3 popad return .bynumber: stdcall OutputNumber, eax, 10, 3 jmp .window endp if used __OutputEvent cEventLabel db 'X event: "', 0 cEventLabel1 db ' (', 0 cEventLabel2 db ')" for window: $', 0 cEventLabel3 db 10, 0 ; From number 2..35 __EventStrings: StringTable \ `KeyPress, `KeyRelease, `ButtonPress, `ButtonRelease, `MotionNotify, `EnterNotify, \ `LeaveNotify, `FocusIn, `FocusOut, `KeymapNotify, `Expose, `GraphicsExpose, `NoExpose, \ `VisibilityNotify, `CreateNotify, `DestroyNotify, `UnmapNotify, `MapNotify, `MapRequest, \ `ReparentNotify, `ConfigureNotify, `ConfigureRequest, `GravityNotify, `ResizeRequest, \ `CirculateNotify, `CirculateRequest, `PropertyNotify, `SelectionClear, `SelectionRequest, \ `SelectionNotify, `ColormapNotify, `ClientMessage, `MappingNotify, `LASTEvent end if |
Changes to freshlib/simpledebug/Win32/debug.asm.
1 | uglobal | > > > > > > > > > > > > > > > > > | > > | > > | | > > > > > > > > > > > > > > > > | < | > | > > > | > > > > > > > < | < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SimpleDebug library. ; ; Target OS: Win32 ; ; Dependencies: Not dependent on other libraries. ; ; Notes: ;_________________________________________________________________________________________ DBG_CHAR_NEWLINE equ $0d, $0a uglobal if used debug_con_handle debug_con_handle dd ? end if endg iglobal if used cConsoleTitle cConsoleTitle du 'Fresh simple debug console.', 0 end if endg if (defined options.DebugMode & options.DebugMode) | used Output | (defined options.DebugMode.ShowFPS & options.DebugMode.ShowFPS) initialize InitDebugConsole begin invoke AllocConsole invoke GetStdHandle, STD_ERROR_HANDLE mov [debug_con_handle], eax invoke SetConsoleTitleW, cConsoleTitle return endp end if if (defined options.DebugMode & options.DebugMode) | used Output | (defined options.DebugMode.ShowFPS & options.DebugMode.ShowFPS) finalize FinishDebugConsole .string rb 10 begin invoke WriteFile, [STDERR], ___CloseMsg, ___CloseMsg.length, 0, 0 lea eax, [.string] invoke ReadFile, [STDIN], eax, 1, 0, 0 return endp ___CloseMsg text "Press ENTER to close." end if maxConsoleWrite = 1024 proc Output, .ptrStr .dummy dd ? begin pushad stdcall __simpStrLength, [.ptrStr] mov ebx, ecx .loop: mov ecx, ebx cmp ecx, maxConsoleWrite jb @f mov ecx, maxConsoleWrite @@: sub ebx, ecx push ecx lea eax, [.dummy] invoke WriteConsoleA, [debug_con_handle], [.ptrStr], ecx, eax, 0 pop ecx add [.ptrStr], ecx test ebx, ebx jnz .loop .finish: popad return endp |
Changes to freshlib/simpledebug/debug.asm.
1 2 3 4 | include "%TargetOS%/debug.asm" macro DebugMsg msg { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | < < > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > | < < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: SimpleDebug library. Provides simple debugging macros and code. ; ; Target OS: Any ; ; Dependencies: Not dependent on other libraries. ; ; Notes: use options.DebugMode={1|0} to enable/disable debug output of this library. ;_________________________________________________________________________________________ module "Simple debug library" SimpleDebugLoaded = 1 include "%TargetOS%/debug.asm" match =DBG_CHAR_NEWLINE, DBG_CHAR_NEWLINE { DBG_CHAR_NEWLINE equ $0d, $0a } cDbgNewLine text DBG_CHAR_NEWLINE, 0 macro dbrk { if defined options.DebugBreaks & options.DebugBreaks int3 nop end if } macro DebugMsg msg { common if defined options.DebugMode & options.DebugMode local ..msg, ..skip stdcall DebugLock stdcall Output, ..msg jmp ..skip label ..msg byte if ~msg eq db msg end if db DBG_CHAR_NEWLINE, 0 label ..skip stdcall DebugUnlock end if } macro Message msg { common local ..msg, ..skip stdcall Output, ..msg jmp ..skip ..msg db msg, DBG_CHAR_NEWLINE, 0 label ..skip } macro Output string { if defined options.DebugMode & options.DebugMode = 1 stdcall Output, string end if } macro OutputLn string { if defined options.DebugMode & options.DebugMode = 1 if ~string eq stdcall Output, string end if stdcall Output, <txt DBG_CHAR_NEWLINE> end if } proc OutputMemory, .ptr, .size begin pushad mov esi, [.ptr] mov edx, [.size] .loop: stdcall OutputNumber, esi, 16, 8 stdcall Output, .cSimpDbgSep1 mov ecx, 4 .lineloop: stdcall OutputNumber, [esi], 16, 8 stdcall Output, .cSimpDbgSep2 lea esi, [esi+4] sub edx, 4 cmp edx, 0 jle .exit dec ecx jnz .lineloop .exit: stdcall Output, .cSimpDbgNewLine cmp edx, 0 jg .loop stdcall Output, .cSimpDbgNewLine popad return .cSimpDbgSep1 db ': ',0 .cSimpDbgSep2 db ' ',0 .cSimpDbgNewLine db DBG_CHAR_NEWLINE,0 endp macro OutputMemory pointer, size { if defined options.DebugMode & options.DebugMode stdcall OutputMemory, pointer, size end if } proc OutputMemoryByte, .ptr, .size .buffer dd ? begin pushad mov esi, [.ptr] mov edx, [.size] .loop: mov eax, esi sub eax, [.ptr] stdcall OutputNumber, eax, 16, 8 stdcall Output, .cSimpDbgSep1 mov ecx, 16 push esi edx .lineloop1: movzx eax, byte [esi] stdcall OutputNumber, eax, 16, 2 stdcall Output, .cSimpDbgSep2 inc esi dec edx dec ecx jz .ascii test edx, edx jnz .lineloop1 .align_loop: jecxz .ascii stdcall Output, .cSimpDbgSep3 dec ecx jnz .align_loop .ascii: stdcall Output, .cSimpDbgSep1 mov ecx, 16 pop edx esi .lineloop2: xor eax, eax mov al, [esi] mov ah, " " cmp al, ah jae @f mov al, "." @@: mov [.buffer], eax lea eax, [.buffer] stdcall Output, eax inc esi dec edx dec ecx jz .exit test edx, edx jnz .lineloop2 .exit: stdcall Output, .cSimpDbgNewLine cmp edx, 0 jne .loop stdcall Output, .cSimpDbgNewLine popad return .cSimpDbgSep1 db ': ',0 .cSimpDbgSep2 db ' ',0 .cSimpDbgSep3 db ' ',0 .cSimpDbgNewLine db DBG_CHAR_NEWLINE,0 endp macro OutputMemoryByte pointer, size { if defined options.DebugMode & options.DebugMode stdcall OutputMemoryByte, pointer, size end if } proc OutputNumber, .number, .radix, .digits begin pushad cld mov edi, _simpdebugstr mov eax, [.number] mov ecx, [.radix] mov esi, [.digits] test esi, esi jz .varU jns .fixed call __simpNumToStr jmp .end .varU: call __simpNumToStrU jmp .end .fixed: call __simpNumToStrUF .end: xor eax, eax stosd stdcall Output, _simpdebugstr .exit: popad return endp macro OutputNumber number, radix, digits { if defined options.DebugMode & options.DebugMode stdcall OutputNumber, number, radix, digits end if } proc OutputRegister, .reg, .radix begin pushad |
︙ | ︙ | |||
64 65 66 67 68 69 70 | stosd mov eax, [esp+4*ebx] mov ecx, [.radix] mov esi, 8 call __simpNumToStrUF | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < < < < > > > > | 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 | stosd mov eax, [esp+4*ebx] mov ecx, [.radix] mov esi, 8 call __simpNumToStrUF mov eax, dword [.tempstr] stosd stdcall Output, _simpdebugstr .exit: popad return .tempstr db DBG_CHAR_NEWLINE dd 0 align 4 .regnames: dd 'edi=' dd 'esi=' dd 'ebp=' dd 'esp=' dd 'ebx=' dd 'edx=' dd 'ecx=' dd 'eax=' endp macro OutputRegister reg, radix { if defined options.DebugMode & options.DebugMode stdcall OutputRegister, reg, radix end if } macro OutputRect x, y, width, height { if defined options.DebugMode & options.DebugMode local ..crlf, ..skip stdcall Output, txt 'Rectangle: x=' stdcall OutputNumber, x, 10, -1 stdcall Output, txt ' y=' stdcall OutputNumber, y, 10, -1 stdcall Output, txt ' width=' stdcall OutputNumber, width, 10, -1 stdcall Output, txt ' height=' stdcall OutputNumber, height, 10, -1 stdcall Output, ..crlf jmp ..skip ..crlf db DBG_CHAR_NEWLINE, 00 label ..skip end if } macro OutputRectPtr p { if defined options.DebugMode & options.DebugMode local ..crlf, ..skip stdcall Output, txt 'RECT.left=' stdcall OutputNumber, [p+RECT.left], 10, -1 stdcall Output, txt ' .top=' stdcall OutputNumber, [p+RECT.top], 10, -1 stdcall Output, txt ' .right=' stdcall OutputNumber, [p+RECT.right], 10, -1 stdcall Output, txt ' bottom=' stdcall OutputNumber, [p+RECT.bottom], 10, -1 stdcall Output, ..crlf jmp ..skip ..crlf db DBG_CHAR_NEWLINE, 00 label ..skip end if } macro OutputValue lbl, val, radix, digits { if defined options.DebugMode & options.DebugMode local ..crlf, ..txt, ..skip stdcall DebugLock stdcall Output, ..txt stdcall OutputNumber, val, radix, digits stdcall Output, ..crlf jmp ..skip ..txt db lbl, 0 ..crlf db DBG_CHAR_NEWLINE, 00 label ..skip stdcall DebugUnlock end if } macro OutputCallStack depth { if defined options.DebugMode & options.DebugMode local ..txt, ..skip, ..loop pushf pushad stdcall DebugLock mov ecx, depth ..loop: stdcall OutputNumber, [ebp+4], 16, 8 stdcall Output, ..txt mov ebp, [ebp] dec ecx jnz ..loop jmp ..skip ..txt db 'h', DBG_CHAR_NEWLINE, 00 ..skip: stdcall DebugUnlock popad popf end if } uglobal if used _simpdebugstr _simpdebugstr rb 256 end if endg proc __simpStrLength;, .pString begin mov ecx, [esp+4] jecxz .ret .scan: cmp byte [ecx], 0 lea ecx, [ecx+1] jne .scan stc sbb ecx, [esp+4] .ret: retn 4 endp ;***************************************************** ; NumToStrF: ; Converts signed integer value to string. |
︙ | ︙ | |||
129 130 131 132 133 134 135 | ; returns: edi - pointer to the end of converted num ; ; Note: Don't use 1 as radix. ;***************************************************** proc __simpNumToStrF begin test eax,eax | | | 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 | ; returns: edi - pointer to the end of converted num ; ; Note: Don't use 1 as radix. ;***************************************************** proc __simpNumToStrF begin test eax,eax jns __simpNumToStrUF neg eax mov byte [edi],'-' push esi dec esi add edi,esi push edi jmp __simpNumToStrUF.loopc |
︙ | ︙ | |||
163 164 165 166 167 168 169 | jnz .loopc pop edi pop esi return endp | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 | jnz .loopc pop edi pop esi return endp ;***************************************************** ; _simpNumToStr: ; Converts signed integer value to string. ; _simpNumToStrU: ; Converts unsigned integer value to string. ; ; edi - pointer to string buffer ; eax - Number to convert ; ecx - radix from 2 to $ff ; ; returns: edi - pointer to the end of converted num ; ; Note: Don't use 1 as radix. ;***************************************************** proc __simpNumToStr begin test eax,eax jns __simpNumToStrU neg eax mov byte [edi],"-" inc edi endp proc __simpNumToStrU begin cmp eax,ecx jb .lessA xor edx,edx div ecx push edx call __simpNumToStrU pop eax .lessA: cmp al, 10 sbb al, 69h das stosb return endp uglobal DebugBusy dd ? endg proc DebugLock begin pushad mov ebx, 10 .loop: xor eax, eax dec eax xchg eax, [DebugBusy] test eax, eax jz .lock_ok stdcall Sleep, 10 dec ebx jnz .loop and [DebugBusy], 0 .lock_ok: popad return endp proc DebugUnlock begin and [DebugBusy], 0 return endp endmodule |
Changes to freshlib/sqlite/sqlite.asm.
1 | ;------------------------------------------------------------------- | | > > > | < | < < | | > > | > > > | > > > | > | < > | < | < < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | ;------------------------------------------------------------------- ; Procedures for convenient work with SQLite database engine. ;------------------------------------------------------------------- sqlCheckEmpty text 'select count() from sqlite_master' ;------------------------------------------------------------------- ; If the file in [.ptrFileName] exists, the function opens it. ; if the file does not exists, new database is created and the ; initialization script from [.ptrInitScript] is executed on it. ; ; Returns: ; CF: 0 - database was open successfully ; eax = 0 - Existing database was open successfuly. ; eax = 1 - New database was created and init script was executed successfully. ; eax = 2 - New database was created but init script exits with error. ; CF: 1 - the database could not be open. (error) ;------------------------------------------------------------------- proc OpenOrCreate, .ptrFileName, .ptrDatabase, .ptrInitScript .hSQL dd ? begin push edi esi ebx mov esi, [.ptrDatabase] cinvoke sqliteOpen_v2, [.ptrFileName], esi, SQLITE_OPEN_READWRITE or SQLITE_OPEN_CREATE or SQLITE_OPEN_FULLMUTEX, 0 test eax, eax jz .openok .error: stc pop ebx esi edi return .openok: xor ebx, ebx lea eax, [.hSQL] cinvoke sqlitePrepare_v2, [esi], sqlCheckEmpty, sqlCheckEmpty.length, eax, 0 cinvoke sqliteStep, [.hSQL] cinvoke sqliteColumnInt, [.hSQL], 0 push eax cinvoke sqliteFinalize, [.hSQL] pop eax test eax, eax jnz .finish inc ebx cinvoke sqliteExec, [esi], [.ptrInitScript], NULL, NULL, NULL test eax, eax jz .finish inc ebx .finish: mov eax, ebx clc pop ebx esi edi return endp |
Added freshlib/system/Dummy/clipboard.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Clipboard management library. ; ; Target OS: Dummy ; ; Dependencies: ;_________________________________________________________________________________________ ; returns eax = handle to string with the clipboard data. proc ClipboardRead begin return endp ; writes the string .hstring to the clipboard. ; returns nothing. proc ClipboardWrite, .hstring begin return endp |
Added freshlib/system/Dummy/environment.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Environment management library. OS dependent part. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ proc GetAllEnvironment begin return endp proc GetEnvVariable, .varname begin return endp |
Added freshlib/system/Dummy/files.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Files manipulation library. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ DIR_SLASH equ '\' fsFromBegin = 0 fsFromEnd = 0 fsFromCurrent = 0 ;-------------------------------------- ; if CF = 0, eax is handle to the file. ; if CF = 1, eax is error code. ;-------------------------------------- proc FileOpen, .filename begin stc return endp proc FileCreate, .filename begin stc return endp proc FileClose, .handle begin stc return endp ; returns 32bit file size in eax proc FileSize, .handle begin stc return endp proc FileRead, .handle, .buffer, .count begin stc return endp proc FileWrite, .handle, .buffer, .count begin stc return endp ;---------------------------------------------------- ; if CF = 0, eax is the new possition in the file ; if CF = 1, eax is error code. ;---------------------------------------------------- proc FileSeek, .handle, .dist, .direction begin stc return endp ;---------------------------------------------------- ; if CF = 0 - the file was deleted ; if CF = 1, eax is error code. ;---------------------------------------------------- proc FileDelete, .filename begin stc return endp proc GetCurrentDir begin return endp proc SetCurrentDir, .hDirectory begin return endp proc GetErrorString, .code begin return endp proc FreeErrorString, .ptrString begin return endp ftUnknown = 0 ftDirectory = 1 ftFile = 2 ; reads all items of the directory and fills them in the TArray of type TDirItem. ; arguments: ; dir - string with the path to the directory. ; ; returns: ; if not error: CF=0; eax = pointer to TArray of TDirItem; ; if error: CF=1; eax = error code; proc DirectoryRead, .dir begin stc return endp proc GetFileInfo, .hFile, .ptrFileInfo begin stc return endp |
Added freshlib/system/Dummy/heapmgr.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Dynamic memory management library. OS dependent part. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ; ;_________________________________________________________________________________________ proc mem.alloc_heap, .size begin stc return endp proc mem.free_heap, .block, .size begin stc return endp proc mem.realloc_heap, .heapptr, .newsize, .oldsize begin stc return endp |
Added freshlib/system/Dummy/memory.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Dynamic memory management library. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ; ;_________________________________________________________________________________________ ; Allocates memory block with given size. ; Returns: CF=1 if error. ; if CF=0, eax = pointer to the memory block allocated. proc GetMem, .size begin stc return endp proc FreeMem, .ptr begin return endp proc ResizeMem, .ptr, .newsize begin stc return endp proc SpaceAllocate, .size begin return endp |
Added freshlib/system/Dummy/network.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS dependent part of the network library. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ; ;_________________________________________________________________________________________ proc SocketCreate, .protocol_family, .socket_type, .protocol begin stc return endp proc SocketClose, .hSocket begin stc return endp proc SocketConnect, .hSocket, .pAddress begin stc return endp proc SocketBind, .hSocket, .pAddressIn begin stc return endp proc SocketListen, .hSocket, .maxPending begin stc return endp proc SocketAccept, .hSocket, .pAddress begin stc return endp proc SocketSend, .hSocket, .pBuffer, .DataLen, .flags begin stc return endp proc SocketReceive, .hSocket, .pBuffer, .BufferSize, .flags begin stc return endp proc SocketSendTo, .hSocket, .pBuffer, .DataLen, .flags, .pAddressTo begin stc return endp proc SocketReceiveFrom, .hSocket, .pBuffer, .BufferSize, .flags, .pAddressFrom begin stc return endp |
Added freshlib/system/Dummy/process.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Process management library. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct TMutex ends proc Terminate, .exit_code begin return endp ; Terminate current process ; Returns: nothing. proc TerminateAll, .exit_code begin return endp proc GetCmdArguments begin stc return endp ; Creates a new execution thread ; Returns: CF=1 if error. ; CF=0, eax = pid of the new process being created proc ThreadCreate, .ptr_to_function, .ptr_to_args begin stc return endp proc FreeThreadID, .ThreadID begin return endp ; MUTEX functions ;_________________________________________________________________________________________ proc MutexCreate, .ptrName, .ptrMutex begin return endp proc WaitForMutex, .ptrMutex, .timeout begin clc return endp proc MutexRelease, .ptrMutex begin pushf popf return endp proc MutexDestroy, .ptrMutex begin pushf popf return endp |
Added freshlib/system/Dummy/serial.asm.
> > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Serial IO interface library. Linux part. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ proc SerSetParams, .hSerial, .Baudrate, .Parity, .Flow, .Timeout begin return endp |
Added freshlib/system/Dummy/timers.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Asynchronous timer library. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ proc GetSysTime begin return endp proc GetTime begin return endp proc GetLocalTimeOffset begin return endp proc Sleep, .ms begin return endp |
Added freshlib/system/KolibriOS/environment.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Environment management library. OS dependent ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ proc GetAllEnvironment begin return endp proc GetEnvVariable, .varname begin return endp |
Added freshlib/system/KolibriOS/files.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Files manipulation library. KolibriOS part. ; ; Target OS: KolibriOS ; ; Dependencies: Uses system calls for file processing and memory.asm for memory ; allocations. ; ; Notes: ;_________________________________________________________________________________________ DIR_SLASH equ '/' DIR_SEP_PAIR equ '\/' ; for use with StrNormalizePath and StrNormalizePath2 FILE_SEARCH_ONE_ATEMPT = 10 fsFromBegin = 0 fsFromEnd = 2 fsFromCurrent = 1 faReadOnly = accessRead faWriteOnly = accessWrite faReadWrite = accessRead or accessWrite faOpenAlways = $100 ; if the file does not exists it will be created. faCreateAlways = $200 ; Creates new file always. If the file exists, truncates it. faCreateOnly = $400 ; Creates new file only if not exists, else error. fileErrorUndefinedBase = 1 fileErrorFunctionNotAvailable = 2 fileErrorUnknownFileSystem = 3 fileErrorFileNotFound = 5 fileErrorEOF = 6 fileErrorBadPointer = 7 fileErrorDiskFull = 8 fileErrorBrokenFAT = 9 fileErrorAccessDenied = 10 fileErrorDeviceError = 11 fileErrorOutOfMemory = 30 fileErrorNotExecutable = 31 fileErrorTooManyProcesses = 32 if used STDIN | used STDOUT | used STDERR | used pFileList initialize InitStdHandles begin if used STDIN | used STDOUT mov eax, [STDIO] end if if used STDIN mov dword [__std_handle_in], eax end if if used STDOUT mov dword [__std_handle_out], eax end if if used STDERR mov eax, [STDDBG] mov dword [__std_handle_err], eax end if if used ptrFileList if options.Threads stdcall MutexCreate, 0, FileMutex stdcall MutexRelease, FileMutex end if stdcall CreateArray, 4 mov [__ptr_file_list], eax end if return endp end if fattrReadOnly = 1 fattrHidden = 2 fattrSystem = 4 fattrVolume = 8 fattrDirectory= 16 fattrArchive = 32 struct __TFileInfo .attr dd ? .encoding db ? rb 3 .creation_time dd ? .creation_date dd ? .access_time dd ? .access_date dd ? .modify_time dd ? .modify_date dd ? .file_size dd ? .file_sizeH dd ? ends struct __TFileOp .subfunc dd ? .offset dd ? .flags dd ? .size dd ? .ptrBuffer dd ? .filename db 0 .ptrFilename dd ? ends struct __TFile .hFilename dd ? .pointer dd ? .access dd ? .info __TFileInfo ends uglobal if used ptrFileList FileMutex TMutex __ptr_file_list: ptrFileList dd ? end if endg body FileExists begin return endp body FileOpenAccess .op __TFileOp begin pushad stdcall GetMem, sizeof.__TFile mov esi, eax stdcall StrDup, [.filename] mov [esi+__TFile.hFilename], eax mov [esi+__TFile.pointer], 0 mov eax, [.access] mov [esi+__TFile.access], eax xor eax, eax mov [.op.offset], eax mov [.op.flags], eax mov [.op.size], eax mov [.op.filename], al lea eax, [esi+__TFile.info] mov [.op.ptrBuffer], eax stdcall StrPtr, [esi+__TFile.hFilename] mov [.op.ptrFilename], eax .read_info: mov [.op.subfunc], fsfFileInfo mov eax, sys_file_system_lfn lea ebx, [.op] int $40 cmp eax, errFileNotFound jne .file_exists ; file does not exists test [.access], faCreateAlways or faOpenAlways or faCreateOnly jz .error mov [.op.subfunc], fsfCreate mov eax, sys_file_system_lfn lea ebx, [.op] int $40 test eax, eax jnz .error ; read again the info mov [.op.subfunc], fsfFileInfo mov eax, sys_file_system_lfn lea ebx, [.op] int $40 test eax, eax jnz .error jmp .exit_ok .file_exists: test eax, eax jnz .error mov eax, errFileAlreadyExists test [.access], faCreateOnly jnz .error test [.access], faCreateAlways jz .exit_ok ; trunkate the existing file mov [.op.subfunc], fsfCreate mov eax, sys_file_system_lfn lea ebx, [.op] int $40 test eax, eax jnz .error ; read again the info mov [.op.subfunc], fsfFileInfo mov eax, sys_file_system_lfn lea ebx, [.op] int $40 test eax, eax jnz .error .exit_ok: stdcall __GetFileHandle, esi jc .error mov [esp+4*regEAX], eax clc popad return .error: stdcall StrDel, [esi+__TFile.hFilename] stdcall FreeMem, esi stc popad return endp proc __GetFileHandle, .pFileStruc begin pushad if options.Threads stdcall WaitForMutex, FileMutex, 2 jc .finish end if ; Search for first empty place. mov edx, [ptrFileList] mov ecx, FILE_SEARCH_ONE_ATEMPT ; search only limited count of items cmp ecx, [edx+TArray.count] jb @f mov ecx, [edx+TArray.count] @@: mov esi,[edx+TArray.lparam] ; from where to search xor eax,eax .search: dec ecx js .notfound inc esi cmp esi, [edx+TArray.count] jb @f xor esi,esi @@: cmp [edx+TArray.array+4*esi], eax je .found jmp .search .notfound: mov [edx+TArray.lparam], esi ; store the place where the search ends this time. mov esi, [edx+TArray.count] cmp esi, $7fff ja .error stdcall AddArrayItems, edx, 1 mov [ptrFileList], edx jmp .store .found: mov [edx+TArray.lparam], esi .store: mov eax, [.pFileStruc] mov [edx+TArray.array+4*esi], eax or esi, $00008000 mov [esp+4*regEAX], esi clc .exit: if options.Threads stdcall MutexRelease, FileMutex end if .finish: popad return .error: stc jmp .exit endp proc __GetFileStruct, .handle begin push edx if options.Threads stdcall WaitForMutex, FileMutex, 2 jc .finish end if mov eax, [.handle] and eax, $7fff mov edx, [ptrFileList] cmp eax, [edx+TArray.count] ja .error mov eax, [edx+TArray.array+4*eax] test eax, eax jz .error .exit: if options.Threads stdcall MutexRelease, FileMutex end if .finish: pop edx return .error: xor eax, eax stc jmp .exit endp ;-------------------------------------- ; if CF = 0, the file was closed. ; if CF = 1, eax is error code. ;-------------------------------------- body FileClose begin pushad if options.Threads stdcall WaitForMutex, FileMutex, 2 jc .finish end if mov eax, [.handle] cmp eax, $ffff ja .error and eax, $7fff mov edx, [ptrFileList] cmp eax, [edx+TArray.count] ja .error xor ecx, ecx xchg ecx, [edx+TArray.array+4*eax] test ecx, ecx jz .error stdcall StrDel, [ecx+__TFile.hFilename] stdcall FreeMem, ecx clc .exit: if options.Threads stdcall MutexRelease, FileMutex end if .finish: popad return .error: stc jmp .exit endp ; returns 32bit file size in eax body FileSize begin stdcall __GetFileStruct, [.handle] jc .finish mov eax, [eax+__TFile.info.file_size] clc .finish: return endp body FileRead .op __TFileOp begin push ebx esi mov esi, [.handle] cmp esi, [STDIN] je .console_read cmp esi, [STDOUT] je .console_read cmp esi, [STDERR] je .console_read stdcall __GetFileStruct, esi jc .error mov esi, eax xor eax, eax mov [.op.subfunc], eax mov [.op.flags], eax mov [.op.filename], al mov eax, [esi+__TFile.pointer] mov [.op.offset], eax mov eax, [.count] mov [.op.size], eax mov eax, [.buffer] mov [.op.ptrBuffer], eax stdcall StrPtr, [esi+__TFile.hFilename] mov [.op.ptrFilename], eax mov eax, sys_file_system_lfn lea ebx, [.op] int $40 test eax, eax jz .readok cmp eax, fileErrorEOF jne .error .readok: add [esi+__TFile.pointer], ebx mov eax, ebx clc pop esi ebx return .error: stc pop esi ebx return .console_read: cmp [.handle], 0 je .error mov esi, [.buffer] .read_loop: stdcall SocketReceive, [.handle], esi, 1, 0 jc .finish inc esi cmp byte [esi-1], $0d je .return dec [.count] jnz .read_loop .return: sub esi, [.buffer] mov eax, esi .finish: pop esi ebx return endp body FileWrite .op __TFileOp begin push ebx esi mov esi, [.handle] cmp esi, [STDIN] je .console_write cmp esi, [STDOUT] je .console_write cmp esi, [STDERR] je .console_write stdcall __GetFileStruct, esi jc .finish mov esi, eax xor eax, eax mov [.op.subfunc], 3 mov [.op.flags], eax mov [.op.filename], al mov eax, [esi+__TFile.pointer] mov [.op.offset], eax mov eax, [.count] mov [.op.size], eax mov eax, [.buffer] mov [.op.ptrBuffer], eax stdcall StrPtr, [esi+__TFile.hFilename] mov [.op.ptrFilename], eax mov eax, sys_file_system_lfn lea ebx, [.op] int $40 add ebx, [esi+__TFile.pointer] cmp [esi+__TFile.info.file_size], ebx ja @f mov [esi+__TFile.info.file_size], ebx @@: mov [esi+__TFile.pointer], ebx cmp eax, 1 cmc ; CF = 1 if eax==0; mov eax, ebx .finish: pop esi ebx return .console_write: test esi, esi jz .finish stdcall SocketSend, esi, [.buffer], [.count], 0 pop esi ebx return endp ;---------------------------------------------------- ; if CF = 0, eax is the new possition in the file ; if CF = 1, eax is error code. ;---------------------------------------------------- body FileSeek begin push esi stdcall __GetFileStruct, [.handle] jc .error mov esi, eax mov eax, [.dist] cmp [.direction], fsFromCurrent je .rel cmp [.direction], fsFromBegin je .begin cmp [.direction], fsFromEnd je .end .error: stc mov eax, [esi+__TFile.pointer] pop esi return .ok: clc pop esi return .rel: add eax, [esi+__TFile.pointer] .begin: cmp [esi+__TFile.info.file_size], eax jae @f mov eax, [esi+__TFile.info.file_size] @@: mov [esi+__TFile.pointer], eax jmp .ok .end: add eax, [esi+__TFile.info.file_size] js .error jmp .begin endp body FileTruncate .op __TFileOp begin mov [.op.subfunc], fsfSetSize return endp ;-------------------------------------- ; if CF = 0, the file was deleted. ; if CF = 1, eax is error code. ;-------------------------------------- body FileDelete .op __TFileOp begin push ebx esi xor eax, eax mov [.op.subfunc], fsfDel mov [.op.offset], eax mov [.op.size], eax mov [.op.ptrBuffer], eax mov [.op.flags], eax mov [.op.filename], al stdcall StrPtr, [.filename] mov [.op.ptrFilename], eax mov eax, sys_file_system_lfn lea ebx, [.op] int $40 cmp eax, 1 cmc pop esi ebx return endp body GetCurrentDir .buffer rb 1024 begin push ebx ecx edx mov eax, sys_current_directory mov ebx, 2 ; get current dir lea ecx, [.buffer] mov edx, 1024 int $40 stdcall StrDup, ecx push eax stdcall StrPtr, eax mov ecx, [eax+string.len] cmp ecx, 1 je @f cmp byte [eax+ecx-1], '/' jne @f dec [eax+string.len] mov dword [eax+ecx-1], 0 @@: pop eax clc pop ecx ebx return endp body SetCurrentDir begin push eax ebx ecx stdcall StrPtr, [.hDirectory] mov ecx, eax mov eax, sys_current_directory mov ebx, 1 ; set current dir int $40 clc pop ecx ebx eax return endp body GetErrorString begin mov eax, [.code] test eax, eax jz .finish cmp eax, 30 jb .normal sub eax, 30 cmp eax, 2 ja .unknown mov eax, [.error2+4*eax] jmp .finish .normal: cmp eax, 11 ja .unknown mov eax, [.error+4*eax] .finish: clc return .unknown: mov eax, cErrorUnknown jmp .finish .error dd cErrorOK, cErrorMissingBase, cErrorFnNotSupported, cErrorUnknownFS, cErrorReserved, cErrorFileNotFound, cErrorEndOfFile, cErrorBadPointer, cErrorDiskFull, cErrorBadFAT, cErrorAccessDenied, cErrorDeviceError .error2 dd cErrorOutOfMemory, cErrorNotExecutable, cErrorTooManyProcesses endp cErrorOK text 'No error.' cErrorMissingBase text 'Missing base.' ;??? cErrorFnNotSupported text 'Function not supported on this FS.' cErrorUnknownFS text 'Not supported file system.' cErrorReserved text 'Reserved error code! Kernel bug?' cErrorFileNotFound text 'File not found.' cErrorEndOfFile text 'End of file reached.' cErrorBadPointer text 'Bad buffer pointer.' cErrorDiskFull text 'Disk full.' cErrorBadFAT text 'Bad FAT.' cErrorAccessDenied text 'Access denied.' cErrorDeviceError text 'Device error.' cErrorUnknown text 'Unknown error code.' cErrorOutOfMemory text 'Out of memory.' cErrorNotExecutable text 'File is not executable.' cErrorTooManyProcesses text 'Too many processes.' body FreeErrorString begin return endp ftDirectory = 1 ftUnknown = 2 ftFile = 3 ftLinkMask = $80000000 ; reads all items of the directory and fills them in the TArray of type TDirItem. ; arguments: ; dir - string with the path to the directory. ; ; returns: ; if not error: CF=0; eax = pointer to TArray of TDirItem; ; if error: CF=1; eax = error code; body DirectoryRead .op __TFileOp rb 256 .buffer rb 1024 begin push ebx ecx edx esi edi stdcall StrDup, [.dir] mov [.dir], eax xor esi, esi ; file number stdcall CreateArray, sizeof.TDirItem mov edx, eax .loop: lea ebx, [.op] mov [.op.subfunc], fsfReadDir mov [.op.offset], esi mov [.op.flags], 0 ; ASCII mov [.op.size], 1 ; read one block lea edi, [.buffer] mov [.op.ptrBuffer], edi xor eax, eax mov ecx, 1024/4 rep stosd mov [.op.filename], 0 stdcall StrPtr, [.dir] mov [.op.ptrFilename], eax mov eax, sys_file_system_lfn int $40 test eax, eax jnz .end_read test dword [.buffer+$20], $08 ; flag volume label jnz .next lea eax, [.buffer+$48] ; filename in widechar (UTF-16) stdcall StrDup, eax ; stdcall WideCharToUtf8, eax mov ecx, eax stdcall AddArrayItems, edx, 1 mov [eax+TDirItem.hFilename], ecx mov ecx, ftDirectory test dword [.buffer+$20], $10 ; flag directory jnz @f mov ecx, ftFile @@: mov [eax+TDirItem.Type], ecx .next: inc esi jmp .loop .end_read: stdcall StrDel, [.dir] cmp esi, dword [.buffer+8] ; the count of the elements in the directory. jae .finish_ok stdcall FreeDirArray, edx xor eax, eax stc pop esi edx ecx ebx return .finish_ok: mov eax, edx ; the TArray clc pop edi esi edx ecx ebx return endp body GetFileInfo begin stc return endp proc __ConsoleWrite, .ptrData, .count begin push eax ecx esi mov esi, [.ptrData] mov ecx, [.count] .loop: test ecx, ecx jz .end_output dec ecx movzx eax, byte [esi] lea esi, [esi+1] stdcall CharOut, eax jmp .loop .end_output: pop esi ecx eax return endp body IsRelativePath ;, .hPath begin push eax stdcall StrLen, [.hPath] cmp eax, 3 jb .relative stdcall StrPtr, [.hPath] cmp byte [eax], DIR_SLASH jne .drive cmp byte [eax+1], DIR_SLASH jmp .absolute .drive: cmp byte [eax], 'A' jb .relative cmp byte [eax], 'Z' jbe .maybe_drive cmp byte [eax], 'a' jb .relative cmp byte [eax], 'Z' ja .relative .maybe_drive: cmp byte [eax+1], ':' jne .relative cmp byte [eax+2], DIR_SLASH jne .relative .absolute: clc pop eax return .relative: stc pop eax return endp body GetCurrentPrefix begin stdcall GetCurrentDir push eax stdcall StrPtr, eax and dword [eax+2], 0 mov [eax+string.len], 2 pop eax return endp |
Added freshlib/system/KolibriOS/heapmgr.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Dynamic memory management library. OS dependent part. ; ; Target OS: Dummy ; ; Dependencies: ; ; Notes: ; ;_________________________________________________________________________________________ MAX_HEAP_SIZE = $60000000 uglobal var __ptrHeapStart = ? var __HeapMaxSize = ? endg if used mem.alloc_heap initialize InitMenuetHeap begin mov eax, sys_f68 mov ebx, 11 int $40 OutputValue "The maximal heap memory size: ", eax, 10, -1 mov ecx, eax mov eax, sys_f68 mov ebx, 12 int $40 test eax, eax jz .error mov [__ptrHeapStart], eax return .error: int3 endp end if proc mem.alloc_heap ;, .size begin mov eax, [__ptrHeapStart] test eax, eax jz .error clc retn 4 .error: stc retn 4 endp proc mem.free_heap, .block, .size begin push eax ebx ecx mov eax, sys_f68 mov ebx, 13 mov ecx, [.block] int $40 clc pop ecx ebx eax return endp proc mem.realloc_heap, .heapptr, .newsize, .oldsize begin push eax ebx ecx edx mov eax, sys_f68 mov ebx, 20 mov ecx, [.newsize] mov edx, [__ptrHeapStart] int $40 cmp eax, [__ptrHeapStart] jne .error mov eax, sys_f68 mov ebx, 20 mov ecx, MAX_HEAP_SIZE mov edx, [__ptrHeapStart] int $40 cmp eax, [__ptrHeapStart] jne .error pop edx ecx ebx eax return .error: int3 endp |
Added freshlib/system/KolibriOS/memory.asm.
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Dynamic memory management library. KolibriOS part. ; ; Target OS: KolibriOS ; ; Dependencies: ; ;_________________________________________________________________________________________ include '../heapmgr.asm' |
Added freshlib/system/KolibriOS/network.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license. | ;|_______________________________________________________________________________________| ; ; Description: OS dependent part of the network library. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ; ; Author: hidnplayr, KolibriOS development team. (c)2012 ; ;_________________________________________________________________________________________ serrTimeout = EWOULDBLOCK serrAborted = ECONNABORTED body SocketCreate ;.sock dd ? ;.opt rd 4 begin push ebx ecx edx esi mov eax, sys_socket mov ebx, sockOpen mov ecx, [.protocol_family] mov edx, [.socket_type] mov esi, [.protocol] int $40 ; mov [.sock], eax ; cmp eax, -1 ; je .finish ; mov [.opt], SOL_SOCKET ; mov [.opt+4], SO_BLOCK ; mov [.opt+8], 1 ; ; mov ecx, eax ; mov eax, sys_socket ; mov ebx, sockSetOptions ; lea edx, [.opt] ; int $40 ; cmp eax, -1 ; if eax is -1, set carry flag ; je .finish ; mov eax, [.sock] .finish: cmp eax, -1 ; if eax is -1, set carry flag cmc pop esi edx ecx ebx return endp body SocketClose begin push ebx ecx mov eax, sys_socket mov ebx, sockClose mov ecx, [.hSocket] int $40 cmp eax, -1 ; if eax is -1, set carry flag cmc cmovc eax, ebx ; eax = error code. pop ecx ebx return endp body SocketConnect begin push ebx ecx edx esi mov eax, sys_socket mov ebx, sockConnect mov ecx, [.hSocket] mov edx, [.pAddress] mov esi, sizeof.TSocketAddress int $40 cmp eax, -1 ; if eax is -1, set carry flag cmc cmovc eax, ebx ; eax = error code. pop esi edx ecx ebx return endp body SocketBind begin push ebx ecx edx esi ; stdcall __InternetByteOrder, [.pAddressIn] mov eax, sys_socket mov ebx, sockBind mov ecx, [.hSocket] mov edx, [.pAddress] mov esi, sizeof.TSocketAddressIn int $40 cmp eax, -1 ; if eax is -1, set carry flag cmc cmovc eax, ebx ; eax = error code. pop esi edx ecx ebx return endp body SocketListen begin push ebx ecx edx mov eax, sys_socket mov ebx, sockListen mov ecx, [.hSocket] mov edx, [.maxPending] int $40 cmp eax, -1 ; if eax is -1, set carry flag cmc cmovc eax, ebx ; eax = error code. pop edx ecx ebx return endp body SocketAccept .dummy TSocketAddress rb 256 begin push ebx ecx edx esi mov edx, [.pAddress] mov esi, sizeof.TSocketAddress test edx, edx cmovz esi, edx ; test edx, edx ; jnz .targetok ; lea edx, [.dummy] ;.targetok: mov eax, sys_socket mov ebx, sockAccept mov ecx, [.hSocket] int $40 OutputRegister regEAX, 16 cmp eax, -1 ; if eax is -1, set carry flag cmc cmovc eax, ebx ; eax = error code. pop esi edx ecx ebx return endp body SocketSend begin push ebx ecx edx esi edi .send_loop: mov eax, sys_socket mov ebx, sockSend mov ecx, [.hSocket] mov edx, [.pBuffer] mov esi, [.DataLen] mov edi, [.flags] int $40 cmp eax, -1 ; if eax is -1, set carry flag je .error add [.pBuffer], eax sub [.DataLen], eax jnz .send_loop clc .finish: pop edi esi edx ecx ebx return .error: mov eax, ebx stc jmp .finish endp body SocketReceive begin push ebx ecx edx esi edi mov eax, sys_socket mov ebx, sockReceive mov ecx, [.hSocket] mov edx, [.pBuffer] mov esi, [.BufferSize] mov edi, [.flags] int $40 cmp eax, -1 ; if eax is -1, set carry flag cmc pop edi esi edx ecx ebx return endp body SocketSendTo begin stc return endp body SocketReceiveFrom begin stc return endp body SocketGetOption begin stc return endp body SocketSetOption .opt rd 8 begin pushad mov eax, [.idOption] mov ecx, [.Value] mov [.opt], SOL_SOCKET mov [.opt+4], eax mov [.opt+8], 1 mov [.opt+12], ecx mov eax, sys_socket mov ebx, sockSetOptions mov ecx, [.hSocket] lea edx, [.opt] int $40 cmp eax, -1 ; if eax is -1, set carry flag cmc jnc @f mov [esp+4*regEAX], ebx @@: popad return endp ; Creates pair of IPC sockets and return them in EAX and EDX ; Returns CF=1 on error. proc SocketPair begin push ebx mov eax, sys_socket mov ebx, sockPair int $40 cmp eax, -1 cmc mov edx, ebx pop ebx return endp proc __WaitForNetworkEvent begin pushad mov eax, sys_set_app_param mov ebx, $fffffffe int $40 .loop: mov eax, sys_wait_event_timeout mov ebx, 100 int $40 test eax, eax jz .timeout stdcall Output, "Event accepted: " stdcall OutputNumber, eax, 16, 8 cmp eax, 8 jne .loop popad return .timeout: DebugMsg "Timeout waiting event." jmp .loop endp |
Added freshlib/system/KolibriOS/process.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Process management library. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ struct TMutex .value dd ? .threadID dd ? .counter dd ? .reserved dd ? ends struct TThreadInfo .cpu_usage dd ? .zposWindow dw ? .nWindowSlot dw ? .reserve1 dw ? .ProcessName rb 11 .reserve2 db ? .processAddr dd ? .processSize dd ? .TID dd ? .wndPosX dd ? .wndPosY dd ? .wndSizeX dd ? .wndSizeY dd ? .ThreadState dw ? .reserve3 dw ? .ClientPosX dd ? .ClientPosY dd ? .ClientWidth dd ? .ClientHeight dd ? .WindowState db ? .EventMask dd ? .min_size = $$ - $ rb 1024 - .min_size ends struct TThreadRecord .ThreadID dd ? .ptrStack dd ? ends uglobal __ThreadList TThreadRecord rb 255*sizeof.TThreadRecord var __ThreadLock = ? endg ; This procedure should be removed. But only after the file managers and the shell ; of KolibriOS start to set the current directory properly. :) initialize InitDefaultPath begin mov esi, bufferPath mov edi, esi .len: lodsb cmp al, '/' jne @f mov edi, esi @@: test al, al jnz .len push dword [edi] mov dword [edi], 0 mov eax, sys_current_directory mov ebx, 1 mov ecx, bufferPath int $40 pop dword [edi] return endp body Terminate begin ; lock the thread list. xor eax, eax inc eax .wait_loop: xchg eax, [__ThreadLock] test eax, eax jz .locked mov eax, sys_f68 ; switch to another thread. mov ebx, 1 int $40 jmp .wait_loop .locked: DebugMsg "Thread terminate locked." mov esi, __ThreadList - sizeof.TThreadRecord mov ecx, $100 call __GetThreadID .loop: dec ecx jz .error add esi, sizeof.TThreadRecord cmp [esi+TThreadRecord.ThreadID], eax jne .loop xor ecx, ecx mov [esi+TThreadRecord.ThreadID], ecx xchg ecx, [esi+TThreadRecord.ptrStack] mov [__ThreadLock], 0 ; no need to be locked anymore. DebugMsg "Thread will be terminated now." ; free the stack mov eax, sys_f68 mov ebx, 13 int $40 ; terminate the thread mov eax,-1 ; Function -1 : close the thread int $40 .error: ; something very wrong. DebugMsg "Thread terminate error. Stop it with INT3" int3 endp ; Terminate current process ; Returns: nothing. body TerminateAll begin .wait_loop: mov eax, 1 xchg eax, [__ThreadLock] test eax, eax jz .locked mov eax, sys_f68 ; switch to another thread. mov ebx, 1 int $40 jmp .wait_loop .locked: mov esi, __ThreadList - sizeof.TThreadRecord mov edx, $100 .loop: dec edx jz .threads_ok lea esi, [esi+sizeof.TThreadRecord] cmp [esi+TThreadRecord.ThreadID], 0 je .loop mov eax, sys_system mov ebx, 18 mov ecx, [esi+TThreadRecord.ThreadID] int $40 jmp .loop ; then terminate the main thread, but what if TerminateAll is called from another thread??? .threads_ok: mov [__ThreadLock], 0 mov eax,-1 int $40 int3 endp body GetCmdArguments begin push ebx ecx edx esi stdcall CreateArray, 4 mov edx, eax stdcall StrDup, bufferPath push eax stdcall AddArrayItems, edx, 1 pop dword [eax] mov esi, bufferArguments .main_loop: mov al, [esi] test al, al jz .end_of_arg cmp al, ' ' ja .nospace inc esi jmp .main_loop .nospace: xor ah, ah cmp al, '"' jne .begin mov ah, al inc esi .begin: mov ebx, esi .argloop: mov al, [esi] test al, al jz .end_found cmp al, ah je .end_found cmp al, ' ' jbe .end_found inc esi jmp .argloop .end_found: mov ecx, esi sub ecx, ebx test al, al jz .endok test ah,ah jz .endok inc esi .endok: stdcall StrExtract, ebx, 0, ecx push eax stdcall AddArrayItems, edx, 1 pop dword [eax] jmp .main_loop .end_of_arg: mov eax, edx pop esi edx ecx ebx clc return endp ; Creates a new execution thread ; Returns: CF=1 if error. ; CF=0, eax = pid of the new process being created body ThreadCreate begin push ebx ecx edx edi .wait_loop: mov ebx, 1 xchg ebx, [__ThreadLock] test ebx, ebx jz .locked mov eax, sys_f68 ; switch to another thread. mov ebx, 1 int $40 jmp .wait_loop ; search for free slot: .locked: mov edi, __ThreadList - sizeof.TThreadRecord mov ecx, $100 xor eax, eax .loop: dec ecx jz .error ; no empty slot. lea edi, [edi+sizeof.TThreadRecord] cmp [edi+TThreadRecord.ThreadID], eax jne .loop ; edi points to the TThreadRecord structure mov eax, sys_f68 mov ebx, 12 mov ecx, STACK_SIZE int $40 test eax, eax jz .error mov [edi+TThreadRecord.ptrStack], eax lea edx, [eax + STACK_SIZE - 8] mov eax, [.ptrArguments] mov ebx, [.ptrFunction] mov [edx+4], eax mov [edx], ebx mov eax, sys_threads mov ebx, 1 ; create thread mov ecx, __CommonThreadProc int $40 cmp eax, -1 je .error DebugMsg "Thread created." mov [edi+TThreadRecord.ThreadID], eax clc .finish: mov [__ThreadLock], 0 pop edi edx ecx ebx return .error: DebugMsg "ThreadCreate ERROR!" stc jmp .finish endp proc __CommonThreadProc begin DebugMsg "Thread start!" pop eax call eax ; the argument is already in the stack. DebugMsg "Thread terminate." stdcall Terminate, eax endp body FreeThreadID begin return endp ; returns the threadID of the current thread. proc __GetThreadID .info TThreadInfo begin push ebx ecx ; what is TID? mov eax, sys_cpuusage lea ebx, [.info] mov ecx, -1 int $40 mov eax, [.info.TID] pop ecx ebx return endp ; MUTEX functions ;_________________________________________________________________________________________ body MutexCreate begin push eax ecx mov ecx, [.ptrMutex] xor eax, eax mov dword [ecx+TMutex.value], eax mov dword [ecx+TMutex.threadID], eax mov dword [ecx+TMutex.counter], 0 clc pop ecx eax return endp body WaitForMutex begin pushad mov eax, [.timeout] test eax, eax jns .compute_timeout mov ecx, -1 jmp .timeout_ok .compute_timeout: cdq mov ebx, 10 div ebx mov edx, eax ; wait_to xor ecx, ecx ; wait_to_carry mov eax, sys_getsetup mov ebx, 9 int $40 add edx, eax adc ecx, ecx .timeout_ok: call __GetThreadID mov edi, eax mov esi, [.ptrMutex] .loop: xor eax, eax inc eax lock xchg eax, [esi+TMutex.value] test eax, eax jz .lockok ; now it is locked and it was unlocked cmp [esi+TMutex.threadID], edi je .lockok ; it is locked by the same thread before. ; check the timeout test ecx, ecx js .wait_more ; the timeout is disabled. mov eax, sys_getsetup mov ebx, 9 int $40 cmp eax, edx ; is the current time above the waitto time? ja .maybetimeout xor ecx, ecx ; reset the carry. jmp .wait_more .maybetimeout: test ecx, ecx ; there is a carry in the counter. jz .error .wait_more: mov eax, sys_f68 ; switch to another thread. mov ebx, 1 int $40 jmp .loop .lockok: inc [esi+TMutex.counter] mov [esi+TMutex.threadID], edi clc popad return .error: stc popad return endp body MutexRelease begin pushf pushad stdcall __GetThreadID mov edi, eax mov esi, [.ptrMutex] cmp edi, [esi+TMutex.threadID] jne .unlock_ok cmp [esi+TMutex.counter], 0 je .dec_ok ; it is error actually, but... well... dec [esi+TMutex.counter] jnz .unlock_ok .dec_ok: mov [esi+TMutex.threadID], 0 mov [esi+TMutex.value], 0 .unlock_ok: popad popf return endp body MutexDestroy begin return endp body Exec2 begin return endp body FreeProcessID begin return endp ; DLL procedures. body LibLoad begin stc return endp body LibRelease begin stc return endp body LibImport begin stc return endp |
Added freshlib/system/KolibriOS/serial.asm.
> > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Serial IO interface library. Linux part. ; ; Target OS: Kolibri OS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ proc SerSetParams, .hSerial, .Baudrate, .Parity, .Flow, .Timeout begin stc return endp |
Added freshlib/system/KolibriOS/timers.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Asynchronous timer library. ; ; Target OS: KolibriOS ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ __sys_time_slice = 10 ;[ms] if used TimerCreate initialize __InitTimers begin mov eax, sys_threads mov ebx, 1 mov ecx, __TimerProc mov edx, __timerstack int $40 return endp finalize __StopTimers begin mov [__timer_stop], 1 .loop: mov eax, sys_f68 mov ebx, 1 int $40 cmp [__timer_stop], 0 jne .loop return endp end if proc GetTime begin push ebx ecx edx mov eax, sys_clock int $40 mov edx, eax mov ah, al and ah, $0f ; low digit and al, $f0 and dl, $f0 shr al, 1 ; *8 shr dl, 3 ; *2 add al, dl add al, ah movzx ebx, al imul ebx, 60*60 ; hours in seconds. shr edx, 8 mov ah, dl mov al, dl and ah, $0f ; low digit and al, $f0 and dl, $f0 shr al, 1 ; *8 shr dl, 3 ; *2 add al, dl add al, ah movzx eax, al imul eax, $60 ; minutes in seconds add ebx, eax shr edx, 8 mov ah, dl mov al, dl and ah, $0f ; low digit and al, $f0 and dl, $f0 shr al, 1 ; *8 shr dl, 3 ; *2 add al, dl add al, ah movzx eax, al add ebx, eax ; seconds ; here ebx contains the time of the day in seconds... ; now, compute the current date in Unix time... mov eax, sys_date int $40 mov eax, ebx pop edx ecx ebx return endp proc GetLocalTimeOffset begin xor eax, eax return endp proc Sleep, .ms begin push eax ebx ecx edx mov ecx, 10 mov eax, [.ms] cdq div ecx mov ebx, eax mov eax, sys_delay_hs int $40 pop edx ecx ebx eax return endp uglobal rd 1024 label __timerstack dword __timer_stop dd ? endg proc __TimerProc begin mov eax, sys_getsetup mov ebx, 9 int $40 mov edi, eax .main_timer_loop: cmp [__timer_stop], 0 jne .end_thread mov eax, sys_getsetup mov ebx, 9 int $40 cmp edi, eax jne .process_timers mov eax, sys_f68 mov ebx, 1 int $40 jmp .main_timer_loop .process_timers: mov ebx, eax sub ebx, edi imul ebx, __sys_time_slice mov edi, eax lea eax, [__ptrFirstTimer] .loop: mov eax, [eax+TTimer.next] .loop2: test eax, eax jz .main_timer_loop test [eax+TTimer.flags], tmfRunning jz .loop mov ecx, [eax+TTimer.value] add ecx, ebx mov [eax+TTimer.value], ecx cmp ecx, [eax+TTimer.interval] jl .loop .exploop: inc [eax+TTimer.Expired] mov ecx, [eax+TTimer.interval] sub [eax+TTimer.value], ecx cmp [eax+TTimer.value], ecx jge .exploop cmp [eax+TTimer.Callback], 0 je .end_event mov ecx, [eax+TTimer.flags] and ecx, $0f cmp ecx, tmfDoNothing je .end_event ; call the callback procedure. .execloop: pushad stdcall [eax+TTimer.Callback], eax popad sub [eax+TTimer.Expired], 1 jg .execloop .end_event: test [eax+TTimer.flags], tmfSyncDestroy jz .loop push eax mov eax, [eax+TTimer.next] ; after the destruction, this pointer will be lost. stdcall TimerDestroy ; pointer from the stack. jmp .loop2 .end_thread: mov [__timer_stop], 0 mov eax, sys_end int $40 endp |
Added freshlib/system/Linux/_process_native.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | __ThreadStackSize = 1024*1024 ; Creates a new execution thread ; Returns: CF=1 if error. ; CF=0, eax = pid of the new process being created body ThreadCreate begin push ebx ecx edx esi edi push ebp mov eax, sys_mmap2 xor ebx, ebx mov ecx, __ThreadStackSize mov edx, PROT_READ or PROT_WRITE or PROT_EXEC mov esi, MAP_ANONYMOUS or MAP_PRIVATE or MAP_STACK mov edi, -1 xor ebp, ebp int $80 pop ebp cmp eax, $ffffff00 jae .error ; set the guard page: push eax mov ebx, eax mov eax, sys_mprotect mov ecx, 4096 ; one page mov edx, PROT_NONE pop eax lea ecx, [eax+__ThreadStackSize-8-$c00] ; transfer arguments in the new stack. mov eax, [.ptrFunction] mov [ecx], eax mov eax, [.ptrArguments] mov [ecx+4], eax lea esi, [ecx+4] mov eax, sys_clone mov ebx, CLONE_SIGHAND or CLONE_THREAD or CLONE_FILES or \ CLONE_FS or CLONE_VM or CLONE_PARENT int 0x80 test eax, eax js .error jz .is_clone ; push eax ;; release the stack. ; mov eax, sys_munmap ; mov ebx, ecx ; lea ebx, [ecx-__ThreadStackSize+8] ; mov ecx, __ThreadStackSize ; int $80 ; pop eax clc pop edi esi edx ecx ebx return ; The stack is not allocated or sys_clone exits with error. .error: stc pop edi esi edx ecx ebx return ; this is the clone process - call the thread. .is_clone: pop eax call eax ; the argument is already in the stack. mov ebx, eax ; the thread procedure can return exit code. Save it in esi. ; and exit the process - the question is - how to free the stack allocated... mov eax, sys_exit int 0x80 endp ; Terminate current thread ; Returns: eax = 0 body Terminate begin mov eax, sys_exit mov ebx, [.exit_code] int $80 return endp body Exec begin return endp body FreeThreadID begin return endp ; MUTEX functions ;_________________________________________________________________________________________ MUTEX_LOCK_CONTEND = $0101 struct TMutex .value dd ? .threadID dd ? .counter dd ? .reserved dd ? ends body MutexCreate begin push eax ecx mov ecx, [.ptrMutex] xor eax, eax mov dword [ecx+TMutex.value], eax mov dword [ecx+TMutex.threadID], eax mov dword [ecx+TMutex.counter], 0 clc pop ecx eax return endp body WaitForMutex .time lnx_timespec begin pushad mov ecx, 100 ; why 100? mov ebx, [.ptrMutex] mov eax, sys_gettid int $80 mov edi, eax cmp byte [ebx+TMutex.value], 0 ; locked? je .loop1 ; no, try to get it ; if locked, check who own it cmp edi, [ebx+TMutex.threadID] je .lock_ok .loop1: mov dl, 1 xchg byte [ebx+TMutex.value], dl test dl, dl jz .lock_ok pause ; causes performance problems in the newest Intel Skylake CPU loop .loop1 ; Set up syscall details mov edx, MUTEX_LOCK_CONTEND mov ecx, FUTEX_WAIT or FUTEX_PRIVATE_FLAG xor esi, esi ; timeout jmp .check ; Wait loop .wait: mov eax, sys_futex int $80 .check: mov eax, edx xchg eax, [ebx+TMutex.value] test eax, 1 jnz .wait .lock_ok: inc [ebx+TMutex.counter] mov [ebx+TMutex.threadID], edi clc popad return .err_timeout: stc popad return endp body MutexRelease begin pushf pushad mov ebx, [.ptrMutex] mov eax, sys_gettid int $80 mov edi, eax cmp edi, [ebx+TMutex.threadID] jne .unlock_ok cmp [ebx+TMutex.counter], 0 je .dec_ok dec [ebx+TMutex.counter] jnz .unlock_ok .dec_ok: cmp dword [ebx+TMutex.value], 1 jne .unlock mov eax, 1 xor ecx, ecx lock cmpxchg [ebx+TMutex.value], ecx jz .unlock_ok .unlock: mov byte [ebx+TMutex.value], 0 ; Spin, and hope someone takes the lock mov ecx, 200 .wait: test byte [ebx], 1 jnz .unlock_ok rep nop loop .wait ; Wake up someone mov byte [ebx+1], 0 mov eax, sys_futex mov ecx, FUTEX_WAKE or FUTEX_PRIVATE_FLAG mov edx, 1 int $80 .unlock_ok: popad popf clc return endp body MutexDestroy begin return endp ; DLL procedures. body LibLoad begin stc return endp body LibRelease begin stc return endp body LibImport begin stc return endp |
Added freshlib/system/Linux/_process_posix.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | uses pthreads, libc, libdl body ThreadCreate .threadid dd ? begin push ecx edx lea eax, [.threadid] mov [.threadid], 0 cinvoke pthread_create, eax, NULL, [.ptrFunction], [.ptrArguments] test eax, eax jnz .error cinvoke pthread_detach, [.threadid] mov eax, [.threadid] clc pop edx ecx return .error: stc pop edx ecx return endp ; Terminate current thread ; Returns: eax = 0 body Terminate begin cinvoke pthread_exit, [.exit_code] return endp body FreeThreadID begin return endp ; MUTEX functions ;_________________________________________________________________________________________ ;struct TMutex ; .value dd ? ; .recursion dd ? ; .kind dd ? ; .owner dd ? ; .event dd ? ;ends struct TMutex .array rb 48 ends ;TODO: This implementation ignores the .ptrName argument and this way creates only ;private proces mutexes. body MutexCreate .attr rb 256 begin pushad lea esi, [.attr] cinvoke pthread_mutexattr_init, esi cinvoke pthread_mutexattr_settype, esi, PTHREAD_MUTEX_RECURSIVE cinvoke pthread_mutex_init, [.ptrMutex], esi cinvoke pthread_mutex_lock, [.ptrMutex] cinvoke pthread_mutexattr_destroy, esi popad return endp body WaitForMutex .time lnx_timespec begin pushad cinvoke pthread_mutex_trylock, [.ptrMutex] test eax, eax jz .finish mov eax, [.timeout] test eax, eax js .no_timeout mov eax, sys_clock_gettime mov ebx, CLOCK_REALTIME lea ecx, [.time] int $80 mov eax, [.timeout] mov ecx, 1000 cdq div ecx imul edx, 1000000 add [.time.tv_sec], eax add [.time.tv_nsec], edx cmp [.time.tv_nsec], 1000000000 jb @f sub [.time.tv_nsec], 1000000000 inc [.time.tv_sec] @@: lea eax, [.time] cinvoke pthread_mutex_timedlock, [.ptrMutex], eax test eax, eax jnz .error jmp .finish .no_timeout: cinvoke pthread_mutex_lock, [.ptrMutex] .finish: clc popad return .error: mov [esp+4*regEAX], eax stc popad return endp body MutexRelease begin pushf push eax ecx edx cinvoke pthread_mutex_unlock, [.ptrMutex] pop edx ecx eax popf return endp body MutexDestroy begin push eax ecx edx cinvoke pthread_mutex_destroy, [.ptrMutex] pop edx ecx eax return endp proc WaitForFutex, .pFutex, .value, .timeout .timeout lnx_timespec begin pushad mov eax, [.timeout] mov ecx, 1000 cdq div ecx imul edx, 1000000 mov [.timeout.tv_sec], eax mov [.timeout.tv_nsec], edx cmp [.timeout.tv_nsec], 1000000000 jb @f sub [.timeout.tv_nsec], 1000000000 inc [.timeout.tv_sec] @@: mov eax, sys_futex mov ebx, [.pFutex] mov ecx, FUTEX_WAIT mov edx, [.value] lea esi, [.timeout] cmp edx, [ebx] ; don't make system call if obvious. jne .no_wait int $80 test eax, eax jz .no_wait cmp eax, EINTR je .forced_exit .no_wait: clc popad return .forced_exit: stc popad return endp proc FutexIncValue, .pFutex begin pushad mov ebx, [.pFutex] lock inc [ebx] mov eax, sys_futex mov ecx, FUTEX_WAKE mov edx, $7fffffff int $80 popad return endp ; DLL procedures. body LibLoad begin pushad stdcall StrPtr, [.hLibName] cinvoke dlopen, eax, RTLD_LAZY test eax, eax jnz .finish not eax stc .finish: mov [esp+4*regEAX], eax popad return endp body LibRelease begin pushad cinvoke dlclose, [.hLibrary] test eax, eax jz .finish ; test clears CF! stc .finish: popad return endp body LibImport begin pushad cinvoke dlerror ; clear the error code. stdcall StrPtr, [.hObjectName] cinvoke dlsym, [.hLibrary], eax mov [esp+4*regEAX], eax cinvoke dlerror test eax, eax jz .finish stc .finish: popad return endp |
Added freshlib/system/Linux/environment.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Linux environment management library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ uglobal var _ptrEnvironment = ? endg if used _ptrEnvironment initialize LinuxEnvironmentLibrary begin lea eax, [esp+4] mov [_ptrEnvironment], eax return endp end if proc GetAllEnvironment .return dd ? begin pushad mov [.return], 0 mov eax, [_ptrEnvironment] test eax, eax jz .finish mov ecx, [eax] ; argument count lea eax, [eax+4*ecx+8] ; env table. mov esi, [eax] test esi, esi jz .finish push esi .end_loop: cmp word [esi], 0 lea esi, [esi+1] jne .end_loop stc sbb esi, [esp] lea ecx, [esi+8] stdcall GetMem, ecx mov [.return], eax mov edi, eax mov ecx, esi pop esi rep movsb xor eax, eax stosd .finish: popad mov eax, [.return] return endp proc GetEnvVariable, .varname begin push ebx ecx edx esi edi mov esi, [_ptrEnvironment] ; points to argc mov eax, [esi] ; argc lea esi, [esi+4*eax+8] ; pointer to the first env pointer. stdcall StrPtr, [.varname] mov ebx, eax .outer: mov edx, [esi] lea esi, [esi+4] test edx, edx ; last env element? jz .not_found mov edi, ebx ; ptr to name. .inner: mov al, [edx] mov ah, [edi] lea edx, [edx+1] lea edi, [edi+1] test ah, ah jnz .check_al cmp al, '=' je .found .check_al: test al, al jz .outer cmp al, ah je .inner jmp .outer .not_found: xor eax, eax stc pop edi esi edx ecx ebx return .found: stdcall StrDupMem, edx pop edi esi edx ecx ebx clc return endp |
Changes to freshlib/system/Linux/files.asm.
|
| | | < < | | < < < < < > | < > | > > | > | < < | > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Files manipulation library. Linux part. ; ; Target OS: Linux ; ; Dependencies: Uses system calls for file processing and memory.asm for memory ; allocations. ; ; Notes: ;_________________________________________________________________________________________ uses libc DIR_SLASH equ '/' DIR_SEP_PAIR equ '/\' ; for use with StrNormalizePath and StrNormalizePath2 fsFromBegin = 0 fsFromCurrent = 1 fsFromEnd = 2 faReadOnly = O_RDONLY faWriteOnly = O_WRONLY faReadWrite = O_RDWR faOpenAlways = O_CREAT ; if the file does not exists it will be created. faCreateAlways = O_CREAT or O_TRUNC ; Creates new file always. If the file exists, truncates it. faCreateOnly = O_CREAT or O_EXCL ; Creates new file only if not exists, else error. faNonBlocking = O_NONBLOCK lockExclusive = LOCK_EX lockShared = LOCK_SH lockUnlock = LOCK_UN lockTryOnly = LOCK_NB if used STDIN | used STDOUT | used STDERR initialize InitStdHandles begin if used STDIN mov dword [__std_handle_in], 0 end if if used STDOUT mov dword [__std_handle_out], 1 end if if used STDERR mov dword [__std_handle_err], 2 end if return endp end if body FileOpenAccess begin push edx ecx ebx if defined ptrStrTable stdcall StrPtr, [.filename] mov ebx, eax else mov ebx, [.filename] end if mov eax, sys_open mov ecx, [.access] mov edx, S_IRUSR+S_IWUSR+S_IRGRP+S_IWGRP+S_IROTH int $80 cmp eax, -1 jle .error clc pop ebx ecx edx return .error: neg eax if defined options.DebugMode & options.DebugMode stdcall __FileErrorDisplay, eax, [.filename] end if stc pop ebx ecx edx return endp ;-------------------------------------- ; if CF = 0, the file was closed. ; if CF = 1, eax is error code. ;-------------------------------------- body FileClose begin push ebx mov eax, sys_close mov ebx, [.handle] int $80 cmp eax, -1 jle .error clc pop ebx return .error: neg eax stc pop ebx return endp body FileLock begin push eax ebx ecx mov ebx, [.handle] mov eax, sys_flock mov ecx, [.lock] int $80 shl eax, 1 ; CF = 1 if eax<0 pop ecx ebx eax return endp ; returns 32bit file size in eax body FileSize .stat STAT begin push edx ecx ebx mov eax, sys_newfstat mov ebx, [.handle] lea ecx, [.stat] int $80 cmp eax, -1 jle .error mov eax, [.stat.st_size] clc pop ebx ecx edx return .error: neg eax stc pop ebx ecx edx return endp body FileRead begin push edx ecx ebx mov eax, sys_read mov ebx, [.handle] mov ecx, [.buffer] mov edx, [.count] int $80 cmp eax, -1 jle .error clc pop ebx ecx edx return .error: neg eax stc pop ebx ecx edx return endp body FileWrite begin push edx ecx ebx mov eax, sys_write mov ebx, [.handle] mov ecx, [.buffer] mov edx, [.count] int $80 cmp eax, -1 jle .error clc pop ebx ecx edx return .error: neg eax stc pop ebx ecx edx return endp ;---------------------------------------------------- ; if CF = 0, eax is the new possition in the file ; if CF = 1, eax is error code. ;---------------------------------------------------- body FileSeek begin push edx ecx ebx mov eax,sys_lseek mov ebx,[.handle] mov ecx,[.dist] mov edx,[.direction] int $80 cmp eax,-1 jle .error clc pop ebx ecx edx return .error: neg eax stc pop ebx ecx edx return endp body FileTruncate begin push edx ecx ebx mov eax, sys_lseek mov ebx, [.handle] xor ecx, ecx mov edx, fsFromCurrent int $80 cmp eax, -1 jle .error mov ecx, eax mov eax, sys_ftruncate mov ebx, [.handle] int $80 cmp eax,-1 jle .error clc pop ebx ecx edx return .error: neg eax stc pop ebx ecx edx return endp body FileTruncateTo ; , .handle, .length begin push edx ecx ebx mov eax, sys_ftruncate mov ecx, [.length] mov ebx, [.handle] int $80 cmp eax,-1 jle .error clc pop ebx ecx edx return .error: neg eax stc pop ebx ecx edx return endp ;-------------------------------------- ; if CF = 0, the file was deleted. ; if CF = 1, eax is error code. ;-------------------------------------- body FileDelete begin push ebx if defined ptrStrTable stdcall StrPtr, [.filename] mov ebx, eax else mov ebx, [.filename] end if mov eax,sys_unlink int $80 cmp eax,-1 jle .error clc pop ebx return .error: neg eax stc pop ebx return endp body GetCurrentDir .buffer rb 1024 begin push ebx ecx mov eax, sys_getcwd lea ebx, [.buffer] mov ecx, 1024 int $80 cmp eax, -1 jle .error stdcall StrDupMem, ebx clc pop ecx ebx return .error: neg eax stc pop ecx ebx return endp body SetCurrentDir begin push ebx eax stdcall StrPtr, [.hDirectory] mov ebx, eax mov eax, sys_chdir int $80 clc test eax, eax jns .finish neg eax stc .finish: pop eax ebx return endp body GetErrorString .buffer rb 1024 begin push ecx edx lea eax, [.buffer] cinvoke strerror_r, [.code], eax, 1024 test eax, eax jnz @f lea eax, [.buffer] @@: stdcall StrDupMem, eax pop edx ecx clc return endp body FreeErrorString begin stdcall StrDel, [.ptrString] return endp ftDirectory = DT_DIR ftUnknown = DT_UNKNOWN ftFile = DT_REG ftSock = DT_SOCK ftLinkMask = $80000000 ; reads all items of the directory and fills them in the TArray of type TDirItem. ; arguments: ; dir - string with the path to the directory. ; ; returns: ; if not error: CF=0; eax = pointer to TArray of TDirItem; ; if error: CF=1; eax = error code; body DirectoryRead .size dd ? .stat STAT64 begin push ebx ecx edx esi edi stdcall GetMem, 1024 mov esi, eax stdcall CreateArray, sizeof.TDirItem mov edi, eax ; open the file if defined ptrStrTable stdcall StrPtr, [.dir] mov ebx, eax else mov ebx, [.dir] end if mov eax, sys_open mov ecx, O_RDONLY or O_DIRECTORY mov edx, S_IWUSR+S_IWGRP+S_IWOTH int $80 test eax, eax js .error mov ebx, eax .read_loop: mov eax, sys_getdents64 mov ecx, esi mov edx, 1024 int $80 ; process read information test eax, eax jz .end_of_directory js .error mov [.size], eax xor ecx, ecx .buffer_parse: lea eax, [esi+ecx+linux_dirent64.d_name] stdcall StrDup, eax push eax stdcall AddArrayItems, edi, 1 mov edi, edx pop [eax+TDirItem.hFilename] movzx edx, byte [esi+ecx+linux_dirent64.d_type] call .get_file_details movzx edx, word [esi+ecx+linux_dirent64.d_reclen] add ecx, edx cmp ecx, [.size] jb .buffer_parse jmp .read_loop .end_of_directory: mov eax, sys_close int $80 stdcall FreeMem, esi mov eax, edi pop edi esi edx ecx ebx clc return .error: stdcall FreeMem, esi neg eax pop edi esi edx ecx ebx stc return .get_file_details: push ecx edx esi edi mov edi, eax ; TDirItem stdcall StrPtr, [eax+TDirItem.hFilename] mov ecx, eax mov eax, sys_fstatat64 lea edx, [.stat] xor esi, esi int $80 test eax, eax jnz .end_file mov eax, [.stat.st_mode] mov [edi+TDirItem.Perm], eax mov edx, [esp+8] cmp edx, DT_LNK jne .type_ok mov edx, [.stat.st_mode] shr edx, 12 or edx, ftLinkMask .type_ok: mov [edi+TDirItem.Type], edx mov eax, dword [.stat.st_size] mov edx, dword [.stat.st_size+4] mov dword [edi+TDirItem.Size], eax mov dword [edi+TDirItem.Size+4], edx mov eax, [.stat.st_mtime] xor edx, edx mov dword [edi+TDirItem.mTime], eax mov dword [edi+TDirItem.mTime+4], edx .end_file: pop edi esi edx ecx retn endp body CreateDirectory begin pushad if defined ptrStrTable stdcall StrPtr, [.DirName] mov ebx, eax else mov ebx, [.DirName] end if mov eax, sys_mkdir mov ecx, 755o int $80 cmp eax, -1 jle .error clc popad return .error: neg eax mov [esp+4*regEAX], eax stc popad return endp body GetFileInfo .fstat STAT begin push edi ebx ecx eax lea edi, [.fstat] mov ecx, sizeof.STAT / 4 xor eax, eax rep stosd mov eax, sys_newfstat mov ebx, [.hFile] lea ecx, [.fstat] int $80 test eax, eax jnz .error lea ecx, [.fstat] mov ebx, [.ptrFileInfo] mov eax, [ecx+STAT.st_atime] cdq mov dword [ebx+TFileInfo.timeAccessed], eax mov dword [ebx+TFileInfo.timeAccessed+4], edx mov eax, [ecx+STAT.st_mtime] cdq mov dword [ebx+TFileInfo.timeModified], eax mov dword [ebx+TFileInfo.timeModified+4], edx ; linux does not support creation time, so we set it as the modified time. mov dword [ebx+TFileInfo.timeCreated], eax mov dword [ebx+TFileInfo.timeCreated+4], edx pop eax ecx ebx edi clc return .error: neg eax mov [esp], eax pop eax ecx ebx edi stc return endp ; Returns: ; CF=1 if the file NOT EXISTS ; CF=0 if the file EXISTS body FileExists .fstat STAT begin pushad lea edi, [.fstat] mov ecx, sizeof.STAT / 4 xor eax, eax rep stosd if defined ptrStrTable stdcall StrPtr, [.hFileName] mov ebx, eax else mov ebx, [.hFileName] end if mov eax, sys_newstat lea ecx, [.fstat] int 80h test eax, eax jz .exists ; error stc popad return .exists: clc popad return endp body CreatePipe .hRead dd ? .hWrite dd ? begin push ebx mov eax, sys_pipe lea ebx, [.hRead] int $80 neg eax jnz .err clc mov eax, [.hRead] mov edx, [.hWrite] pop ebx return .err: stc pop ebx return endp flushInput = 0 flushOutput = 1 flushInputOutput = 2 TCFLSH = $540B ; Linux constant. proc TerminalFlush, .hFile, .flush_what begin pushad mov eax, sys_ioctl mov ebx, [.hFile] mov ecx, TCFLSH mov edx, [.flush_what] int $80 mov [esp+4*regEAX], eax bt eax, 31 ; if negative - error popad return endp body IsRelativePath ;, .hPath begin push eax stdcall StrLen, [.hPath] test eax, eax jz .relative stdcall StrPtr, [.hPath] cmp byte [eax], DIR_SLASH clc je .finish .relative: stc ; relative! .finish: pop eax return endp body GetCurrentPrefix begin stdcall StrNew return endp |
Added freshlib/system/Linux/heapmgr.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | ;this is internal procedure to be used with heap manager's mem.init. ;Don't call this procedure directly. ;; @name mem.alloc_heap ;; @desc ;; This is internal procedure of heap manager, that handles ;; platform-dependent aspect of allocating entire heap. ;; Do not call this procedure. ;; @arg size ;; Initial size of heap to allocate. ;; @ret ;; CF set on error, otherwise ;; EAX = pointer to allocated memory block ;; @err ERR_OUT_OF_MEM ;; Not enough memory ;; @err ERR_ZERO_SIZE ;; size = 0 ;; @err ERR_OUT_OF_RANGE ;; size is negative (or larger than 7FFFFFFFh if viewed as unsigned) ;; @err ERR_UNKNOWN ;; System returned error that wasn't translated to FASMLIB error. ;; You can {contact} author about this, and translation can be added. ;; @warn Don't call this procedure! ;; @note Returned pointer is always >= 10000h to make it easily distinguishable from handles. ;; @note This procedure is used only on platforms where FASM heap manager is used. proc mem.alloc_heap, .size begin push ebx ecx ;error if size=0 cmp [.size], 0 je .error_size_zero ;error is size>=80000000h cmp [.size], 70000000h ja .error_size_too_big ;call brk(0) to find beginning of heap xor ebx, ebx mov eax, sys_brk int 80h cmp eax, -4096 ja .error_brk mov ecx, eax ;call brk(ecx+.size) to set up heap size mov ebx, ecx add ebx, [.size] mov eax, sys_brk int 80h cmp eax, -4096 ja .error_brk ;return address of heap mov eax, ecx .rnc: clc .r: pop ecx ebx return .rc: stc jmp .r .error_brk: ;catch out-of-memory cmp eax, -12 ;ENOMEM jne @f mov eax, ERR_OUT_OF_MEM jmp .rc @@: mov eax, ERR_UNKNOWN jmp .rc .error_size_zero: mov eax, ERR_ZERO_SIZE jmp .rc .error_size_too_big: mov eax, ERR_OUT_OF_RANGE jmp .rc endp ;internal procedure to be used with heap manager's mem.init. ;Don't call this procedure directly. ;; @name mem.realloc_heap ;; @desc ;; This is internal procedure of heap manager, that handles ;; platform-dependent aspect of resizing entire heap. ;; Do not call this procedure. ;; @arg heapptr ;; Pointer to heap block returned by {mem.alloc_heap} or by this procedure. ;; @arg oldsize ;; Current size of heap. Must be provided by caller. ;; @arg newsize ;; Desired size of heap. ;; @ret ;; CF set on error, otherwise ;; EAX = heapptr ;; @err ERR_INVALID_POINTER ;; Heap pointer is invalid ;; @err ERR_OUT_OF_MEM ;; Not enough memory ;; @err ERR_ZERO_SIZE ;; newsize = 0 ;; @err ERR_OUT_OF_RANGE ;; size is negative (or larger than 7FFFFFFFh if viewed as unsigned) ;; @err ERR_UNKNOWN ;; System returned error that wasn't translated to FASMLIB error. ;; You can {contact} author about this, and translation can be added. ;; @warn Don't call this procedure! ;; @warn Heap cannot be moved during resizing. ;; @note Data in heap must be preserved. ;; @note If block is enlarging, then contents of added memory are unknown proc mem.realloc_heap, .heapptr, .newsize, .oldsize begin push ebx ;call sys_brk(blockptr) mov ebx, [.heapptr] ;pointer to block add ebx, [.newsize] mov eax, sys_brk ;sys_brk int 80h ;check error cmp eax, -4096 ja .error_brk .rnc: clc .r: pop ebx return .rc: stc jmp .r .error_brk: ;catch invalid block pointer cmp eax, -22 ;EINVAL jne @f mov eax, ERR_INVALID_POINTER jmp .rc @@: ;catch out-of-memory cmp eax, -12 ;ENOMEM jne @f mov eax, ERR_OUT_OF_MEM jmp .rc @@: mov eax, ERR_UNKNOWN jmp .rc .error_newsize_zero: mov eax, ERR_ZERO_SIZE jmp .rc .error_newsize_too_big: mov eax, ERR_OUT_OF_RANGE jmp .rc endp ;internal procedure to be used with heap manager's mem.init. ;Don't call this procedure directly. ;; @name mem.free_heap ;; @desc ;; This is internal procedure of heap manager, that handles ;; platform-dependent aspect of deallocating entire heap. ;; Do not call this procedure. ;; @arg heapptr ;; Pointer to heap, returned by {mem.alloc_heap} or {mem.realloc_heap}. ;; @arg heapsize ;; Current size of heap. Must be provided by caller. ;; @err ERR_INVALID_POINTER ;; Heap pointer is invalid ;; @err ERR_UNKNOWN ;; System returned error that wasn't translated to FASMLIB error. ;; You can {contact} author about this, and translation can be added. proc mem.free_heap, .heapptr, .heapsize begin push ebx ecx ;call sys_brk(heapptr) mov ebx, [.heapptr] ;pointer to block mov eax, sys_brk int 80h ;check error cmp eax, -4096 ja .error_brk clc .r: pop ecx ebx return .error_brk: ;catch invalid block pointer cmp eax, -22 ;EINVAL jne @f mov eax, ERR_INVALID_POINTER stc jmp .r @@: mov eax, ERR_UNKNOWN stc jmp .r endp |
Changes to freshlib/system/Linux/memory.asm.
|
| | | < < | | < < < < < > | < < < < < < < | > | < < < | | > > > > | | | > < | | < | > > > < > | > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Dynamic memory management library. Linux part. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Uses libc (malloc etc.) heap management functions. ;_________________________________________________________________________________________ uses libc body GetMem begin pushad mov ebx, [.size] add ebx, 3 and bl, $fc ; align to dword. cinvoke malloc, ebx test eax, eax jz .error mov [esp+4*regEAX], eax cld mov edi, eax mov ecx, ebx shr ecx, 2 xor eax, eax rep stosd clc popad return .error: stc popad return endp body FreeMem begin cmp [.ptr], 0 je @f pushad cinvoke free, [.ptr] popad @@: return endp body ResizeMem begin push ebx ecx edx esi edi mov ebx, [.newsize] add ebx, 3 and bl, $fc ; align to dword. cinvoke realloc, [.ptr], ebx test eax, eax jz .error clc pop edi esi edx ecx ebx return .error: stc pop edi esi edx ecx ebx return endp if used SpaceAllocate & ~ used GetMem initialize ReserveAddressSpace begin mov eax, sys_brk xor ebx, ebx int $80 mov [_MemoryFreeSpace], eax return endp end if body SpaceAllocate begin push ebx mov eax, sys_brk mov ebx, [_MemoryFreeSpace] add ebx, [.size] int $80 pop ebx return endp |
Added freshlib/system/Linux/network.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS dependent part of the network library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ uses libc serrAccess = EACCES serrNoMemory = ENOMEM serrProtocolNotSupported= EPROTONOSUPPORT serrAddessInUse = EADDRINUSE serrNotASocket = ENOTSOCK serrWouldBlock = EWOULDBLOCK serrBadSocket = EBADF serrConnRefused = ECONNREFUSED serrConnReset = ECONNRESET serrDestAddrReq = EDESTADDRREQ serrInvalidAddress = EFAULT serrInterrupt = EINTR serrInvalidArgument = EINVAL serrIsConnected = EISCONN serrTimeout = EWOULDBLOCK serrAborted = EINVAL proc __SocketError begin test eax, eax jns .no_error neg eax stc return .no_error: clc return endp body SocketCreate begin push ebx ecx edx mov eax, sys_socketcall mov ebx, SYS_SOCKET lea ecx, [.protocol_family] int $80 call __SocketError pop edx ecx ebx return endp body SocketShutDown .sock dd ? .dir dd ? begin push ebx ecx edx push [.hSocket] pop [.sock] mov [.dir], SHUT_RDWR mov eax, sys_socketcall mov ebx, SYS_SHUTDOWN lea ecx, [.sock] int $80 call __SocketError pop edx ecx ebx return endp body SocketClose .params rd 2 .buffer rb 256 begin push ebx ecx edx push [.hSocket] pop [.params] mov [.params+4], SHUT_RDWR mov eax, sys_socketcall mov ebx, SYS_SHUTDOWN lea ecx, [.params] int $80 call __SocketError jc .finish .loop: lea ecx, [.buffer] stdcall SocketReceive, [.hSocket], ecx, 256, 0 jc .finish test eax, eax jnz .loop .finish: mov eax, sys_close mov ebx, [.hSocket] int $80 call __SocketError pop edx ecx ebx return endp body SocketConnect .socket dd ? .paddr dd ? .addrsize dd ? begin push ebx ecx edx mov eax, [.hSocket] mov ebx, [.pAddress] mov [.socket], eax mov [.paddr], ebx mov ecx, sizeof.TSocketAddressIn cmp [ebx+TSocketAddress.saFamily], AF_INET je .do_connect mov ecx, sizeof.TSocketAddressIn6 cmp [ebx+TSocketAddress.saFamily], AF_INET6 je .do_connect mov eax, -EINVAL cmp [ebx+TSocketAddress.saFamily], AF_UNIX jne .finish mov ecx, sizeof.TSocketAddressUn .do_connect: mov [.addrsize], ecx mov eax, sys_socketcall mov ebx, SYS_CONNECT lea ecx, [.socket] int $80 .finish: call __SocketError pop edx ecx ebx return endp body SocketBind .socket dd ? .paddr dd ? .addrsize dd ? begin push ebx ecx edx mov eax, [.hSocket] mov ebx, [.pAddress] mov [.socket], eax mov [.paddr], ebx mov ecx, sizeof.TSocketAddressIn cmp [ebx+TSocketAddress.saFamily], AF_INET je .do_bind mov ecx, sizeof.TSocketAddressIn6 cmp [ebx+TSocketAddress.saFamily], AF_INET6 je .do_bind mov eax, -EINVAL cmp [ebx+TSocketAddress.saFamily], AF_UNIX jne .finish mov ecx, sizeof.TSocketAddressUn .do_bind: mov [.addrsize], ecx mov eax, sys_socketcall mov ebx, SYS_BIND lea ecx, [.socket] int $80 .finish: call __SocketError pop edx ecx ebx return endp body SocketListen begin push ebx ecx edx mov eax, sys_socketcall mov ebx, SYS_LISTEN lea ecx, [.hSocket] int $80 call __SocketError pop edx ecx ebx return endp body SocketAccept .sock dd ? .addr dd ? .plen dd ? .addrlen dd ? begin push ebx edx mov eax, [.hSocket] lea ebx, [.addrlen] mov ecx, [.pAddress] mov edx, sizeof.TSocketAddressIn test ecx, ecx cmovz edx, ecx mov [.sock], eax mov [.plen], ebx mov [.addr], ecx mov [.addrlen], edx mov eax, sys_socketcall mov ebx, SYS_ACCEPT lea ecx, [.sock] int $80 call __SocketError mov ecx, [.addrlen] pop edx ebx return endp body SocketSend begin push ebx ecx edx or [.flags], MSG_NOSIGNAL mov eax, sys_socketcall mov ebx, SYS_SEND lea ecx, [.hSocket] int $80 call __SocketError pop edx ecx ebx return endp body SocketReceive begin push ebx ecx edx mov eax, sys_socketcall mov ebx, SYS_RECV lea ecx, [.hSocket] int $80 call __SocketError pop edx ecx ebx return endp body SocketSendTo .sock dd ? .buff dd ? .len dd ? .flgs dd ? .addr dd ? .alen dd ? begin push ebx ecx edx lea ecx, [.sock] mov edx, 16 .copy: mov eax, [.hSocket+4*edx] mov [ecx+4*edx], eax dec edx jns .copy mov [.alen], sizeof.TSocketAddress mov eax, sys_socketcall mov ebx, SYS_SENDTO int $80 call __SocketError pop edx ecx ebx return endp body SocketReceiveFrom .sock dd ? .buff dd ? .len dd ? .flgs dd ? .addr dd ? .alen dd ? begin push ebx edx lea ecx, [.sock] mov edx, 16 .copy: mov eax, [.hSocket+4*edx] mov [ecx+4*edx], eax dec edx jns .copy mov [.alen], sizeof.TSocketAddress mov eax, sys_socketcall mov ebx, SYS_RECVFROM int $80 call __SocketError mov ecx, [.alen] pop edx ebx return endp body SocketGetOption .socket dd ? .level dd ? .option dd ? .ptr_buffer dd ? .ptr_size dd ? .ret_size dd ? .buffer rd 4 begin push ebx ecx edx mov eax, [.hSocket] mov ebx, [.idOption] lea ecx, [.buffer] mov [.socket], eax mov [.level], SOL_SOCKET mov [.option], ebx mov [.ptr_buffer], ecx lea eax, [.ret_size] mov [.ptr_size], eax mov [.ret_size], 16 mov eax, sys_socketcall mov ebx, SYS_GETSOCKOPT lea ecx, [.socket] int $80 call __SocketError jc .finish cmp [.idOption], soSendTimeout je .timeouts cmp [.idOption], soRecvTimeout je .timeouts cmp [.idOption], soLinger je .linger mov eax, [.buffer] clc .finish: pop edx ecx ebx return .timeouts: mov eax, [.buffer+lnx_timeval.tv_usec] cdq mov ecx, 1000 idiv ecx mov edx, [.buffer+lnx_timeval.tv_sec] imul edx, 1000 add eax, edx clc jmp .finish .linger: mov eax, [.buffer] ; linger flag test eax, eax jz .finish mov eax, [.buffer+4] clc jmp .finish endp body SocketSetOption .socket dd ? .level dd ? .option dd ? .ptr_buffer dd ? .buf_size dd ? .buffer rd 4 begin push ebx ecx edx mov eax, [.hSocket] mov ebx, [.idOption] lea ecx, [.buffer] mov [.socket], eax mov [.level], SOL_SOCKET mov [.option], ebx mov [.ptr_buffer], ecx cmp ebx, soRecvTimeout je .timeouts cmp ebx, soSendTimeout jne .not_timeout .timeouts: mov eax, [.Value] ; time in [ms] cdq mov ecx, 1000 div ecx imul edx, 1000 ; in [us] lea ecx, [.buffer] mov [ecx+lnx_timeval.tv_sec], eax ; the seconds. mov [ecx+lnx_timeval.tv_usec], edx ; the microseconds. mov [.buf_size], sizeof.lnx_timeval jmp .call_socket .not_timeout: cmp ebx, soLinger jne .not_linger mov eax, [.Value] mov [.buffer], eax mov [.buffer+4], eax mov [.buf_size], 8 jmp .call_socket .not_linger: mov eax, [.Value] mov [.buffer], eax mov [.buf_size], 4 .call_socket: mov eax, sys_socketcall mov ebx, SYS_SETSOCKOPT lea ecx, [.socket] int $80 call __SocketError pop edx ecx ebx return endp struct TAddrInfo .flags dd ? .family dd ? .sock_type dd ? .protocol dd ? .addrlen dd ? .p_sock_addr dd ? .p_canonname dd ? .p_next dd ? ; next addrinfo structure. ends ; returns the IP address of some domain in EAX body ResolveDomainIP;, .hDomain .result dd ? begin pushad stdcall StrPtr, [.hDomain] lea ecx, [.result] mov edi, esp and esp, $fffffff0 cinvoke getaddrinfo, eax, 0, 0, ecx mov esp, edi test eax, eax jnz .error mov esi, [.result] .loop: test esi, esi jz .not_found cmp [esi+TAddrInfo.family], AF_INET jne .next cmp [esi+TAddrInfo.sock_type], SOCK_STREAM jne .next cmp [esi+TAddrInfo.protocol], IPPROTO_TCP jne .next cmp [esi+TAddrInfo.addrlen], sizeof.TSocketAddressIn je .found .next: mov esi, [esi+TAddrInfo.p_next] jmp .loop .end_loop: .found: mov edx, [esi+TAddrInfo.p_sock_addr] mov eax, [edx+TSocketAddressIn.saAddress] bswap eax mov [esp+4*regEAX], eax clc .finish: pushf cinvoke freeaddrinfo, [.result] popf .exit: ; mov esp, [.stack] popad return .not_found: stc jmp .finish .error: stc jmp .exit endp body ResolveDomainIP6;, .hDomain .result dd ? begin pushad stdcall StrPtr, [.hDomain] lea ecx, [.result] mov edi, esp and esp, $fffffff0 cinvoke getaddrinfo, eax, 0, 0, ecx mov esp, edi test eax, eax jnz .error mov esi, [.result] .loop: test esi, esi jz .not_found cmp [esi+TAddrInfo.family], AF_INET6 jne .next cmp [esi+TAddrInfo.sock_type], SOCK_STREAM jne .next cmp [esi+TAddrInfo.protocol], IPPROTO_TCP jne .next cmp [esi+TAddrInfo.addrlen], sizeof.TSocketAddressIn6 je .found .next: mov esi, [esi+TAddrInfo.p_next] jmp .loop .end_loop: .found: mov edx, [esi+TAddrInfo.p_sock_addr] mov eax, [edx+TSocketAddressIn6.saAddress.addr32] mov ebx, [edx+TSocketAddressIn6.saAddress.addr32+4] mov ecx, [edx+TSocketAddressIn6.saAddress.addr32+8] mov edx, [edx+TSocketAddressIn6.saAddress.addr32+12] mov [esp+4*regEAX], eax mov [esp+4*regEBX], ebx mov [esp+4*regECX], ecx mov [esp+4*regEDX], edx clc .finish: pushf cinvoke freeaddrinfo, [.result] popf .exit: ; mov esp, [.stack] popad return .not_found: stc jmp .finish .error: stc jmp .exit endp |
Added freshlib/system/Linux/process.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Process management library. Linux part ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ ; Terminate all process threads body TerminateAll begin mov eax, sys_exit_group mov ebx, [.exit_code] int $80 return endp body SetForcedTerminateHandler .action lnx_sigaction begin pushad mov eax, [.procHandler] mov [__UserSignalsProc], eax mov [.action.sa_handler], __TerminateSignalsHandler mov [.action.sa_sigaction], 0 mov [.action.sa_mask], 0 mov [.action.sa_flags], 0 mov [.action.sa_restorer], 0 mov eax, sys_sigaction mov ebx, SIGTERM lea ecx, [.action] xor edx, edx int $80 mov eax, sys_sigaction mov ebx, SIGINT lea ecx, [.action] xor edx, edx int $80 mov eax, sys_sigaction mov ebx, SIGQUIT lea ecx, [.action] xor edx, edx int $80 mov eax, sys_sigaction mov ebx, SIGHUP lea ecx, [.action] xor edx, edx int $80 mov eax, sys_sigaction mov ebx, SIGUSR1 lea ecx, [.action] xor edx, edx int $80 popad return endp uglobal __UserSignalsProc dd ? __MemoryFault dd ? endg proc __TerminateSignalsHandler, .signal begin pushad DebugMsg "Terminating event received!" cmp [__UserSignalsProc], 0 je .finish stdcall [__UserSignalsProc], [.signal] .finish: popad cret endp body GetCmdArguments begin push ecx edx esi mov esi, [_ptrEnvironment] mov ecx, [esi] add esi, 4 stdcall CreateArray, 4 mov edx, eax jecxz .array_ok stdcall AddArrayItems, eax, ecx .array_ok: push edx jecxz .arg_ok lea edx, [edx+TArray.array] .loop: lodsd stdcall StrDupMem, eax mov [edx], eax add edx, 4 loop .loop .arg_ok: pop eax pop esi edx ecx return endp proc SetSegmentationFaultHandler, .procHandler .action lnx_sigaction begin pushad mov eax, [.procHandler] mov [__MemoryFault], eax mov [.action.sa_handler], __ExceptionHandler mov [.action.sa_sigaction], 0 mov [.action.sa_mask], 0 mov [.action.sa_flags], 0 mov [.action.sa_restorer], 0 mov eax, sys_sigaction mov ebx, SIGSEGV lea ecx, [.action] xor edx, edx int $80 popad return endp if used __ExceptionHandler __reg_names db 'eax', sig_context.eax db 'ebx', sig_context.ebx db 'ecx', sig_context.ecx db 'edx', sig_context.edx db 'esi', sig_context.esi db 'edi', sig_context.edi db 'ebp', sig_context.ebp db 'esp', sig_context.esp dd 0 __ExceptionHandler: lea esi, [esp+8] ; the start of sig_context structure. stdcall GetCmdArguments mov edx, eax stdcall StrSplitFilename, [edx+TArray.array] stdcall StrDel, eax stdcall StrCat, [edx+TArray.array], "fault.txt" stdcall FileOpenAccess, [edx+TArray.array], faCreateAlways or faWriteOnly mov ebx, eax stdcall ListFree, edx, StrDel ; Write the registers to the file: mov edi, __reg_names .reg_loop: cmp byte [edi], 0 je .dump_stack stdcall FileWrite, ebx, edi, 3 stdcall FileWrite, ebx, txt " = ", 3 movzx eax, byte [edi+3] stdcall NumToStr, [esi + eax], ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall FileWriteString, ebx, eax stdcall FileWriteString, ebx, <txt 13, 10> add edi, 4 jmp .reg_loop ; Write the stack backtrace to the file: .dump_stack: stdcall FileWriteString, ebx, <txt 13, 10> mov eax, [esi+sig_context.eip] stdcall NumToStr, eax, ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall FileWriteString, ebx, eax stdcall FileWriteString, ebx, <txt 13, 10, 13, 10> lea ebp, [esi+sig_context.ebp] .loop: cmp dword [ebp], 0 cmove eax, [ebp+8] cmovne ebp, [ebp] cmovne eax, [ebp+4] ; return address cmove ebp, [ebp] stdcall NumToStr, eax, ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall FileWriteString, ebx, eax stdcall FileWriteString, ebx, <txt 13, 10> test ebp, ebp jz .finish cmp dword [ebp+4], $b0000000 jb .loop .finish: stdcall FileClose, ebx cmp [__MemoryFault], 0 je .return jmp [__MemoryFault] .return: stdcall TerminateAll, -1 end if body Exec2 .pArgs dd ? begin pushad stdcall StrSplitArg, [.hCommand] mov [.pArgs], eax mov eax, sys_fork int $80 test eax, eax jnz .parent ; this is the parent process ; here is the child. DebugMsg "Child process here!" mov eax, sys_dup2 mov ebx, [.hStdIn] xor ecx, ecx int $80 mov eax, sys_dup2 mov ebx, [.hStdOut] inc ecx int $80 mov eax, sys_dup2 mov ebx, [.hStdErr] inc ecx int $80 mov ecx, [.pArgs] mov ebx, [ecx] ; the first argument is the executable name. mov edx, [_ptrEnvironment] mov eax, [edx] ; argument count lea edx, [edx + 4*eax + 8] ; +4 for argc and +4 for the termination 0; edx points to the env table here. mov eax, sys_execve int $80 OutputValue "Error Exec2: ", eax, 10, -1 stdcall TerminateAll, eax ; This is the forked process after sys_execve error. So, terminate it. .parent: stdcall FreeMem, [.pArgs] bt eax, 31 mov [esp+4*regEAX], eax popad return endp body FreeProcessID begin return endp body WaitProcessExit begin pushad mov eax, sys_waitpid mov ebx, [.ProcessID] xor ecx, ecx xor edx, edx int $80 clc popad return endp ; Splits the string on spaces and forms one-memory-block area that contains, zero terminated ; array of pointers to every part of the string. ; The spaces inside double or single quotes are ignored. ; ; The format of the memory block is the same as used in the sys_execve system function. proc StrSplitArg, .hCommand begin pushad if defined StrLib & StrLib stdcall StrPtr, [.hCommand] mov esi, eax mov ebx, eax else mov esi, [.hCommand] mov ebx, esi end if xor ecx, ecx xor edx, edx ; find the maximal possible count of the arguments (edx) ; and the length of the string. .loop1: lodsb test al, al jz .endstr1 inc ecx cmp al, ' ' jne .loop1 inc edx jmp .loop1 .endstr1: mov esi, ebx add edx, 3 lea edx, [4*edx + ecx] add edx, 3 and edx, $fffffffc stdcall GetMem, edx mov ebx, eax sub edx, ecx sub edx, 4 and edx, $fffffffc lea edi, [ebx+edx] rep movsb mov edi, ebx lea esi, [ebx+edx] ; start of the string. .search_loop: mov [edi], esi add edi, 4 .loop_to_space: lodsb test al, al jz .end_of_string cmp al, '"' je .skip_quoted cmp al, "'" je .skip_quoted cmp al, ' ' jne .next cmp ah, ' ' je .loop_to_space mov byte [esi-1], 0 jmp .search_loop .next: mov ah, al jmp .loop_to_space .skip_quoted: mov ah, al .loop_quote: lodsb test al, al jz .end_of_string cmp al, ah jne .loop_quote jmp .loop_to_space .end_of_string: mov [esp+4*regEAX], ebx popad return endp match =LinuxThreads, LinuxThreads { define LinuxThreads posix } match =native, LinuxThreads { include '_process_native.asm' } match =posix, LinuxThreads { include '_process_posix.asm' } |
Added freshlib/system/Linux/serial.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Serial IO interface library. Linux part. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ macro brate [baud, mask] { forward dd baud dw mask } body SerSetParams ;, .hSerial, .Baudrate, .StopBits, .Parity, .Flow, .Timeout .settings termios begin pushad mov esi, .speeds .speed_loop: mov eax, [esi] test eax, eax jz .error cmp eax, [.Baudrate] je .found add esi, 6 jmp .speed_loop .found: movzx edx, word [esi+4] or edx, CS8 or CREAD or CLOCAL cmp [.Parity], cParityNo je @f or edx, PARENB @@: cmp [.Parity], cParityOdd jne @f or edx, PARODD @@: cmp [.Flow], cFlowHW jne @f or edx, CRTSCTS @@: xor eax, eax ; zero lea edi, [.settings] mov ecx, sizeof.termios / 4 rep stosd mov [.settings.c_iflag], IGNBRK mov [.settings.c_cflag], edx mov eax, [.Timeout] ; in [ms] xor edx, edx mov ecx, 100 div ecx mov [.settings.c_cc+VTIME], al ; in [100ms] units mov eax, sys_ioctl mov ebx, [.hSerial] mov ecx, TCSETS lea edx, [.settings] int $80 test eax, eax jnz .error clc popad return .error: stc popad return .speeds: brate 50, B50 brate 75, B75 brate 110, B110 brate 134, B134 brate 150, B150 brate 200, B200 brate 300, B300 brate 600, B600 brate 1200, B1200 brate 1800, B1800 brate 2400, B2400 brate 4800, B4800 brate 9600, B9600 brate 19200, B19200 brate 38400, B38400 brate 57600, B57600 brate 115200, B115200 brate 230400, B230400 brate 460800, B460800 brate 500000, B500000 brate 576000, B576000 brate 921600, B921600 brate 1000000, B1000000 brate 11520000, B1152000 brate 15000000, B1500000 brate 20000000, B2000000 brate 25000000, B2500000 brate 30000000, B3000000 brate 35000000, B3500000 brate 40000000, B4000000 brate 0, 0 endp |
Added freshlib/system/Linux/timers.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Asynchronous timer library. ; ; Target OS: Linux ; ; Dependencies: ; ; Notes: Linux port of the library uses independent thread to manage timers. ;_________________________________________________________________________________________ __sys_time_slice = 100 ;[ms] uglobal if used TimerCreate __InternalTimerID dd ? __InternalTimerThread dd ? __FlagTimerTerminate dd ? end if endg if used TimerCreate if ~(defined options.DebugMode.NoTimers & options.DebugMode.NoTimers) initialize InitLinuxTimers .action lnx_sigaction .timer lnx_sigevent .time lnx_itimerspec begin ; set the signal handler. mov eax, sys_sigaction mov ebx, SIGALRM lea ecx, [.action] mov [ecx+lnx_sigaction.sa_handler], __TimerProc mov [ecx+lnx_sigaction.sa_mask], 0 mov [ecx+lnx_sigaction.sa_flags], 0 xor edx, edx int $80 DebugMsg 'Signal hadler set.' ; create the interval timer mov [.timer.notify], SIGEV_SIGNAL mov [.timer.signo], SIGALRM mov eax, sys_timer_create mov ebx, CLOCK_REALTIME lea ecx, [.timer] mov edx, __InternalTimerID int $80 DebugMsg 'Interval timer created.' ; then start a thread that will process timer expiration events. stdcall ThreadCreate, __TimerHandler, 0 OutputValue 'Timer thread created. ID=$', eax, 16, 8 mov [__InternalTimerThread], eax ; start the timer mov ebx, [__InternalTimerID] mov eax, sys_timer_settime lea edx, [.time] mov [edx+lnx_itimerspec.it_interval.tv_sec], 0 mov [edx+lnx_itimerspec.it_interval.tv_nsec], __sys_time_slice*1000000 mov [edx+lnx_itimerspec.it_value.tv_sec], 0 mov [edx+lnx_itimerspec.it_value.tv_nsec], __sys_time_slice*1000000 xor esi, esi int $80 DebugMsg 'Timer started' return endp finalize FreeLinuxTimers begin DebugMsg 'Finalizing timers.' ; stop the timer mov eax, sys_timer_delete mov ebx, [__InternalTimerID] int $80 DebugMsg 'Timer stopped.' mov [__FlagTimerTerminate], 1 ; signal the thread (because it is probably in waiting state. match =native, LinuxThreads { mov eax, sys_tkill mov ebx, [__InternalTimerThread] mov ecx, SIGRTMAX int $80 } match =posix, LinuxThreads { cinvoke pthread_kill, [__InternalTimerThread], SIGRTMAX } cmp [__InternalTimerThread], 0 je .finish ; waiting to timer thread to finish. This is bad implementation, ; here should be timer wait with signal terminate on timeout. @@: stdcall Sleep, 10 cmp [__InternalTimerThread], 0 jne @b .finish: DebugMsg 'Timer thread terminated.' return endp end if end if ; This procedure is called by the system on every time quantum. ; It is Linux signal handler, so the actions this procedure can ; perform are limited. proc __TimerProc, .signal begin push ebx edi lea eax, [__ptrFirstTimer] xor edi, edi .loop: mov eax, [eax+TTimer.next] test eax, eax jz .end_timers test [eax+TTimer.flags], tmfRunning jz .loop mov ecx, [eax+TTimer.value] add ecx, __sys_time_slice mov [eax+TTimer.value], ecx cmp ecx, [eax+TTimer.interval] jl .loop @@: inc [eax+TTimer.Expired] inc edi mov ecx, [eax+TTimer.interval] sub [eax+TTimer.value], ecx cmp [eax+TTimer.value], ecx jge @b jmp .loop .end_timers: test edi, edi jz .exit ; signal the timers thread that some timer is changed. match =native, LinuxThreads { mov eax, sys_tkill mov ebx, [__InternalTimerThread] mov ecx, SIGRTMAX int $80 } match =posix, LinuxThreads { cinvoke pthread_kill, [__InternalTimerThread], SIGRTMAX } .exit: pop edi ebx cret endp ; This is thread procedure, that checks the timer expiration and then executes the timer callback procedure (if any) proc __TimerHandler, .argument .remain dd ? .action lnx_sigaction begin mov eax, sys_sigaction mov ebx, SIGRTMAX lea ecx, [.action] mov [ecx+lnx_sigaction.sa_handler], __continue_proc mov [ecx+lnx_sigaction.sa_mask], 0 mov [ecx+lnx_sigaction.sa_flags], 0;SA_NODEFER xor edx, edx int $80 mov [__FlagTimerTerminate], 0 .from_begin: cmp [__FlagTimerTerminate], 0 jne .quit mov [.remain], 0 lea eax, [__ptrFirstTimer] .listloop: mov eax, [eax+TTimer.next] .listloop2: test eax, eax jz .end_list mov ecx, [eax+TTimer.Expired] jecxz .listloop dec ecx mov [eax+TTimer.Expired], ecx add [.remain], ecx cmp [eax+TTimer.Callback], 0 je .listloop mov ecx, [eax+TTimer.flags] and ecx, $0f cmp ecx, tmfDoNothing je .end_event ; call the callback procedure. pushad push eax cinvoke XLockDisplay, [hApplicationDisplay] pop eax stdcall [eax+TTimer.Callback], eax cinvoke XUnlockDisplay, [hApplicationDisplay] popad .end_event: test [eax+TTimer.flags], tmfSyncDestroy jz .listloop push eax mov eax, [eax+TTimer.next] ; after the destruction, this pointer will be lost. stdcall TimerDestroy ; pointer from the stack. jmp .listloop2 .end_list: cmp [.remain], 0 jne .from_begin ; wait for signal mov eax, sys_pause int $80 jmp .from_begin .quit: mov [__InternalTimerThread], 0 stdcall Terminate, 0 endp proc __continue_proc, .signal begin cret endp ; this procedure provides easy way to make time delays ; it is independent and does not lead to including whole timer library. proc Sleep, .msec .time lnx_timespec begin pushad mov eax, [.msec] xor edx, edx mov ecx, 1000 div ecx mov [.time.tv_sec], eax ; seconds imul edx, 1000000 mov [.time.tv_nsec], edx mov eax, sys_nanosleep lea ebx, [.time] xor ecx, ecx int $80 popad return endp proc GetTime begin push ebx mov eax, sys_time xor ebx, ebx int $80 cdq pop ebx return endp struct lnx_timeb .time dd ? .millitm dd ? .timezone dd ? .dstflag dd ? ends proc GetLocalTimeOffset ;.time lnx_timespec begin ; stdcall GetTime ; push eax ; ; mov eax, sys_clock_gettime ; mov ebx, CLOCK_REALTIME ; lea ecx, [.time] ; ; int $80 ; ; ; pop edx ; mov eax, [.time.tv_sec] ; ; OutputRegister regEAX, 10 ; OutputRegister regEDX, 10 ; int3 xor eax, eax return endp proc GetTimestamp .time lnx_timeval begin pushad mov eax, sys_gettimeofday lea ebx, [.time] xor ecx, ecx int $80 mov eax, [.time.tv_sec] ; seconds mov ecx, 1000 mul ecx mov ebx,eax mov eax, [.time.tv_usec] ; us xor edx, edx div ecx add eax, ebx mov [esp+4*regEAX], eax popad return endp ; returns dword timestamp in uS proc GetFineTimestamp .time lnx_timeval begin pushad mov eax, sys_gettimeofday lea ebx, [.time] xor ecx, ecx int $80 mov eax, [.time.tv_sec] ; seconds mov ecx, 1000000 mul ecx mov ebx, eax mov eax, [.time.tv_usec] add eax, ebx mov [esp+4*regEAX], eax popad return endp ; Alternative implementation! ; ;proc GetFineTimestamp ;.time lnx_timespec ;begin ; pushad ; ; mov eax, sys_clock_gettime ; mov ebx, CLOCK_PROCESS_CPUTIME_ID ; lea ecx, [.time] ; int $80 ; ; mov eax, [.time.tv_sec] ; seconds ; ; mov ecx, 1000000 ; mul ecx ; mov ebx, eax ; ; mov eax, [.time.tv_nsec] ; mov ecx, 1000 ; xor edx, edx ; div ecx ; ; add eax, ebx ; ; mov [esp+4*regEAX], eax ; popad ; return ;endp |
Added freshlib/system/Win32/com32.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: com32 (common object module) procedures. ; ; Target OS: Win32 ; ; Dependencies: ;_________________________________________________________________________________________ uses ole32 ; compares two GUID. Returns CF=1 if equal, CF=0 if not. proc cmpGUID, .ptrGUID1, .ptrGUID2 begin push esi edi ecx mov esi, [.ptrGUID1] mov edi, [.ptrGUID2] mov ecx, 4 repe cmpsd clc jne .finish stc .finish: pop ecx edi esi return endp iglobal IID_IUnknown GUID 00000000-0000-0000-C000-000000000046 IID_IClassFactory GUID 00000001-0000-0000-C000-000000000046 IID_IOleObject GUID 00000112-0000-0000-C000-000000000046 IID_IOleInPlaceObject GUID 00000113-0000-0000-C000-000000000046 IID_IOleInPlaceSite GUID 00000119-0000-0000-C000-000000000046 IID_IOleClientSite GUID 00000118-0000-0000-C000-000000000046 IID_IDocHostUIHandler GUID BD3F23C0-D43E-11CF-893B-00AA00BDCE1A CLSID_WebBrowser GUID 8856F961-340A-11D0-A96B-00C04FD705A2 IID_IWebBrowser2 GUID D30C1661-CDAF-11D0-8A3E-00C04FC9E26E IID_IHTMLDocument2 GUID 332C4425-26CB-11D0-B483-00C04FD90119 endg |
Added freshlib/system/Win32/environment.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Win32 environment management library. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ uses kernel32, user32 proc GetAllEnvironment .return dd ? begin pushad invoke GetEnvironmentStringsA push eax mov esi, eax .end_loop: cmp word [esi], 0 lea esi, [esi+1] jne .end_loop stc sbb esi, [esp] lea ecx, [esi+8] stdcall GetMem, ecx mov [.return], eax mov edi, eax mov ecx, esi mov esi, [esp] rep movsb xor eax, eax stosd invoke FreeEnvironmentStringsA ; from the stack popad mov eax, [.return] return endp proc GetEnvVariable, .varname .buffer rb 1024 begin push ebx ecx edx stdcall utf8ToWideChar, [.varname] mov [.varname], eax lea ebx, [.buffer] invoke GetEnvironmentVariableW, [.varname], ebx, 512 test eax, eax jz .missing stdcall FreeMem, [.varname] stdcall WideCharToUtf8, ebx clc pop edx ecx ebx return .missing: stdcall FreeMem, [.varname] stc pop edx ecx ebx return endp |
Changes to freshlib/system/Win32/files.asm.
|
| | | < < | | < < < < < > | < > | < > > > | < < | > > > > > > > > | > > > | | | > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > > > > > < < < < | | < < < | < < < < < < < < < | > > > > > > > > > > > > > > > > > > > > > > > > > > < | > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > | > > > > > | > > > > > > > > > > > > > > > > > > > | > > > > > | > > | | > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Files manipulation library. Win32 part. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ uses kernel32 DIR_SLASH equ '\' DIR_SEP_PAIR equ '\/' ; for use with StrNormalizePath and StrNormalizePath2 fsFromBegin = FILE_BEGIN fsFromEnd = FILE_END fsFromCurrent = FILE_CURRENT faReadOnly = GENERIC_READ faWriteOnly = GENERIC_WRITE faReadWrite = GENERIC_READ or GENERIC_WRITE faOpenAlways = OPEN_ALWAYS ; if the file does not exists it will be created. faCreateAlways = CREATE_ALWAYS ; Creates new file always. If the file exists, truncates it. faCreateOnly = CREATE_NEW ; Creates new file only if not exists, else error. if used STDIN | used STDOUT | used STDERR initialize InitStdHandles begin if used STDIN invoke GetStdHandle, STD_INPUT_HANDLE mov [__std_handle_in], eax end if if used STDOUT invoke GetStdHandle, STD_OUTPUT_HANDLE mov [__std_handle_out], eax end if if used STDERR invoke GetStdHandle, STD_ERROR_HANDLE mov [__std_handle_err], eax end if return endp end if body FileOpenAccess begin push edx ecx stdcall utf8ToWideChar, [.filename] push eax mov ecx, [.access] mov edx, [.access] and ecx, $ffff0000 and edx, $0000ffff jnz @f mov edx, OPEN_EXISTING @@: invoke CreateFileW, eax, ecx, FILE_SHARE_READ, 0, edx, 0, 0 stdcall FreeMem ; from the stack cmp eax, INVALID_HANDLE_VALUE je .error clc pop ecx edx return .error: invoke GetLastError if defined options.DebugMode & options.DebugMode stdcall __FileErrorDisplay, eax, [.filename] end if stc pop ecx edx return endp body FileClose begin push edx ecx eax invoke CloseHandle, [.handle] test eax, eax jz .error clc pop eax ecx edx return .error: pop eax if used GetErrorString invoke GetLastError end if stc pop ecx edx return endp ; returns 32bit file size in eax body FileSize begin push edx ecx xor eax, eax invoke GetFileSize, [.handle], eax cmp eax, -1 je .error clc pop ecx edx return .error: if used GetErrorString invoke GetLastError end if stc pop ecx edx return endp body FileRead .read dd ? begin push edx ecx lea eax, [.read] invoke ReadFile, [.handle], [.buffer], [.count], eax, 0 test eax, eax jz .error mov eax, [.read] clc pop ecx edx return .error: if used GetErrorString invoke GetLastError end if stc pop ecx edx return endp body FileWrite .bytes dd ? begin push edx ecx lea ecx, [.bytes] invoke WriteFile, [.handle], [.buffer], [.count], ecx, NULL test eax, eax jz .error mov eax, [.bytes] clc pop ecx edx return .error: if used GetErrorString invoke GetLastError end if stc pop ecx edx return endp ;---------------------------------------------------- ; if CF = 0, eax is the new possition in the file ; if CF = 1, eax is error code. ;---------------------------------------------------- body FileSeek begin push edx ecx invoke SetFilePointer, [.handle], [.dist], 0, [.direction] cmp eax, -1 je .error clc pop ecx edx return .error: if used GetErrorString invoke GetLastError end if stc pop ecx edx return endp body FileTruncate begin push ecx edx invoke SetEndOfFile, [.handle] test eax, eax jz .error clc pop edx ecx return .error: if used GetErrorString invoke GetLastError end if stc pop ecx edx return endp body FileTruncateTo ;, .handle, .length begin push ecx edx invoke SetFilePointer, [.handle], [.length], 0, fsFromBegin cmp eax, -1 je .error invoke SetEndOfFile, [.handle] test eax, eax jz .error clc pop edx ecx return .error: if used GetErrorString invoke GetLastError end if stc pop ecx edx return endp ;---------------------------------------------------- ; if CF = 0 - the file was deleted ; if CF = 1, eax is error code. ;---------------------------------------------------- body FileDelete begin push ecx edx eax stdcall utf8ToWideChar, [.filename] push eax invoke DeleteFileW, eax stdcall FreeMem ; from the stack test eax, eax jz .error clc pop eax edx ecx return .error: pop eax if used GetErrorString invoke GetLastError end if stc pop edx ecx return endp body GetCurrentDir .buffer rb 1024 begin push ecx edx esi lea esi, [.buffer] invoke GetCurrentDirectoryW, 1024, esi test eax, eax jz .error stdcall WideCharToUtf8, esi clc .finish: pop esi edx ecx return .error: if used GetErrorString invoke GetLastError end if stc jmp .finish endp body SetCurrentDir begin push ecx edx eax stdcall utf8ToWideChar, [.hDirectory] push eax invoke SetCurrentDirectoryW, eax stdcall FreeMem ; from the stack test eax, eax jz .error pop eax edx ecx return .error: pop eax if used GetErrorString invoke GetLastError end if stc pop edx ecx return endp body GetErrorString .buff dd ? begin push edx ecx lea eax, [.buff] invoke FormatMessageW, FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM, 0, [.code], LANG_NEUTRAL or SUBLANG_DEFAULT, eax, 0, 0 stdcall WideCharToUtf8, [.buff] stdcall StrClipSpacesR, eax stdcall StrClipSpacesL, eax push eax invoke LocalFree, [.buff] pop eax clc pop ecx edx return endp body FreeErrorString begin stdcall StrDel, [.ptrString] return endp ftUnknown = 0 ftDirectory = 1 ftFile = 2 ftLinkMask = $80000000 ; reads all items of the directory and fills them in the TArray of type TDirItem. ; arguments: ; dir - string with the path to the directory. ; ; returns: ; if not error: CF=0; eax = pointer to TArray of TDirItem; ; if error: CF=1; eax = error code; body DirectoryRead .finddata FINDDATAW .size dd ? begin push ebx ecx edx edi ; open the file stdcall StrDup, [.dir] push eax stdcall StrCat, eax, .searchall stdcall utf8ToWideChar, eax stdcall StrDel ; from the stack push eax lea ecx, [.finddata] invoke FindFirstFileW, eax, ecx stdcall FreeMem ; from the stack cmp eax, INVALID_HANDLE_VALUE je .error mov ebx, eax stdcall CreateArray, sizeof.TDirItem mov edi, eax .addloop: lea eax, [.finddata.cFileName] stdcall WideCharToUtf8, eax push eax stdcall AddArrayItems, edi, 1 mov edi, edx pop [eax+TDirItem.hFilename] mov ecx, ftDirectory test [.finddata.dwFileAttributes], FILE_ATTRIBUTE_DIRECTORY jnz .typeok mov ecx, ftFile .typeok: mov [eax+TDirItem.Type], ecx lea eax, [.finddata] invoke FindNextFileW, ebx, eax test eax, eax jnz .addloop invoke GetLastError push eax .end_of_directory: invoke FindClose, ebx pop eax cmp eax, ERROR_NO_MORE_FILES jne .finish_error mov eax, edi pop edi edx ecx ebx clc return .error: invoke GetLastError .finish_error: pop edi edx ecx ebx stc return .searchall db '\*.*', 0 endp body CreateDirectory begin push ecx edx eax stdcall utf8ToWideChar, [.DirName] push eax invoke CreateDirectoryW, eax, 0 stdcall FreeMem ; from the stack test eax, eax jz .error pop eax edx ecx return .error: pop eax if used GetErrorString invoke GetLastError end if stc pop edx ecx return endp body GetFileInfo begin pushad mov esi, [.ptrFileInfo] lea ecx, [esi+TFileInfo.timeAccessed] lea edx, [esi+TFileInfo.timeModified] invoke GetFileTime, [.hFile], esi, ecx, edx test eax, eax jz .error mov eax, dword [esi+TFileInfo.timeCreated] mov edx, dword [esi+TFileInfo.timeCreated+4] call FileTimeToUnixTime mov dword [esi+TFileInfo.timeCreated], eax mov dword [esi+TFileInfo.timeCreated+4], edx mov eax, dword [esi+TFileInfo.timeAccessed] mov edx, dword [esi+TFileInfo.timeAccessed+4] call FileTimeToUnixTime mov dword [esi+TFileInfo.timeAccessed], eax mov dword [esi+TFileInfo.timeAccessed+4], edx mov eax, dword [esi+TFileInfo.timeModified] mov edx, dword [esi+TFileInfo.timeModified+4] call FileTimeToUnixTime mov dword [esi+TFileInfo.timeModified], eax mov dword [esi+TFileInfo.timeModified+4], edx clc popad return .error: stc popad return endp ; Returns: ; CF=1 if the file NOT EXISTS ; CF=0 if the file EXISTS body FileExists begin pushad stdcall utf8ToWideChar, [.hFileName] push eax invoke GetFileAttributesW, eax stdcall FreeMem ; from the stack cmp eax, -1 je .notexists clc popad return .notexists: stc popad return endp body IsRelativePath ;, .hPath begin push eax stdcall StrLen, [.hPath] cmp eax, 3 jb .relative stdcall StrPtr, [.hPath] cmp byte [eax], DIR_SLASH jne .drive cmp byte [eax+1], DIR_SLASH jmp .absolute .drive: cmp byte [eax], 'A' jb .relative cmp byte [eax], 'Z' jbe .maybe_drive cmp byte [eax], 'a' jb .relative cmp byte [eax], 'Z' ja .relative .maybe_drive: cmp byte [eax+1], ':' jne .relative cmp byte [eax+2], DIR_SLASH jne .relative .absolute: clc pop eax return .relative: stc pop eax return endp body GetCurrentPrefix begin stdcall GetCurrentDir push eax stdcall StrPtr, eax and dword [eax+2], 0 mov [eax+string.len], 2 pop eax return endp |
Added freshlib/system/Win32/heapmgr.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | ;FASM STANDARD LIBRARY ;Win32 memory routines for use with FASMLIB heap manager ;you can replace src/win32/mem.inc with this file, to use FASMLIB heap manager ;instead of Heap*** Win32API functions. Useful to test heap manager on win32, ;but with this way VirtualAlloc often cannot enlarge block enough NEED_HEAP_MANAGER equ 1 HEAP_MAX_SIZE = 1024 * 1024 * 1024 ; = 1GB address space. uglobal __heap_start dd ? endg initialize InitHeapManager .info SYSTEM_INFO begin invoke VirtualAlloc, 0, HEAP_MAX_SIZE, MEM_RESERVE, PAGE_READWRITE test eax, eax jz .error mov [__heap_start], eax return .error: int3 return endp proc mem.alloc_heap, .size begin push ecx edx invoke VirtualAlloc, [__heap_start], [.size], MEM_COMMIT, PAGE_EXECUTE_READWRITE test eax, eax jz .error_VirtualAlloc clc pop edx ecx return .error_VirtualAlloc: mov eax, ERR_OUT_OF_MEM stc pop edx ecx return endp proc mem.free_heap, .block, .size begin push ecx edx eax invoke VirtualFree, [.block], [.size], MEM_DECOMMIT test eax, eax jz .error clc .r: pop eax edx ecx return .error: stc mov dword [esp], ERR_UNKNOWN jmp .r endp proc mem.realloc_heap, .heapptr, .newsize, .oldsize begin push ecx edx invoke VirtualAlloc, [.heapptr], [.newsize], MEM_COMMIT, PAGE_EXECUTE_READWRITE test eax,eax jz .error_GlobalReAlloc .rnc: clc pop edx ecx return .error_GlobalReAlloc: mov eax, ERR_OUT_OF_MEM stc pop edx ecx return endp |
Changes to freshlib/system/Win32/memory.asm.
|
| | | < < | | < < < < < < > | < > | > > > > | < < < | > > > > > > > | > < > | > < < < < < < < | | < > > > > > > > > > < < < < < > > > | | < < < < > < | | | > > > | > > > > | > > | > > | | > > | < < < < < | > | | | | < > > > | > | | < | | < < > > | < < < | | | | > < | | < < < < < | < > < | | | | > > > > > > > > > | > > > > > | > | > > > > > > > > > > | < < < | | | | | | > | | | > < | | | | > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Dynamic memory management library. Win32 part. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: Uses Heap functions of Win32 API. Also contains some debug and profiling code, ; that needs some revision in order to be either removed, or legalized. ;_________________________________________________________________________________________ uses ucrtbase MEM_ALIGNMENT_PWR = 4 MEM_ALIGNMENT = 1 shl MEM_ALIGNMENT_PWR MEM_ALIGNMENT_OFS = MEM_ALIGNMENT - 1 MEM_ALIGNMENT_MSK = not MEM_ALIGNMENT_OFS uglobal var ptrMemoryList = ? var MemMutex = ? endg if DebugMemory struct TMemoryItem .next dd ? .pointer dd ? .resized dd ? .callfrom dd ? ends proc InitAllocStack begin stdcall MutexCreate, 0, MemMutex stdcall MutexRelease, MemMutex return endp end if if used SpaceAllocate & ~ used GetMem initialize ReserveAddressSpace begin invoke VirtualAlloc, 0, 1024*1024*1024, MEM_RESERVE, PAGE_READWRITE mov [_MemoryFreeSpace], eax return endp end if if DebugMemory & used GetMem & ~ used SpaceAllocate initialize InitMemoryManager begin call InitAllocStack return endp end if if DebugMemory finalize FinalizeMemoryManager begin stdcall MutexDestroy, MemMutex mov eax, [ptrMemoryList] int3 return endp end if ; Allocates memory block with given size. ; Returns: CF=1 if error. ; if CF=0, eax = pointer to the memory block allocated. body GetMem begin push ebx ecx edx mov ebx, [.size] add ebx, MEM_ALIGNMENT_OFS and bl, MEM_ALIGNMENT_MSK cinvoke _aligned_malloc, ebx, MEM_ALIGNMENT test eax, eax jz .error if ~ defined options.NoZeroMemory | ~ options.NoZeroMemory push eax edi mov edi, eax cinvoke _aligned_msize, edi, MEM_ALIGNMENT, 0 mov ecx, eax shr ecx, 2 xor eax, eax rep stosd pop edi eax end if if DebugMemory pushad mov esi, eax ; allocated address stdcall WaitForMutex, MemMutex, -1 cinvoke _alignned_malloc, sizeof.TMemoryItem, 16 mov edi, eax mov [edi+TMemoryItem.pointer], esi mov ecx, [esp+11*4] cmp ecx, CreateArray.retaddr jne @f mov ecx, [esp+11*4+5*4] @@: mov [edi+TMemoryItem.callfrom], ecx mov ecx, edi xchg [ptrMemoryList], ecx mov [edi+TMemoryItem.next], ecx and [edi+TMemoryItem.resized], 0 stdcall MutexRelease, MemMutex popad end if clc pop edx ecx ebx return .error: stc pop edx ecx ebx return endp body FreeMem begin push eax ecx edx if DebugMemory pushad stdcall WaitForMutex, MemMutex, -1 mov ebx, ptrMemoryList mov esi, [ptrMemoryList] mov eax, [.ptr] .loop: test esi, esi jz .notfound cmp [esi+TMemoryItem.pointer], eax je .found mov ebx, esi mov esi, [esi+TMemoryItem.next] jmp .loop .notfound: int3 jmp .exit2 .found: mov eax, [esi+TMemoryItem.next] mov [ebx+TMemoryItem.next], eax cinvoke _aligned_free, esi .exit2: stdcall MutexRelease, MemMutex popad end if cinvoke _aligned_free, [.ptr] pop edx ecx eax return endp body ResizeMem begin push ebx ecx edx if ~ defined options.NoZeroMemory | ~ options.NoZeroMemory cinvoke _aligned_msize, [.ptr], MEM_ALIGNMENT, 0 mov ebx, eax end if mov eax, [.newsize] add eax, MEM_ALIGNMENT_OFS and al, MEM_ALIGNMENT_MSK cinvoke _aligned_realloc, [.ptr], eax, MEM_ALIGNMENT test eax, eax jz .error if ~ defined options.NoZeroMemory | ~ options.NoZeroMemory push eax edi lea edi, [eax+ebx] cinvoke _aligned_msize, eax, MEM_ALIGNMENT, 0 mov ecx, eax sub ecx, ebx jc @f shr ecx, 2 jz @f xor eax, eax rep stosd @@: pop edi eax end if if DebugMemory pushad stdcall WaitForMutex, MemMutex, -1 mov esi, [ptrMemoryList] mov ecx, [.ptr] .loop: test esi, esi jz .notfound cmp [esi+TMemoryItem.pointer], ecx je .found mov esi, [esi+TMemoryItem.next] jmp .loop .notfound: int3 jmp .exit2 .found: mov [esi+TMemoryItem.pointer], eax inc [esi+TMemoryItem.resized] mov ecx, [esp+11*4] cmp ecx, AddArrayItems.readdr jne @f mov ecx, [esp+11*4+6*4] @@: mov [esi+TMemoryItem.callfrom], ecx .exit2: stdcall MutexRelease, MemMutex popad end if clc pop edx ecx ebx return .error: mov eax, [.ptr] stc pop edx ecx return endp ; ;body GetMemSize, .ptr ;begin ; push ecx edx ; invoke HeapSize, [_hHeap], 0, [.ptr] ; cmp eax, -1 ; je .error ; clc ; pop edx ecx ; return ; ;.error: ; stc ; pop edx ecx ; return ;endp body SpaceAllocate begin push ecx edx invoke VirtualAlloc, [_MemoryFreeSpace], [.size], MEM_COMMIT, PAGE_READWRITE test eax, eax pop edx ecx return endp |
Added freshlib/system/Win32/network.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS dependent part of the network library. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: This library follows the rules of Berkley sockets library with some small ; differences (for example in the return values) ;_________________________________________________________________________________________ uses wsock32, ws2_32 serrTimeout = WSAETIMEDOUT serrAborted = WSA_OPERATION_ABORTED uglobal __wsaData WSADATA endg if used SocketCreate initialize InitWindowsSockets begin invoke WSAStartup, $0101, __wsaData test eax, eax jz @f int3 @@: return endp finalize FinishWindowsSockets begin invoke WSACleanup return endp end if proc __SocketError begin cmp eax, SOCKET_ERROR jne .no_error push ecx edx invoke WSAGetLastError pop edx ecx stc return .no_error: clc return endp body SocketCreate begin push ecx edx invoke socket, [.protocol_family], [.socket_type], [.protocol] call __SocketError pop edx ecx return endp body SocketShutDown begin push ecx edx invoke shutdown, [.hSocket], SD_BOTH call __SocketError pop edx ecx return endp body SocketClose .buffer rb 1024 begin push ecx edx ; invoke shutdown, [.hSocket], SD_RECEIVE ; call __SocketError ; jc .finish ; ;.loop: ; lea ecx, [.buffer] ; invoke recv, [.hSocket], ecx, 1024, 0 ; ; call __SocketError ; jc .finish ; test eax, eax ; jnz .loop invoke closesocket, [.hSocket] call __SocketError .finish: pop edx ecx return endp body SocketConnect begin push ecx edx invoke connect, [.hSocket], [.pAddress], sizeof.TSocketAddress call __SocketError pop edx ecx return endp body SocketBind begin push ecx edx mov edx, [.pAddress] mov ecx, sizeof.TSocketAddressIn cmp [edx+TSocketAddress.saFamily], AF_INET je .do_bind mov ecx, sizeof.TSocketAddressIn6 cmp [edx+TSocketAddress.saFamily], AF_INET6 je .do_bind mov ecx, sizeof.TSocketAddressUn cmp [edx+TSocketAddress.saFamily], AF_UNIX je .do_bind invoke WSASetLastError, WSAEINVAL jmp .finish .do_bind: invoke bind, [.hSocket], [.pAddress], ecx .finish: call __SocketError pop edx ecx return endp body SocketListen begin push ecx edx invoke listen, [.hSocket], [.maxPending] call __SocketError pop edx ecx return endp body SocketAccept .addrlen dd ? begin push edx mov [.addrlen], sizeof.TSocketAddress lea ecx, [.addrlen] cmp [.pAddress], 0 jne @f xor ecx, ecx mov [.addrlen], ecx @@: invoke accept, [.hSocket], [.pAddress], ecx mov ecx, [.addrlen] call __SocketError pop edx return endp body SocketSend begin push ecx edx invoke send, [.hSocket], [.pBuffer], [.DataLen], [.flags] call __SocketError pop edx ecx return endp body SocketReceive begin push ecx edx invoke recv, [.hSocket], [.pBuffer], [.BufferSize], [.flags] call __SocketError pop edx ecx return endp body SocketSendTo begin push ecx edx invoke sendto, [.hSocket], [.pBuffer], [.DataLen], [.flags], [.pAddressTo], sizeof.TSocketAddress call __SocketError pop edx ecx return endp body SocketReceiveFrom .addrlen dd ? begin push edx mov [.addrlen], sizeof.SocketAddress lea ecx, [.addrlen] invoke recvfrom, [.hSocket], [.pBuffer], [.BufferSize], [.flags], [.pAddressFrom], ecx call __SocketError mov ecx, [.addrlen] pop edx return endp ;body SetLinger ;begin ; push ecx edx ; lea ecx, [.fLinger] ; invoke setsockopt, [.hSocket], SOL_SOCKET, SO_LINGER, ecx, 8 ; call __SocketError ; pop edx ecx ; return ;endp body SocketGetOption .len dd ? .option rd 4 begin push ecx edx mov [.len], 16 lea eax, [.option] lea ecx, [.len] invoke getsockopt, [.hSocket], SOL_SOCKET, [.idOption], eax, ecx call __SocketError jc .finish mov eax, [.option] .finish: pop edx ecx return endp body SocketSetOption .option rd 4 begin push ecx edx mov eax, [.Value] mov [.option], eax mov ecx, 4 cmp [.idOption], soLinger jne .callit mov [.option+4], eax mov ecx, 8 .callit: lea eax, [.option] invoke setsockopt, [.hSocket], SOL_SOCKET, [.idOption], eax, ecx call __SocketError pop edx ecx return endp struct TAddrInfo .flags dd ? .family dd ? .sock_type dd ? .protocol dd ? .addrlen dd ? .p_canonname dd ? .p_sock_addr dd ? .p_next dd ? ; next addrinfo structure. ends ; returns the IP address of some domain in EAX body ResolveDomainIP;, .hDomain .result dd ? begin pushad stdcall StrPtr, [.hDomain] lea ecx, [.result] invoke getaddrinfo, eax, 0, 0, ecx test eax, eax jnz .error mov esi, [.result] .loop: test esi, esi jz .not_found cmp [esi+TAddrInfo.family], AF_INET jne .next cmp [esi+TAddrInfo.sock_type], SOCK_STREAM jne .next cmp [esi+TAddrInfo.protocol], IPPROTO_TCP jne .next cmp [esi+TAddrInfo.addrlen], sizeof.TSocketAddressIn je .found .next: mov esi, [esi+TAddrInfo.p_next] jmp .loop .end_loop: .found: mov edx, [esi+TAddrInfo.p_sock_addr] mov eax, [edx+TSocketAddressIn.saAddress] bswap eax mov [esp+4*regEAX], eax clc .finish: pushf invoke freeaddrinfo, [.result] popf .exit: popad return .not_found: stc jmp .finish .error: stc jmp .exit endp |
Added freshlib/system/Win32/process.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Process management library. Win32 part. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ uses kernel32, shell32 __mutex_not_initialized = 0 __mutex_mutex = 1 __mutex_critical_section = 2 struct TMutex .type dd ? .handle dd ? .critical_section CRITICAL_SECTION ends body Terminate begin invoke ExitThread, [.exit_code] return endp ; Terminate current process ; Returns: nothing. body TerminateAll begin invoke ExitProcess, [.exit_code] return endp body SetForcedTerminateHandler begin pushad invoke SetConsoleCtrlHandler, [.procHandler], TRUE popad return endp ; no-op for compatibility with Linux library, where this debug ; function is implemented in very slopy manner. :) proc SetSegmentationFaultHandler, .procHandler begin pushad invoke SetUnhandledExceptionFilter, [.procHandler] popad return endp body GetCmdArguments .argc dd ? .array dd ? begin pushad invoke GetCommandLineW lea ecx, [.argc] invoke CommandLineToArgvW, eax, ecx test eax, eax jz .error push eax mov esi, eax stdcall CreateArray, 4 mov [.array], eax .argloop: cmp [.argc], 0 je .endarg stdcall WideCharToUtf8, [esi] push eax stdcall AddArrayItems, [.array], 1 mov [.array], edx pop dword [eax] add esi, 4 dec [.argc] jmp .argloop .endarg: invoke LocalFree ; from the stack... popad mov eax, [.array] clc return .error: popad stc return endp ; Creates a new execution thread ; Returns: CF=1 if error. ; CF=0, eax = pid of the new process being created body ThreadCreate begin push ecx edx invoke CreateThread, NULL, 0, [.ptrFunction], [.ptrArguments], 0, 0 test eax, eax jz .error clc pop edx ecx return .error: stc pop edx ecx return endp body FreeThreadID begin push eax ecx edx invoke CloseHandle, [.ThreadID] pop edx ecx eax return endp body ThreadKill begin push eax ecx edx invoke TerminateThread, [.hThread], [.exit_code] test eax, eax ; after test CF=0; jnz .finish stc .finish: pop edx ecx eax return endp body Exec2 .startup STARTUPINFO .process PROCESS_INFORMATION begin push ecx esi edi stdcall utf8ToWideChar, [.hCommand] mov esi, eax lea edi, [.startup] mov ecx, (sizeof.STARTUPINFO + sizeof.PROCESS_INFORMATION)/4 xor eax, eax rep stosd mov [.startup.cb], sizeof.STARTUPINFO mov [.startup.dwFlags], STARTF_USESTDHANDLES mov eax, [.hStdIn] mov ecx, [.hStdOut] mov edx, [.hStdErr] mov [.startup.hStdInput], eax mov [.startup.hStdOutput], ecx mov [.startup.hStdError], edx lea ecx, [.startup] lea edx, [.process] invoke CreateProcessW, 0, esi, 0, 0, TRUE, NORMAL_PRIORITY_CLASS, 0, 0, ecx, edx stdcall FreeMem, esi test eax, eax jz .error mov eax, [.process.hProcess] mov edx, [.process.hThread] clc pop edi esi ecx return .error: xor eax, eax xor edx, edx stc pop edi esi ecx return endp body FreeProcessID begin push eax ecx edx invoke CloseHandle, [.ProcessID] pop edx ecx eax return endp ; Waits for the process to exit and returns the exit code. ; Returns: ; CF = 0; eax=exit code ; CF = 1; eax=0 - the process is running ; CF = 1; eax=-1 - another error. ; body WaitProcessExit .exit_code dd ? begin push ecx edx invoke WaitForSingleObject, [.ProcessID], [.timeout] cmp eax, WAIT_TIMEOUT je .err_time cmp eax, WAIT_FAILED je .error lea eax, [.exit_code] invoke GetExitCodeProcess, [.ProcessID], eax test eax, eax jz .error mov eax, [.exit_code] clc .finish: pop edx ecx return .err_time: xor eax, eax stc jmp .finish .error: or eax, -1 stc jmp .finish endp ; MUTEX functions ;_________________________________________________________________________________________ body MutexCreate begin push eax ecx edx cmp [.ptrName], 0 je .critical_section .mutex: stdcall utf8ToWideChar, [.ptrName] push eax invoke CreateMutexW, 0, TRUE, eax mov ecx, [.ptrMutex] mov [ecx+TMutex.handle], eax mov [ecx+TMutex.type], __mutex_mutex stdcall FreeMem ; from the stack .finish: pop edx ecx eax return .critical_section: mov eax, [.ptrMutex] mov [eax+TMutex.type], __mutex_critical_section lea eax, [eax+TMutex.critical_section] push eax invoke InitializeCriticalSectionAndSpinCount, eax, 4000 invoke EnterCriticalSection ; from the stack jmp .finish endp body WaitForMutex begin push eax ecx edx mov ecx, [.ptrMutex] cmp [ecx+TMutex.type], __mutex_mutex je .mutex lea eax, [ecx+TMutex.critical_section] invoke EnterCriticalSection, eax clc jmp .finish .mutex: invoke WaitForSingleObject, [ecx+TMutex.handle], [.timeout] cmp eax, WAIT_TIMEOUT je .error cmp eax, WAIT_FAILED je .error clc .finish: pop edx ecx eax return .error: stc jmp .finish endp body MutexRelease begin pushf push eax ecx edx mov eax, [.ptrMutex] cmp [eax+TMutex.type], __mutex_mutex je .mutex lea eax, [eax+TMutex.critical_section] invoke LeaveCriticalSection, eax jmp .finish .mutex: invoke ReleaseMutex, [eax+TMutex.handle] .finish: pop edx ecx eax popf return endp body MutexDestroy begin push eax ecx edx mov eax, [.ptrMutex] mov [eax+TMutex.type], __mutex_not_initialized cmp [eax+TMutex.type], __mutex_mutex je .mutex lea eax, [eax+TMutex.critical_section] invoke DeleteCriticalSection, eax jmp .finish .mutex: pushd [eax+TMutex.handle] mov dword [eax+TMutex.handle], 0 invoke CloseHandle ; from the stack .finish: pop edx ecx eax return endp ; DLL procedures. body LibLoad begin pushad stdcall StrDup, [.hLibName] push eax stdcall StrNormalizePath2, eax, '\/' stdcall utf8ToWideChar, eax stdcall StrDel ; from the stack. push eax invoke LoadLibraryExW, eax, NULL, 0 stdcall FreeMem ; from the stack test eax, eax jnz .finish invoke GetLastError stc .finish: mov [esp+4*regEAX], eax popad return endp body LibRelease begin pushad invoke FreeLibrary, [.hLibrary] test eax, eax jnz .finish invoke GetLastError mov [esp+4*regEAX], eax stc .finish: popad return endp body LibImport begin pushad stdcall StrPtr, [.hObjectName] invoke GetProcAddress, [.hLibrary], eax test eax, eax jnz .finish invoke GetLastError stc .finish: mov [esp+4*regEAX], eax popad return endp |
Added freshlib/system/Win32/serial.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Serial IO interface library. Linux part. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ body SerSetParams ;, .hSerial, .Baudrate, .StopBits, .Parity, .Flow, .Timeout .dcb DCB .cto COMMTIMEOUTS begin pushad cld mov ecx, sizeof.DCB/4 xor eax, eax lea edi, [.dcb] rep stosd mov [.dcb.DCBLength], sizeof.DCB lea esi, [.dcb] invoke GetCommState, [.hSerial], esi test eax, eax jz .error OutputMemoryByte esi, sizeof.DCB mov eax, [.Baudrate] mov ecx, [.Parity] mov edx, [.StopBits] OutputValue "Baudrate: ", eax, 10, -1 OutputValue "Parity: ", ecx, 10, -1 OutputValue "Stop bits: ", edx, 10, -1 mov [.dcb.BaudRate], eax mov [.dcb.Parity], cl mov [.dcb.StopBits], dl mov [.dcb.ByteSize], 8 mov [.dcb.Flags], dcb_Binary or dcb_ParityCheck OutputMemoryByte esi, sizeof.DCB invoke SetCommState, [.hSerial], esi OutputValue "SetCommState returns: ", eax, 10, -1 test eax, eax jz .error mov eax, [.Timeout] mov [.cto.ReadIntervalTimeout], eax mov [.cto.ReadTotalTimeoutMultiplier], eax mov [.cto.ReadTotalTimeoutConstant], eax mov [.cto.WriteTotalTimeoutMultiplier], eax mov [.cto.WriteTotalTimeoutConstant], eax lea eax, [.cto] invoke SetCommTimeouts, [.hSerial], eax test eax, eax jz .error clc popad return .error: stc popad return endp |
Added freshlib/system/Win32/timers.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Asynchronous timer library. ; ; Target OS: Win32 ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ uses user32 __sys_time_slice = 10 ;[ms] uglobal if used TimerCreate __InternalTimerID dd ? __InternalTimerThread dd ? end if endg if used TimerCreate & ~ ( defined options.DebugMode.NoTimers & options.DebugMode.NoTimers ) initialize InitWin32Timers begin invoke SetTimer, 0, 0, __sys_time_slice, __TimerProc mov [__InternalTimerID], eax return endp finalize FreeWin32Timers begin ; stop the timer invoke KillTimer, 0, [__InternalTimerID] return endp end if ; This procedure is called by the system on every time quantum. ; this procedure is Win32 TimerProc proc __TimerProc, .hwnd, .msg, .timerID, .time begin lea eax, [__ptrFirstTimer] .loop: mov eax, [eax+TTimer.next] .loop2: test eax, eax jz .end_timers test [eax+TTimer.flags], tmfRunning jz .loop mov ecx, [eax+TTimer.value] add ecx, __sys_time_slice mov [eax+TTimer.value], ecx cmp ecx, [eax+TTimer.interval] jl .loop .exploop: inc [eax+TTimer.Expired] mov ecx, [eax+TTimer.interval] sub [eax+TTimer.value], ecx cmp [eax+TTimer.value], ecx jge .exploop cmp [eax+TTimer.Callback], 0 je .end_event mov ecx, [eax+TTimer.flags] and ecx, $0f cmp ecx, tmfDoNothing je .end_event ; call the callback procedure. .execloop: pushad stdcall [eax+TTimer.Callback], eax popad sub [eax+TTimer.Expired], 1 jg .execloop .end_event: test [eax+TTimer.flags], tmfSyncDestroy jz .loop push eax mov eax, [eax+TTimer.next] ; after the destruction, this pointer will be lost. stdcall TimerDestroy ; pointer from the stack. jmp .loop2 .end_timers: return endp proc GetSysTime .time dq ? begin pushad lea eax, [.time] invoke GetSystemTimeAsFileTime, eax popad return endp __filetimeOffset = $19DB1DED53E8000 proc FileTimeToUnixTime begin push ebx ecx sub eax, __filetimeOffset and $ffffffff sbb edx, __filetimeOffset shr 32 mov ebx, eax mov ecx, 10000000 ; 100 ns -> s mov eax, edx cdq idiv ecx xchg eax, ebx idiv ecx mov edx, ebx pop ecx ebx return endp proc GetTime .time dq ? begin push ecx lea eax, [.time] invoke GetSystemTimeAsFileTime, eax mov eax, dword [.time] mov edx, dword [.time+4] call FileTimeToUnixTime pop ecx return endp proc GetLocalTimeOffset .info TIME_ZONE_INFORMATION begin push ecx edx lea eax, [.info] invoke GetTimeZoneInformation, eax mov ecx, [.info.bias] cmp eax, TIME_ZONE_ID_DAYLIGHT jne @f add ecx, [.info.DaylightBias] @@: cmp eax, TIME_ZONE_ID_STANDARD jne @f add ecx, [.info.StandardBias] @@: imul ecx, 60 neg ecx mov eax, ecx pop edx ecx return endp proc Sleep, .ms begin push eax ecx edx invoke SleepWin, [.ms] pop edx ecx eax return endp proc GetTimestamp begin pushad invoke GetTickCount mov [esp+4*regEAX], eax popad return endp uglobal if used GetFineTimestamp __FPerfCnt dd ? end if endg if used GetFineTimestamp initialize InitPerformanceCounter .freq rd 2 begin pushad lea eax, [.freq] invoke QueryPerformanceFrequency, eax mov eax, [.freq] mov [__FPerfCnt], eax popad return endp end if ; returns dword timestamp in uS proc GetFineTimestamp .time dq ? begin push ecx edx lea eax, [.time] invoke QueryPerformanceCounter, eax mov eax, dword [.time] xor edx, edx mov ecx, 1000000 mul ecx div dword [__FPerfCnt] pop edx ecx return endp |
Added freshlib/system/all.asm.
> > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: System amalgamation include file. Includes all system libraries of FreshLib ; ; Target OS: Any ;_________________________________________________________________________________________ include 'process.asm' include 'memory.asm' include 'files.asm' include 'serial.asm' include 'environment.asm' include 'timers.asm' include 'network.asm' |
Added freshlib/system/environment.asm.
> > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: OS environment functions. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: This file contains the OS independent part of the library and includes the ; respective OS dependent file. ;_________________________________________________________________________________________ module "Environment library" include '%TargetOS%/environment.asm' endmodule |
Changes to freshlib/system/files.asm.
|
| > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | < > | > < | < | < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Files manipulation library. ; ; Target OS: Any ; ; Dependencies: Uses memory.asm for memory allocations. ; ; Notes: This file contains OS independent part of the library and also include ; the respective OS dependent part. ;_________________________________________________________________________________________ module "Files library" struct TFileInfo .timeCreated dq ? .timeAccessed dq ? .timeModified dq ? ends iglobal __std_handle_in: var STDIN = 0 __std_handle_out: var STDOUT = 1 __std_handle_err: var STDERR = 2 endg ;---------------------------------------------------- ; Returns: ; CF = 1 if the path is relative. ; ; CF = 0 if the path is absolute. ; In this case ZF=0 indicates that the ; path is relative towards the current root ; prefix (drive letter in Windows) ; ZF=1 indicates that the path is fully absolute. ; ; CF = 1 - the path is fully relative. ; CF = 0, ZF = 1 - the path is fully absolute. ; CF = 0, ZF = 0 - the path is absolute, but needs ; the current root prefix ahead. ; ; This procedure is OS dependent, because the ; paths are different in the different OSes. ;---------------------------------------------------- interface IsRelativePath, .hPath ; Returns the current root prefix if any. Can be empty string. interface GetCurrentPrefix interface FileOpenAccess, .filename, .access interface FileClose, .handle ; returns 32bit file size in eax interface FileSize, .handle interface FileRead, .handle, .buffer, .count interface FileWrite, .handle, .buffer, .count interface FileLock, .handle, .lock ;---------------------------------------------------- ; if CF = 0, eax is the new possition in the file ; if CF = 1, eax is error code. ;---------------------------------------------------- interface FileSeek, .handle, .dist, .direction interface FileTruncate, .handle interface FileTruncateTo, .handle, .length ;---------------------------------------------------- ; if CF = 0 - the file was deleted ; if CF = 1, eax is error code. ;---------------------------------------------------- interface FileDelete, .filename interface GetCurrentDir interface SetCurrentDir, .hDirectory interface GetErrorString, .code interface FreeErrorString, .ptrString ; reads all items of the directory and fills them in the TArray of type TDirItem. ; arguments: ; dir - string with the path to the directory. ; ; returns: ; if not error: CF=0; eax = pointer to TArray of TDirItem; ; if error: CF=1; eax = error code; interface DirectoryRead, .dir interface GetFileInfo, .hFile, .ptrFileInfo interface FileExists, .hFileName interface CreateDirectory, .DirName ; returns the read handle in eax and write handle in edx interface CreatePipe ;-------------------------------------- ; if CF = 0, eax is handle to the file. ; if CF = 1, eax is error code. ;-------------------------------------- proc FileOpen, .filename begin stdcall FileOpenAccess, [.filename], faReadOnly return endp proc FileCreate, .filename begin stdcall FileOpenAccess, [.filename], faReadWrite or faCreateAlways return endp ;if defined StrLib ; strlib.asm depending procedures. ; reads the whole file content in a string and returns its handle. proc StrLoadFromFile, .ptrFileName begin push ecx stdcall LoadBinaryFile, [.ptrFileName] jc .finish push eax stdcall StrDup, eax stdcall FreeMem ; from the stack clc .finish: pop ecx return endp proc StrSaveToFile, .ptrFileName, .hString begin stdcall StrLen, [.hString] push eax stdcall StrPtr, [.hString] push eax stdcall SaveBinaryFile, [.ptrFileName] ; remaining already in the stack. return endp FILE_LINE_BUFFER = 64 ; reads a line from the text file and positions the file pointer to the begining of ; the next line. ; returns string handle with the line in EAX ; returns CF=1 and EAX=error code on error. proc FileReadLine, .hfile .result dd ? .buffer rb FILE_LINE_BUFFER dd 0 begin pushad stdcall StrNew mov [.result], eax xor edi, edi .read_loop: lea esi, [.buffer] stdcall FileRead, [.hfile], esi, FILE_LINE_BUFFER jc .error_read test eax, eax jz .end_of_file mov ebx, eax mov dword [esi+ebx], 0 cmp ebx, 3 jbe .proceed test edi, edi jz .check_bom ; this is the first chunk. .proceed: mov edi, esi ; start of the line. .char_loop: mov al, [esi] lea esi, [esi+1] cmp al, $0d je .found cmp al, $0a je .found test al, al jnz .char_loop .found: mov byte [esi-1], 0 stdcall StrCat, [.result], edi test al, al jnz .end_of_line cmp ebx, FILE_LINE_BUFFER je .read_loop jmp .file_ok .end_of_line: cmp byte [esi], 0 jne .check_next ; when on the end of the buffer CR or LF were found, check one more byte... push eax stdcall FileRead, [.hfile], esi, 1 ; read one more byte. jc .error_read test eax, eax pop eax jz .end_of_file xor al, $0d xor $0a cmp byte [esi], al je .file_ok inc esi jmp .eol_ok .check_next: xor al, $0d xor $0a cmp byte [esi], al jne .eol_ok inc esi .eol_ok: lea eax, [.buffer] sub esi, eax sub esi, ebx jz .file_ok stdcall FileSeek, [.hfile], esi, fsFromCurrent .file_ok: clc .finish: popad mov eax, [.result] return .error_read: stdcall StrDel, [.result] mov [.result], eax stc jmp .finish .end_of_file: stdcall StrLen, [.result] test eax, eax jnz .file_ok stdcall StrDel, [.result] mov [.result], 0 jmp .file_ok .check_bom: cmp word [esi], $bbef jne .proceed cmp byte [esi+2], $bf jne .proceed add esi, 3 jmp .proceed endp STREAM_LINE_BUFFER = 256 struct TStreamContext .buffer rb STREAM_LINE_BUFFER .size dd ? .pos dd ? ends ; Reads a line from a file, only reading forward. ; Suitable for reading from streams, sockets, devices and pipes. ; Also, it is faster than the FileReadLine because ; reads bigger chunks from the file and only once. ; ; The disadvantage is that it is context dependent ; ; Arguments: ; .hStream: Handle of a file, socket, pipe, etc. ; .pContext: pointer to the context structure TStreamContext ; if 0 a new structure is allocated and returned without reading ; from the stream. ; Returns: ; CF=0, EAX: string handle of the line read or new created and initialized ; structure TStreamContext ; ; CF=1, EAX: Read error code. proc StreamReadLine, .hStream, .pContext begin pushad mov esi, [.pContext] test esi, esi jnz .do_read_stream stdcall GetMem, sizeof.TStreamContext xor ecx, ecx mov [eax+TStreamContext.pos], ecx mov [eax+TStreamContext.size], ecx mov [esp+4*regEAX], eax clc popad return .do_read_stream: stdcall StrNew mov edx, eax mov [esp+4*regEAX], edx mov ebx, [esi+TStreamContext.pos] cmp ebx, [esi+TStreamContext.size] jb .start .read_chunk: call .chunk jc .error jz .error .start: mov edi, ebx .scan: mov al, [esi+ebx] cmp al, $0d je .eol cmp al, $0a je .eol inc ebx cmp ebx, [esi+TStreamContext.size] jb .scan call .append jmp .read_chunk .eol: call .append inc ebx cmp ebx, [esi+TStreamContext.size] jb @f push eax call .chunk pop eax jc .error jz .finish @@: xor al, $0d xor $0a cmp al, [esi+ebx] jne @f inc ebx @@: mov [esi+TStreamContext.pos], ebx .finish: popad return .error: mov [esp+4*regEAX], eax stdcall StrDel, edx popad return .append: mov ecx, ebx sub ecx, edi jz @f add edi, esi stdcall StrCatMem, edx, edi, ecx @@: retn .chunk: stdcall FileRead, [.hStream], esi, STREAM_LINE_BUFFER jc @f mov [esi+TStreamContext.size], eax xor ebx, ebx mov [esi+TStreamContext.pos], ebx test eax, eax @@: retn endp proc FileWriteString, .file, .hString begin push ecx stdcall StrLen, [.hString] mov ecx, eax stdcall StrPtr, [.hString] stdcall FileWrite, [.file], eax, ecx pop ecx return endp ;-------------------------------------------------------------------- ; Allocates needed memory and loads the entire file in this memory. ; Returns pointer to memory block or error code. ; Returns size in ecx or NULL if there is error. ;-------------------------------------------------------------------- proc LoadBinaryFile, .ptrFileName begin push esi edi ebx stdcall FileOpenAccess, [.ptrFileName], faReadOnly jc .error mov edi, eax stdcall FileSize, edi jc .errorclose mov ebx, eax lea ecx, [eax+8] ; It is for the case that the file is ; text and we want to use it as null terminated ; string. stdcall GetMem, ecx jc .errorclose mov esi, eax stdcall FileRead, edi, esi, ebx jc .errorclosemem mov ecx, eax stdcall FileClose, edi mov eax, esi clc pop ebx edi esi return .errorclosemem: stdcall FreeMem, esi .errorclose: push eax stdcall FileClose, edi pop eax .error: |
︙ | ︙ | |||
92 93 94 95 96 97 98 | stc pop edi return endp | | > > | > > > > > > > > > | | > | | > > | > > | | > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 | stc pop edi return endp ; This structure contains one directory item information. ; struct TDirItem .hFilename dd ? ; handle of string with the filename. .Type dd ? ; type of the file. Value of type ftXXXXXX (defined in the OS depending library). .Size dq ? .mTime dq ? .Perm dd ? dd ? .shift = 5 ends proc FreeDirArray, .pDirArray begin push eax ecx mov eax, [.pDirArray] mov ecx, [eax+TArray.count] lea eax, [eax+TArray.array] .freelist: dec ecx js .exit stdcall StrDel, [eax+TDirItem.hFilename] add eax, sizeof.TDirItem jmp .freelist .exit: stdcall FreeMem, [.pDirArray] pop ecx eax return endp ; dsXXXX means "directory sort" dsByName = 1 dsByExt = 2 dsBySize = 3 dsByDate = 4 fdsDescending = $20000000 fdsDirsFirst = $40000000 fdsDirsLast = $80000000 ; This procedure is to be used for sorting arrays of TDirItem with the ; procedure SortArray. ; ; Use it following way: ; ; stdcall SortArray, [.pDirArray], DirItemCompare, DIR_SORT_FLAGS ; ; DIR_SORT_FLAGS is a set of fdsXXXXX flags, and dsXXXX const defined above. proc DirItemCompare, .pElement1, .pElement2, .param begin pushad mov ebx, [.pElement1] mov edx, [.pElement2] test [.param], fdsDirsFirst or fdsDirsLast jz .comp_other mov eax, [ebx+TDirItem.Type] mov ecx, [edx+TDirItem.Type] and eax, not ftLinkMask and ecx, not ftLinkMask test [.param], fdsDirsFirst jnz .dirs_first cmp eax, ftDirectory sete al cmp ecx, ftDirectory sete cl jmp .cmp_dir_file .dirs_first: cmp eax, ftDirectory setne al cmp ecx, ftDirectory setne cl .cmp_dir_file: cmp al, cl je .comp_dir_more ; flags are ok here! .finish: popad return .comp_dir_more: test al, al jnz .comp_other cmp byte [.param], dsByDate je .comp_other mov [.param], dsByName .comp_other: cmp byte [.param], dsByName je .name cmp byte [.param], dsBySize je .size cmp byte [.param], dsByDate jne .name ; date: mov eax, dword [ebx+TDirItem.mTime] mov ecx, dword [ebx+TDirItem.mTime+4] mov esi, dword [edx+TDirItem.mTime] mov edi, dword [edx+TDirItem.mTime+4] jmp .integer .size: mov eax, dword [ebx+TDirItem.Size] mov ecx, dword [ebx+TDirItem.Size+4] mov esi, dword [edx+TDirItem.Size] mov edi, dword [edx+TDirItem.Size+4] .integer: test [.param], fdsDescending jz @f xchg eax, esi xchg ecx, edi and [.param], not fdsDescending @@: cmp ecx, edi jne .endint cmp eax, esi je .name ; universal fall-down. .endint: popad return .name: mov eax, [ebx+TDirItem.hFilename] mov ecx, [edx+TDirItem.hFilename] .comp_strings: test [.param], fdsDescending jz @f xchg eax, ecx @@: stdcall StrCompSort2, eax, ecx, FALSE shl eax, 1 ; if less -> CF = 1, ZF=0 (JB will be taken) ; if equal -> CF = 0, ZF=1 (JE will be taken) ; if more -> CF=0, ZF=0 (JA will be taken) popad return endp proc __FileErrorDisplay, .error_code, .filename begin pushad stdcall NumToStr, [.error_code], ntsDec or ntsUnsigned mov ebx, eax stdcall StrDupMem, .cErrorOpenString push eax stdcall StrCat, eax, ebx stdcall StrCharCat, eax, $0a0d stdcall StrDel, ebx stdcall StrPtr, eax stdcall Output, eax stdcall StrDel ; from the stack. stdcall GetErrorString, [.error_code] push eax stdcall StrPtr, eax stdcall Output, eax stdcall Output, .ccrlf stdcall FreeErrorString ; from the stack cmp [.filename], 0 je .finish stdcall Output, .cErrorFilename stdcall StrPtr, [.filename] stdcall Output, eax stdcall Output, .ccrlf .finish: popad return .cErrorOpenString db "Error code:", 0 .cErrorFilename db "Filename: ", 0 .ccrlf db 13, 10, 0 endp include '%TargetOS%/files.asm' endmodule |
Added freshlib/system/heapmgr.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 | options.DebugHeap = 0 module "Heap manager" include "%TargetOS%/heapmgr.asm" ERR_FASMLIB = 0 ;Internal FASMLIB assertion failed. This is bug in FASMLIB. Please report ERR_UNKNOWN = 1 ;Unknown error ERR_MODULE_NOT_INITIALIZED = 3 ;(internal) Module not initialized ERR_OUT_OF_MEM = 4 ;Out of memory ERR_HEAP_CORRUPT = 5 ;(internal) Heap corrupt ERR_MEMORY_LEAK = 6 ;(internal) Memory leak ERR_INVALID_POINTER = 7 ;(internal) Invalid pointer ERR_OUT_OF_RANGE = 12 ;Out of range ERR_ZERO_SIZE = 14 ;(internal) Zero size ;interface of HEAPBLOCK and heap manager constants struct HEAPBLOCK .sign dw 'HB' ;signature of block. must be 'HB' (heap block) .used db ? ;0 = block is unused, 1 = block is used .last db ? ;0 = block isn't last, 1 = block is last ;only valid for used blocks .size dd ? ;real size of this block (not including header) .prev dd ? ;pointer to previous block. 0=this is first block .asize dd ? ;allocated size of this block (can be smaller than real size) ends ;heap size alignment (default = 4KB) ;it's value must be power of two!!! match =HEAP_SIZE_ALIGN, HEAP_SIZE_ALIGN { HEAP_SIZE_ALIGN equ 4096 } ;intial heap size (default = 16KB) ;must be multiple of HEAP_SIZE_ALIGN match =HEAP_INIT_SIZE, HEAP_INIT_SIZE { HEAP_INIT_SIZE equ 16384 } ;sizes of block will be multiples of this value (default = 8 bytes) ;any smaller free block will be left out as padding ;it's value must be power of two!!! match =HEAP_BLOCK_ALIGN, HEAP_BLOCK_ALIGN { HEAP_BLOCK_ALIGN equ 16 } ;minimal size of block, when it is split from block whose size shrinked ;must be multiple of HEAP_BLOCK_ALIGN match =HEAP_MIN_SPLIT_SIZE, HEAP_MIN_SPLIT_SIZE { HEAP_MIN_SPLIT_SIZE equ HEAP_BLOCK_ALIGN } iglobal var mem.initialized = 0 ;0 = module not initialized, 1=initialized endg uglobal var mem.heap.start = ? ;pointer to beginning of heap var mem.heap.size = ? ;size of heap var mem.alloc_count = ? ;number of allocations (to discover memory leak) var mem.heap_corrupt = ? ;0 = okay, 1 = heap corrupt if used mem.access_mutex align 4 mem.access_mutex TMutex end if endg if used GetMem ;============================================================================ ; mem.init ; desc: initalizes mem module (and it's heap manager) ; args: none ; ret: CF set on error ; note: initialization is required for allocation ; error: ERR_UNKNOWN - platform-specific error ; +mem.alloc_heap (in platform-dependant part of mem module) ;============================================================================ initialize mem.init begin ;if module is already initialized, just return cmp [mem.initialized], 0 jne .rnc ; call platform-dependant heap allocation stdcall mem.alloc_heap, HEAP_INIT_SIZE jc .rc ; save heap info mov [mem.heap.start], eax mov [mem.heap.size], HEAP_INIT_SIZE ; create first heap block mov [eax + HEAPBLOCK.sign], 'HB' mov [eax + HEAPBLOCK.size], HEAP_INIT_SIZE - sizeof.HEAPBLOCK mov [eax + HEAPBLOCK.prev], 0 mov [eax + HEAPBLOCK.last], 1 mov [eax + HEAPBLOCK.used], 0 ; initialized mov [mem.alloc_count], 0 mov [mem.heap_corrupt], 0 mov [mem.initialized], 1 if options.Threads stdcall MutexCreate, 0, mem.access_mutex stdcall MutexRelease, mem.access_mutex end if .rnc: clc .r: return .rc: stc return endp ;============================================================================ ; mem.uninit ; desc: uninitalizes mem module (and it's heap manager) ; args: none ; ret: CF set on error ; error: ERR_UNKNOWN - platform-specific error ; ERR_MEMORY_LEAK - you didn't free some allocated block ; +mem.free_heap (in platform-dependant part of mem module) ;============================================================================ finalize mem.uninit begin if options.Threads stdcall WaitForMutex, mem.access_mutex, -1 stdcall MutexDestroy, mem.access_mutex end if ;is module initialized? cmp [mem.initialized], 0 jz .error_not_initialized cmp [mem.heap_corrupt],0 jne .dont_test_heap ; check heap stdcall __mem.test_heap jc .rc .dont_test_heap: ; call platform-dependant free heap stdcall mem.free_heap, [mem.heap.start], [mem.heap.size] jc .rc ; uninitialized mov [mem.initialized], 0 ; return error if there is some memory leak cmp [mem.alloc_count], 0 ja .error_memory_leak clc return .rc: mov [mem.initialized], 0 stc return .error_memory_leak: mov eax, ERR_MEMORY_LEAK jmp .rc .error_not_initialized: mov eax, ERR_MODULE_NOT_INITIALIZED jmp .rc endp end if uglobal if used LogMemory align 4 __LogMemoryMutex TMutex end if endg if used LogMemory initialize InitLogMemory begin stdcall MutexCreate, 0, __LogMemoryMutex stdcall MutexRelease, __LogMemoryMutex return endp finalize FreeLogMemory begin stdcall MutexDestroy, __LogMemoryMutex return endp end if proc LogMemory, .pmsg, .address, .argcount begin pushad mov esi, [ebp] ; caller stack frame. mov edi, [esi] ; one level back. cmp edi, ebp ja .ediok mov edi, esi .search: add edi, 4 cmp [edi], esp jb .search .ediok: stdcall WaitForMutex, __LogMemoryMutex, -1 stdcall Output, [.pmsg] stdcall OutputNumber, [.address], 16, 8 stdcall Output, '; Call from: $' stdcall OutputNumber, [esi+4], 16, 8 stdcall Output, <',',' $'> stdcall OutputNumber, [edi+4], 16, 8 xor ecx, ecx inc ecx .argloop: stdcall Output, '; Arg(' stdcall OutputNumber, ecx, 10, 2 stdcall Output, ') = $' stdcall OutputNumber, [esi+4*ecx+4], 16, 8 inc ecx cmp ecx, [.argcount] jbe .argloop stdcall Output, .cCRLF stdcall MutexRelease, __LogMemoryMutex popad return .cCRLF db 13, 10, 0 endp body GetMem begin if options.Threads stdcall WaitForMutex, mem.access_mutex, -1 jc .errmutex end if stdcall mem.alloc0, [.size] if options.Threads stdcall MutexRelease, mem.access_mutex end if jc .error if options.DebugHeap stdcall LogMemory, 'Allocate:', eax, 1 clc end if return .error: if options.DebugHeap stdcall LogMemory, 'Allocate error:', eax, 1 stc end if xor eax, eax return .errmutex: if options.DebugHeap stdcall LogMemory, 'Mutex timeout:', eax, 1 stc end if jmp .error endp body FreeMem begin push eax if options.Threads stdcall WaitForMutex, mem.access_mutex, -1 jc .finish end if stdcall mem.free, [.ptr] if options.Threads stdcall MutexRelease, mem.access_mutex end if if options.DebugHeap jnc .ok stdcall LogMemory, 'Free error:', [.ptr], 1 stc jmp .finish .ok: stdcall LogMemory, 'Free:', [.ptr], 1 clc end if .finish: pop eax return endp body ResizeMem begin if options.DebugHeap stdcall LogMemory, 'Reallocate attempt:', [.ptr], 2 end if if options.Threads stdcall WaitForMutex, mem.access_mutex, -1 jc .error end if stdcall mem.realloc0, [.ptr], [.newsize] if options.Threads stdcall MutexRelease, mem.access_mutex end if jnc .finish .error: mov eax, [.ptr] if options.DebugHeap jnc .ok stdcall LogMemory, 'Reallocate failed:', eax, 2 stc jmp .finish .ok: stdcall LogMemory, 'Reallocate success:', eax, 2 clc end if .finish: return endp ;; @name mem.alloc0 ;; @desc ;; Allocates block of memory, and fills it with zeroes. ;; @arg size ;; Size of memory to allocate ;; @ret ;; CF set on error, otherwise ;; EAX = pointer to beginning of allocated memory block ;; @err ERR_OUT_OF_MEM ;; Not enough memory ;; @err ERR_ZERO_SIZE ;; size = 0 ;; @err ERR_OUT_OF_RANGE ;; size is negative (or larger than 7FFFFFFFh if viewed as unsigned) ;; @err ERR_HEAP_CORRUPT ;; {heap:Heap is corrupted}. You was writing to memory outside of allocated block. ;; @err ERR_MODULE_NOT_INITIALIZED ;; Module is not initialized. Initialize module with {mem.init} to use this procedure. ;; @err ERR_UNKNOWN ;; System returned error that wasn't translated to FASMLIB error. ;; You can {contact} author about this, and translation can be added. ;; @warn Don't forget to release allocated block with {mem.free}! ;; @note returned pointer must be always >= 10000h ;; @note Returned pointer is always >= 10000h to make it easily distinguishable from handles. ;; @note Maximal allowed size is 7FFFFFFFh, to catch errors with negative values. ;; @note Altough returned block may have bigger size than requested on some implementations, ;; don't use this additional memory. ;; It is not zeroes, an {mem.realloc} doesn't preserve this memory. ;; @note Memory management must be {mem.init:initialized} for this procedure to work. ;; @note This is platform-specific procedure proc mem.alloc0, .size begin push ebx ;error if size=0 cmp [.size], 0 je .error_size_zero ;allocate stdcall mem.alloc, [.size] jc .rc mov ebx, eax ;zero memory stdcall mem.fill, ebx, [.size], 0 jc .rc mov eax, ebx .rnc: clc .r: pop ebx return .rc: stc int3 jmp .r .error_size_zero: mov eax, ERR_ZERO_SIZE jmp .rc endp ;============================================================================ ;; @name mem.realloc0 ;; @desc ;; Rellocates (resizes) block of memory. ;; Block can be moved during this process, so you need to update pointer(s) to it. ;; Contents of block are preserved. ;; If block is enlarging, contents of added space are filled with zeroes. ;; @arg blockptr ;; Pointer to block to relocate. ;; This must be same pointer as returned from allocation function, pointer into block is not enough. ;; @arg newsize ;; New size of block, in bytes ;; @ret ;; CF set on error, orherwise ;; EAX = pointer to reallocated memory block ;; @err ERR_INVALID_POINTER ;; Blockptr is not a valid allocated block pointer. ;; This could also mean {heap:heap corruption}, these two cases cannot be properly distinguished. ;; @err ERR_OUT_OF_MEM ;; Not enough memory ;; @err ERR_ZERO_SIZE ;; size = 0 ;; @err ERR_OUT_OF_RANGE ;; size is negative (or larger than 7FFFFFFFh if viewed as unsigned) ;; @err ERR_HEAP_CORRUPT ;; {heap:Heap is corrupted}. You was writing to memory outside of allocated block. ;; @err ERR_MODULE_NOT_INITIALIZED ;; Module is not initialized. Initialize module with {mem.init} to use this procedure. ;; @err ERR_UNKNOWN ;; System returned error that wasn't translated to FASMLIB error. ;; You can {contact} author about this, and translation can be added. ;; @dep mem.realloc_heap ;; Only on platforms where FASMLIB heap manager is used. ;; @warn ;; Block can be moved during realocation! If you had any pointers to block, ;; they become invalid (so rather prefer using indexes to allocated blocks). ;; If you saved block pointer in variable, you need to rewrite it with ;; returned value. ;; @note Returned pointer is always >= 10000h to make it easily distinguishable from handles. ;; @note Maximal allowed newsize is 7FFFFFFFh, to catch errors with negative values. ;; @note Altough returned block may have bigger size than requested on some implementations, ;; don't use this additional memory. {mem.realloc} doesn't preserve this memory. ;; @note Memory management must be {mem.init:initialized} for this procedure to work. ;; @note This is platform-specific procedure proc mem.realloc0, .blockptr, .newsize begin push ebx esi ;error if newsize=0 cmp [.newsize], 0 je .error_newsize_zero ;ESI = save old block size stdcall GetMemSize, [.blockptr] mov esi, eax ;reallocate stdcall mem.realloc, [.blockptr], [.newsize] jc .r mov ebx, eax ;number of bytes to zero = newsize-oldsize mov eax, [.newsize] sub eax, esi ;zero new memory pushd 0 pushd eax lea eax, [ebx+esi] pushd eax call mem.fill jc .r mov eax, ebx .rnc: clc .r: pop esi ebx return .rc: stc int3 jmp .r .error_newsize_zero: mov eax, ERR_ZERO_SIZE jmp .rc endp ;============================================================================ ; mem.alloc ; desc: allocates <size> bytes of memory ; args: size - size of memory to allocate ; ret: CF set on error, otherwise ; eax = pointer to beginning of allocated memory block ; note: - returned pointer must be always >= 10000h ; - contents of allocated memory are unknown ; (use alloc0 to have block zeroed) ; - don't forget to mem.free allocated memory! ; - maximal allowed size if 7FFFFFFFh, to catch errors with negative value ; error: ERR_OUT_OF_MEM - out of memory ; ERR_ZERO_SIZE - size=0 ; ERR_OUT_OF_RANGE - size >= 80000000h ; ERR_HEAP_CORRUPT - you was overwriting memory outside allocated block ; ERR_UNKNOWN ; ERR_MODULE_NOT_INITIALIZED ; mem.heap_alloc ;============================================================================ proc mem.alloc, .size begin push ebx ecx edx esi edi ;is module initialized? cmp [mem.initialized], 0 je .error_not_initialized ;was heap corruption detected? cmp [mem.heap_corrupt], 0 jne .error_heap_corrupt ;error if size=0 cmp [.size], 0 je .error_size_zero jl .error_size_too_big ;ECX = size to allocate, aligned to HEAP_BLOCK_ALIGN mov ecx, [.size] add ecx, HEAP_BLOCK_ALIGN-1 and ecx, not (HEAP_BLOCK_ALIGN-1) ;EBX = pointer to first HEAP block mov ebx, [mem.heap.start] ;find unused block with enough space .find_block: ;check if block is okay cmp [ebx + HEAPBLOCK.sign], 'HB' jne .error_heap_corrupt ;is the block unused? cmp [ebx + HEAPBLOCK.used], 1 ja .error_heap_corrupt je .try_next_block ;is the block large enough? cmp [ebx + HEAPBLOCK.size], ecx jae .block_found .try_next_block: ;is there some next block? cmp [ebx + HEAPBLOCK.last], 1 ja .error_heap_corrupt je .no_block_found ;go to next block add ebx, [ebx + HEAPBLOCK.size] add ebx, sizeof.HEAPBLOCK jmp .find_block ;no suitable block found. we need to enlarge heap ;EBX = pointer to last block .no_block_found: .resize_heap: ; increasize heap size by needed size + header size aligned to HEAP_SIZE_ALIGN mov edx, ecx add edx, sizeof.HEAPBLOCK add edx, HEAP_SIZE_ALIGN-1 and edx, not (HEAP_SIZE_ALIGN-1) add edx, [mem.heap.size] stdcall mem.realloc_heap, [mem.heap.start], edx, [mem.heap.size] mov [mem.heap_corrupt], 1 ;if this call failed, we are screwed jc .rc mov [mem.heap_corrupt], 0 xchg [mem.heap.size], edx ;edx = size of added block mov eax, [mem.heap.size] sub eax, edx mov edx, eax ;if last block was free, we append new space to it cmp [ebx + HEAPBLOCK.used], 1 jne .add_new_space_to_last_block ;last block is used, but first we need to check if we can take enough unused space from last block ;if there is at least sizeof.HEAPBLOCK unused bytes after alignation, we take them mov esi, [ebx + HEAPBLOCK.asize] add esi, HEAP_BLOCK_ALIGN-1 and esi, not (HEAP_BLOCK_ALIGN-1) mov eax, [ebx + HEAPBLOCK.size] sub eax, esi jc .create_block_in_added_space ;if size is not even aligned. shouldn't happen but anyway... cmp eax, sizeof.HEAPBLOCK jb .create_block_in_added_space ;EBX = last block, ESI = new size of EBX block .take_space_from_last_block: ;set up EBX mov [ebx + HEAPBLOCK.last], 0 mov [ebx + HEAPBLOCK.size], esi ;set up ESI lea esi, [ebx + esi + sizeof.HEAPBLOCK] mov [esi + HEAPBLOCK.sign], 'HB' mov [esi + HEAPBLOCK.last], 1 mov [esi + HEAPBLOCK.prev], ebx mov eax, [mem.heap.start] add eax, [mem.heap.size] sub eax, esi sub eax, sizeof.HEAPBLOCK mov [esi + HEAPBLOCK.size], eax ;size = up to end of block mov [esi + HEAPBLOCK.used], 0 mov ebx, esi jmp .block_found .create_block_in_added_space: ;esi = new block lea esi, [ebx + sizeof.HEAPBLOCK] add esi, [ebx + HEAPBLOCK.size] ;set up the block mov [ebx + HEAPBLOCK.last], 0 mov [esi + HEAPBLOCK.sign], 'HB' mov [esi + HEAPBLOCK.last], 1 mov [esi + HEAPBLOCK.prev], ebx sub edx, sizeof.HEAPBLOCK mov [esi + HEAPBLOCK.size], edx mov [esi + HEAPBLOCK.used], 0 mov ebx, esi jmp .block_found .add_new_space_to_last_block: add [ebx + HEAPBLOCK.size], edx ;suitable block found, we will use it for allocation ;EBX = pointer to block, ecx=size to allocate .block_found: ;EDI = beginning of new block aligned lea edi, [ebx + sizeof.HEAPBLOCK + ecx] ;EDX = space left in block mov edx, [ebx + HEAPBLOCK.size] sub edx, ecx jz .set_block ;if zero, we can skip it ;ESI = next block cmp [ebx + HEAPBLOCK.last], 1 ja .error_heap_corrupt je .is_last_block lea esi, [ebx + sizeof.HEAPBLOCK] add esi, [ebx + HEAPBLOCK.size] jmp .not_last_block .is_last_block: sub edx, sizeof.HEAPBLOCK ;if following space is not big enough, leave it as padding cmp edx, HEAP_BLOCK_ALIGN jb .set_block ;there is enough space, create new block (EDI) mov [ebx + HEAPBLOCK.last], 0 mov [ebx + HEAPBLOCK.size], ecx mov [edi + HEAPBLOCK.sign], 'HB' mov [edi + HEAPBLOCK.used], 0 mov [edi + HEAPBLOCK.last], 1 mov [edi + HEAPBLOCK.size], edx mov [edi + HEAPBLOCK.prev], ebx jmp .set_block .not_last_block: ;if next block is unused, move it to rest of buffer append space cmp [esi + HEAPBLOCK.used], 0 jne .next_block_used .next_block_unused: ;no moving if gained space is <= sizeof.HEAPBLOCK (could case problems) cmp edx, sizeof.HEAPBLOCK jbe .set_block ;next block is unused, move it to EDI mov [ebx + HEAPBLOCK.size], ecx mov [esi + HEAPBLOCK.sign], 0 ;clean sign of the next block, to prevent identifying it as valid block in future mov [edi + HEAPBLOCK.sign], 'HB' mov [edi + HEAPBLOCK.used], 0 ;newblock.used = 0 mov al, [esi + HEAPBLOCK.last] mov [edi + HEAPBLOCK.last], al mov eax, [esi + HEAPBLOCK.size] add eax, [edx - sizeof.HEAPBLOCK] add [edi + HEAPBLOCK.size], eax ;newblock.size = newblock.size + nextblock.size - nextblock_header_size mov [edi + HEAPBLOCK.prev], ebx ;newblock.prev = previous block (EBX) mov [eax + HEAPBLOCK.prev], edi ;nextblock.next.prev = newblock jmp .set_block ;following block (ESI) is used .next_block_used: sub edx, sizeof.HEAPBLOCK ;if remaining space is not big enough to create new block, leave it as padding cmp edx, HEAP_BLOCK_ALIGN jb .set_block ;it's big enough, so create new block mov [ebx + HEAPBLOCK.size], ecx mov [edi + HEAPBLOCK.sign], 'HB' mov [edi + HEAPBLOCK.size], edx mov [edi + HEAPBLOCK.prev], ebx mov [edi + HEAPBLOCK.used], 0 mov [edi + HEAPBLOCK.last], 0 lea eax, [edi + edx + sizeof.HEAPBLOCK] mov [eax + HEAPBLOCK.prev], edi ;ebx->next->prev = ebx->next ;set current block we are going to allocate .set_block: mov eax, [.size] mov [ebx + HEAPBLOCK.asize], eax mov [ebx + HEAPBLOCK.used], 1 ;another block successfully allocated inc [mem.alloc_count] ;return pointer to block lea eax, [ebx + sizeof.HEAPBLOCK] .rnc: clc .r: pop edi esi edx ecx ebx return .rc: DebugMsg "Error mem.alloc" stc jmp .r .error_not_initialized: mov eax, ERR_MODULE_NOT_INITIALIZED jmp .rc .error_heap_corrupt: int3 mov [mem.heap_corrupt], 1 mov eax, ERR_HEAP_CORRUPT jmp .rc .error_size_zero: mov eax, ERR_ZERO_SIZE jmp .rc .error_size_too_big: mov eax, ERR_OUT_OF_RANGE jmp .rc endp ;============================================================================= ; mem.free ; desc: deallocates memory block ; args: blockptr - pointer to memory block returned by mem.alloc ; ret: CF set on error ; note: after error, consider block as freed, don't use it anymore ; error: ERR_INVALID_POINTER - if blockptr isn't valid block pointer ; ERR_HEAP_CORRUPT - you was overwriting memory outside allocated block ; ERR_UNKNOWN ; ERR_MODULE_NOT_INITIALIZED ; ERR_FASMLIB ;============================================================================= proc mem.free, .blockptr begin push eax ebx edi ;is module initialized? cmp [mem.initialized], 0 je .error_not_initialized ;was heap corruption detected? cmp [mem.heap_corrupt], 0 jne .error_heap_corrupt ;EBX = pointer to heap block mov ebx, [.blockptr] sub ebx, sizeof.HEAPBLOCK ;check if pointer lies inside heap mov eax, ebx sub eax, [mem.heap.start] jb .error_bad_pointer sub eax, [mem.heap.size] jae .error_bad_pointer ;check block cmp [ebx + HEAPBLOCK.sign], 'HB' jne .error_bad_pointer cmp [ebx + HEAPBLOCK.used], 1 ja .error_heap_corrupt jb .error_bad_pointer ;free block mov [ebx + HEAPBLOCK.used], 0 .check_following_block: ;EDI = following block (if any) cmp [ebx + HEAPBLOCK.last], 1 ja .error_heap_corrupt je .check_previous_block lea edi, [ebx + sizeof.HEAPBLOCK] add edi, [ebx + HEAPBLOCK.size] ;check following block cmp [edi + HEAPBLOCK.sign], 'HB' jne .error_heap_corrupt cmp [edi + HEAPBLOCK.prev], ebx jne .error_heap_corrupt ;if following block is unused, append it cmp [edi + HEAPBLOCK.used], 1 ja .error_heap_corrupt je .check_previous_block ;append block mov [edi + HEAPBLOCK.sign], 0 mov eax, [edi + HEAPBLOCK.size] add eax, sizeof.HEAPBLOCK add [ebx + HEAPBLOCK.size], eax mov al, [edi + HEAPBLOCK.last] mov [ebx + HEAPBLOCK.last], al .check_previous_block: ;EDI = previous block (if any) mov edi,[ebx + HEAPBLOCK.prev] test edi, edi jz .done ;check EDI block cmp [edi + HEAPBLOCK.sign], 'HB' jne .error_heap_corrupt cmp [edi + HEAPBLOCK.last], 0 jne .error_heap_corrupt lea eax, [edi + sizeof.HEAPBLOCK] add eax, [edi + HEAPBLOCK.size] cmp eax, ebx jne .error_heap_corrupt ;if EDI block is unused, append EBX block to to it cmp [edi + HEAPBLOCK.used], 1 ja .error_heap_corrupt je .done ;append block mov [ebx + HEAPBLOCK.sign], 0 mov eax, [ebx + HEAPBLOCK.size] add eax, sizeof.HEAPBLOCK add [edi + HEAPBLOCK.size], eax mov al, [ebx + HEAPBLOCK.last] mov [edi + HEAPBLOCK.last], al mov ebx, edi .done: ;if this isn't last block, set prev of next block cmp [ebx + HEAPBLOCK.last], 1 je @f lea eax, [ebx + sizeof.HEAPBLOCK] add eax, [ebx + HEAPBLOCK.size] mov [eax + HEAPBLOCK.prev], ebx @@: ;another block successfully released dec [mem.alloc_count] jc .error_alloc_count_overflow ;TODO - reduce heap size if ebx is last? .rnc: clc .r: pop edi ebx eax return .rc: stc jmp .r .error_not_initialized: mov eax, ERR_MODULE_NOT_INITIALIZED jmp .rc .error_heap_corrupt: int3 mov [mem.heap_corrupt], 1 mov eax, ERR_HEAP_CORRUPT jmp .rc .error_bad_pointer: mov eax, ERR_INVALID_POINTER jmp .rc .error_alloc_count_overflow: mov eax, ERR_FASMLIB jmp .rc endp ;============================================================================= ; mem.realloc ; desc: reallocates memory block ; args: blockptr - pointer to memory block returned by mem.(re)alloc ; newsize - new size of memory block ; ret: CF set on error, orherwise ; eax = pointer to reallocated memory block ; note: returned pointer must be always >= 10000h ; - data in block are is modified (only data at the end of block is ; lost if newsize < previous size) ; - if block is enlarging, then contents of added memory are unknown ; (use realloc0 to have it zeroed) ; - block can move to other place in memory, so previous pointers into ; block become invalid (so rather use indexes in block than pointers) ; - maximal allowed size if 7FFFFFFFh, to catch errors with negative value ; - if you had pointer stored in variable, don't forget to restore it: ; libcall mem.realloc, [blockptr], [newsize] ; jc error ; mov [blockptr], eax ;without this, it's hard-to-find bug ; error: ERR_INVALID_POINTER - blockptr isn't a valid block pointer ; ERR_HEAP_CORRUPT - you was overwriting memory outside allocated block ; ERR_ZERO_SIZE - newsize = 0 ; ERR_OUT_OF_RANGE - newsize >= 80000000h ; ERR_MODULE_NOT_INITIALIZED ; +mem.alloc ; +mem.free ;============================================================================= proc mem.realloc, .blockptr, .newsize begin push ebx ecx edx esi edi ;is module initialized? cmp [mem.initialized], 0 je .error_not_initialized ;was heap corruption detected? cmp [mem.heap_corrupt], 0 jne .error_heap_corrupt ;error if newsize=0 cmp [.newsize], 0 je .error_newsize_zero jl .error_newsize_too_big ;EBX = pointer to heap block mov ebx, [.blockptr] sub ebx, sizeof.HEAPBLOCK ;check if pointer lies inside heap mov eax, ebx sub eax, [mem.heap.start] jb .error_bad_pointer sub eax, [mem.heap.size] jae .error_bad_pointer ;check block cmp [ebx + HEAPBLOCK.sign], 'HB' jne .error_bad_pointer cmp [ebx + HEAPBLOCK.used], 1 ja .error_heap_corrupt jb .error_bad_pointer ;if newsize fits into real size of block, just reset size mov ecx, [.newsize] cmp ecx, [ebx + HEAPBLOCK.size] ja .current_block_too_small mov [ebx + HEAPBLOCK.asize], ecx jmp .done .current_block_too_small: ;ECX = requested size of block aligned add ecx, HEAP_BLOCK_ALIGN-1 and ecx, not (HEAP_BLOCK_ALIGN-1) ;EDX = required additional size mov edx, ecx sub edx, [ebx + HEAPBLOCK.size] ;if there is no following block, we must allocate cmp [ebx + HEAPBLOCK.last], 1 je .allocate_new_block ja .error_heap_corrupt ;ESI = following block lea esi, [ebx + sizeof.HEAPBLOCK] add esi, [ebx + HEAPBLOCK.size] ;check following block cmp [esi + HEAPBLOCK.sign], 'HB' jne .error_heap_corrupt cmp [esi + HEAPBLOCK.prev], ebx jne .error_heap_corrupt ;if following block is used, we must allocate cmp [esi + HEAPBLOCK.used], 1 ja .error_heap_corrupt je .allocate_new_block ;if following block is not big enough, we must allocate mov eax, [esi + HEAPBLOCK.size] add eax, sizeof.HEAPBLOCK cmp edx, eax ja .allocate_new_block .append_following_block: ;EBX = our block, ESI=following block, EAX=size of new block (header included) add [ebx + HEAPBLOCK.size], eax mov eax, [.newsize] mov [ebx + HEAPBLOCK.asize], eax mov [esi + HEAPBLOCK.sign], 0 ;delete mark ;if next block was last, set this one as last mov al, [esi + HEAPBLOCK.last] mov [ebx + HEAPBLOCK.last], al cmp al, 1 ja .error_heap_corrupt je .block_created ;otherwise point nextblock.prev to ours block add esi, [esi + HEAPBLOCK.size] ;move to next block add esi, sizeof.HEAPBLOCK mov [esi + HEAPBLOCK.prev], ebx jmp .block_created .allocate_new_block: ;allocate new block mov ecx, [.newsize] stdcall mem.alloc, ecx jc .rc ;copy contents of old block into new block mov edi, eax lea esi, [ebx+sizeof.HEAPBLOCK] stdcall mem.copy, edi, esi, [ebx+HEAPBLOCK.asize] jc .rc ;free old block stdcall mem.free, esi jc .rc ;return new block mov eax, edi jmp .rnc .block_created: ;now check whether to split unused part from created block ;ECX = aligned real size of block mov ecx, [ebx + HEAPBLOCK.asize] add ecx, HEAP_BLOCK_ALIGN-1 and ecx, not (HEAP_BLOCK_ALIGN-1) ;EDX = gained space mov edx, [ebx + HEAPBLOCK.size] sub edx, ecx ;if it's at least sizeof.HEAPBLOCK + HEAP_BLOCK_ALIGN, create new block sub edx, sizeof.HEAPBLOCK jb .done cmp edx, HEAP_BLOCK_ALIGN jb .done ;ESI = new block mov [ebx + HEAPBLOCK.size], ecx lea esi, [ebx + ecx + sizeof.HEAPBLOCK] mov [esi + HEAPBLOCK.sign], 'HB' mov [esi + HEAPBLOCK.used], 0 mov [esi + HEAPBLOCK.size], edx mov [esi + HEAPBLOCK.prev], ebx mov al, [ebx + HEAPBLOCK.last] mov [ebx + HEAPBLOCK.last], 0 mov [esi + HEAPBLOCK.last], al ;if esi isn't last, set esi->next->prev = esi cmp al, 1 ja .error_heap_corrupt je @f lea eax, [esi + edx + sizeof.HEAPBLOCK] mov [eax + HEAPBLOCK.prev], esi @@: .done: ;return pointer lea eax, [ebx + sizeof.HEAPBLOCK] .rnc: clc .r: pop edi esi edx ecx ebx return .rc: stc jmp .r .error_not_initialized: mov eax, ERR_MODULE_NOT_INITIALIZED jmp .rc .error_heap_corrupt: int3 mov [mem.heap_corrupt], 1 mov eax, ERR_HEAP_CORRUPT jmp .rc .error_newsize_zero: mov eax, ERR_ZERO_SIZE jmp .rc .error_newsize_too_big: mov eax, ERR_OUT_OF_RANGE jmp .rc .error_bad_pointer: mov eax, ERR_INVALID_POINTER jmp .rc endp ;============================================================================= ; mem.size ; desc: returns size of memory block ; args: blockptr - pointer to memory block returned by mem.alloc ; ret: CF set on error, orherwise ; eax = size of memory block ; error: ERR_INVALID_POINTER - blockptr isn't a valid block pointer ; ERR_HEAP_CORRUPT - you was overwriting memory outside allocated block ; ERR_UNKNOWN ; ERR_MODULE_NOT_INITIALIZED ;============================================================================= proc GetMemSize, .blockptr begin push ebx ;is module initialized? cmp [mem.initialized], 0 je .error_not_initialized ;was heap corruption detected? cmp [mem.heap_corrupt], 0 jne .error_heap_corrupt ;EBX = pointer to heap block mov ebx, [.blockptr] sub ebx, sizeof.HEAPBLOCK ;check if pointer lies inside heap mov eax, ebx sub eax, [mem.heap.start] jb .error_bad_pointer sub eax, [mem.heap.size] jae .error_bad_pointer ;check block cmp [ebx + HEAPBLOCK.sign], 'HB' jne .error_bad_pointer cmp [ebx + HEAPBLOCK.used], 1 ja .error_heap_corrupt jb .error_bad_pointer cmp [ebx + HEAPBLOCK.last], 1 ja .error_heap_corrupt ;return size mov eax, [ebx + HEAPBLOCK.asize] cmp eax, [ebx + HEAPBLOCK.size] ja .error_heap_corrupt .rnc: clc .r: pop ebx return .rc: stc pop ebx return .error_not_initialized: mov eax, ERR_MODULE_NOT_INITIALIZED jmp .rc .error_heap_corrupt: int3 mov [mem.heap_corrupt], 1 mov eax, ERR_HEAP_CORRUPT jmp .rc .error_bad_pointer: mov eax, ERR_INVALID_POINTER jmp .rc endp ;_______________________________________________________________________________________________ ;=================================================================== ; internal - for testing heap proc __mem.test_heap begin push ebx edx ;is module initialized? cmp [mem.initialized], 0 je .error_not_initialized ;was heap corruption detected? cmp [mem.heap_corrupt], 0 jne .error_heap_corrupt mov ebx, [mem.heap.start] mov edx, 0 .process_block: ;check if block lies in heap mov eax, ebx sub eax, [mem.heap.start] jb .error_heap_corrupt cmp eax, [mem.heap.size] jae .error_heap_corrupt ;check block cmp [ebx + HEAPBLOCK.sign], 'HB' jne .error_heap_corrupt cmp [ebx + HEAPBLOCK.used], 1 ja .error_heap_corrupt cmp [ebx + HEAPBLOCK.prev], edx jne .error_heap_corrupt ;if used, check 0 < asize <= size cmp [ebx + HEAPBLOCK.used], 1 ja .error_heap_corrupt jb @f mov eax, [ebx + HEAPBLOCK.asize] test eax, eax je .error_heap_corrupt cmp eax, [ebx + HEAPBLOCK.size] ja .error_heap_corrupt @@: ;check if last block fills entire heap cmp [ebx + HEAPBLOCK.last], 1 ja .error_heap_corrupt jb @f lea eax, [ebx + sizeof.HEAPBLOCK] add eax, [ebx + HEAPBLOCK.size] sub eax, [mem.heap.start] cmp eax, [mem.heap.size] jne .error_heap_corrupt @@: ;if this was last block, end cmp [ebx + HEAPBLOCK.last], 1 je .done ;move to next block mov edx, ebx add ebx, [ebx + HEAPBLOCK.size] add ebx, sizeof.HEAPBLOCK jmp .process_block .done: ;does last block fill entire heap? lea eax, [ebx + sizeof.HEAPBLOCK] add eax, [ebx + HEAPBLOCK.size] sub eax, [mem.heap.start] cmp eax, [mem.heap.size] jne .error_heap_corrupt .rnc: clc .r: pop edx ebx return .rc: stc jmp .r .error_not_initialized: mov eax, ERR_MODULE_NOT_INITIALIZED jmp .rc .error_heap_corrupt: int3 mov [mem.heap_corrupt], 1 mov eax, ERR_HEAP_CORRUPT jmp .rc endp ;; @name mem.copy ;; @desc ;; Copies contents block of memory of given size to another place. ;; Supports overlapped copy (like "memmove" in C). ;; @arg dest ;; pointer to destination place, to where the block will be copied ;; @arg src ;; pointer to source place, from where the block will be copied ;; @arg size ;; number of bytes to copy ;; @ret ;; CF = 1 on error, otherwise ;; EAX = dest ;; @err ERR_INVALID_POINTER ;; some of pointers point to inaccessible area ;; @note Supports overlapped copy, eg. case when src < dest < src+size. ;; @note Does nothing when size=0 ;; @note Memory management doesn't have to be initalized for this to work proc mem.copy, .dest, .src, .size begin push ecx esi edi pushf mov edi, [.dest] mov esi, [.src] mov ecx, [.size] ;just return when copying 0 bytes cmp ecx, 0 je .done ;check if dest area is overlapping src (when src < dest < src+size) cmp esi, edi je .done ;if dest=src, we don't need to move ja .not_overlapping lea eax, [esi+ecx] cmp edi, eax jae .not_overlapping ;if it's overlapping .overlapping: ;start moving from end of buffers add esi, ecx add edi, ecx ;classical unoptimized unalgined move std dec esi dec edi shr ecx, 1 jnc @f movsb @@: dec esi dec edi shr ecx, 1 jnc @f movsw @@: jecxz @f sub esi, 2 sub edi, 2 rep movsd @@: jmp .done .not_overlapping: ;classical unoptimized unalgined move cld shr ecx, 1 jnc @f movsb @@: shr ecx, 1 jnc @f movsw @@: jecxz @f rep movsd @@: ;everything is okay .done: and byte [esp],not 1 ;clear CF in stack mov eax,[.dest] .r: popf pop edi esi ecx return endp ;============================================================================ ;; @name mem.fill ;; @desc ;; Fills block of memory with given dword pattern. ;; @arg dest ;; Pointer to block which we will fill. ;; @arg size ;; Size of block to fill. ;; If size isn't multiple of 4, remaining bytes will be filled with according ;; bytes of filler (little endian). ;; @arg value ;; Dword value with which the block is filled. ;; @ret ;; CF = 1 on error, otherwise ;; EAX = dest ;; @err ERR_INVALID_POINTER ;; dest points to inaccessible area ;; @note Does nothing when size=0 ;; @note Memory management doesn't have to be initalized for this to work proc mem.fill, .dest, .size, .value begin push ecx edi pushf cld mov edi, [.dest] mov ecx, [.size] mov eax, [.value] ;just return if size=0 cmp ecx,0 je .done ;align filling pointer to dword test edi, 1b jz @f stosb ror eax, 8 dec ecx @@: test edi, 10b jz @f stosw ror eax, 16 dec ecx dec ecx @@: ;do the main fill push ecx shr ecx, 2 rep stosd pop ecx ;fill rest shr ecx, 1 jnc @f stosb ror eax, 8 @@: shr ecx, 1 jnc @f stosw @@: ;everything is okay .done: and byte [esp],not 1 ;clear CF in stack mov eax, [.dest] .r: popf pop edi ecx return endp endmodule |
Changes to freshlib/system/memory.asm.
|
| | | < < | | < > > > | < > | < > | | < | | > > > > > > > > > > > > > > > > > | | > > > | > | | | | | > > | > | > > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Dynamic memory management library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: This file contains the OS independent part of the library and includes the ; respective OS dependent file. ;_________________________________________________________________________________________ module "Memory library" DebugMemory = 0 cInitialCapacity = 10 ; Allocates memory block with given size. ; Returns: CF=1 if error. ; if CF=0, eax = pointer to the memory block allocated. interface GetMem, .size interface FreeMem, .ptr interface ResizeMem, .ptr, .newsize interface SpaceAllocate, .size match =HeapManager, HeapManager { define HeapManager OS } match =OS, HeapManager { include '%TargetOS%/memory.asm' } match =ASM, HeapManager { include 'heapmgr.asm' } ;___________________________________________________________________________ ; ; This is a pointer to the active resize strategy procedure. ; There can be many different strategies for resizing dynamic memory objects. ; ResizeIt points to a procedure that resizes ecx, according to the particular ; strategy. ; The resize procedure returns CF=1 if the resize can not be provided. ;____________________________________________________________________________ if used ResizeIt ResizeIt dd StrategyGentle end if uglobal var _MemoryFreeSpace=? endg ;____________________________ ; ; NewSize = (OldSize+1)*2 ; Very aggressive strategy. ;____________________________ proc StrategyAgressive begin add ecx, 1 jc .exit shl ecx, 1 cmp ecx, cInitialCapacity jae .exit mov ecx, cInitialCapacity clc .exit: return endp ;____________________________ ; ; NewSize = (OldSize+2)*1.5 ; Normal strategy. ;____________________________ proc StrategyMedium begin push ecx add ecx, 1 jc .exit |
︙ | ︙ | |||
78 79 80 81 82 83 84 | return endp ;____________________________ ; ; NewSize = (OldSize+2)*1.25 | | > | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | return endp ;____________________________ ; ; NewSize = (OldSize+2)*1.25 ; Memory spare strategy. ;____________________________ proc StrategyGentle begin push ecx add ecx, 1 jc .exit shr ecx, 2 add [esp], ecx pop ecx cmp ecx, cInitialCapacity jae .exit mov ecx, cInitialCapacity clc .exit: return endp endmodule |
Added freshlib/system/network.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Network library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: ;_________________________________________________________________________________________ module "Network library" struct TSocketAddress .saFamily dw ? .saAddress rb 14 ends struct TSocketAddressIn .saFamily dw ? .saPort dw ? .saAddress dd ? .saZero rb 8 ends struct TAddrIn6 label .addr8 byte label .addr16 word .addr32 rd 4 ends struct TSocketAddressIn6 .saFamily dw ? .saPort dw ? .saFlowInfo dd ? .saAddress TAddrIn6 .saScopeID dd ? ends struct TSocketAddressUn .saFamily dw ? .saPath rb UNIX_PATH_MAX ends soReuseAddr = SO_REUSEADDR soDontRoute = SO_DONTROUTE soRecvBuffer = SO_RCVBUF soSendBuffer = SO_SNDBUF soRecvTimeout = SO_RCVTIMEO ; timeout in [ms] for all OSes soSendTimeout = SO_SNDTIMEO ; timeout in [ms] for all OSes soLinger = SO_LINGER ; timout in [s] interface SocketCreate, .protocol_family, .socket_type, .protocol interface SocketShutDown, .hSocket interface SocketClose, .hSocket interface SocketConnect, .hSocket, .pAddress interface SocketBind, .hSocket, .pAddress interface SocketListen, .hSocket, .maxPending interface SocketAccept, .hSocket, .pAddress interface SocketSend, .hSocket, .pBuffer, .DataLen, .flags interface SocketReceive, .hSocket, .pBuffer, .BufferSize, .flags interface SocketSendTo, .hSocket, .pBuffer, .DataLen, .flags, .pAddressTo interface SocketReceiveFrom, .hSocket, .pBuffer, .BufferSize, .flags, .pAddressFrom interface SocketGetOption, .hSocket, .idOption interface SocketSetOption, .hSocket, .idOption, .Value interface ResolveDomainIP, .hDomain interface ResolveDomainIP6, .hDomain include "%TargetOS%/network.asm" proc SocketSendStr, .hSocket, .hString begin pushad stdcall StrLen, [.hString] push eax stdcall StrPtr, [.hString] stdcall SocketSendAll, [.hSocket], eax ; remaining arguments from the stack. popad return endp proc SocketSendAll, .hSocket, .pData, .Size begin pushad ; stdcall GetTimestamp ; mov edi, eax mov esi, [.pData] mov ecx, [.Size] jecxz .finish_ok .loop: stdcall SocketSend, [.hSocket], esi, ecx, 0 jc .finish_err test eax, eax jz .finish_err ; OutputValue "Send bytes:", eax, 10, -1 add esi, eax sub ecx, eax jnz .loop .finish_ok: ; stdcall GetTimestamp ; sub eax, edi ; ; OutputValue "SendAll time: ", eax, 10, -1 clc popad return .finish_err: stc mov [esp+4*regEAX], eax popad return endp struct __s_readln .capacity = 1024 .buffer rb .capacity .len dd ? ; the count of valid bytes in the buffer. ends ; Reads a line from the socket and concatenate it to the provided ; string hString. ; ; If there is no data for a whole line, and the timeout expires, ; returns what has been read. ; ; All possible combinations of CR/LF are recognized as a line end. ; After end of line is detected, the remaining data read is returned ; in the buffer and the same pointer should be passed the next time ; the function is call. ; ; Arguments: ; .hSocket - the socket to be read; ; .pBuffer - the buffer, returned from the previous call to the procedure. ; should be NULL on the first call. ; .timeout - timeout in ms for detection of end-of-transmission. ; ; Returns: ; eax - the string with the line. ; edx - pointer to the buffer that to be passed to the procedure next time. ; can be NULL, if there is no more data to be processed. The buffer is ; allocated on the first call to the procedure. Should be free with FreeMem ; when not needed. ; CF = 1 on socket read error. In this case, ECX returns the error code. ; proc SocketReadLine, .hSocket, .pBuffer, .timeout begin pushad xor edx, edx mov [esp+4*regEAX], edx stdcall SocketSetOption, [.hSocket], soRecvTimeout, [.timeout] stdcall StrNew mov ebx, eax mov edi, [.pBuffer] test edi, edi jnz .scan_buffer stdcall GetMem, sizeof.__s_readln mov edi, eax mov [edi+__s_readln.len], eax .read_loop: stdcall SocketReceive, [.hSocket], edi, __s_readln.capacity, 0 jc .socket_error mov [edi+__s_readln.len], eax test eax, eax jz .free_buffer ; the socket has been closed from the remote side and the buffer is empty. .scan_buffer: xor ecx, ecx mov eax, edx test eax, eax jnz .eol_ok .inner_loop: mov al, [edi+ecx] inc ecx cmp al, $0d je .end_of_line cmp al, $0a je .end_of_line cmp ecx, [edi+__s_readln.len] jne .inner_loop ;end of buffer inc ecx xor eax, eax .end_of_line: dec ecx jz .cat_ok stdcall StrCatMem, ebx, edi, ecx .cat_ok: mov [esp+4*regEAX], ebx inc ecx cmp ecx, [edi+__s_readln.len] jb .eol_ok mov edx, eax jmp .read_loop .eol_ok: xor al, $0d xor $0a cmp [edi+ecx], al jne .line_ok inc ecx .line_ok: ; copy the buffer to the beginning. lea esi, [edi+ecx] sub ecx, [edi+__s_readln.len] jnz .copy_buffer .free_buffer: stdcall FreeMem, edi xor edi, edi jmp .finish .copy_buffer: neg ecx mov [edi+__s_readln.len], ecx cmp esi, edi je .finish push edi rep movsb pop edi .finish: clc .err: pushf cmp dword [esp+4*regEAX+4], 0 jne .str_ok stdcall StrDel, ebx .str_ok: popf mov [esp+4*regEDX], edi popad return .socket_error: cmp eax, serrTimeout je .free_buffer mov [esp+4*regECX], eax stc jmp .err endp proc SocketReadAllLines, .hSocket, .timeout .pbuffer dd ? .result dd ? .eol dd ? begin pushad stdcall SocketSetOption, [.hSocket], soRecvTimeout, [.timeout] stdcall CreateArray, 4 mov edx, eax stdcall GetMem, 1028 mov [.pbuffer], eax stdcall StrNew mov [.result], eax xor eax, eax mov [.eol], eax .read_loop: mov edi, [.pbuffer] stdcall SocketReceive, [.hSocket], edi, 1024, 0 jnc .no_error cmp eax, EAGAIN jne .error_receive jmp .finalize_ok .no_error: OutputValue "Socket receive:", eax, 10, -1 test eax, eax jz .finalize_ok mov esi, edi lea ebx, [edi+eax] ; the end of the buffer. mov eax, [.eol] test eax, eax jnz .eol_ok .inner_loop: cmp esi, ebx je .end_of_buffer lodsb cmp al, $0d je .end_of_line cmp al, $0a je .end_of_line jmp .inner_loop .end_of_buffer: mov eax, esi sub eax, edi stdcall StrCatMem, [.result], edi, eax jmp .read_loop .end_of_line: push eax lea eax, [esi-1] sub eax, edi stdcall StrCatMem, [.result], edi, eax stdcall AddArrayItems, edx, 1 pushd [.result] popd [eax] stdcall StrNew mov [.result], eax pop eax cmp esi, ebx jne .eol_ok mov [.eol], eax jmp .read_loop .eol_ok: xor al, $0d xor $0a cmp [esi], al jne .line_ok inc esi .line_ok: xor eax, eax mov [.eol], eax mov edi, esi ; move the start of the string. jmp .inner_loop .finalize_ok: clc .finalize: pushf stdcall StrLen, [.result] test eax, eax jnz .add_last stdcall StrDel, [.result] jmp .finish .add_last: stdcall AddArrayItems, edx, 1 pushd [.result] popd [eax] .finish: stdcall FreeMem, [.pbuffer] popf mov [esp+4*regEAX], edx popad return .error_receive: DebugMsg "Error receive" stdcall GetErrorString, eax mov ebx, eax stdcall FileWriteString, [STDERR], eax stdcall StrDel, ebx stc jmp .finalize endp endmodule |
Added freshlib/system/process.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Process management library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: Includes the proper OS dependent part of the library. ;_________________________________________________________________________________________ module "Process library" ; The current process procedures. interface Terminate, .exit_code interface TerminateAll, .exit_code interface SetForcedTerminateHandler, .procHandler interface procForcedTerminateHandler, .reason interface GetCmdArguments ; Thread procedures. interface ThreadCreate, .ptrFunction, .ptrArguments interface FreeThreadID, .ThreadID interface ThreadKill, .hThread, .exit_code ; Process procedures. ; Executes the command .hCommand, gets the STDIN from [.hStdIn] file handle, ; Outputs the STDOUT to [.hStdOut] file handle and STDERR to [.hStdErr] handle. interface Exec2, .hCommand, .hStdIn, .hStdOut, .hStdErr interface FreeProcessID, .ProcessID interface WaitProcessExit, .ProcessID, .timeout ; DLL procedures. ; Loads a DLL in run-time. ; Returns a CF=0 and handle to the loaded library, or CF=1 and error code. interface LibLoad, .hLibName ; Decrements the reference count of the library. If 0 removes the library from the memory. interface LibRelease, .hLibrary ; Returns CF=0 and the address of the object from the library, or CF=1 and error code. interface LibImport, .hLibrary, .hObjectName ; Mutex procedures. interface MutexCreate, .ptrName, .ptrMutex interface WaitForMutex, .ptrMutex, .timeout interface MutexRelease, .ptrMutex interface MutexDestroy, .ptrMutex ; Simple wrapper on Exec2; ; See Exec2 proc Exec, .hCommand begin stdcall Exec2, [.hCommand], [STDIN], [STDOUT], [STDERR] return endp include '%TargetOS%/process.asm' if used ThreadCreate options.Threads = 1 else options.Threads = 0 end if endmodule |
Added freshlib/system/serial.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Serial IO interface library. ; ; Target OS: Any ; ; Dependencies: ; ; Notes: This file contains OS independent part of the library and also include ; the respective OS dependent part. ;_________________________________________________________________________________________ module "Serial IO library" cParityNo = 0 cParityOdd = 1 cParityEven = 2 cFlowOFF = 0 cFlowHW = 1 interface SerSetParams, .hSerial, .Baudrate, .StopBits, .Parity, .Flow, .Timeout include '%TargetOS%/serial.asm' endmodule |
Added freshlib/system/timers.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Asynchronous timer library. ; ; Target OS: Any ; ; Dependencies: memory.asm ; ; Notes: This is OS independent part. Includes OS dependent part files as well. ;_________________________________________________________________________________________ module "Timers library" tmfDoNothing = 0 ; when the timer expires no action should be performed. .Expired field of the timer will be incremented. tmfCallProc = 1 ; [.callback] contains pointer to procedure that to be executed once per timer expiration. tmfSyncDestroy = $10 ; If this flag is set, the timer will be destroyed on the next timer expiration. In this case, the configured event is fired and then the timer is destroyed. ; The flag is checked after the event returns, so the event handler can reset this flag and thus to prevent destruction. tmfRunning = $80 ; If this flag is set, the timer runs. If the event handler resets this flag, the timer will fire only once and will be suspended. struct TTimer ; internal pointers of the linked list. The field .next MUST have offset = 0 .next dd ? ; don't touch this ; timers parameters. .interval dd ? ; in ms .value dd ? ; current value in ms. When this value becomes higher than [.interval] an event is fired and the value becomes 0. ; the value is incremented by the system dependent time - probably something like 1..100ms .flags dd ? ; set of tmfXXXX values. .Callback dd ? ; callback - proc Timer, .ptrTimer; TWindow or 0 .Expired dd ? ; count of the timer expirations. .tag dd ? ; user value associated with the timer. ends struct TDateTime .date dd ? ; [1..31] depending on month .month dd ? ; [1..12] .year dd ? ; .hour dd ? ; [0..23] .minute dd ? ; [0..59] .second dd ? ; [0..59] .day dd ? ; [0..6] == [monday..sanday] ends uglobal if used __ptrFirstTimer __ptrFirstTimer dd ? end if endg ; Creates a timer and returns pointer to TTimer structure. ; the timer is created suspended. The user can set or reset tmfRunning in [.flags] in order to start or stop the timer. ; also, the user have to enter proper values in the remaining fields. proc TimerCreate begin push ecx stdcall GetMem, sizeof.TTimer jc .finish mov ecx, [__ptrFirstTimer] mov [eax+TTimer.next], ecx mov [__ptrFirstTimer], eax clc .finish: pop ecx return endp proc TimerDestroy, .ptrTimer begin push eax ecx mov eax, [__ptrFirstTimer] mov ecx, __ptrFirstTimer test eax, eax jz .finish ; if the list is empty - returns no error. .loop: cmp eax, [.ptrTimer] je .found mov ecx, eax mov eax, [eax+TTimer.next] test eax, eax jnz .loop ;not found pop ecx eax stc return .found: push [eax+TTimer.next] pop [ecx+TTimer.next] ; if this is the first timer, ecx == __ptrFirstTimer stdcall FreeMem, eax .finish: pop ecx eax clc return endp SECONDS_PER_DAY = 24*60*60 YEAR_EPOCH_START = 1970 proc TimeToDateTime, .pTime, .pDateTime .days dd ? begin pushad mov edi, [.pDateTime] mov esi, [.pTime] mov eax, [esi+4] cdq mov ecx, SECONDS_PER_DAY idiv ecx mov eax, [esi] idiv ecx test edx, edx jns @f add edx, ecx ;SECONDS_PER_DAY sub eax, 1 @@: mov [.days], eax ; dword [esi] := time div SECONDS_PER_DAY mov eax, edx mov ecx, 60 cdq ; the time should be positive here... idiv ecx mov [edi+TDateTime.second], edx cdq idiv ecx mov [edi+TDateTime.minute], edx mov [edi+TDateTime.hour], eax ; date processing. I will assume it is 32bit ; some time in the future, it will overflow (around the 5000000 year), so it will needs a fix. ;) mov edx, [.days] ; days after YEAR_EPOCH_START xor ebx, ebx ; years after YEAR_EPOCH_START .year_loop: test edx, edx jns .positive ; negative days dec ebx lea eax, [ebx+YEAR_EPOCH_START] stdcall DaysPerYear, eax add edx, eax jmp .year_loop .positive: lea eax, [ebx+YEAR_EPOCH_START] stdcall DaysPerYear, eax cmp edx, eax jb .finish_year sub edx, eax inc ebx jmp .year_loop .finish_year: add ebx, YEAR_EPOCH_START mov [edi+TDateTime.year], ebx ; edx contains the days since the current year. It is positive here. xor ebx, ebx .months_loop: stdcall DaysPerMonth, ebx, [edi+TDateTime.year] cmp edx, eax jb .month_ok sub edx, eax inc ebx jmp .months_loop .month_ok: inc edx inc ebx mov [edi+TDateTime.date], edx mov [edi+TDateTime.month], ebx ; day of the week. mov eax, [.days] ; days after YEAR_EPOCH_START add eax, 3 ; it was Thursday on 1.1.1970 cdq mov ecx, 7 idiv ecx mov [edi+TDateTime.day], edx popad return endp ; returns the days in the given month or CF=1 on invalid month. ; month should be in [0..11] range. proc DaysPerMonth, .month, .year begin push ecx mov ecx, [.month] cmp ecx, 11 ja .error movzx ecx, byte [.month_list+ecx] cmp ecx, 28 jne .finish stdcall DaysPerYear, [.year] cmp eax, 365 je .finish inc ecx .finish: mov eax, ecx clc pop ecx return .error: xor eax, eax stc pop ecx return .month_list db 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 endp proc DaysPerYear, .year begin push ebx ecx edx mov eax, [.year] mov ecx, 400 cdq idiv ecx test edx, edx jz .leap mov eax, edx mov ecx, 100 cdq idiv ecx test edx, edx jz .not_leap test edx, $03 jz .leap .not_leap: mov eax, 365 pop edx ecx ebx return .leap: mov eax, 366 pop edx ecx ebx return endp proc DateTimeToTime, .pDateTime .timeLo dd ? .timeHi dd ? begin push ecx esi mov esi, [.pDateTime] xor eax, eax mov [.timeLo], eax mov [.timeHi], eax ; year loop: mov ecx, 1970 cmp [esi+TDateTime.year], ecx jl .year_loop_negative je .process_months ; positive .year_loop_plus: stdcall DaysPerYear, ecx add [.timeLo], eax adc [.timeHi], 0 inc ecx cmp ecx, [esi+TDateTime.year] jne .year_loop_plus jmp .process_months .year_loop_negative: dec ecx stdcall DaysPerYear, ecx sub [.timeLo], eax sbb [.timeHi], 0 cmp ecx, [esi+TDateTime.year] jne .year_loop_negative .process_months: xor ecx, ecx mov edx, [esi+TDateTime.month] dec edx .month_loop: cmp ecx, edx je .process_date stdcall DaysPerMonth, ecx, [esi+TDateTime.year] add [.timeLo], eax adc [.timeHi], 0 inc ecx jmp .month_loop .process_date: mov eax, [esi+TDateTime.date] dec eax add [.timeLo], eax adc [.timeHi], 0 ; process hour mov ecx, SECONDS_PER_DAY mov eax, [.timeLo] imul ecx mov [.timeLo], eax mov eax, [.timeHi] imul eax, ecx add eax, edx mov [.timeHi], eax ; now the time is in seconds mov ecx, 60 mov eax, [esi+TDateTime.hour] imul eax, ecx add eax, [esi+TDateTime.minute] imul eax, ecx add eax, [esi+TDateTime.second] add [.timeLo], eax adc [.timeHi], 0 mov eax, [.timeLo] mov edx, [.timeHi] pop esi ecx return endp include '%TargetOS%/timers.asm' endmodule |
Added freshlib/test_code/FileFunctionsTest.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable GUI application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI options.ShowSizes = 1 options.DebugMode = 1 include "%lib%/freshlib.asm" start: InitializeAll DebugMsg "This is begin of the program." xor esi, esi stdcall FileOpen, '/hd0/1/filetest/test.txt' jc .error DebugMsg "File is open now." DebugMsg "So, write to the console..." mov esi, eax .loop: stdcall FileReadLine, esi jc .close push eax stdcall StrCharCat, eax, $0a0d stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack. jmp .loop .close: stdcall FileClose, esi .end: stdcall Sleep, 30000 FinalizeAll stdcall TerminateAll, 0 .error: stdcall GetErrorString, eax push eax eax stdcall FileWriteString, [STDERR], 'ERROR: ' stdcall FileWriteString, [STDERR] ; from the stack stdcall FileWriteString, [STDERR], cCRLF stdcall FreeErrorString ; from the stack test esi, esi jnz .close jmp .end .error_readln: stdcall FileWriteString, [STDERR], < 'Error reading line!', $0d, $0a > jmp .close cCRLF text 13, 10 @AllImportEmbeded ; or @AllImportSection @AllDataEmbeded ; or @AllDataSection |
Added freshlib/test_code/FileFunctionsTest.fpr.
cannot compute difference between binary files
Added freshlib/test_code/FreshLibHello.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable GUI application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI options.ShowSizes = 1 options.DebugMode = 1 include "%lib%/freshlib.asm" uglobal Timer1 dd ? endg start: InitializeAll stdcall StrDup, 'This is strlib test.' push eax stdcall StrCat, eax, ' This is the second sentence.' stdcall StrCharCat, eax, $0a0d stdcall StrPtr, eax stdcall Output, eax stdcall StrDel ; from the stack stdcall TimerCreate mov [Timer1], eax mov [eax+TTimer.interval], 100 mov [eax+TTimer.Callback], procTimer1 mov [eax+TTimer.flags], tmfCallProc or tmfRunning ; then do some threads test ; stdcall ThreadCreate, thread1, 'A' ; stdcall ThreadCreate, thread2, 0 ; stdcall ThreadCreate, thread3, 0 stdcall Sleep, 20000 FinalizeAll stdcall TerminateAll, 0 proc thread1, .lparam begin .loop: mov eax, sys_msg_board mov ebx, 1 mov ecx, [.lparam] int $40 stdcall Sleep, 1000 jmp .loop endp proc thread2, .lparam begin .loop: mov eax, sys_msg_board mov ebx, 1 mov ecx, $0d int $40 mov eax, sys_msg_board mov ebx, 1 mov ecx, $0a int $40 stdcall Sleep, 5000 jmp .loop endp proc thread3, .lparam begin mov esi, 7 .loop: stdcall Sleep, 1333 mov eax, sys_msg_board mov ebx, 1 mov ecx, 'Z' int $40 dec esi jnz .loop DebugMsg "Thread 3 ends." return endp proc procTimer1, .ptrTimer begin stdcall Output, <'Timer 1 event.', 13, 10> return endp @AllImportEmbeded ; or @AllImportSection @AllDataEmbeded ; or @AllDataSection |
Added freshlib/test_code/FreshLibHello.fpr.
cannot compute difference between binary files
Added freshlib/test_code/FreshLibUse.fpr.
cannot compute difference between binary files
Added freshlib/test_code/FreshLibUse2.fpr.
cannot compute difference between binary files
Added freshlib/test_code/FreshLibUse3.fpr.
cannot compute difference between binary files
Added freshlib/test_code/I18nTest.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | include "../freshlib.inc" @BinaryType console options.ShowSizes = 1 include "../freshlib.asm" proc WriteAllLanguages .string rd 2 begin pushad mov [.string+4],0 mov esi, I18nLanguages .loop: lodsd test eax, eax jz .finish mov [.string], eax lea eax, [.string] stdcall WriteLn, eax lea esi, [esi+4] jmp .loop .finish: popad return endp proc WriteLn, .string begin stdcall FileWriteString, [STDOUT], [.string] stdcall FileWriteString, [STDOUT], cCRLF return endp start: InitializeAll stdcall GetCmdArguments mov esi, eax cmp [esi+TArray.count], 2 jb .unknown stdcall StrPtr, [esi+TArray.array+4] ; the second argument. mov eax, [eax] .load: stdcall SetLanguage, eax jnc .print .unknown: stdcall WriteLn, 'Unknown language. Use one of the following:' stdcall WriteAllLanguages jmp .finish .print: stdcall WriteLn, Istring1 stdcall WriteLn, Istring2 stdcall WriteLn, Istring3 stdcall WriteLn, Istring4 stdcall WriteLn, Istring5 .finish: stdcall ListFree, esi, StrDel FinalizeAll stdcall TerminateAll, 0 cCRLF text 13, 10 Istring1 itext <EN:'Hello there.', 13, 10, 'This is a test program that demonstrates how to make internazionalized programs with FreshLib.'>, \ <SP:'Hola.', 13, 10, 'Se trata de un programa de prueba que muestra cómo hacer que los programas internazionalized con FreshLib.'>, \ <DE:'Hallo.', 13, 10, 'Dies ist ein Test-Programm, das wie internazionalized Programme mit FreshLib machen demonstriert.'>, \ <BG:'Здравейте.', 13, 10, 'Това е теÑтова програма, коÑто демонÑтрира как да правим интернационализирани програми Ñ FreshLib.'> Istring2 itext <EN:'This approach consists of three parts:'>, \ <DE:'Dieser Ansatz besteht aus drei Teilen:'>, \ <SP:'Este enfoque consiste en tres partes:'>, \ <BG:'Този подход Ñе ÑÑŠÑтои от 3 чаÑти:'> Istring3 itext <EN:'1. Macro library "_itext.inc" that allows definitions of one string in multiply languages.'>, \ <DE:'1. Makro-Bibliothek "_itext.inc", die Definitionen von einer Zeichenfolge in mehrfach Sprachen ermöglicht.'>, \ <SP:'1. Macro biblioteca "_itext.inc" que permite la definición de una cadena en lenguas se multiplican.'>, \ <BG:'1. Макро библиотека "_itext.inc" коÑто позволÑва дефинициÑта на един Ñтринг на много езици.'> Istring4 itext <EN:'2. Code library, that to change the i18n strings on the fly in runtime.'>, \ <DE:'2. Code-Bibliothek, die zu den i18n strings on the fly in Laufzeit andern.'>, \ <SP:'2. Biblioteca de código, que para cambiar las cuerdas i18n sobre la marcha en tiempo de ejecución.'>, \ <BG:'2. Библиотека Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð¸, които заменÑÑ‚ Ñъдържанието на Ñтринговете в движение.'> Istring5 itext <EN:'3. Translation tool (part of Fresh IDE) that allows to edit all such strings from one place.'>, \ <DE:'3. Translation-Tool (Teil von Fresh IDE), die alle diese Strings von einem Ort bearbeiten konnen.'>, \ <SP:'3. Herramienta de traducción (parte de Fresh IDE) que permite editar todas esas cadenas de un lugar.'>, \ <BG:'3. ИнÑтрумент за превод (чаÑÑ‚ от Fresh IDE) който позволÑва да Ñе редактират Ñтринговете за различни езици от едно мÑÑто.'> |
Added freshlib/test_code/I18nTest.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestBBCode/angry.gif.
cannot compute difference between binary files
Added freshlib/test_code/TestBBCode/anon.svg.
> > | 1 2 | <?xml version="1.0" encoding="UTF-8"?> <svg width="36" height="36" version="1.1" viewBox="0 0 20.135672 20.135672" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g id="Anonym__x2F__Guy_Fawkes" transform="scale(.0703)"><path d="m169 34.6c2.69 1.96 8.78 1.77 12.3-2.43 1.98-2.38 19.1-20.3 43.1-20.3 30.8 0 42.3 10.3 42.3 10.3-11-19.8-34.6-22.2-41.5-22.2-33.5 0-52.6 16-57.6 22.7-4.98 6.77-1.02 10.1 1.43 11.9zm94.9 54.9c-4.3 0-4.48 7.02-4.48 8.95-2e-3 12.6-7.11 24.9-13.4 31.3-18.2 18.6-47.9 2.26-47.9 2.26-5.02-2.03 0.445 3 0.445 3 2.86 2.96 11 12.1 27.1 14.1-0.743 0.786-20 20.9-20 20.9h-17.9l-17.9-26.8c-4.76 6.29-8.95 8.95-17.9 8.95-4.91 0-10.5-0.84-14.4-5.17-3.68-4.07-3.5-9.43-3.5-12.7-0.018-13.4 0-47.6 0-53.7v-15.4c0-7.83-8.79-15-8.79-15-10.4-7.16-17.8 8.97-17.8 8.97l-0.114 0.087c-8.58-3.12-17.7-5.02-27.2-5.02-11.7 0-25.4 1.28-35.6 5.8v-6.25c0-64.1 69.2-22.1 78.9-18.6 9.09 3.23 7.25-7.22 5.67-8.96-21.8-24.1-58.9-26.1-58.9-26.1-50.7 0-52.5 49.6-52.5 71.6v46.5c0 56.8 72.4 154 117 162-0.218 0.104 4.78 1.28 6.79 2.74 0.078 0.053 0.209 0 0.28 0.044 2.59 2.16 5.85 3.59 9.51 3.59 3.56 0 6.69-1.38 9.22-3.41 0 0 3.16-1.83 7.81-3.32 5.31-1.41 14.4-6.93 20.1-11.5 22.9-18.4 46.1-46.9 62.2-87.9 0 0 2.16-9.66-0.612-10.2-2.46-0.499-4.1 0.035-10.8 12-25.4 45.7-60.7 76.6-78.7 77.5v-35.8c11.4-1.76 31.7-10.8 45.5-23.3 8.95-8.14-7.11-6.28-9.68-5.24-11 4.42-13.2 10.6-44.7 10.6-30.1 0-48.1-12.7-53.7-17.9h35.8l17.9-17.9 17.9 17.9h35.8l32.6-38.6c27.3-2.42 30.2-34.1 30.2-37.4v-13.4c0-2.11-0.072-8.95-4.48-8.95zm-165 118c24 15.1 36.5 15 44.3 16.2v35.8c-42.4-10.8-44.8-41.5-44.3-52zm14.2-93.9c-6.68 29.5-40.1 29.5-40.1 29.5-19.8 0-28.3-10.2-28.3-37v-39.8c10.2 4.53 23.9 8.38 35.6 8.38 10.3 0 20.2-2.13 29.4-5.76 0.026 0 0.051 9e-3 0.051 9e-3 3.38 0 5.27 2.65 5.27 2.65s5.52 9.08-1.92 42zm63.8-49.2c11.9 6.39 25.1 10.3 39.2 10.3 14.1 0 27.4-3.92 39.3-10.3-11.9-6.39-25.1-10.3-39.3-10.3-14.1 0-27.3 3.92-39.2 10.3z" clip-rule="evenodd" fill="#3f3f3f" fill-rule="evenodd"/></g></svg> |
Added freshlib/test_code/TestBBCode/bbcode.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console, compact options.DebugMode = 0 options.ShowSizes = 1 EMOTICONS_PATH equ './' include "%lib%/freshlib.asm" include "hash_function.asm" FILE_READ_CHUNK = 4096 rb 237 start: InitializeAll or ecx, -1 shr ecx, 3 .hot: dec ecx jnz .hot stdcall TextCreate, sizeof.TText mov edx, eax .read_loop: stdcall TextMoveGap, edx, -1 stdcall TextSetGapSize, edx, FILE_READ_CHUNK mov eax, [edx+TText.GapBegin] add eax, edx stdcall FileRead, [STDIN], eax, FILE_READ_CHUNK jc .translate test eax, eax jz .translate add [edx+TText.GapBegin], eax jmp .read_loop .translate: stdcall GetFineTimestamp push eax stdcall TranslateBBCode, edx, 0 stdcall GetFineTimestamp pop ecx sub eax, ecx stdcall NumToStr, eax, ntsDec or ntsUnsigned push eax eax stdcall FileWriteString, [STDERR], 'TranslateBBCode time: ' stdcall FileWriteString, [STDERR] ; from the stack stdcall StrDel ; from the stack stdcall FileWriteString, [STDERR], <txt ' us', 13, 10> stdcall TextCompact, edx ; stdcall FileWrite, [STDOUT], cPrefix, cPrefix.length ; stdcall FileWriteString, [STDOUT], edx .finish: push eax FinalizeAll stdcall TerminateAll ; from the stack iglobal cPrefix file "prefix.tpl" .length = $ - cPrefix dd 0 endg |
Added freshlib/test_code/TestBBCode/bbcode.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestBBCode/cry.gif.
cannot compute difference between binary files
Added freshlib/test_code/TestBBCode/hash_function.asm.
> > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | iglobal if used tpl_func tpl_func: db 148, 24, 71, 46, 179, 0, 106, 157, 70, 1, 102, 126, 120, 134, 151, 183 db 47, 103, 92, 201, 62, 156, 13, 10, 254, 218, 248, 28, 85, 185, 245, 112 db 236, 237, 150, 37, 172, 63, 203, 198, 116, 196, 25, 107, 239, 44, 15, 175 db 38, 161, 140, 98, 33, 79, 99, 133, 2, 59, 174, 115, 69, 188, 51, 36 db 229, 143, 231, 84, 22, 78, 89, 166, 104, 145, 34, 225, 180, 12, 230, 205 db 97, 39, 49, 190, 182, 202, 17, 219, 176, 170, 80, 74, 73, 194, 41, 26 db 243, 142, 60, 131, 244, 249, 119, 61, 138, 16, 77, 54, 210, 23, 29, 147 db 204, 110, 130, 93, 213, 223, 146, 216, 123, 247, 90, 124, 75, 135, 57, 128 db 226, 50, 224, 127, 139, 152, 193, 101, 207, 122, 9, 58, 184, 250, 96, 67 db 241, 109, 87, 168, 187, 167, 240, 171, 233, 155, 173, 215, 43, 227, 160, 5 db 246, 129, 20, 14, 100, 209, 137, 169, 68, 40, 42, 165, 121, 113, 200, 95 db 189, 251, 82, 72, 154, 235, 195, 136, 186, 55, 212, 35, 32, 253, 66, 132 db 214, 88, 192, 4, 31, 65, 114, 211, 19, 83, 21, 3, 6, 177, 76, 255 db 252, 199, 141, 56, 105, 11, 117, 163, 220, 27, 222, 234, 178, 52, 64, 221 db 18, 232, 164, 53, 206, 153, 118, 48, 158, 162, 159, 191, 242, 125, 144, 94 db 108, 91, 197, 111, 30, 7, 81, 181, 149, 45, 217, 208, 86, 238, 8, 228 end if endg |
Added freshlib/test_code/TestBBCode/lol.gif.
cannot compute difference between binary files
Added freshlib/test_code/TestBBCode/prefix.tpl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>BBCode translator test page.</title> <style> body {font-family: sans-serif;} h1, h2, h3, h4, h5, h6 {margin: 1rem 0 1rem 0;}: h1 {font-size: 2em} h2 {font-size: 1.8em} h3 {font-size: 1.6em} h4 {font-size: 1.4em} h5 {font-size: 1.2em} h6 {font-size: 1em} code {display: inline; font-size: 14px;} code.block {display: block; white-space: pre; background: #e0ffff; color: #000080; border-left: 8px solid #008080; padding: 1em 1ch; margin: 1em 2ch; } code.asm {background: black; color:lime; } table {border: 1px solid red;} td, th {border: 1px solid red; padding: 1em 2ch; } blockquote { border: 2px solid green; padding: 1em 2ch; } header {background-color: yellow; padding: 0 2ch; } img {display: block; margin: 1em auto; text-align: center;} img.emoticon { display: inline; margin: 0 4px; } p {color: green;} a.back::after {content: "^";} span.underlined {text-decoration: underline;} </style> <body> |
Added freshlib/test_code/TestBBCode/readme.txt.
> > > > | 1 2 3 4 | This project is the code of a parser for BBCode and the test cases. Later this code should be merged in FreshLib and used in AsmBB forum engine This way, two different markup languages will be allowed simultaneously. |
Added freshlib/test_code/TestBBCode/rofl.gif.
cannot compute difference between binary files
Added freshlib/test_code/TestBBCode/sad.gif.
cannot compute difference between binary files
Added freshlib/test_code/TestBBCode/smile.gif.
cannot compute difference between binary files
Added freshlib/test_code/TestBBCode/test.bbcode.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | [h1]Header 1[/h1] [h2]Header 2[/h2] [h3]Header 3[/h3] [h4]Header 4[/h4] [h5]Header 5[/h5] [h6]Header 6[/h6] <script>alert('Hi!')</script> << This ""MUST"" be escaped & the tags will be displayed. [b]This paragraph should be formatted with <strong></strong> tags.[/b] [i]This paragraph should be formatted with <em></em> tags.[/i] [u]This paragraph should be formatted with <span class="underlined"></span> tags.[/u] [s]This paragraph should be formatted with <del></del> tags.[/s] [c]This paragraph should be formatted with <code></code> tags and monospaced font.[/c] [url="><span style="color: red">]This is a XSS test. It should [b]NOT[/b] be colored in red![/url] [url=https://board.asm32.info]This is a link <a href=""></a>[/url] [url]https://board.asm32.info[/url] A little bit strange, but valid: [img=anon.svg[/img] Standard image definition: [img]anon.svg[/img] An image with alt text: [img=Anonymous user picture]anon.svg[/img] Missing image alt text displayed and properly encoded: [img=>>>>>>Anonymous user picture<<<<<<<]someimage.svg[/img] [quote]Block quote with paragraphs. Another paragraph. And it is multiline paragraph actually. [/quote] [quote=Author name]<<Block quote with author name.>>[/quote] This is multiline paragraph and should be formatted as such. All text should be grouped in one text block. [quote=Anonymous] <<Block quote with author name. and nested block quote with formatting>> [quote=johnfound] Here is my [b]super asm[/b] code! [code=asm] stdcall LoadBinaryFile, "prefix.tpl" jc .prefix_ok push eax stdcall FileWrite, [STDOUT], eax, ecx pop eax .prefix_ok: [/code] [/quote] Your [i]code[/i] [b]sucks![/b] [/quote] [code] This is a block of code formatted with <code></code> tags. [b]This tag should not be formatted[/b], because in [code] tag. stdcall LoadBinaryFile, "prefix.tpl" jc .prefix_ok push eax stdcall FileWrite, [STDOUT], eax, ecx pop eax .prefix_ok: [/code] [code=asm] This is a block of code formatted with <code class="asm"></code> tags. stdcall LoadBinaryFile, "prefix.tpl" jc .prefix_ok push eax stdcall FileWrite, [STDOUT], eax, ecx pop eax .prefix_ok: [/code] [size=48px]Text [color=#ff00ff]with[/color] different size.[/size] [color=#ff00ff]Text with different color.[/color] Unordered list 1: [list] [*] Item 1 [*] Item 2 [*] Item 3 [/list] Unordered list 2: [ul] [*] Item 1 [*] Item 2 [*] Item 3 Item 3 as well! Not an item? [/ul] Nested ordered lists: [ol] [*] Item 1 [*] Item 2 has subitems. [ol=a] [*] Item 1 [*] Item 2 [*] Item 3 [*] Item 4 [/ol] [*] Item 3 [/ol] [table] [tr] [td] 1 [/td] [td] 2 [/td] [td] 3 [/td] [/tr] [tr] [td] 4 [/td] [td] 5 [/td] [td] 6 [/td] [/tr] [tr] [td] 7 [/td] [td] 8 [/td] [td] 9 [/td] [/tr] [/table] [:)] [:D] [:lol:] [;)] [:P] [:(] [:`(] [>:(] [email]email@email.com[/email] [email=email@email.com]My email[/email] [spoiler] Vader is Luke's father! [/spoiler] [b][i][u]Multi tags[/u][/i][/b] [b][i][u]Wrong multi tags[/i][/b][/u] [/asdf]<test for bad closing tag.> [/<script>alert('hi!')</script>]XSS test for invalid closing tags! [<script>alert('hi!')</script>=<script>alert('hi!')</script>]XSS test for invalid tags! [b=some extra attribute ignore!]<<Not needed attributes should be simply deleted/ignored, but the text should be properly formatted>>[/b] Not finished tag: [[[[[[[[[b=<script>alert('Hi!')</script> The following is a not finished tag at the end of the file: [<script>alert('Hi!')</script> |
Added freshlib/test_code/TestBBCode/tongue.gif.
cannot compute difference between binary files
Added freshlib/test_code/TestBBCode/wink.gif.
cannot compute difference between binary files
Added freshlib/test_code/TestConfig.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console options.ShowSizes = 1 options.SkipZeroSizes = 1 options.DebugMode = 1 LinuxThreads equ native include "%lib%/freshlib.asm" cCRLF text CRLF ;rb $07 ; does not work ;rb $08 ; works! rb $ff struc AETHEME synproc,tfg,tbg,sfg,sbg,mbg,mfg,mw,gw,focusfg,focusbg,[syn] { common .syntax_proc dd synproc .text_color dd tfg .text_background dd tbg .sel_text dd sfg .sel_background dd sbg .margin_background dd mbg .margin_border dd mfg .margin_width dd mw .margin_gap dd gw .focus_color dd focusfg .focus_background dd focusbg .syntax_colors: forward if ~ syn eq dd syn end if common .syntax_colors_count = ($ - .syntax_colors) / 4 } virtual at 0 aeTheme AETHEME 0,0,0,0,0,0,1,0,0,0,0 sizeof.aeTheme = $ end virtual clDefaultText = 0 clSymbol = 1 clNumber = 2 clString = 3 clComment = 4 clRegister = 5 clInstruction = 6 clDirective = 7 clPreprocessor = 8 iglobal cSynListboxColors: IndexedStrings \ aeTheme.text_color, 'Default text', \ aeTheme.text_background, 'Default background', \ aeTheme.sel_text, 'Selected text', \ aeTheme.sel_background, 'Selected background', \ aeTheme.focus_color, 'Focused line text', \ aeTheme.focus_background,'Focused line background', \ aeTheme.margin_background,'Left margin background', \ aeTheme.margin_border, 'Left margin border', \ aeTheme.syntax_colors+4*(clDirective-1), 'Assembler directive', \ aeTheme.syntax_colors+4*(clPreprocessor-1), 'Preprocessor directive', \ aeTheme.syntax_colors+4*(clInstruction-1), 'Instruction', \ aeTheme.syntax_colors+4*(clRegister-1), 'Register', \ aeTheme.syntax_colors+4*(clSymbol-1), 'Symbol', \ aeTheme.syntax_colors+4*(clNumber-1), 'Number', \ aeTheme.syntax_colors+4*(clString-1), 'String', \ aeTheme.syntax_colors+4*(clComment-1), 'Comment' defaultAETHEME dd $00000000, $00400000, $00FFFFFF, $00FFFFFF, $00800000, $00C0C0C0, $00808080, \ $00000014, $00000004, $00FFFFFF, $00008000, $00000000, $00A000A0, $000080FF, \ $00808080, $00808000, $00FF0000, $00800000, $00008000 endg ;MutexCreate uglobal StartTime dd ? endg start: InitializeAll ; test append value ; stdcall StrDup, 'test.conf2' ; mov ecx, eax ; stdcall FileOpenAccess, 'test.conf2', faReadWrite or faOpenAlways ; mov ecx, eax ; stdcall CfgSetStr, ecx, 'Section with space', 'one_key with space', 'And value with space' ; ; stdcall CfgSetStr, ecx, 'dir1.dir2', 'unique1', 'TestString1' ; stdcall CfgSetStr, ecx, 'dir1.dir2', 'unique2', 'TestString2' ; stdcall CfgSetStr, ecx, 'dir1.dir2', 'unique3', 'TestString3' ; ;; read section test ; stdcall CfgGetSection, ecx, 'dir1.dir2' ; jnc .read_ok ; ; stdcall FileWriteString, [STDOUT], <'Error reading section!', 13, 10> ; jmp .end_test_section ; ;.read_ok: ; mov esi, eax ; xor ebx, ebx ; cmp [esi+TArray.count], ebx ; je .end_disp ; ;.disp_loop: ; stdcall FileWriteString, [STDOUT], [esi+TArray.array+8*ebx+TCfgRecord.key] ; stdcall FileWriteString, [STDOUT], ' key has value of: ' ; stdcall FileWriteString, [STDOUT], [esi+TArray.array+8*ebx+TCfgRecord.value] ; stdcall FileWriteString, [STDOUT], cCRLF ; ; inc ebx ; cmp ebx, [esi+TArray.count] ; jne .disp_loop ; ;.end_disp: ; stdcall DeleteArrayItems, esi, 3, 2 ; mov esi, edx ; ; stdcall CfgSaveSection, ecx, 'dir1.dir2', esi ; stdcall CfgFreeSection, esi ; ; ;.end_test_section: ; ; mov edi, 20 ; ; stdcall GetTimestamp ; mov esi, eax ; ;.loop: ; ; stdcall CfgGetStr, ecx, 'Section with space', 'one_key with space' ; push eax ; stdcall FileWriteString, [STDOUT], eax ; stdcall StrDel ; stdcall FileWriteString, [STDOUT], cCRLF ; ;; Time per one loop: ;; ;; Linux: 100uS; Wine: 1ms; ;; stdcall CfgGetInt, ecx, 'SomeDir', 'kokolino', 0 ;; inc eax ;; stdcall CfgSetInt, ecx, 'SomeDir', 'kokolino', eax ; ;; Wine: 1.5ms per loop; ;; invoke GetPrivateProfileIntA, 'dir1.dir2', 'kokolino', 0, './test.conf2' ;; inc eax ;; stdcall NumToStr, eax, ntsDec or ntsUnsigned ;; push eax ;; stdcall StrPtr, eax ;; invoke WritePrivateProfileStringA, 'dir1.dir2', 'kokolino', eax, './test.conf2' ;; stdcall StrDel ; from the stack; ; ; dec edi ; jnz .loop stdcall GetTimestamp mov [StartTime], eax ; timing of StrNew function. mov ecx, 1000 .loop: stdcall StrNew stdcall StrDel, eax dec ecx jnz .loop stdcall GetTimestamp sub eax, [StartTime] stdcall NumToStr, eax, ntsDec or ntsUnsigned push eax eax stdcall FileWriteString, [STDOUT], 'StrNew/StrDel time:' stdcall FileWriteString, [STDOUT] ; from the stack stdcall FileWriteString, [STDOUT], cNewLine stdcall StrDel ; from the stack stdcall FileOpenAccess, 'test.conf2', faReadOnly mov ebx, eax stdcall GetMem, 1024 mov edi, eax mov esi, cSynListboxColors ; debug stdcall GetTimestamp mov [StartTime], eax ; /debug .color_loop: lodsd ; pointer to the key name. test eax, eax jz .end_colors mov edx, eax lodsd ; offset in the theme. mov ecx, eax stdcall CfgGetInt, ebx, 'Theme.Colors', edx, 0 jnc .store_color stdcall FileWriteString, [STDOUT], <'Error reading.', 13, 10> mov eax, [defaultAETHEME+ecx] .store_color: mov [edi+ecx], eax jmp .color_loop .end_colors: stdcall GetTimestamp sub eax, [StartTime] stdcall NumToStr, eax, ntsDec or ntsUnsigned push eax eax stdcall FileWriteString, [STDOUT], 'Total time:' stdcall FileWriteString, [STDOUT] ; from the stack stdcall FileWriteString, [STDOUT], cNewLine stdcall StrDel ; from the stack stdcall FileReadLine, [STDIN] stdcall FileClose, ebx .finish: FinalizeAll stdcall TerminateAll, 0 stdcall ThreadCreate @EndCode: |
Added freshlib/test_code/TestConfig.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestData/TestHashTree.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console, compact options.DebugMode = 1 include "%lib%/freshlib.asm" include "%lib%/data/hashtree.asm" start: InitializeAll mov [ResizeIt], StrategyAgressive stdcall CreateArray, sizeof.THashTreeNode mov edx, eax jmp .free_tree mov ecx, 10000000 .add_loop: stdcall StrDupMem, "Test string" mov ebx, eax stdcall NumToStr, ecx, ntsDec or ntsUnsigned stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall SearchHashTree, edx, ebx, TRUE test eax, eax jnz @f stdcall StrDel, ebx OutputValue "String add error on ECX=", ecx, 10, -1 @@: loop .add_loop OutputValue "Hash tree size: ", [edx+TArray.count], 10, -1 .free_tree: stdcall FreeHashTree, edx FinalizeAll stdcall TerminateAll, 0 |
Added freshlib/test_code/TestData/TestHashTree.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestGapBuffers.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console, compact include "%lib%/freshlib.asm" start: InitializeAll stdcall TextCreate, sizeof.TText mov edx, eax stdcall TextAddString, edx, 0, "This is test" stdcall TextAddString, edx, 8, "simply a small, simple but reliable " stdcall TextMoveGap, edx, -100000 stdcall TextMoveGap, edx, +100000 stdcall TextMoveGap, edx, 4 sub [edx+TText.GapBegin], 4 stdcall TextAddString, edx, 0, txt "Katakana" stdcall TextMoveGap, edx, -1 sub [edx+TText.GapBegin], 4 stdcall TextAddString, edx, [edx+TText.GapBegin], "alphabet." ; int3 stdcall TextCompact, edx push eax stdcall FileWrite, [STDERR], edx, eax stdcall FileWriteString, [STDERR], <txt "<<<<<<<", 13, 10, "Text length: "> pop eax stdcall NumToStr, eax, ntsDec or ntsUnsigned stdcall FileWriteString, [STDERR], eax stdcall FileWriteString, [STDERR], <txt 13, 10> stdcall NumToStr, [edx+TText.GapEnd], ntsDec push eax stdcall NumToStr, [edx+TText.GapBegin], ntsDec push eax stdcall NumToStr, [edx+TText.Length], ntsDec push eax stdcall FileWriteString, [STDERR], "TText length: " stdcall FileWriteString, [STDERR] ; from the stack stdcall FileWriteString, [STDERR], <txt 13, 10, "Gap begin: "> stdcall FileWriteString, [STDERR] ; from the stack stdcall FileWriteString, [STDERR], <txt 13, 10, "Gap end: "> stdcall FileWriteString, [STDERR] ; from the stack stdcall FileWriteString, [STDERR], <txt 13, 10> FinalizeAll stdcall TerminateAll, 0 |
Added freshlib/test_code/TestGapBuffers.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestKolibriOS.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console include "%lib%/freshlib.asm" options.DebugMode = 1 ; include your includes here. start: InitializeAll stdcall FileWriteString, [STDOUT], <'This is test for the console keyboard read.', 13, 10> .read_loop: stdcall FileReadLine, [STDIN] jc .read_loop test eax, eax jz .read_loop push eax eax stdcall StrPtr, eax cmp dword [eax], 'quit' je .quit stdcall FileWriteString, [STDOUT] ; from the stack stdcall FileWriteString, [STDOUT], cCRLF stdcall StrDel ; from the stack jmp .read_loop cCRLF text 13, 10 .quit: pop eax stdcall StrDel ; from the stack... stdcall FileWriteString, [STDOUT], <'Goodbye master!', 13, 10> FinalizeAll stdcall TerminateAll, 0 |
Added freshlib/test_code/TestKolibriOS.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestMarkdown/TestMarkdown.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console include "%lib%/freshlib.asm" uglobal Result TMarkdownResults endg iglobal cHeader file "../TestBBCode/prefix.tpl" dd 0 endg start: InitializeAll ; place your code here. stdcall ReadTheInputSlow stdcall TranslateMarkdown2, edi, 0, TRUE, Result, 0 stdcall FileWriteString, [STDOUT], cHeader stdcall FileWriteString, [STDOUT], [Result.hIndex] stdcall FileWriteString, [STDOUT], [Result.hContent] FinalizeAll stdcall TerminateAll, 0 uglobal SizeSource dd ? endg START_SIZE = 1024 proc ReadTheInputSlow begin mov [SizeSource], START_SIZE xor esi, esi stdcall GetMem, [SizeSource] mov edi, eax .allocloop: stdcall ResizeMem, edi, [SizeSource] mov edi, eax .readloop: mov ecx, [SizeSource] lea eax, [edi+esi] sub ecx, esi stdcall FileRead, [STDIN], eax, ecx jc .endoffile test eax, eax jz .endoffile add esi, eax mov eax, [SizeSource] sub eax, esi cmp eax, START_SIZE jae .readloop mov eax, [SizeSource] lea eax, [3*eax] shr eax, 1 add eax, $fff and eax, $fffff000 mov [SizeSource], eax jmp .allocloop .endoffile: xor eax, eax mov [edi+esi], eax ; zero terminated... mov [SizeSource], esi return endp |
Added freshlib/test_code/TestMarkdown/TestMarkdown.bat.
> > | 1 2 | TestMarkdown < test.markdown > TestMarkdown.html pause |
Added freshlib/test_code/TestMarkdown/TestMarkdown.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestMarkdown/test.markdown.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | # Test of the MiniMagAsm markup. This is a test file for the MiniMagAsm kind of markdown parser. ## Header 1 Here are some images: [!img1][Some alt text] [!../TestBBCode/anon.svg] ;And here, some object: ; ; [$128x48:test.swf][With inline address.] ; ; [$Flash1][This is simple demonstration of Fresh IDE power.] ; ; [$Flash2][Broken link processing] ; ; [$test.swf][There should be no size, but the animation should appear.] ; ; [$x480test.swf][Broken3] ## Code block without syntax specified ;begin stdcall LoadBinaryFile, "prefix.tpl" jc .prefix_ok push eax stdcall FileWrite, [STDOUT], eax, ecx pop eax .prefix_ok: ;end Another paragraph. ;quote Anonymous <<Block quote with author name. and nested block quote with formatting>> ;quote johnfound Here is my *super asm* code! (Code block with language specified.) ;begin asm stdcall LoadBinaryFile, "prefix.tpl" jc .prefix_ok push eax stdcall FileWrite, [STDOUT], eax, ecx pop eax .prefix_ok: ;end ;end Your /code/ *sucks!* ;end Some more text to test the sub-chapters. ### Bold and italic. Another chapter. *This is bold* /This is italic/ #### Level 4 ;ulist * List item 1 * List item 2 * List item 3 ;end ;olist * List item 1 * List item 2 ;ulist * Subitem 1 * Subitem 2 * Subitem 3 ;end * List item 3 ;end ##### Level 5 Table formatting: ;table 1 2 3 ;------------------- 4 5 6 ;--------------------- 7 8 9 ;end ###### Level 6 The maximal level of H tags. ;spoiler Spoiler Vader is Luke's father! ;end ### Underlined and Strikethrough. _This is underlined_ -Deleted text- ### One more header. This is inline `code formatting`, displayed with monospaced font. [$Flash1] 64x48:test.swf [$Flash2] 64:test.swf [!img1] ../TestBBCode/anon.svg |
Added freshlib/test_code/TestMarkdown/test.swf.
cannot compute difference between binary files
Added freshlib/test_code/TestNetwork.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | include "%lib%/freshlib.inc" @BinaryType console options.DebugMode = 1 include "%lib%/freshlib.asm" start: InitializeAll stdcall TestSocketRead .finish: FinalizeAll stdcall TerminateAll, 0 proc TestSocketRead .address TSocketAddressIn begin pushad stdcall StrNew mov edi, eax stdcall SocketCreate, PF_INET, SOCK_STREAM, 0 jc .finish mov ebx, eax mov [.address.saFamily], AF_INET stdcall StrIP2Num, '127.0.0.1' bswap eax mov edx, 8080 xchg dl, dh mov [.address.saPort], dx mov [.address.saAddress], eax xor eax, eax mov dword [.address.saZero], eax mov dword [.address.saZero+4], eax lea eax, [.address] stdcall SocketConnect, ebx, eax jc .end_lines stdcall SocketSendStr, ebx, <"GET /all.css HTTP/1.1", 13, 10> stdcall SocketSendStr, ebx, <"Host: board.asm32.info", 13, 10> stdcall SocketSendStr, ebx, <"Accept: text/html", 13, 10> stdcall SocketSendStr, ebx, <"Connection: keep-alive", 13, 10, 13, 10> xor edx, edx .read_loop: stdcall SocketReadLine, ebx, edx, 25000 test eax, eax jz .end_lines push eax stdcall FileWriteString, [STDOUT], eax stdcall FileWriteString, [STDOUT], <txt 13, 10> stdcall StrDel ; from the stack jmp .read_loop .end_lines: DebugMsg "Transmission ended!" stdcall SocketClose, ebx .finish: popad return endp |
Added freshlib/test_code/TestNetwork.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestPThreads.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console options.DebugMode = 0 include "%lib%/freshlib.asm" ; include your includes here. iglobal Stop dd 0 endg start: InitializeAll stdcall FileOpenAccess, "./TestPThreads.asm", faReadOnly mov ebx, eax stdcall FileOpenAccess, "./out.txt", faWriteOnly or faCreateAlways mov edi, eax stdcall Exec2, '/usr/bin/grep "stdcall Exec2"', ebx, edi, edi ; Runs in WINE as well, but will not in the original Windows. jmp .finish stdcall ThreadCreate, TestThread, 0 .wait: stdcall Sleep, 100 cmp [Stop], 0 je .wait .finish: FinalizeAll stdcall TerminateAll, 0 proc TestThread, .arg begin mov esi, esp mov ecx, 8000 .touch: sub esp, 2048 mov eax, [esp] loop .touch mov [Stop], 1 mov esp, esi cret endp |
Added freshlib/test_code/TestPThreads.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestSplitURL.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console, compact include "%lib%/freshlib.asm" uglobal url TSplitURL endg start: InitializeAll stdcall FileReadLine, [STDIN] mov esi, eax stdcall StrSplitURL, esi, url stdcall Print, " Scheme", [url.scheme] stdcall Print, " Host", [url.host] stdcall Print, " Port", [url.port] stdcall Print, " Path", [url.path] stdcall Print, " Query", [url.query] stdcall Print, "Fragment", [url.fragment] stdcall StrDel, esi FinalizeAll stdcall TerminateAll, 0 proc Print, .name, .val begin stdcall FileWriteString, [STDOUT], [.name] stdcall FileWriteString, [STDOUT], txt ' = ' cmp [.val], 0 je .skip stdcall FileWriteString, [STDOUT], [.val] .skip: stdcall FileWriteString, [STDOUT], <txt 13, 10> return endp |
Added freshlib/test_code/TestSplitURL.fpr.
cannot compute difference between binary files
Added freshlib/test_code/TestStrLib.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console options.DisableMMX = 0 options.DebugMode = 1 include "%lib%/freshlib.asm" ; include your includes here. MIN_STR_LEN = 1 MAX_STR_LEN = 1500 COLUMNS = 4 uglobal align 16 TestString rb MAX_STR_LEN + 256 align 16 Result rd COLUMNS * (MAX_STR_LEN+1) endg iglobal rb 6 cLowerCase db "THIS is TEST case string. /\" dd 0 db $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff cLowerCase2 db "THISISTH" dd 0 db $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff endg TestPosHeap text 'saasoidhjaasdfsijoa;aijdfasi;ojaryiaejnkjfvnarfui;adnv' TestPosNeedle text 'b' proc TestNP, .pString begin stdcall StrDupMem, [.pString] mov ebx, eax stdcall FileWriteString, [STDOUT], txt 'From: ' stdcall FileWriteString, [STDOUT], ebx stdcall FileWriteString, [STDOUT], <txt 13, 10> ; stdcall StrNormalizePath2, ebx, "/\" stdcall FileWriteString, [STDOUT], txt ' To: ' stdcall FileWriteString, [STDOUT], ebx stdcall FileWriteString, [STDOUT], <txt 13, 10, 13, 10> stdcall StrDel ; from the stack. return endp start: InitializeAll ; Test StrNormalizePath stdcall TestNP, "../../work./asm.work/test.asm" stdcall TestNP, "/usr/./lib/./../../work./asm.work/test.asm" stdcall TestNP, "/usr/./././lib/test.asm" stdcall TestNP, "/usr/../lib/test.asm" stdcall TestNP, "./usr/../lib/test.asm" stdcall TestNP, "usr/../lib/test.asm" stdcall TestNP, "usr/././lib/../test.asm" stdcall TestNP, "././lib/../test.asm" stdcall TestNP, "./././lib/test.asm" stdcall TestNP, "/usr/lib/../../../../work./asm.work/test.asm" stdcall TestNP, "/usr/lib\../..\../..\work./asm.work\test.asm" stdcall FileReadLine, [STDIN] jmp .finish ; Test StrPos procedure stdcall StrDupMem, TestPosHeap mov esi, eax stdcall StrDupMem, TestPosNeedle mov ebx, eax stdcall StrPos, esi, txt 'sdaoluhfas;iodfhjas;oidjf;sioajf;oasijf;ioasj;iodjfs;aiojd;ioj;dofija;iojf;oiasjd;fioajs;iojfas;iojf;saoij_' OutputValue "Found StrPos: ", eax, 16, 8 jmp .finish xor ebx, ebx .all_loop: stdcall NumToStr, ebx, ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall StrCharCat, eax, "h" push eax test ebx, $000fffff jz .progress .back: stdcall StrToNumEx, eax cmp eax, ebx jne .fail .next: stdcall StrDel ; from the stacks inc ebx jnz .all_loop jmp .finish .progress: stdcall FileWriteString, [STDOUT], eax stdcall FileWriteString, [STDOUT], <txt 13, 10> mov eax, [esp] jmp .back .fail: stdcall FileWriteString, [STDOUT], "Test failed on: " mov eax, [esp] stdcall FileWriteString, [STDOUT], eax stdcall FileWriteString, [STDOUT], <txt 13, 10> jmp .next stdcall StrLCase, cLowerCase stdcall StrLCase, cLowerCase2 jmp .finish ; first create an array of strings with different sizes: mov ecx, MAX_STR_LEN+16 mov al, 'A' mov edi, TestString rep stosb mov ecx, MAX_STR_LEN mov edx, 0 ; missalignment ; stdcall TestLoop, MIN_STR_LEN, MAX_STR_LEN, 0, 4, StrLenMMX2_1 ; stdcall TestLoop, MIN_STR_LEN, MAX_STR_LEN, 1, 8, StrLenMMX2 stdcall TestLoop, MIN_STR_LEN, MAX_STR_LEN, 1, 12, StrLen stdcall FileWriteString, [STDOUT], <'Len: MMX2_1, MMX2, MMX', 13, 10> mov ecx, MAX_STR_LEN .output_loop: mov edi, ecx imul edi, 4*COLUMNS stdcall OutputVal, ecx, ': ' stdcall OutputVal, [Result+edi+4], ', ' stdcall OutputVal, [Result+edi+8], ', ' stdcall OutputVal, [Result+edi+12], $0a0d ;', ' ; stdcall OutputVal, [Result+edi+12], ', ' ; stdcall OutputVal, [Result+edi+16], $0a0d dec ecx cmp ecx, MIN_STR_LEN jae .output_loop .finish: FinalizeAll stdcall TerminateAll, 0 proc TestLoop, .min, .max, .missalignment, .offsResult, .proc begin pushad mov ecx, [.max] add ecx, 16 mov al, 'A' mov edi, TestString rep stosb mov ecx, [.max] mov edx, 0 ; missalignment .test_loop: mov byte [TestString+ecx+edx], 0 mov dword [TestString+ecx+edx+1], 'XXXX' mov edi, ecx imul edi, 4*COLUMNS add edi, [.offsResult] lea eax, [TestString+edx] stdcall Benchmark2, eax, [.proc], ecx mov [Result+edi], eax dec ecx cmp ecx, [.min] jae .test_loop popad return endp proc CreateTestArray, .array, .strlen, .offset .len dd ? begin pushad mov edx, [.array] mov eax, [.offset] mov [edx+TArray.lparam], eax mov ecx, [.strlen] add ecx, [.offset] add ecx, 16 mov [.len], ecx mov esi, [edx+TArray.count] lea edx, [edx+TArray.array] .loop: stdcall GetMem, [.len] mov edi, eax add edi, [.offset] mov [edx], edi add edx, 4 mov ecx, [.strlen] mov al, 'a' rep stosb xor al, al stosb dec esi jnz .loop popad return endp proc FreeTestArray, .ptrArray begin pushad mov esi, [.ptrArray] mov ecx, [esi+TArray.count] mov edx, [esi+TArray.lparam] lea esi, [esi+TArray.array] .loop: mov eax, [esi] sub eax, edx stdcall FreeMem, eax add esi, 4 loop .loop popad return endp proc Benchmark, .test_array, .proc, .len begin pushad mov esi, [.test_array] mov ecx, [esi+TArray.count] lea esi, [esi+TArray.array] stdcall GetTimestamp mov ebx, eax .loop: stdcall [.proc], [esi] add esi, 4 dec ecx jnz .loop stdcall GetTimestamp sub eax, ebx mov [esp+4*regEAX], eax popad return endp proc Benchmark2, .String, .proc, .len begin pushad mov ecx, 100 stdcall GetFineTimestamp mov ebx, eax .loop: stdcall [.proc], [.String] stdcall [.proc], [.String] stdcall [.proc], [.String] stdcall [.proc], [.String] stdcall [.proc], [.String] stdcall [.proc], [.String] stdcall [.proc], [.String] stdcall [.proc], [.String] stdcall [.proc], [.String] stdcall [.proc], [.String] dec ecx jnz .loop mov edx, eax stdcall GetFineTimestamp sub eax, ebx mov [esp+4*regEAX], eax cmp edx, [.len] je .OK ; stdcall FileWriteString, [STDOUT], <$0d, $0a, 'ERROR: Wrong length!', $0d, $0a> mov dword [esp+4*regEAX], edx .OK: popad return endp proc OutputVal, .time, .char begin push eax stdcall NumToStr, [.time], ntsSigned or ntsDec push eax stdcall StrCharCat, eax, [.char] stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack pop eax return endp proc StrLenByte, .ptrString begin mov eax, [.ptrString] dec eax .loop: inc eax cmp byte [eax], 0 jne .loop sub eax, [.ptrString] return endp proc StrLenByte2, .ptrString begin push edi ecx mov edi, [.ptrString] or ecx, -1 xor eax, eax repne scasb lea eax, [edi-1] sub eax, [.ptrString] pop ecx edi return endp |
Added freshlib/test_code/TestStrLib.fpr.
cannot compute difference between binary files
Added freshlib/test_code/main.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | include '%lib%/freshlib.inc' @BinaryType console, compact include '%lib%/freshlib.asm' start: InitializeAll uglobal ttime dq ? file_info TFileInfo endg .loop: stdcall GetTime stdcall NumToStr, eax, ntsDec or ntsSigned stdcall StrCharCat, eax, $0a push eax eax stdcall StrLen, eax mov ecx, eax stdcall StrPtr ; from the stack stdcall FileWrite, [STDOUT], eax, ecx stdcall StrDel ; from the stack stdcall FileOpen, filename mov ebx, eax stdcall GetFileInfo, ebx, file_info jc .show_error mov eax, dword [file_info.timeModified] .show_error: stdcall NumToStr, eax, ntsDec or ntsSigned stdcall StrCharCat, eax, $0a0a push eax eax stdcall StrLen, eax mov ecx, eax stdcall StrPtr ; from the stack stdcall FileWrite, [STDOUT], eax, ecx stdcall StrDel ; from the stack stdcall FileClose, ebx stdcall Sleep, 1000 jmp .loop FinalizeAll stdcall Terminate, 0 filename text 'eve.asm' uglobal buffer rb 1000 endg |
Added freshlib/test_code/main2.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | include '%lib%/freshlib.inc' @BinaryType console include '%lib%/freshlib.asm' __filetimeoffset = 116444736000000000 __filetimescale = 10000000 ; 100ns -> 1s start: InitializeAll .main_loop: invoke GetSystemTimeAsFileTime, time64 mov eax, dword [time64] mov edx, dword [time64+4] sub eax, __filetimeoffset and $ffffffff sbb edx, __filetimeoffset shr 32 mov ecx, __filetimescale mov ebx, eax mov eax, edx cdq idiv ecx xchg eax, ebx ; hi part is in ebx now idiv ecx mov edx, ebx ; here the unix time is in edx:eax stdcall NumToStr, eax, ntsDec or ntsSigned mov ecx, eax stdcall StrLen, ecx push eax stdcall StrPtr, ecx push eax stdcall FileWrite, [STDOUT] stdcall FileWrite, [STDOUT], message, message.length stdcall FileRead, [STDIN], buffer, 100 cmp byte [buffer], 'q' jne .main_loop FinalizeAll stdcall Terminate, 0 message text 13, 10 uglobal buffer rb 1000 time64 dq ? endg @AllImportEmbeded @AllDataEmbeded |
Added freshlib/test_code/main3.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | include '%lib%/freshlib.inc' @BinaryType console include '%lib%/freshlib.asm' options.AlignCode = 0 LOOP_COUNT = 1000000000 start: InitializeAll stdcall GetTimestamp mov ebx, eax mov ecx, LOOP_COUNT .loop1: stdcall Dispatch1, $02345678, 1, 1 dec ecx jnz .loop1 stdcall GetTimestamp sub eax, ebx stdcall NumToStr, eax, ntsDec or ntsUnsigned mov esi, eax stdcall FileWriteString, [STDOUT], cMessage1 stdcall FileWriteString, [STDOUT], esi stdcall FileWriteString, [STDOUT], cCRLF ; cmp based dispatch stdcall GetTimestamp mov ebx, eax mov ecx, LOOP_COUNT .loop2: stdcall Dispatch2, $02345678, 1, 1 dec ecx jnz .loop2 stdcall GetTimestamp sub eax, ebx stdcall NumToStr, eax, ntsDec or ntsUnsigned mov esi, eax stdcall FileWriteString, [STDOUT], cMessage2 stdcall FileWriteString, [STDOUT], esi stdcall FileWriteString, [STDOUT], cCRLF stdcall FileReadLine, [STDIN] stdcall StrDel, eax FinalizeAll stdcall Terminate, 0 cMessage1 text 'dproc based dispatch time: ' cMessage2 text 'cmp based dispatch time: ' cCRLF text 13, 10 dproc Dispatch1, .arg1, .arg2, .arg3 begin dispatch [.arg1] return oncase $12345678 return rb 256 oncase $12345679 return rb 256 oncase $12345680 return rb 256 oncase $12345681 return rb 256 enddp proc Dispatch2, .arg1, .arg2, .arg3 begin mov eax, [.arg1] cmp eax, $12345678 je .case1 cmp eax, $12345679 je .case2 cmp eax, $12345680 je .case3 cmp eax, $12345681 je .case4 return .case1: return rb 256 .case2: return rb 256 .case3: return rb 256 .case4: return rb 256 endp proc Dispatch3, .arg1, .arg2, .arg3 begin cmp [.arg1], $12345678 je .case1 cmp [.arg1], $12345679 je .case2 cmp [.arg1], $12345680 je .case3 cmp [.arg1], $12345681 je .case4 return .case1: return rb 256 .case2: return rb 256 .case3: return rb 256 .case4: return rb 256 endp call Dispatch2 call Dispatch3 ; Dispatch1.__info.codesize = $442 ; Dispatch2.__info.codesize = $442 ; Dispatch3.__info.codesize = $447 @AllImportEmbeded @AllDataEmbeded |
Added freshlib/test_code/md5_test/MD5_test.fpr.
cannot compute difference between binary files
Added freshlib/test_code/md5_test/md5_test.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | include "%lib%/freshlib.inc" @BinaryType console options.DebugMode = 0 include "%lib%/freshlib.asm" start: InitializeAll stdcall GetCmdArguments mov esi, eax cmp [esi+TArray.count], 2 jne .finish stdcall LoadBinaryFile, [esi+TArray.array+4] lea edx, [ecx+1024] stdcall ResizeMem, eax, edx mov edi, eax stdcall DataSHA1, edi, ecx push eax stdcall StrSHA1, eax stdcall StrLCase, eax stdcall FreeMem; from the stack push eax stdcall FileWriteString, [STDOUT], eax stdcall StrDel ; from the stack stdcall FileWriteString, [STDOUT], <txt 13, 10> .finish: FinalizeAll stdcall TerminateAll, 0 |
Added freshlib/test_code/test.conf.
> > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ; This is the new hierarchical database format. dir1: key1=$1234 dir2: key1=4567 key2='test param' dir3: koko='koko' dir4: key1='lolo' lolo='key1' dir5: dodo='dodo' momo='momo' key3="secret" dir4= This can be extracted only with GetConfigDir key1=1025 bottles on the wall key3=12 |
Added freshlib/test_code/test.txt.
> > > | 1 2 3 | This is test file line 1 This is the second line of this file. FreshLib is really portable assembly language library. |
Added freshlib/test_code/test_real_obj.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | include "%lib%/freshlib.inc" @BinaryType GUI options.DebugMode = 0 include "%lib%/freshlib.asm" uglobal MainWindow dd ? endg iglobal if used TestTemplate TestTemplate: ObjTemplate tfParent or tfEnd, TForm, NULL, x, 200, y, 100, width, 480, height, 200, Visible, TRUE ObjTemplate tfChild, TButton, NULL, x, 10, y, 10, width, 64, height, 24, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'OK', ModalResult, mrOK, Visible, TRUE ObjTemplate tfEnd, TButton, NULL, x, 84, y, 10, width, 64, height, 24, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Cancel', ModalResult, mrCancel, Visible, TRUE end if endg ;used.TButton = 1 ;used.TForm = 1 start: InitializeAll create [pApplication], TApplication ; create [MainWindow], TForm ; mov ebx, [MainWindow] ; set [pApplication], TApplication:MainWindow, MainWindow ; set ebx, TWindow:borderKind, borderFull ; set ebx, TWindow:width, 640 ; set ebx, TWindow:height, 480 ; exec ebx, TWindow:UpdateBounds ; ; set ebx, TWindow:Visible, TRUE ; ; create ebx, TButton ; ; set ebx, TButton:Parent, [MainWindow] ; ; set ebx, TButton:Caption, 'Button 1' ; set ebx, TButton:TextAlign, dtfAlignCenter or dtfAlignMiddle ; set ebx, TButton:width, 96 ; set ebx, TButton:height, 48 ; set ebx, TButton:x, 100 ; set ebx, TButton:y, 50 ; exec ebx, TButton:UpdateBounds ; set ebx, TButton:Visible, TRUE stdcall CreateFromTemplate, TestTemplate, 0 mov [MainWindow], ebx set [pApplication], TApplication:MainWindow, MainWindow ; stdcall ShowMessage, [MainWindow], iconInfo, 'Test dialog', 'Assembly programming is easy with the proper tools.', smbOK or smbYes or smbCancel stdcall Run FinalizeAll stdcall TerminateAll, 0 |
Added freshlib/test_code/test_real_obj.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/Sample_CP866.txt.
> > > > | 1 2 3 4 | Œë ¢á¥å ¯ à §¨â®¢ ¤®áâ ¥¬, ˆ ïá® ¯®©¬¥â ª ¦¤ë© £ ¤, ‘ª®«ì ¤®¡àë¬ ª®£¤ -â® ¡ë« ‘â «¨, ¨ ¢ í⮬ «¨èì ¡ë« ¢¨®¢ â! |
Added freshlib/test_code0/TestAsmEdit.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 1 options.DebugMode.NoTimers = 0 options.DebugMode.XSync = 0 options.DebugMode.XErrors =0 options.DebugMode.ComputeFPS = 0 options.DebugMode.ShowFPS = 0 options.ShowSizes = 1 options.SkipZeroSizes = 1 ThemeGUI equ flat_gui ;ThemeGUI equ win_gui include "%lib%/freshlib.asm" include '%lib%/gui/TAsmEdit.asm' iglobal TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 100, \ y = 50, \ width = 640, \ height = 480, \ OnCreate = FormOnCreate, \ OnClose = MainFormOnClose, \ OnDestroy = FormOnDestroy, \ SplitGrid = SplitTest, \ Caption = 'Split grids test form' ObjTemplate tfChild, TTabBar, tabEditors, \ Visible = TRUE, \ OnCreate = TabCreate, \ SplitCell = SplitTest.cellTabControl ObjTemplate tfChild, TButton, btnZebra, \ SplitCell = SplitTest.cellZebra, \ Caption = "Z", \ Visible = TRUE, \ OnClick = ToggleZebra ObjTemplate tfChild, TButton, btnScrollY, \ SplitCell = SplitTest.cellMoreY, \ Caption = "sY", \ Visible = TRUE, \ OnClick = ToggleScrollY ObjTemplate tfChild, TButton, btnScrollX, \ SplitCell = SplitTest.cellMoreX, \ Caption = "sX", \ Visible = TRUE, \ OnClick = ToggleScrollX ObjTemplate tfChild, TButton, btnUndo, \ SplitCell = SplitTest.cellUndo, \ Caption = "U", \ Visible = TRUE, \ OnClick = DoUndo ObjTemplate tfChild, TButton, btnRedo, \ SplitCell = SplitTest.cellRedo, \ Caption = "R", \ Visible = TRUE, \ OnClick = DoRedo ObjTemplate tfChild, TButton, btnCaretWrap, \ SplitCell = SplitTest.cellCaretWrap, \ Caption = "CWr", \ Visible = TRUE, \ OnClick = ToggleCaretWrap ObjTemplate tfChild, TButton, btnConsoleCaret, \ SplitCell = SplitTest.cellConsoleCaret, \ Caption = "Con", \ Visible = TRUE, \ OnClick = ToggleConsoleCaret ObjTemplate tfChild or tfEnd, TAsmEdit, AsmEdit, \ x = 10, y = 40, width = 200, height = 200, \ SplitCell = SplitTest.cellAsmEdit, \ Visible = TRUE ;utf8_long file "unicode_test.txt" ;utf8_long file "test_utf8.asm" utf8_long dd 0 ;db " " dd 0 if ThemeGUI eq win_gui getfile imgArrowRight, '_test_images/right2.png' end if if ThemeGUI eq flat_gui getfile imgArrowRight, '_test_images/right.png' end if endg SplitStart SplitTest Split stVert or stJustGap, 2, 24, 16, 48 Split stHoriz or stJustGap, 2, 32, 32, 32 Cell cellZebra Split stHoriz or stJustGap, 2, 32, 32, 32 Cell cellMoreY Split stHoriz or stJustGap, 2, 32, 32, 32 Cell cellMoreX Split stHoriz or stJustGap, 2, 32, 32, 32 Cell cellUndo Split stHoriz or stJustGap, 2, 32, 0, 100 Cell cellRedo Split stHoriz or stJustGap, 2, 64, 0, 100 Cell cellCaretWrap Split stHoriz or stJustGap, 2, 64, 0, 100 Cell cellConsoleCaret Cell cellEmpty Split stVert or stJustGap or stAutosize, 0, .cellTabControl, 16, 48 Cell cellTabControl Split stVert or stJustGap or stOriginBR, 0, 16, 16, 16 Cell cellAsmEdit Cell cellStatusBar SplitEnd uglobal iconArrowRight dd ? endg ;rb 123 start: InitializeAll create [pApplication], TApplication stdcall GUI.Init stdcall ASM.Init stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE ; must be set visible after creation, because it loads ; needed images in OnCreate event handler. stdcall Run FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnCreate as TObject.OnCreate begin DebugMsg "Form OnCreate event handler." stdcall CreateImagePNG, imgArrowRight, imgArrowRight.size mov [iconArrowRight], eax return endp proc TabCreate as TObject.OnCreate begin exec [tabEditors], TTabBar:InsertTab, -1, "Tab editor 1", 0, 0 exec [tabEditors], TTabBar:InsertTab, -1, "Tab editor 2", 0, 0 exec [tabEditors], TTabBar:InsertTab, -1, "Tab editor 3", 0, 0 exec [tabEditors], TTabBar:InsertTab, -1, "Tab editor 4", 0, 0 exec [tabEditors], TTabBar:InsertTab, -1, "Noname1.asm", 0, 0 exec [tabEditors], TTabBar:InsertTab, -1, "Noname2.asm", 0, 0 exec [tabEditors], TTabBar:InsertTab, -1, "Noname3.asm", 0, 0 exec [tabEditors], TTabBar:InsertTab, -1, "Noname4.asm", 0, 0 exec [tabEditors], TTabBar:InsertTab, -1, "Noname5.asm", 0, 0 exec [tabEditors], TTabBar:InsertTab, -1, "Noname6.asm", 0, 0 return endp proc EditOnCreate as TObject.OnCreate begin return endp proc FormOnDestroy as TObject.OnDestroy begin DebugMsg "MainForm destroy event handler." return endp proc MainFormOnClose as TForm.OnClose begin DebugMsg "Main form OnClose event handler" clc return endp proc OpenFileClick as TButton.OnClick begin pushad popad return .error: stdcall GetErrorString, eax push eax stdcall ShowMessage, [frmMain], smiError, "File error", eax, smbOK stdcall FreeErrorString ; from the stack popad return endp proc ToggleZebra as TButton.OnClick begin get eax, [AsmEdit], TAsmEdit:Options xor eax, aeoStripedBackground set [AsmEdit], TAsmEdit:Options, eax return endp proc ToggleScrollX as TButton.OnClick begin get eax, [AsmEdit], TAsmEdit:Options xor eax, aeoScrollXMore set [AsmEdit], TAsmEdit:Options, eax return endp proc ToggleScrollY as TButton.OnClick begin get eax, [AsmEdit], TAsmEdit:Options xor eax, aeoScrollYMore set [AsmEdit], TAsmEdit:Options, eax return endp proc ToggleCaretWrap as TButton.OnClick begin get eax, [AsmEdit], TAsmEdit:Options xor eax, aeoNavXCaretWrap set [AsmEdit], TAsmEdit:Options, eax return endp proc ToggleConsoleCaret as TButton.OnClick begin get eax, [AsmEdit], TAsmEdit:Options xor eax, aeoConsoleCaret set [AsmEdit], TAsmEdit:Options, eax return endp proc DoUndo as TButton.OnClick begin pushad exec [AsmEdit], TAsmEdit:Undo popad return endp proc DoRedo as TButton.OnClick begin pushad exec [AsmEdit], TAsmEdit:Redo popad return endp |
Added freshlib/test_code0/TestAsmEdit.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestDeflate.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console, compact options.DebugMode = 0 options.ShowSizes = 1 options.SkipZeroSizes = 1 ;ThemeGUI equ win_gui include "%lib%/freshlib.asm" struc htlen [length] { common local ..start label ..start byte forward local flag flag equ FALSE match count =* len, length \{ rept count \\{ db len \\} flag equ TRUE \} match =FALSE, flag \{ db length \} common .count = $ - ..start } iglobal ; The example from RFC-1951 ; TestArray htlen 5*3, 2, 2*4 ; TestArray htlen 5*2, 3, 2*4 ; invalid array! ; TestArray htlen 5*3, 3, 2*4 ; invalid array! ; TestArray htlen 27*0, 1*1, 2*2;, 2*2 Sum dd ? endg ;rb 273 start: InitializeAll stdcall LoadBinaryFile, 'test_inflate.gz' jc .error mov esi, eax mov edx, [esi+ecx-4] ; the original size stdcall GetMem, edx mov edi, eax ; stdcall GetTimestamp ; mov ebx, eax sub ecx, 10+8 ; the header and the end of the gzip archive. lea eax, [esi+10] mov ebx, 0 .test_loop: xor byte [eax+ebx], $ff stdcall Inflate, edi, edx, eax, ecx jnc .false_positive xor byte [eax+ebx], $ff inc ebx cmp ebx, edx jb .test_loop stdcall FileWriteString, [STDOUT], 'All tests ended with error, as expected.' jmp .finish .false_positive: stdcall FileWriteString, [STDOUT], 'A test ended WITHOUT error!' jmp .finish ; stdcall GetTimestamp ; sub eax, ebx ; stdcall NumToStr, eax, ntsDec or ntsUnsigned ; push eax ; stdcall FileWriteString, [STDOUT], 'Inflate time:' ; stdcall FileWriteString, [STDOUT] ; from the stack ; stdcall SaveBinaryFile, 'test_inflate.txt', edi, edx ; jmp .finish .error: stdcall FileWrite, [STDOUT], cError, cError.length .finish: stdcall FreeMem, edi stdcall FreeMem, esi FinalizeAll stdcall TerminateAll, 0 cError text "Error processing test file.", 13, 10 cCRLF text 13, 10 |
Added freshlib/test_code0/TestDeflate.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestEdit.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 0 options.DebugMode.NoTimers = 0 options.DebugMode.XSync = 0 options.DebugMode.XErrors =0 options.ShowSizes = 1 options.SkipZeroSizes = 0 ThemeGUI equ win_gui include "%lib%/freshlib.asm" iglobal TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 200, \ y = 200, \ width = 320, \ height = 240, \ OnCreate = FormOnCreate, \ OnClose = MainFormOnClose, \ OnDestroy = FormOnDestroy, \ Caption = 'TEdit test' ObjTemplate tfChild, TEdit, editTest4, \ x = 10, y = 110, width = 300, height = 24, \ Text = "This is test TEdit control.", \ Visible = TRUE ObjTemplate tfChild, TEdit, editTest3, \ x = 10, y = 140, width = 300, height = 24, \ Text = "Now you can select with the mouse and with the keyboard.", \ Visible = TRUE ObjTemplate tfChild, TEdit, editTest2, \ x = 10, y = 170, width = 300, height = 24, \ Text = "Also to copy and paste.", \ Visible = TRUE ObjTemplate tfChild, TEdit, editTest1, \ x = 10, y = 200, width = 300, height = 24, \ Text = "But in the Linux you can only paste, because I didn't wrote the code for copy. :P", \ Visible = TRUE ObjTemplate tfChild, TButton, btnSkinWin, \ x = 60, y = 10, width = 84, height = 24, \ Caption = "Win skin", \ TextAlign = dtfAlignCenter or dtfAlignMiddle, \ Visible = TRUE, \ OnClick = SetWinSkin ObjTemplate tfChild or tfEnd, TButton, btnSkinFlat, \ x = 146, y = 10, width = 84, height = 24, \ Caption = "Flat skin", \ TextAlign = dtfAlignCenter or dtfAlignMiddle, \ Visible = TRUE, \ OnClick = SetFlatSkin getfile cfgFlat, "theme_flat.cfg" dd 0 getfile cfgWin, "theme_win.cfg" dd 0 endg ;rb 423 start: InitializeAll create [pApplication], TApplication call GUI.Init stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE ; must be set visible after creation, because it loads ; needed images in OnCreate event handler. stdcall Run FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnCreate as TObject.OnCreate begin DebugMsg "Form OnCreate event handler." return endp proc FormOnDestroy as TObject.OnDestroy begin DebugMsg "MainForm destroy event handler." return endp proc MainFormOnClose as TForm.OnClose begin DebugMsg "Main form OnClose event handler" clc return endp proc SetWinSkin as TButton.OnClick begin stdcall StringToNamedArray, GUI.meta, cfgWin exec [frmMain], TWindow:ForceRefresh return endp proc SetFlatSkin as TButton.OnClick begin stdcall StringToNamedArray, GUI.meta, cfgFlat exec [frmMain], TWindow:ForceRefresh return endp |
Added freshlib/test_code0/TestEdit.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestGraphics.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable GUI application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" options.DebugMode = 0 options.DebugMode.NoTimers = 0 options.DebugMode.ComputeFPS = 1 options.DebugMode.ShowFPS = 0 options.DebugMode.DisableSHM = 0 @BinaryType GUI, compact include "%lib%/freshlib.asm" iglobal tplMainForm: ObjTemplate tfEnd, TForm, frmMain, \ OnSelfPaint = DemoPaint, \ border = borderFull, \ Caption = 'FreshLib graphics and GUI library test .' pngBackground file "_test_images/background.png" .size = $ - pngBackground endg uglobal imgBackground dd ? Font dd ? FontHeight dd ? FontAsc dd ? PlateW dd ? PlateH dd ? endg start: InitializeAll stdcall InitGUIApplication call GUI.Init stdcall FontCreate, txt "Liberation Mono", 20, fwBold, ffMonospaced mov [Font], eax stdcall GetFontMetrics, eax mov [FontHeight], eax mov [FontAsc], ebx lea eax, [eax*3+16] mov [PlateH], eax stdcall GetTextBounds, "FPS: XXXX", -1, [Font] add eax, 16 mov [PlateW], eax stdcall CreateFromTemplate, tplMainForm, 0 stdcall CreateImagePNG, pngBackground, pngBackground.size mov [imgBackground], eax set [frmMain], TForm:WantFocus, TRUE set [frmMain], TForm:width, [eax+TImage.width] set [frmMain], TForm:height, [eax+TImage.height] set [frmMain], TForm:Visible, TRUE set [frmMain], TForm:OnKeyPressed, OnKeyPress mov eax, [frmMain] stdcall Randomize ; mov [__OnIdle], Scroll stdcall Run FinalizeAll stdcall TerminateAll, 0 proc DemoPaint as TWindow.OnSelfPaint begin stdcall BlendImageTileWrap, [.pDstImage], [.xDst], [.yDst], [.width], [.height], [imgBackground] return endp proc OnKeyPress as TWindow.OnKeyEvent begin cmp [.utf8], 's' je .scroll cmp [.utf8], 'a' je .scrollback cmp [.utf8], 'r' je .refresh cmp [.utf8], 't' je .refresh2 return .scroll: stdcall Scroll, 0 return .scrollback: mov eax, [incX] mov ecx, [incY] neg eax neg ecx mov [incX], eax mov [incY], ecx mov [dist], 1000 jmp .scroll .refresh: exec [.self], TWindow:RectChanged2, 0 return .refresh2: mov eax, [.self] stdcall _RefreshWindowRect, [eax+TWindow.handle], 0, 0, [eax+TWindow._width], [eax+TWindow._height] return endp proc Scroll, .param .rect1 dd ? begin pushad mov esi, [frmMain] test esi, esi jz .finish cmp [esi+TWindow._rect_list], 0 jne .finish mov ebx, [esi+TWindow._screen] test ebx, ebx jz .finish stdcall LockImg, ebx jc .finish mov edi, [imgBackground] stdcall LockImg, edi ; First restore the text rectangle stdcall BlendImageTileWrap, ebx, 32, 32, [PlateW], [PlateH], edi ; scroll the destination image. mov edx, [ebx+TImage.wrapW] mov ecx, [ebx+TImage.orgX] add ecx, [incX] jns @f add ecx, edx @@: cmp ecx, edx jb @f sub ecx, edx @@: mov [ebx+TImage.orgX], ecx mov edx, [ebx+TImage.wrapH] mov ecx, [ebx+TImage.orgY] add ecx, [incY] jns @f add ecx, edx @@: cmp ecx, edx jb @f sub ecx, edx @@: mov [ebx+TImage.orgY], ecx ; scroll the source image mov edx, [edi+TImage.wrapW] mov ecx, [edi+TImage.orgX] add ecx, [incX] jns @f add ecx, edx @@: cmp ecx, edx jb @f sub ecx, edx @@: mov [edi+TImage.orgX], ecx mov edx, [edi+TImage.wrapH] mov ecx, [edi+TImage.orgY] add ecx, [incY] jns @f add ecx, edx @@: cmp ecx, edx jb @f sub ecx, edx @@: mov [edi+TImage.orgY], ecx ; then paint the fixed rectangle again stdcall BlendSolidRect, ebx, 32, 32, [PlateW], [PlateH], $a0ffffff pushad mov edi, 40 add edi, [FontAsc] mov esi, ebx stdcall StrDupMem, "FPS: " mov edx, eax cmp [fps], 0 je @f stdcall NumToStr, [fps], ntsDec or ntsUnsigned stdcall StrCat, edx, eax stdcall StrDel, eax @@: push edx stdcall StrPtr, edx stdcall DrawString, esi, eax, [eax+string.len], 40, edi, [Font], $ff000000 stdcall StrDel ; from the stack add edi, [FontHeight] stdcall StrDupMem, 'Min: ' mov edx, eax cmp [fps], 0 je @f stdcall NumToStr, [fpsmin], ntsDec or ntsUnsigned stdcall StrCat, edx, eax stdcall StrDel, eax @@: push edx stdcall StrPtr, edx stdcall DrawString, esi, eax, [eax+string.len], 40, edi, [Font], $ff000000 stdcall StrDel ; from the stack add edi, [FontHeight] stdcall StrDupMem, 'Max: ' mov edx, eax cmp [fps], 0 je @f stdcall NumToStr, [fpsmax], ntsDec or ntsUnsigned stdcall StrCat, edx, eax stdcall StrDel, eax @@: push edx stdcall StrPtr, edx stdcall DrawString, esi, eax, [eax+string.len], 40, edi, [Font], $ff000000 stdcall StrDel ; from the stack popad mov eax, [incX] mov ecx, [ebx+TImage.wrapW] sub ecx, eax test eax, eax jz .x_ok jns .ix_ok neg eax xor ecx, ecx .ix_ok: stdcall BlendImageTileWrap, ebx, ecx, 0, eax, [ebx+TImage.wrapH], edi .x_ok: mov eax, [incY] mov ecx, [ebx+TImage.wrapH] sub ecx, eax test eax, eax jz .y_ok jns .iy_ok neg eax xor ecx, ecx .iy_ok: stdcall BlendImageTileWrap, ebx, 0, ecx, [ebx+TImage.wrapW], eax, edi .y_ok: stdcall UnlockImg, edi stdcall UnlockImg, ebx stdcall _RefreshWindowRect, [esi+TWindow.handle], 0, 0,[esi+TWindow._width], [esi+TWindow._height] stdcall Randomize .finish: popad return endp uglobal incX dd ? incY dd ? dist dd ? endg rndMaxStep = 1 rndStepMul = 0 rndMaxCnt = 100 rndMinCnt = 5 proc Randomize .random dd ? begin dec [dist] jns .finish stdcall GetRandomBytes, 12 mov esi, eax mov ecx, rndMaxCnt - rndMinCnt mov eax, [esi] xor edx, edx div ecx add edx, rndMinCnt mov [dist], edx mov ecx, 2*rndMaxStep+1 mov eax, [esi+4] xor edx, edx div ecx sub edx, rndMaxStep shl edx, rndStepMul mov [incX], edx mov eax, [esi+8] xor edx, edx div ecx sub edx, rndMaxStep shl edx, rndStepMul mov [incY], edx or edx, [incX] jnz @f mov [dist], edx @@: stdcall FreeMem, esi .finish: ; mov [incX], 1 ; mov [incY], 1 return endp |
Added freshlib/test_code0/TestGraphics.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestGrid.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestGrids.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TGrid test application. ; ; Target OS: All/Linux/Win32 - depending on current test needs. ; ; Dependencies: ; ; Notes: The main test program calls "PrepareDemo" procedure. ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 1 options.DebugMode.NoTimers = 0 options.DebugMode.XSync = 0 options.DebugMode.XErrors = 0 options.DebugMode.ComputeFPS = 0 options.DebugMode.ShowFPS = 0 options.ShowSizes = 1 options.SkipZeroSizes = 1 ThemeGUI equ flat_gui ;ThemeGUI equ win_gui include "%lib%/freshlib.asm" object TTestGrid, TGrid method .DrawCell, .canvas, .ptrRect, .Col, .Row method .Create, .Parent endobj iglobal tplMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ width = 640, height = 496, \ SplitGrid = mainSplit, \ OnDestroy = FormOnDestroy ObjTemplate tfChild or tfEnd, TTestGrid, TestGrid, \ Flags = gfResizeColumns or gfResizeRows or gfGridLines or gfGridLinesFixed or gfRowFocus, \ Visible = TRUE, SplitCell = mainSplit.cellGrid SplitStart mainSplit Cell cellGrid SplitEnd endg start: InitializeAll call InitGUIApplication call GUI.Init stdcall CreateFromTemplate, tplMainForm, 0 set [frmMain], TWindow:Visible, TRUE ; must be set visible after creation, because it loads ; needed images in OnCreate event handler. stdcall Run FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnDestroy, .self begin DebugMsg "MainForm destroy event handler." stdcall CloseGUIApplication return endp proc TestGetString, .Col, .Row begin stdcall NumToStr, [.Row], ntsDec or ntsUnsigned mov ecx, eax stdcall NumToStr, [.Col], ntsDec or ntsUnsigned stdcall StrCharCat, eax, ', ' stdcall StrCat, eax, ecx stdcall StrDel, ecx return endp ;----------------------------------------------------------------------- ; TGrid example event handlers. ; ;----------------------------------------------------------------------- method TTestGrid.Create ; .Parent begin inherited [.Parent] pushad mov esi, [.self] exec esi, TTestGrid:SetCounts, 16, 160 set esi, TTestGrid:FixedCols, 1 set esi, TTestGrid:FixedRows, 1 popad return endp ;----------------------------------------------------------------------- ; Simple example handler for TGrid.OnDrawItem ; It uses TGrid.OnGetString to obtain a string handler. ; After printing, the string will be deleted. ;----------------------------------------------------------------------- method TTestGrid.DrawCell ;, .canvas, .ptrRect, .Col, .Row .color dd ? .offsy dd ? .x dd ? .y dd ? .sel RECT begin pushad mov esi, [.self] mov ecx, cellFixed mov ebx, [.Col] mov edx, [.Row] cmp ebx, [esi+TListView._FixedCols] jl .status_ok cmp edx, [esi+TListView._FixedRows] jl .status_ok cmp ebx, [esi+TListView._focused.x] jne .is_selected cmp edx, [esi+TListView._focused.y] jne .is_selected mov ecx, cellFocused jmp .status_ok .is_selected: lea ecx, [esi+TListView.selection] lea eax, [.sel] stdcall RectCopy, eax, ecx stdcall RectSort, eax inc [eax+RECT.right] inc [eax+RECT.bottom] mov ecx, cellSelected stdcall PointInRect, eax, ebx, edx jc .status_ok mov ecx, cellRegular .status_ok: mov [.color], ecx stdcall TestGetString, ebx, edx test eax, eax jz .drawok mov ebx, eax mov edi, [.ptrRect] mov eax, [edi+RECT.right] mov ecx, [edi+RECT.bottom] sub eax, [edi+RECT.left] sub ecx, [edi+RECT.top] mov edx, [.color] stdcall DrawTextBox, [.canvas], ebx, [edi+RECT.left], [edi+RECT.top], eax, ecx, 0, dtfAlignCenter or dtfAlignMiddle or dtfSingleLine, [GUI.DefaultFont], [GUI.clGridCellTxt+4*edx] stdcall StrDel, ebx .drawok: popad return endp |
Added freshlib/test_code0/TestGround.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Very simple test application for FreshLib. ; The content may change arbitrary. ; ; Target OS: All/Linux/Win32 - depending on current test needs. ; ; Dependencies: ; ; Notes: The main test program calls "PrepareDemo" procedure. ;_________________________________________________________________________________________ __TestGround: ; Global data... iglobal __TestData: frmMainForm: if used frmMainForm ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 300, \ y = 250, \ width = 360, \ height = 240, \ Visible = FALSE,\ Caption = 'FreshLib minimal application test.' ObjTemplate tfChild or tfEnd, TButton, btnOpenModal, \ x = 50, \ y = 50, \ width = 120, \ height = 75, \ Visible = TRUE, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfWordWrap , \ Caption = 'Click to check your assembly skills.', \ OnClick = OpenModalForm end if __TestDataSize = $ - __TestData endg ; Prepares the demo proc PrepareDemo begin stdcall CreateFromTemplate, frmMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE return endp proc OpenModalForm, .self, .button begin push ebx stdcall ShowMessage, [frmMain], smiQuestion, \ 'One question test:', \ 'Are you agree, that FlatAssembler is the best assembler world-wide?', \ smbYes or smbNo or smbMaybe ; or smbAbort or smbRetry or smbIgnore or smbYes or smbNo or smbHelp mov esi, .msgYes mov ecx, smiInformation cmp eax, mrYes je .finish mov esi, .msgNo mov ecx, smiError cmp eax, mrNo je .finish mov esi, .msgMaybe mov ecx, smiQuestion cmp eax, mrMaybe je .finish mov esi, .msgRefuse mov ecx, smiWarning .finish: stdcall ShowMessage, [frmMain], ecx, 'Test results', esi, smbOK pop ebx return OpenModalForm.msgYes text "You really understand the spirit of the assembly!", 13, "Congratulations!" OpenModalForm.msgNo text "So, go write some C# and don't mess with assembly. It is not for you." OpenModalForm.msgMaybe text "You should forget about your doubts and reject these HLL temptations, or your soul will be lost forever! Go, write some assembly and feel the power!" OpenModalForm.msgRefuse text "It is wrong to avoid to answer, only because you are not sure..." endp DispSize 'Test ground dummy code:', ($-__TestGround)+__TestDataSize |
Added freshlib/test_code0/TestGroundComplex.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Complex test application for FreshLib the content may change arbitrary. ; ; Target OS: All/Linux/Win32 - depending on current test needs. ; ; Dependencies: ; ; Notes: The main test program calls "PrepareDemo" procedure. ;_________________________________________________________________________________________ __TestGround: iglobal __TestData: ; This is a form template. ; It will be created by the visual editor. ; This template engine can contains any count of properties for every ; component of the template. Also it can contains non visual components ; such as action lists, image lists, etc. TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 100, \ y = 50, \ width = 656, \ height = 496, \ Visible = FALSE, \ OnDestroy = FormOnDestroy, \ Caption = 'Fresh portable Win32/Linux application test.' ObjTemplate tfChild, TButton, btnChild1, \ x = 48, \ y = 48, \ width = 100, \ height = 60, \ TextAlign = dtfAlignLeft or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Button1', \ Visible = TRUE, \ OnClick = Button1Click ObjTemplate tfChild, TButton, btnChild3, \ x = 48, \ y = 112, \ width = 100, \ height = 48, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfWordWrap,\ Caption = 'Stop/Start timer1', \ Visible = TRUE, \ OnClick = Button3Click ObjTemplate tfChild, TButton, btnChild4, \ x = 48, \ y = 162, \ width = 100, \ height = 48, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfWordWrap,\ Caption = 'Stop/Start timer2', \ Visible = TRUE, \ OnClick = Button4Click ObjTemplate tfChild, TEdit, editChild1, \ x = 48, \ y = 8, \ width = 294, \ height = 24, \ Visible = TRUE, \ Text = utf8_string ObjTemplate tfChild, TProgress, Progress1, \ x = 48, y = 262, \ width = 314, height = 21, \ Max = 1000, Pos = 350, \ Visible = TRUE ObjTemplate tfChild or tfEnd, TButton, btnChild2, \ x = 160, \ y = 48, \ width = 202, \ height = 202, \ TextAlign = dtfAlignJustify or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = utf8_long, \ Visible = TRUE, \ OnClick = Button2Click include "UTF8_examples.asm" cPngIcon file '_test_images/ball.png' sizeof.cPngIcon = $ - cPngIcon ; example of menu structure - it is typical File menu. ; It should be created with CreateFromTemplate procedure. ; If can be child of some form as well and then it should ; appears as a main menu in the form. ;menuFile: ; ObjTemplate tfParent or tfEnd, Menu, .PopupMenu1, \ ; caption, 'File' ; ObjTemplate tfChild, MenuItem, .menuItemNew, \ ; kind, mikCommand, \ ; pAction, FileActions.actFileNew ; ObjTemplate tfChild, MenuItem, .menuItemOpen, \ ; kind, mikCommand, \ ; pAction, FileActions.actFileOpen ; ObjTemplate tfChild or tfParent, Menu, .menuReopen, \ ; caption, 'Reopen' ; ; ObjTemplate tfChild, MenuItem, .menuItemCleanup, \ ; kind, mikCommand, \ ; pAction, FileActions.actReopenMenuCleanup ; ; ObjTemplate tfChild or tfEnd, MenuItem, .menuSep1, \ ; kind, mikSeparator ; ObjTemplate tfChild, MenuItem, .menuSep2, \ ; kind, mikSeparator ; ObjTemplate tfChild, MenuItem, .menuItemSave, \ ; kind, mikCommand, \ ; pAction, FileActions.actSave ; ObjTemplate tfChild, MenuItem, .menuItemSaveAs, \ ; kind, mikCommand, \ ; pAction, FileActions.actSaveAs ; ObjTemplate tfChild, MenuItem, .menuItemSaveAll, \ ; kind, mikCommand, \ ; pAction, FileActions.actSaveAll ; ObjTemplate tfChild, MenuItem, .separator2, \ ; kind, mikSeparator ; ObjTemplate tfChild or tfEnd, MenuItem, .menuItemExit, \ ; kind, mikCommand, \ ; pAction, FileActions.actExit ; ; just for test ;ActionList FileActions, \ ; .actFileNew, '&New', 'Creates new file', 0, <Ctrl, 'N'>, NONE, NONE, \ ; .actFileOpen, '&Open', 'Open file from disk', 0, <Ctrl, 'O'>, NONE, NONE, \ ; .actReopenMenuCleanup, 'Cleanup list', 'Cleans the reopen list.', 0, NONE, NONE, NONE, \ ; .actSave, '&Save', 'Save current file', 0, <Ctrl, 'S'>, NONE, NONE, \ ; .actSaveAs, 'Sa&ve as', 'Save current file with new name.', 0, <Ctrl+Alt, 'S'>, NONE, NONE, \ ; .actSaveAll, 'Save &All', 'Save all changed files.', 0, <Ctrl+Shift, 'S'>, NONE, NONE, \ ; .actExit, 'E&xit', 'Exit application', 0, <Alt, 'X'>, NONE, NONE __TestDataSize = $ - __TestData endg ; Sample event handlers. They work with other objects on the form. proc FormOnDestroy, .self begin pushad DebugMsg "MainForm destroy event handler." ; mov eax, [test_timer1] ; or [eax+TTimer.flags], tmfSyncDestroy ; mov eax, [test_timer2] ; or [eax+TTimer.flags], tmfSyncDestroy stdcall TimerDestroy, [test_timer1] stdcall TimerDestroy, [test_timer2] DebugMsg "MainForm end of destroy." mov [frmMain], 0 popad return endp proc Button4Click as TButton.OnClick begin pushad mov ecx, [test_timer2] xor [ecx+TTimer.flags], tmfRunning set [Progress1], TProgress:Pos, 0 DebugMsg 'Button4 clicked' popad return endp proc Button3Click as TButton.OnClick begin pushad mov eax, [test_timer1] xor [eax+TTimer.flags], tmfRunning DebugMsg 'Button3 clicked' popad return mov ebx, [frmMain] get eax, ebx, TWindow:x push eax get eax, ebx, TWindow:y push eax set [.self], TWindow:Caption, [_dual_caption+4*eax] iglobal _dual_caption dd _cCaption1, _cCaption2 _cCaption1 text 'Remove the title' _cCaption2 text 'Restore the title' endg ; The old coordinates must be restored, because the window manager moves the window ; when restoring the title bar. pop eax set ebx, TWindow:y, eax pop eax set ebx, TWindow:y, eax popad return endp proc Button1Click as TButton.OnClick begin pushad DebugMsg 'Button1 clicked' get eax, [btnChild2], TButton:TextAlign mov ecx, eax and ecx, not $03 inc eax and eax, 3 or eax, ecx set [btnChild2], TButton:TextAlign, eax ; stdcall Get, [btnChild1], TButton.Caption ; stdcall Set, [editChild1], TEdit.Text, eax ; stdcall StrDel, eax iglobal cImgFile file '_test_images/allpng/png7.png' sizeof.cImgFile = $ - cImgFile endg stdcall CreateImagePNG, cImgFile, sizeof.cImgFile mov esi, eax OutputValue "Image created: ", esi, 16, 8 OutputValue "width: ", [esi+TImage.width], 10, -1 OutputValue "height: ", [esi+TImage.height], 10, -1 get edi, [frmMain], TWindow:Canvas stdcall BlendImage, edi, 394, 0, esi, 0, 0, [esi+TImage.width], [esi+TImage.height] exec [frmMain], TWindow:RectChangedXY, 394, 0, 64, 64, FALSE stdcall DestroyImage, esi DebugMsg "Image has been destroyed." popad return endp proc Button2Click as TButton.OnClick begin DebugMsg 'Button2 clicked' get eax, [btnChild1], TButton:IconPosition inc eax and eax, 3 set [btnChild1], TButton:IconPosition, eax mov eax, [_text_align_for_icon+4*eax] set [btnChild1], TButton:TextAlign, eax iglobal _text_align_for_icon dd dtfAlignLeft or dtfAlignMiddle dd dtfAlignRight or dtfAlignMiddle dd dtfAlignCenter or dtfAlignTop dd dtfAlignCenter or dtfAlignBottom endg get eax, [btnChild2], TButton:Caption set [editChild1], TEdit:Text, eax stdcall StrDel, eax return endp uglobal test_timer1 dd ? test_timer2 dd ? endg proc procTestTimer1, .ptrTimer begin get eax, [btnChild1], TButton:IconPosition and eax, 3 mov eax, [__align4+4*eax] set [btnChild1], TButton:IconPosition, eax mov eax, [_text_align_for_icon+4*eax] set [btnChild1], TButton:TextAlign, eax return endp iglobal __align4 dd AlignTop, AlignBottom, AlignRight, AlignLeft endg uglobal Flag dd ? .Y dd ? .X dd ? .incX dd ? .incY dd ? endg proc procTestTimer2, .ptrTimer .width dd ? .height dd ? .win dd ? begin cmp [Progress1], 0 je .progress_ok get ecx, [Progress1], TProgress:Pos get eax, [Progress1], TProgress:Max add ecx, 10 cmp ecx, eax jle @f xor ecx, ecx @@: set [Progress1], TProgress:Pos, ecx ; animation .progress_ok: mov eax, [frmMain] mov [.win], eax get ebx, [.win], TWindow:Canvas test ebx, ebx jz .exit stdcall LockImg, ebx jc .error get eax, [.win], TWindow:width sub eax, 24 mov [.width], eax get eax, [.win], TWindow:height sub eax, 24 mov [.height], eax stdcall DrawSolidRect, ebx, [Flag.X], [Flag.Y], 24, 24, [GUI.clDialogBk] ;$ffff0000 ;c0c0c0 exec [.win], TWindow:RectChangedXY, [Flag.X], [Flag.Y], 24, 24, FALSE mov eax, [Flag.X] add eax, [Flag.incX] js .backx cmp eax, [.width] jg .backx mov [Flag.X], eax jmp .xok .backx: neg [Flag.incX] .xok: mov eax, [Flag.Y] add eax, [Flag.incY] js .backy cmp eax, [.height] jg .backy mov [Flag.Y], eax jmp .yok .backy: neg [Flag.incY] .yok: stdcall BlendImage, ebx, [Flag.X], [Flag.Y], [Flag], 0, 0, 24, 24 exec [.win], TWindow:RectChangedXY, [Flag.X], [Flag.Y], 24, 24, FALSE stdcall UnlockImg, ebx .exit: return .error: ; DebugMsg "Error get canvas." jmp .exit endp proc PrepareDemo begin ; stdcall CaretAttach, 0 stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain stdcall CreateImagePNG, cPngIcon, sizeof.cPngIcon set [btnChild1], TButton:Icon, eax set [btnChild1], TButton:IconPosition, AlignLeft ; the timers must be created before application start. ; I don't know why. ; Maybe it is safe to create timers in some event handlers... should be checked. ; stdcall CreateImagePNG, cPngIcon, sizeof.cPngIcon mov [Flag], eax mov [Flag.X], 120 mov [Flag.Y], 0 mov [Flag.incX], 1 mov [Flag.incY], 1 stdcall TimerCreate mov [test_timer1], eax mov [eax+TTimer.interval], 500 mov [eax+TTimer.Callback], procTestTimer1 mov [eax+TTimer.flags], tmfCallProc stdcall TimerCreate mov [test_timer2], eax mov [eax+TTimer.interval], 10 mov [eax+TTimer.value], 0 mov [eax+TTimer.Callback], procTestTimer2 mov [eax+TTimer.flags], tmfCallProc mov eax, [test_timer1] or [eax+TTimer.flags], tmfRunning mov eax, [test_timer2] or [eax+TTimer.flags], tmfRunning set [frmMain], TWindow:Visible, TRUE ; stdcall ThreadCreate, TestThread, 0 ; stdcall ThreadCreate, TestThread2, 0 return endp proc TestThread, .arg begin stdcall Sleep, 1000 .loop: stdcall procTestTimer1, 0 stdcall Sleep, 250 jmp .loop endp proc TestThread2, .arg .width dd ? .height dd ? begin stdcall Sleep, 1000 ; int3 .loop: stdcall procTestTimer2, 0 jmp .loop endp DispSize 'Test ground dummy code:', ($-__TestGround)+__TestDataSize |
Added freshlib/test_code0/TestGroundConfig.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 | include "%lib%/FreshEdit/FreshEdit.asm" iglobal frmMainForm: ; The form ObjTemplate tfParent or tfEnd, Form, frmMain, x, 100, y, 50, width, 640, height, 340, Visible, TRUE, Caption, 'FreshLib uConfig files editor.' ; log window ObjTemplate tfChild, FreshEdit, editLog, x, 330, y, 0, width, 240, height, 200, Visible, TRUE, Align, waClient, _fReadOnly, froReadOnlyNoCaret ObjTemplate tfParent or tfEnd, Form, frmToolPanel, borderKind, borderNone, Align, waLeft,x ,0, y, 0, width, 200, height, 340, Visible, TRUE ; file buttons ObjTemplate tfChild, Button, btnNewDB, x, 4, y, 2, width, 64, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'New', OnClick, procOnNewDB ObjTemplate tfChild, Button, btnOpenDB, x, 67, y, 2, width, 64, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Open', OnClick, procOnOpenDB ObjTemplate tfChild, Button, btnSaveDB, x, 130, y, 2, width, 64, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Save', OnClick, procOnSaveDB ; record buttons ObjTemplate tfChild, Button, btnReadRecord, x, 4, y, 194, width, 60, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Read', OnClick, procOnRead ObjTemplate tfChild, Button, btnWriteRecord, x, 69, y, 194, width, 60, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Write', OnClick, procOnWrite ObjTemplate tfChild, Button, btnDeleteRecord, x, 134, y, 194, width, 60, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Delete', OnClick, procOnDelete ; type buttons ObjTemplate tfChild, Label, lblDataType, x, 69, y, 224, width, 60, height, 60, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'cdtString' ObjTemplate tfChild, Button, btnTypeString, x, 4, y, 224, width, 60, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'String', OnClick, procOnType ObjTemplate tfChild, Button, btnTypeInt, x, 4, y, 244, width, 60, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Number', OnClick, procOnType ObjTemplate tfChild, Button, btnTypeNull, x, 4, y, 264, width, 60, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Null', OnClick, procOnType ; log buttons ObjTemplate tfChild, Button, btnListTree, x, 134, y, 244, width, 60, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'List >>>', OnClick, procOnListTree ObjTemplate tfChild, Button, btnClearLog, x, 134, y, 264, width, 60, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Clear >>>', OnClick, procOnClearLog ; edit boxes ObjTemplate tfChild, Label, lblFilename, x, 4, y, 24, width, 100, height, 19, Visible, TRUE, TextAlign, dtfAlignLeft or dtfAlignBottom, Caption, 'File name:' ObjTemplate tfChild, Edit, editFilename, x, 4, y, 44, width, 190, height, 19, Visible, TRUE, Text, '../phWeb.conf' ObjTemplate tfChild, Label, lblSignature, x, 4, y, 64, width, 100, height, 19, Visible, TRUE, TextAlign, dtfAlignLeft or dtfAlignBottom, Caption, 'Signature:' ObjTemplate tfChild, Edit, editSignature, x, 4, y, 84, width, 190, height, 19, Visible, TRUE ObjTemplate tfChild, Label, lblKey, x, 4, y, 104, width, 100, height, 19, Visible, TRUE, TextAlign, dtfAlignLeft or dtfAlignBottom, Caption, 'Full key name:' ObjTemplate tfChild, Edit, editKey, x, 4, y, 124, width, 190, height, 19, Visible, TRUE ObjTemplate tfChild, Label, lblValue, x, 4, y, 144, width, 100, height, 19, Visible, TRUE, TextAlign, dtfAlignLeft or dtfAlignBottom, Caption, 'Value:' ObjTemplate tfChild or tfEnd, Edit, editValue, x, 4, y, 164, width, 190, height, 19, Visible, TRUE endg proc PrepareDemo begin stdcall CreateFromTemplate, frmMainForm, 0 mov ecx, [pApplication] mov [ecx+TApplication.MainWindow], frmMain execute [frmMain], TForm.AlignChildren return endp uglobal DataBase dd ? endg iglobal DataType dd cdtString endg proc procOnType, .self, .button begin mov eax, [.self] cmp eax, [btnTypeString] je .string cmp eax, [btnTypeInt] je .int cmp eax, [btnTypeNull] je .null int3 .string: ; mov [DataType], cdtString ; mov eax, .txtString ; jmp .finish ; .int: ; mov [DataType], cdtInteger ; mov eax, .txtInteger ; jmp .finish .null: ; mov [DataType], cdtNULL ; mov eax, .txtNull .finish: stdcall Set, [lblDataType], TLabel.Caption, eax execute [lblDataType], TLabel.Refresh return .txtString db 'cdtString',0 .txtInteger db 'cdtInteger', 0 .txtNull db 'cdtNULL', 0 endp proc procOnClearLog, .self, .button begin execute [editLog], TFreshEdit.Clear return endp proc procOnListTree, .self, .button .prolog dd ? begin push esi mov esi, [DataBase] test esi, esi jz .finish execute [editLog], TFreshEdit.Clear stdcall StrNew ; stdcall StrCharCat, eax, $9c94e2 ; stdcall StrCharCat, eax, $8094e2 stdcall __DoListTree, esi, eax execute [editLog], TFreshEdit.Refresh stdcall TFreshEdit.__UpdateScrollBars, [editLog] .finish: pop esi return endp proc __DoInsChar, .char begin pushad execute [editLog], TFreshEdit.InsertChar, [.char] popad return endp proc __DoInsString, .str begin pushad execute [editLog], TFreshEdit.InsertString, [.str] popad return endp proc __DoListTree, .array, .prolog begin pushad mov esi, [.array] mov ecx, [esi+TArray.count] lea esi, [esi+TArray.array] .main_loop: test ecx, ecx jz .finish stdcall __DoInsString, [.prolog] mov eax, $9c94e2 cmp ecx, 1 jne @f mov eax, $9494e2 @@: stdcall __DoInsChar, eax stdcall __DoInsChar, $8094e2 mov ebx, [esi+TConfigRecord.KeyName] .keynameloop: movzx edx, bl stdcall __DoInsChar, edx shr ebx, 8 jnz .keynameloop cmp [esi+TConfigRecord.Type], cdtConfig je .next_row stdcall __DoInsChar, '=' cmp [esi+TConfigRecord.Type], cdtString je .handle_string cmp [esi+TConfigRecord.Type], cdtInteger je .handle_integer cmp [esi+TConfigRecord.Type], cdtNULL je .handle_null cmp [esi+TConfigRecord.Type], cdtBlob jne .next_row ; handle blobs stdcall __DoInsString, cBlobValue jmp .next_row cBlobValue text 'BLOB()' cNULLValue text 'NULL' .handle_null: stdcall __DoInsString, cNULLValue jmp .next_row .handle_integer: stdcall NumToStr, [esi+TConfigRecord.Data], ntsHex or ntsUnsigned push eax stdcall __DoInsChar, '$' stdcall __DoInsString, eax stdcall StrDel ; from the stack jmp .next_row .handle_string: stdcall __DoInsChar, '"' stdcall __DoInsString, [esi+TConfigRecord.Data] stdcall __DoInsChar, '"' .next_row: stdcall __DoInsChar, $0d cmp [esi+TConfigRecord.Type], cdtConfig jne .next stdcall StrLen, [.prolog] push eax mov eax, $8294e2 ;'|' cmp ecx, 1 jne @f mov eax, ' ' @@: stdcall StrCharCat, [.prolog], eax stdcall StrCharCat, [.prolog], ' ' stdcall __DoListTree, [esi+TConfigRecord.Data], [.prolog] pop edx stdcall StrPtr, [.prolog] mov [eax+string.len], edx mov dword [eax+edx], 0 .next: add esi, sizeof.TConfigRecord dec ecx jmp .main_loop .finish: mov eax, [editLog] push [eax+TFreshEdit._xCaret] [eax+TFreshEdit._yCaret] pop [eax+TFreshEdit._ySelection] [eax+TFreshEdit._xSelection] popad return endp proc UpdateEdits, .config .str rd 2 begin push esi mov esi, [.config] mov eax, [esi+TArray.lparam] mov [.str], eax mov [.str+4], 0 lea eax, [.str] stdcall Set, [editSignature], TEdit.Text, eax pop esi return endp proc procOnNewDB, .self, .button begin stdcall FreeConfigDB, [DataBase] stdcall LoadConfigDB, 0, 'TEST' mov [DataBase], eax stdcall UpdateEdits, eax stdcall LogMessage, cNewDatabase return endp cNewDatabase text 'New database created.', 13 proc procOnOpenDB, .self, .button begin stdcall Get, [editFilename], TEdit.Text push eax stdcall StrPtr, eax stdcall LoadBinaryFile, eax jc .error_file mov esi, eax stdcall StrDel ; from the stack stdcall FreeConfigDB, [DataBase] mov [DataBase], 0 stdcall LoadConfigDB, esi, -1 jnc .load_ok stdcall LogMessage, cErrorLoad stdcall FreeMem, esi return .load_ok: mov [DataBase], eax stdcall FreeMem, esi stdcall UpdateEdits, [DataBase] stdcall LogMessage, cLoadedOK return .error_file: stdcall LogMessage, cErrorLoadFile return endp cErrorLoadFile text 'Error loading config database.', 13 cErrorLoad text 'Error parsing config database.', 13 cLoadedOK text 'Database loaded successfully.', 13 proc LogMessage, .string begin push eax execute [editLog], TFreshEdit.InsertString, [.string] mov eax, [editLog] push [eax+TFreshEdit._xCaret] [eax+TFreshEdit._yCaret] pop [eax+TFreshEdit._ySelection] [eax+TFreshEdit._xSelection] execute [editLog], TFreshEdit.Refresh stdcall TFreshEdit.__UpdateScrollBars, [editLog] ; not this pop eax return endp proc procOnSaveDB, .self, .button .signature dd ? begin stdcall Get, [editSignature], TEdit.Text push eax stdcall StrPtr, eax mov eax, [eax] mov [.signature], eax stdcall StrDel ; from the stack stdcall Get, [editFilename], TEdit.Text mov ecx, eax stdcall StrPtr, ecx mov edx, eax stdcall SaveConfigFile, [DataBase], [.signature] mov esi, eax lea eax, [eax+TArray.array] mov ebx, [esi+TArray.count] shl ebx, 2 stdcall SaveBinaryFile, edx, eax, ebx stdcall StrDel, ecx stdcall FreeMem, esi .finish: return endp ; returns edx - array to the directory. ; eax - the key name. proc __DecodeDirectory, .hstring begin push ebx ecx esi stdcall CreateArray, 4 mov edx, eax stdcall StrPtr, [.hstring] mov esi, eax .main_loop: mov ecx, 4 xor ebx, ebx .byteloop: lodsb cmp al, '|' je .end_key cmp al, 0 je .end_key ror ebx, 8 mov bl, al loop .byteloop .end_key: inc ecx shl ecx, 3 ror ebx, cl test al, al jz .finish cmp al, '|' je .nameok .search: lodsb test al, al jz .finish cmp al, '|' jne .search .nameok: stdcall AddArrayItems, edx, 1 mov [eax], ebx jmp .main_loop .finish: stdcall AddArrayItems, edx, 1 mov dword [eax], 0 mov eax, ebx pop esi ecx ebx return endp proc procOnWrite, .self, .button begin push eax ebx ecx edx cmp [DataBase], 0 je .finish ; value stdcall Get, [editValue], TEdit.Text mov ebx, eax cmp [DataType], cdtNULL je .null_handling cmp [DataType], cdtInteger je .int_handling cmp [DataType], cdtString jne .finish ; string handling. xor ecx, ecx jmp .continue .int_handling: stdcall StrToNumEx, ebx stdcall StrDel, ebx mov ebx, eax mov ecx, 4 jmp .continue .null_handling: stdcall StrDel, ebx xor ebx, ebx xor ecx, ecx ; key .continue: stdcall Get, [editKey], TEdit.Text push eax stdcall __DecodeDirectory, eax stdcall StrDel ; from the stack push edx lea edx, [edx+TArray.array] stdcall SetConfigParam, DataBase, edx, eax, [DataType], ebx, ecx stdcall FreeMem ; from the stack cmp [DataType], cdtString jne @f stdcall StrDel, ebx @@: stdcall Set, [editValue], TEdit.Text, 0 .finish: pop edx ecx ebx eax return endp proc procOnRead, .self, .button begin push eax cmp [DataBase], 0 je .finish ; key stdcall Get, [editKey], TEdit.Text push eax stdcall __DecodeDirectory, eax stdcall StrDel ; from the stack push edx lea edx, [edx+TArray.array] stdcall GetConfigParam.AsString, [DataBase], edx, eax stdcall FreeMem ; from the stack test eax, eax jz .not_found push eax stdcall Set, [editValue], TEdit.Text, eax stdcall StrDel ; from the stack. .finish: pop eax return .not_found: stdcall Set, [editValue], TEdit.Text, cNotAvailable jmp .finish endp cNotAvailable text 'Not available' proc procOnDelete, .self, .button begin push eax ebx ecx edx cmp [DataBase], 0 je .finish ; key stdcall Get, [editKey], TEdit.Text push eax stdcall __DecodeDirectory, eax stdcall StrDel ; from the stack push edx lea edx, [edx+TArray.array] stdcall DelCongigParam, DataBase, edx, eax stdcall FreeMem ; from the stack .finish: pop edx ecx ebx eax return endp |
Added freshlib/test_code0/TestGroundDirFunctions.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | include "%lib%/FreshEdit/FreshEdit.asm" iglobal frmMainForm: ; The form ObjTemplate tfParent or tfEnd, Form, frmMain, x, 100, y, 50, width, 640, height, 340, Visible, TRUE, Caption, 'FreshLib directory functions test.' ; log window ObjTemplate tfChild, FreshEdit, editLog, x, 330, y, 0, width, 240, height, 200, Visible, TRUE, Align, waClient, _fReadOnly, froReadOnlyWithCaret ObjTemplate tfParent or tfEnd, Form, frmToolPanel, borderKind, borderNone, Align, waLeft,x ,0, y, 0, width, 200, height, 340, Visible, TRUE ; file buttons ObjTemplate tfChild, Button, btnReadFile, x, 4, y, 2, width, 64, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'ReadLine', OnClick, procOnReadFile ObjTemplate tfChild, Button, btnReadDir, x, 67, y, 2, width, 64, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'ReadDir', OnClick, procOnReadDir ; log buttons ObjTemplate tfChild, Button, btnClearLog, x, 134, y, 264, width, 60, height, 19, Visible, TRUE, TextAlign, dtfAlignCenter or dtfAlignMiddle, Caption, 'Clear >>>', OnClick, procOnClearLog ; edit boxes ObjTemplate tfChild, Label, lblFilename, x, 4, y, 24, width, 100, height, 19, Visible, TRUE, TextAlign, dtfAlignLeft or dtfAlignBottom, Caption, 'File name:' ObjTemplate tfChild or tfEnd, Edit, editFilename, x, 4, y, 44, width, 190, height, 19, Visible, TRUE, Text, '_doc' endg proc PrepareDemo begin stdcall CreateFromTemplate, frmMainForm, 0 mov ecx, [pApplication] mov [ecx+TApplication.MainWindow], frmMain execute [frmMain], TForm.AlignChildren return endp proc procOnClearLog, .self, .button begin execute [editLog], TFreshEdit.Clear return endp proc procOnReadDir, .self, .button begin pushad stdcall Get, [editFilename], TEdit.Text mov esi, eax stdcall DirectoryRead, eax jc .error mov esi, eax stdcall SortDirArray, esi, fdsByType or fdsByName ;or fdsDescending mov ecx, [esi+TArray.count] xor ebx, ebx .list_loop: stdcall LogMessage, [esi+TArray.array+8*ebx+TDirItem.hFilename] stdcall LogMessage, cNewLine inc ebx loop .list_loop stdcall FreeDirArray, esi popad return .error: stdcall LogMessage, cErrorRead stdcall GetErrorString, eax stdcall LogMessage, eax stdcall FreeErrorString, eax popad return endp cNewLine text '',13 cErrorRead text 'Error read directory: ' cErrorFile text 'Error read file: ' proc procOnReadFile, .self, .button begin pushad stdcall Get, [editFilename], TEdit.Text mov esi, eax stdcall FileOpen, esi jc .error mov ebx, eax .loop: stdcall FileReadLine, ebx jc .error test eax, eax jz .end_of_file stdcall LogMessage, eax stdcall StrDel, eax stdcall LogMessage, cNewLine jmp .loop .end_of_file: stdcall FileClose, ebx popad return .error: stdcall LogMessage, cErrorFile stdcall GetErrorString, eax stdcall LogMessage, eax stdcall FreeErrorString, eax stdcall LogMessage, cNewLine popad return endp proc LogMessage, .string begin pushad execute [editLog], TFreshEdit.InsertString, [.string] mov eax, [editLog] push [eax+TFreshEdit._xCaret] [eax+TFreshEdit._yCaret] pop [eax+TFreshEdit._ySelection] [eax+TFreshEdit._xSelection] execute [editLog], TFreshEdit.Refresh stdcall TFreshEdit.__UpdateScrollBars, [editLog] ; not this popad return endp |
Added freshlib/test_code0/TestGroundFreshEdit.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; | ; Description: Test program for TFreshEdit control. | ; | ; Target OS: All/Linux/Win32 - depending on current test needs. | ; | ; Dependencies: | ; | ; Notes: The main test program calls "PrepareDemo" procedure. | ;________________________________________________________________________________________| include "%lib%/FreshEdit/FreshEdit.asm" __TestGround: ; Global data... iglobal __TestData: frmMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x, 100, \ y, 50, \ width, 640, \ height, 480, \ borderKind, borderFull, \ SplitGrid, MainSplitGrid, \ Visible, TRUE, \ Caption, 'FreshEdit test application.' ObjTemplate tfChild, TButton, btnOpen, \ Visible, TRUE, \ x, 112, y, 2, \ width, 64, height, 21, \ SplitCell, MainSplitGrid.cellOpen, \ Caption, 'Open', \ TextAlign, dtfAlignCenter or dtfAlignMiddle, \ OnClick, OnOpenFile ObjTemplate tfChild, TButton, btnSave, \ x, 180, y, 2, \ width, 64, height, 21, \ SplitCell, MainSplitGrid.cellSave, \ Caption, 'Save', \ TextAlign, dtfAlignCenter or dtfAlignMiddle, \ OnClick, OnSaveFile, \ Visible, TRUE ObjTemplate tfChild, TButton, btnNumbers, \ x, 180, y, 2, \ width, 21, height, 21, \ SplitCell, MainSplitGrid.cellNumbers, \ Caption, '#', \ TextAlign, dtfAlignCenter or dtfAlignMiddle, \ OnClick, OnNumbers, \ Visible, TRUE ObjTemplate tfChild, TButton, btnZebra, \ x, 180, y, 2, \ width, 21, height, 21, \ SplitCell, MainSplitGrid.cellZebra, \ Caption, 'Z', \ TextAlign, dtfAlignCenter or dtfAlignMiddle, \ OnClick, OnZebra, \ Visible, TRUE ObjTemplate tfChild, TButton, btnTheme, \ x, 180, y, 2, \ width, 21, height, 21, \ SplitCell, MainSplitGrid.cellTheme, \ Caption, 'T', \ TextAlign, dtfAlignCenter or dtfAlignMiddle, \ OnClick, OnTheme, \ Visible, TRUE ObjTemplate tfChild, TEdit, FilenameEdit, \ x, 2, y, 2, \ width, 100, height, 21, \ SplitCell, MainSplitGrid.cellFilename, \ Visible, TRUE ObjTemplate tfEnd, TFreshEdit, Editor, \ x, 8, y, 8, \ width, 624, height, 464, \ SplitCell, MainSplitGrid.cellEditor, \ Visible, TRUE SplitStart MainSplitGrid Split stVert or stJustGap or stOriginBR, 0, 20, 0, 0 Cell cellEditor Split stHoriz or stJustGap, 0, 64, 0, 0 Cell cellOpen Split stHoriz or stJustGap, 0, 64, 0, 0 Cell cellSave Split stHoriz or stJustGap, 0, 21, 0, 0 Cell cellNumbers Split stHoriz or stJustGap, 0, 21, 0, 0 Cell cellZebra Split stHoriz or stJustGap, 0, 21, 0, 0 Cell cellTheme Cell cellFilename SplitEnd SampleText file 'unicode_test.txt' dd 0 __TestDataSize = $ - __TestData endg uglobal Timer1 dd ? endg var FreshEditSetTheme = TFETheme.SetDefaultThemeWindows proc OnTheme, .self, .mousebtn begin xor [FreshEditSetTheme], TFETheme.SetDefaultThemeWindows xor TFETheme.SetDefaultThemeClassic stdcall [FreshEditSetTheme], FreshEditTheme xor [SynTheme], fasm_colors_classic xor fasm_colors_windows exec [Editor], TFreshEdit:Refresh return endp proc OnZebra, .self, .mousebtn begin xor [FreshEditTheme.Options], eoStripedBackground exec [Editor], TFreshEdit:Refresh return endp proc OnNumbers, .self, .mousebtn begin xor [FreshEditTheme.Options], eoLineNumbers exec [Editor], TFreshEdit:Refresh return endp cErrorTitleOpen text "Error open file." cErrorTitleSave text "Error save file." proc OnSaveFile, .self, .mousebtn begin pushad get eax, [FilenameEdit], TEdit:Text push eax stdcall StrPtr, eax mov edi, eax get eax, [Editor], TFreshEdit:Text jc .finish push eax stdcall StrPtr, eax stdcall SaveBinaryFile, edi, eax, [eax+string.len] jnc .end_save stdcall GetErrorString, eax mov esi, eax stdcall ShowMessage, [frmMain], smiError, cErrorTitleSave, esi, smbOK stdcall FreeErrorString, esi .end_save: stdcall StrDel ; from the stack .finish: stdcall StrDel ; from the stack popad return endp proc OnOpenFile, .self, .mousebtn begin pushad ; Load test file get eax, [FilenameEdit], TEdit:Text push eax stdcall StrPtr, eax stdcall LoadBinaryFile, eax jnc .loaded stdcall GetErrorString, eax mov esi, eax stdcall ShowMessage, [frmMain], smiError, cErrorTitleOpen, esi, smbOK stdcall FreeErrorString, esi jmp .exit .loaded: push eax set [Editor], TFreshEdit:Text, eax stdcall FreeMem ; from the stack .exit: stdcall StrDel ; from the stack mov eax, [Editor] mov [eax+TFreshEdit._xCaret], 0 mov [eax+TFreshEdit._yCaret], 0 mov [eax+TFreshEdit._xSelection], 0 mov [eax+TFreshEdit._ySelection], 0 stdcall ParseFolding, [eax+TFreshEdit._pLines] exec [Editor], TFreshEdit:Refresh exec [Editor], TFreshEdit:Focus popad return endp proc PrepareDemo begin stdcall CreateFromTemplate, frmMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [Editor], TFreshEdit:SyntaxProc, SyntaxFASM set [Editor], TFreshEdit:OnControlKey, procKeyPress set [Editor], TFreshEdit:Text, SampleText mov esi, [Editor] ; test - set some flags on line 33 mov eax, [esi+TFreshEdit._pLines] or [eax+TArray.array+sizeof.TEditorLine*26+TEditorLine.flags], lfBreakpoint ; test - set some flags on line 34 mov eax, [esi+TFreshEdit._pLines] or [eax+TArray.array+sizeof.TEditorLine*27+TEditorLine.flags], lfBreakpoint mov [eax+TArray.array+sizeof.TEditorLine*27+TEditorLine.debugdata], $12345 mov [eax+TArray.array+sizeof.TEditorLine*28+TEditorLine.debugdata], $12345 mov [eax+TArray.array+sizeof.TEditorLine*29+TEditorLine.debugdata], $12345 stdcall ParseFolding, eax .exit: return endp proc procKeyPress, .self, .keyevent begin mov ebx, [.keyevent] mov eax, [ebx+TKeyboardEvent.key] cmp eax, $03 ; ctrl+C je .copy cmp eax, $16 ; ctrl+V je .paste cmp eax, 12 ; ctrl+L je .length_list cmp eax, 18 ; ctrl+R je .clipright cmp eax, 19 ; ctrl+S == save je .save cmp eax, 20 ; ctrl+T je .test_something cmp [ebx+TKeyboardEvent.scancode], keyF2 je .toggle_breakpoint .finish: mov eax, chgfNoClearSelection .exit: return .copy: get eax, [.self], TFreshEdit:Selection test eax, eax jz .end_copy stdcall ClipboardWrite, eax stdcall StrDel, eax .end_copy: mov eax, chgfNoClearSelection return .paste: stdcall ClipboardRead test eax, eax jz .end_paste set [.self], TFreshEdit:Selection, eax stdcall StrDel, eax mov eax, chgfNeedRefresh .end_paste: return .save: stdcall OnSaveFile, [.self], 0 xor eax, eax return .length_list: xor eax, eax return .clipright: get eax, esi, TFreshEdit:CurrentLine jc .finish stdcall StrClipSpacesR, [eax+TEditorLine.Data] mov eax, chgfNeedRefresh return .test_something: mov eax, chgfNeedRefresh return .toggle_breakpoint: cmp [esi+TFreshEdit._fReadOnly], froReadWrite jne .finish get eax, esi, TFreshEdit:CurrentLine jc .finish xor [eax+TEditorLine.flags], lfBreakpoint mov eax, chgfNeedRefresh or chgfNoClearSelection return ;. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . endp ; very primitive! To be rewrited from scratch to allow custom keywords. proc ParseFolding, .pLines begin pushad xor ebx, ebx mov esi, [.pLines] mov ecx, [esi+TArray.count] lea esi, [esi+TArray.array] .loop: jecxz .endparse stdcall StrPtr, [esi+TEditorLine.Data] jc .forward cmp [eax+string.len], 4 jb .forward cmp dword [eax], 'proc' je .up cmp [eax+string.len], 6 jb .forward cmp dword [eax], 'loca' jne .forward cmp word [eax+4], 'ls' jne .forward .up: inc ebx or [esi+TEditorLine.flags], lfFoldHeader .forward: mov [esi+TEditorLine.fold_level], ebx stdcall StrPtr, [esi+TEditorLine.Data] jc .forward2 cmp [eax+string.len], 4 jb .forward2 cmp dword [eax], 'endp' je .down cmp dword [eax], 'endl' jne .forward2 .down: test ebx, ebx jz .forward2 dec ebx .forward2: add esi, sizeof.TEditorLine dec ecx jmp .loop .endparse: popad return endp DispSize 'Test ground dummy code:', ($-__TestGround)+__TestDataSize ; without this, the application crashes in Linux with untraceable seg fault. Why??? ; It seems it crashes during the load, before even one instruction executed. ; Maybe it is some kind of bug in the elf formater... ; IT CRASHES ONLY SOMETIMES????? ;rb 64 include '%lib%/FreshEdit/fasm_syntax.asm' |
Added freshlib/test_code0/TestGroundKeyboard.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: This test source provides some testing of the keyboard facilities ; of FreshLib ; ; Target OS: All/Linux/Win32 - depending on current test needs. ; ; Dependencies: ; ; Notes: The main test program calls "PrepareDemo" procedure. ;_________________________________________________________________________________________ __TestGround: ; Global data... iglobal __TestData: frmMainForm: ObjTemplate tfEnd, Form, frmMain, \ x, 100, \ y, 50, \ width, 120, \ height, 80, \ Visible, TRUE, \ OnKeyPress, MainKeyPressed, \ Caption, 'FreshLib minimal application test.' __TestDataSize = $ - __TestData endg cKeyMessage text 'Key pressed:' cCRLF db 13, 10, 0 cSpace db ' ', 0 proc MainKeyPressed, .self, .keyevent begin mov esi, [.self] mov edi, [.keyevent] stdcall Output, cKeyMessage stdcall OutputNumber, [edi+TKeyboardEvent.key], 16, 8 stdcall Output, cSpace stdcall OutputNumber, [edi+TKeyboardEvent.scancode], 16, 8 stdcall Output, cSpace stdcall OutputNumber, [edi+TKeyboardEvent.kbdStatus], 16, 8 stdcall Output, cCRLF return endp proc PrepareDemo begin stdcall CreateFromTemplate, frmMainForm, 0 mov ecx, [pApplication] mov [ecx+TApplication.MainWindow], frmMain return endp DispSize 'Test ground dummy code', ($-__TestGround)+__TestDataSize |
Added freshlib/test_code0/TestGroundNull.asm.
> > > > | 1 2 3 4 | proc PrepareDemo begin return endp |
Added freshlib/test_code0/TestGroundSplitGrid.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Very simple test application for FreshLib. ; The content may change arbitrary. ; ; Target OS: All/Linux/Win32 - depending on current test needs. ; ; Dependencies: ; ; Notes: The main test program calls "PrepareDemo" procedure. ;_________________________________________________________________________________________ __TestGround: ; Global data... iglobal __TestData: frmMainForm: ObjTemplate tfEnd or tfParent, TForm, frmMain, \ x = 300, \ y = 250, \ width = 640, \ height = 480, \ Visible = FALSE, \ Caption = 'FreshLib SplitGrid editor.',\ SplitGrid = ExampleTemplate ObjTemplate tfEnd, TButton, btn1, \ x = 100, y = 100, width = 100, height = 50, \ Visible = TRUE, Caption = 'Button1', \ TextAlign = dtfAlignCenter or dtfAlignMiddle,\ OnClick = btn1_OnClick, \ SplitCell = ExampleTemplate.cellTop __TestDataSize = $ - __TestData endg proc btn1_OnClick as TButton.OnClick begin stdcall ShowMessage, [frmMain], smiInformation, 'It is assembly language!', 'Hello assembly codder!', smbOK return endp proc PrepareDemo begin stdcall CreateFromTemplate, frmMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE return endp iglobal SplitStart ExampleTemplate Split stHoriz, 4, 96, 0, 1000 Cell cellFolders Split stVert or stRelative, 4, $2000, 0, $8000 Split stHoriz or stRelative, 4, $2000, 0, $8000 Cell cellTop Split stVert or stRelative, 4, $4000, 0, $8000 Cell NONE Cell cellPanel1 Cell cellPanel2 SplitEnd endg DispSize 'Test ground dummy code:', ($-__TestGround)+__TestDataSize |
Added freshlib/test_code0/TestLib.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: The main file of FreshLib test application. Main file. ; ; Target OS: Any ; ; Dependencies: FreshLib - see includes in the source. ; ; Notes: This is the main file of the project. It forms the common frame of the GUI ; program. The real test code is separated in several different files, ; named TestGround(xxxx).asm where (xxxx) is some suffix. ; Include only one of these files. ;_________________________________________________________________________________________ include '%lib%/freshlib.inc' @BinaryType GUI, compact options.AlignCode = 0 options.FastEnter = 1 ; enter/leave or push ebp/pop ebp approach to the procedures. options.CheckArguments = 1 options.ShowSkipped = 0 ; shows the procedures skiped because of no use. options.ShowSizes = 1 ; enable/disable work of DispSize macro. options.SkipZeroSizes = 0 options.ShowImported = 0 ; enable/disable display of imported functions. options.DebugMode = 1 ; enable/disable macros of simpledebug library. ; Only used in X server based systems. options.DebugMode.DisableSHM = 0 options.DebugMode.NoTimers = 0 options.DebugMode.XSync = 0 ; enable/disable syncronized X server communications. options.DebugMode.XErrors = 0 ;options.Threads ; READ ONLY option. Automatically set. ;LinuxThreads equ native ; native or posix ;HeapManager equ OS ; OS or ASM include '%lib%/freshlib.asm' ; use one and only one of the following files. ; ;include 'TestGroundSplitGrid.asm' ;include 'TestGroundNull.asm' ; in order to check whether for compilation of dead code. ;include 'TestGround.asm' ;include 'TestGroundComplex.asm' ;include 'TestGroundKeyboard.asm' ;include 'TestGroundFreshEdit.asm' ;include 'TestGroundConfig.asm' ;include 'TestGroundDirFunctions.asm' ;include 'TestGrids.asm' include 'TestTreeView.asm' ;include 'TestResizeEvents.asm' if TargetOS eq Linux ; rb 343 ; this bytes simply make ELF file to be loadable. ; there is a bug somewhere in the ELF generator (FASM or possibly ELF macros) ; that makes some sizes of the ELF executable not loadable. (the Linux loader crashes with SEGFAULT) end if uglobal ; buffer rb 256 endg iglobal ; The example from RFC-1951 ; TestArray dw 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 2, 0, 4, 0, 4, 0 endg ; Main Program start: DebugMsg 'Before initializing.' InitializeAll DebugMsg 'After initializing.' create [pApplication], TApplication call GUI.Init stdcall PrepareDemo DebugMsg 'Just before run.' stdcall Run .terminate: push eax FinalizeAll DebugMsg 'Just before the end.' stdcall TerminateAll ; from the stack ; end |
Added freshlib/test_code0/TestLines.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable GUI application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" options.DebugMode = 0 options.DebugMode.NoTimers = 0 options.DebugMode.ComputeFPS = 1 options.DebugMode.ShowFPS = 0 options.DebugMode.DisableSHM = 0 @BinaryType GUI, compact include "%lib%/freshlib.asm" iglobal tplMainForm: ObjTemplate tfEnd, TForm, frmMain, \ OnSelfPaint = DemoPaint, \ OnDestroy = FormDestroy, \ border = borderFull, \ Caption = 'FreshLib graphics and GUI library test .' pngBackground file "_test_images/background.png" .size = $ - pngBackground endg uglobal imgBackground dd ? Font dd ? FontHeight dd ? FontAsc dd ? PlateW dd ? PlateH dd ? endg start: InitializeAll stdcall InitGUIApplication call GUI.Init stdcall FontCreate, txt "Liberation Mono", 20, fwBold, ffMonospaced mov [Font], eax stdcall GetFontMetrics, eax mov [FontHeight], eax mov [FontAsc], ebx lea eax, [eax*3+16] mov [PlateH], eax stdcall GetTextBounds, "FPS: XXXX", -1, [Font] add eax, 16 mov [PlateW], eax stdcall CreateFromTemplate, tplMainForm, 0 stdcall CreateImagePNG, pngBackground, pngBackground.size mov [imgBackground], eax set [frmMain], TForm:WantFocus, TRUE set [frmMain], TForm:width, [eax+TImage.width] set [frmMain], TForm:height, [eax+TImage.height] set [frmMain], TForm:Visible, TRUE set [frmMain], TForm:OnKeyPressed, OnKeyPress stdcall Run FinalizeAll stdcall TerminateAll, 0 proc FormDestroy as TObject.OnDestroy begin call CloseGUIApplication return endp CLR = $ffff0080 CLR2= $ff80ff80 proc DemoPaint as TWindow.OnSelfPaint begin stdcall BlendImageTileWrap, [.pDstImage], [.xDst], [.yDst], [.width], [.height], [imgBackground] stdcall DrawHLine, [.pDstImage], 20, 200, 50, CLR stdcall DrawHLine, [.pDstImage], 20, 200, 60, CLR stdcall DrawHLine, [.pDstImage], 20, 200, 70, CLR stdcall DrawVLine, [.pDstImage], 20, 200, 50, CLR2 stdcall DrawVLine, [.pDstImage], 20, 200, 60, CLR2 stdcall DrawVLine, [.pDstImage], 20, 200, 70, CLR2 return endp proc OnKeyPress as TWindow.OnKeyEvent begin cmp [.utf8], 's' je .scroll cmp [.utf8], 'a' je .scrollback cmp [.utf8], 'r' je .refresh cmp [.utf8], 't' je .refresh2 return .scroll: return .scrollback: jmp .scroll .refresh: exec [.self], TWindow:RectChanged2, 0 return .refresh2: mov eax, [.self] stdcall _RefreshWindowRect, [eax+TWindow.handle], 0, 0, [eax+TWindow._width], [eax+TWindow._height] return endp |
Added freshlib/test_code0/TestLines.fpz.
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | ;FreshProject_v3 Compiler.Memory = 131072 Compiler.BinaryNameAuto = 1 Compiler.BinaryName = "" Compiler.MainFile = "TestGraphics.asm" Aliases.TargetOS = "Linux|Win32|KolibriOS" Aliases.lib = ".." ProjectTree.graphics/ = 7,"../graphics/text.asm","../graphics/rectangles.asm","../graphics/pnglib.asm","../graphics/images.asm","../graphics/giflib.asm","../graphics/fonts.asm","../graphics/draw.asm","../graphics/all.asm" ProjectTree.graphics/Linux/ = 4,"../graphics/Linux/text.asm","../graphics/Linux/images.asm","../graphics/Linux/fonts.asm" ProjectTree.graphics/Win32/ = 9,"../graphics/Win32/text.asm","../graphics/Win32/images.asm","../graphics/Win32/fonts.asm" ProjectTree.gui/ = 7,"../gui/TForm.asm","../gui/Main.asm","../gui/TWindow.asm" ProjectTree.gui/Linux/ = 4,"../gui/Linux/Main.asm" ProjectTree.gui/Win32/ = 9,"../gui/Win32/Main.asm" |
Added freshlib/test_code0/TestMenu.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 1 options.DebugMode.NoTimers = 0 options.DebugMode.XSync = 0 options.DebugMode.XErrors =0 options.ShowSizes = 1 options.SkipZeroSizes = 1 ThemeGUI equ flat_gui include "%lib%/freshlib.asm" iglobal TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 200, \ y = 200, \ width = 320, \ height = 260, \ OnCreate = FormOnCreate, \ OnClose = MainFormOnClose, \ OnDestroy = FormOnDestroy, \ Caption = 'Popup menu test' ObjTemplate tfChild, TEdit, editTest, \ x = 10, y = 200, width = 300, height = 24, \ Text = "This is test TEdit control", \ Visible = TRUE ObjTemplate tfParent or tfChild, TActionList, ActionList1, \ ImgIcons = imgMenuList ObjTemplate tfChild, TAction, actCheck, \ Caption = "Check it", HintText = "Action that can be checked and unchecked.", \ Accelerator = "Ctrl+Shift+N", \ OnExecute = ActionOnCheck, \ IconIndex = 9 ObjTemplate tfChild, TAction, actNew, \ Caption = "New", HintText = "Create new file.", \ Accelerator = "Ctrl+N", \ OnExecute = ActionOnExecute, \ IconIndex = 0 ObjTemplate tfChild, TAction, actOpen, \ Caption = "Open", HintText = "Open file for editing.", \ Accelerator = "Ctrl+O", \ OnExecute = ActionOnExecute, \ IconIndex = 1 ObjTemplate tfChild, TAction, actClean, \ Caption = "Cleanup list", HintText = "Removes not existing files from the list.", \ OnExecute = ActionOnExecute, \ IconIndex = -1 ObjTemplate tfChild, TAction, actSave, \ Caption = "Save", HintText = "Save edited file to the disk.", \ Accelerator = "Ctrl+S", \ OnExecute = ActionOnExecute, \ IconIndex = 2 ObjTemplate tfChild, TAction, actSaveAs, \ Caption = "Save As", HintText = "Save edited file with different name.", \ OnExecute = ActionOnExecute, \ IconIndex = 22 ObjTemplate tfChild, TAction, actSaveAll, \ Caption = "Save All", HintText = "Save all edited files to the disk.", \ Accelerator = "Ctrl+Shift+S", \ OnExecute = ActionOnExecute, \ IconIndex = 23 ObjTemplate tfChild, TAction, actClose, \ Caption = "Close", HintText = "Close current edited file.", \ Accelerator = "Ctrl+F4", \ OnExecute = ActionOnExecute, \ IconIndex = 21 ObjTemplate tfChild, TAction, actCloseAll, \ Caption = "Close All", HintText = "Close all edited files and the project.", \ OnExecute = ActionOnExecute, \ IconIndex = 24 ObjTemplate tfChild or tfEnd, TAction, actExit, \ Caption = "Exit", HintText = "Exit Fresh IDE.", \ Accelerator = "Alt+X", \ OnExecute = ActionOnExecute, \ IconIndex = -1 ObjTemplate tfChild, TButton, btnSkinWin, \ x = 60, y = 10, width = 84, height = 24, \ Caption = "Win skin", \ TextAlign = dtfAlignCenter or dtfAlignMiddle, \ Visible = TRUE, \ OnClick = SetWinSkin ObjTemplate tfChild, TButton, btnSkinFlat, \ x = 146, y = 10, width = 84, height = 24, \ Caption = "Flat skin", \ TextAlign = dtfAlignCenter or dtfAlignMiddle, \ Visible = TRUE, \ OnClick = SetFlatSkin ObjTemplate tfChild, TButton, btnOpenMenu, \ x = 10, \ y = 10, \ width = 32, \ height = 32, \ Icon = imgMenu, \ IconPosition = iposCenter, \ Visible = TRUE, \ OnClick = OpenMenuClick, \ OnKeyPressed = ButtonKeyPressed ObjTemplate tfChild, TButton, btnChangeAction1, \ x = 146, y = 52, width = 84, height = 24, \ Caption = "Set act. 1", \ TextAlign = dtfAlignCenter or dtfAlignMiddle, \ Visible = TRUE, \ OnClick = SetAction1 ObjTemplate tfChild, TButton, btnChangeAction1, \ x = 146, y = 78, width = 84, height = 24, \ Caption = "Set act. 2", \ TextAlign = dtfAlignCenter or dtfAlignMiddle, \ Visible = TRUE, \ OnClick = SetAction2 ObjTemplate tfChild, TButton, btnWithAction2, \ x = 10, y = 78, width = 100, height = 24, \ IconPosition = iposLeft, TextAlign = dtfAlignLeft or dtfAlignMiddle, \ Action = [actExit], \ Visible = TRUE ObjTemplate tfChild, TButton, btnWithAction1, \ x = 10, y = 52, width = 100, height = 24, \ IconPosition = iposLeft, TextAlign = dtfAlignLeft or dtfAlignMiddle, \ Action = [actCheck], \ Visible = TRUE ObjTemplate tfChild, TCheckbox, cbEnableDisable3, \ x = 10, y = 130, width = 130, height = 24, \ Caption = "Enable action", \ OnClick = EnableActionClick, \ Visible = TRUE ObjTemplate tfChild, TCheckbox, cbEnableDisable2, \ x = 146, y = 130, width = 100, height = 24, \ Action = [actCheck], \ Visible = TRUE ObjTemplate tfChild, TCheckbox, cbEnableDisable, \ x = 146, y = 104, width = 100, height = 24, \ Action = [actCheck], \ Visible = TRUE ObjTemplate tfChild or tfEnd, TToolbar, tbTest, \ x = 0, y = 236, width = 320, height = 24, \ Visible = TRUE TemplateMainMenu: ObjTemplate tfEnd, TMenu, mainMenu, \ Visible = FALSE TemplateSubMenu: ObjTemplate tfEnd, TMenu, subMenu, \ Enabled = TRUE, \ Caption = "Reopen", \ Visible = FALSE getfile imgMenu, "_test_images/menu.png" getfile imgMenuList, "_test_images/img_list.png" getfile cfgFlat, "theme_flat.cfg" dd 0 getfile cfgWin, "theme_win.cfg" dd 0 endg uglobal iconMenu dd ? endg rb 423 start: InitializeAll create [pApplication], TApplication call GUI.Init stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE ; must be set visible after creation, because it loads ; needed images in OnCreate event handler. stdcall CreateFromTemplate, TemplateMainMenu, 0 stdcall CreateFromTemplate, TemplateSubMenu, 0 exec [mainMenu], TMenu:AddItem, mitAction, [actCheck], 0 exec [mainMenu], TMenu:AddItem, mitAction, [actNew], 1 exec [mainMenu], TMenu:AddItem, mitSubmenu, [subMenu], 2 exec [mainMenu], TMenu:AddItem, mitAction, [actOpen], 3 exec [mainMenu], TMenu:AddItem, mitSeparator, 0, 4 exec [mainMenu], TMenu:AddItem, mitAction, [actSave], 5 exec [mainMenu], TMenu:AddItem, mitAction, [actSaveAs], 6 exec [mainMenu], TMenu:AddItem, mitAction, [actSaveAll], 7 exec [mainMenu], TMenu:AddItem, mitSeparator, 0, 8 exec [mainMenu], TMenu:AddItem, mitAction, [actClose], 9 exec [mainMenu], TMenu:AddItem, mitAction, [actCloseAll], 10 exec [mainMenu], TMenu:AddItem, mitSeparator, 0, 11 exec [mainMenu], TMenu:AddItem, mitAction, [actExit], 12 set [actCheck], TAction:Checked, 1 set [actCheck], TAction:Enabled, 0 ; set [cbEnableDisable2], TCheckbox:Enabled, 0 exec [subMenu], TMenu:AddItem, mitAction, [actClean], 0 exec [subMenu], TMenu:AddItem, mitSeparator, 0, 0 exec [subMenu], TMenu:AddItem, mitString, "/home/johnfound/Fresh/source/Fresh.fpr", 1 exec [subMenu], TMenu:AddItem, mitString, "/home/johnfound/Fresh/source/Fresh.asm", 2 exec [subMenu], TMenu:AddItem, mitString, "/home/johnfound/Fresh/freshlib/freshlib.inc", 3 exec [tbTest], TToolbar:AddButton, [actNew] exec [tbTest], TToolbar:AddButton, [actOpen] exec [tbTest], TToolbar:AddButton, [actSave] exec [tbTest], TToolbar:AddButton, [actSaveAll] exec [tbTest], TToolbar:AddButton, 0 exec [tbTest], TToolbar:AddButton, [actClose] exec [tbTest], TToolbar:AddButton, [actCloseAll] stdcall Run FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnCreate as TObject.OnCreate begin DebugMsg "Form OnCreate event handler." return endp proc FormOnDestroy as TObject.OnDestroy begin DebugMsg "MainForm destroy event handler." return endp proc MainFormOnClose as TForm.OnClose begin DebugMsg "Main form OnClose event handler" clc return endp proc OpenMenuClick as TButton.OnClick begin exec [mainMenu], TMenu:Show, [btnOpenMenu], 0, 32 return endp proc ButtonKeyPressed as TWindow.OnKeyPressed begin stdcall CreateKeyName, [.utf8], [.scancode], [.kbdState] push eax stdcall StrPtr, eax OutputLn eax OutputValue " UTF-8: $", [.utf8], 16, 8 OutputValue "Scan code: $", [.scancode], 16, 8 OutputValue " State: $", [.kbdState], 16, 8 DebugMsg " " stdcall StrDel return endp proc SetWinSkin as TButton.OnClick begin stdcall StringToNamedArray, GUI.meta, cfgWin exec [frmMain], TWindow:ForceRefresh return endp proc SetFlatSkin as TButton.OnClick begin stdcall StringToNamedArray, GUI.meta, cfgFlat exec [frmMain], TWindow:ForceRefresh return endp proc ActionOnExecute as TAction.OnExecute begin mov esi, [.Action] stdcall StrDupMem, 'Action "' mov ebx, eax get eax, [.Action], TAction:Caption stdcall StrCat, ebx, eax stdcall StrCat, ebx, '" executed from control $' stdcall NumToStr, [.Ctrl], ntsHex or ntsFixedWidth + 8 stdcall StrCat, ebx, eax stdcall StrDel, eax stdcall ShowMessage, [frmMain], smiInformation, "Action execution", ebx, smbOK stdcall StrDel, ebx return endp proc ActionOnCheck as TAction.OnExecute begin get eax, [.Action], TAction:Checked xor eax, 1 set [.Action], TAction:Checked, eax return endp proc SetAction1 as TButton.OnClick begin set [btnWithAction1], TButton:Action, [actOpen] set [btnWithAction2], TButton:Action, [actSaveAll] return endp proc SetAction2 as TButton.OnClick begin set [btnWithAction1], TButton:Action, [actCheck] set [btnWithAction2], TButton:Action, [actClose] return endp proc EnableActionClick as TButton.OnClick begin get eax, [.self], TCheckbox:Checked set [actCheck], TAction:Enabled, eax return endp |
Added freshlib/test_code0/TestMenu.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestNewGUI.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 1 options.DebugMode.NoTimers = 0 options.DebugMode.XSync = 0 options.DebugMode.XErrors =0 options.ShowSizes = 1 options.SkipZeroSizes = 0 ThemeGUI equ flat_gui ;ThemeGUI equ win_gui include "%lib%/freshlib.asm" iglobal TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 100, \ y = 50, \ width = 600, \ height = 520, \ OnCreate = FormOnCreate, \ OnClose = MainFormOnClose, \ OnDestroy = FormOnDestroy, \ Caption = 'The new GUI toolkit test form.' ObjTemplate tfChild, TLabel, NONE, \ x = 10, y = 10, width = 200, height = 24, \ Caption = "Progress bar test:", \ Visible = TRUE ObjTemplate tfChild, TProgress, Progress1, \ x = 38, y = 32, width = 200, height = 24, \ Max = 100, Pos = 70, \ Visible = TRUE ObjTemplate tfChild, TButton, btnArrowLeft, \ x = 10, \ y = 32, \ width = 24, \ height = 24, \ Icon = imgArrowLeft, \ IconPosition = iposCenter, \ Visible = TRUE, \ OnClick = ArrowLeftClick ObjTemplate tfChild, TButton, btnArrowRight, \ x = 242, \ y = 32, \ width = 24, \ height = 24, \ Icon = imgArrowRight, \ IconPosition = iposCenter, \ Visible = TRUE, \ OnClick = ArrowRightClick ObjTemplate tfChild, TLabel, NONE, \ x = 10, y = 75, width = 200, height = 24, \ Caption = "Buttons test:", \ Visible = TRUE ObjTemplate tfChild, TButton, btnDisabled, \ x = 448, \ y = 100, \ width = 128, \ height = 48, \ TextAlign = dtfAlignJustify or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = "Disabled", \ Icon = imgTestIcon1, \ IconPosition = iposLeft, \ Enabled = FALSE, \ Visible = TRUE ObjTemplate tfChild, TButton, btnChild1, \ x = 10, \ y = 100, \ width = 407, \ height = 242, \ TextAlign = dtfAlignJustify or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = utf8_long, \ Icon = imgTestIcon1, \ IconPosition = iposLeft, \ Visible = TRUE, \ OnClick = Button1Click ObjTemplate tfChild, TButton, btnChild2, \ x = 448, \ y = 160, \ width = 128, \ height = 48, \ TextAlign = dtfAlignJustify or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = utf8_string, \ Icon = imgTestIcon2, \ IconPosition = iposRight, \ Enabled = TRUE, \ Visible = TRUE, \ OnClick = Button2Click ObjTemplate tfChild, TButton, btnChild3, \ x = 448, \ y = 220, \ width = 128, \ height = 122, \ TextAlign = dtfAlignCenter or dtfAlignBottom or dtfCRLF or dtfWordWrap,\ Caption = "Workers of the world, unite!", \ Icon = imgTestIcon3, \ IconPosition = iposCenter, \ Enabled = TRUE, \ Visible = TRUE ObjTemplate tfChild, TButton, btnAlignLeft, \ x = 10, \ y = 350, \ width = 64, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Left', \ Visible = TRUE, \ OnClick = LeftClick ObjTemplate tfChild, TButton, btnAlignRight, \ x = 84, \ y = 350, \ width = 64, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Right', \ Visible = TRUE, \ OnClick = RightClick ObjTemplate tfChild, TButton, btnAlignCenter, \ x = 158, \ y = 350, \ width = 64, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Center', \ Visible = TRUE, \ OnClick = CenterClick ObjTemplate tfChild, TButton, btnAlignJust, \ x = 232, \ y = 350, \ width = 64, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Justify', \ Visible = TRUE, \ OnClick = JustifyClick ObjTemplate tfChild, TButton, btnAlignTop, \ x = 306, \ y = 350, \ width = 64, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Top', \ Visible = TRUE, \ OnClick = TopClick ObjTemplate tfChild, TButton, btnAlignMiddle, \ x = 380, \ y = 350, \ width = 64, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Middle', \ Visible = TRUE, \ OnClick = MiddleClick ObjTemplate tfChild, TButton, btnAlignBottom, \ x = 454, \ y = 350, \ width = 64, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Bottom', \ Visible = TRUE, \ OnClick = BottomClick ObjTemplate tfChild, TLabel, NONE, \ x = 10, y = 390, width = 200, height = 24, \ Caption = "Line editor test:", \ Visible = TRUE ObjTemplate tfChild, TEdit, editTest, \ Text = "This is simple line editor.", \ x = 10, y=415, width=306, height=24, \ MarginLeft= 2, \ MarginRight= 2, \ Visible = TRUE ObjTemplate tfChild, TLabel, NONE, \ x = 10, y = 445, width = 200, height = 24, \ Caption = "Message boxes test:", \ Visible = TRUE ObjTemplate tfChild, TButton, btnMsgError, \ x = 10, \ y = 470, \ width = 72, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Error', \ Visible = TRUE, \ OnClick = ErrorClick ObjTemplate tfChild, TButton, btnMsgWarning, \ x = 88, \ y = 470, \ width = 72, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Warning', \ Visible = TRUE, \ OnClick = WarningClick ObjTemplate tfChild, TButton, btnMsgQuestion, \ x = 166, \ y = 470, \ width = 72, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Question', \ Visible = TRUE, \ OnClick = QuestionClick ObjTemplate tfChild or tfEnd, TButton, btnMsgInfo, \ x = 244, \ y = 470, \ width = 72, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Info', \ Visible = TRUE, \ OnClick = InfoClick getfile imgTestIcon1, '_test_images/speech.png' getfile imgTestIcon2, '_test_images/globe.png' getfile imgTestIcon3, '_test_images/star.png' getfile imgArrowLeft, '_test_images/left.png' getfile imgArrowRight, '_test_images/right.png' getfile imgFolder, "_test_images/folder.png" getfile imgFile, "_test_images/document.png" include "UTF8_examples.asm" endg rb 423 start: InitializeAll create [pApplication], TApplication call GUI.Init stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE ; must be set visible after creation, because it loads ; needed images in OnCreate event handler. stdcall Run .finish: FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnCreate as TObject.OnCreate begin DebugMsg "Form OnCreate event handler." return endp proc FormOnDestroy as TObject.OnDestroy begin DebugMsg "MainForm destroy event handler." return endp proc LeftClick as TButton.OnClick begin get eax, [btnChild1], TButton:TextAlign and eax, not dtfHAlignMask or eax, dtfAlignLeft set [btnChild1], TButton:TextAlign, eax return endp proc RightClick as TButton.OnClick begin get eax, [btnChild1], TButton:TextAlign and eax, not dtfHAlignMask or eax, dtfAlignRight set [btnChild1], TButton:TextAlign, eax return endp proc CenterClick as TButton.OnClick begin get eax, [btnChild1], TButton:TextAlign and eax, not dtfHAlignMask or eax, dtfAlignCenter set [btnChild1], TButton:TextAlign, eax return endp proc JustifyClick as TButton.OnClick begin get eax, [btnChild1], TButton:TextAlign and eax, not dtfHAlignMask or eax, dtfAlignJustify set [btnChild1], TButton:TextAlign, eax return endp proc TopClick as TButton.OnClick begin get eax, [btnChild1], TButton:TextAlign and eax, not dtfVAlignMask or eax, dtfAlignTop set [btnChild1], TButton:TextAlign, eax return endp proc MiddleClick as TButton.OnClick begin get eax, [btnChild1], TButton:TextAlign and eax, not dtfVAlignMask or eax, dtfAlignMiddle set [btnChild1], TButton:TextAlign, eax return endp proc BottomClick as TButton.OnClick begin get eax, [btnChild1], TButton:TextAlign and eax, not dtfVAlignMask or eax, dtfAlignBottom set [btnChild1], TButton:TextAlign, eax return endp proc Button1Click as TButton.OnClick begin DebugMsg 'Button1 clicked' return endp proc Button2Click as TButton.OnClick begin DebugMsg 'Button2 clicked' return endp proc MainFormOnClose as TForm.OnClose begin DebugMsg "Main form OnClose event handler" clc return endp ;proc PaintMainFormBG as TWindow.OnPaint ;begin ; ;; tile test background ; mov esi, [.self] ; mov edi, [.canvas] ; mov ebx, [imgTest] ; xor edx, edx ; ; test ebx, ebx ; jz .finish ; ;.yloop: ; ; xor ecx, ecx ; ;.xloop: ; stdcall BlendImage, edi, ecx, edx, ebx, 0, 0, [ebx+TImage.width], [ebx+TImage.height] ; ; add ecx, [ebx+TImage.width] ; cmp ecx, [edi+TImage.width] ; jb .xloop ; ; add edx, [ebx+TImage.height] ; cmp edx, [edi+TImage.height] ; jb .yloop ; ;.finish: ; return ;endp ;proc ButtonPaint as TWindow.OnPaint ;begin ; stdcall DrawSolidRect, [.canvas], 40, 40, 140, 140, 0 ; return ;endp proc ArrowLeftClick as TButton.OnClick begin get eax, [Progress1], TProgress:Pos dec eax jns @f mov eax, 100 @@: set [Progress1], TProgress:Pos, eax return endp proc ArrowRightClick as TButton.OnClick begin get eax, [Progress1], TProgress:Pos inc eax cmp eax, 100 jbe @f xor eax, eax @@: set [Progress1], TProgress:Pos, eax return endp proc ErrorClick as TButton.OnClick begin stdcall ShowMessage, [frmMain], smiError, "Dialog box test.", "This is test of common dialog boxes.", smbOK return endp proc WarningClick as TButton.OnClick begin stdcall ShowMessage, [frmMain], smiWarning, "Dialog box test.", "This is test of common dialog boxes.", smbOK return endp proc QuestionClick as TButton.OnClick begin stdcall ShowMessage, [frmMain], smiQuestion, "Dialog box test.", "This is test of common dialog boxes.", smbYes or smbNo or smbMaybe return endp proc InfoClick as TButton.OnClick begin stdcall ShowMessage, [frmMain], smiInformation, "Dialog box test.", "This is test of common dialog boxes.", smbOK or smbCancel return endp |
Added freshlib/test_code0/TestNewGUI.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestOldTemplates.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable GUI application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" include "%lib%/gui/OldTemplates.inc" @BinaryType GUI, compact options.ShowSizes = 0 ThemeGUI equ win_gui include "%lib%/freshlib.asm" ; include your includes here. include "TestOldTemplates.frm" start: InitializeAll create [pApplication], TApplication call GUI.Init stdcall CreateFromTemplate, frmMain.template, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TForm:Visible, TRUE stdcall Run FinalizeAll stdcall TerminateAll, 0 |
Added freshlib/test_code0/TestOldTemplates.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestOldTemplates.frm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | ;<ff Window frmMain, 3, 0, 'TForm', 'TForm window', $6080000, $0, 0, 411, 230, 587, 443, OnCreate = FormOnCreate; Window tvFolders, 0, 0, 'SysTreeView32', 'TreeView', $50800002, $200, 0, 0, 48, 576, 368, 0; Window NONE, 0, 0, 'BUTTON', 'Read', $50000000, $0, 0, 248, 16, 64, 25, OnClick = SetTreeSample; Window NONE, 0, 0, 'BUTTON', 'Button', $50000000, $0, 0, 504, 16, 64, 25, OnClick = Button2Click; Window editDir, 2, 0, 'EDIT', 'Edit', $50000080, $200, 0, 0, 16, 241, 21, OnCreate = EditOnCreate; ;ff> iglobal if ThemeGUI eq win_gui getfile imgArrowRight, '_test_images/right2.png' getfile imgFolder, "_test_images/folder2.png" getfile imgFile, "_test_images/document2.png" end if if ThemeGUI eq flat_gui getfile imgArrowRight, '_test_images/right.png' getfile imgFolder, "_test_images/folder.png" getfile imgFile, "_test_images/document.png" end if endg uglobal iconArrowRight dd ? iconFolder dd ? iconFile dd ? endg proc FormOnCreate as TObject.OnCreate begin stdcall CreateImagePNG, imgArrowRight, imgArrowRight.size mov [iconArrowRight], eax stdcall CreateImagePNG, imgFolder, imgFolder.size mov [iconFolder], eax stdcall CreateImagePNG, imgFile, imgFile.size mov [iconFile], eax return endp ; This is the old form file. proc Button2Click as TButton.OnClick begin pushad get ebx, [.self], TButton:Caption stdcall StrToNumEx, ebx inc eax stdcall NumToStr, eax, ntsDec or ntsUnsigned mov edi, eax set [.self], TButton:Caption, edi stdcall StrDel, ebx stdcall StrDel, edi popad return endp proc EditOnCreate as TObject.OnCreate begin if TargetOS eq Win32 set [editDir], TEdit:Text, txt "c:\" else set [editDir], TEdit:Text, txt "/home" end if return endp proc SetTreeSample as TButton.OnClick begin pushad get edi, [frmMain], TWindow:Cursor stdcall GetStockCursor, mcWait push eax mov eax, [frmMain] stdcall SetMouseCursor, [eax+TWindow.handle] stdcall ProcessSystemEvents mov esi, [tvFolders] get ebx, [editDir], TEdit:Text mov edx, [esi+TTreeView._items] stdcall DeleteArrayItems, edx, 0, [edx+TArray.count] stdcall ___DoReadDir, ebx, edx, -1 mov [esi+TTreeView._items], edx jc .error .finish: stdcall StrDel, ebx OutputValue "Files tree items:", [edx+TArray.count], 10, 8 exec esi, TTreeView:__RebuildWidths exec esi, TTreeView:__RebuildIndex exec esi, TTreeView:UpdateScrollBar exec esi, TWindow:Refresh set [frmMain], TWindow:Cursor, edi popad return .error: stdcall GetErrorString, eax push eax stdcall ShowMessage, [frmMain], smiError, "File error", eax, smbOK stdcall FreeErrorString ; from the stack jmp .finish endp proc ___DoReadDir, .hDir, .pArray, .Level begin pushad mov edx, [.pArray] mov ebx, [.Level] inc ebx stdcall DirectoryRead, [.hDir] jc .finish mov esi, eax xor ecx, ecx stdcall SortDirArray, esi, fdsByType .loop: cmp ecx, [esi+TArray.count] jae .end_loop stdcall StrPtr, [esi+TArray.array + 8*ecx + TDirItem.hFilename] cmp byte [eax], "." je .next stdcall AddArrayItems, edx, 1 push [esi+TArray.array + 8*ecx + TDirItem.hFilename] ; name pop [eax+TTreeViewItem.caption] mov [eax+TTreeViewItem.level], ebx mov [eax+TTreeViewItem.state], tvisExpanded push edx mov edx, [iconFolder] cmp [esi+TArray.array + 8*ecx + TDirItem.Type], ftDirectory je @f mov edx, [iconFile] cmp [esi+TArray.array + 8*ecx + TDirItem.Type], ftFile je @f xor edx, edx @@: mov [eax+TTreeViewItem.imgNormal], edx pop edx cmp [esi+TArray.array + 8*ecx + TDirItem.Type], ftDirectory jne .next stdcall StrDup, [.hDir] push eax stdcall StrCharCat, eax, "/" stdcall StrCat, eax, [esi+TArray.array + 8*ecx + TDirItem.hFilename] stdcall ___DoReadDir, eax, edx, ebx stdcall StrDel ; from the stack .next: inc ecx jmp .loop .end_loop: stdcall FreeMem, esi clc xor eax, eax .finish: mov [esp+regEAX*4], eax mov [esp+regEDX*4], edx popad return endp |
Added freshlib/test_code0/TestPNG.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 1 options.ShowSizes = 1 options.SkipZeroSizes = 1 options.DebugMode.XSync = 0 options.DebugMode.XErrors =0 include "%lib%/freshlib.asm" iglobal TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 100, \ y = 50, \ width = 640, \ height = 480, \ Visible = FALSE, \ OnDestroy = FormOnDestroy, \ Caption = 'Fresh portable Win32/Linux application test.' ObjTemplate tfChild, TButton, btnChild1, \ x = 48, \ y = 48, \ width = 160, \ height = 48, \ TextAlign = dtfAlignLeft or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Button 1', \ Visible = TRUE, \ Icon = pngIcon, \ OnClick = Button1Click ObjTemplate tfChild or tfEnd, TButton, btnChild2, \ x = 48, \ y = 100, \ width = 160, \ height = 48, \ TextAlign = dtfAlignLeft or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Button 2', \ Visible = TRUE;, \ ; OnClick = Button2Click endg rb 1223 uglobal ignore dd ? endg start: InitializeAll create [pApplication], TApplication stdcall GUI.Init ; stdcall TestBackground stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE stdcall Run FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnDestroy, .self begin DebugMsg "MainForm destroy event handler." return endp proc Button3Click as TButton.OnClick begin DebugMsg 'Button3 clicked' return endp macro pnglist list, [name] { common label list dword forward local ..lbl, ..size dd ..lbl, ..size common dd $0 forward ..lbl file name ..size = $ - ..lbl } iglobal pnglist PngFiles, '_test_images/allpng/0_1.png', '_test_images/allpng/0_2.png', \ '_test_images/allpng/0_4.png', '_test_images/allpng/0_8.png', \ '_test_images/allpng/0_16.png', '_test_images/allpng/2_8.png', \ '_test_images/allpng/2_16.png', '_test_images/allpng/png7.png', \ '_test_images/allpng/3_1.png', '_test_images/allpng/3_2.png', \ '_test_images/allpng/3_4.png', '_test_images/allpng/3_8.png', \ '_test_images/allpng/3_1a.png', '_test_images/allpng/3_2a.png', \ '_test_images/allpng/3_4a.png', '_test_images/allpng/3_8a.png', \ '_test_images/allpng/4_8.png', '_test_images/allpng/4_16.png', \ '_test_images/allpng/6_8.png', '_test_images/allpng/6_16.png' pngIcon file '_test_images/ball.png' pngBackground file '_test_images/allpng/back2.png' sizeof.pngBackground = $ - pngBackground endg xStart = 200 xMax = 520 yStart = 10 xStep = 80 yStep = 80 proc Button1Click as TButton.OnClick .img dd ? begin pushad DebugMsg 'Button1 clicked' stdcall CreateImagePNG, pngBackground, sizeof.pngBackground mov [.img], eax mov edi, PngFiles mov ecx, xStart mov edx, yStart .loop: cmp dword [edi], 0 je .finish_demo stdcall CreateImagePNG, [edi], [edi+4] jc .finish_demo mov esi, eax add edi, 8 stdcall BlendImage, [.img], ecx, edx, esi, 0, 0, [esi+TImage.width], [esi+TImage.height] stdcall DestroyImage, esi add ecx, xStep cmp ecx, xMax jb .loop mov ecx, xStart add edx, yStep jmp .loop .finish_demo: get ebx, [frmMain], TWindow:Screen mov esi, [.img] stdcall BlendImage, ebx, 0, 0, esi, 0, 0, [esi+TImage.width], [esi+TImage.height] mov eax, [frmMain] stdcall _RefreshWindowRect, [eax+TWindow.handle], 0, 0, [eax+TWindow.width], [eax+TWindow.height] DebugMsg "Draw on window" .end: popad return endp ;proc Button2Click as TButton.OnClick ;.context dd ? ;.bkgnd dd ? ;.work dd ? ;.art dd ? ;.frames dd ? ;.fps dd ? ;.font dd ? ;begin ; pushad ; ; DebugMsg 'Button2 clicked' ; ; stdcall FontCreate, 'DejaVu', 20, 1000, 0 ; mov [.font], eax ; ; mov eax, [frmMain] ; stdcall __AllocateContext, [eax+TWindow.handle] ; mov [.context], eax ; ; stdcall __SetDrawMode, eax, cmCopy ; ; stdcall CreateImagePNG, pngBackground, sizeof.pngBackground ; mov [.bkgnd], eax ; ; stdcall CreateImagePNG, pngBackground, sizeof.pngBackground ; mov [.work], eax ; ; stdcall CreateImagePNG, [PngFiles+7*8], [PngFiles+7*8+4] ; mov [.art], eax ; ; stdcall GetTimestamp ; mov edi, eax ; neg edi ; ; xor eax, eax ; x ; xor ebx, ebx ; y ; ; mov ecx, 2 ; dx ; mov edx, 1 ; dy ; ; mov esi, 100000 ; ; mov [.frames], 0 ; ;.loop: ; push eax ; ; stdcall ProcessSystemEvents ; jc .terminate ; ; pop eax ; ; stdcall CopyImageRect, [.work], 0, 0, [.bkgnd], 0, 0, 640, 480 ; ; ; stdcall BlendImage, [.work], eax, ebx, [.art], 0, 0, 200, 200 ; ; neg eax ; add eax, 586 ; ; stdcall BlendImage, [.work], eax, ebx, [.art], 0, 0, 200, 200 ; ; neg ebx ; add ebx, 416 ; ; stdcall BlendImage, [.work], eax, ebx, [.art], 0, 0, 200, 200 ; ; neg eax ; add eax, 586 ; ; stdcall BlendImage, [.work], eax, ebx, [.art], 0, 0, 200, 200 ; ; neg ebx ; add ebx, 416 ; ; add eax, ecx ; ; test ecx, ecx ; js .checkxm ; ; cmp eax, 586 ; jge .changex ; jmp .xok ; ;.checkxm: ; cmp eax, 0 ; jge .xok ; ;.changex: ; neg ecx ; ;.xok: ; add ebx, edx ; ; test edx, edx ; js .checkym ; ; cmp ebx, 416 ; jge .changey ; jmp .yok ; ;.checkym: ; cmp ebx, 0 ; jge .yok ; ;.changey: ; neg edx ; ;.yok: ; push eax ebx ecx edx ; ; stdcall GetTimestamp ; lea ecx, [eax+edi] ; cmp ecx, 300 ; jl .inc_frames ; ; mov edi, eax ; neg edi ; ; mov eax, [.frames] ; cdq ; div ecx ; mov [.fps], eax ; ; test eax, eax ; jnz @f ; int3 ;@@: ; mov [.frames], 0 ; jmp .display_fps ; ;.inc_frames: ; add [.frames], 1000 ; ;.display_fps: ; stdcall NumToStr, [.fps], ntsDec or ntsUnsigned ; mov ecx, eax ; ; stdcall StrDupMem, cTxtLabel ; mov edx, eax ; ; stdcall StrCat, edx, ecx ; stdcall StrDel, ecx ; stdcall StrCharCat, edx, ' fps' ; ; stdcall DrawString2, [.work], edx, 20, 370, [.font], $40ff0000 ; ; stdcall DrawImage, [.context], [.work], 0, 0 ; ; stdcall StrDel, edx ; ; pop edx ecx ebx eax ; ;; change speed ; ; cmp [.frames], 0 ; jne @f ; ; test edi, 1 ; jz @f ; ; inc ecx ; inc edx ; ;@@: ; ; cmp ecx, 4 ; jle @f ; ; mov ecx, 4 ; ;@@: ; cmp ecx, -4 ; jge @f ; ; mov ecx, -4 ; ;@@: ; ; cmp edx, 4 ; jle @f ; ; mov edx, 4 ; ;@@: ; cmp edx, -4 ; jge @f ; ; mov edx, -4 ; ;@@: ; ; ; dec esi ; frame count ; jnz .loop ; ; stdcall DrawImage, [.context], [.bkgnd], 0, 0 ; ; stdcall DestroyImage, [.bkgnd] ; stdcall DestroyImage, [.work] ; stdcall DestroyImage, [.art] ; ; stdcall __ReleaseContext, [.context] ; stdcall FontDestroy2, [.font] ; ; popad ; return ; ;.terminate: ; pop eax ; popad ; stdcall TerminateAll, 0 ; ;endp cTxtLabel file 'unicode_emo.txt' dd 0 |
Added freshlib/test_code0/TestPNG.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestResizeEvents.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: Very simple test application for FreshLib. ; The content may change arbitrary. ; ; Target OS: All/Linux/Win32 - depending on current test needs. ; ; Dependencies: ; ; Notes: The main test program calls "PrepareDemo" procedure. ;_________________________________________________________________________________________ __TestGround: ; Global data... iglobal __TestData: frmMainForm: ObjTemplate tfParent or tfEnd, Form, frmMain, \ x, 300, \ y, 250, \ width, 360, \ height, 240, \ Visible, TRUE, \ Caption, 'FreshLib minimal application test.' ObjTemplate tfChild or tfEnd, Button, btnOpenModal, \ x, 50, \ y, 50, \ width, 120, \ height, 75, \ Visible, TRUE, \ TextAlign, dtfAlignCenter or dtfAlignMiddle or dtfWordWrap , \ Caption, 'Click to resize the window.', \ borderKind, borderFull, \ OnClick, TestResize __TestDataSize = $ - __TestData endg proc PrepareDemo begin stdcall CreateFromTemplate, frmMainForm, 0 mov ecx, [pApplication] mov [ecx+TApplication.MainWindow], frmMain return endp proc TestResize, .self, .button .bounds TBounds begin push eax ecx mov [.bounds.x], 100 mov [.bounds.y], 100 mov [.bounds.width], 640 mov [.bounds.height], 480 mov eax, [frmMain] lea ecx, [.bounds] stdcall _SetWindowBounds, [eax+TWindow.handle], ecx ; mov [.bounds.x], 100 ; mov [.bounds.y], 100 ; mov [.bounds.width], 320 ; mov [.bounds.height], 240 ; ; ; mov eax, [frmMain] ; lea ecx, [.bounds] ; stdcall _SetWindowBounds, [eax+TWindow.handle], ecx pop ecx eax return endp DispSize 'Test ground dummy code:', ($-__TestGround)+__TestDataSize |
Added freshlib/test_code0/TestRuntimeImport.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType console, compact options.DebugMode = 0 include "%lib%/freshlib.asm" uglobal sqliteOpen dd ? endg start: InitializeAll stdcall LibLoad, "./sqlite3.so" jc .finish_error_load mov ebx, eax stdcall LibImport, ebx, "sqlite3_open" jc .finish_error_import mov [sqliteOpen], eax stdcall FileWriteString, [STDERR], "Function sqlite3_open address: $" stdcall NumToStr, [sqliteOpen], ntsHex or ntsUnsigned or ntsFixedWidth + 8 push eax stdcall FileWriteString, [STDERR], eax stdcall StrDel ; from the stack stdcall FileWriteString, [STDERR], <txt 13, 10> .lib_release: stdcall LibRelease, ebx .finish: FinalizeAll stdcall TerminateAll, 0 .finish_error_load: stdcall GetErrorString, eax mov ebx, eax stdcall FileWriteString, [STDERR], "Error loading library: " stdcall FileWriteString, [STDERR], ebx stdcall FreeErrorString, ebx stdcall FileWriteString, [STDERR], <txt 13, 10> jmp .finish .finish_error_import: OutputValue "Error importing object: ", eax, 10, -1 jmp .lib_release |
Added freshlib/test_code0/TestRuntimeImport.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestSplitGrid.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 0 options.DebugMode.NoTimers = 1 options.DebugMode.XSync = 0 options.DebugMode.XErrors = 1 options.ShowSizes = 1 options.SkipZeroSizes = 1 ThemeGUI equ flat_gui include "%lib%/freshlib.asm" iglobal TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 100, \ y = 50, \ width = 640, \ height = 480, \ OnCreate = FormOnCreate, \ OnClose = MainFormOnClose, \ OnDestroy = FormOnDestroy, \ SplitGrid = SplitTest, \ Visible = FALSE, \ Caption = 'Split grids test form' ObjTemplate tfChild, TLabel, lblEmpty, \ SplitCell = SplitTest.cellEmpty, \ Caption = utf8_long, \ TextAlign = dtfAlignJustify or dtfAlignTop or dtfCRLF or dtfWordWrap, \ Visible = TRUE ObjTemplate tfChild, TEdit, editDir, \ Text = "/home", \ x = 10, y=10, width=370, height=24, \ MarginLeft= 2, \ MarginRight= 2, \ OnCreate = EditOnCreate, \ SplitCell = SplitTest.cellEdit, \ Visible = TRUE ObjTemplate tfChild, TButton, btnArrowRight, \ x = 384, \ y = 10, \ width = 24, \ height = 24, \ Icon = imgArrowRight, \ IconPosition = iposCenter, \ SplitCell = SplitTest.cellButton, \ Visible = TRUE, \ OnClick = ReadFolderClick ObjTemplate tfChild or tfEnd, TTreeView, tvFolders, \ x = 10, y = 40, width = 200, height = 200, \ SplitCell = SplitTest.cellTree, \ OnFocusItem = TreeFocusItem, \ Visible = TRUE include "UTF8_examples.asm" SplitStart SplitTest Split stVert, 6, 24, 16, 48 Split stHoriz or stOriginBR or stJustGap, 6, 64, 48, 200 Cell cellEdit Cell cellButton Split stHoriz or stRelative, 6, 16384, 3000, 29000 Cell cellTree Cell cellEmpty SplitEnd if ThemeGUI eq win_gui getfile imgArrowRight, '_test_images/right2.png' getfile imgFolder, "_test_images/folder2.png" getfile imgFile, "_test_images/document2.png" end if if ThemeGUI eq flat_gui getfile imgArrowRight, '_test_images/right.png' getfile imgFolder, "_test_images/folder.png" getfile imgFile, "_test_images/document.png" end if endg uglobal iconFolder dd ? iconFile dd ? endg ;rb 423 start: InitializeAll create [pApplication], TApplication stdcall GUI.Init stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE ; must be set visible after creation, because it loads ; needed images in OnCreate event handler. stdcall Run FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnCreate as TObject.OnCreate begin DebugMsg "Form OnCreate event handler." stdcall CreateImagePNG, imgFolder, imgFolder.size mov [iconFolder], eax stdcall CreateImagePNG, imgFile, imgFile.size mov [iconFile], eax return endp proc EditOnCreate as TObject.OnCreate begin if TargetOS eq Win32 set [editDir], TEdit:Text, txt "c:\" else set [editDir], TEdit:Text, txt "/home" end if return endp proc FormOnDestroy as TObject.OnDestroy begin DebugMsg "MainForm destroy event handler." return endp proc MainFormOnClose as TForm.OnClose begin DebugMsg "Main form OnClose event handler" clc return endp proc TreeFocusItem as TTreeView.OnFocusItem begin jmp .finish mov ebx, [.pItem] stdcall FileWriteString, [STDOUT], [ebx+TTreeViewItem.UserData] stdcall FileWriteString, [STDOUT], <txt 13, 10> ; stdcall StrExtractExt, [ebx+TTreeViewItem.UserData] ; jc .finish ; ; stdcall StrCompNoCase, eax, txt ".txt" ; stdcall StrDel, eax ; jnc .finish stdcall LoadBinaryFile, [ebx+TTreeViewItem.UserData] jc .finish push eax set [lblEmpty], TLabel:Caption, eax stdcall FreeMem ; from the stack .finish: return endp proc ReadFolderClick as TButton.OnClick begin pushad get edi, [frmMain], TWindow:Cursor stdcall GetStockCursor, mcWait push eax mov eax, [frmMain] stdcall SetMouseCursor, [eax+TWindow.handle] stdcall ProcessSystemEvents mov esi, [tvFolders] ; get ebx, [editDir], TEdit:Text mov edx, [esi+TTreeView._items] stdcall DeleteArrayItems, edx, 0, [edx+TArray.count] stdcall ___DoReadDir, '/home', edx, -1 ;ebx, edx, -1 mov [esi+TTreeView._items], edx pushf push eax stdcall StrDel, ebx OutputValue "Files tree items:", [edx+TArray.count], 10, 8 exec [tvFolders], TTreeView:__RebuildWidths exec [tvFolders], TTreeView:__RebuildIndex exec [tvFolders], TTreeView:UpdateScrollBar exec [tvFolders], TWindow:RectChanged2, 0 set [frmMain], TWindow:Cursor, edi pop eax popf jc .error popad return .error: stdcall GetErrorString, eax push eax stdcall ShowMessage, [frmMain], smiError, "File error", eax, smbOK stdcall FreeErrorString ; from the stack popad return endp proc ___DoReadDir, .hDir, .pArray, .Level begin pushad mov edx, [.pArray] mov ebx, [.Level] inc ebx stdcall DirectoryRead, [.hDir] jc .finish mov esi, eax xor ecx, ecx stdcall SortDirArray, esi, fdsByType .loop: cmp ecx, [esi+TArray.count] jae .end_loop stdcall StrPtr, [esi+TArray.array + 8*ecx + TDirItem.hFilename] cmp byte [eax], "." je .next ; Output eax ; DebugMsg "" stdcall StrDup, [.hDir] stdcall StrCharCat, eax, "/" stdcall StrCat, eax, [esi+TArray.array+8*ecx+TDirItem.hFilename] push eax stdcall AddArrayItems, edx, 1 push [esi+TArray.array + 8*ecx + TDirItem.hFilename] ; name pop [eax+TTreeViewItem.caption] pop [eax+TTreeViewItem.UserData] ; the full filename mov [eax+TTreeViewItem.level], ebx mov [eax+TTreeViewItem.state], tvisExpanded push edx mov edx, [iconFolder] cmp [esi+TArray.array + 8*ecx + TDirItem.Type], ftDirectory je @f mov edx, [iconFile] cmp [esi+TArray.array + 8*ecx + TDirItem.Type], ftFile je @f xor edx, edx @@: mov [eax+TTreeViewItem.imgNormal], edx pop edx cmp [esi+TArray.array + 8*ecx + TDirItem.Type], ftDirectory jne .next stdcall StrDup, [.hDir] push eax stdcall StrCharCat, eax, "/" stdcall StrCat, eax, [esi+TArray.array + 8*ecx + TDirItem.hFilename] stdcall ___DoReadDir, eax, edx, ebx stdcall StrDel ; from the stack .next: inc ecx jmp .loop .end_loop: stdcall FreeMem, esi clc xor eax, eax .finish: mov [esp+regEAX*4], eax mov [esp+regEDX*4], edx popad return endp |
Added freshlib/test_code0/TestSplitGrid.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestStripMacro.asm.
> > > > > | 1 2 3 4 5 | include "../macros/_datamacros.inc" mytext StripText "TestStripMacro.sql", SQL |
Added freshlib/test_code0/TestStripMacro.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestStripMacro.sql.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | BEGIN TRANSACTION; /* Data tables */ create table Params ( id text primary key, val text ); insert into Params values ('user_perm', '29'); -- permLogin + permPost + permThreadStart + permEditOwn insert into Params values ('file_cache', '0'); insert into Params values ('log_events', '0'); create table Users ( id integer primary key autoincrement, nick text unique, passHash text unique, salt text unique, status integer, -- see permXXXXX constants. user_desc text, -- free text user description. avatar blob, -- copy of the user avatar. email text unique, -- user email. Register integer, -- the time when the user has activated the account. LastSeen integer -- the time when the user has been last seen by taking some action. ); create view UsersX as select *, (select count(1) from Posts as P where P.UserID = U.id) as PostCount from Users as U; create index idxUsers_nick on Users (nick); create index idxUsers_email on Users (email); create table WaitingActivation( id integer primary key, nick text unique, passHash text unique, salt text unique, email text unique, ip_from text unique, time_reg integer, time_email integer, a_secret text unique ); create table Threads ( id integer primary key autoincrement, Slug text unique, Caption text, LastChanged integer, Pinned integer default 0 ); create index idxThreads_LastChanged on Threads (LastChanged desc); create index idxThreads_Slug on Threads (Slug); create table Posts ( id integer primary key autoincrement, threadID integer references Threads(id) on delete cascade, userID integer references Users(id) on delete cascade, postTime integer, -- based on postTime the posts are sorted in the thread. ReadCount integer, Content text ); create index idxPosts_UserID on Posts (userID); create index idxPosts_ThreadID on Posts (threadID); -- create index idxPosts_Time on Posts (postTime, id); create table Tags ( Tag text primary key, Importance integer not null default 0, Description text ); /* Relation tables */ create table ThreadTags ( ThreadID integer references Threads(id) on delete cascade, Tag text references Tags(Tag) on delete cascade on update cascade ); create unique index idxThreadTagsUnique on ThreadTags ( ThreadID, Tag ); create table UnreadPosts ( UserID integer references Users(id) on delete cascade, PostID integer references Posts(id) on delete cascade, Time integer ); create unique index idxUnreadPosts on UnreadPosts(UserID, PostID); create table Attachements ( id integer primary key autoincrement, postID integer references Posts(id) on delete cascade, filename text, notes text, file blob ); create table Sessions ( userID integer references Users(id) on delete cascade, fromIP text, sid text, last_seen integer, ticket text, unique (userID, fromIP) ); create table Messages ( id text primary key, msg text, header text, link text ); insert into Messages VALUES ('login_bad_password','Login incorrect. Only perfect spellers may enter this system.','Incorrect user or password!',NULL); insert into Messages VALUES ('register_passwords_different','Passwords different. Only perfect spellers may register this forum.','Not matching passwords!',NULL); insert into Messages VALUES ('register_short_pass','Short password has been chosen. However, I disagree !','The password is too short!',NULL); insert into Messages VALUES ('login_missing_data','So many fields, you have to fill. Missed some.','Empty field!',NULL); insert into Messages VALUES ('register_user_exists','With this nickname you will never succeed! It is taken.','Not available nickname!',NULL); insert into Messages VALUES ('register_short_name','Short nick is not an advantage, but burden. Get longer.','The nickname too short!',NULL); insert into Messages VALUES ('register_short_email','Queer email, never saw alike before. Don''t like it!','Too short email address!',NULL); insert into Messages VALUES ('register_technical','Foreboding of evil, quick shadow in very cold day. A server is dying.','Server problem!',NULL); insert into Messages VALUES ('user_created','Just step remains, the secret, magic mail you shall receive.','Yes!','<a target="_self" href="/list/">Home</a>'); insert into Messages VALUES ('congratulations','It happened, the journey ended at the door. You''re welcome.','Hooray!','<a target="_self" href="/login/">Come in</a>'); insert into Messages VALUES ('bad_secret','Defeats and wins take turns each other. Now is the first.','Oh, no!','<a target="_self" href="/list/">Home</a>'); insert into Messages VALUES ('login_bad_permissions','You are a sinner, because some man of power have banned you.','Forbidden!',NULL); insert into Messages VALUES ('error_cant_post','You can''t post here, still have no privileges. Or have no longer.','Missing privileges!',NULL); insert into Messages VALUES ('error_cant_create_threads','New thread, new hurricane of passions, but not for you.','Can''t start threads!',NULL); insert into Messages VALUES ('register_bad_email','This email does not looks like real. It shall not pass!','Invalid email address!',NULL); insert into Messages VALUES ('error_post_not_exists','With searching comes loss and the presence of absence: post not exists.','Missing post!',NULL); insert into Messages VALUES ('error_cant_write','Write has failed. I can''t tell you where or why. Lazy programmers.','Unknown error!',NULL); insert into Messages VALUES ('error_thread_not_exists','With searching comes loss and the presence of absence: thread not exists.','Missing thread!',NULL); insert into Messages VALUES ('error_invalid_caption','The title is missing, it''s pointless to post, after all.','Empty title!',NULL); insert into Messages VALUES ('error_invalid_content','Silence is golden. But try to be silent without posting void.','Empty post body!',NULL); insert into Messages VALUES ('register_bot','Attempt to cheat was miserable failure. So, shame on you!','Cheat attempt detected!',NULL); insert into Messages VALUES ('error_bad_ticket','Simple, deep, and still. The old masters were patient. Without desires.','Can''t post right now!',NULL); insert into Messages VALUES ('password_changed','Your worthy password, successfully has been changed. You''r on the safe side.','Pasword changed!','<a target="_self" href="/login/">Login</a>'); insert into Messages VALUES ('change_different','Passwords different. Only perfect spellers may change their password.','Not matching passwords!',NULL); insert into Messages VALUES ('change_password','Your present password, you must provide as evidence of your intentions.','Password does not match!',NULL); insert into Messages VALUES ('email_activation_sent','The secret token was sent to your new email. To check the channel.','Check your mailbox!',NULL); insert into Messages VALUES ('email_changed','The new address to send a messages will never change the old relationship.','E-mail has been changed!','<a target="_self" href="/list/">Home</a>'); insert into Messages VALUES ('error_cant_delete','You can''t delete it, still have no privileges. Or have no longer.','Missing privileges!',NULL); create table FileCache ( filename text primary key, content blob, changed integer ); create table Events ( id integer primary key autoincrement, name text ); insert into Events values (1,'ScriptStart'); insert into Events values (2,'RequestStart'); insert into Events values (3,'RequestEnd'); insert into Events values (4,'Error'); insert into Events values (5,'ScriptEnd'); insert into Events values (6,'ThreadStart'); insert into Events values (7,'ThreadEnd'); insert into Events values (8,'RequestServeStart'); insert into Events values (9,'RequestServeEnd'); create table Log ( process_id integer, -- the unique process id timestamp integer, event integer references events(id) on delete cascade on update cascade, -- what event is logged - start process, end process, start request, end request value text, -- details in variable form. runtime integer ); create table ProcessID ( id integer primary key autoincrement ); create table Templates ( id text primary key, template text ); CREATE VIRTUAL TABLE PostFTS using fts5( `Content`, content=Posts, content_rowid=id, tokenize='porter unicode61 remove_diacritics 1'); CREATE TRIGGER PostsAI AFTER INSERT ON Posts BEGIN INSERT INTO PostFTS(rowid, Content) VALUES (new.id, new.Content); END; CREATE TRIGGER PostsAD AFTER DELETE ON Posts BEGIN INSERT INTO PostFTS(PostFTS, rowid, Content) VALUES('delete', old.id, old.Content); END; CREATE TRIGGER PostsAU AFTER UPDATE ON Posts BEGIN INSERT INTO PostFTS(PostFTS, rowid, Content) VALUES('delete', old.id, old.Content); INSERT INTO PostFTS(rowid, Content) VALUES (new.id, new.Content); END; COMMIT; |
Added freshlib/test_code0/TestTV.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestTVmain.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 0 options.DebugMode.NoTimers = 0 options.DebugMode.XSync = 0 options.DebugMode.XErrors =0 options.ShowSizes = 1 options.SkipZeroSizes = 1 ThemeGUI equ flat_gui ;ThemeGUI equ win_gui include "%lib%/freshlib.asm" iglobal TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 100, \ y = 50, \ width = 418, \ height = 250, \ OnCreate = FormOnCreate, \ OnClose = MainFormOnClose, \ OnDestroy = FormOnDestroy, \ SplitGrid = SplitTest, \ Caption = 'The new GUI toolkit test form.' ObjTemplate tfChild, TEdit, editDir, \ Text = "/home", \ MarginLeft= 2, \ MarginRight= 2, \ OnCreate = EditOnCreate, \ SplitCell = SplitTest.cellEdit, \ Visible = TRUE ObjTemplate tfChild, TButton, btnArrowRight, \ Icon = imgArrowRight, \ IconPosition = iposCenter, \ SplitCell = SplitTest.cellButton, \ OnClick = ReadFolderClick, \ Visible = TRUE ObjTemplate tfChild or tfEnd, TTreeView, tvFolders, \ SplitCell = SplitTest.cellTree, \ Visible = TRUE SplitStart SplitTest Split stVert or stJustGap , 4, 24, 16, 48 Split stHoriz or stOriginBR or stJustGap, 4, 64, 48, 200 Cell cellEdit Cell cellButton Cell cellTree SplitEnd if ThemeGUI eq win_gui getfile imgArrowRight, '_test_images/right2.png' getfile imgFolder, "_test_images/folder2.png" getfile imgFile, "_test_images/document2.png" end if if ThemeGUI eq flat_gui getfile imgArrowRight, '_test_images/right.png' getfile imgFolder, "_test_images/folder.png" getfile imgFile, "_test_images/document.png" end if endg uglobal iconFolder dd ? iconFile dd ? endg ;rb 423 start: InitializeAll create [pApplication], TApplication stdcall GUI.Init stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE ; must be set visible after creation, because it loads ; needed images in OnCreate event handler. stdcall Run FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnCreate as TObject.OnCreate begin DebugMsg "Form OnCreate event handler." ; stdcall CreateImagePNG, imgArrowRight, imgArrowRight.size ; mov [iconArrowRight], eax stdcall CreateImagePNG, imgFolder, imgFolder.size mov [iconFolder], eax stdcall CreateImagePNG, imgFile, imgFile.size mov [iconFile], eax return endp proc EditOnCreate as TObject.OnCreate begin if TargetOS eq Win32 set [editDir], TEdit:Text, txt "c:\" else set [editDir], TEdit:Text, txt "/home" end if return endp proc FormOnDestroy as TObject.OnDestroy begin DebugMsg "MainForm destroy event handler." return endp proc MainFormOnClose as TForm.OnClose begin DebugMsg "Main form OnClose event handler" clc return endp proc ReadFolderClick as TButton.OnClick begin pushad get edi, [frmMain], TWindow:Cursor stdcall GetStockCursor, mcWait push eax mov eax, [frmMain] stdcall SetMouseCursor, [eax+TWindow.handle] mov esi, [tvFolders] get ebx, [editDir], TEdit:Text stdcall ___DoReadDir, ebx, 0, tvisExpanded jc .error set esi, TTreeView:root, eax .finish: stdcall StrDel, ebx set [frmMain], TWindow:Cursor, edi mov eax, [frmMain] stdcall SetMouseCursor, [eax+TWindow.handle], edi popad return .error: stdcall GetErrorString, eax push eax stdcall ShowMessage, [frmMain], smiError, "File error", eax, smbOK stdcall FreeErrorString ; from the stack jmp .finish endp ; Returns the first TItemTree element proc ___DoReadDir, .hDir, .pParent, .fExpand .first dd ? begin pushad xor eax, eax mov [.first], eax stdcall DirectoryRead, [.hDir] jc .finish mov esi, eax stdcall SortArray, esi, DirItemCompare, dsByExt or fdsDirsFirst xor ecx, ecx xor ebx, ebx .loop: cmp ecx, [esi+TArray.count] jae .end_loop lea edi, [3*ecx] stdcall StrPtr, [esi+TArray.array + 8*edi + TDirItem.hFilename] cmp byte [eax], "." je .next stdcall GetMem, sizeof.TTVItem mov [eax + TTVItem.prev], ebx test ebx, ebx jnz .not_first mov [.first], eax stdcall TreeAppendChild, eax, [.pParent] jmp .cont .not_first: stdcall TreeInsAfter, eax, ebx .cont: mov ebx, eax push [esi+TArray.array + 8*edi + TDirItem.hFilename] [.fExpand] pop [ebx+TTVItem.state] [ebx+TTVItem.caption] mov edx, [iconFolder] cmp [esi+TArray.array + 8*edi + TDirItem.Type], ftDirectory je @f mov edx, [iconFile] cmp [esi+TArray.array + 8*edi + TDirItem.Type], ftFile je @f xor edx, edx @@: mov [ebx+TTVItem.imgNormal], edx cmp [esi+TArray.array + 8*edi + TDirItem.Type], ftDirectory jne .next stdcall StrDup, [.hDir] push eax stdcall StrCharCat, eax, "/" stdcall StrCat, eax, [esi+TArray.array + 8*edi + TDirItem.hFilename] stdcall ___DoReadDir, eax, ebx, [.fExpand] stdcall StrDel ; from the stack .next: inc ecx jmp .loop .end_loop: stdcall FreeMem, esi clc mov eax, [.first] .finish: mov [esp+regEAX*4], eax popad return endp |
Added freshlib/test_code0/TestText.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 0 options.ShowSizes = 1 options.SkipZeroSizes = 1 options.DebugMode.XSync = 0 options.DebugMode.XErrors =0 include "%lib%/freshlib.asm" iglobal TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 100, \ y = 50, \ width = 1024, \ height = 600, \ Visible = FALSE, \ OnDestroy = FormOnDestroy, \ Caption = 'Fresh portable Win32/Linux application test.' ObjTemplate tfChild, TButton, btnChild1, \ x = 48, \ y = 48, \ width = 80, \ height = 48, \ TextAlign = dtfAlignLeft or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Button BRAVO', \ Visible = TRUE, \ OnClick = Button1Click ObjTemplate tfChild or tfEnd, TButton, btnChild2, \ x = 48, \ y = 100, \ width = 80, \ height = 48, \ TextAlign = dtfAlignLeft or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Button 2', \ Visible = TRUE, \ OnClick = Button2Click endg rb 423 start: InitializeAll call GUI.Init create [pApplication], TApplication stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TForm:Visible, TRUE stdcall Run FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnDestroy, .self begin DebugMsg "MainForm destroy event handler." return endp proc Button1Click as TButton.OnClick begin pushad DebugMsg 'Button1 clicked' popad return endp proc Button2Click as TButton.OnClick .font dd ? .width dd ? .height dd ? .y dd ? .start dd ? begin pushad ; DebugMsg 'Button2 clicked' ; ; stdcall FontCreate, 'Ubuntu', 16, 900, ffUnderline ; mov [.font], eax ; ; stdcall CreateImage, 1024, 600 ; mov esi, eax ; ; mov edi, [frmMain] ; stdcall AllocateContext, [edi+TWindow.handle] ; mov edi, eax ; ; stdcall DrawSolidRect, esi, 0, 0, 1024, 600, $ffd0d0d8 ; stdcall DrawSolidRect, esi, 320, 0, 320, 480, $ff0000ff ; ; stdcall GetFontMetrics, [.font] ; mov [.height], eax ; ; ; stdcall GetTimestamp ; mov [.start], eax ; ; mov edx, 7 ; mov ecx, -100 ; ; mov ecx, 1000 ; mov [.y], 5 ; ;.loop: ;; 85 characters text ;; stdcall DrawString2, esi, 'uon ravo s s smpe ex, spaye y reeype rary usng reeype cace.', -1, 150, [.y], [.font], $ff000000 ; stdcall DrawString2, esi, 'Button BRAVO This is simple text, displayed by FreeType library using FreeType cache.', -1, 150, [.y], [.font], $ff000000 ; ; mov [.width], eax ; ; mov edx, ebx ; add ebx, [.y] ; neg edx ;; stdcall DrawSolidRect, esi, 150, ebx, eax, 1, $ffff0000 ;; stdcall DrawSolidRect, esi, 150, [.y], eax, 1, $ffff0000 ; ;; stdcall GetTextBounds2, 'Button BRAVO This is simple text, displayed by FreeType library using FreeType cache.', -1, [.font] ; ; mov eax, [.height] ; add [.y], eax ; ; dec ecx ; jnz .loop ; ; stdcall GetTimestamp ; sub eax, [.start] ; ; stdcall NumToStr, eax, ntsUnsigned or ntsDec ; push eax ; ; stdcall StrPtr, eax ; stdcall DrawString2, esi, eax, -1, 40, 500, [.font], $ff000000 ; stdcall StrDel ; from the stack ; ; stdcall NumToStr, [.width], ntsDec or ntsSigned ; push eax ; ; stdcall StrPtr, eax ; stdcall DrawString2, esi, eax, -1, 40, 520, [.font], $ff000000 ; stdcall StrDel ; from the stack ; ; ; stdcall NumToStr, [.height], ntsDec or ntsUnsigned ; push eax ; ; stdcall StrPtr, eax ; stdcall DrawString2, esi, eax, -1, 40, 540, [.font], $ff000000 ; stdcall StrDel ; from the stack ; ; ; ; ; stdcall DrawImage, edi, esi, 0, 0 ; ; stdcall FontDestroy2, [.font] ; popad return endp |
Added freshlib/test_code0/TestText.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestThemes.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 1 options.DebugMode.NoTimers = 1 options.DebugMode.XSync = 0 options.DebugMode.XErrors =0 options.ShowSizes = 1 options.SkipZeroSizes = 0 options.WholeTheme = 1 ThemeGUI equ flat_gui include "%lib%/freshlib.asm" iglobal TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 100, \ y = 50, \ width = 320, \ height = 520, \ OnCreate = FormOnCreate, \ OnClose = MainFormOnClose, \ OnDestroy = FormOnDestroy, \ Caption = 'The new GUI toolkit test form.' ObjTemplate tfChild, TLabel, NONE, \ x = 10, y = 10, width=400, height = 19, \ Caption = "Load theme from file:", \ Visible = TRUE ObjTemplate tfChild, TButton, btnTheme1, \ x = 10, \ y = 32, \ width = 128, \ height = 24, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = "Theme Win", \ Visible = TRUE, \ OnClick = LoadTheme1Click ObjTemplate tfChild, TButton, btnTheme2, \ x = 140, \ y = 32, \ width = 128, \ height = 24, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = "Theme Flat", \ Visible = TRUE, \ OnClick = LoadTheme2Click ObjTemplate tfChild, TLabel, NONE, \ x = 10, y = 393, width=400, height = 19, \ Caption = "Load/Save custom theme:", \ Visible = TRUE ObjTemplate tfChild, TEdit, editTest, \ Text = "Theme.cfg", \ x = 10, y=415, width=168, height=24, \ MarginLeft= 2, \ MarginRight= 2, \ Visible = TRUE ObjTemplate tfChild, TButton, btnThemeSave, \ x = 180, y = 415, width = 64, height = 24, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Save', \ Visible = TRUE, \ OnClick = SaveThemeClick ObjTemplate tfChild, TButton, btnThemeLoad, \ x = 246, y = 415, width = 64, height = 24, \ TextAlign = dtfAlignCenter or dtfAlignMiddle or dtfCRLF or dtfWordWrap,\ Caption = 'Load', \ Visible = TRUE, \ OnClick = LoadThemeClick ObjTemplate tfChild, TProgress, NONE, \ x = 10, y = 490, width = 300, height = 19, \ Max = 100, Pos = 30, \ Visible = TRUE ObjTemplate tfChild or tfEnd, TTreeView, tvPreview, \ x = 10, y = 64, width = 300, height = 300, \ OnCreate = TreeOnCreate, \ Visible = TRUE getfile imgFolder1, "_test_images/folder2.png" getfile imgFile1, "_test_images/document2.png" getfile imgFolder2, "_test_images/folder.png" getfile imgFile2, "_test_images/document.png" endg uglobal iconFolder dd ? iconFile dd ? endg ;rb 423 start: InitializeAll create [pApplication], TApplication call GUI.Init stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain set [frmMain], TWindow:Visible, TRUE ; must be set visible after creation, because it loads ; needed images in OnCreate event handler. stdcall Run FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnCreate as TObject.OnCreate begin DebugMsg "Form OnCreate event handler." if ThemeGUI eq win_gui stdcall CreateIconSet1 else stdcall CreateIconSet2 end if return endp proc FreeIconSet begin xor ecx, ecx cmp [iconFolder], ecx je @f stdcall DestroyImage, [iconFolder] mov [iconFolder], ecx @@: cmp [iconFile], ecx je @f stdcall DestroyImage, [iconFile] mov [iconFile], ecx @@: return endp proc CreateIconSet1 begin stdcall FreeIconSet stdcall CreateImagePNG, imgFolder1, imgFolder1.size mov [iconFolder], eax stdcall CreateImagePNG, imgFile1, imgFile1.size mov [iconFile], eax return endp proc CreateIconSet2 begin stdcall FreeIconSet stdcall CreateImagePNG, imgFolder2, imgFolder2.size mov [iconFolder], eax stdcall CreateImagePNG, imgFile2, imgFile2.size mov [iconFile], eax return endp proc TreeOnCreate as TObject.OnCreate begin stdcall LoadExampleTreeContent, [.self] return endp proc FormOnDestroy as TObject.OnDestroy begin DebugMsg "MainForm destroy event handler." return endp proc MainFormOnClose as TForm.OnClose begin DebugMsg "Main form OnClose event handler" clc return endp proc LoadTheme1Click as TButton.OnClick begin pushad stdcall LoadBinaryFile, "./theme_win.cfg" jc .finish push eax stdcall StringToNamedArray, GUI.meta, eax stdcall FreeMem ; from the stack. stdcall CreateIconSet1 stdcall LoadExampleTreeContent, [tvPreview] exec [frmMain], TWindow:ForceRefresh .finish: popad return endp proc LoadTheme2Click as TButton.OnClick begin pushad stdcall LoadBinaryFile, "./theme_flat.cfg" jc .finish push eax stdcall StringToNamedArray, GUI.meta, eax stdcall FreeMem ; from the stack. stdcall CreateIconSet2 stdcall LoadExampleTreeContent, [tvPreview] exec [frmMain], TWindow:ForceRefresh .finish: popad return endp proc SaveThemeClick as TButton.OnClick begin pushad get ebx, [editTest], TEdit:Text stdcall NamedArrayToString, GUI.meta mov edi, eax stdcall StrPtr, eax mov esi, eax stdcall StrPtr, ebx stdcall SaveBinaryFile, eax, esi, [esi+string.len] stdcall StrDel, ebx stdcall StrDel, edi popad return endp proc LoadThemeClick as TButton.OnClick begin pushad get ebx, [editTest], TEdit:Text stdcall LoadBinaryFile, ebx jc .finish push eax stdcall StringToNamedArray, GUI.meta, eax stdcall FreeMem ; from the stack. exec [frmMain], TWindow:ForceRefresh .finish: stdcall StrDel, ebx popad return endp proc LoadExampleTreeContent, .pTreeView begin pushad mov esi, [.pTreeView] stdcall ___DoReadDir, txt ".", 0, tvisExpanded jc .error set esi, TTreeView:root, eax popad return .error: stdcall GetErrorString, eax push eax stdcall ShowMessage, [frmMain], smiError, "File error", eax, smbOK stdcall FreeErrorString ; from the stack popad return endp ; Returns the first TItemTree element proc ___DoReadDir, .hDir, .pParent, .fExpand .first dd ? begin pushad xor eax, eax mov [.first], eax stdcall DirectoryRead, [.hDir] jc .finish mov esi, eax stdcall SortArray, esi, DirItemCompare, dsByExt or fdsDirsFirst xor ecx, ecx xor ebx, ebx .loop: cmp ecx, [esi+TArray.count] jae .end_loop lea edi, [3*ecx] stdcall StrPtr, [esi+TArray.array + 8*edi + TDirItem.hFilename] cmp byte [eax], "." je .next stdcall GetMem, sizeof.TTVItem mov [eax + TTVItem.prev], ebx test ebx, ebx jnz .not_first mov [.first], eax stdcall TreeAppendChild, eax, [.pParent] jmp .cont .not_first: stdcall TreeInsAfter, eax, ebx .cont: mov ebx, eax push [esi+TArray.array + 8*edi + TDirItem.hFilename] [.fExpand] pop [ebx+TTVItem.state] [ebx+TTVItem.caption] mov edx, [iconFolder] cmp [esi+TArray.array + 8*edi + TDirItem.Type], ftDirectory je @f mov edx, [iconFile] cmp [esi+TArray.array + 8*edi + TDirItem.Type], ftFile je @f xor edx, edx @@: mov [ebx+TTVItem.imgNormal], edx cmp [esi+TArray.array + 8*edi + TDirItem.Type], ftDirectory jne .next stdcall StrDup, [.hDir] push eax stdcall StrCharCat, eax, "/" stdcall StrCat, eax, [esi+TArray.array + 8*edi + TDirItem.hFilename] stdcall ___DoReadDir, eax, ebx, [.fExpand] stdcall StrDel ; from the stack .next: inc ecx jmp .loop .end_loop: stdcall FreeMem, esi clc mov eax, [.first] .finish: mov [esp+regEAX*4], eax popad return endp |
Added freshlib/test_code0/TestThemes.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/TestTreeView.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license." | ;|_______________________________________________________________________________________| ; ; Description: TTreeView test application. ; ; Target OS: All/Linux/Win32 - depending on current test needs. ; ; Dependencies: ; ; Notes: The main test program calls "PrepareDemo" procedure. ;_________________________________________________________________________________________ __TestGround: iglobal __TestData: ; This is a form template. ; It will be created by the visual editor. ; This template engine can contains any count of properties for every ; component of the template. Also it can contains non visual components ; such as action lists, image lists, etc. TemplateMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ x = 100, \ y = 50, \ width = 656, \ height = 496, \ Visible = TRUE, \ OnDestroy = FormOnDestroy, \ Caption = 'Fresh portable Win32/Linux application test.' ObjTemplate tfChild or tfEnd, TTreeView, TreeView, \ x = 0, y = 0, width = 500, height = 400, \ Visible = TRUE __TestDataSize = $ - __TestData endg ; Sample event handlers. They work with other objects on the form. proc FormOnDestroy, .self begin DebugMsg "MainForm destroy event handler." return endp proc PrepareDemo begin stdcall CreateFromTemplate, TemplateMainForm, 0 set [pApplication], TApplication:MainWindow, frmMain return endp DispSize 'Test ground dummy code:', ($-__TestGround)+__TestDataSize |
Added freshlib/test_code0/ThemesConfigBuild.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" @BinaryType GUI, compact options.DebugMode = 0 options.DebugMode.NoTimers = 1 options.DebugMode.XSync = 0 options.DebugMode.XErrors =0 options.ShowSizes = 1 options.SkipZeroSizes = 0 options.WholeTheme = 1 ThemeGUI equ include "%lib%/freshlib.asm" GUI fix ThemeFlat include "%lib%/gui/themes/flat_gui.asm" GUI fix ThemeWin include "%lib%/gui/themes/win_gui.asm" ;rb 423 start: InitializeAll create [pApplication], TApplication, 0 call ThemeFlat.Init call ThemeWin.Init ; Save flat theme stdcall NamedArrayToString, ThemeFlat.meta push eax stdcall StrPtr, eax mov esi, eax stdcall SaveBinaryFile, "theme_flat.cfg", esi, [esi+string.len] stdcall StrDel ; from the stack ; Save win theme stdcall NamedArrayToString, ThemeWin.meta push eax stdcall StrPtr, eax mov esi, eax stdcall SaveBinaryFile, "theme_win.cfg", esi, [esi+string.len] stdcall StrDel ; from the stack destroy [pApplication] FinalizeAll stdcall TerminateAll, 0 ; Sample event handlers. They work with other objects on the form. proc FormOnCreate as TObject.OnCreate begin DebugMsg "Form OnCreate event handler." if ThemeGUI eq win_gui stdcall CreateIconSet1 else stdcall CreateIconSet2 end if return endp proc FreeIconSet begin xor ecx, ecx cmp [iconFolder], ecx je @f stdcall DestroyImage, [iconFolder] mov [iconFolder], ecx @@: cmp [iconFile], ecx je @f stdcall DestroyImage, [iconFile] mov [iconFile], ecx @@: return endp proc CreateIconSet1 begin stdcall FreeIconSet stdcall CreateImagePNG, imgFolder1, imgFolder1.size mov [iconFolder], eax stdcall CreateImagePNG, imgFile1, imgFile1.size mov [iconFile], eax return endp proc CreateIconSet2 begin stdcall FreeIconSet stdcall CreateImagePNG, imgFolder2, imgFolder2.size mov [iconFolder], eax stdcall CreateImagePNG, imgFile2, imgFile2.size mov [iconFile], eax return endp proc TreeOnCreate as TObject.OnCreate begin stdcall LoadExampleTreeContent, [.self] return endp proc FormOnDestroy as TObject.OnDestroy begin DebugMsg "MainForm destroy event handler." return endp proc MainFormOnClose as TForm.OnClose begin DebugMsg "Main form OnClose event handler" clc return endp proc LoadTheme1Click as TButton.OnClick begin pushad stdcall LoadBinaryFile, "./theme_win.cfg" jc .finish push eax stdcall StringToNamedArray, GUI.meta, eax stdcall FreeMem ; from the stack. stdcall CreateIconSet1 stdcall LoadExampleTreeContent, [tvPreview] exec [frmMain], TWindow:RefreshAll .finish: popad return endp proc LoadTheme2Click as TButton.OnClick begin pushad stdcall LoadBinaryFile, "./theme_flat.cfg" jc .finish push eax stdcall StringToNamedArray, GUI.meta, eax stdcall FreeMem ; from the stack. stdcall CreateIconSet2 stdcall LoadExampleTreeContent, [tvPreview] exec [frmMain], TWindow:RefreshAll .finish: popad return endp proc SaveThemeClick as TButton.OnClick begin pushad get ebx, [editTest], TEdit:Text stdcall NamedArrayToString, GUI.meta mov edi, eax stdcall StrPtr, eax mov esi, eax stdcall StrPtr, ebx stdcall SaveBinaryFile, eax, esi, [esi+string.len] stdcall StrDel, ebx stdcall StrDel, edi popad return endp proc LoadThemeClick as TButton.OnClick begin pushad get ebx, [editTest], TEdit:Text stdcall LoadBinaryFile, ebx jc .finish push eax stdcall StringToNamedArray, GUI.meta, eax stdcall FreeMem ; from the stack. exec [frmMain], TWindow:RefreshAll .finish: stdcall StrDel, ebx popad return endp proc LoadExampleTreeContent, .pTreeView begin pushad mov esi, [.pTreeView] mov edx, [esi+TTreeView._items] stdcall DeleteArrayItems, edx, 0, [edx+TArray.count] stdcall ___DoReadDir, txt ".", edx, -1 mov [esi+TTreeView._items], edx jc .error .finish: OutputValue "Files tree items:", [edx+TArray.count], 10, 8 exec [.pTreeView], TTreeView:__RebuildIndex exec [.pTreeView], TWindow:Refresh set [frmMain], TWindow:Cursor, edi popad return .error: stdcall GetErrorString, eax push eax stdcall ShowMessage, [frmMain], smiError, "File error", eax, smbOK stdcall FreeErrorString ; from the stack jmp .finish endp proc ___DoReadDir, .hDir, .pArray, .Level begin pushad mov edx, [.pArray] mov ebx, [.Level] inc ebx stdcall DirectoryRead, [.hDir] jc .finish mov esi, eax xor ecx, ecx stdcall SortDirArray, esi, fdsByType .loop: cmp ecx, [esi+TArray.count] jae .end_loop stdcall StrPtr, [esi+TArray.array + 8*ecx + TDirItem.hFilename] cmp byte [eax], "." je .next ; Output eax ; DebugMsg "" stdcall AddArrayItems, edx, 1 push [esi+TArray.array + 8*ecx + TDirItem.hFilename] ; name pop [eax+TTreeViewItem.caption] mov [eax+TTreeViewItem.level], ebx mov [eax+TTreeViewItem.state], tvisExpanded push edx mov edx, [iconFolder] cmp [esi+TArray.array + 8*ecx + TDirItem.Type], ftDirectory je @f mov edx, [iconFile] cmp [esi+TArray.array + 8*ecx + TDirItem.Type], ftFile je @f xor edx, edx @@: mov [eax+TTreeViewItem.imgNormal], edx pop edx cmp [esi+TArray.array + 8*ecx + TDirItem.Type], ftDirectory jne .next stdcall StrDup, [.hDir] push eax stdcall StrCharCat, eax, "/" stdcall StrCat, eax, [esi+TArray.array + 8*ecx + TDirItem.hFilename] stdcall ___DoReadDir, eax, edx, ebx stdcall StrDel ; from the stack .next: inc ecx jmp .loop .end_loop: stdcall FreeMem, esi clc xor eax, eax .finish: mov [esp+regEAX*4], eax mov [esp+regEDX*4], edx popad return endp |
Added freshlib/test_code0/ThemesConfigBuild.fpr.
cannot compute difference between binary files
Added freshlib/test_code0/UTF8_examples.asm.
> > > > > | 1 2 3 4 5 | utf8_string db $49, $C3, $B1, $74, $C3, $AB, $72, $6E, $C3, $A2, $74, $69, $C3, $B4, $6E, $C3, $A0, $6C, $69, $7A, $C3, $A6, $74, $69, $C3, $B8, $6E, $00 ; the word "Internationalization" written with different languages chars ; greek, cyrillic and latin in one text. utf8_long file 'UnicodeSample.txt' dd 0 |
Added freshlib/test_code0/UnicodeSample.txt.
> > > > > > > > | 1 2 3 4 5 6 7 8 | Russian: Я могу еÑÑ‚ÑŒ Ñтекло, оно мне не вредит. Yoruba: Mo lè jeÌ© dÃgÃ, kò nà pa mà lára. Chinese: 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。 Greek: ΜποÏÏŽ να φάω σπασμÎνα γυαλιά χωÏίς να πάθω τίποτα. Québécois: J'peux manger d'la vitre, ça m'fa pas mal. Ukrainian: Я можу Ñ—Ñти Ñкло, Ñ– воно мені не зашкодить. Това е един много дълъг параграф, в който Ñе говори за това, че мога да конÑумирам неорганични Ñиликатни аморфни материали без вреда за здравето или материалното ми положение. |
Added freshlib/test_code0/UnicodeSampleEng.txt.
> | 1 | The main goal of Fresh is to make programming in assembly as fast and efficient as in other visual languages, without sacrificing the small application size and the raw power of assembly language. Because Fresh is the logical continuation of the FASM project in the area of visual programming, it is perfectly compatible with FASM and you can use all your knowledge about FASM to program in Fresh. |
Added freshlib/test_code0/_test_images/allpng/0_1.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/0_16.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/0_2.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/0_4.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/0_8.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/2_16.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/2_8.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/3_1.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/3_1a.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/3_2.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/3_2a.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/3_4.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/3_4a.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/3_8.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/3_8a.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/4_16.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/4_8.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/6_16.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/6_8.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/back2.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/png5.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/png6.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/allpng/png7.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/background.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/ball.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/document.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/document2.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/folder.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/folder2.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/globe.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/img_list.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/left.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/menu.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/right.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/right2.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/speech.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/star.png.
cannot compute difference between binary files
Added freshlib/test_code0/_test_images/svg/Red_sphere.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="128" height="128" id="svg2" sodipodi:docname="Red_sphere.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibDev/freshlib/test_code0/_test_images/ball.png" inkscape:export-xdpi="18" inkscape:export-ydpi="18" inkscape:version="0.92.0 r"> <metadata id="metadata23"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> </cc:Work> </rdf:RDF> </metadata> <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview21" showgrid="false" inkscape:current-layer="svg2" /> <defs id="defs5"> <linearGradient id="linearGradient2816"> <stop style="stop-color:#a20000;stop-opacity:1" offset="0" id="stop2818" /> <stop style="stop-color:white;stop-opacity:1" offset="1" id="stop2820" /> </linearGradient> <linearGradient id="linearGradient2794"> <stop style="stop-color:#545454;stop-opacity:1" offset="0" id="stop2796" /> <stop style="stop-color:#545454;stop-opacity:1" offset="0.9464286" id="stop2804" /> <stop style="stop-color:#c5c5c5;stop-opacity:0" offset="1" id="stop2798" /> </linearGradient> <linearGradient id="linearGradient2760"> <stop style="stop-color:red;stop-opacity:1" offset="0" id="stop2762" /> <stop style="stop-color:#a20000;stop-opacity:1" offset="0.61160713" id="stop2768" /> <stop style="stop-color:#f66;stop-opacity:1" offset="1" id="stop2764" /> </linearGradient> <linearGradient x1="6.9292336" y1="121.07077" x2="6.9292336" y2="8.9609833" id="linearGradient2766" xlink:href="#linearGradient2760" gradientUnits="userSpaceOnUse" /> <radialGradient cx="62.984127" cy="65.015877" r="54.179893" fx="62.984127" fy="65.015877" id="radialGradient2812" xlink:href="#linearGradient2794" gradientUnits="userSpaceOnUse" /> <linearGradient x1="31.5" y1="63" x2="31.5" y2="12" id="linearGradient2822" xlink:href="#linearGradient2816" gradientUnits="userSpaceOnUse" /> </defs> <path d="M 117.16402 65.015877 A 54.179893 54.179893 0 1 1 8.8042336,65.015877 A 54.179893 54.179893 0 1 1 117.16402 65.015877 z" transform="translate(5.724864,4.031744)" style="opacity:1;fill:url(#radialGradient2812);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.75;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path2790" /> <path d="M 117.16402 65.015877 A 54.179893 54.179893 0 1 1 8.8042336,65.015877 A 54.179893 54.179893 0 1 1 117.16402 65.015877 z" transform="translate(1.69312,0)" style="opacity:1;fill:url(#linearGradient2766);fill-opacity:1;fill-rule:nonzero;stroke:#740000;stroke-width:3.75;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path1873" /> <path d="M 95.5 37.5 A 32 25.5 0 1 1 31.5,37.5 A 32 25.5 0 1 1 95.5 37.5 z" transform="translate(1,2)" style="opacity:1;fill:url(#linearGradient2822);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.75;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path2814" /> </svg> |
Added freshlib/test_code0/_test_images/svg/background.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="528" height="352" viewBox="0 0 139.7 93.133336" version="1.1" id="svg8" inkscape:version="0.92.2 5c3e80d, 2017-08-06" sodipodi:docname="background.svg" inkscape:export-filename="/work/asmwork/FreshFs/NoCanvasGUI/freshlib/test_code0/_test_images/background2.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <defs id="defs2" /> <sodipodi:namedview id="base" pagecolor="#000000" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="1" inkscape:pageshadow="2" inkscape:zoom="0.35" inkscape:cx="400" inkscape:cy="560" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" units="px" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" /> <metadata id="metadata5"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title></dc:title> </cc:Work> </rdf:RDF> </metadata> <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-203.86665)"> <g id="g4710" inkscape:tile-cx="5.8208332" inkscape:tile-cy="84.13749" inkscape:tile-w="11.641666" inkscape:tile-h="11.641666" inkscape:tile-x0="0" inkscape:tile-y0="78.316657" transform="translate(0,-81.491655)" style="fill:#b55832;fill-opacity:1"> <rect ry="1.0583333" rx="1.0583333" y="285.88748" x="0.52916664" height="10.583333" width="10.583333" id="rect3699" style="opacity:1;vector-effect:none;fill:#b55832;fill-opacity:1;stroke:none;stroke-width:0.26458332" /> </g> <g transform="translate(0,-69.849989)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4714" style="fill:#db993a;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#db993a;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect4965" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(0,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4716" style="fill:#d4dd5e;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#d4dd5e;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect4969" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(0,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4718" style="fill:#b15c38;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b15c38;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect4973" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(0,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4720" style="fill:#cbba6c;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#cbba6c;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect4977" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(0,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4722" style="fill:#db5831;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#db5831;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect4981" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(0,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4724" style="fill:#de5426;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#de5426;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect4985" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(0,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4726" style="fill:#c48529;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#c48529;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect4989" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(11.641666,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4728" style="fill:#dc532f;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#dc532f;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect4993" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="matrix(1,0,0,2.1000001,11.641666,-384.32632)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4730" style="fill:#a9e6e7;fill-opacity:1;stroke-width:0.69006556"> <rect style="opacity:1;vector-effect:none;fill:#a9e6e7;fill-opacity:1;stroke:none;stroke-width:0.18257982" id="rect4997" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="0.50396818" /> </g> <g transform="translate(11.641666,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4734" style="fill:#bac3a2;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#bac3a2;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5005" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(11.641666,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4736" style="fill:#b95f36;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b95f36;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5009" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(11.641666,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4738" style="fill:#d99838;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#d99838;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5013" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(11.641666,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4740" style="fill:#64321c;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#64321c;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5017" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(11.641666,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4742" style="fill:#8f5b47;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#8f5b47;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5021" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(23.283333,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4744" style="fill:#f2eaad;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#f2eaad;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5025" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(23.283333,-69.849989)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4746" style="fill:#858054;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#858054;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5029" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(23.283333,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4748" style="fill:#62311b;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#62311b;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5033" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(23.283333,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4750" style="fill:#f2eaad;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#f2eaad;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5037" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(23.283333,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4752" style="fill:#b44730;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b44730;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5041" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(23.283333,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4754" style="fill:#d9ad2f;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#d9ad2f;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5045" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="matrix(2.1000001,0,0,1,22.70125,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4756" style="stroke-width:0.69006556;fill:#a9e6e7;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#a9e6e7;fill-opacity:1;stroke:none;stroke-width:0.18257983" id="rect5049" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="0.50396824" ry="1.0583333" /> </g> <g transform="translate(23.283333,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4758" style="fill:#e0b137;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#e0b137;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5053" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(34.924999,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4760" style="fill:#b8b34f;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b8b34f;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5057" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(34.924999,-69.849989)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4762" style="fill:#e5d274;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#e5d274;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5061" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(34.924999,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4764" style="fill:#dc5123;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#dc5123;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5065" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(34.925,-23.283331)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4766" style="fill:#e7d578;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#e7d578;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5069" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="matrix(1,0,0,2.1000001,34.924999,-361.04292)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4770" style="fill:#683725;fill-opacity:1;stroke-width:0.69006556"> <rect style="opacity:1;vector-effect:none;fill:#683725;fill-opacity:1;stroke:none;stroke-width:0.18257983" id="rect5077" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="0.50396824" /> </g> <g transform="translate(34.924999,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4774" style="fill:#926636;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#926636;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5085" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(46.566666,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4776" style="fill:#ae3e29;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#ae3e29;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5089" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(46.566666,-69.849989)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4778" style="fill:#d9ac2f;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#d9ac2f;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5093" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(46.566666,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4780" style="fill:#c17e26;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#c17e26;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5097" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(46.566666,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4782" style="fill:#9c5d31;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#9c5d31;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5101" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(46.566666,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4784" style="fill:#66563c;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#66563c;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5105" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(46.566666,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4786" style="fill:#797548;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#797548;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5109" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(46.566666,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4788" style="fill:#b7b34f;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b7b34f;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5113" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(46.566666,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4790" style="fill:#974b33;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#974b33;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5117" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(58.208332,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4792" style="fill:#b95d34;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b95d34;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5121" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(58.208332,-69.849989)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4794" style="fill:#da9738;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#da9738;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5125" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(58.208332,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4796" style="fill:#868473;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#868473;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5129" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(58.208332,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4798" style="fill:#7d6d50;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#7d6d50;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5133" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(58.208332,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4800" style="fill:#c7b566;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#c7b566;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5137" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(58.208332,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4802" style="fill:#da512d;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#da512d;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5141" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(58.208332,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4804" style="fill:#9f9050;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#9f9050;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5145" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(58.208332,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4806" style="fill:#af6d25;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#af6d25;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5149" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(69.849998,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4808" style="fill:#bcc1a3;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#bcc1a3;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5153" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(69.849998,-69.849989)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4810" style="fill:#db552f;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#db552f;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5157" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(69.849998,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4812" style="fill:#b29f5c;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b29f5c;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5161" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(69.849998,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4814" style="fill:#b6752d;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b6752d;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5165" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(69.849998,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4816" style="fill:#b55b34;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b55b34;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5169" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(69.849998,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4818" style="fill:#d88e30;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#d88e30;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5173" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(69.849998,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4820" style="fill:#7d7d6d;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#7d7d6d;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5177" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(69.849998,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4822" style="fill:#726243;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#726243;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5181" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="matrix(1,0,0,2.1000001,81.491665,-395.9679)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4826" style="stroke-width:0.69006556;fill:#edd18f;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#edd18f;fill-opacity:1;stroke:none;stroke-width:0.18257983" id="rect5189" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="0.50396824" /> </g> <g transform="translate(81.491665,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4828" style="fill:#b7b34f;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b7b34f;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5193" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="matrix(2.1000001,0,0,1,80.909582,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4830" style="fill:#974b33;fill-opacity:1;stroke-width:0.69006556"> <rect style="opacity:1;vector-effect:none;fill:#974b33;fill-opacity:1;stroke:none;stroke-width:0.18257983" id="rect5197" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="0.50396824" ry="1.0583333" /> </g> <g transform="translate(81.491665,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4832" style="fill:#af402b;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#af402b;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5201" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(81.491665,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4834" style="fill:#d9ac2f;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#d9ac2f;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5205" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(81.491665,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4836" style="fill:#c38128;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#c38128;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5209" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(81.491665,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4838" style="fill:#9a592e;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#9a592e;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5213" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(93.133331,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4840" style="fill:#73422e;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#73422e;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5217" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(93.133331,-69.849989)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4842" style="fill:#e4d171;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#e4d171;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5221" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(93.133331,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4844" style="fill:#cdd951;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#cdd951;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5225" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(93.133331,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4848" style="fill:#653423;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#653423;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5233" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(93.133331,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4850" style="fill:#e2d06b;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#e2d06b;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5237" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(93.133331,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4852" style="fill:#dc481e;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#dc481e;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5241" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(93.133331,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4854" style="fill:#a98b43;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#a98b43;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5245" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(104.775,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4856" style="fill:#b44731;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b44731;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5249" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(104.775,-69.849989)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4858" style="fill:#d8a92d;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#d8a92d;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5253" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(104.775,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4860" style="fill:#a0ba9b;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#a0ba9b;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5257" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(104.775,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4862" style="fill:#ebdac3;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#ebdac3;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5261" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(104.775,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4864" style="fill:#e9d8c1;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#e9d8c1;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5265" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(104.775,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4866" style="fill:#ecdbc2;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#ecdbc2;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5269" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(104.775,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4868" style="fill:#592915;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#592915;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5273" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(104.775,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4870" style="fill:#f0e8aa;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#f0e8aa;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5277" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(116.41666,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4872" style="fill:#be663a;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#be663a;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5281" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(116.41666,-69.849989)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4874" style="fill:#d78a2e;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#d78a2e;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5285" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(116.41666,-58.20832)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4876" style="fill:#efe7a8;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#efe7a8;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5289" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(116.41666,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4878" style="fill:#88523d;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#88523d;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5293" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(116.41666,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4880" style="fill:#c3b062;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#c3b062;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5297" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(116.41666,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4882" style="fill:#db512d;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#db512d;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5301" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(116.41666,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4884" style="fill:#a6bea5;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#a6bea5;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5305" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(116.41666,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4886" style="fill:#adb694;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#adb694;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5309" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(128.05833,-81.491655)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4888" style="fill:#c7b567;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#c7b567;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5313" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="matrix(1,0,0,2.1000001,128.05833,-384.32623)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4892" style="fill:#dc5b34;fill-opacity:1;stroke-width:0.69006556"> <rect style="opacity:1;vector-effect:none;fill:#dc5b34;fill-opacity:1;stroke:none;stroke-width:0.18257983" id="rect5321" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="0.50396824" /> </g> <g transform="translate(128.05833,-46.56666)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4894" style="fill:#c38228;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#c38228;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5325" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(128.05833,-34.92499)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4896" style="fill:#b35631;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#b35631;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5329" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(128.05833,-23.28332)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4898" style="fill:#d68a2d;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#d68a2d;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5333" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(128.05833,-11.64166)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4900" style="fill:#ccd94d;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#ccd94d;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5337" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> <g transform="translate(128.05833,1e-5)" inkscape:tile-y0="78.316657" inkscape:tile-x0="0" id="use4902" style="fill:#a85134;fill-opacity:1"> <rect style="opacity:1;vector-effect:none;fill:#a85134;fill-opacity:1;stroke:none;stroke-width:0.26458332" id="rect5341" width="10.583333" height="10.583333" x="0.52916664" y="285.88748" rx="1.0583333" ry="1.0583333" /> </g> </g> </svg> |
Added freshlib/test_code0/_test_images/svg/document.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="46.259px" height="46.259px" viewBox="0 0 46.259 46.259" style="enable-background:new 0 0 46.259 46.259;" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="document.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/test_code0/_test_images/document.png" inkscape:export-xdpi="31" inkscape:export-ydpi="31"><metadata id="metadata45"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs id="defs43" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview41" showgrid="false" inkscape:zoom="12.12737" inkscape:cx="10.059889" inkscape:cy="23.129499" inkscape:current-layer="Capa_1" /><g id="g3" transform="matrix(0.9,0,0,0.9,2.3129,2.31295)" style="fill:#9b59b6;fill-opacity:1"><g id="g5" style="fill:#9b59b6;fill-opacity:1"><path d="m 35.043,13.514 c -3.405,0 -6.164,-2.749 -6.164,-6.153 l 0,-6.564 C 28.879,0.357 28.523,0 28.082,0 L 8.278,0 C 5.738,0 3.671,2.06 3.671,4.6 l 0,37.059 c 0,2.54 2.067,4.6 4.607,4.6 l 29.7,0 c 2.541,0 4.609,-2.06 4.609,-4.6 l 0,-27.348 c 0,-0.44 -0.355,-0.797 -0.797,-0.797 l -6.747,0 z" id="path7" inkscape:connector-curvature="0" style="fill:#9b59b6;fill-opacity:1" /><path d="m 35.043,10.395 5.519,0 c 0.321,0 0.612,-0.194 0.735,-0.493 C 41.42,9.604 41.351,9.261 41.122,9.034 39.106,7.03 35.36,3.31 33.352,1.327 33.123,1.101 32.782,1.035 32.485,1.159 32.19,1.282 31.997,1.572 31.997,1.893 l 0,5.468 c 0.001,1.665 1.38,3.034 3.046,3.034 z" id="path9" inkscape:connector-curvature="0" style="fill:#9b59b6;fill-opacity:1" /></g></g><g id="g11" /><g id="g13" /><g id="g15" /><g id="g17" /><g id="g19" /><g id="g21" /><g id="g23" /><g id="g25" /><g id="g27" /><g id="g29" /><g id="g31" /><g id="g33" /><g id="g35" /><g id="g37" /><g id="g39" /></svg> |
Added freshlib/test_code0/_test_images/svg/folder.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="841.5px" height="841.5px" viewBox="0 0 841.5 841.5" style="enable-background:new 0 0 841.5 841.5;" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="folder.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/test_code0/_test_images/folder.png" inkscape:export-xdpi="1.7112299" inkscape:export-ydpi="1.7112299"><metadata id="metadata45"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs id="defs43" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview41" showgrid="false" inkscape:zoom="0.66666667" inkscape:cx="183" inkscape:cy="420.75" inkscape:current-layer="Capa_1" /><g id="g3" style="fill:#f39c12;fill-opacity:1;fill-rule:nonzero"><g id="g5" style="fill:#f39c12;fill-opacity:1;fill-rule:nonzero"><path d="M460.8,143.4c-12.9-24.8-38.6-40.4-66.5-40.4H50c-27.6,0-50,22.4-50,50v26.8h479.7L460.8,143.4z" id="path7" style="fill:#f39c12;fill-opacity:1;fill-rule:nonzero" /><path d="M791.6,224.8H0v463.7c0,27.601,22.4,50,50,50h741.5c27.6,0,50-22.399,50-50V274.8C841.6,247.2,819.2,224.8,791.6,224.8z" id="path9" style="fill:#f39c12;fill-opacity:1;fill-rule:nonzero" /></g></g><g id="g11" /><g id="g13" /><g id="g15" /><g id="g17" /><g id="g19" /><g id="g21" /><g id="g23" /><g id="g25" /><g id="g27" /><g id="g29" /><g id="g31" /><g id="g33" /><g id="g35" /><g id="g37" /><g id="g39" /></svg> |
Added freshlib/test_code0/_test_images/svg/left.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?xml version="1.0" encoding="iso-8859-1"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="493.578px" height="493.578px" viewBox="0 0 493.578 493.578" style="enable-background:new 0 0 493.578 493.578;" xml:space="preserve"> <g> <path d="M487.267,225.981c0-17.365-13.999-31.518-31.518-31.518H194.501L305.35,83.615c12.24-12.24,12.24-32.207,0-44.676 L275.592,9.18c-12.24-12.24-32.207-12.24-44.676,0L15.568,224.527c-6.12,6.12-9.256,14.153-9.256,22.262 c0,8.032,3.136,16.142,9.256,22.262l215.348,215.348c12.24,12.239,32.207,12.239,44.676,0l29.758-29.759 c12.24-12.24,12.24-32.207,0-44.676L194.501,299.498h261.094c17.366,0,31.519-14.153,31.519-31.519L487.267,225.981z"/> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> </svg> |
Added freshlib/test_code0/_test_images/svg/menu.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="92.833px" height="92.833px" viewBox="0 0 92.833 92.833" style="enable-background:new 0 0 92.833 92.833;" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="menu.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/test_code0/_test_images/menu.png" inkscape:export-xdpi="15.511725" inkscape:export-ydpi="15.511725"><metadata id="metadata47"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs id="defs45" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview43" showgrid="false" inkscape:zoom="8.7314773" inkscape:cx="28.263787" inkscape:cy="45.62978" inkscape:current-layer="Capa_1" /><g id="g3"><g id="g5"><path d="M89.834,1.75H3c-1.654,0-3,1.346-3,3v13.334c0,1.654,1.346,3,3,3h86.833c1.653,0,3-1.346,3-3V4.75 C92.834,3.096,91.488,1.75,89.834,1.75z" id="path7" /><path d="M89.834,36.75H3c-1.654,0-3,1.346-3,3v13.334c0,1.654,1.346,3,3,3h86.833c1.653,0,3-1.346,3-3V39.75 C92.834,38.096,91.488,36.75,89.834,36.75z" id="path9" /><path d="M89.834,71.75H3c-1.654,0-3,1.346-3,3v13.334c0,1.654,1.346,3,3,3h86.833c1.653,0,3-1.346,3-3V74.75 C92.834,73.095,91.488,71.75,89.834,71.75z" id="path11" /></g></g><g id="g13" /><g id="g15" /><g id="g17" /><g id="g19" /><g id="g21" /><g id="g23" /><g id="g25" /><g id="g27" /><g id="g29" /><g id="g31" /><g id="g33" /><g id="g35" /><g id="g37" /><g id="g39" /><g id="g41" /></svg> |
Added freshlib/test_code0/_test_images/svg/right.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" width="493.578px" height="493.578px" viewBox="0 0 493.578 493.578" style="enable-background:new 0 0 493.578 493.578;" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="right.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/test_code0/_test_images/right2.png" inkscape:export-xdpi="2.9200001" inkscape:export-ydpi="2.9200001"><metadata id="metadata41"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs id="defs39" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview37" showgrid="false" inkscape:zoom="1.6422313" inkscape:cx="246.789" inkscape:cy="238.42327" inkscape:current-layer="Capa_1" /><g id="g3" transform="matrix(-1,0,0,1,493.579,0)" style="fill:#404040;fill-opacity:1"><path d="m 487.267,225.981 c 0,-17.365 -13.999,-31.518 -31.518,-31.518 l -261.248,0 L 305.35,83.615 c 12.24,-12.24 12.24,-32.207 0,-44.676 L 275.592,9.18 c -12.24,-12.24 -32.207,-12.24 -44.676,0 L 15.568,224.527 c -6.12,6.12 -9.256,14.153 -9.256,22.262 0,8.032 3.136,16.142 9.256,22.262 l 215.348,215.348 c 12.24,12.239 32.207,12.239 44.676,0 L 305.35,454.64 c 12.24,-12.24 12.24,-32.207 0,-44.676 l -110.849,-110.466 261.094,0 c 17.366,0 31.519,-14.153 31.519,-31.519 l 0.153,-41.998 z" id="path5" inkscape:connector-curvature="0" style="fill:#404040;fill-opacity:1" /></g><g id="g7" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g9" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g11" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g13" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g15" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g17" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g19" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g21" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g23" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g25" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g27" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g29" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g31" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g33" transform="matrix(-1,0,0,1,493.579,0)" /><g id="g35" transform="matrix(-1,0,0,1,493.579,0)" /></svg> |
Added freshlib/test_code0/_test_images/svg/star.svg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 88 88" style="enable-background:new 0 0 88 88;" xml:space="preserve" inkscape:version="0.91 r13725" sodipodi:docname="star-shape1.svg" inkscape:export-filename="/work/asmwork/FreshFs/FreshLibGUI/freshlib/test_code0/_test_images/star.png" inkscape:export-xdpi="122.72727" inkscape:export-ydpi="122.72727"><metadata id="metadata43"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs id="defs41" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview39" showgrid="false" inkscape:zoom="6.3068182" inkscape:cx="43.603604" inkscape:cy="44" inkscape:current-layer="Capa_1" /><g id="g3" style="fill:#ffffff;fill-opacity:0.25098041" inkscape:export-xdpi="122.73" inkscape:export-ydpi="122.73"><g id="g5" style="fill:#ffffff;fill-opacity:0.25098041"><polygon style="fill:#ffffff;fill-opacity:0.25098041" points="44,0 55.939,33.612 88,33.612 61.842,53.351 71.193,88 44,67.226 16.809,88 26.158,53.351 0,33.612 32.061,33.612 " id="polygon7" /></g></g><g id="g9" /><g id="g11" /><g id="g13" /><g id="g15" /><g id="g17" /><g id="g19" /><g id="g21" /><g id="g23" /><g id="g25" /><g id="g27" /><g id="g29" /><g id="g31" /><g id="g33" /><g id="g35" /><g id="g37" /></svg> |
Added freshlib/test_code0/test.forth.
> > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 | : TestWord 1 2 3 4 5 6 7 8 9 10 * * * * * * * * * " Test multiline text Line1 Line2 Another line! This is forthScript. " . ; |
Added freshlib/test_code0/test_config.udb.
cannot compute difference between binary files
Added freshlib/test_code0/test_utf8.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 | 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111 00000000011111111112222222222333333333344444444445555555555666666666677777777778888888888999999999900000000001111111111222222222233333333334 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ; _______________________________________________________________________________________ ;| | ;| ..::FreshLib::.. Free, open source. Licensed under "BSD 2-clause" license. | ;|_______________________________________________________________________________________| ; Notes: ; This is a test file. It is based on strlib.asm but has been modified and ; should not be used as a library. ;#F:w ; Това е теÑтов файл. Базиран е на strlib.asm но е модифициран и не бива да Ñе използва като библиотека. Ð’ този теÑтов файл Ñе използват форматиращи команди, които Ñа ÑъвмеÑтими Ñ FASM и могат да Ñе компилират без проблеми. ; Αυτό είναι Îνα δοκιμαστικό αÏχείο. Βασίζεται σε strlib.asm αλλά Îχει ;#F:b ; Ï„Ïοποποιηθεί και δεν Ï€ÏÎπει να χÏησιμοποιείται ως βιβλιοθήκη. ; ეს áƒáƒ ის გáƒáƒ›áƒáƒªáƒ“რფáƒáƒ˜áƒšáƒ˜. ის ეფუძნებრstrlib.asm მáƒáƒ’რáƒáƒ› შეიცვáƒáƒšáƒ დრáƒáƒ უნდრ; იქნáƒáƒ¡ გáƒáƒ›áƒáƒ§áƒ”ნებული ბიბლიáƒáƒ—ეკáƒáƒ¨áƒ˜. 📌 ;_________________________________________________________________________________________ mov eax, '1234' mov ecx, 1234 __StringLibrary: STR_MINSTRLEN = 15 ; must be N*8-1 struc string { .capacity dd ? .len dd ? label .data byte } virtual at -(sizeof.string) string string sizeof.string = $-string end virtual ; NumToStr flags ntsSigned = $00000 ntsUnsigned = $10000 ntsFixedWidth = $20000 ntsBin = $0200 ntsQuad = $0400 ntsOct = $0800 ntsDec = $0a00 ntsHex = $1000 ; Global variable, storing parameters of dynamic strings list. uglobal if used InitStrings ptrStrTable dd ? ; StrLib strings arrray. Contains pointers to the memory allocated for strings. flagStringFastAdd dd ? ; Flag: when TRUE, enables "Fast addition mode" where new strings are allocated ; without searching the ptrStrTable array for empty slots. ; This can increase allocation speed, but at the expense of more memory allocated ; in the array and not using possibly free handles. This mode should to be used ; carefully and set to FALSE after the end of mass allocations. end if endg ; < OS independent library functions > ;************************************************************************************ ; Allocates memory for string table and allocates memory for strings. ; Start it before any work with strings. (Or better use InitializeAll macro) ; Returns 0 if failed to allocate needed memory. ;************************************************************************************ if used ptrStrTable initialize InitStrings begin StrLib = 1 stdcall CreateArray, 4 jc .finish mov [ptrStrTable], eax or [eax+TArray.lparam], -1 ; lParam is the last allocated handle number .finish: return endp end if ;************************************************************************************** ; Frees all memory used for strings library ; Call it before exit of the program or use FinalizeAll macro. ;************************************************************************************** if used InitStrings finalize FreeStrings begin mov esi, [ptrStrTable] mov ecx, [esi+TArray.count] xor ebx,ebx .freeloop: dec ecx js .endloop cmp [esi+TArray.array+4*ecx], ebx je .freeloop stdcall FreeMem, [esi+TArray.array+4*ecx] jmp .freeloop .endloop: stdcall FreeMem, esi mov [ptrStrTable], ebx return endp end if ;************************************************************************************** ; Returns: ; CF=0 no error; eax = pointer in memory of the hString ; CF=1 on error - hString is handle, but is not in the table.* ;************************************************************************************** proc StrPtr, .hString begin mov eax, [.hString] xor eax, $c0000000 test eax, $c0000000 jnz .pointer push ebx mov ebx, [ptrStrTable] cmp eax, [ebx+TArray.count] jae .notfound mov eax, [ebx+TArray.array+4*eax] test eax, eax jz .notfound add eax, sizeof.string pop ebx clc return .pointer: xor eax, $c0000000 clc return .notfound: stc pop ebx return endp ;************************************************************************************** ; Creates new empty string and returns handle ; Return: handle of the new created string. ;************************************************************************************** proc StrNew begin push ecx edx esi ; Search for first empty place. mov edx, [ptrStrTable] mov ecx, [edx+TArray.count] cmp [flagStringFastAdd], 0 jne .notfound mov esi,[edx+TArray.lparam] xor eax,eax .search: dec ecx js .notfound inc esi cmp esi, [edx+TArray.count] jne @f xor esi,esi @@: cmp [edx+TArray.array+4*esi],eax je .found jmp .search .notfound: mov esi, [edx+TArray.count] stdcall AddArrayItem, edx mov [ptrStrTable], edx .found: mov [edx+TArray.lparam], esi stdcall GetMem, STR_MINSTRLEN + sizeof.string + 1 mov [edx+TArray.array+4*esi], eax mov [eax+sizeof.string+string.capacity], STR_MINSTRLEN mov eax, esi or eax, $c0000000 pop esi edx ecx return endp ;************************************************************************** ; Deletes the string if it is possible. ;************************************************************************** proc StrDel, .hString begin push eax ecx esi mov esi, [ptrStrTable] mov ecx, [.hString] jecxz .finish xor ecx, $c0000000 test ecx, $c0000000 jnz .pointer cmp ecx, [esi+TArray.count] jae .finish .free: stdcall FreeMem, [esi+TArray.array+4*ecx] mov [esi+TArray.array+4*ecx], 0 .finish: pop esi ecx eax return .pointer: xor ecx, $c0000000 ; search the pointer in the table. lea eax, [ecx-sizeof.string] mov ecx, [esi+TArray.count] .search: dec ecx js .finish cmp [esi+TArray.array+4*ecx], eax jne .search jmp .free endp ;************************************************************************** ; Duplicates given string, and returns a handle to new one ;************************************************************************** proc StrDup, .hSource begin stdcall StrNew stdcall StrCopy, eax, [.hSource] return endp ;************************************************************************** ; Arguments: ; hString - handle or pointer to the string (static or dynamic) ; Returns: ; CF=0; eax = length of the string in bytes. ; CF=1; eax = 0 in case, the handle of the string can't be found in the ; string table or the pointer is NULL. ; ; If pointer is passed the the procedure, it should be dword aligned and ; all bytes of the string including zero terminator to be accessed on ; qword boundary. Although, the zero terminator can be single byte zero. ; ; The performance of the procedure is high for pointers and ; instant for handles (the StrLib created string doesn't need any ; search, because the length is precomputed) ;************************************************************************** proc StrLen, .hString ; proc StrLen [hString] begin push esi mov esi, [ptrStrTable] mov eax, [.hString] xor eax, $c0000000 test eax, $c0000000 jnz .pointer cmp eax, [esi+TArray.count] jae .error mov eax, [esi+TArray.array+4*eax] test eax, eax jz .error mov eax, [eax+sizeof.string+string.len] clc pop esi return .error: xor eax, eax stc pop esi return .pointer: push ecx edx edi xor eax, $c0000000 ; align on dword .byte1: test eax, 3 jz .scan cmp byte [eax], 0 je .found inc eax jmp .byte1 .scan: mov ecx, [eax] mov edx, [eax+4] lea eax, [eax+8] lea esi, [ecx-$01010101] lea edi, [edx-$01010101] not ecx not edx and esi, ecx and edi, edx and esi, $80808080 and edi, $80808080 or esi, edi jz .scan sub eax, 9 ; byte 0 was found: so search by bytes. .byteloop: lea eax, [eax+1] cmp byte [eax], 0 jne .byteloop .found: sub eax, [.hString] clc pop edi edx ecx esi return endp ; This procedure calculates the length of zero terminated string and "fixes" [string.len] field. ; StrFixLen should be call when the content of the string is created by call to external to StrLib ; procedures - for example Win32 API functions. ; proc StrFixLen, .hstring begin push eax ecx stdcall StrPtr, [.hstring] mov ecx, eax stdcall StrLen, eax mov [ecx+string.len], eax pop ecx eax return endp ;*************************************************************************** ; If the hString is larger than length - do nothing ; If the hString is smaller than length -> set the length of string to length ; returns pointer to the new (old) string ; ; Arguments: ; hString - string handle. /not pointer!/ ; length - new string length. ; Returns: ; eax: pointer to the string. ; CF: error flag. If 1 the pointer to the string is returned, but ; the capacity is not changed. ;*************************************************************************** proc StrSetCapacity, .hString, .capacity begin push ebx ecx esi mov eax, [.hString] xor eax, $c0000000 test eax, $c0000000 jnz .pointer mov esi, eax mov ebx, [ptrStrTable] cmp esi, [ebx+TArray.count] jae .pointer mov eax, [ebx+TArray.array+4*esi] ; pointer to the string. mov ecx, [.capacity] cmp [eax+sizeof.string+string.capacity], ecx jae .sizeok add ecx, sizeof.string+8 and cl, $f8 ; align the size to 8 bytes stdcall ResizeMem, eax, ecx jc .error lea ecx, [ecx-(sizeof.string+1)] mov [ebx+TArray.array+4*esi], eax mov [eax+sizeof.string+string.capacity], ecx .sizeok: add eax, sizeof.string pop esi ecx ebx return .error: add eax, sizeof.string stc pop esi ecx ebx return .pointer: xor eax, $c0000000 stc pop esi ecx ebx return endp ;*************************************************************************************** ; Copies source to destination string. ; Arguments: ; dest - destination string (handle only) ; source - source string (handle or pointer) ; Returns: nothing ;*************************************************************************************** proc StrCopy, .dest, .source begin push esi edi eax ecx stdcall StrLen, [.source] mov ecx, eax stdcall StrSetCapacity, [.dest], ecx mov edi, eax stdcall StrPtr, [.source] mov esi, eax mov [edi+string.len], ecx inc ecx mov eax, ecx shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb pop ecx eax edi esi return endp ;*************************************************************************************** ; Compares two strings - case sensitive. ; Returns CARRY = 1 if the strings are equal. ; Returns CARRY = 0 if the strings are different. ; ; As long as this function uses StrLen, it will be very fast on handles and relatively ; slow on pointers. ;*************************************************************************************** proc StrCompCase, .str1, .str2 begin push eax ecx esi edi mov eax, [.str1] mov ecx, [.str2] cmp eax, ecx je .equal test eax, eax jz .noteq test ecx, ecx jz .noteq stdcall StrLen, eax push eax stdcall StrLen, ecx pop ecx cmp eax, ecx jne .noteq stdcall StrPtr, [.str1] mov esi,eax stdcall StrPtr, [.str2] mov edi,eax mov eax, ecx and cl, $fc repe cmpsd jne .noteq mov ecx, eax and ecx, 3 repe cmpsb jne .noteq .equal: stc pop edi esi ecx eax return .noteq: clc pop edi esi ecx eax return endp ;*************************************************************************************** ; Compares two strings - case NOT sensitive. ; Returns CARRY = 1 if the strings are equal. ; Returns CARRY = 0 if the strings are different. ; ; relatively slow, especially on equal strings, passed as pointers - this is the worst ; case. The nontrivial best case is "strings with different lengths passed as handles." ;*************************************************************************************** proc StrCompNoCase, .str1, .str2 begin push eax ebx ecx edx esi edi mov eax, [.str1] mov ecx, [.str2] cmp eax, ecx je .equal test eax, eax jz .noteq test ecx, ecx jz .noteq stdcall StrLen, eax push eax stdcall StrLen, ecx pop ecx cmp eax, ecx jne .noteq stdcall StrPtr, [.str1] mov esi,eax stdcall StrPtr, [.str2] mov edi,eax mov ebx, ecx shr ecx, 2 and ebx, 3 .dword: dec ecx js .byte mov eax, [esi] mov edx, [edi] and eax, $40404040 and edx, $40404040 shr eax, 1 shr edx, 1 or eax, [esi] or edx, [edi] lea esi, [esi+4] lea edi, [edi+4] cmp eax, edx jne .noteq jmp .dword .byte: dec ebx js .equal mov al, [esi] mov ah, [edi] and eax, $ffff mov edx, eax and eax, $4040 shr eax, 1 or eax, edx inc esi inc edi cmp al, ah je .byte .noteq: clc pop edi esi edx ecx ebx eax return .equal: stc pop edi esi edx ecx ebx eax return endp ;********************************************************** ; Creates string and assigns it to variable. If variable ; already contains string handle, the old string will be ; used. ; Arguments: ; [ptrHString] - variable containing string handle. ; ptrSource - pointer to the source for string. ;********************************************************** proc SetString, .ptrHString, .ptrSource begin push eax esi mov esi, [.ptrHString] mov eax, [esi] test eax, eax jnz @f stdcall StrNew @@: mov [esi], eax stdcall StrCopy, eax, [.ptrSource] pop esi eax return endp ;********************************************************************************** ; StrCat appends one string to another ; Arguments: ; dest - destination string (handle only) ; source - source string ;********************************************************************************** proc StrCat, .dest, .source begin push eax ebx ecx esi edi stdcall StrLen, [.dest] mov ebx,eax ; store dest length in ebx stdcall StrLen, [.source] mov esi, eax lea ecx, [eax+ebx] stdcall StrSetCapacity, [.dest], ecx mov [eax+string.len], ecx lea edi, [eax+ebx] stdcall StrPtr, [.source] lea ecx, [esi+1] mov esi, eax mov ebx, ecx shr ecx, 2 rep movsd mov ecx, ebx and ecx, 3 rep movsb pop edi esi ecx ebx eax return endp ;********************************************************************************** ; StrCharPos returns a pointer to the first occurence of a given char ; in specified string ; Arguments: ; Char - char to look for ; hString - string to search ; Returns: a pointer to the char in source, or NULL if char doesn't occur ; in given string ;********************************************************************************** proc StrCharPos, .hString, .char begin push esi stdcall StrPtr, [.hString] mov esi,eax mov eax, [.char] xchg al,ah .search: mov al,[esi] inc esi or al,al je .not_found cmp al,ah jne .search mov eax, esi dec eax pop esi return .not_found: xor eax,eax pop esi return endp ;********************************************************************************** ; StrPos returns a pointer to the first occurence of a pattern string ; in another string ; Arguments: ; hPattern - 'pattern' string ; hString - string to search ; Returns: a pointer to the pattern string in source , or NULL if pattern string ; doesn't occur in the string to search ;********************************************************************************** proc StrPos, .hString, .hPattern begin push ebx ecx edx esi edi ; esp = esp -20 mov esi,[.hPattern] ; mov esi,[hPattern] mov edi,[.hString] ; mov edi,[hString] stdcall StrLen, edi mov ebx,eax ; now ebx holds lenght of the string to search stdcall StrLen, esi mov edx,eax ; now edx holds length of the pattern string cmp edx, ebx ja .not_found ; if the pattern is longer than the string stdcall StrPtr, esi mov esi,eax ; put pointer to the pattern str in esi stdcall StrPtr,edi mov edi,eax ; put pointer to the search str in edi lodsb ; load first character of the pattern mov ecx,ebx ; mov ebx,edx ; put str_len(pattern)-1 in ebx dec ebx ; sub ecx, ebx ; there is no need to search to the end, but only to len(string)-len(pattern)-1 .search: repne scasb jne .not_found cmp ecx,ebx jb .not_found push edi esi ecx or ebx,ebx ; ebx==0 means that we were searching for one jz .got_it ; character. We found it, so we stop. mov ecx,ebx repe cmpsb jne .not_match .got_it: pop ecx esi edi dec edi mov eax,edi .ret: pop edi esi edx ecx ebx return .not_match: pop ecx esi edi jmp .search .not_found: xor eax,eax jmp .ret endp proc StrCopyPart, .dest, .source, .pos, .len begin push eax ecx esi edi stdcall StrPtr, [.source] mov esi, eax stdcall StrLen, [.source] mov ecx, eax mov eax, [.pos] cmp eax, ecx jae .cleardest ; sub ecx, [.pos] mov eax, [.len] ; ecx = min(ecx, eax) sub eax, ecx sbb edi, edi and edi, eax add ecx, edi add esi, [.pos] stdcall StrSetCapacity, [.dest], ecx jc .finish mov edi, eax mov [edi+string.len], ecx push ecx shr ecx, 2 rep movsd pop ecx and ecx, 3 rep movsb lea ecx, [edi+3] and cl, $fc sub ecx, edi xor eax, eax rep stosb .finish: pop edi esi ecx eax return .cleardest: stdcall StrSetCapacity, [.dest], STR_MINSTRLEN mov [eax+string.len], 0 mov dword [eax], 0 jmp .finish endp ;********************************************************************************** ; StrExtract copies the part of [string] from [index] with lenght in [len] ; Returns handle to new created string. ;********************************************************************************** proc StrExtract, .string, .pos, .len begin stdcall StrNew stdcall StrCopyPart, eax, [.string], [.pos], [.len] return endp ;__________________________________________________________________________________ ; Splits the string on two strings, at position [.pos] ; Arguments: ; .pString - pointer to string to be splitted. ; .pos - position where to split the string. ; Returns: ; eax - handle to the new created string with second part of the string. ; the original string does not reallocate memory and it's capacity ; and the pointer will remains the same. ;__________________________________________________________________________________ proc StrSplit, .hString, .pos begin push ecx edi stdcall StrExtract, [.hString], [.pos], -1 push eax stdcall StrLen, eax mov ecx, eax stdcall StrPtr, [.hString] sub [eax+string.len], ecx ; new length of the source string. add eax, [eax+string.len] mov edi, eax lea ecx, [eax+3] and cl, $fc sub ecx, eax xor eax, eax rep stosb pop eax pop edi ecx return endp ;__________________________________________________________________________________ ; StrInsert inserts one string into another at specified pos ; Arguments: ; dest - destination where the source will be inserted. ; source - string to insert ; pos - where to insert. ; Returns: ; nothing. ;__________________________________________________________________________________ proc StrInsert, .dest, .source, .pos begin push eax stdcall StrSplit, [.dest], [.pos] push eax eax stdcall StrCat, [.dest], [.source] stdcall StrCat, [.dest] ; source from the stack. stdcall StrDel; from the stack. pop eax return endp ; TODO: ; String case functions are giving weird results in linux, so ; here are two functons I wrote some time ago. ; I have tested the following functions in win32 and worked well ; Perhaps it is time to fully support UTF encoded strings. ; These functions here are faster (20-25%), but the results are ; exactly the same as the strlib ones. ; pelaillo ; ----------------------------------------------- ; str_ucase: ; Author: pelaillo ; Date: Jan. 16, 2002 ; Converts also accented characters: ÑÚ <--> ñú ; ----------------------------------------------- proc StrUCase2, .hString begin push eax edx edi stdcall StrPtr, [.hString] mov edi, eax .str_ucase: mov eax, [edi] mov edx, eax and edx, 40404040h ror edx, 1 xor edx, -1 and eax, edx mov [edi], eax add edi, 4 lea edx, [eax-01010101h] xor eax, edx and eax, 80808080h jz .str_ucase and eax, edx jz .str_ucase pop edi edx eax return endp ; ----------------------------------------------- ; str_lcase: ; Author: pelaillo ; Date: Jan. 16, 2002 ; Converts also accented characters: ÑÚ <--> ñú ; ----------------------------------------------- proc StrLCase2, .hString begin push eax edx edi stdcall StrPtr, [.hString] mov edi, eax .str_lcase: mov eax, [edi] mov edx, eax and edx, 40404040h ror edx, 1 or eax, edx mov [edi], eax add edi, 4 lea edx, [eax-01010101h] xor eax, edx and eax, 80808080h jz .str_lcase and eax, edx jz .str_lcase pop edi edx eax return endp ;********************************************************************************** ; Converts strings to Lower Case ;********************************************************************************** proc StrLCase, .hString begin push eax ebx ecx edx edi stdcall StrPtr, [.hString] mov edi, eax stdcall StrLen, [.hString] mov ecx, eax mov ebx, edi and ebx, 3 sub ecx, ebx jbe .byte2 ; the string is small enough, so process it by bytes. .byte1: test edi, 3 jz .ddword mov al, [edi] and al, $40 shr al, 1 or byte [edi], al inc edi jmp .byte1 .ddword: mov ebx, ecx and ebx, 3 shr ecx, 2 jecxz .byte .qword: mov eax, [edi] mov edx, [edi+4] and eax, $40404040 and edx, $40404040 shr eax, 1 shr edx, 1 or [edi], eax or [edi+4], edx add edi, 8 dec ecx jnz .qword .byte: dec ebx js .finish mov al, [edi] and al, $40 shr al, 1 or byte [edi], al inc edi jmp .byte .byte2: mov ebx, ecx jmp .byte .finish: pop edi edx ecx ebx eax return endp ;********************************************************************************** ; Converts strings to Upper Case ; First parameter = String to Convert to upper case ;********************************************************************************** proc StrUCase, .hString begin push eax ebx ecx edx edi stdcall StrPtr, [.hString] mov edi, eax stdcall StrLen, [.hString] mov ecx, eax mov ebx, edi and ebx, 3 sub ecx, ebx jbe .byte2 ; the string is small enough, so process it by bytes. .byte1: test edi, 3 jz .ddword mov al, [edi] and al, $40 shr al, 1 not al and byte [edi], al inc edi jmp .byte1 .ddword: mov ebx, ecx and ebx, 3 shr ecx, 2 jecxz .byte .qword: mov eax, [edi] mov edx, [edi+4] and eax, $40404040 and edx, $40404040 shr eax, 1 shr edx, 1 not eax not edx and [edi], eax and [edi+4], edx add edi, 8 dec ecx jnz .qword .byte: dec ebx js .finish mov al, [edi] and al, $40 shr al, 1 not al and byte [edi], al inc edi jmp .byte .byte2: mov ebx, ecx jmp .byte .finish: pop edi edx ecx ebx eax return endp ;********************************************************************************** ; _NumToStr converts the number in eax to the string in any radix approx. [2..26] ; Arguments: ; [edi] - pointer to the string buffer ; ecx - radix ; eax - number to convert. ; There is no parameter check, so be careful. ; returns: edi points to the end of a converted number ;********************************************************************************** proc _NumToStr begin test eax,eax jns _NumToStrU neg eax mov byte [edi],"-" inc edi endp proc _NumToStrU begin cmp eax,ecx jb .lessA xor edx,edx div ecx push edx call _NumToStrU pop eax .lessA: cmp al, 10 sbb al, 69h das stosb return endp ;***************************************************** ; NumToStrF: ; Converts signed integer value to string. ; NumToStrUF: ; Converts unsigned integer value to string. ; ; edi - pointer to string buffer ; eax - Number to convert ; ecx - radix from 2 to $ff ; esi - length of the number in chars ; ; returns: edi - pointer to the end of converted num ; ; Note: Don't use 1 as radix. ;***************************************************** proc _NumToStrF begin test eax,eax jns _NumToStrUF neg eax mov byte [edi],'-' push esi dec esi add edi, esi push edi jmp _NumToStrUF.loopc endp proc _NumToStrUF begin push esi add edi, esi push edi dec edi .loopc: xor edx,edx div ecx xchg al,dl cmp al,$0a sbb al,$69 das mov [edi],al dec edi xchg al,dl dec esi jnz .loopc pop edi pop esi return endp ;*********************************************************** ; NumToStr - converts number to any radix. ; num - number to convert ; str - handle of the string. If NULL - creates new string. ; index - Offset in string where to put converted number. ; flags: ; byte 0 - number of digits if ntsFixedWidth is set. ; byte 1 - contains radix for the convertion. ; byte 2,3 - flags. ; Returns: ; eax - handle of the string. ;*********************************************************** proc NumToStr, .num, .flags begin push ebx ecx edx esi edi stdcall StrNew push eax stdcall StrSetCapacity, eax, 40 mov edi, eax push eax ; pointer for the length. ; determine which conversion func to use movzx eax, byte [.flags+2] ; signed/fixed and eax, (ntsUnsigned or ntsFixedWidth) shr 16 mov ebx, [.NumToStrFunc+4*eax] movzx ecx, byte [.flags+1] ; load radix into ecx movzx esi, byte [.flags] mov eax, [.num] call ebx ; call low-level convertion routine mov dword [edi], 0 pop eax sub edi, eax mov [eax+string.len], edi pop eax pop edi esi edx ecx ebx return .NumToStrFunc dd _NumToStr, _NumToStrU, _NumToStrF, _NumToStrUF endp ;------------------------------------------------------- ; function StrToNum ; Converts specified string into a number ; ; Arguments: ; hString - handle/pointer of the string containing ; number to convert. It doesn't have to be ended by ; NULL, any other character will stop conversion. ; Number to convert must be decimal. ; ; Return: ; eax - converted number ; ; Note: in case of failture (first char of given pointer ; isn't a number) function returns -1. ;------------------------------------------------------- proc StrToNum, .hString begin push ebx edx esi xor ebx,ebx ; ebx will store our number stdcall StrPtr, [.hString] mov esi,eax xor eax,eax mov al,[esi] cmp al,'0' jb .error cmp al,'9' jbe .digit jmp .error .digit: sub al,'0' add ebx,eax inc esi mov al,[esi] cmp al,'0' jb .finish cmp al,'9' ja .finish mov edx,ebx ; multiply ebx by 10 shl ebx,3 add ebx,edx add ebx,edx jmp .digit .finish: mov eax,ebx pop esi edx ebx return .error: xor eax,eax dec eax pop esi edx ebx return endp ;------------------------------------------------------- ; function StrCharCat ; Appends up to 4 chard at the end of the string. ; ; Arguments: ; hString - string to append ; char - char(s) to add ; Returns: ; nothing ;------------------------------------------------------- proc StrCharCat, .hString, .char begin push eax ecx stdcall StrLen, [.hString] mov ecx, eax add eax, 8 stdcall StrSetCapacity, [.hString], eax pushd [.char] popd [eax+ecx] mov dword [eax+ecx+4], 0 dec ecx .goend: inc ecx cmp byte [eax+ecx], 0 jne .goend mov [eax+string.len], ecx pop ecx eax return endp ;------------------------------------------------------------ ; function StrInsertChar ; Inserts up to 4 chars into the given position of the string ; ; Arguments: ; hString - string to append ; char - char to add ; pos - position where to add the char ;------------------------------------------------------------- proc StrCharInsert, .hString, .char, .pos .str rd 2 begin push eax push [.char] pop [.str] mov [.str+4], 0 lea eax, [.str] stdcall StrInsert, [.hString], eax, [.pos] pop eax return endp ;_______________________________________________________________________ ; ; proc StrHash ; Computes 32 bit hash value from the string. ; This procedure implements the hash algoritm: FNV-1b ; ; Arguments: ; ptrString - pointer to PASCAL string with dword length at [ptr-4] ; ; Return: ; eax - 32bit hash value. ; ; Changes: ; eax ;_______________________________________________________________________ proc StrHash, .hString begin push edx ecx esi stdcall StrPtr, [.hString] mov esi, eax stdcall StrLen, [.hString] mov ecx, eax mov eax, $811C9DC5 ; 2166136261 ; FNV offset basis jecxz .exit .hashloop: movzx edx, byte [esi] xor eax, edx inc esi imul eax, $01000193 ; 16777619 ; FNV prime dec ecx jnz .hashloop .exit: pop esi ecx edx return endp proc StrURLEncode, .hstr .res dd ? begin push ebx ecx edx esi edi stdcall StrPtr, [.hstr] mov esi, eax stdcall StrLen, esi mov ecx, eax lea edx, [2*eax+eax] ; the encoded string can be max 3x long as original string. stdcall StrNew mov [.res], eax jecxz .finish stdcall StrSetCapacity, eax, edx mov edi, eax xor edx, edx xor ebx, ebx push eax .encode: lodsb cmp al, $80 jae .store ; it is a hack, but I hope save enough. mov dl, al mov bl, al shr edx, 5 and ebx, $1f bt dword [.URLCharTable+4*edx], ebx jnc .store mov ah, al mov al, '%' stosb mov al, ah shr al, 4 cmp al, $0a sbb al, $69 das stosb mov al, ah and al, $0f cmp al, $0a sbb al, $69 das .store: stosb loop .encode xor al, al mov [edi], al pop eax sub edi, eax mov [eax+string.len], edi .finish: mov eax, [.res] pop edi esi edx ecx ebx return ; Contains 1 where the character must be % encoded and 0 where it is save to pass it directly .URLCharTable db 11111111b ; db 11111111b ; db 11111111b ; db 11111111b ; 0..31 -control chars | encoded db 11111111b ; $27 - $20: '&%$#"! | encoded db 11111111b ; $2f - $28: /.-,+*)( | encoded db 00000000b ; $37 - $30: 76543210 | not encoded db 11111100b ; $3f - $38: ?>=<;:98 | partially db 00000001b ; $47 - $40: GFEDCBA@ | partially db 00000000b ; $4f - $48: ONMLKJIH | not encoded db 00000000b ; $57 - $50: WVUTSRQP | not encoded db 11111000b ; $5f - $58: _^]\[ZYX | partially db 00000001b ; $67 - $60: gfedcba` | partially db 00000000b ; $6f - $68: onmlkjih | not encoded db 00000000b ; $77 - $70: wvutsrqp | not encoded db 11111000b ; $7f - $78: ~}|{zyx | partially endp ; UTF-8 support functions. ; Some of the above functions also need some revision in order to support ; utf-8 strings properly. proc StrLenUtf8, .hString, .len .maxptr dd ? begin push esi ecx edx stdcall StrPtr, [.hString] mov esi, eax mov eax, [.len] cmp eax, -1 je @f add eax, esi @@: mov [.maxptr], eax xor ecx, ecx .loop: cmp esi, [.maxptr] jae .endofstring stdcall DecodeUtf8, [esi] jc .error test eax, eax jz .endofstring add esi, edx inc ecx jmp .loop .endofstring: mov eax, ecx pop edx ecx esi clc return .error: pop edx ecx esi return endp proc StrOffsUtf8, .hString, .pos begin push edx esi stdcall StrPtr, [.hString] mov esi, eax .loop: dec [.pos] js .finish stdcall DecodeUtf8, [esi] jc .error test eax, eax jz .finish add esi, edx jmp .loop .finish: clc mov eax, esi pop esi edx return .error: xor eax, eax pop esi edx return endp ; decodes 4 bytes in [.chars] to UNICODE dword value. ; returns: ; CF=0 - no error ; eax - unicode value. ; edx - byte count of the char. [1..4] ; CF=1 - invalid utf-8 char; ; eax = edx = 0 the character can not be decoded. ; edx <> 0 -> eax = the overlong encoded character. edx = byte count of the char. ; ; Note: When CF=1 and [.chars] are overlong encoded char. ; eax contains the proper value and edx contains the proper length. ; But it is still invalid character, according to the standards. proc DecodeUtf8, .chars begin push ebx ecx xor ecx, ecx .loop1: shl byte [.chars], 1 jnc .countok inc ecx jmp .loop1 .countok: jecxz .ascii cmp ecx, 1 je .error ; internal byte cmp ecx, 4 ja .error ; more than 4 bytes mov edx, 1 xor ebx, ebx movzx eax, byte [.chars] shr eax, cl shr eax, 1 .loop2: mov bl, byte [.chars+edx] and bl, $c0 cmp bl, $80 jne .error mov bl, byte [.chars+edx] and bl, $3f shl eax, 6 or eax, ebx inc edx cmp edx, ecx jne .loop2 and eax, $1fffff cmp eax, $10ffff ja .error cmp eax, [._minimal+4*edx-8] jb .overlong ; overlong coding. clc pop ecx ebx return .ascii: movzx eax, byte [.chars] shr eax, 1 mov edx, 1 pop ecx ebx clc return .error: xor eax, eax xor edx, edx .overlong: stc pop ecx ebx return ._minimal dd $80, $800, $10000 endp proc ScanForwardUtf8 begin push eax mov al, [esi] test al, al jns .finish and al, 11000000b cmp al, 11000000b je .finish ; inc forward .loopf: inc esi mov al, [esi] and al, 11000000b cmp al, 10000000b je .loopf .finish: pop eax return endp proc ScanBackUtf8 begin push eax mov al, [esi] test al, al jns .finish and al, 11000000b cmp al, 11000000b je .finish ; inc back .loopf: dec esi mov al, [esi] and al, 11000000b cmp al, 10000000b je .loopf .finish: pop eax return endp include '%TargetOS%/utf8.asm' DispSize "String library", $ - __StringLibrary |
Added freshlib/test_code0/theme_flat.cfg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | clTextCaret = $FFE74C3C caretTimes = 250, 250 clBorderNeutral = $FF1ABC9C clBorderLight = $FF31E2BF clBorderDark = $FF138670 clBorderNeutralGray = $FF606060 clBorderLightGray = $FF808080 clBorderDarkGray = $FF404040 clBorderFocused = $FFE74C3C boxBorderWidth = 2 clBtnBk = $FF1ABC9C, $FF48C9B0, $FF16A085, $807B7B7B clBtnTxt = $FFFFFFFF, $FFFFFFFF, $FFBDC3C7, $80FFFFFF btnBorder = 0, 0, 0, 1073741824 btnPressedOfsX = 0 btnPressedOfsY = 0 btnMarginX = 8 btnMarginY = 8 clToolBtnBk = $FFECF0F1, $FFC9DCE7, $FFC9DCE7, $FFECF0F1 clToolBtnTxt = $FF000000, $FF000000, $FF000000, $80000000 tbBorder = 0, 0, 0, 1073741824 tbBorderWidth = 1 tbPressedOfsX = 0 tbPressedOfsY = 2 tbSeparatorType = $40000003 tbSeparatorWidth = 10 clEditBk = $FFECF0F1 clEditBkFocused = $FFFFFFFF clEditTxt = $FF000000 clEditSel = $602980B9 clEditSelTxt = $FFFFFFFF editBorder = 3 editBorderFocused = 3 clDialogBk = $FFECF0F1 clDialogTxt = $FF000000 clSplitter = $FF34495E clProgressBk = $FFECF0F1 clProgressBar = $FF1ABC9C progressBorder = 3 clScrollBk = $3FBDC3C7, $A0BDC3C7 clScrollSlider = $7F7F8C8D, $FF1ABC9C clScrollSliderOvf = $3FF39C12, $FFF39C12 borderScroll = 0 scrollWidth = 12 minSliderHeight = 24 clLabelBk = $FFECF0F1 clLabelTxt = $FF000000 clTreeViewBack = $FFFFFFFF clTreeViewText = $FF000000 clTreeSelected = $FF2980B9 clTreeSelectedTxt = $FFFFFFFF clTreeFocused = $FFD35400 clTreeFocusedTxt = $FFFFFFFF clTreeViewLines = $FFBDC3C7 tvBorder = 3 tvIcons = 279:iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAMAAABFNRROAAAAUVBMVEVHcEwVoIUXoIYWoIUWoIUWoIYWoIUAv4AWn4UWoIUWoIUWoIYWoIYVn4YVn4YWnoQWoIUVoIQWoIUWoYUXn4QVooQXoIWL0ML///8WoIXF6OG0ZSUgAAAAF3RSTlMAp5OX+TvjBJXl5KakPag6/j74pTg8qalz8pYAAABeSURBVAjXVY5ZEoAgDEMDson7CvX+B7WV0cH8JG86bQMAw9iaqA6IfENFwTO9wAgs4iknMYuzog4t53TlKzFHGKJcRLT+Zg6q2uuxz/VNhO+fli4vav90s50zbps43TydC9ljC1FvAAAAAElFTkSuQmCC, 269:iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAMAAABFNRROAAAATlBMVEVHcEw0Sl4zSV40SV80SV40SV40SV9AQEAzSl40SV40SV40SV81SV41S1w0SV4yR1wzSF4zSV01Sl8zSF4ySWA0SV40SV40SV6apK////9UeNVfAAAAF3RSTlMApuSn4+U7BJX5k5elOqg9PKQ+qTj++F14vKgAAABXSURBVAjXVY5ZDoAgEEMLsruv1ftfVJCg+L76MpmmADAO2stmQsK2zDgbrUhUYOGHwVqZgCbPDCnhyStDHr+bQlP9zdj2uhPulZC2FA322WaE8qrrY7oBCC8LRlmSYHsAAAAASUVORK5CYII= clMenuBack = $FFECF0F1 clMenuText = $FF000000 clMenuTextGray = $90000000 clMenuSelection = $FF2980B9 clMenuSelIcon = $FFC9DCE7 borderMenu = 3 menuIconMargin = 4 menuSeparatorHeight = 12 menuMinTextDist = 32 menuSubIcon = 206:iVBORw0KGgoAAAANSUhEUgAAAAYAAAALCAYAAABcUvyWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABLSURBVBiVjc+xDYBADATBeSQCIgqgYzJaoARSInqgH5MQvQ6JzezVyT7YMAgUdoxJFA5MSRQuzEkUbiztHXrOz8SvG/Gr2GNF65cP8X4dCPkfyx8AAAAASUVORK5CYII= menuSubIconSel = 207:iVBORw0KGgoAAAANSUhEUgAAAAYAAAALCAYAAABcUvyWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABMSURBVBiVjc+xDYAwEEPRCxIFFQOwcTpWyAi0VOzAPi8FXTgk3H5Z3w7smGKMJw1zBuDAkgG4sGYAbmwFXuKI87Pxy5GuSn9UlNHeAYWml41HdWNxAAAAAElFTkSuQmCC menuSubIconGray = 280:iVBORw0KGgoAAAANSUhEUgAAAAYAAAALCAYAAABcUvyWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACVSURBVBiVY5i6dOnEhoYGJgY0wMTAwJgnpqq6YObMmaxoEgwM/xkYY//w8K7tW7WKE0UCCnzZf//ZMXPVKn4GBgYGxqlLl/1HM/4q0x8WdwxLGRgYtP+x/JmPTeIq0x+WRHSJQyysLNaZ8WFPkSU2/2Rl8UgPC/sIdxUjw//FLF8+BxeFhX2HK5u2ZFnX////GdEtAgDKqy21io/rDwAAAABJRU5ErkJggg== iconMenuChecked = 172:iVBORw0KGgoAAAANSUhEUgAAAAcAAAAQCAYAAADagWXwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAApSURBVBiVY2CgP2B87mPTgEuShYGBoR6XJBM+YwdCkoWBgaERnwJ6AwCTrAMDeKqy3AAAAABJRU5ErkJggg== iconMenuCheckedGray = 172:iVBORw0KGgoAAAANSUhEUgAAAAcAAAAQCAYAAADagWXwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAApSURBVBiVY2CgP2DMy8trwCXJwsDAUI9LkgmfsQMhycLAwNCITwG9AQBg/wLetiFJMAAAAABJRU5ErkJggg== clCheckboxBack = $FFE0E0E0, $FFFFFFFF, $FFC0C0C0, $80C0C0C0 clCheckboxTxt = $FF000000 clCheckboxTxtGray = $FF606060 cbIconSize = 13 cbMargin = 2 borderCheckbox = 3 iconChecked = 166:iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAjSURBVCiRY2AYfoARXeC5j81/dDHJLUdQ1DGRY9Mg1zQcAQAaUwQKOrN/dgAAAABJRU5ErkJggg== iconCheckedGray = 166:iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAjSURBVCiRY2AYfoARXSA/P/8/utjEiRNR1DGRY9Mg1zQcAQAXqwQKOqarXQAAAABJRU5ErkJggg== maxTabWidth = 180 tabMarginX = 4 tabMarginY = 4 clTabBk = $FFECF0F1, $FFC9DCE7, $FFC9DCE7 clTabTxt = $FF000000 clGridCellBk = $FFFFFFFF, $FFECF0F1, $FFC9DCE7, $FFD35400 clGridCellTxt = $FF000000, $FF000000, $FF000000, $FFFFFFFF clGridLines = $0, $FFC0C0C0, $0, $FF1ABC9C lvIconMargin = 2 iconDialogs = 1075:iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAABfVBMVEUAAAD/MzPVVSvbSUnkUTbmTUDpTjfrRz3rTjvjTDnkSUDnUEDqTjnkSjzlTjvnTTvoSzvoTT3mTT3mTDznTTvoTDvoTTznTDznTT3oTT3mSzzmTTvnTDvoSz3oTTzoTDzmSzvnTTvnTD3oTTzoTDvnTDznTDzoSzvoTT3mTDzmTDznTTvnTDznTTzoTD3nTDznTTznTD3nSzznTDznTDvoTDzmTDznTDznTDznTD3nTTznTDznTD3nTDznTDznTDznTDznTDznTDznTDznTTznTDznTDznTDznTDznTz/oUkPoV0fpV0jpWUrqYVPqYlTqZFbraFvraVvral3sb2LscmXsc2btd2vteGvtem7vioDwj4XxlozxmI/xmpHzoprzpJzzpp70q6P0q6T0sKn1sqv2u7X2vrj4zMj4zsn50Mz50s7619P62db62tb63Nn73tv739z85uP85+X86ef86uj97u398O798vH+9PT+9fT+9/b++Pf//v7///9nQat2AAAASHRSTlMABQYHExQXGRobHCAkJicrTk9QUVZXWV5gZGZnbG1ub3B0dnh5gI2Oj5CRkra3ucfIysvNzs/Q1Nnb3N3s7vHy8/T1+fr7/P5navj5AAACHUlEQVRIx62V6V/TQBCGX5CWoqiAUM9axau0UIuKIhpK2tqOoq0X3jd4n5VWRWX+dj7QZGc3aZIf+n6b3WeOzUx2AVOJZC4/Z1Uq1lw+m+xHiGLpM6RpOh0LwLfnSuRRKTvQBe9JF8lXpRPb/PidM9RVF3Z7+T0LFKDiiMnvu0KBqh7U+QMUqkNaPdVwh+qw4gfnw3mihV0O33s+Ck90rrfjcDwaTzTe6a8t1h58fCyRF+9vyaISAICcWLr/h9efKnOZ+ecdsZ0BgJiYn4d/mXn9iWOuMDP/uK327RiAI1p8ZnZzLDMz6zlSANQ8X/u9SXRyrHQsbiqHApBQ1tXvLDxcnt8ppBZHUpyp0XI9nr12+S/XBTKmfSPhwf48TSCvtaa+avJfb2jAJC7pzTRz6PGJLsIy2q/nMOITXUaFAjw8PJVRNpforXJ4Tl4HsyR6JSqSc+WUZBxa9Ev1XDt0vnt8vxyTeuOM+D45JrTREPy3tr/HKPqF9dLlPy+KuXqkiFocmFbmJ8XLnr9RRAFAWplLa4pXHq26IlLGL3pvTfGOR6uh9u0+AMiKU9z9Jeehvsrcvim2TwIABuQ1s9T+sKisRrMp4lNx85rBMYqoo85VORONP9uz1csYGIly3Q/JB2JvLYyv7f+3JwsYLgbx80PwaEch4PsM/o+HHUAiY3tx+1QC3RU7bBR2OtWHEMXHMlOzVqVszU5lRuOe7Q3ZakQDPbBoTgAAAABJRU5ErkJggg==, 810:iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAABYlBMVEUAAAAA//9Vqv8zmcwrqtUzmeYrldUzmd04l9c3mN02mNkzmdwzmds1mNw0mN01mNszmdo1l9o1l9w1mNwzmNs0l9wzmdo1l9s0mNo0mNs0mds0mdo0mNs0mNs1mNs1mNs1mds0mNs0mdo0mNs0mNs0l9s0mNs1mNs0mNs0mNs0mNs0mNs0mNs0mNs0mNs1mNs2mds3mtw4mtw5mtw6m9w+nd0/nt1Cn91Cn95DoN5God5Iot9Jot9MpN9QpuBSp+BVqeFZq+Fhr+Nir+NjsONmseRosuRxt+ZzuOZ0uOZ1ued4uud8vOh/vuiAv+mBv+mCwOmFwemGwuqTyOyYy+2bzO2cze2fzu6gz+6hz+6i0O6o0/Ct1fCu1vGw1/G12fK73fO83fO/3vTB3/TD4fTO5vbW6vjX6/jb7fnd7vni8Prj8frm8vvs9fzu9/zx+Pzy+f30+f37/f79/v/+//////9FPg/YAAAALnRSTlMAAQMFBgoMHiAlL0FGSEpNWmBldHd7fYeZoaKnsrm9x8zP0dfZ5evu8fr7/P3+LMHCbgAAAUlJREFUSMe11FVTXFEQhdGNQyBAYAjuLrm4uwwW3CW4uwzf/+cpRQEFdD+wX+9eVaf7nLqSflU0BKY0lKdLUmpgz58USXkOEORKKvSAwk/A1PZypwesAddddtAZAVixgyEAdu2g9QZg1jHD+C3sNHq21D7S71ur+x68oG14etoKWmY3ji4jcGQF3auXACzZjzQGgGNLfwHOHUOvA2w6wClA2A56IsBDix3MARw4Lm4fYMEOmu+Bpz47CAOcOd7SJsCaA1wAjNpBP8BdUzAzaQQLAMfB4EWHEWwD/Bu4GrceaQ/g6XHRPMMEwMO8Y0uThydbvd//E/gYFHhAgaTfHpAlKb7E3i+Ok6SYtMzQ/2SVvWlkh16SmRqtd0l4Vf+hr1P70s+JlQfUhSQPqEqWC5QmygXy4+QB9aEoc1+VQVD9U45k1BQlffb9GZxKanlvO0DPAAAAAElFTkSuQmCC, 1301:iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAB7FBMVEUAAAAA/wAA/4BVqlVAv4AzzGYr1YAk220gv4A5xnEzzGYu0XQr1Wo3yG0zzHcrxnEoyWszzHMsyG8rynUzzHAxznYv0HErzG8xznMwz3ArzXEvyXIuy28tzHMszXAxznMtzHEszW8rznIwynAvy3IuzHAtzXMsznEwym8vy3EuzG8uzXItznAsynIwy3AvzHIuzXAuznIty3EwzHAvzXIuzXEty3EtzHAuy3Iuy3AtzXAvzXIvy3AuzHEtzXItzXEvy3AtzXEvzHEuzHEtzXAuzHIuzHEuzXIvzHEuzXEuzHIuy3IvzHAuy3IvzHEuzXAuy3EvzHEuy3EtzHAuzHEtzHIvy3IuzHAuzHEtzXAuzHEuzHEtzXIty3EvzHAuzHEuzXEty3EvzHIuzHIuzXEuzHEuzXEtzHEvzHIuzHEuzXAuzHEuzXEuzHItzHEvzHAuzXEuzHEuzXEuzHEuzHEvzXEuy3EuzHEuzHEtzXIuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEvzHEuzHAuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHAtzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHHh23O3AAAAo3RSTlMAAQIDBAUGBwgJCgsMDg8SExQXGBkaGx4fICQmJygpKi0uLzAxMjM0NTY3ODk6QEFCQ0RLTE1PUFNZW1xdX2BhYmZoamtub3BzdXl7fYCDhIWIio2QkpSWl5ianJ2en6Cio6Smp6usrq+wsbW2uLm6u73AwsTFxsjJyszOz9HS1NbX2tvc3d7f4OHi4+Tl5ufo6evt7/Dy8/T19vf4+fr7/P3+J/aI2QAAAjVJREFUGBm9wftfS2EAB+Dvumyim9RKbqGEKIqI5LaE3ErKZSWxUIRMJrknKUQ0lVpr33/UOZ3zvufsnK1P/dLzYCXtzMNyJFz0YDlSfD0OLOKcE1FS/aGNMGRUX7jiKYDJ2edrYOJ8wtuQXI0zVD3KgpQ69XQVDO1kEYTkx9S9SYHUzTZIJ8gPkC5T8kCqJU9Clz9JNkLI+kfpGaQKcnI9NF0kKyF4aPgFqYhkNxbsp6IEgo+GWUh7qSiDqpeKaxA+0/Ab0gEqeqHYxgUtbqhyb9HkFaTjVG0HcJ2a2ZcdrQ8/MkotpBtUNQGOb4yrPxnSJ6rGHChiXINuSMXUbEUd4+nLhqGLmjp4GYfXBUN5hBovAowpfAYmGaPU9eErYwkdgklagMII/jCGSBVMcgKUJhBmDE0wKf1BQxjTtBtyQUq6FKbJFMZpVwUp288oPzFAm7FECBuGGa0fnbRphpA1RAsf6mlzEIKPVuexjzaboCuO0KoUziAtwi7o6mk14QQ6aPEXwj1a3QVQQosZF3Q9tCqHop8WAzX5yUBmWfMcLd47oKhmDMEIYzgCVcILLtHrRCwoCHFJ5vdA18AlaYCQ1MMowasVuw+3zzGa3wkp/R1NAtlQ7fhOs8G1MMkbpjSaCU1hiIYveYiyLkDhFAQvpbe5sFjdSZ0bQiWFB2mwcdSMUxVJhLCLmuBpxJTZOk+FG0IlVfN3chDPlrZp8iiEFpJT3s1YTHpNUyGEmyP3j6Vjpf0HT8HklxcxkYwAAAAASUVORK5CYII=, 1091:iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAABxVBMVEUAAAD//wD//wD/vwD/zAD/vwDmzBrqvxXtyBLwww/yyQ3yvw30yAv1wgr1xBTtwRLwwQ/www/xxg7xwQ7zxwzzwgzzxBLvxRDxxg7ywg3vwxDvxBDwxA/yxRDywhDywxDxww7yxBDwxA/xww7xww7xxBDyxQ/wxA/xxBDxxRDxww/xxA7xxQ7xwxDwxA/wxQ/xxA/xxA/yww/xxBDxxA/xxA/yxA/wxA/xxA7xxBDxxA/xxA/yxA/xww/xxA/xxA/xxA/xxA/yww/wxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/wxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxBDxxBHxxRXyxxnyyB7yyCDyySLyyifzyyrzyyvzzC7zzDDzzTLzzTPzzjfzzjjzzjn0zzr00ED00EL00UP000r100v100z11VP11VT111v111z22GD22WX22mf222z222333G/33HL33XP33XX33nf44YX55pv5553555/77bb777788cf8887889D99dX99df99tj99tz99+D9+OL9+OP++ej++ur+/PH+/PT+/fb//ff//fj//vn//vr//vz////4//v2AAAAVXRSTlMAAQIEBQgKDA4RExQXGRodISIkJSkqKzA2O0BBRU9QUV1faGprcXZ4gYOEj5CRm52oqau0tre+wcPEzM/Q1tfZ4OHj5Ofp6uzt7/Dy9Pb4+fr7/P3+E1pkvgAAAdhJREFUGBmtwYlbTFEcBuCvO9qQ3RgSFS2WiqIsqUGIGSHzSZYo2ddkl7Lv2f3+XueeuTNz75nt3ufxvvhfSkoQyPJoNIwArN1ktwX/6qjUwbfSvVT2l8GvJmpN8GneEWqx+fCnhY4W+LJ4gI7jS+FHO9Pa4UMkwYyVKG4HOTY9o7wYIXeiqDUkn4k2SXItigjtIflItAmSvXNQ2Hoqk6LdobIOBZX3UZkQ7SaVgxUoZCNtd0W7TtsGFLAgTtst0S7TdnQh8mujdkO0UWptyGvZCWpXRTtP7eQK5LOdSWOinWHSNuSxio4R0U7TsRo5WbvoOCe2v0zptpBLLVOGxfadabXIoTTKlCGxzTJtXxmyNTLjtyifmdGILJX9zPgmygdmHJ4L02a6fBXlLV02wbBogC6fRHlNl2NL4LWVbu9FeUW3LfCIJOj2RpSXdEtE4NZFj3szym16dMGlhj7UIC3UQ8PQ+KVTNPSEkFJPw7WPIu+u0FAPR3kfvc7OivJlmF4HKpDUTMNz0e7T0AytKk7DtGhTNMSrYGulaUq0hzS1QgkP0jT+R5QfF2gaDAPoYLbHv0R+PmC2DqCauYw+fXKRuVSjk4F0op+BHEJDjAHEGgCrMgALgf0D+/WonFYwCuwAAAAASUVORK5CYII= iconDirectory = 115:iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAACVBMVEVHcEz/ojP///8aaB/0AAAAAXRSTlMAQObYZgAAABhJREFUCNdjYIAD0VAYobUKzAoNIZqAAwCd3AtUoiCniwAAAABJRU5ErkJggg==, 158:iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEVHcEz/ojP/////9+3/tmD/uWb/qEH/umj/uGNoGOEVAAAAAXRSTlMAQObYZgAAADFJREFUCNdjYMAAjIKCgqgMJiUlJbgIEAiAGSkwhnMglCFhDmEAlaOJINTAdYHNwQAAxsIHF+bypqkAAAAASUVORK5CYII= iconFile = 130:iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEVHcEw6fLw6e7v///9NrS3vAAAAAnRSTlMAiJXwxioAAAAjSURBVAjXY2AAAaZVF0DEExDxEkS8cgAS/w8AiVUNRBMgAADeqxlpte03XQAAAABJRU5ErkJggg==, 176:iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAHlBMVEVHcEw6fLw6e7v////u9PllmMptnc1omstrnMxHhMD2vtcUAAAAAnRSTlMAiJXwxioAAAA/SURBVAjXY2CAAyYlJUMYw0gAxlCEMZQEIAxjYwMIQ0lJAczQDIIyVD2gDKWSJDBD2djYCFUEoQauC2oOFAAA4coLMJ+cy/EAAAAASUVORK5CYII= DefaultFont = 'Liberation Sans' : 12 : 4 : $0 DoubleClickTime = 600 DoubleClickDistance = 8 |
Added freshlib/test_code0/theme_win.cfg.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | clTextCaret = $FFFF0000 caretTimes = 250, 250 clBorderNeutral = $FFA0A0A0 clBorderLight = $FFFFFFFF clBorderDark = $FF404040 clBorderNeutralGray = $FF909090 clBorderLightGray = $FFE0E0E0 clBorderDarkGray = $FF808080 clBorderFocused = $FFFF8000 boxBorderWidth = 1 clBtnBk = $FFD4D0C8, $FFE0E0E0, $FFA0A0A0, $80D4D0C8 clBtnTxt = $FF000000, $FF000000, $FF000000, $FF606060 btnBorder = 1, 1, 2, 1073741825 btnPressedOfsX = 1 btnPressedOfsY = 1 btnMarginX = 8 btnMarginY = 8 clToolBtnBk = $FFD4D0C8, $FFE0E0E0, $FFA0A0A0, $80D4D0C8 clToolBtnTxt = $FF000000, $FF000000, $FF000000, $FF606060 tbBorder = 0, 1, 2, 1073741824 tbBorderWidth = 1 tbPressedOfsX = 1 tbPressedOfsY = 1 tbSeparatorType = $2 tbSeparatorWidth = 10 clEditBk = $FFFFFFFF clEditBkFocused = $FFFFFFFF clEditTxt = $FF000000 clEditSel = $600A246C clEditSelTxt = $FFFFFFFF editBorder = 2 editBorderFocused = 2 clDialogBk = $FFD4D0C8 clDialogTxt = $FF000000 clSplitter = $FF606060 clProgressBk = $FFD4D0C8 clProgressBar = $FF0A246C progressBorder = 2 clScrollBk = $80D4D0C8, $D0D4D0C8 clScrollSlider = $C0808080, $FF808080 clScrollSliderOvf = $C0FF8080, $FFFF8080 borderScroll = 1 scrollWidth = 12 minSliderHeight = 24 clLabelBk = $FFFFFF clLabelTxt = $FF000000 clTreeViewBack = $FFFFFFFF clTreeViewText = $FF000000 clTreeSelected = $FF0A246C clTreeSelectedTxt = $FFFFFFFF clTreeFocused = $FF0A246C clTreeFocusedTxt = $FFFFFF00 tvBorder = 2 tvIcons = 117:iVBORw0KGgoAAAANSUhEUgAAAAsAAAALAQMAAACTYuVlAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAB1JREFUCNdjYGBgqD/A4ODA4AJG8TAGUAQozsAAAGXeBi6dny4xAAAAAElFTkSuQmCC, 114:iVBORw0KGgoAAAANSUhEUgAAAAsAAAALAQMAAACTYuVlAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABpJREFUCNdjYGBgqD/A4OAARfEOCDZQnIEBAGTOBh7FK7i2AAAAAElFTkSuQmCC clMenuBack = $FFD4D0C8 clMenuText = $FF000000 clMenuTextGray = $80000000 clMenuSelection = $FF000080 clMenuSelIcon = $FFADAABB borderMenu = 1 menuIconMargin = 4 menuSeparatorHeight = 10 menuMinTextDist = 32 menuSubIcon = 206:iVBORw0KGgoAAAANSUhEUgAAAAYAAAALCAYAAABcUvyWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABLSURBVBiVjc+xDYBADATBeSQCIgqgYzJaoARSInqgH5MQvQ6JzezVyT7YMAgUdoxJFA5MSRQuzEkUbiztHXrOz8SvG/Gr2GNF65cP8X4dCPkfyx8AAAAASUVORK5CYII- menuSubIconSel = 207:iVBORw0KGgoAAAANSUhEUgAAAAYAAAALCAYAAABcUvyWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABMSURBVBiVjc+xDYAwEEPRCxIFFQOwcTpWyAi0VOzAPi8FXTgk3H5Z3w7smGKMJw1zBuDAkgG4sGYAbmwFXuKI87Pxy5GuSn9UlNHeAYWml41HdWNxAAAAAElFTkSuQmCC menuSubIconGray = 280:iVBORw0KGgoAAAANSUhEUgAAAAYAAAALCAYAAABcUvyWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACVSURBVBiVY5i6dOnEhoYGJgY0wMTAwJgnpqq6YObMmaxoEgwM/xkYY//w8K7tW7WKE0UCCnzZf//ZMXPVKn4GBgYGxqlLl/1HM/4q0x8WdwxLGRgYtP+x/JmPTeIq0x+WRHSJQyysLNaZ8WFPkSU2/2Rl8UgPC/sIdxUjw//FLF8+BxeFhX2HK5u2ZFnX////GdEtAgDKqy21io/rDwAAAABJRU5ErkJggg-- iconMenuChecked = 246:iVBORw0KGgoAAAANSUhEUgAAAAgAAAAQCAYAAAArij59AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABzSURBVCiRzc6xDUEBFIXhjxhAp6UUjSEkbwSjmIDEBFaxgNIYKEWhlKO5LxJ5r+aU9z85/+X3GfSjLDDug1NyJ5cuOCInErJBDmRHSpd9wSMZIuc6bElDXuRGJu3kjFyr9KzC6tu7JI/PUvfnc7Iu71/lDbA1NqOlVrCQAAAAAElFTkSuQmCC iconMenuCheckedGray = 299:iVBORw0KGgoAAAANSUhEUgAAAAgAAAAQCAYAAAArij59AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACoSURBVCiRxY4hjgJBFAXrd2YMiiOsJTgEAvF7xqJJUGQvsQoPIcFhOAEWT7KTTPoCHAEJa1es7LcKNYOmbL3kFbwfeyXquh4Dw95BVVUfkq7AX+iRhaQTMJR0CO5+jDFun3eSNsBM0iWltC/MbApMYowKIaSc8xfwKMvyE8hB0gK4A+uc8xnAzFZN0/wAhJTSzczmwC8wAHZt2353yt195O5LoBP+bv4BnNI5/xB5g9MAAAAASUVORK5CYII- clCheckboxBack = $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFC0C0C0 clCheckboxTxt = $FF000000 clCheckboxTxtGray = $FF808080 cbIconSize = 13 cbMargin = 2 borderCheckbox = 2 iconChecked = 282:iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACXSURBVCiRzc89DgFhEIDhVy/Z0gEUolFIuIBCotNKFC6goHQdV9BxD41Cp1gVBRF5NRPZbMh+jcR08/NMZuDPwgm4A1upoAveQMF5CqiD+wAHMCs2M3AFdkpoHeAO9ssbF9E8g+2ozaImuPx0RhPMY+AIDsFr5Buw9u3+HngpbBc8gY2qx0fgI8ATHFSANxyDW3CaCH4YL0VGUkYKfrkaAAAAAElFTkSuQmCC iconCheckedGray = 404:iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAERSURBVCiRvdAhS0NhFIfx57zvhYUJBs0uGMTqB9h2LwMR7KJLbmAQP4FN8EOYBItNEAQx7N67G9UmliHKxbYomOS955iUaZgW/bcD51ce+K/Jb57iON5S1b5zbjfP81H0E0iSZEVVj0WkBqwCIzcNtNvtGVU9BWpm9uS9PwGIADqdzmwIYc97f5Gm6d2EOwKWzOzNe785GAxeABxAVVV94DCEkDebzWWAVqu1DXQBRGQ/y7KbLyGSJFlU1WtgzsyenXM7ZnYG1M3ssiiKdcA+kAPIsuzRzNaAVxFZMLMroA6MoyjqTYJPBFAUxa2IbAABwMxURLppmo6/B/KTR1mWD41G415E5oGD4XB4Pq3u3+8d34hqDI8BY9gAAAAASUVORK5CYII- DefaultFont = 'Liberation Sans' : 13 : 2 : $0 |
Added freshlib/test_code0/unicode_emo.txt.
> | 1 | 😀😱: |
Added freshlib/test_code0/unicode_test.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 00000000011111111112222222222333333333344444444445555555555666666666677777777778 12345678901234567890123456789012345678901234567890123456789012345678901234567890 ;This is example text, aimed simply to show the features of the FreshEdit control. ;1. Word-wrap feature. It works only for the lines formated with word-wrap format. You can set/remove word-wrap format by Ctrl+W key. ;2. FreshEdit can save the format into the source file. The formating is transparent for FASM compiler, so you can compile the files without removing formating. ;3. FreshEdit uses UTF-8 encoding - see following samples: ;Russian: Я могу еÑÑ‚ÑŒ Ñтекло, оно мне не вредит. ;Yoruba: Mo lè jeÌ© dÃgÃ, kò nà pa mà lára. ;Greek: ΜποÏÏŽ να φάω σπασμÎνα γυαλιά χωÏίς να πάθω τίποτα. ;Québécois: J'peux manger d'la vitre, ça m'fa pas mal. ;Ukrainian: Я можу Ñ—Ñти Ñкло, Ñ– воно мені не зашкодить. ;English: I can eat glass and it doesn't hurt me. ;5. The bookmarks are saved with the text as well. Use Ctrl+B to set/remove a bookmark. ;6. Also FreshEdit, has code folding feature. proc SomeTestProcedure begin nop mov eax, 1234 return endp ;7. also, there are line numbers and breakpoint icons on the left margin of the editor. You can set/remove breakpoint with F2 key. nop nop int3 ; 8. Color themes: Click on "T" button to switch the color theme for the editor. ; 9. Zebra background - if you like such eye-candy things. Click on "Z" button in order to switch it on/off. proc AnotherTestProcedure begin xor eax, eax locals ; We have of course several folding levels. .x dd ? .y dd ? .rect TBounds endl mov ecx, 'ABCD' return endp ; 10. Click "#" to turn on/off the line numbers. ; 11. Ctrl-T will switch ON/OFF the whole left margin field. ; 12. Alt+Ins will switch the type of selection - line, char and block are supported for now. |
Added freshlib/testx/xprotocol.asm.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | ; _______________________________________________________________________________________ ;| | ;| ..:: Fresh IDE ::.. template project. | ;|_______________________________________________________________________________________| ; ; Description: FreshLib portable console application. ; ; Target OS: Any, supported by FreshLib ; ; Dependencies: FreshLib ; ; Notes: ;_________________________________________________________________________________________ include "%lib%/freshlib.inc" LIB_MODE equ GUI @BinaryType GUI, compact options.DebugMode = 1 options.DebugMode.DisableSHM = 0 options.ShowSizes = 1 include "%lib%/freshlib.asm" iglobal tplMainForm: ObjTemplate tfParent or tfEnd, TForm, frmMain, \ width = 800, \ height = 600, \ border = borderFull, \ Caption = 'Test form.', \ OnClose = MainFormBeforeCLose, \ OnDestroy = MainFormClosed, \ Visible = FALSE ObjTemplate tfChild, TEdit, edtOne, \ x=100, y = 200, \ width = 200, height = 32, \ Text = 'Example text', \ Visible = TRUE ObjTemplate tfChild or tfEnd, TButton, btnOne, \ x = 100, y = 100, \ width = 96, \ height = 32, \ TextAlign = dtfAlignCenter or dtfAlignMiddle, \ Caption = 'Button', \ OnClick = btnOneClick, \ Visible = TRUE endg start: InitializeAll call InitGUIApplication call GUI.Init ; create window: stdcall CreateFromTemplate, tplMainForm, 0 set ebx, TForm:Visible, TRUE call Run DebugMsg "Out of Run procedure." call TerminateGUI FinalizeAll stdcall TerminateAll, 0 proc MainFormClosed as TObject.OnDestroy begin DebugMsg "Application terminate!" call CloseGUIApplication return endp proc MainFormBeforeCLose as TForm.OnClose begin stdcall ShowMessage, [.self], smiQuestion, 'Close?', 'Do you really want to close this window?', smbYes or smbNo cmp eax, mrNo je .dont clc return .dont: stc return endp proc btnOneClick as TButton.OnClick begin get ecx, [edtOne], TEdit:Text set [frmMain], TForm:Caption, ecx stdcall StrDel, ecx return endp proc OutputVal, .ttl, .number, .format begin push eax stdcall FileWriteString, [STDOUT], [.ttl] stdcall NumToStr, [.number], [.format] push eax stdcall FileWriteString, [STDOUT], eax stdcall FileWriteString, [STDOUT], <txt 13, 10> stdcall StrDel ; from the stack pop eax return endp proc OutputList, .ttl, .list, .index begin push eax edx stdcall FileWriteString, [STDOUT], [.ttl] mov eax, [.index] mov edx, [.list] cmp eax, [edx] cmova eax, [edx] stdcall FileWriteString, [STDOUT], [edx+4*eax+4] stdcall FileWriteString, [STDOUT], <txt 13, 10> pop edx eax return endp proc OutputFormat begin movzx eax, [edi+xformat.depth] stdcall OutputVal, "Depth: ", eax, ntsDec or ntsUnsigned movzx eax, [edi+xformat.bpp] stdcall OutputVal, "Bits per pixel: ", eax, ntsDec or ntsUnsigned movzx eax, [edi+xformat.pad] stdcall OutputVal, "Scanline pad: ", eax, ntsDec or ntsUnsigned stdcall FileWriteString, [STDOUT], <txt 13, 10> add edi, sizeof.xformat return endp proc OutputVisual begin push ecx edx stdcall OutputVal, "Visual ID: ", [edi+xvisualtype.id], ntsHex or ntsUnsigned or ntsFixedWidth + 8 movzx eax, [edi+xvisualtype.class] stdcall OutputList, "Visual class: ", listVisClass, eax movzx eax, [edi+xvisualtype.bits_per_rgb] stdcall OutputVal, "Bits per RGB value: ", eax, ntsDec or ntsUnsigned movzx eax, [edi+xvisualtype.map_entries] stdcall OutputVal, "Colormap entries: ", eax, ntsDec or ntsUnsigned stdcall OutputVal, " Red mask: ", [edi+xvisualtype.red_mask], ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall OutputVal, "Green mask: ", [edi+xvisualtype.green_mask], ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall OutputVal, " Blue mask: ", [edi+xvisualtype.blue_mask], ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall FileWriteString, [STDOUT], <txt 13, 10> add edi, sizeof.xvisualtype pop edx ecx return endp proc OutputDepth begin push ecx edx movzx eax, [edi+xdepth.depth] stdcall OutputVal, "Depth: ", eax, ntsDec or ntsUnsigned movzx edx, [edi+xdepth.num_visual] stdcall OutputVal, "Visual types: ", edx, ntsDec or ntsUnsigned stdcall FileWriteString, [STDOUT], <txt 13, 10> movzx edx, [edi+xdepth.num_visual] add edi, sizeof.xdepth xor ecx, ecx test edx, edx jz .finish .vis_loop: call OutputVisual inc ecx cmp ecx, edx jne .vis_loop .finish: pop edx ecx return endp proc OutputScreen begin push ecx edx stdcall OutputVal, "Root window: ", [edi+xscreen.root_window], ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall OutputVal, "Default colormap: ", [edi+xscreen.colormap], ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall OutputVal, "White pixel: ", [edi+xscreen.white_pixel], ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall OutputVal, "Black pixel: ", [edi+xscreen.black_pixel], ntsHex or ntsUnsigned or ntsFixedWidth + 8 stdcall OutputVal, "Current input mask: ", [edi+xscreen.event_mask], ntsHex or ntsUnsigned or ntsFixedWidth + 8 movzx eax, [edi+xscreen.width_px] stdcall OutputVal, "Width [px]: ", eax, ntsDec or ntsUnsigned movzx eax, [edi+xscreen.height_px] stdcall OutputVal, "Height [px]: ", eax, ntsDec or ntsUnsigned movzx eax, [edi+xscreen.width_mm] stdcall OutputVal, "Width [mm]: ", eax, ntsDec or ntsUnsigned movzx eax, [edi+xscreen.height_mm] stdcall OutputVal, "Height [mm]: ", eax, ntsDec or ntsUnsigned stdcall OutputVal, "Root visual: ", [edi+xscreen.root_visual], ntsHex or ntsUnsigned or ntsFixedWidth + 8 movzx eax, [edi+xscreen.back_store] stdcall OutputVal, "Backing stores: ", eax, ntsDec or ntsUnsigned movzx eax, [edi+xscreen.save_under] stdcall OutputVal, "Save unders: ", eax, ntsDec or ntsUnsigned movzx eax, [edi+xscreen.root_depth] stdcall OutputVal, "Root depth: ", eax, ntsDec or ntsUnsigned movzx edx, [edi+xscreen.num_depths] stdcall OutputVal, "Allowed depths: ", edx, ntsDec or ntsUnsigned stdcall FileWriteString, [STDOUT], <txt 13, 10> movzx edx, [edi+xscreen.num_depths] add edi, sizeof.xscreen xor ecx, ecx test edx, edx jz .finish .depth_loop: call OutputDepth inc ecx cmp ecx, edx jne .depth_loop .finish: pop edx ecx return endp |
Added freshlib/testx/xprotocol.fpr.
cannot compute difference between binary files