Compare commits
14 Commits
d5c1325b02
...
add-licens
Author | SHA1 | Date | |
---|---|---|---|
1e663f36c8 | |||
00c2cfbcfc | |||
c398a2bbf4 | |||
58cf25fe43 | |||
8da45bab3e | |||
5abc319817 | |||
ff625706c0 | |||
81dafb3025 | |||
58e2d0b844 | |||
7720e38868 | |||
02b2395ef1 | |||
293e1d195a | |||
5cf6c3baf9 | |||
8376fed87d |
@@ -76,22 +76,15 @@ jobs:
|
||||
g++ -o /home/autobuild/tools/win32/bin/objconv -O2 *.cpp
|
||||
chmod +x /home/autobuild/tools/win32/bin/objconv
|
||||
|
||||
- name: Build and install kerpack
|
||||
- name: Build and install kerpack and kpack
|
||||
if: steps.cache-toolchain.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
export PATH=/home/autobuild/tools/win32/bin:$PATH
|
||||
cd ${{ gitea.workspace }}/programs/other/kpack/kerpack_linux/
|
||||
make
|
||||
chmod +x kerpack
|
||||
mv kerpack /home/autobuild/tools/win32/bin/.
|
||||
|
||||
- name: Build and install kpack
|
||||
if: steps.cache-toolchain.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
export PATH=/home/autobuild/tools/win32/bin:$PATH
|
||||
cd ${{ gitea.workspace }}/programs/other/kpack/linux/
|
||||
bash build.sh
|
||||
chmod +x kpack
|
||||
mv kerpack /home/autobuild/tools/win32/bin/.
|
||||
mv kpack /home/autobuild/tools/win32/bin/.
|
||||
|
||||
- name: Build and install clink
|
||||
|
@@ -66,6 +66,17 @@ to the end commit message body on a new line.
|
||||
|
||||
Use **rebase** to keep your branch up to date.
|
||||
|
||||
## Licensing
|
||||
|
||||
For new source code files and for existing ones without a license, you need to add the following header to the beginning of the file:
|
||||
```asm
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; Program - Brief description.
|
||||
; Copyright (C) 2011-2025 KolibriOS team
|
||||
```
|
||||
|
||||
Be careful when setting copyright and date interval. Review the file's history to verify its origin.
|
||||
|
||||
## Conclusion
|
||||
|
||||
We hope this small instructions will help you to get familiar with KolibriOS contribution rules and inspire you to participate in the life of our project.
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# KolibriOS
|
||||
|
||||
[](./COPYING.TXT)
|
||||
[](./LICENSE)
|
||||
[](https://git.kolibrios.org/KolibriOS/kolibrios/actions)
|
||||
|
||||
KolibriOS is a hobby operating system for x86-compatible computers, which is currently being developed by a small but passionate team of enthusiasts.
|
||||
|
@@ -85,6 +85,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
|
||||
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"},
|
||||
{"SETTINGS/SYSPANEL.INI", "ru_RU/settings/syspanel.ini"},
|
||||
}) elseif build_type == "en_US" then tup.append_table(img_files, {
|
||||
{"WELCOME.HTM", VAR_DATA .. "/" .. build_type .. "/welcome.htm.kpack"},
|
||||
{"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"},
|
||||
{"DEVELOP/BACKY", SRC_PROGS .. "/develop/backy/Backy"},
|
||||
{"File Managers/KFAR.INI", "common/File Managers/kfar.ini"},
|
||||
@@ -156,7 +157,7 @@ extra_files = {
|
||||
{"kolibrios/3D/info3ds/OBJECTS.PNG", SRC_PROGS .. "/develop/info3ds/objects.png"},
|
||||
{"kolibrios/3D/info3ds/TOOLBAR.PNG", SRC_PROGS .. "/develop/info3ds/toolbar.png"},
|
||||
{"kolibrios/3D/info3ds/FONT8X9.BMP", SRC_PROGS .. "/fs/kfar/trunk/font8x9.bmp"},
|
||||
{"kolibrios/3D/blocks/", "../programs/bcc32/games/blocks/bin/*"},
|
||||
{"kolibrios/3D/blocks/blocks.kex", "../programs/bcc32/games/blocks/bin/blocks.kex"},
|
||||
{"kolibrios/3D/blocks/models/", "../programs/bcc32/games/blocks/models/*"},
|
||||
{"kolibrios/3D/md2view/", "common/3d/md2view/*"},
|
||||
{"kolibrios/3D/md2view/md2_model/", "common/3d/md2view/md2_model/*"},
|
||||
@@ -630,10 +631,10 @@ tup.append_table(extra_files, {
|
||||
{"kolibrios/utils/calcplus", VAR_PROGS .. "/other/calcplus/calcplus"},
|
||||
{"kolibrios/utils/kfm/kfm", VAR_PROGS .. "/fs/kfm/trunk/kfm"},
|
||||
{"kolibrios/utils/tedit/t_edit", VAR_PROGS .. "/other/t_edit/t_edit"},
|
||||
{"kolibrios/3D/blocks/block.bin", VAR_PROGS .. "/bcc32/games/blocks/block.bin"}
|
||||
})
|
||||
-- For russian build, add russian-only programs.
|
||||
if build_type == "ru_RU" then tup.append_table(img_files, {
|
||||
{"PERIOD", VAR_PROGS .. "/other/period/trunk/period"},
|
||||
{"GAMES/KLAVISHA", VAR_PROGS .. "/games/klavisha/klavisha"},
|
||||
{"DEVELOP/EXAMPLES/TESTCON2", VAR_PROGS .. "/develop/libraries/console_coff/examples/testcon2_rus"},
|
||||
}) else tup.append_table(img_files, {
|
||||
@@ -641,6 +642,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
|
||||
}) end
|
||||
|
||||
if build_type == "ru_RU" then tup.append_table(extra_files, {
|
||||
{"kolibrios/utils/period", VAR_PROGS .. "/other/period/trunk/period"},
|
||||
{"kolibrios/games/Dungeons/Dungeons", VAR_PROGS .. "/games/Dungeons/Dungeons"},
|
||||
}) end
|
||||
|
||||
@@ -666,6 +668,7 @@ tup.append_table(img_files, {
|
||||
{"EASYSHOT", VAR_PROGS .. "/cmm/misc/easyshot.com"},
|
||||
{"MOUSECFG", VAR_PROGS .. "/cmm/mousecfg/mousecfg.com"},
|
||||
{"BARSCFG", VAR_PROGS .. "/cmm/barscfg/barscfg.com"},
|
||||
{"SEARCH", VAR_PROGS .. "/cmm/misc/search.com"},
|
||||
{"SYSPANEL", VAR_PROGS .. "/cmm/misc/software_widget.com"},
|
||||
{"SYSMON", VAR_PROGS .. "/cmm/sysmon/sysmon.com"},
|
||||
{"TMPDISK", VAR_PROGS .. "/cmm/tmpdisk/tmpdisk.com"},
|
||||
|
2
data/en_US/Tupfile.lua
Normal file
2
data/en_US/Tupfile.lua
Normal file
@@ -0,0 +1,2 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
tup.rule("welcome.htm", "cp %f %o" .. tup.getconfig("KPACK_CMD"), "welcome.htm.kpack")
|
@@ -12,6 +12,7 @@
|
||||
23 Game Center |allgames
|
||||
60 System panel |syspanel
|
||||
18 Documentation |docpack
|
||||
49 Search |search
|
||||
53 Run |run
|
||||
04 Shut down |end
|
||||
#1 **** DEMOS
|
||||
|
@@ -1,18 +1,23 @@
|
||||
<html><title>Welcome notes</title><body bgcolor=#fff>
|
||||
<html>
|
||||
<title>Welcome notes</title>
|
||||
|
||||
<h1><font color=1BB71A>Welcome to KolibriOS</font> 0.8.0.0 beta</h1>
|
||||
<pre>
|
||||
<body bgcolor=#fff>
|
||||
|
||||
<h1>
|
||||
<font color=1BB71A>Welcome to KolibriOS</font>
|
||||
</h1>
|
||||
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">
|
||||
Dear friends,
|
||||
|
||||
What you see now is the most compact operating system in the whole world. Kolibri is a piece of programming art that is based on logic and coffee.
|
||||
What you see now is the most compact operating system in the whole world. KolibriOS is a piece of programming art that is based on logic and coffee.
|
||||
|
||||
As no one reads manuals, I'm here to help with the most common issues that new users of KolibriOS are facing. This document is also a required read for any <b>YouTube blogger</b> who wants to make a review of the system :)
|
||||
As no one reads manuals, I'm here to help with the most common issues that new users of KolibriOS are facing. This document is also required to read for any <b>YouTube blogger</b> who wants to make a review of the system :)
|
||||
|
||||
<dd><h3><kosicon n=5> Floppy version</h3>
|
||||
The asterisk [*] in the Menu means the app isn't available in the Floppy version, only in the Big distro (Flash/ISO/UEFI-HDD). Not all programs are available via Menu to encourage you to explore KolibriOS files by yourself.
|
||||
|
||||
<h3><kosicon n=25> If you have problems with USB</h3>
|
||||
Only USB1.1 and USB2 ports are supported, not USB3+. And yep, the USB driver is written entirely in assembler. Some motherboards have options like "USB Legacy Support" or something similar, which may help the system detect your device. Also, some ports on your motherboard may work while others may not, only G-d knows why. So, play with the BIOS/UEFI settings and try different ports.
|
||||
Only USB 1.1 and USB 2.0 ports are supported, not USB 3+. And yep, the USB driver is written entirely in assembler. Some motherboards have options like "USB Legacy Support" or something similar, which may help the system detect your device. Also, some ports on your motherboard may work while others may not, only G-d knows why. So, play with the BIOS/UEFI settings and try different ports.
|
||||
|
||||
<h3><kosicon n=7> Sound</h3>
|
||||
List of supported devices:
|
||||
@@ -21,58 +26,70 @@ List of supported devices:
|
||||
- SIS PCI audio (Sis 7012)
|
||||
- Creative labs EMU10K1X (Dell OEM)
|
||||
- Media Forte FM801
|
||||
- ISA Sound Blaster 16. Only THIS particular model works, not other SB cards that have software SB16-emulation
|
||||
- ISA Sound Blaster 16
|
||||
<i>Only THIS particular model works,
|
||||
not other cards that have software SB16-emulation</i>
|
||||
|
||||
<h3><kosicon n=61> Video</h3>
|
||||
By default, you can change the resolution only on the blue boot screen. The modes listed there are provided by the video card's BIOS. It is impossible to 'simply add additional screen modes to the list'. If video card's BIOS doesn't provide some modes then you need a driver. It is not possible to write a generic video card driver. Each driver must be written for a specific video card model.
|
||||
Intel and AMD drivers for some video cards are ported from Linux and are available in the Big distro. Check SYSPANEL. Features: change resolution in Kolibri, hardware cursor (not actual anymore), bit-blit operations accelerated.
|
||||
By default, you can change the resolution only on the blue boot screen. The modes listed there are provided by the video card's BIOS. It is impossible to 'simply add additional screen modes to the list'. If video card's BIOS doesn't provide some modes then you need a driver. It is not possible to write a generic video card driver. Separate driver must be written for each specific video card model.
|
||||
Intel and AMD drivers for some video cards are ported from Linux and are available in the Big distro.
|
||||
|
||||
Check SYSPANEL. Features: ability to change resolution in KolibriOS, hardware cursor (not actual anymore), bit-blit operations acceleration.
|
||||
|
||||
<h3><kosicon n=25> Wi-Fi</h3>
|
||||
Not supported. You have to know that the Wi-Fi specification is so complex that it is almost impossible to write the code for it from scratch. Only big OSes like Windows / Linux / BSD have it. MacOS and Haiku just ported the BSD drivers. I don't say porting them in KolibiOS is not possible, but the required effort is going to be tremendous.
|
||||
Not supported. You have to know that the Wi-Fi specification is so complex that it is almost impossible to write the code for it from scratch. Only big OSes like Windows / Linux / BSD have it. MacOS and Haiku just ported the BSD drivers. I don't say porting them to KolibiOS is not possible, but the required effort is going to be tremendous.
|
||||
|
||||
<h3><kosicon n=25> LAN/Ethernet</h3>
|
||||
Supported devices:
|
||||
3c59x 3Com Fast EtherLink (3c59x/450/555/556/575/900/905/980)
|
||||
ar81xx Atheros 8161/8162/8171/8172
|
||||
dec21x4x* Accton en1207B-TX, DEC 21140,.., VirtualPC
|
||||
forcedeth* nVidia nForce chipset integrated ethernet
|
||||
i8255x Intel eepro/100 (i8255x, i82562, i82801,..), QEMU
|
||||
i8254x Intel PRO/1000 (i8254x), Virtualbox, BOCHS, QEMU
|
||||
mtd80x Myson MTD803
|
||||
pcnet32 AMD PCnet (79c970, 79c978, 79c973,..), Virtualbox, QEMU
|
||||
r6040 RDC Semiconductors R6040
|
||||
rhine VIA Rhine II and III
|
||||
rtl8029 Realtek 8029/8019, ne2000 PCI, BOCHS, QEMU
|
||||
rtl8139 Realtek 8139 and clones, QEMU
|
||||
rtl8169 Realtek 8110/8111/8167/8168/8169
|
||||
sis900 SiS900, 7016
|
||||
* - in development.
|
||||
Blessed be our Flemish friend Jeffrey, who has written most of the Network staff by himself: stack, drivers, and a lot of apps (except WebView).
|
||||
List of supported devices:
|
||||
- 3c59x 3Com Fast EtherLink (3c59x/450/555/556/575/900/905/980)
|
||||
- ar81xx Atheros 8131/8132/8151/8152/8161/8162/8171/8172
|
||||
Killer E2200/E2400/E2500
|
||||
- dec21x4x* Accton en1207B-TX, DEC 21140, ..., VirtualPC
|
||||
- forcedeth* Nvidia nForce chipset integrated Ethernet
|
||||
- i8255x Intel eepro/100 (i8255x, i82562, i82801, ...), QEMU
|
||||
- i8254x Intel PRO/1000 (i8254x), Virtualbox, BOCHS, QEMU
|
||||
- mtd80x Myson MTD803
|
||||
- pcnet32 AMD PCnet (79c970, 79c978, 79c973, ...), Virtualbox, QEMU
|
||||
- r6040 RDC Semiconductors R6040
|
||||
- rhine VIA Rhine II and III
|
||||
- rtl8029 Realtek 8029/8019, ne2000 PCI, BOCHS, QEMU
|
||||
- rtl8139 Realtek 8139 and clones, QEMU
|
||||
- rtl8169 Realtek 8110/8111/8167/8168/8169
|
||||
- sis900 SiS900, 7016
|
||||
|
||||
* - in development
|
||||
|
||||
Blessed be our Flemish friend Jeffrey, who has written most of the Network staff by him: stack, drivers, and a lot of apps (except WebView).
|
||||
|
||||
<h3><kosicon n=12> WebView</h3>
|
||||
It was never intended to be a browser but rather a Help Center that uses HTML markup. It fits well this purpose, doesn't it? According to current WebView's codebase (that was my first app ever) it will never become a normal web-browser. Please help us and write/port smth good. Good undertake will be to finish Netsurf port.
|
||||
It was never intended to be a browser, but rather a Help Center that uses HTML markup. It fits this purpose well, doesn't it? According to current WebView's codebase (that was my first app ever) it will never become a normal web browser. Please help us and write/port something good. For example, it will be nice try to finish Netsurf port.
|
||||
|
||||
<h3><kosicon n=9> How did you achieve so much while being so small?</h3>
|
||||
- Kernel, almost all drivers and most applications are written in assembly.
|
||||
- Files in IMG are packed via the LZMA algorithm from 7-Zip. They are unpacked to RAM when accessed.
|
||||
- Images are manually optimized by hand: postering, dithering and other techniques were used.
|
||||
- Kernel, almost all drivers and most applications are written in assembly language
|
||||
- Files in IMG are packed via the LZMA algorithm from 7-Zip. They are unpacked to RAM when accessed
|
||||
- Most of the images are manually optimized: posterization, dithering and other techniques were used
|
||||
- Files names in IMG fit 8.3 naming convention (name.extension) which doesn't use additional FAT12 space
|
||||
- Image files are combined into a single file
|
||||
- Compact binary header of applications, no sections
|
||||
- Resources are reused, and file duplication is avoided, for example:
|
||||
~ Shared libraries
|
||||
~ KFM2 is an Eolite just with another appearance
|
||||
~ Memory app uses system icons as images
|
||||
~ one app for APP+, Games and System panel
|
||||
~ Many apps use shared libraries
|
||||
~ KFM2 and Eolite are a single app, just with different appearance
|
||||
~ APP+, Games Center and System Panel are a single app also
|
||||
~ Memory Blocks game uses system icons as images
|
||||
|
||||
|
||||
See more <a href=http://wiki.kolibrios.org/wiki/Hardware_Support>http://wiki.kolibrios.org/wiki/Hardware_Support</a>
|
||||
</dd>
|
||||
|
||||
<h3><kosicon n=13> Last words</h3>
|
||||
<font bg=#F9F0A3>We want to express our gratitude to every KolibriOS contributor. Also we would like to give special thanks to Ville M. Turjanmaa, the author of MenuetOS, the predecessor of our system. Finally, we want to thank you, the brave and curious users, we are doing it all for you!
|
||||
<font bg=#F9F0A3>We want to express our gratitude to every KolibriOS contributor. Also, we would like to give special thanks to Ville M. Turjanmaa, the author of MenuetOS, the predecessor of our system.
|
||||
|
||||
Finally, we want to thank you, brave and curious users, as we are doing it all for you!
|
||||
|
||||
Have fun!</font>
|
||||
|
||||
Sincerely yours,
|
||||
KolibriOS Team
|
||||
|
||||
<img src=/kolibrios/res/system/signs.png alt="You have to use Big Distro to see this image!">
|
||||
<!-- Somewhere deep in the Galaxy stars light up and go out, empires are born and turn to dust. In this impenetrable darkness and decadence, there are people who are still working on Kolibri. Many years will pass and perhaps you and I will no longer be here, and our great-grandchildren will ask "Who were those insane who made such an incredible OS?" -->
|
||||
<!-- Somewhere deep in the Galaxy stars light up and go out, empires are born and turn to dust. In this impenetrable darkness and decadence, there are people who are still working on KolibriOS. Many years will pass and perhaps you and I will no longer be here, and our great-grandchildren will ask "Who were those insane who made such an incredible OS?" -->
|
@@ -13,6 +13,7 @@
|
||||
16 Centro de juegos |allgames
|
||||
60 System panel |syspanel
|
||||
18 Ayuda |docpack
|
||||
49 Buscar |search
|
||||
53 Ejecutar aplicaci<63>n |run
|
||||
04 Apagar |end
|
||||
#1 **** DEMOS
|
||||
|
@@ -12,6 +12,7 @@
|
||||
23 <20><><EFBFBD><E0AEA2> 業<><E6A5AD> |allgames
|
||||
60 <20><><EFBFBD>⥬<EFBFBD><E2A5AC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |syspanel
|
||||
18 <20><><EFBFBD>㬥<EFBFBD><E3ACA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |docpack
|
||||
49 <20><><EFBFBD><EFBFBD><EFBFBD> |search
|
||||
53 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> |run
|
||||
04 <20><><EFBFBD><EFBFBD><EFBFBD>襭<EFBFBD><E8A5AD> ࠡ<><E0A0A1><EFBFBD> |end
|
||||
#1 **** 2D <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
2
programs/bcc32/games/blocks/Tupfile.lua
Normal file
2
programs/bcc32/games/blocks/Tupfile.lua
Normal file
@@ -0,0 +1,2 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
tup.rule("block.asm", "fasm -m 65636 %f %o " .. tup.getconfig("KPACK_CMD"), "block.bin")
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
229
programs/bcc32/games/blocks/models/model_8911_bird.bjs
Normal file
229
programs/bcc32/games/blocks/models/model_8911_bird.bjs
Normal file
@@ -0,0 +1,229 @@
|
||||
// block name, color, step, coord: x,y,z, rotation: x,y,z
|
||||
|
||||
const m1=16711680;
|
||||
const m2=16776960;
|
||||
const m3=655615;
|
||||
const m4=65315;
|
||||
const m5=16777215;
|
||||
const m6=16756655;
|
||||
const m7=16776367;
|
||||
const m8=0;
|
||||
const m9=65498;
|
||||
|
||||
model_list=[
|
||||
['b2x3x1', m1, 0, 4,-20, 3, 0,0,90],
|
||||
['b2x3x1', m1, 0, 4,-12, 3, 0,0,90],
|
||||
['b2x3x1', m1, 0, 4, -4, 3, 0,0,90],
|
||||
['b2x3x1', m1, 0, 4, 4, 3, 0,0,90],
|
||||
['b2x3x1', m1, 0, 4, 12, 3, 0,0,90],
|
||||
['t2x3x1', m1, 0, 0, 20, 3, 0,0,90],
|
||||
['b1x1x1', m1, 0, 0, 28, 3, 0,0,0],
|
||||
['b1x1x1', m1, 0, -8,-16, 3, 0,0,0],
|
||||
['b1x1x1', m1, 0, 8,-16, 3, 0,0,0],
|
||||
['b2x4x1', m1, 0,-12,-12, 3, 0,0,0],
|
||||
['b2x4x1', m1, 0, 8,-12, 3, 0,0,0],
|
||||
['l2x2x1', m1, 0, -8, 4, 3, 0,0,90],
|
||||
['l2x2x1', m1, 0, 8, 4, 3, 0,0,0],
|
||||
['b1x6x1', m1, 1, 0, 20, 6, 0,0,0],
|
||||
['b1x6x1', m1, 1, -4, 16, 6, 0,0,0],
|
||||
['b1x6x1', m1, 1, 4, 16, 6, 0,0,0],
|
||||
['b1x10x1', m1, 1, 0,-24, 6, 0,0,0],
|
||||
['b2x8x1', m1, 1, -8,-16, 6, 0,0,0],
|
||||
['b2x8x1', m1, 1, 4,-16, 6, 0,0,0],
|
||||
['b2x3x1', m1, 1,-16, -8, 6, 0,0,0],
|
||||
['b2x3x1', m1, 1, 12, -8, 6, 0,0,0],
|
||||
['l2x2x1', m1, 1, -4,-20, 6, 0,0,-180],
|
||||
['l2x2x1', m1, 1,-12,-12, 6, 0,0,-180],
|
||||
['l2x2x1', m1, 1,-12, 4, 6, 0,0,90],
|
||||
['l2x2x1', m1, 1, 12, 4, 6, 0,0,0],
|
||||
['l2x2x1', m1, 1, 12,-12, 6, 0,0,-90],
|
||||
['l2x2x1', m1, 1, 4,-20, 6, 0,0,-90],
|
||||
['b2x3x1', m1, 2, 4,-24, 9, 0,0,90],
|
||||
['b1x3x1', m1, 2, -8,-24, 9, 0,0,0],
|
||||
['b1x3x1', m1, 2, 8,-24, 9, 0,0,0],
|
||||
['b1x4x1', m1, 2,-12,-20, 9, 0,0,0],
|
||||
['b1x4x1', m1, 2, 12,-20, 9, 0,0,0],
|
||||
['b1x6x1', m1, 2,-16,-16, 9, 0,0,0],
|
||||
['b1x6x1', m1, 2, 16,-16, 9, 0,0,0],
|
||||
['t2x3x1', m1, 2,-12, 8, 9, 0,0,90],
|
||||
['t2x3x1', m1, 2, 12, 8, 9, 0,0,90],
|
||||
['b2x4x1', m1, 2, 4, 12, 9, 0,0,90],
|
||||
['b1x2x1', m1, 2, 8, 12, 9, 0,0,0],
|
||||
['b1x3x1', m2, 2, 4, 20, 9, 0,0,90],
|
||||
['b1x3x1', m3, 2, 4, 24, 9, 0,0,90],
|
||||
['t2x3x1', m3, 2, 0, 28, 9, 0,0,90],
|
||||
['b2x3x1', m1, 3, 0,-28, 12, 0,0,90],
|
||||
['b2x2x1', m1, 3, 4,-28, 12, 0,0,0],
|
||||
['l2x2x1', m1, 3,-12,-20, 12, 0,0,-180],
|
||||
['l2x2x1', m1, 3, 12,-20, 12, 0,0,-90],
|
||||
['b2x4x1', m1, 3,-16,-16, 12, 0,0,0],
|
||||
['b2x4x1', m1, 3, 12,-16, 12, 0,0,0],
|
||||
['b1x3x1', m1, 3,-16, 0, 12, 0,0,0],
|
||||
['b1x3x1', m1, 3, 16, 0, 12, 0,0,0],
|
||||
['l2x2x1', m1, 3,-12, 12, 12, 0,0,-90],
|
||||
['l2x2x1', m1, 3, 12, 12, 12, 0,0,180],
|
||||
['b1x2x1', m2, 3, -4, 16, 12, 0,0,90],
|
||||
['b1x2x1', m2, 3, 8, 16, 12, 0,0,90],
|
||||
['t2x3x1', m3, 3, 0, 20, 12, 0,0,90],
|
||||
['b1x3x1', m1, 4, 4,-28, 15, 0,0,90],
|
||||
['l2x2x1', m1, 4, -8,-24, 15, 0,0,180],
|
||||
['l2x2x1', m1, 4, 8,-24, 15, 0,0,-90],
|
||||
['b1x2x1', m1, 4,-12,-20, 15, 0,0,90],
|
||||
['b1x2x1', m1, 4, 16,-20, 15, 0,0,90],
|
||||
['c1x2x1', m4, 4,-16,-16, 15, 0,0,90],
|
||||
['c1x2x1', m4, 4, 20,-16, 15, 0,0,90],
|
||||
['b1x4x1', m1, 4,-16,-12, 15, 0,0,0],
|
||||
['b1x4x1', m1, 4, 16,-12, 15, 0,0,0],
|
||||
['l2x2x1', m1, 4,-12, 4, 15, 0,0,90],
|
||||
['l2x2x1', m1, 4, 12, 4, 15, 0,0,0],
|
||||
['b1x1x1', m1, 4,-12, 12, 15, 0,0,0],
|
||||
['b1x1x1', m1, 4, 12, 12, 15, 0,0,0],
|
||||
['l2x2x1', m2, 4, -4, 12, 15, 0,0,90],
|
||||
['l2x2x1', m2, 4, 4, 12, 15, 0,0,0],
|
||||
['b1x2x1', m2, 4, 0, 16, 15, 0,0,0],
|
||||
['b1x6x1', m1, 5,-16,-20, 18, 0,0,0],
|
||||
['b1x6x1', m1, 5, 16,-20, 18, 0,0,0],
|
||||
['b1x3x1', m1, 5, -8, 4, 18, 0,0,90],
|
||||
['b1x3x1', m1, 5, 16, 4, 18, 0,0,90],
|
||||
['l2x2x1', m1, 5, -8, 12, 18, 0,0,-90],
|
||||
['l2x2x1', m1, 5, 8, 12, 18, 0,0,-180],
|
||||
['b1x3x1', m2, 5, 4, 16, 18, 0,0,90],
|
||||
['b1x2x1', m1, 5,-12,-24, 18, 0,0,0],
|
||||
['b1x2x1', m1, 5, 12,-24, 18, 0,0,0],
|
||||
['b2x3x1', m1, 5, 0,-28, 18, 0,0,90],
|
||||
['b2x2x1', m1, 5, 4,-28, 18, 0,0,0],
|
||||
['t2x3x1', m1, 6, 0,-28, 21, 0,0,90],
|
||||
['l2x2x1', m1, 6, -8,-24, 21, 0,0,0],
|
||||
['l2x2x1', m1, 6,-16,-20, 21, 0,0,0],
|
||||
['l2x2x1', m1, 6, 8,-24, 21, 0,0,90],
|
||||
['l2x2x1', m1, 6, 16,-20, 21, 0,0,90],
|
||||
['b1x3x1', m1, 6,-16,-12, 21, 0,0,0],
|
||||
['b1x3x1', m1, 6, 16,-12, 21, 0,0,0],
|
||||
['l2x2x1', m1, 6,-12, 0, 21, 0,0,90],
|
||||
['l2x2x1', m1, 6, -8, 8, 21, 0,0,-90],
|
||||
['l2x2x1', m1, 6, 12, 0, 21, 0,0,0],
|
||||
['l2x2x1', m1, 6, 8, 8, 21, 0,0,-180],
|
||||
['b1x3x1', m1, 6, -4, 12, 21, 0,0,-90],
|
||||
['b1x1x1', m1, 7, -8, 8, 24, 0,0,0],
|
||||
['b2x3x1', m1, 7, -4, 12, 24, 0,0,-90],
|
||||
['b1x1x1', m1, 7, 8, 8, 24, 0,0,0],
|
||||
['l2x2x1', m1, 7,-12, 4, 24, 0,0,-90],
|
||||
['l2x2x1', m1, 7, 12, 4, 24, 0,0,-180],
|
||||
['b1x3x1', m1, 7,-16, 0, 24, 0,0,180],
|
||||
['b1x3x1', m1, 7, 16, 0, 24, 0,0,180],
|
||||
['l2x2x1', m1, 7,-16,-16, 24, 0,0,0],
|
||||
['l2x2x1', m1, 7, 16,-16, 24, 0,0,90],
|
||||
['l2x2x1', m1, 7, -8,-20, 24, 0,0,180],
|
||||
['l2x2x1', m1, 7, 8,-20, 24, 0,0,-90],
|
||||
['b1x3x1', m3, 7, 4,-24, 24, 0,0,90],
|
||||
['b2x2x1', m5, 8, -8,-24, 27, 0,0,0],
|
||||
['b2x3x1', m5, 8, 8,-24, 27, 0,0,90],
|
||||
['b1x3x1', m1, 8,-12,-24, 27, 0,0,0],
|
||||
['b1x3x1', m1, 8, 12,-24, 27, 0,0,0],
|
||||
['b1x4x1', m1, 8,-16,-20, 27, 0,0,0],
|
||||
['b1x4x1', m1, 8, 16,-20, 27, 0,0,0],
|
||||
['l2x2x1', m1, 8,-16, 0, 27, 0,0,-90],
|
||||
['l2x2x1', m1, 8, 16, 0, 27, 0,0,-180],
|
||||
['l2x2x1', m1, 8, 8, 4, 27, 0,0,0],
|
||||
['b2x4x1', m1, 8, 4, 4, 27, 0,0,90],
|
||||
['b1x1x1', m1, 8,-12, 4, 27, 0,0,0],
|
||||
['r1x1x1', m5, 9,-16,-20, 30, 0,0,0],
|
||||
['r1x1x1', m5, 9, 16,-20, 30, 0,0,0],
|
||||
['b1x2x1', m5, 9, -8,-20, 30, 0,0,90],
|
||||
['b1x2x1', m5, 9, 12,-20, 30, 0,0,90],
|
||||
['t2x3x1', m5, 9, 0,-20, 30, 0,0,-90],
|
||||
['r1x1x1', m6, 9,-12,-24, 30, 0,0,0],
|
||||
['r1x1x1', m6, 9, 12,-24, 30, 0,0,0],
|
||||
['r1x2x1', m7, 9, -4,-28, 30, 0,0,0],
|
||||
['r1x2x1', m7, 9, 4,-28, 30, 0,0,0],
|
||||
['b1x4x1', m1, 9,-16,-16, 30, 0,0,0],
|
||||
['b1x4x1', m1, 9, 16,-16, 30, 0,0,0],
|
||||
['l2x2x1', m1, 9,-12, 0, 30, 0,0,90],
|
||||
['l2x2x1', m1, 9, 12, 0, 30, 0,0,0],
|
||||
['l2x2x1', m1, 9, 8, 8, 30, 0,0,-180],
|
||||
['b2x3x1', m1, 9, 0, 4, 30, 0,0,90],
|
||||
['l2x2x1', m5, 10, -4,-20, 33, 0,0,-180],
|
||||
['l2x2x1', m5, 10,-12,-16, 33, 0,0,-180],
|
||||
['l2x2x1', m5, 10, 4,-20, 33, 0,0,-90],
|
||||
['l2x2x1', m5, 10, 12,-16, 33, 0,0,-90],
|
||||
['a1x2x2', m7, 10, 0,-24, 30, 0,0,-180],
|
||||
['r1x2x1', m7, 10, 0,-24, 33, 0,0,0],
|
||||
['b1x2x1', m1, 10,-16,-12, 33, 0,0,0],
|
||||
['l2x2x1', m1, 10,-16, 0, 33, 0,0,-90],
|
||||
['b1x1x1', m1, 10,-12, 4, 33, 0,0,0],
|
||||
['b2x4x1', m1, 10, 4, 4, 33, 0,0,90],
|
||||
['l2x2x1', m1, 10, 8, 4, 33, 0,0,0],
|
||||
['b2x4x1', m1, 10, 12,-12, 33, 0,0,0],
|
||||
['b1x1x1', m1, 11, 0,-24, 36, 0,0,0],
|
||||
['b1x1x1', m5, 11, -4,-24, 36, 0,0,0],
|
||||
['b1x1x1', m5, 11, 4,-24, 36, 0,0,0],
|
||||
['b1x1x3', m8, 11, -8,-24, 30, 0,0,0],
|
||||
['b1x1x3', m8, 11, 8,-24, 30, 0,0,0],
|
||||
['l2x2x1', m5, 11,-12,-20, 36, 0,0,0],
|
||||
['l2x2x1', m5, 11, 12,-20, 36, 0,0,90],
|
||||
['r1x1x1', m5, 11,-16,-16, 36, 0,0,90],
|
||||
['r1x1x1', m5, 11, 16,-16, 36, 0,0,90],
|
||||
['b1x4x1', m1, 11,-16,-12, 36, 0,0,0],
|
||||
['b2x4x1', m1, 11, 12,-12, 36, 0,0,0],
|
||||
['b2x3x1', m1, 11, 4, 0, 36, 0,0,0],
|
||||
['l2x2x1', m1, 11, -8, 0, 36, 0,0,90],
|
||||
['b1x3x1', m1, 11, 0, 8, 36, 0,0,90],
|
||||
['b1x3x1', m1, 12, 4,-24, 39, 0,0,90],
|
||||
['r1x1x1', m5, 12, -8,-24, 39, 0,0,0],
|
||||
['r1x1x1', m5, 12, 8,-24, 39, 0,0,0],
|
||||
['b1x1x1', m5, 12,-12,-20, 39, 0,0,0],
|
||||
['b1x6x1', m5, 12, 12,-20, 39, 0,0,90],
|
||||
['b1x1x1', m1, 12,-12,-16, 39, 0,0,0],
|
||||
['l2x2x1', m1, 12,-16,-12, 39, 0,0,0],
|
||||
['l2x2x1', m1, 12,-12, -4, 39, 0,0,90],
|
||||
['b1x1x1', m1, 12, -8, 0, 39, 0,0,0],
|
||||
['l2x2x1', m1, 12, -4, 4, 39, 0,0,90],
|
||||
['l2x2x1', m1, 12, 4, 8, 39, 0,0,-180],
|
||||
['b1x1x1', m1, 12, 8, 4, 39, 0,0,0],
|
||||
['l2x2x1', m1, 12, 12, 0, 39, 0,0,-180],
|
||||
['b1x2x1', m1, 12, 16, -8, 39, 0,0,0],
|
||||
['l2x2x1', m1, 12, 12,-12, 39, 0,0,-90],
|
||||
['l2x2x1', m1, 13, 4,-20, 42, 0,0,-90],
|
||||
['l2x2x1', m1, 13, -4,-24, 42, 0,0,0],
|
||||
['b2x6x1', m1, 13,-12,-20, 42, 0,0,0],
|
||||
['b1x3x1', m1, 13, 0, 4, 42, 0,0,90],
|
||||
['b2x2x1', m1, 13, 4, 0, 42, 0,0,0],
|
||||
['b1x6x1', m1, 13, 12,-20, 42, 0,0,0],
|
||||
['b1x4x1', m1, 14,-12,-16, 45, 0,0,0],
|
||||
['b2x4x1', m1, 14, 4,-20, 45, 0,0,90],
|
||||
['b2x6x1', m1, 14, 12,-12, 45, 0,0,90],
|
||||
['b2x4x1', m1, 14, 4, -4, 45, 0,0,90],
|
||||
['b1x3x1', m1, 14, 4, 4, 45, 0,0,90],
|
||||
['l2x2x1', m1, 14, 8, -4, 45, 0,0,0],
|
||||
['l2x2x1', m1, 14, 8,-16, 45, 0,0,-90],
|
||||
['b2x4x1', m1, 15, -4,-16, 48, 0,0,0],
|
||||
['b1x3x1', m1, 15, -8,-12, 48, 0,0,0],
|
||||
['b1x3x1', m1, 15, 4, 0, 48, 0,0,90],
|
||||
['b2x2x1', m1, 15, 4, -8, 48, 0,0,0],
|
||||
['l2x2x1', m1, 15, 4,-12, 48, 0,0,-90],
|
||||
['b1x3x1', m2, 16, 8,-12, 0, 0,0,0],
|
||||
['b1x3x1', m2, 16, -8,-12, 0, 0,0,0],
|
||||
['c1x2x1', m9, 17, 20,-16, 12, 0,0,0],
|
||||
['b1x6x1', m4, 17, 0, 8, 0, 0,0,0, 1],
|
||||
['b1x6x1', m9, 17, 0, 4, -3, 0,0,0, 1],
|
||||
['b1x3x1', m4, 18, 0, 4, 3, 0,0,0, 1],
|
||||
['b1x3x1', m2, 18, 0, 16, 3, 0,0,0, 1],
|
||||
['c1x2x1', m4, 18, 0, 0, 6, 0,0,0, 1],
|
||||
['b1x1x1', m4, 18, 0, 8, 6, 0,0,0, 1],
|
||||
['b1x2x1', m2, 18, 0, 12, 6, 0,0,0, 1],
|
||||
['b1x3x1', m2, 18, 0, 4, 9, 0,0,0, 1],
|
||||
['c1x2x1', m9, 17, -20,-16, 12, 0,0,0],
|
||||
['b1x6x1', m4, 17, 0, 8, 0, 0,0,0, 1],
|
||||
['b1x6x1', m9, 17, 0, 4, -3, 0,0,0, 1],
|
||||
['b1x3x1', m4, 18, 0, 4, 3, 0,0,0, 1],
|
||||
['b1x3x1', m2, 18, 0, 16, 3, 0,0,0, 1],
|
||||
['c1x2x1', m4, 18, 0, 0, 6, 0,0,0, 1],
|
||||
['b1x1x1', m4, 18, 0, 8, 6, 0,0,0, 1],
|
||||
['b1x2x1', m2, 18, 0, 12, 6, 0,0,0, 1],
|
||||
['b1x3x1', m2, 18, 0, 4, 9, 0,0,0, 1],
|
||||
];
|
||||
|
||||
model_animat=[
|
||||
[192,'rotation','z','Left', -1.570796327, 0, 0.017453293],
|
||||
[201,'rotation','z','Right', 0, 1.570796327, 0.017453293],
|
||||
];
|
@@ -0,0 +1,531 @@
|
||||
// block name, color, step, coord: x,y,z, rotation: x,y,z
|
||||
|
||||
const m1=32768;
|
||||
const m2=9474192;
|
||||
const m3=16777215;
|
||||
const m4=2164260863;
|
||||
const m5=655615;
|
||||
const m6=255;
|
||||
const m7=16776960;
|
||||
const m8=10824234;
|
||||
const m9=16384;
|
||||
const m10=0xc97e3b;
|
||||
|
||||
model_list=[
|
||||
['b2x4x1', m2, 0,-28, -4, 6, 0,0,90],
|
||||
['b2x3x1', m2, 0,-40, 4, 6, 0,0,0],
|
||||
['b2x3x1', m2, 0,-32, 8, 6, 0,0,0],
|
||||
['b2x6x1', m2, 0, -4, 8, 6, 0,0,90],
|
||||
['b1x3x1', m2, 0, -4, 4, 6, 0,0,90],
|
||||
['b2x4x1', m2, 0, -4, -4, 6, 0,0,90],
|
||||
['b1x2x1', m2, 0, -8, -8, 6, 0,0,90],
|
||||
['b2x3x1', m2, 0,-24, -8, 6, 0,0,0],
|
||||
['b2x4x1', m2, 1,-12, -8, 9, 0,0,0],
|
||||
['b2x2x1', m2, 1,-20, -4, 9, 0,0,0],
|
||||
['b1x2x1', m2, 1,-20, -8, 9, 0,0,90],
|
||||
['b2x3x1', m2, 1,-24, -4, 9, 0,0,90],
|
||||
['b2x3x1', m2, 1,-40, -4, 9, 0,0,0],
|
||||
['b1x2x1', m2, 1,-40, 8, 9, 0,0,0],
|
||||
['b2x4x1', m2, 1,-24, 8, 9, 0,0,90],
|
||||
['b1x2x1', m2, 1,-28, 16, 9, 0,0,90],
|
||||
['l2x2x1', m2, 2, 0,-12, 6, 0,0,-90],
|
||||
['l2x2x1', m2, 2, 8,-12, 6, 0,0,-90],
|
||||
['b2x4x1', m2, 2, 12, -8, 6, 0,0,90],
|
||||
['b2x4x1', m2, 2, 12, 0, 6, 0,0,90],
|
||||
['b2x4x1', m2, 2, 12, 8, 6, 0,0,90],
|
||||
['b2x4x1', m2, 2, 12, 16, 6, 0,0,90],
|
||||
['b2x4x1', m2, 2, 28, 16, 6, 0,0,90],
|
||||
['b2x4x1', m2, 2, 28, 8, 6, 0,0,90],
|
||||
['b2x4x1', m2, 2, 28, 0, 6, 0,0,90],
|
||||
['b1x4x1', m2, 2, 28, -4, 6, 0,0,90],
|
||||
['b1x2x1', m2, 2, 24, -8, 6, 0,0,90],
|
||||
['b2x2x1', m3, 3, 20, 16, 9, 0,0,0],
|
||||
['b2x2x1', m2, 3, 12, 16, 9, 0,0,0],
|
||||
['b1x3x1', m2, 3, 20, 12, 9, 0,0,90],
|
||||
['b1x2x1', m2, 3, 20, 4, 9, 0,0,0],
|
||||
['b1x3x1', m2, 3, 20, -8, 9, 0,0,0],
|
||||
['l2x2x1', m2, 3, 24, -4, 9, 0,0,-90],
|
||||
['b2x4x1', m2, 3, 12, -4, 9, 0,0,0],
|
||||
['b2x6x1', m2, 3, 4, -4, 9, 0,0,0],
|
||||
['b1x2x1', m2, 3, 8, 20, 9, 0,0,90],
|
||||
['b1x2x1', m2, 3, 0, 16, 9, 0,0,0],
|
||||
['b2x6x1', m2, 3, 0, 8, 9, 0,0,90],
|
||||
['b2x3x1', m2, 3, -4, -4, 9, 0,0,0],
|
||||
['b2x4x1', m2, 3, 12,-12, 9, 0,0,90],
|
||||
['b1x1x1', m2, 3, 8,-16, 9, 0,0,0],
|
||||
['b1x1x1', m2, 3, 0,-16, 9, 0,0,0],
|
||||
['b1x4x1', m2, 4,-28, -4, 3, 0,0,90],
|
||||
['b1x4x1', m2, 4,-40, 0, 3, 0,0,0],
|
||||
['b1x4x1', m2, 4,-24, 12, 3, 0,0,90],
|
||||
['b1x2x1', m2, 4,-28, 16, 3, 0,0,90],
|
||||
['b1x4x1', m2, 4, -8, 12, 3, 0,0,90],
|
||||
['l2x2x1', m2, 4, 0, 12, 3, 0,0,90],
|
||||
['b1x4x1', m2, 4, 12, 20, 3, 0,0,90],
|
||||
['b1x3x1', m2, 4, 24, 20, 3, 0,0,90],
|
||||
['b1x3x1', m2, 4, 28, 12, 3, 0,0,0],
|
||||
['b1x3x1', m2, 4, 28, 0, 3, 0,0,0],
|
||||
['b1x4x1', m2, 4, 28, -4, 3, 0,0,90],
|
||||
['b1x2x1', m2, 4, 24, -8, 3, 0,0,90],
|
||||
['b1x3x1', m2, 4, 12,-12, 3, 0,0,0],
|
||||
['l2x2x1', m2, 4, 8,-12, 3, 0,0,-180],
|
||||
['b1x4x1', m2, 4, 0,-16, 3, 0,0,0],
|
||||
['b1x2x1', m2, 4, -4, -4, 3, 0,0,90],
|
||||
['b1x2x1', m2, 4, -8, -8, 3, 0,0,90],
|
||||
['b1x4x1', m2, 4,-12, -4, 3, 0,0,90],
|
||||
['b1x2x1', m2, 4,-20, -8, 3, 0,0,90],
|
||||
['b20x20x1', m1, 5,-40,-40, 0, 0,0,0],
|
||||
['b1x4x1', m3, 6,-28, -4, 12, 0,0,90],
|
||||
['b2x4x1', m2, 6,-40, 0, 12, 0,0,0],
|
||||
['b2x4x1', m2, 6,-32, 4, 12, 0,0,0],
|
||||
['b2x6x1', m2, 6,-24, -8, 12, 0,0,0],
|
||||
['b2x4x1', m2, 6, -4, 8, 12, 0,0,90],
|
||||
['b2x4x1', m2, 6, -4, -4, 12, 0,0,90],
|
||||
['b1x2x1', m2, 6, -8, -8, 12, 0,0,90],
|
||||
['b1x3x1', m2, 6, 0, -8, 12, 0,0,0],
|
||||
['b1x2x1', m2, 6, 0,-16, 12, 0,0,0],
|
||||
['b1x2x1', m2, 6, 4,-12, 12, 0,0,0],
|
||||
['b1x4x1', m2, 6, 8,-16, 12, 0,0,0],
|
||||
['b1x4x1', m2, 6, 12,-12, 12, 0,0,0],
|
||||
['b1x2x1', m2, 6, 20, -4, 12, 0,0,90],
|
||||
['b1x2x1', m2, 6, 24, -8, 12, 0,0,90],
|
||||
['b2x4x1', m2, 6, 16, 0, 12, 0,0,0],
|
||||
['b1x2x1', m2, 6, 16, 16, 12, 0,0,0],
|
||||
['b2x2x1', m3, 6, 20, 16, 12, 0,0,0],
|
||||
['b2x4x1', m2, 6, 8, 8, 12, 0,0,0],
|
||||
['b2x4x1', m2, 6, 0, 8, 12, 0,0,0],
|
||||
['b2x6x1', m3, 7, 24, 16, 15, 0,0,90],
|
||||
['b1x2x1', m3, 7, 0, 16, 15, 0,0,0],
|
||||
['b1x4x1', m2, 7, 20, 0, 15, 0,0,0],
|
||||
['b1x4x1', m2, 7, 16, 12, 15, 0,0,90],
|
||||
['b2x4x1', m2, 7, 16, 4, 15, 0,0,90],
|
||||
['b2x4x1', m2, 7, 16, -4, 15, 0,0,90],
|
||||
['b2x4x1', m2, 7, -4, 0, 15, 0,0,0],
|
||||
['b1x4x1', m2, 7, -8, 12, 15, 0,0,90],
|
||||
['b1x4x1', m3, 7,-24, 12, 15, 0,0,90],
|
||||
['b1x3x1', m3, 7,-40, 4, 15, 0,0,0],
|
||||
['l2x2x1', m3, 7,-40, -4, 15, 0,0,0],
|
||||
['b1x4x1', m3, 7,-20, -4, 15, 0,0,90],
|
||||
['l2x2x1', m2, 7,-12, -4, 15, 0,0,180],
|
||||
['l2x2x1', m2, 7, -8, -4, 15, 0,0,-90],
|
||||
['b1x4x1', m2, 7, 0,-16, 15, 0,0,0],
|
||||
['b1x2x1', m2, 7, 4,-12, 15, 0,0,0],
|
||||
['b1x2x1', m2, 7, 8,-16, 15, 0,0,0],
|
||||
['b1x2x1', m2, 7, 12,-12, 15, 0,0,0],
|
||||
['b1x1x1', m3, 8, 24, 16, 18, 0,0,0],
|
||||
['c1x1x1', m4, 8, 24, 20, 18, 0,0,0],
|
||||
['b2x2x1', m3, 8, 16, 16, 18, 0,0,0],
|
||||
['c1x1x1', m4, 8, 12, 20, 18, 0,0,0],
|
||||
['c1x1x1', m4, 8, 12, 16, 18, 0,0,0],
|
||||
['b1x2x1', m3, 8, 8, 16, 18, 0,0,0],
|
||||
['c1x1x1', m4, 8, 4, 20, 18, 0,0,0],
|
||||
['c1x1x1', m4, 8, 4, 16, 18, 0,0,0],
|
||||
['b1x2x1', m3, 8, 0, 16, 18, 0,0,0],
|
||||
['b1x2x1', m3, 8, -4, 12, 18, 0,0,90],
|
||||
['b1x4x1', m3, 8,-12, 12, 18, 0,0,90],
|
||||
['b1x4x1', m3, 8,-28, 12, 18, 0,0,90],
|
||||
['b1x4x1', m3, 8,-40, -4, 18, 0,0,0],
|
||||
['b1x4x1', m3, 8,-24, -4, 18, 0,0,90],
|
||||
['b1x2x1', m3, 8,-16, -4, 18, 0,0,90],
|
||||
['b2x2x1', m3, 8,-12, -8, 18, 0,0,0],
|
||||
['b1x4x1', m3, 8, -4, -4, 18, 0,0,0],
|
||||
['b2x4x1', m3, 8, 12,-12, 18, 0,0,90],
|
||||
['b1x1x1', m3, 8, 0,-16, 18, 0,0,0],
|
||||
['b1x1x1', m3, 8, 8,-16, 18, 0,0,0],
|
||||
['b2x2x1', m3, 9, 20, 16, 21, 0,0,0],
|
||||
['b1x2x1', m5, 9, 16, 16, 21, 0,0,0],
|
||||
['b2x2x1', m3, 9, 8, 16, 21, 0,0,0],
|
||||
['b2x2x1', m5, 9, 0, 16, 21, 0,0,0],
|
||||
['b1x1x1', m3, 9, -4, 12, 21, 0,0,0],
|
||||
['c1x1x1', m4, 9, -8, 12, 21, 0,0,0],
|
||||
['b1x1x1', m3, 9,-12, 12, 21, 0,0,0],
|
||||
['c1x1x1', m4, 9,-16, 12, 21, 0,0,0],
|
||||
['b1x1x1', m3, 9,-20, 12, 21, 0,0,0],
|
||||
['c1x1x1', m4, 9,-24, 12, 21, 0,0,0],
|
||||
['b1x2x1', m3, 9,-28, 12, 21, 0,0,90],
|
||||
['c1x1x1', m4, 9,-36, 12, 21, 0,0,0],
|
||||
['b1x1x1', m3, 9,-40, 12, 21, 0,0,0],
|
||||
['b2x3x1', m3, 9,-44, 0, 21, 0,0,0],
|
||||
['b1x1x1', m3, 9,-40, -4, 21, 0,0,0],
|
||||
['c1x1x1', m4, 9,-36, -4, 21, 0,0,0],
|
||||
['b1x1x1', m3, 9,-32, -4, 21, 0,0,0],
|
||||
['c1x1x1', m4, 9,-28, -4, 21, 0,0,0],
|
||||
['b1x2x1', m3, 9,-20, -4, 21, 0,0,90],
|
||||
['c1x1x1', m4, 9,-16, -4, 21, 0,0,0],
|
||||
['b1x2x1', m3, 9,-12, -8, 21, 0,0,0],
|
||||
['c1x1x1', m4, 9, -8, -8, 21, 0,0,0],
|
||||
['b1x2x1', m3, 9, -4, -4, 21, 0,0,90],
|
||||
['c1x1x1', m4, 9, -4, 0, 21, 0,0,0],
|
||||
['b1x1x1', m3, 9, -4, 4, 21, 0,0,0],
|
||||
['c1x1x1', m4, 9, -4, 8, 21, 0,0,0],
|
||||
['b2x4x1', m3, 9, 12,-12, 21, 0,0,90],
|
||||
['c1x1x1', m4, 9, 0,-16, 21, 0,0,0],
|
||||
['c1x1x1', m4, 9, 8,-16, 21, 0,0,0],
|
||||
['c1x1x1', m4, 10, 24, 20, 24, 0,0,0],
|
||||
['l2x2x1', m3, 10, 20, 16, 24, 0,0,0],
|
||||
['c1x1x1', m4, 10, 12, 20, 24, 0,0,0],
|
||||
['c1x1x1', m4, 10, 8, 20, 24, 0,0,0],
|
||||
['c1x1x1', m4, 10, 8, 16, 24, 0,0,0],
|
||||
['c1x1x1', m4, 10, 12, 16, 24, 0,0,0],
|
||||
['b1x4x1', m3, 10, -4, 0, 24, 0,0,0],
|
||||
['b1x4x1', m3, 10, -8, 12, 24, 0,0,90],
|
||||
['b1x4x1', m3, 10,-24, 12, 24, 0,0,90],
|
||||
['b1x4x1', m3, 10,-40, 0, 24, 0,0,0],
|
||||
['c1x1x1', m4, 10,-44, 8, 24, 0,0,0],
|
||||
['c1x1x1', m4, 10,-44, 4, 24, 0,0,0],
|
||||
['c1x1x1', m4, 10,-44, 0, 24, 0,0,0],
|
||||
['b1x2x1', m3, 10,-36, -4, 24, 0,0,90],
|
||||
['b1x4x1', m3, 10,-20, -4, 24, 0,0,90],
|
||||
['b1x4x1', m3, 10, -4, -4, 24, 0,0,90],
|
||||
['b1x2x1', m3, 10, -8, -8, 24, 0,0,90],
|
||||
['l2x2x1', m3, 10, 4, -8, 24, 0,0,180],
|
||||
['b1x2x1', m5, 10, 0,-16, 24, 0,0,0],
|
||||
['l2x2x1', m3, 10, 12, -8, 24, 0,0,180],
|
||||
['b1x2x1', m5, 10, 8,-16, 24, 0,0,0],
|
||||
['b2x2x1', m3, 11, 24, 16, 27, 0,0,90],
|
||||
['b2x2x1', m5, 11, 8, 16, 27, 0,0,0],
|
||||
['b1x1x1', m3, 11, -4, 12, 27, 0,0,0],
|
||||
['c1x1x1', m4, 11, -8, 12, 27, 0,0,0],
|
||||
['b1x1x1', m3, 11,-12, 12, 27, 0,0,0],
|
||||
['c1x1x1', m4, 11,-16, 12, 27, 0,0,0],
|
||||
['b1x1x1', m3, 11,-20, 12, 27, 0,0,0],
|
||||
['c1x1x1', m4, 11,-24, 12, 27, 0,0,0],
|
||||
['b1x2x1', m3, 11,-28, 12, 27, 0,0,90],
|
||||
['c1x1x1', m4, 11,-36, 12, 27, 0,0,0],
|
||||
['b1x1x1', m3, 11,-40, 12, 27, 0,0,0],
|
||||
['b2x3x1', m3, 11,-44, 0, 27, 0,0,0],
|
||||
['b1x1x1', m3, 11,-40, -4, 27, 0,0,0],
|
||||
['c1x1x1', m4, 11,-36, -4, 27, 0,0,0],
|
||||
['b1x1x1', m3, 11,-32, -4, 27, 0,0,0],
|
||||
['c1x1x1', m4, 11,-28, -4, 27, 0,0,0],
|
||||
['b1x2x1', m3, 11,-20, -4, 27, 0,0,90],
|
||||
['c1x1x1', m4, 11,-16, -4, 27, 0,0,0],
|
||||
['b1x2x1', m3, 11,-12, -8, 27, 0,0,0],
|
||||
['c1x1x1', m4, 11, -8, -8, 27, 0,0,0],
|
||||
['b1x2x1', m3, 11, -4, -4, 27, 0,0,90],
|
||||
['c1x1x1', m4, 11, -4, 0, 27, 0,0,0],
|
||||
['b1x1x1', m3, 11, -4, 4, 27, 0,0,0],
|
||||
['c1x1x1', m4, 11, -4, 8, 27, 0,0,0],
|
||||
['b1x2x1', m5, 11, 0,-12, 27, 0,0,0],
|
||||
['c1x1x1', m5, 11, 0,-16, 27, 0,0,0],
|
||||
['f1x2x1', m5, 11, 4,-12, 27, 0,0,0],
|
||||
['f1x2x1', m5, 11, 8,-12, 27, 0,0,0],
|
||||
['c1x1x1', m5, 11, 8,-16, 27, 0,0,0],
|
||||
['b1x2x1', m5, 11, 12,-12, 27, 0,0,0],
|
||||
['b2x2x1', m3, 12, 20, 16, 30, 0,0,0],
|
||||
['b1x4x1', m3, 12, -4, 0, 30, 0,0,0],
|
||||
['b1x4x1', m3, 12, -8, 12, 30, 0,0,90],
|
||||
['b1x4x1', m3, 12,-24, 12, 30, 0,0,90],
|
||||
['b1x4x1', m3, 12,-40, 0, 30, 0,0,0],
|
||||
['c1x1x1', m4, 12,-44, 8, 30, 0,0,0],
|
||||
['c1x1x1', m4, 12,-44, 4, 30, 0,0,0],
|
||||
['c1x1x1', m4, 12,-44, 0, 30, 0,0,0],
|
||||
['b1x2x1', m3, 12,-36, -4, 30, 0,0,90],
|
||||
['b1x4x1', m3, 12,-20, -4, 30, 0,0,90],
|
||||
['b1x4x1', m3, 12, -4, -4, 30, 0,0,90],
|
||||
['b1x2x1', m3, 12, -8, -8, 30, 0,0,90],
|
||||
['b1x2x1', m5, 12, 8,-10, 30, 0,0,90],
|
||||
['b2x2x1', m3, 13, -4, 12, 33, 0,0,0],
|
||||
['c1x1x1', m4, 13, -8, 12, 33, 0,0,0],
|
||||
['b1x1x1', m3, 13,-12, 12, 33, 0,0,0],
|
||||
['c1x1x1', m4, 13,-16, 12, 33, 0,0,0],
|
||||
['b1x1x1', m3, 13,-20, 12, 33, 0,0,0],
|
||||
['c1x1x1', m4, 13,-24, 12, 33, 0,0,0],
|
||||
['b1x2x1', m3, 13,-28, 12, 33, 0,0,90],
|
||||
['c1x1x1', m4, 13,-36, 12, 33, 0,0,0],
|
||||
['b1x1x1', m3, 13,-40, 12, 33, 0,0,0],
|
||||
['b2x3x1', m3, 13,-44, 0, 33, 0,0,0],
|
||||
['b1x1x1', m3, 13,-40, -4, 33, 0,0,0],
|
||||
['c1x1x1', m4, 13,-36, -4, 33, 0,0,0],
|
||||
['b1x1x1', m3, 13,-32, -4, 33, 0,0,0],
|
||||
['c1x1x1', m4, 13,-28, -4, 33, 0,0,0],
|
||||
['b1x2x1', m3, 13,-20, -4, 33, 0,0,90],
|
||||
['c1x1x1', m4, 13,-16, -4, 33, 0,0,0],
|
||||
['b1x2x1', m3, 13,-12, -8, 33, 0,0,0],
|
||||
['c1x1x1', m4, 13, -8, -8, 33, 0,0,0],
|
||||
['b1x1x1', m3, 13, -8, -4, 33, 0,0,90],
|
||||
['c1x1x1', m4, 13, -4, 0, 33, 0,0,0],
|
||||
['b1x1x1', m3, 13, -4, 4, 33, 0,0,0],
|
||||
['c1x1x1', m4, 13, -4, 8, 33, 0,0,0],
|
||||
['b2x2x1', m3, 13, -4, -8, 33, 0,0,0],
|
||||
['b2x4x1', m3, 13, 28, 16, 33, 0,0,90],
|
||||
['b1x2x1', m3, 14, 24, 12, 33, 0,0,90],
|
||||
['b1x2x1', m3, 14, 24, 24, 33, 0,0,90],
|
||||
['b2x4x1', m6, 14, 20, 12, 36, 0,0,0],
|
||||
['b1x2x1', m6, 14, 28, 16, 36, 0,0,0],
|
||||
['b1x2x1', m6, 14, 16, 16, 36, 0,0,0],
|
||||
['c1x1x1', m4, 14, 0, 16, 36, 0,0,0],
|
||||
['b1x1x1', m3, 14, -4, 16, 36, 0,0,0],
|
||||
['b1x1x1', m3, 14, 0, 12, 36, 0,0,0],
|
||||
['b1x4x1', m3, 14, -8, 12, 36, 0,0,90],
|
||||
['b1x4x1', m3, 14,-24, 12, 36, 0,0,90],
|
||||
['b1x4x1', m3, 14,-40, 0, 36, 0,0,0],
|
||||
['b1x2x1', m3, 14,-36, -4, 36, 0,0,90],
|
||||
['b1x4x1', m3, 14,-20, -4, 36, 0,0,90],
|
||||
['b1x4x1', m3, 14, -4, -4, 36, 0,0,90],
|
||||
['b1x4x1', m3, 14, -4, 0, 36, 0,0,0],
|
||||
['b1x1x1', m3, 14, 0, -4, 36, 0,0,0],
|
||||
['c1x1x1', m4, 14, 0, -8, 36, 0,0,0],
|
||||
['b1x1x1', m3, 14, -4, -8, 36, 0,0,0],
|
||||
['b1x2x1', m6, 14, -8, -8, 36, 0,0,90],
|
||||
['b2x2x1', m3, 15, -4, 12, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15, -8, 12, 39, 0,0,0],
|
||||
['b1x1x1', m3, 15,-12, 12, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15,-16, 12, 39, 0,0,0],
|
||||
['b1x1x1', m3, 15,-20, 12, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15,-24, 12, 39, 0,0,0],
|
||||
['b1x2x1', m3, 15,-28, 12, 39, 0,0,90],
|
||||
['c1x1x1', m4, 15,-36, 12, 39, 0,0,0],
|
||||
['b1x1x1', m3, 15,-40, 12, 39, 0,0,0],
|
||||
['b1x1x1', m3, 15,-40, 4, 39, 0,0,0],
|
||||
['b1x1x1', m3, 15,-40, -4, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15,-36, -4, 39, 0,0,0],
|
||||
['b1x1x1', m3, 15,-32, -4, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15,-28, -4, 39, 0,0,0],
|
||||
['b1x2x1', m3, 15,-20, -4, 39, 0,0,90],
|
||||
['c1x1x1', m4, 15,-16, -4, 39, 0,0,0],
|
||||
['b1x1x1', m3, 15,-12, -4, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15,-40, 8, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15, -4, 0, 39, 0,0,0],
|
||||
['b1x1x1', m3, 15, -4, 4, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15, -4, 8, 39, 0,0,0],
|
||||
['b2x2x1', m3, 15, -4, -8, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15,-40, 0, 39, 0,0,0],
|
||||
['c1x1x1', m4, 15, -8, -4, 39, 0,0,0],
|
||||
['c1x1x1', m4, 16, 0, 16, 42, 0,0,0],
|
||||
['b1x1x1', m3, 16, -4, 16, 42, 0,0,0],
|
||||
['b1x1x1', m3, 16, 0, 12, 42, 0,0,0],
|
||||
['b1x4x1', m3, 16, -8, 12, 42, 0,0,90],
|
||||
['b1x4x1', m3, 16,-24, 12, 42, 0,0,90],
|
||||
['b1x4x1', m3, 16,-40, 0, 42, 0,0,0],
|
||||
['b1x2x1', m3, 16,-36, -4, 42, 0,0,90],
|
||||
['b1x4x1', m3, 16,-20, -4, 42, 0,0,90],
|
||||
['b1x4x1', m3, 16, -4, -4, 42, 0,0,90],
|
||||
['b1x4x1', m3, 16, -4, 0, 42, 0,0,0],
|
||||
['b1x1x1', m3, 16, 0, -4, 42, 0,0,0],
|
||||
['c1x1x1', m4, 16, 0, -8, 42, 0,0,0],
|
||||
['b1x1x1', m3, 16, -4, -8, 42, 0,0,0],
|
||||
['b2x2x1', m3, 17, -4, 12, 45, 0,0,0],
|
||||
['b2x3x1', m6, 17, -8, 12, 45, 0,0,90],
|
||||
['b2x2x1', m6, 17,-24, 12, 45, 0,0,0],
|
||||
['b1x2x1', m6, 17,-28, 12, 45, 0,0,90],
|
||||
['b2x2x1', m6, 17,-40, 12, 45, 0,0,0],
|
||||
['b1x1x1', m3, 17,-40, 8, 45, 0,0,0],
|
||||
['c1x1x1', m4, 17,-40, 4, 45, 0,0,0],
|
||||
['b1x1x1', m3, 17,-40, 0, 45, 0,0,0],
|
||||
['b2x4x1', m6, 17,-28, -8, 45, 0,0,90],
|
||||
['b1x2x1', m6, 17,-20, -4, 45, 0,0,90],
|
||||
['b2x3x1', m6, 17, -8, -8, 45, 0,0,90],
|
||||
['b2x2x1', m3, 17, -4, -8, 45, 0,0,0],
|
||||
['b1x1x1', m3, 17, -4, 0, 45, 0,0,0],
|
||||
['c1x1x1', m4, 17, -4, 4, 45, 0,0,0],
|
||||
['b1x1x1', m3, 17, -4, 8, 45, 0,0,0],
|
||||
['c1x1x1', m3, 18,-24, -8, 15, 0,0,0],
|
||||
['c1x1x1', m3, 18,-20, -8, 15, 0,0,0],
|
||||
['c1x1x1', m3, 18,-32, 16, 15, 0,0,0],
|
||||
['c1x1x1', m3, 18,-28, 16, 15, 0,0,0],
|
||||
['c1x1x1', m3, 18,-24, -8, 18, 0,0,0],
|
||||
['c1x1x1', m3, 18,-20, -8, 18, 0,0,0],
|
||||
['c1x1x1', m3, 18,-32, 16, 18, 0,0,0],
|
||||
['c1x1x1', m3, 18,-28, 16, 18, 0,0,0],
|
||||
['c1x1x1', m3, 18,-24, -8, 21, 0,0,0],
|
||||
['c1x1x1', m3, 18,-20, -8, 21, 0,0,0],
|
||||
['c1x1x1', m3, 18,-32, 16, 21, 0,0,0],
|
||||
['c1x1x1', m3, 18,-28, 16, 21, 0,0,0],
|
||||
['c1x1x1', m4, 19,-24, -8, 24, 0,0,0],
|
||||
['c1x1x1', m4, 19,-20, -8, 24, 0,0,0],
|
||||
['c1x1x1', m4, 19,-32, 16, 24, 0,0,0],
|
||||
['c1x1x1', m4, 19,-28, 16, 24, 0,0,0],
|
||||
['c1x1x1', m3, 19,-24, -8, 27, 0,0,0],
|
||||
['c1x1x1', m3, 19,-20, -8, 27, 0,0,0],
|
||||
['c1x1x1', m3, 19,-32, 16, 27, 0,0,0],
|
||||
['c1x1x1', m3, 19,-28, 16, 27, 0,0,0],
|
||||
['c1x1x1', m3, 19,-24, -8, 30, 0,0,0],
|
||||
['c1x1x1', m3, 19,-20, -8, 30, 0,0,0],
|
||||
['c1x1x1', m3, 19,-32, 16, 30, 0,0,0],
|
||||
['c1x1x1', m3, 19,-28, 16, 30, 0,0,0],
|
||||
['c1x1x1', m4, 20,-24, -8, 33, 0,0,0],
|
||||
['c1x1x1', m4, 20,-20, -8, 33, 0,0,0],
|
||||
['c1x1x1', m4, 20,-32, 16, 33, 0,0,0],
|
||||
['c1x1x1', m4, 20,-28, 16, 33, 0,0,0],
|
||||
['c1x1x1', m3, 20,-24, -8, 36, 0,0,0],
|
||||
['c1x1x1', m3, 20,-20, -8, 36, 0,0,0],
|
||||
['c1x1x1', m3, 20,-32, 16, 36, 0,0,0],
|
||||
['c1x1x1', m3, 20,-28, 16, 36, 0,0,0],
|
||||
['c1x1x1', m3, 20,-24, -8, 39, 0,0,0],
|
||||
['c1x1x1', m3, 20,-20, -8, 39, 0,0,0],
|
||||
['c1x1x1', m3, 20,-32, 16, 39, 0,0,0],
|
||||
['c1x1x1', m3, 20,-28, 16, 39, 0,0,0],
|
||||
['c1x1x1', m4, 21,-24, -8, 42, 0,0,0],
|
||||
['c1x1x1', m4, 21,-20, -8, 42, 0,0,0],
|
||||
['c1x1x1', m4, 21,-32, 16, 42, 0,0,0],
|
||||
['c1x1x1', m4, 21,-28, 16, 42, 0,0,0],
|
||||
['c1x1x1', m3, 21,-24, -8, 45, 0,0,0],
|
||||
['c1x1x1', m3, 21,-20, -8, 45, 0,0,0],
|
||||
['c1x1x1', m3, 21,-32, 16, 45, 0,0,0],
|
||||
['c1x1x1', m3, 21,-28, 16, 45, 0,0,0],
|
||||
['c1x1x1', m3, 21,-24, -8, 48, 0,0,0],
|
||||
['c1x1x1', m3, 21,-20, -8, 48, 0,0,0],
|
||||
['c1x1x1', m3, 21,-32, 16, 48, 0,0,0],
|
||||
['c1x1x1', m3, 21,-28, 16, 48, 0,0,0],
|
||||
['c1x1x1', m3, 22, 20, 16, 39, 0,0,0],
|
||||
['c1x1x1', m3, 22, 24, 16, 39, 0,0,0],
|
||||
['c1x1x1', m3, 22, 24, 20, 39, 0,0,0],
|
||||
['c1x1x1', m3, 22, 20, 20, 39, 0,0,0],
|
||||
['b2x2x1', m3, 22, 20, 16, 42, 0,0,0],
|
||||
['f1x2x1', m6, 22, 20, 16, 45, 0,0,0],
|
||||
['f1x2x1', m6, 22, 24, 16, 45, 0,0,0],
|
||||
['f1x2x1', m6, 23, 24, 18, 48, 0,0,90],
|
||||
['c1x1x1', m6, 23, 0, 16, 48, 0,0,0],
|
||||
['b1x3x1', m6, 23, -4, 12, 48, 0,0,90],
|
||||
['b1x1x1', m3, 23, -8, 16, 48, 0,0,0],
|
||||
['b2x4x1', m6, 23,-16, 8, 48, 0,0,90],
|
||||
['b1x3x1', m6, 23,-32, 12, 48, 0,0,90],
|
||||
['b1x1x1', m3, 23,-40, 16, 48, 0,0,0],
|
||||
['b1x3x1', m3, 23,-40, 0, 48, 0,0,0],
|
||||
['b1x3x1', m6, 23,-32, -4, 48, 0,0,90],
|
||||
['b1x1x1', m3, 23,-40, -8, 48, 0,0,0],
|
||||
['b2x4x1', m6, 23,-16, -4, 48, 0,0,90],
|
||||
['b1x3x1', m6, 23, -4, -4, 48, 0,0,90],
|
||||
['b1x1x1', m3, 23, -8, -8, 48, 0,0,0],
|
||||
['c1x1x1', m6, 23, 0, -8, 48, 0,0,0],
|
||||
['b1x3x1', m3, 23, -4, 0, 48, 0,0,0],
|
||||
['c1x1x1', m6, 24, 22, 18, 51, 0,0,0],
|
||||
['c1x1x1', m6, 24, 0, 16, 51, 0,0,90],
|
||||
['c1x1x1', m6, 24, -8, 16, 51, 0,0,0],
|
||||
['b2x6x1', m6, 24, -4, 8, 51, 0,0,90],
|
||||
['b1x2x1', m6, 24,-28, 8, 51, 0,0,90],
|
||||
['b2x2x1', m3, 24,-32, 12, 51, 0,0,0],
|
||||
['b2x2x1', m6, 24,-40, 8, 51, 0,0,0],
|
||||
['c1x1x1', m6, 24,-40, 16, 51, 0,0,0],
|
||||
['b1x1x1', m3, 24,-40, 4, 51, 0,0,0],
|
||||
['b2x4x1', m6, 24,-28, -4, 51, 0,0,90],
|
||||
['c1x1x1', m6, 24,-40, -8, 51, 0,0,0],
|
||||
['b1x2x1', m6, 24,-20, 0, 51, 0,0,90],
|
||||
['b2x2x1', m3, 24,-24, -8, 51, 0,0,0],
|
||||
['b2x4x1', m6, 24, -4, -4, 51, 0,0,90],
|
||||
['c1x1x1', m6, 24, -8, -8, 51, 0,0,0],
|
||||
['c1x1x1', m6, 24, 0, -8, 51, 0,0,0],
|
||||
['b1x1x1', m3, 24, -4, 4, 51, 0,0,0],
|
||||
['c1x1x1', m7, 25, 22, 18, 54, 0,0,0],
|
||||
['b1x1x1', m3, 25, -4, 4, 54, 0,0,0],
|
||||
['b1x3x1', m5, 25, -4, 8, 54, 0,0,90],
|
||||
['b1x3x1', m5, 25, -4, 0, 54, 0,0,90],
|
||||
['b2x3x1', m5, 25,-20, 0, 54, 0,0,0],
|
||||
['b2x3x1', m5, 25,-28, 0, 54, 0,0,0],
|
||||
['b1x3x1', m5, 25,-32, 8, 54, 0,0,90],
|
||||
['b1x1x1', m3, 25,-40, 4, 54, 0,0,0],
|
||||
['b1x3x1', m5, 25,-32, 0, 54, 0,0,90],
|
||||
['c1x1x1', m3, 25,-32, 12, 54, 0,0,0],
|
||||
['c1x1x1', m3, 25,-28, 12, 54, 0,0,0],
|
||||
['c1x1x1', m3, 25,-28, 16, 54, 0,0,0],
|
||||
['c1x1x1', m3, 25,-32, 16, 54, 0,0,0],
|
||||
['c1x1x1', m3, 25,-24, -4, 54, 0,0,0],
|
||||
['c1x1x1', m3, 25,-20, -4, 54, 0,0,0],
|
||||
['c1x1x1', m3, 25,-20, -8, 54, 0,0,0],
|
||||
['c1x1x1', m3, 25,-24, -8, 54, 0,0,0],
|
||||
['c1x1x1', m3, 26,-32, 12, 57, 0,0,0],
|
||||
['c1x1x1', m3, 26,-28, 12, 57, 0,0,0],
|
||||
['c1x1x1', m3, 26,-28, 16, 57, 0,0,0],
|
||||
['c1x1x1', m3, 26,-32, 16, 57, 0,0,0],
|
||||
['c1x1x1', m3, 26,-24, -4, 57, 0,0,0],
|
||||
['c1x1x1', m3, 26,-20, -4, 57, 0,0,0],
|
||||
['c1x1x1', m3, 26,-20, -8, 57, 0,0,0],
|
||||
['c1x1x1', m3, 26,-24, -8, 57, 0,0,0],
|
||||
['f1x2x1', m6, 27,-20, -8, 60, 0,0,90],
|
||||
['f1x2x1', m6, 27,-20, -4, 60, 0,0,90],
|
||||
['f1x2x1', m6, 27,-22, -8, 63, 0,0,0],
|
||||
['c1x1x1', m6, 27,-22, -6, 66, 0,0,0],
|
||||
['c1x1x1', m7, 27,-22, -6, 69, 0,0,0],
|
||||
['b2x2x1', m3, 28,-32, 12, 60, 0,0,0],
|
||||
['b2x2x1', m5, 28,-32, 12, 63, 0,0,0],
|
||||
['c1x1x1', m3, 28,-32, 12, 66, 0,0,0],
|
||||
['c1x1x1', m3, 28,-28, 12, 66, 0,0,0],
|
||||
['c1x1x1', m3, 28,-28, 16, 66, 0,0,0],
|
||||
['c1x1x1', m3, 28,-32, 16, 66, 0,0,0],
|
||||
['b2x2x1', m3, 28,-32, 12, 69, 0,0,0],
|
||||
['f1x2x1', m5, 29,-28, 12, 72, 0,0,90],
|
||||
['f1x2x1', m5, 29,-28, 16, 72, 0,0,90],
|
||||
['f1x2x1', m5, 29,-30, 12, 75, 0,0,0],
|
||||
['c1x1x1', m5, 29,-30, 12, 78, 0,0,0],
|
||||
['c1x1x1', m5, 29,-30, 12, 81, 0,0,0],
|
||||
['c1x1x1', m7, 29,-30, 12, 84, 0,0,0],
|
||||
['b2x3x1', m5, 30, -8, 0, 57, 0,0,0],
|
||||
['b2x3x1', m5, 30,-16, 0, 57, 0,0,0],
|
||||
['b2x3x1', m5, 30,-24, 0, 57, 0,0,0],
|
||||
['b2x3x1', m5, 30,-32, 0, 57, 0,0,0],
|
||||
['b2x3x1', m5, 30,-40, 0, 57, 0,0,0],
|
||||
['b1x4x1', m5, 30, -4, 4, 60, 0,0,90],
|
||||
['b1x2x1', m5, 30,-20, 4, 60, 0,0,90],
|
||||
['b1x4x1', m5, 30,-28, 4, 60, 0,0,90],
|
||||
['b1x3x1', m5, 31, -4, 4, 63, 0,0,90],
|
||||
['b1x4x1', m5, 31,-16, 4, 63, 0,0,90],
|
||||
['b1x3x1', m5, 31,-32, 4, 63, 0,0,90],
|
||||
['c1x1x1', m7, 31, -4, 4, 66, 0,0,0],
|
||||
['c1x1x1', m7, 31,-40, 4, 66, 0,0,0],
|
||||
['c1x1x1', m8, 32,-32,-36, 3, 0,0,0],
|
||||
['b1x2x1', m9, 32, 0, 0, 3, 0,0,45, 1],
|
||||
['b1x2x1', m9, 32, 0, 0, 6, 0,0,-45, 1],
|
||||
['b1x2x1', m9, 32, 0, 0, 9, 0,0,45, 1],
|
||||
['c1x1x1', m9, 32, 0, 0, 12, 0,0,0, 1],
|
||||
['c1x1x1', m8, 33,-12,-24, 3, 0,0,0],
|
||||
['b1x2x1', m9, 33, 0, 0, 3, 0,0,45, 1],
|
||||
['b1x2x1', m9, 33, 0, 0, 6, 0,0,-45, 1],
|
||||
['b1x2x1', m9, 33, 0, 0, 9, 0,0,45, 1],
|
||||
['b1x2x1', m9, 33, 0, 0, 12, 0,0,-45, 1],
|
||||
['b1x2x1', m9, 33, 0, 0, 15, 0,0,45, 1],
|
||||
['c1x1x1', m9, 33, 0, 0, 18, 0,0,0, 1],
|
||||
['c1x1x1', m8, 34, 16,-36, 3, 0,0,0],
|
||||
['b1x2x1', m9, 34, 0, 0, 3, 0,0,45, 1],
|
||||
['b1x2x1', m9, 34, 0, 0, 6, 0,0,-45, 1],
|
||||
['b1x2x1', m9, 34, 0, 0, 9, 0,0,45, 1],
|
||||
['c1x1x1', m9, 34, 0, 0, 12, 0,0,0, 1],
|
||||
['c1x1x1', m8, 35, 32,-24, 3, 0,0,0],
|
||||
['b1x2x1', m9, 35, 0, 0, 3, 0,0,45, 1],
|
||||
['b1x2x1', m9, 35, 0, 0, 6, 0,0,-45, 1],
|
||||
['b1x2x1', m9, 35, 0, 0, 9, 0,0,45, 1],
|
||||
['b1x2x1', m9, 35, 0, 0, 12, 0,0,-45, 1],
|
||||
['b1x2x1', m9, 35, 0, 0, 15, 0,0,45, 1],
|
||||
['c1x1x1', m9, 35, 0, 0, 18, 0,0,0, 1],
|
||||
['c1x1x1', m8, 36,-20, 28, 3, 0,0,0],
|
||||
['b1x2x1', m9, 36, 0, 0, 3, 0,0,45, 1],
|
||||
['b1x2x1', m9, 36, 0, 0, 6, 0,0,-45, 1],
|
||||
['b1x2x1', m9, 36, 0, 0, 9, 0,0,45, 1],
|
||||
['b1x2x1', m9, 36, 0, 0, 12, 0,0,-45, 1],
|
||||
['b1x2x1', m9, 36, 0, 0, 15, 0,0,45, 1],
|
||||
['c1x1x1', m9, 36, 0, 0, 18, 0,0,0, 1],
|
||||
['c1x1x1', m8, 37, 16, 32, 3, 0,0,0],
|
||||
['b1x2x1', m9, 37, 0, 0, 3, 0,0,45, 1],
|
||||
['b1x2x1', m9, 37, 0, 0, 6, 0,0,-45, 1],
|
||||
['b1x2x1', m9, 37, 0, 0, 9, 0,0,45, 1],
|
||||
['c1x1x1', m9, 37, 0, 0, 12, 0,0,0, 1],
|
||||
['c1x1x1', m3, 38, 36, -4, 3, 0,0,0],
|
||||
['b1x2x1', m10, 38, 36, 0, 3, 0,0,90],
|
||||
['b1x2x1', m10, 38, 36, 12, 3, 0,0,90],
|
||||
['c1x1x1', m3, 38, 36, 16, 3, 0,0,0],
|
||||
['c1x1x1', m3, 39, 36, -4, 6, 0,0,0],
|
||||
['b1x2x1', m10, 39, 36, 0, 6, 0,0,90],
|
||||
['b1x2x1', m10, 39, 36, 12, 6, 0,0,90],
|
||||
['c1x1x1', m3, 39, 36, 16, 6, 0,0,0],
|
||||
['c1x1x1', m3, 40, 36, -4, 9, 0,0,0],
|
||||
['b1x2x1', m10, 40, 36, 0, 9, 0,0,90],
|
||||
['b1x2x1', m10, 40, 36, 12, 9, 0,0,90],
|
||||
['c1x1x1', m3, 40, 36, 16, 9, 0,0,0],
|
||||
['c1x1x1', m3, 41, 36, -4, 12, 0,0,0],
|
||||
['b1x2x1', m10, 41, 36, 0, 12, 0,0,90],
|
||||
['b1x2x1', m10, 41, 36, 12, 12, 0,0,90],
|
||||
['c1x1x1', m3, 41, 36, 16, 12, 0,0,0],
|
||||
['b2x2x1', m3, 41, 32, 4, 12, 0,0,0],
|
||||
['c1x1x1', m3, 42, 36, -4, 15, 0,0,0],
|
||||
['b2x4x1', m10, 42, 32, 0, 15, 0,0,0],
|
||||
['c1x1x1', m3, 42, 36, 16, 15, 0,0,0],
|
||||
['b1x1x1', m3, 43, 36, -4, 18, 0,0,0],
|
||||
['b1x2x1', m6, 43, 36, 0, 18, 0,0,90],
|
||||
['b1x2x1', m6, 43, 36, 12, 18, 0,0,90],
|
||||
['b1x1x1', m3, 43, 36, 16, 18, 0,0,0],
|
||||
['b2x2x1', m10, 43, 32, 4, 18, 0,0,0],
|
||||
['c1x1x1', m6, 44, 36, -4, 21, 0,0,0],
|
||||
['c1x1x1', m6, 44, 36, 16, 21, 0,0,0],
|
||||
['f1x2x1', m6, 44, 36, 4, 21, 0,0,0],
|
||||
['f1x2x1', m6, 44, 32, 4, 21, 0,0,0],
|
||||
['f1x2x1', m6, 44, 36, 6, 24, 0,0,90],
|
||||
];
|
@@ -1,9 +1,8 @@
|
||||
//Leency, Veliant, Punk_Joker, PavelYakov & KolibriOS Team 2008-2022
|
||||
//Leency, Veliant, Punk_Joker, PavelYakov & KolibriOS Team 2008-2025
|
||||
//GNU GPL license.
|
||||
|
||||
/*
|
||||
BUGS:
|
||||
- F1 in KFM (move Properties to an external app)
|
||||
- Ctrl+1+2+3+4 in KFM
|
||||
- Highlight another commands on Ctrl|Shift in KFM like in Classic KFM
|
||||
TODO:
|
||||
@@ -11,9 +10,9 @@ TODO:
|
||||
http://board.kolibrios.org/viewtopic.php?f=23&t=4521&p=77334#p77334
|
||||
*/
|
||||
|
||||
#define ABOUT_TITLE "EOLITE 5.29"
|
||||
#define TITLE_EOLITE "Eolite File Manager 5.29"
|
||||
#define TITLE_KFM "Kolibri File Manager 2.29";
|
||||
#define ABOUT_TITLE "Eolite 5.32"
|
||||
#define TITLE_EOLITE "Eolite File Manager 5.32"
|
||||
#define TITLE_KFM "Kolibri File Manager 2.32";
|
||||
|
||||
#define MEMSIZE 1024 * 250
|
||||
#include "../lib/clipboard.h"
|
||||
@@ -26,12 +25,15 @@ TODO:
|
||||
#include "../lib/kfont.h"
|
||||
#include "../lib/collection.h"
|
||||
#include "../lib/copyf.h"
|
||||
#include "../lib/dll.h"
|
||||
|
||||
#include "../lib/obj/libini.h"
|
||||
#include "../lib/obj/box_lib.h"
|
||||
#include "../lib/obj/libimg.h"
|
||||
#include "../lib/obj/proc_lib.h"
|
||||
|
||||
#include "../lib/patterns/history.h"
|
||||
#include "../lib/patterns/select_list.h"
|
||||
|
||||
#include "imgs/images.h"
|
||||
#include "include/const.h"
|
||||
@@ -110,6 +112,8 @@ edit_box popin_text = {200,213,180,0xFFFFFF,0x94AECE,0xFFFFFF,0xFFFFFF,0x1000000
|
||||
|
||||
PathShow_data FileShow = {0, 56,215, 8, 100, 1, 0, 0x0, 0xFFFfff, #file_name, #temp, 0};
|
||||
|
||||
_ini icons_ini = { "/sys/File managers/icons.ini", NULL };
|
||||
|
||||
#include "include\settings.h"
|
||||
#include "include\gui.h"
|
||||
#include "include\progress_dialog.h"
|
||||
@@ -121,6 +125,8 @@ PathShow_data FileShow = {0, 56,215, 8, 100, 1, 0, 0x0, 0xFFFfff, #file_name, #t
|
||||
#include "include\about.h"
|
||||
#include "include\properties.h"
|
||||
|
||||
#include "search.c"
|
||||
|
||||
void handle_param()
|
||||
{
|
||||
//-p <path> : just show file/folder properties dialog
|
||||
@@ -146,6 +152,14 @@ void handle_param()
|
||||
|
||||
if (ESBYTE[p]=='\0') return;
|
||||
|
||||
if (ESBYTE[p]=='\\') switch (ESBYTE[p+1])
|
||||
{
|
||||
case 's':
|
||||
strcpy(path, p + 3);
|
||||
SearchThread();
|
||||
ExitProcess();
|
||||
}
|
||||
|
||||
if (ESBYTE[p]=='-') switch (ESBYTE[p+1])
|
||||
{
|
||||
case 'p':
|
||||
@@ -429,6 +443,9 @@ void main()
|
||||
}
|
||||
EventDriveClick(key_scancode);
|
||||
break;
|
||||
case SCAN_CODE_KEY_P:
|
||||
EventCopyItemPath();
|
||||
break;
|
||||
case SCAN_CODE_KEY_X:
|
||||
CopyFilesListToClipboard(CUT);
|
||||
break;
|
||||
@@ -438,6 +455,9 @@ void main()
|
||||
case SCAN_CODE_KEY_G:
|
||||
EventOpenConsoleHere();
|
||||
break;
|
||||
case SCAN_CODE_KEY_F:
|
||||
EventOpenSearch();
|
||||
break;
|
||||
case SCAN_CODE_KEY_V:
|
||||
EventPaste(path);
|
||||
break;
|
||||
@@ -698,7 +718,7 @@ void DrawFilePanels()
|
||||
DrawButtonsAroundList();
|
||||
path = location[active_panel^1];
|
||||
active_panel ^= 1;
|
||||
OpenDir2(WITH_REDRAW);
|
||||
OpenDir_without_unselect(WITH_REDRAW);
|
||||
active_panel ^= 1;
|
||||
if (!getSelectedCount()) files_inactive.count = files.count;
|
||||
llist_copy(#files, #files_active);
|
||||
@@ -711,38 +731,22 @@ void DrawFilePanels()
|
||||
|
||||
DrawButtonsAroundList();
|
||||
path = location[active_panel];
|
||||
OpenDir2(WITH_REDRAW);
|
||||
OpenDir_without_unselect(WITH_REDRAW);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenDir2(char redraw){
|
||||
if (buf) free(buf);
|
||||
if (GetDir(#buf, #files.count, path, DIRS_NOROOT)) {
|
||||
Write_Error(EAX);
|
||||
history.add(path);
|
||||
EventHistoryGoBack();
|
||||
return;
|
||||
}
|
||||
SetCurDir(path);
|
||||
if (files.count>0) && (files.cur_y-files.first==-1) files.cur_y=0;
|
||||
files.visible = math.min(files.h / files.item_h, files.count);
|
||||
if (!strncmp(path, "/rd/1",5)) || (!strncmp(path, "/sys/",4))
|
||||
dir_at_fat16 = true; else dir_at_fat16 = false;
|
||||
Sorting();
|
||||
SystemDiscs.Draw();
|
||||
list_full_redraw = true;
|
||||
List_ReDraw();
|
||||
DrawPathBar();
|
||||
}
|
||||
|
||||
|
||||
void OpenDir(char redraw) {
|
||||
int errornum;
|
||||
unselectAll();
|
||||
OpenDir_without_unselect(redraw);
|
||||
}
|
||||
|
||||
|
||||
void OpenDir_without_unselect(char redraw) {
|
||||
int errornum;
|
||||
|
||||
if (buf) free(buf);
|
||||
if (errornum = GetDir(#buf, #files.count, path, DIRS_NOROOT)) {
|
||||
history.add(path);
|
||||
//EventHistoryGoBack();
|
||||
Dir_Up();
|
||||
Write_Error(errornum);
|
||||
return;
|
||||
@@ -1037,7 +1041,6 @@ void EventHistoryGoForward()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ShowOpenWithDialog()
|
||||
{
|
||||
byte open_param[4097];
|
||||
@@ -1131,6 +1134,7 @@ void ShowPopinForm(byte _popin_type)
|
||||
break;
|
||||
case POPIN_DELETE:
|
||||
if (!files.count) return;
|
||||
popin_string[0] = -1;
|
||||
if (!getSelectedCount()) && (!strncmp(#file_name,"..",2)) return;
|
||||
popinx = DrawEolitePopup(T_YES, T_NO);
|
||||
WriteTextCenter(popinx, 178, POPIN_W, sc.work_text, T_DELETE_FILE);
|
||||
@@ -1322,6 +1326,18 @@ void EventOpenConsoleHere()
|
||||
RunProgram("/sys/shell", #param);
|
||||
}
|
||||
|
||||
void EventOpenSearch()
|
||||
{
|
||||
sprintf(#param, "\\s %s", path);
|
||||
RunProgram(#program_path, #param);
|
||||
}
|
||||
|
||||
|
||||
void EventCopyItemPath()
|
||||
{
|
||||
Clipboard__CopyText(#file_path);
|
||||
}
|
||||
|
||||
void ProceedMouseGestures()
|
||||
{
|
||||
char stats;
|
||||
|
@@ -1,16 +1,8 @@
|
||||
if tup.getconfig("NO_CMM") ~= "" then return end
|
||||
if tup.getconfig("NO_TCC") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_tcc.lua")
|
||||
|
||||
if tup.getconfig("LANG") == "ru_RU"
|
||||
then C_LANG = "LANG_RUS"
|
||||
else C_LANG = "LANG_ENG" -- this includes default case without config
|
||||
end
|
||||
|
||||
LFLAGS = LFLAGS .. " -stack=20480"
|
||||
LIBS += " ../../develop/ktcc/trunk/bin/lib/tiny.o -nostdlib -lbox_lib -lini -limg"
|
||||
|
||||
tup.rule("Eolite.c", "c-- -coff /D=" .. C_LANG .. " /OPATH=%o %f", "%B.obj")
|
||||
tup.rule("Eolite.obj", "objconv -felf32 %f %o", "%B.o")
|
||||
link_tcc("Eolite.o", "%B.com")
|
||||
tup.rule("Eolite.c", "c-- /D=$(C_LANG) /OPATH=%o %f" .. tup.getconfig("KPACK_CMD"), "Eolite.com")
|
||||
|
@@ -1,4 +1,3 @@
|
||||
_ini icons_ini = { "/sys/File managers/icons.ini", NULL };
|
||||
|
||||
struct ICONS_INI {
|
||||
collection exts;
|
||||
|
@@ -4,6 +4,8 @@ char file_actions[]=
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |Enter
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |Ctrl+Ent
|
||||
-
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> |Ctrl+P
|
||||
-
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|Ctrl+C
|
||||
<EFBFBD><EFBFBD>१<EFBFBD><EFBFBD><EFBFBD>|Ctrl+X
|
||||
<EFBFBD><EFBFBD>⠢<EFBFBD><EFBFBD><EFBFBD>|Ctrl+V
|
||||
@@ -15,8 +17,10 @@ char empty_folder_actions[]=
|
||||
"<EFBFBD><EFBFBD>⠢<EFBFBD><EFBFBD><EFBFBD> |Ctrl+V";
|
||||
char burger_menu_items[] =
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>|Ctrl+N
|
||||
-
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>᮫<EFBFBD>|Ctrl+G
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|Ctrl+R
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|Ctrl+F
|
||||
-
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ன<EFBFBD><EFBFBD>|F10
|
||||
<EFBFBD> <EFBFBD>ணࠬ<EFBFBD><EFBFBD>";
|
||||
|
||||
@@ -25,6 +29,8 @@ char file_actions[]=
|
||||
"Ava |Enter
|
||||
Ava ... |Ctrl+Ent
|
||||
-
|
||||
Copy path |Ctrl+P
|
||||
-
|
||||
Kopeeri |Ctrl+C
|
||||
L<EFBFBD>ika |Ctrl+X
|
||||
Aseta |Ctrl+V
|
||||
@@ -36,8 +42,10 @@ char empty_folder_actions[]=
|
||||
"Aseta |Ctrl+V";
|
||||
char burger_menu_items[] =
|
||||
"New window|Ctrl+N
|
||||
-
|
||||
Open console here|Ctrl+G
|
||||
V<EFBFBD>rskenda|Ctrl+R
|
||||
Search|Ctrl+F
|
||||
-
|
||||
Settings|F10
|
||||
About";
|
||||
|
||||
@@ -46,6 +54,8 @@ char file_actions[]=
|
||||
"Open |Enter
|
||||
Open with... |Ctrl+Ent
|
||||
-
|
||||
Copy path |Ctrl+P
|
||||
-
|
||||
Copy |Ctrl+C
|
||||
Cut |Ctrl+X
|
||||
Paste |Ctrl+V
|
||||
@@ -57,8 +67,10 @@ char empty_folder_actions[]=
|
||||
"Paste |Ctrl+V";
|
||||
char burger_menu_items[] =
|
||||
"New window|Ctrl+N
|
||||
-
|
||||
Open console here|Ctrl+G
|
||||
Refresh folder|Ctrl+R
|
||||
Search|Ctrl+F
|
||||
-
|
||||
Settings|F10
|
||||
About";
|
||||
#endif
|
||||
@@ -76,17 +88,18 @@ void EventMenuClick(dword _id)
|
||||
if (active_menu == MENU_FILE) switch(_id) {
|
||||
case 1: EventOpen(0); break;
|
||||
case 2: ShowOpenWithDialog(); break;
|
||||
case 3: CopyFilesListToClipboard(COPY); break;
|
||||
case 4: CopyFilesListToClipboard(CUT); break;
|
||||
case 5: EventPaste(path); break;
|
||||
case 6: FnProcess(2); break;
|
||||
case 7: ShowPopinForm(POPIN_DELETE); break;
|
||||
case 8: FnProcess(1); break;
|
||||
case 3: EventCopyItemPath(); break;
|
||||
case 4: CopyFilesListToClipboard(COPY); break;
|
||||
case 5: CopyFilesListToClipboard(CUT); break;
|
||||
case 6: EventPaste(path); break;
|
||||
case 7: FnProcess(2); break;
|
||||
case 8: ShowPopinForm(POPIN_DELETE); break;
|
||||
case 9: FnProcess(1); break;
|
||||
}
|
||||
if (active_menu == MENU_BURGER) switch(_id) {
|
||||
case 1: EventOpenNewEolite(); break;
|
||||
case 2: EventOpenConsoleHere(); break;
|
||||
case 3: EventRefreshDisksAndFolders(); break;
|
||||
case 3: EventOpenSearch(); break;
|
||||
case 4: FnProcess(10); break;
|
||||
case 5: EventShowAbout(); break;
|
||||
}
|
||||
|
@@ -69,7 +69,7 @@ void settings_dialog()
|
||||
case evKey:
|
||||
GetKeys();
|
||||
if (key_scancode==SCAN_CODE_ESC) ExitSettings();
|
||||
edit_box_key_c stdcall (#path_start_ed,key_ascii << 8);
|
||||
edit_box_key_c stdcall (#path_start_ed,key_editbox);
|
||||
break;
|
||||
|
||||
case evReDraw:
|
||||
|
@@ -1,13 +1,3 @@
|
||||
#define MEMSIZE 100*1000
|
||||
|
||||
#include "../lib/fs.h"
|
||||
#include "../lib/gui.h"
|
||||
#include "../lib/list_box.h"
|
||||
#include "../lib/obj/box_lib.h"
|
||||
#include "../lib/obj/proc_lib.h"
|
||||
#include "../lib/obj/libini.h"
|
||||
#include "../lib/patterns/select_list.h"
|
||||
|
||||
//===================================================//
|
||||
// //
|
||||
// DATA //
|
||||
@@ -34,11 +24,11 @@ enum {
|
||||
BTN_CHOOSE_PATH
|
||||
};
|
||||
|
||||
proc_info Form;
|
||||
#define TOOLBAR_H 100
|
||||
|
||||
edit_box edit_name = {230,13, 30,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(search_name)-2,#search_name,0, ed_focus,0,0};
|
||||
edit_box edit_path = {310,260,30,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(search_path)-2,#search_path,0, 0b,0,0};
|
||||
dword mouse_dd;
|
||||
edit_box edit_name = {230,13, 30,0xffffff,0x94AECE,0xffffff,0xffffff,
|
||||
0x10000000,sizeof(search_name)-2,#search_name,#mouse_dd, ed_focus,0,0};
|
||||
edit_box edit_path = {310,260,30,0xffffff,0x94AECE,0xffffff,0xffffff,
|
||||
0x10000000,sizeof(search_path)-2,#search_path,#mouse_dd, 0b,0,0};
|
||||
|
||||
opendialog open_folder_dialog =
|
||||
{
|
||||
@@ -49,7 +39,7 @@ opendialog open_folder_dialog =
|
||||
0, //dword opendir_path,
|
||||
#search_path, //dword dir_default_path,
|
||||
#open_dialog_path,
|
||||
#draw_window,
|
||||
#draw_window_search,
|
||||
0,
|
||||
#search_path, //dword openfile_path,
|
||||
0, //dword filename_area,
|
||||
@@ -97,47 +87,72 @@ void RESULTS::drop()
|
||||
// //
|
||||
//===================================================//
|
||||
|
||||
void main()
|
||||
void SearchThread()
|
||||
{
|
||||
int prev_first, prev_cur_y;
|
||||
load_dll(boxlib, #box_lib_init,0);
|
||||
load_dll(libini, #lib_init,1);
|
||||
|
||||
load_dll(Proc_lib, #OpenDialog_init,0);
|
||||
OpenDialog_init stdcall (#open_folder_dialog);
|
||||
|
||||
edit_box_set_text stdcall (#edit_name, ".ini");
|
||||
edit_box_set_text stdcall (#edit_path, "/kolibrios");
|
||||
if (!ESBYTE[path]) strcpy(path, "/sys");
|
||||
edit_box_set_text stdcall (#edit_path, path);
|
||||
|
||||
@SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
|
||||
loop() switch(@WaitEvent())
|
||||
{
|
||||
case evMouse:
|
||||
|
||||
edit_box_mouse stdcall (#edit_name);
|
||||
edit_box_mouse stdcall (#edit_path);
|
||||
|
||||
|
||||
prev_cur_y = select_list.cur_y;
|
||||
|
||||
if (SelectList_ProcessMouse()) {
|
||||
SelectList_Draw();
|
||||
} else {
|
||||
SelectList_DrawLine(select_list.cur_y);
|
||||
}
|
||||
if (mouse.key&MOUSE_RIGHT) && (mouse.up) && (select_list.MouseOver()) EventOpenFile(false);
|
||||
break;
|
||||
|
||||
if (select_list.MouseOver(mouse.x, mouse.y))
|
||||
{
|
||||
if (mouse.key&MOUSE_LEFT) && (mouse.up) {
|
||||
if (prev_cur_y == select_list.cur_y) EventRunFile();
|
||||
}
|
||||
|
||||
if (mouse.key&MOUSE_RIGHT) && (mouse.up) {
|
||||
EventShowFileInFolder();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case evButton:
|
||||
switch (@GetButtonID()) {
|
||||
case 1: @ExitProcess(); break;
|
||||
case BTN_SEARCH: EventSearch(); break;
|
||||
case BTN_CHOOSE_PATH: EventChooseSearchInPath();
|
||||
}
|
||||
break;
|
||||
|
||||
break;
|
||||
case evKey:
|
||||
@GetKeys();
|
||||
edit_box_key stdcall (#edit_name);
|
||||
edit_box_key stdcall (#edit_path);
|
||||
GetKeys();
|
||||
edit_box_key_c stdcall (#edit_name, key_editbox);
|
||||
edit_box_key_c stdcall (#edit_path, key_editbox);
|
||||
if (key_scancode == SCAN_CODE_TAB) {
|
||||
if (edit_name.flags & ed_focus) {
|
||||
edit_name.flags >< edit_path.flags;
|
||||
} else if (edit_path.flags & ed_focus) {
|
||||
edit_path.flags -= ed_focus;
|
||||
} else {
|
||||
edit_name.flags += ed_focus;
|
||||
}
|
||||
draw_window_search();
|
||||
break;
|
||||
}
|
||||
if (edit_name.flags & ed_focus) || (edit_path.flags & ed_focus) {
|
||||
if (SCAN_CODE_ENTER == key_scancode) EventSearch();
|
||||
} else {
|
||||
if (SCAN_CODE_ENTER == key_scancode) EventOpenFile(true);
|
||||
if (SCAN_CODE_ENTER == key_scancode) EventRunFile();
|
||||
prev_first = select_list.first;
|
||||
prev_cur_y = select_list.cur_y;
|
||||
if (select_list.ProcessKey(key_scancode)) {
|
||||
@@ -152,33 +167,37 @@ void main()
|
||||
break;
|
||||
|
||||
case evReDraw:
|
||||
draw_window();
|
||||
sc.get();
|
||||
DefineAndDrawWindow(screen.w-600/2,100,640,600,0x73,sc.work,T_WINDOW_HEADER,0);
|
||||
GetProcessInfo(#Form, SelfInfo);
|
||||
IF (Form.status_window&ROLLED_UP) break;
|
||||
if (Form.width < 370) { MoveSize(OLD,OLD,370,OLD); break; }
|
||||
if (Form.height < 250) { MoveSize(OLD,OLD,OLD,250); break; }
|
||||
draw_window_search();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void draw_window()
|
||||
#define TOOLBAR_H 100
|
||||
#define PAD 10
|
||||
#define LISTX PAD
|
||||
#define LISTY TOOLBAR_H
|
||||
|
||||
void draw_window_search()
|
||||
{
|
||||
sc.get();
|
||||
DefineAndDrawWindow(screen.w-600/2,100,640,600,0x73,sc.work,T_WINDOW_HEADER,0);
|
||||
GetProcessInfo(#Form, SelfInfo);
|
||||
IF (Form.status_window&ROLLED_UP) return;
|
||||
if (Form.width < 270) { MoveSize(OLD,OLD,270,OLD); return; }
|
||||
if (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); return; }
|
||||
SelectList_Init( 0, TOOLBAR_H,
|
||||
Form.cwidth-scroll1.size_x-1,
|
||||
Form.cheight-TOOLBAR_H-1);
|
||||
SelectList_Init(LISTX, LISTY, Form.cwidth-scroll1.size_x-LISTX-LISTX, Form.cheight-TOOLBAR_H-PAD);
|
||||
SelectList_Draw();
|
||||
DrawBar(0, TOOLBAR_H-1, Form.cwidth, 1, sc.line);
|
||||
DrawWideRectangle(0, LISTY-PAD-1, Form.cwidth, Form.cheight-TOOLBAR_H+PAD+1, 9, sc.work);
|
||||
DrawRectangle(PAD-1, LISTY-1, select_list.w+1, select_list.h+1, sc.line);
|
||||
|
||||
DrawBar(0, 0, Form.cwidth, TOOLBAR_H-1, sc.work);
|
||||
DrawEditBox(#edit_name);
|
||||
WriteText(edit_name.left-2, edit_name.top-20, 0x90, sc.work_text, T_SEARCH_NAME);
|
||||
edit_path.width = Form.cwidth - 314;
|
||||
DrawStandartCaptButton(PAD, 63, BTN_SEARCH, T_BUTTON_SEARCH);
|
||||
DrawFileBox(#edit_path, T_SEARCH_PATH, BTN_CHOOSE_PATH);
|
||||
DrawStandartCaptButton(10, 63, BTN_SEARCH, T_BUTTON_SEARCH);
|
||||
}
|
||||
|
||||
_ini ini = { "/sys/File managers/icons.ini", "icons16" };
|
||||
void SelectList_DrawLine(dword i)
|
||||
{
|
||||
int yyy = i*select_list.item_h+select_list.y;
|
||||
@@ -201,16 +220,19 @@ void SelectList_DrawLine(dword i)
|
||||
} else {
|
||||
strcpy(#tname, results.name.get(select_list.first + i));
|
||||
strlwr(#tname);
|
||||
icon = ini.GetInt(#tname + strrchr(#tname, '.'), 2);
|
||||
icons_ini.section = "icons16";
|
||||
icon = icons_ini.GetInt(#tname + strrchr(#tname, '.'), 2);
|
||||
}
|
||||
|
||||
#define ICONX 7
|
||||
DrawBar(select_list.x, yyy, ICONX-1, select_list.item_h, 0xFFFfff);
|
||||
DrawBar(select_list.x+ICONX+18, yyy, select_list.w-ICONX-18, select_list.item_h, bg);
|
||||
draw_icon_16(select_list.x+ICONX, yyy+1, icon);
|
||||
DrawBar(LISTX, yyy, ICONX, select_list.item_h, 0xFFFfff);
|
||||
DrawBar(LISTX+ICONX, yyy, 18, 1, 0xFFFfff);
|
||||
DrawBar(LISTX+ICONX, yyy + select_list.item_h-1, 18, 1, 0xFFFfff);
|
||||
DrawBar(LISTX+ICONX+18, yyy, select_list.w-ICONX-18, select_list.item_h, bg);
|
||||
draw_icon_16(LISTX+ICONX, yyy+1, icon);
|
||||
|
||||
WriteText(select_list.x + ICONX+18+4,yyy+select_list.text_y,0x90, col, results.name.get(select_list.first + i));
|
||||
WriteText(select_list.x + ICONX+18+206,yyy+select_list.text_y,0x90, col, results.path.get(select_list.first + i));
|
||||
WriteText(LISTX + ICONX+18+4,yyy+select_list.text_y,0x90, col, results.name.get(select_list.first + i));
|
||||
WriteText(LISTX + ICONX+18+206,yyy+select_list.text_y,0x90, col, results.path.get(select_list.first + i));
|
||||
}
|
||||
|
||||
void SelectList_LineChanged()
|
||||
@@ -218,6 +240,12 @@ void SelectList_LineChanged()
|
||||
return;
|
||||
}
|
||||
|
||||
void getfullpath(dword to, path, name) {
|
||||
strcpy(to, path);
|
||||
chrcat(to, '/');
|
||||
strcat(to, name);
|
||||
}
|
||||
|
||||
//===================================================//
|
||||
// //
|
||||
// EVENTS //
|
||||
@@ -232,22 +260,21 @@ void EventChooseSearchInPath()
|
||||
}
|
||||
}
|
||||
|
||||
void getfullpath(dword to, path, name) {
|
||||
strcpy(to, path);
|
||||
chrcat(to, '/');
|
||||
strcat(to, name);
|
||||
}
|
||||
|
||||
void EventOpenFile(int run_file_not_show_in_folder)
|
||||
void EventShowFileInFolder()
|
||||
{
|
||||
char full_path[4096];
|
||||
int pos = select_list.cur_y;
|
||||
getfullpath(#full_path, results.path.get(pos), results.name.get(pos));
|
||||
if (run_file_not_show_in_folder) {
|
||||
RunProgram("/sys/@open", #full_path);
|
||||
} else {
|
||||
RunProgram("/sys/file managers/eolite", #full_path);
|
||||
RunProgram(#program_path, #full_path);
|
||||
}
|
||||
|
||||
void EventRunFile()
|
||||
{
|
||||
char full_path[4096];
|
||||
int pos = select_list.cur_y;
|
||||
getfullpath(#full_path, results.path.get(pos), results.name.get(pos));
|
||||
if (dir_exists(#full_path)) chrcat(#full_path, '/');
|
||||
RunProgram("/sys/@open", #full_path);
|
||||
}
|
||||
|
||||
void EventSearch()
|
||||
@@ -289,6 +316,4 @@ void find_loop(dword way)
|
||||
}
|
||||
}
|
||||
|
||||
stop:
|
||||
|
||||
|
@@ -9,7 +9,6 @@
|
||||
#pragma option -CPA
|
||||
#initallvar 0
|
||||
|
||||
#ifndef __COFF__
|
||||
#jumptomain FALSE
|
||||
|
||||
#startaddress 0
|
||||
@@ -30,17 +29,6 @@ dword I_Param = #param;
|
||||
dword I_Path = #program_path;
|
||||
char param[4096];
|
||||
char program_path[4096];
|
||||
#else
|
||||
extern dword __argv;
|
||||
extern dword __path;
|
||||
|
||||
dword I_Param = #__argv;
|
||||
dword I_Path = #__path;
|
||||
|
||||
#define param __argv
|
||||
#define program_path __path
|
||||
#define ______INIT______ start
|
||||
#endif
|
||||
|
||||
#define bool int
|
||||
|
||||
@@ -403,6 +391,7 @@ inline fastcall int TestBit( EAX, CL)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define MINIMIZED 0x02
|
||||
#define ROLLED_UP 0x04
|
||||
:void DefineAndDrawWindow(dword _x, _y, _w, _h, _window_type, _bgcolor, _title, _flags)
|
||||
{
|
||||
|
@@ -116,17 +116,10 @@
|
||||
EAX = 37;
|
||||
EBX = 2;
|
||||
$int 64
|
||||
$mov ebx, eax
|
||||
$mov ecx, eax
|
||||
key = EAX;
|
||||
$and eax, 0x00000001
|
||||
$shr ebx, 1
|
||||
$and ebx, 0x00000001
|
||||
$shr ecx, 2
|
||||
$and ecx, 0x00000001
|
||||
lkm = EAX;
|
||||
pkm = EBX;
|
||||
mkm = ECX;
|
||||
lkm = EAX&MOUSE_LEFT;
|
||||
pkm = EAX&MOUSE_RIGHT;
|
||||
mkm = EAX&MOUSE_MIDDLE;
|
||||
|
||||
//when you release the MOUSE button
|
||||
// Mouse Move Event
|
||||
|
@@ -6,37 +6,6 @@
|
||||
#include "../lib/kolibri.h"
|
||||
#endif
|
||||
|
||||
#ifdef __COFF__
|
||||
extern dword edit_box_draw;
|
||||
extern dword edit_box_key_safe;
|
||||
extern dword edit_box_mouse;
|
||||
extern dword edit_box_set_text;
|
||||
|
||||
extern dword scrollbar_v_draw;
|
||||
extern dword scrollbar_v_mouse;
|
||||
extern dword scrollbar_h_draw;
|
||||
extern dword scrollbar_h_mouse;
|
||||
|
||||
extern dword PathShow_prepare;
|
||||
extern dword PathShow_draw;
|
||||
|
||||
extern dword progressbar_draw;
|
||||
extern dword progressbar_progress;
|
||||
|
||||
extern dword frame_draw;
|
||||
|
||||
/*
|
||||
Legacy support
|
||||
For new programs need to use edit_box_key_safe (or edit_box_key_c
|
||||
with a define below)
|
||||
TODO: change in all cmm programs edit_box_key to edit_box_key_safe (edit_box_key_c)
|
||||
See examples in eolite and imgedit
|
||||
|
||||
This define changed all edit_box_key_c to edit_box_key_safe identifier's
|
||||
*/
|
||||
#define edit_box_key_c edit_box_key_safe
|
||||
|
||||
#else
|
||||
#ifndef INCLUDE_DLL_H
|
||||
#include "../lib/dll.h"
|
||||
#endif
|
||||
@@ -242,5 +211,3 @@ struct frame
|
||||
frame_draw stdcall (#frame123);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
@@ -44,15 +44,14 @@ signed SelectList_ProcessMouse()
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mouse.up) && (mouse.click)
|
||||
if (select_list.ProcessMouse(mouse.x, mouse.y)) {
|
||||
if (mouse.up) && (select_list.ProcessMouse(mouse.x, mouse.y)) {
|
||||
SelectList_LineChanged();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void SelectList_DrawBorder() {
|
||||
:void SelectList_DrawBorder() {
|
||||
DrawRectangle3D(select_list.x-2, select_list.y-2,
|
||||
select_list.w+3+scroll1.size_x, select_list.h+3,
|
||||
sc.dark, sc.light);
|
||||
@@ -61,8 +60,8 @@ void SelectList_DrawBorder() {
|
||||
|
||||
void SelectList_DrawScroller()
|
||||
{
|
||||
scroll1.bckg_col = MixColors(sc.work, 0xBBBbbb, 80);
|
||||
scroll1.frnt_col = MixColors(sc.work,0xFFFfff,120);
|
||||
scroll1.bckg_col = sc.dark; // MixColors(sc.work, 0xBBBbbb, 80);
|
||||
scroll1.frnt_col = sc.light; // MixColors(sc.work,0xFFFfff,120);
|
||||
scroll1.line_col = sc.line;
|
||||
|
||||
scroll1.max_area = select_list.count;
|
||||
|
13
programs/cmm/misc/search.c
Normal file
13
programs/cmm/misc/search.c
Normal file
@@ -0,0 +1,13 @@
|
||||
#define MEMSIZE 1024*20
|
||||
#define ENTRY_POINT #main
|
||||
|
||||
#include "../lib/fs.h"
|
||||
|
||||
void main()
|
||||
{
|
||||
char param2[4096];
|
||||
strcpy(#param2, "\\s ");
|
||||
strncpy(#param2 + 3, #param, sizeof(param2) - 2 - 3);
|
||||
RunProgram("/sys/File managers/Eolite", #param2);
|
||||
ExitProcess();
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
if tup.getconfig("NO_CMM") ~= "" then return end
|
||||
if tup.getconfig("LANG") == "ru_RU"
|
||||
then C_LANG = "LANG_RUS"
|
||||
else C_LANG = "LANG_ENG" -- this includes default case without config
|
||||
end
|
||||
tup.rule("search.c", "c-- /D=$(C_LANG) /OPATH=%o %f" .. tup.getconfig("KPACK_CMD"), "search.com")
|
@@ -1,10 +0,0 @@
|
||||
@del search
|
||||
@c-- /D=LANG_ENG search.c
|
||||
@rename search.com search
|
||||
@del warning.txt
|
||||
|
||||
if exist search (
|
||||
@exit
|
||||
) else (
|
||||
@pause
|
||||
)
|
@@ -1,10 +0,0 @@
|
||||
@del search
|
||||
@c-- /D=LANG_RUS search.c
|
||||
@rename search.com search
|
||||
@del warning.txt
|
||||
|
||||
if exist search (
|
||||
@exit
|
||||
) else (
|
||||
@pause
|
||||
)
|
@@ -1,7 +1,6 @@
|
||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TreeList <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥪<EFBFBD> box_lib.obj
|
||||
; <EFBFBD><EFBFBD> <20><><EFBFBD> <20>ਬ<EFBFBD><E0A8AC><EFBFBD><EFBFBD><EFBFBD> GPL2 <20><>業<EFBFBD><E6A5AD><EFBFBD>
|
||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>䨪<EFBFBD><E4A8AA><EFBFBD><EFBFBD> 12.01.2021 IgorA
|
||||
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; TreeList: used as a ListBox or Tree control (determined by settings)
|
||||
; Copyright (C) 2009-2025 IgorA <aie85playm@gmail.com>
|
||||
|
||||
struct TreeNode
|
||||
type dw ? ;+ 0 ⨯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 㧫<>
|
||||
@@ -14,6 +13,52 @@ struct TreeNode
|
||||
ends
|
||||
|
||||
|
||||
;input:
|
||||
; ecx - 0xXX...... font options
|
||||
;output:
|
||||
; eax - font height in pixels
|
||||
align 4
|
||||
proc get_font_h uses ebx
|
||||
mov eax,ecx
|
||||
shr eax,24
|
||||
bt eax,4
|
||||
jc @f
|
||||
bt eax,5
|
||||
jc @f
|
||||
mov ebx,9
|
||||
jmp .siz0
|
||||
@@:
|
||||
mov ebx,16
|
||||
.siz0:
|
||||
and eax,7
|
||||
inc eax
|
||||
imul eax,ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
;input:
|
||||
; ecx - 0xXX...... font options
|
||||
;output:
|
||||
; eax - font width in pixels
|
||||
align 4
|
||||
proc get_font_w uses ebx
|
||||
mov eax,ecx
|
||||
shr eax,24
|
||||
bt eax,4
|
||||
jc @f
|
||||
bt eax,5
|
||||
jc @f
|
||||
mov ebx,6
|
||||
jmp .siz0
|
||||
@@:
|
||||
mov ebx,8
|
||||
.siz0:
|
||||
and eax,7
|
||||
inc eax
|
||||
imul eax,ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
;<3B>뤥<EFBFBD><EBA4A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᯨ᪠ <20> <20>᭮<EFBFBD><E1ADAE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ଠ樨 (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
align 16
|
||||
proc tl_data_init uses eax ecx edi, tlist:dword
|
||||
@@ -463,34 +508,24 @@ proc tl_draw, tlist:dword
|
||||
|
||||
cmp tl_capt_cy,9 ;9 - minimum caption height
|
||||
jl @f
|
||||
mov ebx,edi ;calculate cursor position
|
||||
mov eax,tl_cur_pos
|
||||
inc eax
|
||||
lea edi,[txt_capt_cur.v]
|
||||
stdcall tl_convert_to_str, 5
|
||||
|
||||
mov edi,ebx
|
||||
call tl_draw_caption_cur_pos
|
||||
mov eax,tl_tim_undo
|
||||
or eax,eax
|
||||
jz @f
|
||||
mov ebx,edi ;save edi
|
||||
lea edi,[txt_capt_otm.v]
|
||||
stdcall tl_convert_to_str, 5
|
||||
mov edi,ebx ;restore edi
|
||||
|
||||
mov eax,SF_DRAW_TEXT ;captions
|
||||
mov ebx,tl_box_left
|
||||
shl ebx,16
|
||||
add ebx,5*65536+3
|
||||
add ebx,tl_box_top
|
||||
mov ecx,tl_col_txt
|
||||
or ecx,0x80000000
|
||||
lea edx,[txt_capt_cur]
|
||||
int 0x40
|
||||
|
||||
mov ebx,tl_box_left
|
||||
shl ebx,16
|
||||
add ebx,100*65536+3
|
||||
mov ecx,tl_col_txt
|
||||
and ecx,0x00ffffff
|
||||
or ecx,0x80000000
|
||||
add ebx,tl_box_top
|
||||
lea edx,[txt_capt_otm]
|
||||
int 0x40
|
||||
mcall SF_DRAW_TEXT ;undo
|
||||
@@:
|
||||
|
||||
;cycle to nodes
|
||||
@@ -1163,10 +1198,11 @@ proc tl_draw_node_caption uses ebx ecx edx esi
|
||||
ror ecx,16
|
||||
mov ebx,ecx
|
||||
add bx,tl_img_cy ;<3B><>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>࠭<EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sub bx,9 ;<3B>⭨<EFBFBD><E2ADA8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<><E2A5AA><EFBFBD>
|
||||
mov ecx,tl_col_txt
|
||||
and ecx,0xffffff
|
||||
mcall SF_DRAW_TEXT
|
||||
call get_font_h
|
||||
sub bx,ax ;<3B>⭨<EFBFBD><E2ADA8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<><E2A5AA><EFBFBD>
|
||||
and ecx,0x37ffffff
|
||||
mcall SF_DRAW_TEXT ;node text
|
||||
@@:
|
||||
ret
|
||||
endp
|
||||
@@ -1179,13 +1215,15 @@ endp
|
||||
align 4
|
||||
proc tl_get_draw_text_len uses eax ecx edx
|
||||
mov esi,eax ;<3B><>६ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ப<EFBFBD>
|
||||
mov ecx,tl_col_txt
|
||||
call get_font_w
|
||||
mov ecx,eax
|
||||
mov eax,tl_box_left
|
||||
add eax,tl_box_width
|
||||
cmp eax,ebx
|
||||
jle .text_null ;<3B> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><>࠭<EFBFBD><E0A0AD>
|
||||
sub eax,ebx
|
||||
xor edx,edx
|
||||
mov ecx,6 ;<3B><>ਭ<EFBFBD> <20><><EFBFBD>⥬<EFBFBD><E2A5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
div ecx ;ᬮ<>ਬ <>쪮 ᨬ<><E1A8AC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>࠭<EFBFBD>
|
||||
cmp esi,eax
|
||||
jl @f
|
||||
@@ -1858,10 +1896,8 @@ pushad
|
||||
.po8:
|
||||
call tl_node_move_po8 ;㧫<> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>塞 8 <20><>뫮<EFBFBD>
|
||||
.cur_mov:
|
||||
push dword edi
|
||||
call tl_cur_perv
|
||||
push dword edi
|
||||
call tl_draw
|
||||
stdcall tl_cur_perv, edi
|
||||
stdcall tl_draw, edi
|
||||
@@:
|
||||
popad
|
||||
ret
|
||||
@@ -1981,10 +2017,11 @@ tl_draw_caption_cur_pos:
|
||||
add ebx,5*65536+3
|
||||
add ebx,tl_box_top
|
||||
mov ecx,tl_col_txt
|
||||
and ecx,0x00ffffff
|
||||
or ecx,0xc0000000 ;0x40000000 <20><><EFBFBD><EFBFBD><EFBFBD>訢<EFBFBD><E8A8A2><EFBFBD> 䮭 梥⮬ edi
|
||||
lea edx,[txt_capt_cur]
|
||||
mov edi,tl_col_zag
|
||||
mcall SF_DRAW_TEXT ;captions
|
||||
mcall SF_DRAW_TEXT ;row number
|
||||
popad
|
||||
@@:
|
||||
ret
|
||||
@@ -2253,6 +2290,6 @@ align 4
|
||||
jge @f
|
||||
or al,0x30 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 ᨬ<><E1A8AC><EFBFBD> '0'
|
||||
stosb ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> al <20> <20>祪<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [edi]
|
||||
mov byte[edi],0
|
||||
mov word[edi],' ' ;add space symbol and 0
|
||||
@@:
|
||||
ret
|
||||
|
@@ -6,7 +6,7 @@ MK_C_SYM(__ieee754_expf)
|
||||
fstl %st(1)
|
||||
frndint
|
||||
fstl %st(2)
|
||||
fsubrp
|
||||
fsubp
|
||||
f2xm1
|
||||
fld1
|
||||
faddp
|
||||
|
@@ -32,7 +32,6 @@ section '.flat' code readable align 16
|
||||
include "..\..\..\KOSfuncs.inc"
|
||||
include "..\..\..\proc32.inc"
|
||||
include "..\..\..\macros.inc"
|
||||
include "..\..\..\dll.inc"
|
||||
include "..\..\..\bcc32\include\kos_func.inc"
|
||||
include "..\..\..\bcc32\include\kos_heap.inc"
|
||||
|
||||
@@ -44,9 +43,9 @@ include "..\..\..\bcc32\include\kos_heap.inc"
|
||||
@@StrToInt$qpc equ @StrToInt$qpc
|
||||
@@StrToDouble$qpc equ @StrToDouble$qpc
|
||||
|
||||
mem.alloc dd ? ;функция для выделения памяти
|
||||
mem.free dd ? ;функция для освобождения памяти
|
||||
mem.realloc dd ? ;функция для перераспределения памяти
|
||||
mem.alloc dd ? ;memory allocation function
|
||||
mem.free dd ? ;function to free up memory
|
||||
mem.realloc dd ? ;function for memory reallocation
|
||||
dll.load dd ?
|
||||
|
||||
PRECISION equ 16
|
||||
@@ -54,20 +53,20 @@ NNP_FF_BIN equ 0x6e6962
|
||||
NNP_FF_JSON equ 0x6e6f736a
|
||||
|
||||
struct Layer
|
||||
c_size dd ? ;+ 0 curent size - число нейронов в текущем слое
|
||||
n_size dd ? ;+ 4 next size - число нейронов на следующем слое
|
||||
c_size dd ? ;+ 0 curent size - number of neurons in the current layer
|
||||
n_size dd ? ;+ 4 next size - number of neurons in the next layer
|
||||
neurons dd ? ;+ 8 []
|
||||
biases dd ? ;+12 []
|
||||
weights dd ? ;+16 [][]
|
||||
ends
|
||||
|
||||
struct NeuralNetwork
|
||||
learningRate dq ? ;+ 0 скорость обучения
|
||||
layers dd ? ;+ 8 [] слои
|
||||
layers_length dd ? ;+12 число слоев
|
||||
activation dd ? ;+16 указатель на функцию активации
|
||||
derivative dd ? ;+20 указатель на функцию
|
||||
errors dd ? ;+24 массив для вычислений
|
||||
learningRate dq ? ;+ 0
|
||||
layers dd ? ;+ 8 []
|
||||
layers_length dd ? ;+12 number of layers
|
||||
activation dd ? ;+16 pointer to activation function
|
||||
derivative dd ? ;+20 function pointer
|
||||
errors dd ? ;+24 array for calculations
|
||||
errorsNext dd ? ;+28
|
||||
gradients dd ? ;+32
|
||||
deltas dd ? ;+36
|
||||
@@ -113,11 +112,6 @@ proc lib_init
|
||||
mov [mem.free], ebx
|
||||
mov [mem.realloc], ecx
|
||||
mov [dll.load], edx
|
||||
|
||||
or edx, edx
|
||||
jz @f
|
||||
invoke dll.load, @IMPORT
|
||||
@@:
|
||||
ret
|
||||
endp
|
||||
|
||||
@@ -137,6 +131,21 @@ Math_random:
|
||||
@@:
|
||||
db 0,0,128,55 ;dd 1.0/65536.0
|
||||
|
||||
align 16
|
||||
ieee754_exp:
|
||||
fld qword[esp+4]
|
||||
fldl2e ;push log2(e) onto stack
|
||||
fmulp
|
||||
fst st1 ;copies st0 to st1
|
||||
frndint ;round to integer
|
||||
fst st2 ;copies st0 to st2
|
||||
fsubp ;subtraction with stack pop
|
||||
f2xm1 ;raises 2 to the power st0 and subtracts 1
|
||||
fld1
|
||||
faddp
|
||||
fscale ;scale by powers of two
|
||||
ret
|
||||
|
||||
align 16
|
||||
sigmoid:
|
||||
push ebp
|
||||
@@ -145,7 +154,7 @@ sigmoid:
|
||||
fld qword[ebp+8]
|
||||
fchs
|
||||
fstp qword[esp]
|
||||
call dword[_exp]
|
||||
call ieee754_exp
|
||||
add esp,8
|
||||
fadd dword[f_1_0]
|
||||
fdivr dword[f_1_0]
|
||||
@@ -250,18 +259,18 @@ NNP_Create:
|
||||
mov eax,[ebp+28] ;sizes
|
||||
lea edx,[eax+4]
|
||||
mov dword[ebp-8],edx ;save &sizes[i+1]
|
||||
jmp .150
|
||||
jmp .3
|
||||
.cycle_0: ;for (i=0; i < sizes_length; i++)
|
||||
xor ecx,ecx
|
||||
mov dword[ebp-4],ecx ;nextSize = 0
|
||||
mov eax,[ebp+32] ;sizes_length
|
||||
dec eax
|
||||
cmp edi,eax
|
||||
jae .152
|
||||
jae @f
|
||||
mov edx,[ebp-8]
|
||||
mov ecx,[edx]
|
||||
mov dword[ebp-4],ecx ;nextSize = sizes[i+1]
|
||||
.152:
|
||||
@@:
|
||||
mov eax,[ebp-4]
|
||||
push eax
|
||||
mov edx,[ebp-8]
|
||||
@@ -277,7 +286,7 @@ NNP_Create:
|
||||
mov eax,[ebp-8]
|
||||
lea edx,[eax-4]
|
||||
mov dword[ebp-12],edx ;save &sizes[i]
|
||||
jmp .154
|
||||
jmp .2
|
||||
.cycle_1: ;for (j=0; j < sizes[i]; j++)
|
||||
call Math_random
|
||||
fmul dword[f_2_0]
|
||||
@@ -290,7 +299,7 @@ NNP_Create:
|
||||
fstp qword[ecx+8*esi]
|
||||
xor ebx,ebx ;k=0
|
||||
cmp ebx,[ebp-4]
|
||||
jae .157
|
||||
jae .1
|
||||
@@: ;for (k=0; k < nextSize; k++)
|
||||
call Math_random
|
||||
fmul dword[f_2_0]
|
||||
@@ -305,15 +314,15 @@ NNP_Create:
|
||||
inc ebx
|
||||
cmp ebx,[ebp-4]
|
||||
jb @b
|
||||
.157:
|
||||
.1:
|
||||
inc esi
|
||||
.154:
|
||||
.2:
|
||||
mov ecx,[ebp-12]
|
||||
cmp esi,[ecx]
|
||||
jb .cycle_1
|
||||
inc edi
|
||||
add dword[ebp-8],4
|
||||
.150:
|
||||
.3:
|
||||
cmp edi,[ebp+32] ;sizes_length
|
||||
jb .cycle_0
|
||||
;create errors array
|
||||
@@ -349,7 +358,7 @@ f_2_0:
|
||||
f_1_0:
|
||||
dd 1.0
|
||||
|
||||
;заполнение случайными числами
|
||||
;random number filling
|
||||
;+ 8 NeuralNetwork* o
|
||||
align 16
|
||||
NNP_Reset:
|
||||
@@ -413,7 +422,7 @@ NNP_Reset:
|
||||
pop ebp
|
||||
ret 4
|
||||
|
||||
;расчет входных и выходных нейронов
|
||||
;calculation of input and output neurons
|
||||
;+ 8 NeuralNetwork* o
|
||||
;+12 double* inputs
|
||||
align 16
|
||||
@@ -508,7 +517,7 @@ NNP_BackPropagation:
|
||||
add edi,[esi+NeuralNetwork.layers]
|
||||
xor ebx,ebx ;i=0
|
||||
mov eax,[ebp+12] ;eax = targets[]
|
||||
jmp .180
|
||||
jmp .1
|
||||
align 4
|
||||
.cycle_0:
|
||||
mov edx,[edi+Layer.neurons]
|
||||
@@ -518,7 +527,7 @@ align 4
|
||||
fstp qword[ecx+8*ebx]
|
||||
inc ebx
|
||||
add eax,8
|
||||
.180:
|
||||
.1:
|
||||
cmp ebx,[edi+Layer.c_size]
|
||||
jb .cycle_0
|
||||
dec dword[ebp-4] ;k--
|
||||
@@ -528,7 +537,7 @@ align 4
|
||||
.cycle_1:
|
||||
sub edi,sizeof.Layer
|
||||
xor ebx,ebx ;i=0
|
||||
jmp .186
|
||||
jmp .2
|
||||
align 4
|
||||
.cycle_2:
|
||||
mov eax,[edi+sizeof.Layer+Layer.neurons]
|
||||
@@ -541,12 +550,12 @@ align 4
|
||||
mov edx,[esi+NeuralNetwork.gradients]
|
||||
fstp qword[edx+8*ebx]
|
||||
inc ebx
|
||||
.186:
|
||||
.2:
|
||||
cmp ebx,[edi+sizeof.Layer+Layer.c_size]
|
||||
jb .cycle_2
|
||||
mov edx,[esi+NeuralNetwork.deltas]
|
||||
xor ebx,ebx
|
||||
jmp .189
|
||||
jmp .3
|
||||
align 4
|
||||
.cycle_3:
|
||||
mov eax,[edi+Layer.c_size]
|
||||
@@ -556,7 +565,7 @@ align 4
|
||||
pop ecx
|
||||
mov dword[edx],eax
|
||||
xor eax,eax ;j=0
|
||||
jmp .191
|
||||
jmp @f
|
||||
align 4
|
||||
.cycle_4:
|
||||
mov ecx,[esi+NeuralNetwork.gradients]
|
||||
@@ -566,16 +575,16 @@ align 4
|
||||
mov ecx,[edx]
|
||||
fstp qword[ecx+8*eax]
|
||||
inc eax
|
||||
.191:
|
||||
@@:
|
||||
cmp eax,[edi+Layer.c_size]
|
||||
jb .cycle_4
|
||||
inc ebx
|
||||
add edx,4
|
||||
.189:
|
||||
.3:
|
||||
cmp ebx,[edi+sizeof.Layer+Layer.c_size]
|
||||
jb .cycle_3
|
||||
xor ebx,ebx
|
||||
jmp .195
|
||||
jmp .4
|
||||
align 4
|
||||
.cycle_5:
|
||||
mov eax,[esi+NeuralNetwork.errorsNext]
|
||||
@@ -583,7 +592,7 @@ align 4
|
||||
mov dword[eax+8*ebx],edx
|
||||
mov dword[eax+8*ebx+4],edx
|
||||
xor eax,eax ;j=0
|
||||
jmp .197
|
||||
jmp @f
|
||||
align 4
|
||||
.cycle_6:
|
||||
mov edx,[edi+Layer.weights]
|
||||
@@ -595,11 +604,11 @@ align 4
|
||||
fadd qword[ecx+8*ebx]
|
||||
fstp qword[ecx+8*ebx]
|
||||
inc eax
|
||||
.197:
|
||||
@@:
|
||||
cmp eax,[edi+sizeof.Layer+Layer.c_size]
|
||||
jb .cycle_6
|
||||
inc ebx
|
||||
.195:
|
||||
.4:
|
||||
cmp ebx,[edi]
|
||||
jb .cycle_5
|
||||
;copy errors to next level
|
||||
@@ -610,7 +619,7 @@ align 4
|
||||
mov eax,[esi+NeuralNetwork.deltas]
|
||||
mov dword[ebp-12],eax
|
||||
xor ebx,ebx ;i=0
|
||||
jmp .201
|
||||
jmp .6
|
||||
align 4
|
||||
.cycle_7:
|
||||
mov ecx,[esi+NeuralNetwork.gradients]
|
||||
@@ -620,7 +629,7 @@ align 4
|
||||
fstp qword[eax+8*ebx]
|
||||
xor eax,eax ;j=0
|
||||
mov edx,[ebp-12] ;edx = deltas[i]
|
||||
jmp .203
|
||||
jmp .5
|
||||
align 4
|
||||
.cycle_8:
|
||||
; mov ecx,[edx]
|
||||
@@ -656,7 +665,7 @@ align 4
|
||||
; pop edx
|
||||
;@@:
|
||||
inc eax
|
||||
.203:
|
||||
.5:
|
||||
cmp eax,[edi+Layer.c_size]
|
||||
jb .cycle_8
|
||||
mov eax,[ebp-12]
|
||||
@@ -664,7 +673,7 @@ align 4
|
||||
pop ecx
|
||||
inc ebx
|
||||
add dword[ebp-12],4
|
||||
.201:
|
||||
.6:
|
||||
cmp ebx,[edi+sizeof.Layer+Layer.c_size]
|
||||
jb .cycle_7
|
||||
dec dword[ebp-4]
|
||||
@@ -693,8 +702,7 @@ NNP_GetMemData:
|
||||
jne .end_f
|
||||
mov esi,[ebp+16]
|
||||
mov byte[esi],0
|
||||
stdcall [_strcat], esi,txt_QlearningRateQ_
|
||||
add esp,8
|
||||
stdcall str_cat, esi,txt_QlearningRateQ_
|
||||
push 1
|
||||
push PRECISION
|
||||
mov eax,[ebp+8]
|
||||
@@ -702,12 +710,9 @@ NNP_GetMemData:
|
||||
push dword[eax+NeuralNetwork.learningRate]
|
||||
call @@DoubleToStr$qduso
|
||||
add esp,16
|
||||
stdcall [_strcat], esi,eax
|
||||
add esp,8
|
||||
stdcall [_strcat], esi,txt_zap_nl
|
||||
add esp,8
|
||||
stdcall [_strcat], esi,txt_Qlayers_lengthQ
|
||||
add esp,8
|
||||
stdcall str_cat, esi,eax
|
||||
stdcall str_cat, esi,txt_zap_nl
|
||||
stdcall str_cat, esi,txt_Qlayers_lengthQ
|
||||
push 1
|
||||
push 0
|
||||
mov ecx,[ebp+8]
|
||||
@@ -716,23 +721,18 @@ NNP_GetMemData:
|
||||
fstp qword[esp]
|
||||
call @@DoubleToStr$qduso
|
||||
add esp,16
|
||||
stdcall [_strcat], esi,eax
|
||||
add esp,8
|
||||
stdcall [_strcat], esi,txt_zap_nl
|
||||
add esp,8
|
||||
.230:
|
||||
stdcall [_strcat], esi,txt_QlayersQ
|
||||
add esp,8
|
||||
stdcall str_cat, esi,eax
|
||||
stdcall str_cat, esi,txt_zap_nl
|
||||
stdcall str_cat, esi,txt_QlayersQ
|
||||
xor edi,edi ;i=0
|
||||
jmp .232
|
||||
jmp .7
|
||||
align 4
|
||||
.cycle_0:
|
||||
push esi
|
||||
call @@strlen$qpxc
|
||||
pop ecx
|
||||
add esi,eax
|
||||
stdcall [_strcat], esi,txt_nl_t_Qc_sizeQ
|
||||
add esp,8
|
||||
stdcall str_cat, esi,txt_nl_t_Qc_sizeQ
|
||||
mov ebx,edi
|
||||
imul ebx,sizeof.Layer
|
||||
push 1
|
||||
@@ -748,10 +748,8 @@ align 4
|
||||
fstp qword[esp]
|
||||
call @@DoubleToStr$qduso
|
||||
add esp,16
|
||||
stdcall [_strcat], esi,eax
|
||||
add esp,8
|
||||
stdcall [_strcat], esi,txt_zap_nl_t_Qn_sizeQ
|
||||
add esp,8
|
||||
stdcall str_cat, esi,eax
|
||||
stdcall str_cat, esi,txt_zap_nl_t_Qn_sizeQ
|
||||
push 1
|
||||
push 0
|
||||
mov ecx,[ebp+8]
|
||||
@@ -765,21 +763,17 @@ align 4
|
||||
fstp qword[esp]
|
||||
call @@DoubleToStr$qduso
|
||||
add esp,16
|
||||
stdcall [_strcat], esi,eax
|
||||
add esp,8
|
||||
stdcall [_strcat], esi,txt_zap_nl
|
||||
add esp,8
|
||||
stdcall [_strcat], esi,txt_t_QneuronsQ
|
||||
add esp,8
|
||||
stdcall str_cat, esi,eax
|
||||
stdcall str_cat, esi,txt_zap_nl
|
||||
stdcall str_cat, esi,txt_t_QneuronsQ
|
||||
xor ebx,ebx ;j=0
|
||||
jmp .234
|
||||
jmp .1
|
||||
align 4
|
||||
.cycle_1:
|
||||
test ebx,ebx
|
||||
je .235
|
||||
stdcall [_strcat], esi,txt_zap_sp
|
||||
add esp,8
|
||||
.235:
|
||||
je @f
|
||||
stdcall str_cat, esi,txt_zap_sp
|
||||
@@:
|
||||
push 1
|
||||
push PRECISION
|
||||
mov eax,edi
|
||||
@@ -791,29 +785,25 @@ align 4
|
||||
push dword[eax+8*ebx]
|
||||
call @@DoubleToStr$qduso
|
||||
add esp,16
|
||||
stdcall [_strcat], esi,eax
|
||||
add esp,8
|
||||
stdcall str_cat, esi,eax
|
||||
inc ebx
|
||||
.234:
|
||||
.1:
|
||||
mov ecx,edi
|
||||
imul ecx,sizeof.Layer
|
||||
mov eax,[ebp+8]
|
||||
add ecx,[eax+NeuralNetwork.layers]
|
||||
cmp ebx,[ecx+Layer.c_size]
|
||||
jb .cycle_1
|
||||
stdcall [_strcat], esi,txt_sqbr_zap_nl
|
||||
add esp,8
|
||||
stdcall [_strcat], esi,txt_t_QbiasesQ
|
||||
add esp,8
|
||||
stdcall str_cat, esi,txt_sqbr_zap_nl
|
||||
stdcall str_cat, esi,txt_t_QbiasesQ
|
||||
xor ebx,ebx ;j=0
|
||||
jmp .238
|
||||
jmp .2
|
||||
align 4
|
||||
.cycle_2:
|
||||
test ebx,ebx
|
||||
je .239
|
||||
stdcall [_strcat], esi,txt_zap_sp
|
||||
add esp,8
|
||||
.239:
|
||||
je @f
|
||||
stdcall str_cat, esi,txt_zap_sp
|
||||
@@:
|
||||
push 1
|
||||
push PRECISION
|
||||
mov eax,edi
|
||||
@@ -825,43 +815,38 @@ align 4
|
||||
push dword[eax+8*ebx]
|
||||
call @@DoubleToStr$qduso
|
||||
add esp,16
|
||||
stdcall [_strcat], esi,eax
|
||||
add esp,8
|
||||
stdcall str_cat, esi,eax
|
||||
inc ebx
|
||||
.238:
|
||||
.2:
|
||||
mov ecx,edi
|
||||
imul ecx,sizeof.Layer
|
||||
mov eax,[ebp+8]
|
||||
add ecx,[eax+NeuralNetwork.layers]
|
||||
cmp ebx,[ecx+Layer.c_size]
|
||||
jb .cycle_2
|
||||
stdcall [_strcat], esi,txt_sqbr_zap_t_QweightsQ
|
||||
add esp,8
|
||||
stdcall str_cat, esi,txt_sqbr_zap_t_QweightsQ
|
||||
mov eax,[ebp+8]
|
||||
mov ecx,edi
|
||||
imul ecx,sizeof.Layer
|
||||
add ecx,[eax+NeuralNetwork.layers]
|
||||
cmp dword[ecx+Layer.n_size],0
|
||||
je .241
|
||||
je .6
|
||||
xor ebx,ebx
|
||||
jmp .243
|
||||
.242:
|
||||
jmp .5
|
||||
.cycle_3:
|
||||
test ebx,ebx
|
||||
je .244
|
||||
stdcall [_strcat], esi,txt_zap_nl_t_t
|
||||
add esp,8
|
||||
.244:
|
||||
stdcall [_strcat], esi,txt_sqbro
|
||||
add esp,8
|
||||
je @f
|
||||
stdcall str_cat, esi,txt_zap_nl_t_t
|
||||
@@:
|
||||
stdcall str_cat, esi,txt_sqbro
|
||||
xor eax,eax
|
||||
mov dword[ebp-4],eax
|
||||
jmp .246
|
||||
.245:
|
||||
jmp .4
|
||||
.3:
|
||||
cmp dword[ebp-4],0
|
||||
je .247
|
||||
stdcall [_strcat], esi,txt_zap_sp
|
||||
add esp,8
|
||||
.247:
|
||||
je @f
|
||||
stdcall str_cat, esi,txt_zap_sp
|
||||
@@:
|
||||
push 1
|
||||
push PRECISION
|
||||
mov edx,edi
|
||||
@@ -875,43 +860,39 @@ align 4
|
||||
push dword[ecx+8*eax]
|
||||
@@:
|
||||
call @@DoubleToStr$qduso
|
||||
dec dword[esp+8] ;уменьшаем PRECISION
|
||||
jz @f ;для избежания зацикливания
|
||||
dec dword[esp+8] ;decrease PRECISION
|
||||
jz @f ;to avoid looping
|
||||
cmp word[eax],'#'
|
||||
je @b ;если число не поместилось пробуем перевести с меньшей точностью
|
||||
je @b ;if the number does not fit, we try to translate with less precision
|
||||
@@:
|
||||
add esp,16
|
||||
stdcall [_strcat], esi,eax
|
||||
add esp,8
|
||||
stdcall str_cat, esi,eax
|
||||
inc dword[ebp-4]
|
||||
.246:
|
||||
.4:
|
||||
mov ecx,edi
|
||||
imul ecx,sizeof.Layer
|
||||
mov eax,[ebp+8]
|
||||
add ecx,[eax+NeuralNetwork.layers]
|
||||
mov ecx,[ecx+Layer.n_size]
|
||||
cmp ecx,[ebp-4]
|
||||
ja .245
|
||||
stdcall [_strcat], esi,txt_sqbr
|
||||
add esp,8
|
||||
ja .3
|
||||
stdcall str_cat, esi,txt_sqbr
|
||||
inc ebx
|
||||
.243:
|
||||
.5:
|
||||
mov eax,edi
|
||||
imul eax,sizeof.Layer
|
||||
mov ecx,[ebp+8]
|
||||
add eax,[ecx+NeuralNetwork.layers]
|
||||
cmp ebx,[eax+Layer.c_size]
|
||||
jb .242
|
||||
.241:
|
||||
stdcall [_strcat], esi,txt_sqbr_fbr_zap
|
||||
add esp,8
|
||||
jb .cycle_3
|
||||
.6:
|
||||
stdcall str_cat, esi,txt_sqbr_fbr_zap
|
||||
inc edi
|
||||
.232:
|
||||
.7:
|
||||
mov eax,[ebp+8]
|
||||
cmp edi,[eax+NeuralNetwork.layers_length]
|
||||
jb .cycle_0
|
||||
stdcall [_strcat], esi,txt_nl_t_sqbr
|
||||
add esp,8
|
||||
stdcall str_cat, esi,txt_nl_t_sqbr
|
||||
.end_f:
|
||||
pop edi esi ebx
|
||||
mov esp,ebp
|
||||
@@ -963,12 +944,11 @@ NNP_SetMemData:
|
||||
mov eax,[ebp+16]
|
||||
mov edx,[ebp+12]
|
||||
; cmp edx,NNP_FF_BIN
|
||||
; jne .191
|
||||
; jne @f
|
||||
;...
|
||||
;.191:
|
||||
;@@:
|
||||
cmp edx,NNP_FF_JSON
|
||||
jne .198
|
||||
.199:
|
||||
jne .9
|
||||
stdcall @@strstr$qpxct1, eax,txt_learningRate
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
@@ -976,27 +956,27 @@ NNP_SetMemData:
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
test esi,esi
|
||||
jne .200
|
||||
jne @f
|
||||
mov eax,1
|
||||
jmp .193
|
||||
.200:
|
||||
jmp .end_f
|
||||
@@:
|
||||
stdcall @@strchr$qpxci, esi,':'
|
||||
add esp,8
|
||||
mov ebx,eax
|
||||
test ebx,ebx
|
||||
jne .201
|
||||
jne @f
|
||||
mov eax,2
|
||||
jmp .193
|
||||
.201:
|
||||
jmp .end_f
|
||||
@@:
|
||||
inc ebx
|
||||
stdcall @@strchr$qpxci, esi,','
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
test esi,esi
|
||||
jne .202
|
||||
jne @f
|
||||
mov eax,3
|
||||
jmp .193
|
||||
.202:
|
||||
jmp .end_f
|
||||
@@:
|
||||
mov byte[esi],0
|
||||
inc esi
|
||||
stdcall @@StrToInt$qpc, ebx
|
||||
@@ -1008,38 +988,38 @@ NNP_SetMemData:
|
||||
mov eax,[ebp+8]
|
||||
mov edx,[eax+12]
|
||||
cmp edx,[ebp-4]
|
||||
je .203
|
||||
je @f
|
||||
mov eax,txt_err_layers_neq
|
||||
jmp .193
|
||||
.203:
|
||||
jmp .end_f
|
||||
@@:
|
||||
xor edi,edi ;i=0
|
||||
jmp .205
|
||||
.204: ;for(i=0;i<o->layers_length;i++)
|
||||
jmp .8
|
||||
.cycle_0: ;for(i=0;i<o->layers_length;i++)
|
||||
stdcall @@strstr$qpxct1, esi,txt_c_size
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
test esi,esi
|
||||
jne .206
|
||||
jne @f
|
||||
mov eax,txt_err_c_size
|
||||
jmp .193
|
||||
.206:
|
||||
jmp .end_f
|
||||
@@:
|
||||
stdcall @@strchr$qpxci, esi,':'
|
||||
add esp,8
|
||||
mov ebx,eax
|
||||
test ebx,ebx
|
||||
jne .207
|
||||
jne @f
|
||||
mov eax,6
|
||||
jmp .193
|
||||
.207:
|
||||
jmp .end_f
|
||||
@@:
|
||||
inc ebx
|
||||
stdcall @@strchr$qpxci, esi,','
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
test esi,esi
|
||||
jne .208
|
||||
jne @f
|
||||
mov eax,7
|
||||
jmp .193
|
||||
.208:
|
||||
jmp .end_f
|
||||
@@:
|
||||
mov byte[esi],0
|
||||
inc esi
|
||||
stdcall @@StrToInt$qpc, ebx
|
||||
@@ -1049,27 +1029,27 @@ NNP_SetMemData:
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
test esi,esi
|
||||
jne .209
|
||||
jne @f
|
||||
mov eax,8
|
||||
jmp .193
|
||||
.209:
|
||||
jmp .end_f
|
||||
@@:
|
||||
stdcall @@strchr$qpxci, esi,':'
|
||||
add esp,8
|
||||
mov ebx,eax
|
||||
test ebx,ebx
|
||||
jne .210
|
||||
jne @f
|
||||
mov eax,9
|
||||
jmp .193
|
||||
.210:
|
||||
jmp .end_f
|
||||
@@:
|
||||
inc ebx
|
||||
stdcall @@strchr$qpxci, esi,','
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
test esi,esi
|
||||
jne .211
|
||||
jne @f
|
||||
mov eax,10
|
||||
jmp .193
|
||||
.211:
|
||||
jmp .end_f
|
||||
@@:
|
||||
mov byte[esi],0
|
||||
inc esi
|
||||
stdcall @@StrToInt$qpc,ebx
|
||||
@@ -1081,11 +1061,11 @@ NNP_SetMemData:
|
||||
add eax,[edx+NeuralNetwork.layers]
|
||||
mov edx,[eax+Layer.c_size]
|
||||
cmp edx,[ebp-4]
|
||||
jne .213
|
||||
jne @f
|
||||
mov edx,[eax+Layer.n_size]
|
||||
cmp edx,[ebp-8]
|
||||
je .214
|
||||
.213:
|
||||
je .1
|
||||
@@:
|
||||
mov ecx,[ebp+8]
|
||||
stdcall NNP_GetMaxLLen,ecx
|
||||
mov ecx,edi
|
||||
@@ -1106,10 +1086,10 @@ NNP_SetMemData:
|
||||
add eax,edx
|
||||
stdcall Layer_Create,eax
|
||||
cmp ebx,[ebp-4] ;if(n>s || k>s)
|
||||
jb .215
|
||||
jb @f
|
||||
cmp ebx,[ebp-8]
|
||||
jae .214
|
||||
.215:
|
||||
jae .1
|
||||
@@:
|
||||
mov edx,[ebp+8]
|
||||
mov ecx,[edx+NeuralNetwork.errors]
|
||||
cmp ecx,[edx+NeuralNetwork.errorsNext]
|
||||
@@ -1135,45 +1115,45 @@ NNP_SetMemData:
|
||||
stdcall [mem.realloc], [edx+NeuralNetwork.deltas],ebx
|
||||
mov edx,[ebp+8]
|
||||
mov dword[edx+NeuralNetwork.deltas],eax
|
||||
.214:
|
||||
.1:
|
||||
stdcall @@strstr$qpxct1, esi,txt_biases
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
test esi,esi
|
||||
jne .216
|
||||
jne @f
|
||||
mov eax,11
|
||||
jmp .193
|
||||
.216:
|
||||
jmp .end_f
|
||||
@@:
|
||||
stdcall @@strchr$qpxci, esi,'['
|
||||
add esp,8
|
||||
mov ebx,eax
|
||||
test ebx,ebx
|
||||
jne .217
|
||||
jne @f
|
||||
mov eax,txt_err_sqbrl_b1
|
||||
jmp .193
|
||||
.217:
|
||||
jmp .end_f
|
||||
@@:
|
||||
inc ebx
|
||||
xor edx,edx
|
||||
mov dword[ebp-8],edx
|
||||
jmp .219
|
||||
.218:
|
||||
jmp .4
|
||||
.2:
|
||||
dec edx
|
||||
cmp eax,edx
|
||||
jae .220
|
||||
jae @f
|
||||
stdcall @@strchr$qpxci, ebx,','
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
jmp .221
|
||||
.220:
|
||||
jmp .3
|
||||
@@:
|
||||
stdcall @@strchr$qpxci, ebx,']'
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
.221:
|
||||
.3:
|
||||
test esi,esi
|
||||
jne .222
|
||||
jne @f
|
||||
mov eax,13
|
||||
jmp .193
|
||||
.222:
|
||||
jmp .end_f
|
||||
@@:
|
||||
mov byte[esi],0
|
||||
stdcall @@StrToDouble$qpc,ebx
|
||||
pop ecx
|
||||
@@ -1186,7 +1166,7 @@ NNP_SetMemData:
|
||||
mov edx,[eax+edx+Layer.biases]
|
||||
fstp qword[edx+8*ecx]
|
||||
inc dword[ebp-8]
|
||||
.219:
|
||||
.4:
|
||||
mov edx,edi
|
||||
imul edx,sizeof.Layer
|
||||
mov ecx,[ebp+8]
|
||||
@@ -1194,29 +1174,29 @@ NNP_SetMemData:
|
||||
mov edx,[edx+Layer.c_size]
|
||||
mov eax,[ebp-8]
|
||||
cmp edx,eax
|
||||
ja .218
|
||||
ja .2
|
||||
mov esi,ebx
|
||||
stdcall @@strstr$qpxct1, esi,txt_weights
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
test esi,esi
|
||||
jne .224
|
||||
jne @f
|
||||
mov eax,14
|
||||
jmp .193
|
||||
.224:
|
||||
jmp .end_f
|
||||
@@:
|
||||
stdcall @@strchr$qpxci, esi,'['
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
test esi,esi
|
||||
jne .225
|
||||
jne @f
|
||||
mov eax,txt_err_sqbrl_w1
|
||||
jmp .193
|
||||
.225:
|
||||
jmp .end_f
|
||||
@@:
|
||||
inc esi
|
||||
xor edx,edx
|
||||
mov dword[ebp-8],edx ;k=0
|
||||
jmp .227
|
||||
.226: ;for(k=0;k<o->layers[i].c_size;k++)
|
||||
jmp .7
|
||||
.cycle_1: ;for(k=0;k<o->layers[i].c_size;k++)
|
||||
|
||||
mov eax,edi
|
||||
imul eax,sizeof.Layer
|
||||
@@ -1226,39 +1206,39 @@ NNP_SetMemData:
|
||||
or eax,eax
|
||||
jnz .end_null_we
|
||||
inc dword[ebp-8] ;k++
|
||||
jmp .227 ;if 'weights' is null array
|
||||
jmp .7 ;if 'weights' is null array
|
||||
.end_null_we:
|
||||
|
||||
stdcall @@strchr$qpxci, esi,'['
|
||||
add esp,8
|
||||
mov ebx,eax
|
||||
test ebx,ebx
|
||||
jne .228
|
||||
jne @f
|
||||
mov eax,txt_err_sqbrl_w2
|
||||
jmp .193
|
||||
.228:
|
||||
jmp .end_f
|
||||
@@:
|
||||
inc ebx
|
||||
xor edx,edx
|
||||
mov dword[ebp-12],edx ;j=0
|
||||
jmp .230
|
||||
.229: ;for(j=0;j<o->layers[i].n_size;j++)
|
||||
jmp .6
|
||||
.cycle_2: ;for(j=0;j<o->layers[i].n_size;j++)
|
||||
dec edx
|
||||
cmp eax,edx ;eax = j, edx = n_size-1
|
||||
jae .231
|
||||
jae @f
|
||||
stdcall @@strchr$qpxci, ebx,','
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
jmp .232
|
||||
.231:
|
||||
jmp .5
|
||||
@@:
|
||||
stdcall @@strchr$qpxci, ebx,']'
|
||||
add esp,8
|
||||
mov esi,eax
|
||||
.232:
|
||||
.5:
|
||||
test esi,esi
|
||||
jne .233
|
||||
jne @f
|
||||
mov eax,txt_err_sqbrr_w2
|
||||
jmp .193
|
||||
.233:
|
||||
jmp .end_f
|
||||
@@:
|
||||
mov byte[esi],0
|
||||
stdcall @@StrToDouble$qpc,ebx
|
||||
pop ecx
|
||||
@@ -1273,7 +1253,7 @@ NNP_SetMemData:
|
||||
mov edx,[ebp-12]
|
||||
fstp qword[eax+8*edx]
|
||||
inc dword[ebp-12]
|
||||
.230:
|
||||
.6:
|
||||
mov edx,edi
|
||||
imul edx,sizeof.Layer
|
||||
mov ecx,[ebp+8]
|
||||
@@ -1281,27 +1261,27 @@ NNP_SetMemData:
|
||||
mov edx,[edx+Layer.n_size]
|
||||
mov eax,[ebp-12]
|
||||
cmp edx,eax
|
||||
ja .229
|
||||
ja .cycle_2
|
||||
mov esi,ebx
|
||||
inc dword[ebp-8]
|
||||
.227:
|
||||
.7:
|
||||
mov eax,edi
|
||||
imul eax,sizeof.Layer
|
||||
mov edx,[ebp+8]
|
||||
add eax,[edx+NeuralNetwork.layers]
|
||||
mov eax,[eax+Layer.c_size]
|
||||
cmp eax,[ebp-8]
|
||||
ja .226
|
||||
ja .cycle_1
|
||||
inc edi
|
||||
.205:
|
||||
.8:
|
||||
mov edx,[ebp+8]
|
||||
cmp edi,[edx+NeuralNetwork.layers_length]
|
||||
jb .204
|
||||
jb .cycle_0
|
||||
xor eax,eax
|
||||
jmp .193
|
||||
.198:
|
||||
jmp .end_f
|
||||
.9:
|
||||
mov eax,1000
|
||||
.193:
|
||||
.end_f:
|
||||
pop edi esi ebx
|
||||
mov esp,ebp
|
||||
pop ebp
|
||||
@@ -1320,20 +1300,19 @@ Layer_Destroy:
|
||||
call @$bdele$qpv
|
||||
pop ecx
|
||||
xor ebx,ebx
|
||||
jmp .143
|
||||
.142:
|
||||
jmp @f
|
||||
.cycle_1:
|
||||
mov eax,[esi+Layer.weights]
|
||||
push dword[eax+4*ebx]
|
||||
call @$bdele$qpv
|
||||
pop ecx
|
||||
inc ebx
|
||||
.143:
|
||||
@@:
|
||||
cmp ebx,[esi+Layer.c_size]
|
||||
jb .142
|
||||
jb .cycle_1
|
||||
push dword[esi+Layer.weights]
|
||||
call @$bdele$qpv
|
||||
pop ecx
|
||||
.145:
|
||||
pop esi ebx ebp
|
||||
ret 4
|
||||
|
||||
@@ -1344,17 +1323,17 @@ NNP_Destroy:
|
||||
push ebx esi
|
||||
mov esi,[ebp+8]
|
||||
xor ebx,ebx
|
||||
jmp .232
|
||||
.231:
|
||||
jmp @f
|
||||
.cycle_1:
|
||||
mov eax,ebx
|
||||
imul eax,sizeof.Layer
|
||||
add eax,[esi+NeuralNetwork.layers]
|
||||
push eax
|
||||
call Layer_Destroy
|
||||
inc ebx
|
||||
.232:
|
||||
@@:
|
||||
cmp ebx,[esi+NeuralNetwork.layers_length]
|
||||
jb .231
|
||||
jb .cycle_1
|
||||
push dword[esi+NeuralNetwork.layers]
|
||||
call @$bdele$qpv
|
||||
pop ecx
|
||||
@@ -1398,14 +1377,3 @@ EXPORTS:
|
||||
sz_getmemdata db 'NNP_GetMemData',0
|
||||
sz_setmemdata db 'NNP_SetMemData',0
|
||||
sz_destroy db 'NNP_Destroy',0
|
||||
|
||||
align 16
|
||||
@IMPORT:
|
||||
|
||||
library \
|
||||
libc, 'libc.obj'
|
||||
|
||||
import libc, \
|
||||
_strcat, 'strcat',\
|
||||
_exp, 'exp'
|
||||
;_scanf, 'scanf',\ ;???
|
||||
|
@@ -41,6 +41,7 @@ dd 1, start, init_end, end_mem, stack_top, params, 0
|
||||
include 'lang.inc' ; Language support for locales: ru_RU (CP866), es_ES, en_US.
|
||||
include '../../macros.inc'
|
||||
include '../../proc32.inc'
|
||||
include "../../string.inc"
|
||||
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
|
||||
include '../../dll.inc'
|
||||
;include '../../debug.inc'
|
||||
@@ -369,6 +370,12 @@ endl
|
||||
|
||||
mcall 30,4,,1
|
||||
jmp .n
|
||||
@@:
|
||||
stdcall string.length, pathOut
|
||||
add eax, pathOut
|
||||
cmpne [eax - 1], byte '/', @f
|
||||
mov [eax - 1], byte 0
|
||||
dec dword[edtUnpPath.size]
|
||||
@@:
|
||||
mcall 30,4,pathOut,1
|
||||
.n:
|
||||
|
5
programs/games/flood-it/build.bat
Normal file
5
programs/games/flood-it/build.bat
Normal file
@@ -0,0 +1,5 @@
|
||||
@del *.
|
||||
@For /R %%i In (*.c) Do c-- "%%i"
|
||||
@rename *.com *.
|
||||
@pause
|
||||
@del warning.txt
|
@@ -1,9 +0,0 @@
|
||||
@del lang.h--
|
||||
@echo #define LANG_ENG 1 >lang.h--
|
||||
C-- flood-it.c
|
||||
@del flood-it
|
||||
@rename flood-it.com flood-it
|
||||
@kpack flood-it
|
||||
@del lang.h--
|
||||
@del warning.txt
|
||||
@pause
|
@@ -1,9 +0,0 @@
|
||||
@del lang.h--
|
||||
@echo #define LANG_RUS 1 >lang.h--
|
||||
C-- flood-it.c
|
||||
@del flood-it
|
||||
@rename flood-it.com flood-it
|
||||
@kpack flood-it
|
||||
@del lang.h--
|
||||
@del warning.txt
|
||||
@pause
|
@@ -1,49 +1,44 @@
|
||||
//Leency 06.10.2011, Flood-it! v2.41, GPL
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
// Flood-it! - Strategy game: Flood the board with one color, within a step limit.
|
||||
// Copyright (C) 2011-2025 Leency <lipatov.kiril@gmail.com>
|
||||
|
||||
#include "lib\kolibri.h"
|
||||
#include "lib\random.h"
|
||||
|
||||
#ifndef AUTOBUILD
|
||||
#include "lang.h--"
|
||||
#endif
|
||||
|
||||
system_colors sc;
|
||||
proc_info Form;
|
||||
dword stak[100]; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dword help_window_stak[100];
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int DIFFICULTY_LEV_PARAMS[]={ 28, 14, 25, //<2F><><EFBFBD><EFBFBD><EFBFBD>
|
||||
17, 28, 50}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define DEFAULT_BLOCK_COUNT 14
|
||||
#define DEFAULT_MAX_CLICKS 25
|
||||
#define MAX_BLOCK_SIZE 28
|
||||
char board_size = -1;
|
||||
int BLOCK_SIZE; //cell size
|
||||
int BLOCKS_NUM; //number of cells by X and Y
|
||||
int MAX_CLICKS; //max clicks for win
|
||||
int CLICKS; //how many clicks user already did
|
||||
int game_end;
|
||||
|
||||
//<2F><>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD>"
|
||||
int BLOCK_SIZE = 28; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int BLOCKS_NUM = 14; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20> <20><> Y
|
||||
int MAX_CLICKS = 25; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define USER_PANEL_WIDTH 144
|
||||
|
||||
int CLICKS = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#define USER_PANEL_WIDTH 119
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD> <20><><EFBFBD><EFBFBD>,
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dword FIELD_COLORS[]= {0xf18db6, 0x605ca8, 0xfddc80, 0xdc4a20, 0x46b1e2, 0x7e9d1e, 0x232323, 0};
|
||||
char *BOARD_SIZES[]={ "S", "L", 0 };
|
||||
//six colors are used in a game for a cells
|
||||
//and seventh color is used to mark a cell during filling process
|
||||
dword FIELD_COLORS[] = {0xf18db6, 0x605ca8, 0xfddc80, 0xdc4a20, 0x46b1e2, 0x7e9d1e, 0x232323};
|
||||
char BOARD_SIZES[] = "S\0L";
|
||||
|
||||
|
||||
#ifdef LANG_RUS
|
||||
char *BUTTON_CAPTIONS[]={ " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [F2]", " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [F1]", " <20><>室 [Esc]", 0};
|
||||
char CLICKS_TEXT[]=" <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: /";
|
||||
char CLICKS_TEXT[]="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: /";
|
||||
char LEVELS_TEXT[]=" <20><><EFBFBD><EFBFBD>:";
|
||||
|
||||
char HELP_WINDOW_CAPTION[]="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
char *HELP_TEXT[]={ "<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Flood-it?",
|
||||
"",
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 梥⮬ <20><> <20><>࠭<EFBFBD>祭<EFBFBD><EFBFBD><EFBFBD> <20><> 室<><E5AEA4>.",
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>稭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>孥<EFBFBD> <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⪨. <20>롥<EFBFBD><EBA1A5><EFBFBD><EFBFBD> 梥<>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>",
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⨪<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>, <20> <EFBFBD><EFBFBD><EFBFBD>⪨ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⨬ 梥⮬ - ⠪ <20><> <EFBFBD><EFBFBD><EFBFBD>ᮥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"<EFBFBD><EFBFBD>ᥤ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⪨ ⮩ <20><> <20><><EFBFBD><EFBFBD>᪨. <20><>墠<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>㦭<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쭮<EFBFBD>",
|
||||
"<EFBFBD><EFBFBD> 室<><E5AEA4>. <20><>蠣<EFBFBD><E8A0A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>⥣<EFBFBD><E2A5A3> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ਭ樯<E0A8AD><E6A8AF> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,",
|
||||
"<EFBFBD>⮡<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!",
|
||||
"<EFBFBD>롥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 梥<>, <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⨪<EFBFBD><EFBFBD>. <20><><EFBFBD>⪨ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"<EFBFBD>⨬ 梥⮬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - ⠪ <20><> <20><><EFBFBD>ᮥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"<EFBFBD><EFBFBD>ᥤ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⪨ ⮩ <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>᪨. <20><>墠<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><EFBFBD> <20>㦭<EFBFBD> <20><>",
|
||||
"<EFBFBD><EFBFBD>࠭<EFBFBD>祭<EFBFBD><EFBFBD><EFBFBD> <20><> 室<><E5AEA4>. <20><><EFBFBD><EFBFBD>㯭<EFBFBD> <20><><EFBFBD> ࠧ<><E0A0A7><EFBFBD><EFBFBD> <20><>᪨.",
|
||||
"",
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠪<><E2A0AA> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>蠬<EFBFBD>:",
|
||||
"[Q] [W] [E]",
|
||||
@@ -62,28 +57,25 @@ char *BOARD_SIZES[]={ "S", "L", 0 };
|
||||
"vajutades nuppudele vasakul. Kui sa muudad v<>rvi pragusel alal,",
|
||||
"siis iga kokkupuutuv sama v<>rv muutub samaks. Nii saad ujutada",
|
||||
"teised alad m<>nguv<75>ljal <20>le. Valida saad 2 m<>nguv<75>lja suuruse",
|
||||
"vahel. Proovi v<>li <20>le ujutada etteandtud k<>ikude arvuga!",
|
||||
"Kaasahaarav ja l<>bus!",
|
||||
"vahel.",
|
||||
"",
|
||||
"M<EFBFBD>ngida saab ka klaviatuuriga:",
|
||||
"[Q] [W] [E]",
|
||||
"[A] [S] [D]",
|
||||
0};
|
||||
#else
|
||||
char *BUTTON_CAPTIONS[]={ "New Game [F2]", "Help [F1]", "Exit [Esc]", 0};
|
||||
char *BUTTON_CAPTIONS[]={ "Restart [F2]", " Help [F1]", " Exit [Esc]", 0};
|
||||
char CLICKS_TEXT[]="Clicks: /";
|
||||
char LEVELS_TEXT[]="Board:";
|
||||
|
||||
char HELP_WINDOW_CAPTION[]="Help";
|
||||
char *HELP_TEXT[]={ "How to play Flood-it?",
|
||||
"",
|
||||
"Flood the whole board with one color within the allowed steps.",
|
||||
"You start from the top left corner and progress by selecting one",
|
||||
"You start from the TOP LEFT corner and progress by selecting one",
|
||||
"of the colored buttons on the left. When you change your current area",
|
||||
"color, every adjacent square with the same color also changes, that",
|
||||
"way you can flood other areas of the board. Select from 3 sizes of",
|
||||
"way you can flood other areas of the board. Select from 2 sizes of",
|
||||
"the board and try to flood-it in the least amount of steps!",
|
||||
"Addictive and Fun!",
|
||||
"",
|
||||
"You can also play with keyboard:",
|
||||
"[Q] [W] [E]",
|
||||
@@ -92,7 +84,7 @@ char *BOARD_SIZES[]={ "S", "L", 0 };
|
||||
#endif
|
||||
|
||||
|
||||
unsigned char color_matrix[28*28]; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char color_matrix[28*28]; //our field
|
||||
|
||||
unsigned char loss_matrix[14*14]={
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
@@ -132,36 +124,21 @@ void main()
|
||||
{
|
||||
int key, id;
|
||||
|
||||
set_board_size(0); //small board by default
|
||||
new_game();
|
||||
|
||||
loop()
|
||||
{
|
||||
switch(WaitEvent())
|
||||
loop() switch(WaitEvent())
|
||||
{
|
||||
case evButton:
|
||||
id = GetButtonID();
|
||||
IF (id==1) || (id==4) ExitProcess();
|
||||
IF (id==2) goto _NEW_GAME_MARK;
|
||||
IF (id==3) goto _HELP_MARK;
|
||||
IF (id>=100)
|
||||
{
|
||||
IF (id>=100) {
|
||||
make_turn(id-100);
|
||||
break;
|
||||
}
|
||||
if (id>=10)
|
||||
{
|
||||
id=id-10*3;
|
||||
|
||||
IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[id]) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
BLOCK_SIZE = DIFFICULTY_LEV_PARAMS[id]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BLOCKS_NUM = DIFFICULTY_LEV_PARAMS[id+1]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20> <20><> Y
|
||||
MAX_CLICKS = DIFFICULTY_LEV_PARAMS[id+2]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
new_game();
|
||||
|
||||
MoveSize(-1, -1, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14);
|
||||
}
|
||||
if (id==10) set_board_size(0);
|
||||
if (id==11) set_board_size(1);
|
||||
break;
|
||||
case evKey:
|
||||
key = GetKeyScancode();
|
||||
@@ -170,7 +147,8 @@ void main()
|
||||
IF (key==59) //F1
|
||||
{
|
||||
_HELP_MARK:
|
||||
CreateThread(#help,#stak);
|
||||
CreateThread(#help_thread,#help_window_stak);
|
||||
break;
|
||||
}
|
||||
IF (key==60) //F2
|
||||
{
|
||||
@@ -178,6 +156,7 @@ void main()
|
||||
new_game();
|
||||
draw_clicks_num();
|
||||
draw_field();
|
||||
break;
|
||||
}
|
||||
IF (key==16) make_turn(0); //Q
|
||||
IF (key==17) make_turn(1); //W
|
||||
@@ -190,94 +169,115 @@ void main()
|
||||
draw_window();
|
||||
}
|
||||
}
|
||||
|
||||
void set_board_size(char s)
|
||||
{
|
||||
if (board_size != s) {
|
||||
board_size = s;
|
||||
|
||||
BLOCKS_NUM = board_size + 1 * DEFAULT_BLOCK_COUNT;
|
||||
MAX_CLICKS = board_size + 1 * DEFAULT_MAX_CLICKS;
|
||||
|
||||
BLOCK_SIZE = GetScreenHeight() - 70 / BLOCKS_NUM;
|
||||
if (BLOCK_SIZE > MAX_BLOCK_SIZE) BLOCK_SIZE = MAX_BLOCK_SIZE;
|
||||
|
||||
new_game();
|
||||
|
||||
MoveSize(-1, -1, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH,
|
||||
BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void make_turn(int turn_id)
|
||||
{
|
||||
IF (color_matrix[0]==turn_id) return; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
IF (CLICKS>=MAX_CLICKS) return; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
IF (color_matrix[0]==turn_id) return; //ignore no-sence click: first item color is equal to a new color
|
||||
IF (!game_is_ended()) {
|
||||
CLICKS++;
|
||||
draw_clicks_num();
|
||||
|
||||
fill_field(turn_id);
|
||||
draw_field();
|
||||
check_for_end(); //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (!game_is_ended()) draw_field();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void draw_window()
|
||||
{
|
||||
int i, j;
|
||||
int i;
|
||||
#define BUTTON_SIZE 28
|
||||
|
||||
sc.get();
|
||||
|
||||
DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14, 0x74,sc.work,0,0,"Flood-it!");
|
||||
DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH,
|
||||
BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14, 0x74,0,"Flood-it!");
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Fix rolled-up bug
|
||||
GetProcessInfo(#Form, SelfInfo);
|
||||
IF (Form.status_window==4) return;
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Fill background to reduce window redraw
|
||||
for (i=0;i<=4;i++)
|
||||
{
|
||||
IF (i<>4)
|
||||
DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work);
|
||||
else
|
||||
DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work_graph); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ESI = sc.work;
|
||||
IF (i==4) ESI = sc.work_graph;
|
||||
DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, ESI);
|
||||
}
|
||||
DrawBar(0,0, USER_PANEL_WIDTH-5, BLOCK_SIZE*BLOCKS_NUM+10, sc.work);
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (i=0;i<2;i++)
|
||||
for (j=0;j<3;j++)
|
||||
DefineButton(j*BUTTON_SIZE+17,i*BUTTON_SIZE+15,BUTTON_SIZE,BUTTON_SIZE, i*3+j+100,FIELD_COLORS[i*3+j]);
|
||||
// Main buttons to fill the board
|
||||
#define FILL_BUTTON_SIZE BUTTON_SIZE+8
|
||||
for (i=0;i<6;i++)
|
||||
DefineButton(i%3*FILL_BUTTON_SIZE+17,i/3*FILL_BUTTON_SIZE+15,FILL_BUTTON_SIZE,FILL_BUTTON_SIZE, i+100,FIELD_COLORS[i]);
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (j=0;j<3;j++)
|
||||
// Menu buttons
|
||||
for (i=0;i<3;i++)
|
||||
{
|
||||
DefineButton(17,j*25+120, 13*6+6, 20, j+2,sc.work_button);
|
||||
WriteText(17+4,j*25+127,0x80,sc.work_button_text,BUTTON_CAPTIONS[j],0);
|
||||
DefineButton(17,i*31+140, 13*8+6, 25, i+2,sc.work_button);
|
||||
WriteText(17+4,i*31+146,0x90,sc.work_button_text,BUTTON_CAPTIONS[i],0);
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WriteText(17,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,sc.work_text,#LEVELS_TEXT,0);
|
||||
for (j=0;j<2;j++)
|
||||
// Board size
|
||||
WriteText(17,BLOCKS_NUM*BLOCK_SIZE-25+7,0x90,sc.work_text,#LEVELS_TEXT,0);
|
||||
for (i=0;i<2;i++)
|
||||
{
|
||||
DefineButton(j*25+56,BLOCKS_NUM*BLOCK_SIZE-20, 20,20, j+10,sc.work_button);
|
||||
IF (board_size == i) {
|
||||
ESI=sc.work_button;
|
||||
EDI=sc.work_button_text;
|
||||
} ELSE {
|
||||
ESI = sc.work;
|
||||
EDI = sc.work_text;
|
||||
}
|
||||
|
||||
IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[j*3]) EDI=0x800080;
|
||||
else EDI=sc.work_button_text;
|
||||
|
||||
WriteText(j*25+56+8,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
|
||||
WriteText(j*25+56+9,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
|
||||
DefineButton(i*32+69,BLOCKS_NUM*BLOCK_SIZE-24, 26,25, i+10,ESI);
|
||||
WriteText(i*32+69+9,BLOCKS_NUM*BLOCK_SIZE-24+6,0x90,EDI,#BOARD_SIZES+i+i,0);
|
||||
$add ebx, 1<<16 //bold
|
||||
$int 0x40
|
||||
}
|
||||
|
||||
draw_clicks_num();
|
||||
|
||||
draw_field();
|
||||
|
||||
}
|
||||
|
||||
void randomly_fill_the_board()
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++) {
|
||||
color_matrix[i] = random(6);
|
||||
}
|
||||
}
|
||||
|
||||
void new_game()
|
||||
{
|
||||
int i;
|
||||
|
||||
CLICKS = 0;
|
||||
|
||||
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++)
|
||||
color_matrix[i] = random(6);
|
||||
game_end = false;
|
||||
randomly_fill_the_board();
|
||||
}
|
||||
|
||||
|
||||
void fill_field(int new_color_id)
|
||||
{
|
||||
int i, j,
|
||||
old_color_id=color_matrix[0],
|
||||
restart;
|
||||
int cur_cell;
|
||||
#define MARKED 6
|
||||
|
||||
color_matrix[0]=MARKED;
|
||||
@@ -289,15 +289,16 @@ void fill_field(int new_color_id)
|
||||
for (i=0;i<BLOCKS_NUM;i++)
|
||||
for (j=0;j<BLOCKS_NUM;j++)
|
||||
{
|
||||
IF (color_matrix[i*BLOCKS_NUM+j]<>old_color_id) continue; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) continue; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
cur_cell = i*BLOCKS_NUM+j;
|
||||
IF (color_matrix[cur_cell]<>old_color_id) continue; //if not a needed color then continue
|
||||
IF (color_matrix[cur_cell]==MARKED) continue; //if already marked then continue
|
||||
|
||||
IF (j>0) && (color_matrix[i*BLOCKS_NUM+j-1]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
IF (i>0) && (color_matrix[i-1*BLOCKS_NUM+j]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
IF (j<BLOCKS_NUM-1) && (color_matrix[i*BLOCKS_NUM+j+1]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
IF (i<BLOCKS_NUM-1) && (color_matrix[i+1*BLOCKS_NUM+j]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
IF (j>0) && (color_matrix[i*BLOCKS_NUM+j-1]==MARKED) color_matrix[cur_cell]=MARKED; //left
|
||||
IF (i>0) && (color_matrix[i-1*BLOCKS_NUM+j]==MARKED) color_matrix[cur_cell]=MARKED; //top
|
||||
IF (j<BLOCKS_NUM-1) && (color_matrix[i*BLOCKS_NUM+j+1]==MARKED) color_matrix[cur_cell]=MARKED; //right
|
||||
IF (i<BLOCKS_NUM-1) && (color_matrix[i+1*BLOCKS_NUM+j]==MARKED) color_matrix[cur_cell]=MARKED; //bottom
|
||||
|
||||
IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) restart=1; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
IF (color_matrix[cur_cell]==MARKED) restart=1;
|
||||
}
|
||||
IF (restart) goto _RESTART_MARK;
|
||||
|
||||
@@ -305,101 +306,83 @@ void fill_field(int new_color_id)
|
||||
IF (color_matrix[i]==MARKED) color_matrix[i]=new_color_id;
|
||||
}
|
||||
|
||||
|
||||
int check_for_end()
|
||||
void draw_win_or_loose_animation(dword matrix)
|
||||
{
|
||||
int i, j, ii, jj;
|
||||
|
||||
if (CLICKS>=MAX_CLICKS) //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
IF (CLICKS==MAX_CLICKS) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
IF (color_matrix[i]<>color_matrix[0]) goto _loss_MARK;
|
||||
goto _WIN_MARK;
|
||||
}
|
||||
|
||||
_loss_MARK:
|
||||
|
||||
for (i=0;i<14;i++)
|
||||
for (i=0;i<14;i++) {
|
||||
for (j=0;j<14;j++)
|
||||
{
|
||||
IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0])
|
||||
{
|
||||
ii=i;
|
||||
jj=j;
|
||||
}
|
||||
else
|
||||
{
|
||||
ii=i*2;
|
||||
jj=j*2;
|
||||
}
|
||||
color_matrix[ii*BLOCKS_NUM+jj]=loss_matrix[i*14+j];
|
||||
color_matrix[ii+1*BLOCKS_NUM+jj]=loss_matrix[i*14+j];
|
||||
color_matrix[ii*BLOCKS_NUM+jj+1]=loss_matrix[i*14+j];
|
||||
color_matrix[ii+1*BLOCKS_NUM+jj+1]=loss_matrix[i*14+j];
|
||||
ii = board_size * 2 + i;
|
||||
jj = board_size * 2 + j;
|
||||
color_matrix[ii*BLOCKS_NUM+jj]=
|
||||
color_matrix[ii+1*BLOCKS_NUM+jj]=
|
||||
color_matrix[ii*BLOCKS_NUM+jj+1]=
|
||||
color_matrix[ii+1*BLOCKS_NUM+jj+1]=ESBYTE[i*14+j+matrix];
|
||||
draw_field();
|
||||
//Pause(5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int field_is_solid()
|
||||
{
|
||||
int i;
|
||||
if (game_end) return 1;
|
||||
game_end = 1;
|
||||
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++) {
|
||||
IF (color_matrix[i]<>color_matrix[0]) game_end = 0;
|
||||
}
|
||||
return game_end;
|
||||
}
|
||||
|
||||
int game_is_ended()
|
||||
{
|
||||
int i;
|
||||
|
||||
if (game_end) return 1;
|
||||
|
||||
if (CLICKS>=MAX_CLICKS) //check for game end via max_clicks
|
||||
{
|
||||
IF (CLICKS==MAX_CLICKS) //probably user won on the last step
|
||||
{
|
||||
if (field_is_solid()) goto _WIN_MARK;
|
||||
}
|
||||
draw_win_or_loose_animation(#loss_matrix);
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
if (!field_is_solid()) return 0;
|
||||
|
||||
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
IF (color_matrix[i]<>color_matrix[0]) return 0;
|
||||
|
||||
//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MAX_CLICKS -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//field is solid and CLICKS<MAX_CLICKS -> win
|
||||
|
||||
_WIN_MARK:
|
||||
|
||||
for (i=0;i<25;i++)
|
||||
{
|
||||
new_game();
|
||||
randomly_fill_the_board();
|
||||
draw_field();
|
||||
Pause(7);
|
||||
}
|
||||
|
||||
CLICKS=MAX_CLICKS;
|
||||
|
||||
for (i=0;i<14;i++)
|
||||
for (j=0;j<14;j++)
|
||||
{
|
||||
IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
ii=i;
|
||||
jj=j;
|
||||
}
|
||||
else
|
||||
{
|
||||
ii=i*2;
|
||||
jj=j*2;
|
||||
}
|
||||
color_matrix[ii*BLOCKS_NUM+jj]=win_matrix[i*14+j];
|
||||
color_matrix[ii+1*BLOCKS_NUM+jj]=win_matrix[i*14+j];
|
||||
color_matrix[ii*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
|
||||
color_matrix[ii+1*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
|
||||
draw_field();
|
||||
//Pause(5);
|
||||
}
|
||||
draw_win_or_loose_animation(#win_matrix);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void draw_clicks_num()
|
||||
{
|
||||
#define TEXT_X 21
|
||||
#define TEXT_Y 92
|
||||
#define TEXT_X 19
|
||||
#define TEXT_Y 100
|
||||
|
||||
DrawBar(TEXT_X, TEXT_Y, USER_PANEL_WIDTH-TEXT_X-3,9, sc.work);
|
||||
DrawBar(TEXT_X, TEXT_Y, USER_PANEL_WIDTH-TEXT_X-5,16, sc.work);
|
||||
|
||||
WriteText(TEXT_X,TEXT_Y,0x80,sc.work_text,#CLICKS_TEXT,0);
|
||||
WriteText(TEXT_X,TEXT_Y,0x90,sc.work_text,#CLICKS_TEXT,0);
|
||||
|
||||
IF (CLICKS<10) EBX=9*6+TEXT_X;
|
||||
else EBX=8*6+TEXT_X;
|
||||
IF (CLICKS<10) EBX=9*8+TEXT_X;
|
||||
else EBX=8*8+TEXT_X;
|
||||
|
||||
WriteText(EBX,TEXT_Y,0x80,sc.work_text,IntToStr(CLICKS),0);
|
||||
WriteText(EBX,TEXT_Y,0x90,sc.work_text,itoa_nosign(CLICKS),0);
|
||||
|
||||
WriteText(11*6+TEXT_X,TEXT_Y,0x80,sc.work_text,IntToStr(MAX_CLICKS),0);
|
||||
WriteText(11*8+TEXT_X,TEXT_Y,0x90,sc.work_text,itoa_nosign(MAX_CLICKS),0);
|
||||
}
|
||||
|
||||
|
||||
@@ -417,7 +400,7 @@ void draw_field()
|
||||
}
|
||||
|
||||
|
||||
void help()
|
||||
void help_thread()
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -429,10 +412,10 @@ void help()
|
||||
IF (GetKeyScancode()==001) ExitProcess(); //Esc
|
||||
break;
|
||||
case evReDraw:
|
||||
for (i=0; HELP_TEXT[i]<>0; i++;) {};
|
||||
DefineAndDrawWindow(400,200,610,i*19+25+GetSkinHeight(),0x34,sc.work,0,0,#HELP_WINDOW_CAPTION);
|
||||
WriteText(6,12,0x90,sc.work_text,HELP_TEXT[0],0); //<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (i=0; HELP_TEXT[i]<>0; i++;) WriteText(5,i*19+12,0x90,sc.work_text,HELP_TEXT[i],0);
|
||||
//for (i=0; HELP_TEXT[i]<>0; i++;) {}; //calculate line numbers, predefined i=12 used to reduce size
|
||||
DefineAndDrawWindow(400,200,612,12*19+25+GetSkinHeight(),0x34,sc.work,#HELP_WINDOW_CAPTION);
|
||||
WriteText(6,12,0x90,sc.work_text,HELP_TEXT[0],0); //for a bold text
|
||||
for (i=0; HELP_TEXT[i]<>0; i++;) WriteText(7,i*19+12,0x90,sc.work_text,HELP_TEXT[i],0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -23,6 +23,10 @@ dword I_Path = 0;
|
||||
#define BT_HIDE 0x40000000
|
||||
#define BT_NOFRAME 0x20000000
|
||||
|
||||
#define bool char
|
||||
#define true 1
|
||||
#define false 0
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -94,16 +98,11 @@ inline fastcall Pause(dword EBX)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
char buffer[11]="";
|
||||
inline fastcall dword IntToStr(dword ESI)
|
||||
char buffer[5];
|
||||
inline fastcall dword itoa_nosign(dword ESI)
|
||||
{
|
||||
$mov edi, #buffer
|
||||
$mov ecx, 10
|
||||
$test esi, esi
|
||||
$jns f1
|
||||
$mov al, '-'
|
||||
$stosb
|
||||
$neg esi
|
||||
f1:
|
||||
$mov eax, esi
|
||||
$push -'0'
|
||||
@@ -126,7 +125,7 @@ f3:
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI)
|
||||
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,EDI)
|
||||
{
|
||||
EAX = 12; // function 12:tell os about windowdraw
|
||||
EBX = 1;
|
||||
@@ -135,7 +134,7 @@ void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaC
|
||||
EBX = x << 16 + sizeX;
|
||||
ECX = y << 16 + sizeY;
|
||||
EDX = mainAreaType << 24 | mainAreaColour;
|
||||
ESI = headerType << 24 | headerColour;
|
||||
ESI = 0;
|
||||
$xor eax,eax
|
||||
$int 0x40
|
||||
|
||||
@@ -166,6 +165,13 @@ dword GetSkinHeight()
|
||||
$pop ebx
|
||||
}
|
||||
|
||||
inline fastcall int GetScreenHeight()
|
||||
{
|
||||
$mov eax, 14
|
||||
$int 0x40
|
||||
$and eax,0x0000FFFF
|
||||
}
|
||||
|
||||
void WriteText(dword x,y,byte fontType, dword color, EDX, ESI)
|
||||
{
|
||||
EAX = 4;
|
||||
@@ -190,12 +196,20 @@ void DefineButton(dword x,y,w,h,EDX,ESI)
|
||||
$int 0x40
|
||||
}
|
||||
|
||||
void DrawRegion(dword x,y,width,height,EDX)
|
||||
void DrawRegion(dword x,y,s,EDX)
|
||||
{
|
||||
DrawBar(x,y,width,1,EDX);
|
||||
DrawBar(x,y+height,width,1,EDX);
|
||||
DrawBar(x,y,1,height,EDX);
|
||||
DrawBar(x+width,y,1,height+1,EDX);
|
||||
EAX = 13;
|
||||
EBX = x<<16+s;
|
||||
ECX = y<<16+1;
|
||||
$int 0x40
|
||||
ECX = y+s<<16+1;
|
||||
$int 0x40
|
||||
EBX = x<<16+1;
|
||||
ECX = y<<16+s;
|
||||
$int 0x40
|
||||
EBX = x+s<<16+1;
|
||||
ECX = y<<16+s+1;
|
||||
$int 0x40
|
||||
}
|
||||
|
||||
inline fastcall dword WriteDebug(dword EDX)
|
||||
|
@@ -1,5 +1,11 @@
|
||||
====Leency====
|
||||
|
||||
v0.62 (21/03/2025)
|
||||
- proper window rolling up fix
|
||||
- bigger cells and fonts
|
||||
- add icon to a new game button
|
||||
- better alignment of ui elements in header
|
||||
|
||||
v0.52 (16/12/2008)
|
||||
- window rolling up fix
|
||||
|
||||
|
@@ -18,43 +18,42 @@
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
*******************************************************************************/
|
||||
?define HEADER_Y 4
|
||||
?define BTNSIZE 19
|
||||
char game_mode[] = "1/3";
|
||||
|
||||
void draw_window() // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
void draw_window()
|
||||
{
|
||||
sys_get_colors(#colors, 40);
|
||||
dword iconimg = sys_memopen("ICONS18", 0, SHM_READ);
|
||||
//sys_get_colors(#colors, 40);
|
||||
|
||||
// WINDOW
|
||||
sys_window_redraw(1);
|
||||
EBX = xpos << 16 + xsize + 9;
|
||||
ECX = ypos << 16 + ysize;
|
||||
sys_draw_window(EBX, ECX, 0x34CCCCCC, colors.w_work | 0x80000000, "MineSweeper");
|
||||
sys_window_redraw(2);
|
||||
sys_draw_window(EBX, ECX, 0x34CCCCCC, clGray | 0x80000000, "MineSweeper");
|
||||
|
||||
// Leency ROLLED UP FIX
|
||||
sys_process_info(#procinfo, -1);
|
||||
IF (procinfo.ysize<70) return;
|
||||
#define ROLLED_UP 0x04
|
||||
IF (procinfo.status_window&ROLLED_UP) return;
|
||||
|
||||
// <NEW GAME> BUTTON (911)
|
||||
EBX = xsize / 2 - 10;
|
||||
EBX = EBX << 16 + BTNSIZE;
|
||||
sys_draw_button(EBX, HEADER_Y<<16+BTNSIZE, 911+BT_HIDE, clLightGray);
|
||||
draw_rectangle(xsize/2-10,HEADER_Y,BTNSIZE,BTNSIZE,clWhite,clDarkGray);
|
||||
sys_draw_button(CENTER_POS << 16 + BTNSIZE, HEADER_Y<<16+BTNSIZE, 911+BT_HIDE, clLightGray);
|
||||
draw_rectangle(CENTER_POS,HEADER_Y,BTNSIZE,BTNSIZE,clWhite,clDarkGray);
|
||||
draw_rectangle(CENTER_POS+1,HEADER_Y+1,BTNSIZE-2,BTNSIZE-2,clWhite,clWhite);
|
||||
sys_put_palette_image(18*18*4*58 + iconimg, 18<<16+18, CENTER_POS+2<<16+HEADER_Y+2, 32, 0);
|
||||
|
||||
// <CHANGE MODE> BUTTON (1001)
|
||||
sys_draw_button(5<<16+32, HEADER_Y<<16+BTNSIZE, 1001+BT_HIDE, clLightGray);
|
||||
draw_rectangle(5,HEADER_Y,32,BTNSIZE,clWhite,clDarkGray);
|
||||
game_mode[0] = mode + '0';
|
||||
sys_write_text(9<<16+HEADER_Y+3, 0x90000000+clDarkGray, #game_mode, 3);
|
||||
sys_write_text(9<<16+HEADER_Y+4, 0x90656565, #game_mode, 3);
|
||||
|
||||
// <USER FIELD> BUTTON (1002)
|
||||
//sys_draw_button(BTNSIZE<<16+7, ECX, EDX+1, 0xddbb44);
|
||||
|
||||
draw_time(); // draw timer
|
||||
draw_mines_left(); // draw mines
|
||||
draw_squares(); // draw field
|
||||
draw_time();
|
||||
draw_mines_left();
|
||||
draw_squares();
|
||||
|
||||
sys_window_redraw(2);
|
||||
}
|
||||
|
||||
dword num_colors[8]=
|
||||
@@ -70,11 +69,11 @@ dword num_colors[8]=
|
||||
};
|
||||
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Draw a single square
|
||||
void draw_square(int x, y)
|
||||
{
|
||||
int xl, xr, yt, yb; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
dword tcolor = clBlack; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int xl, xr, yt, yb; // lefx, right, top, bottom
|
||||
dword tcolor = clBlack; // set default color as black
|
||||
byte tchar, tval;
|
||||
|
||||
xl = XPX * x + XST;
|
||||
@@ -86,7 +85,7 @@ void draw_square(int x, y)
|
||||
ECX = yt+1 << 16 + yb - yt-1;
|
||||
$inc ebx
|
||||
$inc ecx
|
||||
sys_draw_bar(EBX, ECX, clLightGray); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sys_draw_bar(EBX, ECX, clLightGray); // fill bg
|
||||
|
||||
if (!get_open(x, y))
|
||||
{
|
||||
@@ -100,16 +99,16 @@ void draw_square(int x, y)
|
||||
|
||||
SWITCH (get_mark(x, y))
|
||||
{
|
||||
CASE 2: tcolor = 0x121288; tchar = '?'; BREAK;
|
||||
CASE 1: tcolor = 0xd04444; tchar = 'P';
|
||||
CASE 2: tcolor = 0x10121288; tchar = '?'; BREAK;
|
||||
CASE 1: tcolor = 0x10d04444; tchar = 'P';
|
||||
}
|
||||
|
||||
IF (get_mark(x,y))
|
||||
{
|
||||
EBX = xl + 5 << 16 + yt + 4;
|
||||
EBX = xl + 6 << 16 + yt + 4;
|
||||
sys_write_text(EBX, tcolor, #tchar, 1);
|
||||
EBX += 0x00010000;
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/* Second run - registers are saved */
|
||||
sys_write_text(EBX, ECX, EDX, ESI);
|
||||
}
|
||||
}
|
||||
@@ -120,15 +119,15 @@ void draw_square(int x, y)
|
||||
{
|
||||
IF (tval == MINE)
|
||||
{
|
||||
tcolor = 0xee1111;
|
||||
tcolor = 0x10ee1111;
|
||||
tchar = '*';
|
||||
}
|
||||
ELSE
|
||||
{
|
||||
tchar = tval + '0';
|
||||
tcolor = num_colors[tval-1];
|
||||
tcolor = num_colors[tval-1]+0x10000000;
|
||||
}
|
||||
EBX = xl + 5 << 16 + yt + 5;
|
||||
EBX = xl + 7 << 16 + yt + 4;
|
||||
sys_write_text(EBX, tcolor, #tchar, 1);
|
||||
EBX += 0x00010000;
|
||||
sys_write_text(EBX, ECX, EDX, ESI);
|
||||
@@ -140,19 +139,19 @@ void draw_square(int x, y)
|
||||
|
||||
void draw_time()
|
||||
{
|
||||
sys_draw_bar(xsize-XST-58<<16+29, HEADER_Y<<16+20, clWhiteGray);
|
||||
sys_write_number(0x00030000, time, xsize-XST-56<<16+HEADER_Y+3, 0x101166C3);
|
||||
sys_draw_bar(xsize-XST-63<<16+34, HEADER_Y<<16+22, clWhiteGray);
|
||||
sys_write_number(0x00030000, time, xsize-XST-58<<16+HEADER_Y+4, 0x101166C3);
|
||||
}
|
||||
|
||||
|
||||
void draw_mines_left()
|
||||
{
|
||||
sys_draw_bar(xsize-XST-29<<16+29, HEADER_Y<<16+20, clWhiteGray);
|
||||
sys_write_number(0x00030000, cmines, xsize-XST-27<<16+HEADER_Y+3, 0x10ff0000);
|
||||
sys_draw_bar(xsize-XST-32<<16+32, HEADER_Y<<16+22, clWhiteGray);
|
||||
sys_write_number(0x00030000, cmines, xsize-XST-29<<16+HEADER_Y+4, 0x10ff0000);
|
||||
}
|
||||
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// Draw mine field
|
||||
void draw_squares()
|
||||
{
|
||||
int x,y;
|
||||
|
@@ -64,7 +64,8 @@ struct ProcessInfo
|
||||
ystart,
|
||||
xsize,
|
||||
ysize;
|
||||
byte not_used2[974];
|
||||
char status_window;
|
||||
byte reserved[1024-71];
|
||||
};
|
||||
|
||||
#define SystemColors SystemColours // usa/british
|
||||
@@ -212,6 +213,15 @@ inline fastcall dword sys_put_image(dword EBX, ECX, EDX)
|
||||
$int 0x40
|
||||
}
|
||||
|
||||
inline fastcall void sys_put_palette_image(dword EBX,ECX,EDX,ESI,EDI)
|
||||
{
|
||||
$push ebp
|
||||
EAX = 65;
|
||||
EBP = 0;
|
||||
$int 0x40
|
||||
$pop ebp
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************
|
||||
08 = DEFINE BUTTON
|
||||
@@ -1117,11 +1127,44 @@ inline fastcall dword sys_debug_read_char(dword EBX)
|
||||
}
|
||||
|
||||
|
||||
inline fastcall dword window_move_size(dword EBX,ECX,EDX,ESI){
|
||||
inline fastcall dword sys_window_move_size(dword EBX,ECX,EDX,ESI){
|
||||
EAX = 67;
|
||||
$int 0x40
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
68.11 = mem_init is required to work with heap
|
||||
*********************************************************/
|
||||
|
||||
inline fastcall void sys_mem_init()
|
||||
{
|
||||
$mov eax, 68
|
||||
$mov ebx, 11
|
||||
$int 0x40
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
68.22 = shared memory
|
||||
in:
|
||||
ecx = area name, 31 symbols max
|
||||
edx = area size for SHM_CREATE SHM_OPEN_ALWAYS
|
||||
esi = flags, see the list below
|
||||
out:
|
||||
eax = pointer to memory or 0
|
||||
edx = memsize
|
||||
*********************************************************/
|
||||
|
||||
#define SHM_OPEN 0x00
|
||||
#define SHM_OPEN_ALWAYS 0x04
|
||||
#define SHM_CREATE 0x08
|
||||
#define SHM_READ 0x00
|
||||
#define SHM_WRITE 0x01
|
||||
inline fastcall dword sys_memopen(ECX, EDX, ESI)
|
||||
{
|
||||
$mov eax, 68
|
||||
$mov ebx, 22
|
||||
$int 0x40
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
-1 = EXIT PROCESS
|
||||
|
@@ -26,17 +26,26 @@
|
||||
//? define DEBUG 1
|
||||
|
||||
? print "\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ"
|
||||
? print "\n<> KolibriOS MineSweeper v0.52 <20>"
|
||||
? print "\n<> (C) Leency (leency@mail.ru) 2010,2011 <20>"
|
||||
? print "\n<> KolibriOS MineSweeper v0.62 <20>"
|
||||
? print "\n<> (C) Leency (leency@mail.ru) 2010-2025 <20>"
|
||||
? print "\n<> (C) Ivan Poddubny (ivan-yar@bk.ru) 2003,2004 <20>"
|
||||
? print "\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\n"
|
||||
|
||||
/************************************** DATA **************************************/
|
||||
/************************************* DEFINES *************************************/
|
||||
|
||||
? define XPX 16 // X pixels by square - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
? define YPX 16 // Y pixels by square
|
||||
?define HEADER_Y 5
|
||||
?define BTNSIZE 21
|
||||
?define CENTER_POS xsize / 2 - 10
|
||||
|
||||
?define XST 5 // offset of first pixel X - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
?define YST 32
|
||||
|
||||
? define XPX 21 // X pixels by square - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
? define YPX 21 // Y pixels by square
|
||||
? define MINE 255 // <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> value = MINE
|
||||
|
||||
/************************************** DATA **************************************/
|
||||
|
||||
struct
|
||||
{
|
||||
byte value; // number of mines - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
@@ -58,9 +67,6 @@ struct
|
||||
byte nmines;
|
||||
} stdmodes[3] = {9,9,10, 16,16,40, 30,16,99}; // {x,y,m}
|
||||
|
||||
?define XST 5 // offset of first pixel X - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
?define YST 28
|
||||
|
||||
int ncx, // number of squares in X - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ncy,
|
||||
cmines, // mines discovered - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
@@ -79,7 +85,7 @@ byte stop_game = FALSE, // game stopped -
|
||||
firstmine;
|
||||
|
||||
ProcessInfo procinfo;
|
||||
SystemColors colors;
|
||||
//SystemColors colors;
|
||||
|
||||
/************************************** CODE **************************************/
|
||||
|
||||
@@ -429,6 +435,8 @@ void end_game()
|
||||
|
||||
void main()
|
||||
{
|
||||
sys_mem_init();
|
||||
|
||||
new_game();
|
||||
draw_window();
|
||||
|
||||
@@ -458,11 +466,11 @@ void main()
|
||||
ELSE IF (EAX == 1001) // change mode
|
||||
{
|
||||
mode++;
|
||||
if (mode==4) mode=1;
|
||||
IF (mode==4) mode=1;
|
||||
//EAX = mode; EAX++; EAX = EAX%3; EAX++; mode = AL;
|
||||
|
||||
new_game();
|
||||
window_move_size(OLD,OLD,xsize+9,ysize);
|
||||
sys_window_move_size(OLD,OLD,xsize+9,ysize);
|
||||
CONTINUE;
|
||||
}
|
||||
// ELSE IF (EAX == 1002)
|
||||
|
Reference in New Issue
Block a user