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 a2d66c9acb
|
2025-04-19
| ||
| 12:08 | Fixed bug causing hanging the bbcode parser. Leaf check-in: a2d66c9acb user: johnfound tags: FreshLibDev | |
|
2025-04-12
| ||
| 19:00 | Added BlendLine - simple line drawing procedure. check-in: f866f81edb 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 | |
|
| < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
> > > > > > > > > > > > > > > > > > > > > > > > | 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.
|
cannot compute difference between binary files
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 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). |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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] |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 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. |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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]
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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]
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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]
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > > > > | 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> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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;
}
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 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> |
> > > > > > | 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> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 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. |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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;
|
> > > > > > | 1 2 3 4 5 6 | <nowiki> <a name="data"><h1>FreshLib directory: simpledebug</h1></a> <p>This directory contains debugging utilities.</p> </nowiki> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
more than 10,000 changes
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
more than 10,000 changes
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
cannot compute difference between binary files
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
cannot compute difference between binary files
|
| | | < < | | < > > > | < > | < < < < < > | < < | | 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: ;_________________________________________________________________________________________ |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
;_________________________________________________________________________________________
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 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 ; |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < |
|
| < |
> > > > > > > > > > > > > > > > > > > > > > > > | 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
|
> > > > > > > > > > > > > > > > > > > > > > > | 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 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.
|
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 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
|
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> | 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ÿ{ÿ|ÿ}ÿ~ÿÿ€ÿÿ‚ÿƒÿ„ÿ…ÿ†ÿ‡ÿˆÿ‰ÿŠÿ‹ÿŒÿÿŽÿÿÿ‘ÿ’ÿ“ÿ”ÿ•ÿ–ÿ—ÿ˜ÿ™ÿšÿ›ÿœÿÿžÿŸÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáà Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€
|
> | 1 | ¬ ýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿ€ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚ |
> | 1 | ýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€ |
cannot compute difference between binary files
cannot compute difference between binary files
> | 1 | ýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿýÿÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€ |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
more than 10,000 changes
more than 10,000 changes
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
more than 10,000 changes
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > | 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 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 |
> > > > > > > | 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > | 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' |
|
| | | < < | | < < < < < > | < > | < < > | > > | > | 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
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 the 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
movzx eax, byte [edx+esi]
jz .continue ; 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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"
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
| ︙ | ︙ | |||
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.
|
| ︙ | ︙ |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| | | | | < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < | < < < < | < < < < < < < < < < < < < < < < | < < < < < < < < | < < | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | > | | | < < < < > | > > > > | | | > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | > > > > > > > > > > > < > > > | > > > > > > > | | < | | | | > | | | > > > > > > > > > > | > > > > > < < | > | | > | > > > > | > > > > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > | 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: ;_________________________________________________________________________________________ |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > | 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' |
|
| | | 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > | 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 |
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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| | > > > > > > | > | > | > | < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 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 ? |
| ︙ | ︙ |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 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
|
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' |
|
| > > > > | | > > > > > > > | 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 |
| ︙ | ︙ |
|
| > > > > | | > > > > > > > > > | 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 ? |
| ︙ | ︙ |
|
| > > > > | | > > > > > > > | 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 |
|
| > > > > > | < > > > | | > > | 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 |
| ︙ | ︙ |
|
| > > > > | | > > > > > > > > | 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
|
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 |
| ︙ | ︙ |
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 ? |
| ︙ | ︙ |
|
| > > > > | | > > > > > > > > | | 1 2 3 4 5 6 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 |
| ︙ | ︙ |
|
| > > > > | | > > > > > > > > | 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 |
| ︙ | ︙ |
|
| > > > > | | > > > > > > > > | 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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, \
;\
|
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 |
| ︙ | ︙ |
> > > > > > > > > > > > > > > > > > > > > > | 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 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 |
|
| < < < < < |
|
| < < < < < |
|
| > > > > > > > | > > > > > | > > > | | | | | | | > | | > > | 1 2 3 4 5 6 7 8 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' |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
}
|
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 |
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
|
| ︙ | ︙ |
|
| > > > > > > > > > > > > > | > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 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' |
> > > > > > > > > > > > > > > > > > > > > > > | 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'
}
|
> > > > > > > > > > > > > > > > > > > | 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' |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| > > > > > > > > > > > > > | | > > | > | > > > > > > > | | < < < > > | | | > | | > | > | > > > > > > > > > > > > > > | | > > > > > > | | > | > > > | > | > > > | > > > > > > > > > > > > > > > > > > | | | > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > | > > | > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > > | > > | > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| > > > > > > > > > > > > > > > > > | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > | > > > > | > | > > > > > > > > > > > > > > > > > | | > | | > > | > > | > > | | | > | > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > > > | > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > > > > > > > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > | | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > > > > > > > > > > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > > > > > > > > > > | > > | > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| > > > > > > > > > > > > > | > | > > > > > > > > > | | | | | > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > | > > > > | | | > > > > > > > > > | | | > > > > > > > > > > | > > | | | | > > > > > > > > > | | < > > > | > > | > > > | | > | > > > | > > > > > > > > > > | > > > > > > > > > > > > > > > > | > | | > > | > > > | > > > > > > > > > > > > > > | > > > > | > > > > > > > > | > > > > > > > | > > | > > | > > > > > | > | > > > > | > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > | > | > | > > | > > > > | | > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > | < > | > > > > > > > > | | > > < > | > > | | | > | | > > > | > | > | > > > > > > > > > > > | < < < < < < < < < < < < < < < < | > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > | 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' |
|
| > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > | > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | | | | > > | | | | | > > > < | | > | > > | | | > > > > > | > | < | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > | > > > > | | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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: 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 BlendHLine, .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 BlendVLine, .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
options.DebugMode = 1
macro __ClipLeft var1, var2, vmul, vdiv {
local ..exit
xor eax, eax
mov ebx, vdiv
sar ebx, 1
cmp eax, var1
jle ..exit
sub eax, var1
add var1, eax ; var1 := 0
imul eax, vmul
add eax, ebx
cdq
idiv vdiv
add var2, eax ; var2 = var2 + ((0-var1)*vmul+(vdiv/2))/vdiv
..exit:
}
macro __ClipRight var1, var2, vright, vmul, vdiv {
local ..exit
mov eax, vright
mov ebx, vdiv
sar ebx, 1
cmp eax, var1
jge ..exit
sub eax, var1
add var1, eax ; var1 = vright
imul eax, vmul
add eax, ebx
cdq
idiv vdiv
add var2, eax ; var2 = var2 + (vright-var1)*vmul+(vdiv/2))/vdiv
..exit:
}
; Bresenham's algorithm, without antialiasing.
proc BlendLine, .pImage, .x1, .y1, .x2, .y2, .color
.dx dd ?
.dy dd ?
.adx dd ?
.ady dd ?
.ii dd ? ; the increment for the main axis.
.ij dd ? ; the increment for the secondary axis.
.wli dd ? ; the left wrap value for i.
.wri dd ? ; the right wrap value for i.
.wlj dd ? ; the left wrap value for j
.wrj dd ? ; the right wrap value for j
begin
pushad
mov esi, [.pImage]
mov eax, [.x2]
mov edx, [.y2]
sub eax, [.x1]
jz .vline
sub edx, [.y1]
jz .hline
mov [.dx], eax
mov [.dy], edx
; Clip the line to the image size.
mov ecx, [esi+TImage.wrapW]
mov edi, [esi+TImage.wrapH]
dec ecx
dec edi
__ClipLeft [.x1], [.y1], [.dy], [.dx]
__ClipLeft [.y1], [.x1], [.dx], [.dy]
__ClipRight [.x1], [.y1], ecx, [.dy], [.dx]
__ClipRight [.y1], [.x1], edi, [.dx], [.dy]
__ClipLeft [.x2], [.y2], [.dy], [.dx]
__ClipLeft [.y2], [.x2], [.dx], [.dy]
__ClipRight [.x2], [.y2], ecx, [.dy], [.dx]
__ClipRight [.y2], [.x2], edi, [.dx], [.dy]
; Compute the new deltas, according to the clipped line.
mov eax, [.x2]
mov edx, [.y2]
sub eax, [.x1]
jz .vline
sub edx, [.y1]
jz .hline
mov [.dx], eax
mov [.dy], edx
mov ecx, eax
or ecx, edx
jz .finish ; both dx and dy are 0.
; Real image manipulation starts here.
stdcall LockImg, esi
jc .finish
test eax, eax ; delta X
jns @f
neg eax
@@:
test edx, edx ; delta Y
jns @f
neg edx
@@:
mov [.adx], eax
mov [.ady], edx
mov ebx, [esi+TImage.width]
shl ebx, 2
cmp [.dy], 0
jge @f
neg ebx
@@:
mov [.ii], ebx
mov [.ij], 4
cmp [.dx], 0
jge @f
neg [.ij]
@@:
mov ecx, [esi+TImage.wrapH]
mov edx, [esi+TImage.pPixels]
dec ecx
imul ecx, ebx
add ecx, edx
mov [.wri], ecx
mov [.wli], edx
mov ecx, [esi+TImage.wrapW]
xor edx, edx
dec ecx
shl ecx, 2
mov [.wlj], edx
mov [.wrj], ecx
mov edi, [.y1] ; edi is Y iterator.
add edi, [esi+TImage.orgY]
cmp edi, [esi+TImage.wrapH]
jl @f
sub edi, [esi+TImage.wrapH]
@@:
imul edi, ebx
add edi, [esi+TImage.pPixels] ; address of the Y line.
mov edx, [.x1] ; edx is X iterator
add edx, [esi+TImage.orgX]
cmp edx, [esi+TImage.wrapW]
jl @f
sub edx, [esi+TImage.wrapW]
@@:
shl edx, 2
cmp eax, [.ady] ; Here eax == [.adx]
jb .draw ; iterate by Y
; iterate by X - swap all the variables.
push [.ii] [.ij]
pop [.ii] [.ij]
push [.adx] [.ady]
pop [.adx] [.ady]
push [.wli] [.wlj]
pop [.wli] [.wlj]
push [.wri] [.wrj]
pop [.wri] [.wrj]
xchg edi, edx
.draw:
mov ecx, [.ady]
mov ebx, [.ady]
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
.loop:
movd mm6, [edi+edx] ; 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+edx], mm6
add edi, [.ii]
; wrap I if outside.
cmp edi, [.wli]
cmovl edi, [.wri]
cmp edi, [.wri]
cmovg edi, [.wli]
; Is it time to increment J?
sub ebx, [.adx]
jg .next
add ebx, [.ady]
; move J
add edx, [.ij]
; wrap J if outside
cmp edx, [.wlj]
cmovl edx, [.wrj]
cmp edx, [.wrj]
cmovg edx, [.wlj]
.next:
dec ecx
jnz .loop
emms
stdcall UnlockImg, esi
.finish:
popad
return
.hline:
stdcall BlendHLine, [.pImage], [.x1], [.x2], [.y1], [.color]
jmp .finish
.vline:
stdcall BlendVLine, [.pImage], [.y1], [.y2], [.x1], [.color]
jmp .finish
endp
options.DebugMode = 0
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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 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 |
|
| < < > | > | < > | > > > > > | | | < < < < < | > | 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
|
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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| > > > > > > > | | > | > > > > | > | > > > > | > > > | | > | > > | > > > > > | | > > > > | | > > > > > | > | > > > > > > > > < | > | | > | < < < < < | > | | > > | < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < < < < < < < < < < < < < | < | < < < < < < < < < < < < < | < < | < < < < < < < | < < < < < < < < < < < < < < < < | < < < < < < < < < < < < | < < < < < < | < < | | < < < < < < | < < < < < < < < < < < < | < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < | | < < < < | < | | < < < < < < < < < < | | | | < < < | < | < < | | < | | < | < < | | < | | < | | < < < < < < | | > | | | | < < | < > > > | > > | > > | > > > > > > > > | | | > > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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' |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
;_________________________________________________________________________________________
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > | 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 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 |
> | 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 | 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > | 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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 |
> > | 1 2 | ¡^RSQTUVWXYZ[\‘^_! N01F45D3E89:;<=>?O@ABC62LK7HMIGJ.&$%/ !"#,+(-)'* |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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' |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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"
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 BlendVLine, [.canvas], [.clip.top], [.clip.bottom], [.clip.left], [GUI.clGridLines+ebx] ; left
stdcall BlendVLine, [.canvas], [.clip.top], [.clip.bottom], ecx, [GUI.clGridLines+4+ebx] ; right
stdcall BlendHLine, [.canvas], [.clip.left], [.clip.right], [.clip.top], [GUI.clGridLines+ebx] ; top
stdcall BlendHLine, [.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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 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'
|
> > > > > > > > > > > > > > > > > > | 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 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>
|
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 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>
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 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>
|
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > | 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
|
cannot compute difference between binary files
> > > | 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> |
> > > > > | 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> |
> > > > > > > > | 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>
|
> > > | 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> |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 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
|
> > > > | 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> |
> > > > | 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> |
> > > > | 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> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 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;
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 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;
}
|
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > | 1 2 | #!/bin/bash ln -s -f ./skin_dark.css ./skin.css |
> > | 1 2 | #!/bin/bash ln -s -f ./skin_light.css ./skin.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;
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 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;
}
|
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > | 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> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 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' |
> > > > > > > > > > > > > > > > > > > > | 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' |
> > > > > > > > > > > > > > > > > > > > > > > | 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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!
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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' |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > | 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > | 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
|
| < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > | 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > | 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > | 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > | 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 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'
|
|
| < |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 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
}
|
> > > > > > > > > > > > > > | 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: ;_________________________________________________________________________________________ |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
}
|
> > > > > > > > > > > > > > | 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: ;_________________________________________________________________________________________ |
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)
|
| ︙ | ︙ |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 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
}
|
|
| > > > > > | | > > > > > > > > > > > < | > > | | > > > > > > > > > > > > > > > > > > > > > | | | > > > > > > > | > > > > > > | > > > > > > > > > > | | | | | < > > | | < | < < < > | > > > > > > > | > | > | > > > > > | < | | > > | > > > > | > > > > | | | > > > > > > | > > > > > | > > > > > > > > | | > > | | | | | > | | | | | | | | | > > | | | > > | > | > > > > > > | | | > > | | > > | > > > > > > | > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > | 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
}
|
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' |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
}
|
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
|
| ︙ | ︙ |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
;}
|
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 }
|
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
}
|
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| > > > > > > > > > > > > > | > | 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' |
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
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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
}
|
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
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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
|
|
| | | | | < < | < < < < < < < < < | < < | < | | < | 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
}
|
|
| | | > > > > > > > > > | > | | 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
|
| ︙ | ︙ |
|
| > > > > > | | > > > > > > > | > > | > > > > > > > > > > > > > > > > < | < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 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
|
|
| > > > > > > > > > > > > > > > > | | > > > > | 1 2 3 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' |
|
| < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
|
| < < < < < < < < < < |
|
| > > > > > > > | > > | > > > | > > > > > > > > > > > | > | > > > | > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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. |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
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
|
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
|
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
|
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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 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
|
> > > > > > > > > > > > > > > > > > > > > > | 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > | 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' |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > | 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| | | < < | | < < < < < > | < > | > > | > | < < | > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| | | < < | | < < < < < > | < < < < < < < | > | < < < | | > > > > | | | > < | | < | > > > < > | > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 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
|
|
| | | < < | | < < < < < > | < > | < > > > | < < | > > > > > > > > | > > > | | | > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > > > > > < < < < | | < < < | < < < < < < < < < | > > > > > > > > > > > > > > > > > > > > > > > > > > < | > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > | > > > > > | > > > > > > > > > > > > > > > > > > > | > > > > > | > > | | > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 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
|
|
| | | < < | | < < < < < < > | < > | > > > > | < < < | > > > > > > > | > < > | > < < < < < < < | | < > > > > > > > > > < < < < < > > > | | < < < < > < | | | > > > | > > > > | > > | > > | | > > | < < < < < | > | | | | < > > > | > | | < | | < < > > | < < < | | | | > < | | < < < < < | < > < | | | | > > > > > > > > > | > > > > > | > | > > > > > > > > > > | < < < | | | | | | > | | | > < | | | | > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > | 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' |
> > > > > > > > > > > > > > > > > > > > > > | 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 |
|
| > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | < > | > < | < | < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
|
| | | < < | | < > > > | < > | < > | | < | | > > > > > > > > > > > > > > > > > | | > > > | > | | | | | > > | > | > > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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) който позволÑва да Ñе редактират Ñтринговете за различни езици от едно мÑÑто.'>
|
cannot compute difference between binary files
cannot compute difference between binary files
> > | 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> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
; _______________________________________________________________________________________
;| |
;| ..:: 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"
EMOTICONS_PATH equ '/~/_images/emoticons/' ; defines the emoticons path for the bbcode translator.
HTML_IMG_ATTR equ ' ' ; HTML_IMG_ATTR equ ' crossorigin="anonymous" ' - notice the spaces!
include "%lib%/data/bbcode.asm"
include "%lib%/data/minimag.asm"
include "hash_function.asm"
FILE_READ_CHUNK = 4096
dummy = tagPara
start:
InitializeAll
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, SanitizeURL
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
proc SanitizeURL, .pURL, .len
.split TSplitURL
begin
pushad
lea eax, [.split]
stdcall StrSplitURLMem, [.pURL], [.len], eax
stdcall StrNew
mov ebx, eax
cmp [.split.scheme], 0
je .default_scheme
stdcall StrCompNoCase, [.split.scheme], txt 'https'
jc .scheme_ok
stdcall StrCompNoCase, [.split.scheme], txt 'http'
jnc .end_url ; return empty URL
.scheme_ok:
stdcall StrCat, ebx, [.split.scheme]
stdcall StrCat, ebx, txt '://'
jmp .add_host
.default_scheme:
cmp [.split.host], 0
je .add_path
stdcall StrCat, ebx, txt 'https://'
.add_host:
cmp [.split.host], 0
je .add_path
stdcall StrURLEncode, [.split.host]
stdcall StrCat, ebx, eax
stdcall StrDel, eax
cmp [.split.port], 0
je .add_path
stdcall StrToNum, [.split.port]
test eax, eax
js .add_path
cmp eax, $ffff
ja .add_path
mov ecx, eax
stdcall StrLen, [.split.port]
cmp eax, edx
jne .add_path
stdcall NumToStr, ecx, ntsDec or ntsUnsigned
stdcall StrCat, ebx, txt ':'
stdcall StrCat, ebx, eax
stdcall StrDel, eax
.add_path:
cmp [.split.path], 0
je .path_ok
stdcall StrCat, ebx, [.split.path]
.path_ok:
stdcall StrPtr, ebx
mov ecx, [eax+string.len]
sub eax, sizeof.string
add ecx, sizeof.string
cmp [.split.query], 0
je .add_fragment
stdcall StrCat, ebx, txt '?'
stdcall StrCat, ebx, [.split.query]
.add_fragment:
cmp [.split.fragment], 0
je .end_url
stdcall StrCat, ebx, txt "#"
stdcall StrURLEncode, [.split.fragment]
stdcall StrCat, ebx, eax
stdcall StrDel, eax
.end_url:
stdcall StrDel, [.split.scheme]
stdcall StrDel, [.split.host]
stdcall StrDel, [.split.port]
stdcall StrDel, [.split.path]
stdcall StrDel, [.split.query]
stdcall StrDel, [.split.fragment]
mov [esp+4*regEAX], ebx
popad
return
endp
|
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > | 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 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>
|
> > > > | 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. |
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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:
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > | 1 2 | TestMarkdown < test.markdown > TestMarkdown.html pause |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 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
|
> > > > > > > > > > > > > > > > > > | 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
|
> > > | 1 2 3 | This is test file line 1 This is the second line of this file. FreshLib is really portable assembly language library. |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 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
|
cannot compute difference between binary files
> > > > | 1 2 3 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 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ;FreshProject_v3 Compiler.Memory = 131072 Compiler.BinaryNameAuto = 1 Compiler.BinaryName = "" Compiler.MainFile = "TestGrids.asm" Aliases.TargetOS = "Linux|Win32|KolibriOS" Aliases.lib = ".." ProjectTree.Imports/ = 8 ProjectTree.Imports/Linux/ = 8,"../imports/Linux/libX11.inc","../imports/Linux/libFT.inc","../imports/Linux/libFC.inc","../imports/Linux/xshm.inc","../imports/Linux/pthreads.inc","../imports/Linux/libc.inc","../imports/Linux/libXft.inc" ProjectTree.equates/ = 8,"../equates/Linux/_libFT.inc","../equates/Linux/_xshm.inc","../equates/Linux/_ipc.inc","../equates/Linux/allequates.inc" ProjectTree.Macros/ = 9,"../macros/_realobjects.inc" ProjectTree.Data/ = 6,"../data/counter_array.asm" ProjectTree.GUI/ = 6,"../gui/TListView.asm","../gui/TGrid.asm","../gui/TTreeView.asm","../gui/all.asm","../gui/TProgressbar.asm","../gui/textcaret.asm","../gui/mouse.asm","../gui/TEdit.asm","../gui/TLabel.asm","../gui/TImageLabel.asm","../gui/dialogs.asm","../gui/Main.asm","../gui/TButton.asm","../gui/ObjTemplates.asm","../gui/TObject.asm","../gui/TWindow.asm","../gui/TForm.asm" ProjectTree.GUI/Linux/ = 8,"../gui/Linux/mouse.asm","../gui/Linux/Main.asm","../gui/Linux/windows.asm" ProjectTree.GUI/Win32/ = 6 ProjectTree.GUI/themes/ = 6,"../gui/themes/flat_gui.asm","../gui/themes/win_gui.asm" ProjectTree.Graphics/ = 6,"../graphics/fonts.asm","../graphics/draw.asm","../graphics/text.asm","../graphics/images.asm" ProjectTree.Graphics/Linux/ = 8,"../graphics/Linux/fonts.asm","../graphics/Linux/text.asm","../graphics/Linux/images.asm" ProjectTree.System/ = 6,"../system/timers.asm" ProjectTree.System/Linux/ = 8,"../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 |
; _______________________________________________________________________________________
;| |
;| ..::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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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'
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 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
|
> > > > | 1 2 3 4 |
proc PrepareDemo
begin
return
endp
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
; _______________________________________________________________________________________
;| |
;| ..:: 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
call TerminateGUI
FinalizeAll
stdcall TerminateAll, 0
proc FormDestroy as TObject.OnDestroy
begin
inc [fGlobalTerminate]
return
endp
CLR = $ffff0080
CLR2= $ff80ff80
CLR3 = $a0ff8000
CLR4 = $a00080ff
proc DemoPaint as TWindow.OnSelfPaint
begin
; stdcall BlendImageTileWrap, [.pDstImage], [.xDst], [.yDst], [.width], [.height], [imgBackground]
; stdcall BlendHLine, [.pDstImage], 20, 200, 50, CLR
; stdcall BlendHLine, [.pDstImage], 20, 200, 60, CLR
; stdcall BlendHLine, [.pDstImage], 20, 200, 70, CLR
;
; stdcall BlendVLine, [.pDstImage], 20, 200, 50, CLR2
; stdcall BlendVLine, [.pDstImage], 20, 200, 60, CLR2
; stdcall BlendVLine, [.pDstImage], 20, 200, 70, CLR2
; stdcall BlendLine, [.pDstImage], -10, 0, 1000, 500, $ff000000
; stdcall BlendLine, [.pDstImage], 1000, 500, -10, 0, $ff000000
; stdcall BlendLine, [.pDstImage], 10, -200, 1000, 500, $ff000000
;
; stdcall BlendLine, [.pDstImage], -10, -20, 1000, -500, $ff000000
mov ecx, 300
mov ebx, 300
.loop:
stdcall BlendLine, [.pDstImage], ecx, 0, ebx, ecx, CLR3
stdcall BlendLine, [.pDstImage], 0, ecx, ecx, ebx, CLR4
stdcall BlendLine, [.pDstImage], ebx, 0, 0, ecx, CLR3
stdcall BlendLine, [.pDstImage], ebx, 0, ecx, ebx, CLR4
sub ecx, 10
jge .loop
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
|
> > > > > > > > > > > > > | 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 = "TestLines.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" |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > | 1 2 3 4 5 | include "../macros/_datamacros.inc" mytext StripText "TestStripMacro.sql", SQL |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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;
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files
> > > > > | 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
|
> > > > > > > > | 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: Я можу Ñ—Ñти Ñкло, Ñ– воно мені не зашкодить. Това е един много дълъг параграф, в който Ñе говори за това, че мога да конÑумирам неорганични Ñиликатни аморфни материали без вреда за здравето или материалното ми положение. |
> | 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. |
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 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> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 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>
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 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>
|
> > > > > > > > > > | 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. " . ; |
cannot compute difference between binary files
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 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 |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 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 |
> | 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 |
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.
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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
|
cannot compute difference between binary files