8 Commits

Author SHA1 Message Date
16f627ed45 README.md: Fixed [Build system] broken link
All checks were successful
Build system / Build (pull_request) Successful in 6m0s
Build system / Check kernel codestyle (pull_request) Successful in 45s
2025-03-20 17:16:32 +01:00
24138f6e42 README.md: Removed duplicate license information. 2025-03-20 17:16:32 +01:00
da58091f36 CONTIBUTING.md: Added multiple authors 2025-03-20 17:16:32 +01:00
Burer
347409152d CONTIBUTING.md - Fixed broken anchor link 2025-03-20 17:16:32 +01:00
Burer
78dfe36976 CONTRIBUTING.md: removed commit categories section 2025-03-20 17:16:32 +01:00
Burer
67e8871308 Fixed some language mistakes in CONTRIBUTING.md 2025-03-20 17:16:32 +01:00
d2a2054f16 Docs: Added GNU GPL v2.0
Source: https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt

Signed-off-by: Max Logaev <maxlogaev@proton.me>
2025-03-20 17:16:32 +01:00
799911121b Docs: Added README and contributing guide
Co-authored-by: Burer
Signed-off-by: Max Logaev <maxlogaev@proton.me>
2025-03-20 17:16:32 +01:00
42 changed files with 847 additions and 6194 deletions

View File

@@ -76,15 +76,22 @@ jobs:
g++ -o /home/autobuild/tools/win32/bin/objconv -O2 *.cpp
chmod +x /home/autobuild/tools/win32/bin/objconv
- name: Build and install kerpack and kpack
- name: Build and install kerpack
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
chmod +x kpack
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 kpack /home/autobuild/tools/win32/bin/.
- name: Build and install clink

View File

@@ -2,19 +2,19 @@
## Type of contributing
There are two main types of contributions accepted to the main KolibriOS repository:
There are two main types of contributions accepted in KolibriOS:
- Submitting issues about problems in the project
- Submitting code to the project via pull requests
Both these types are described in detail below.
Each of these types is described in detail below.
## Issues
You can help us by submitting issues about problems found in the system. Currently, there are two main ways of submitting an issue in the project: **Bug Reports** and **Feature Requests**:
- Bug Reports are suitable if you find a **bug** (crash, error, unexpected behavior) in some part of the system (kernel, drivers, apps, etc.) and want to report it
- Feature Requests are used, when you want to propose some **improvement** to the system (missing features, improved user experience, etc.)
- Feature Request are used, when you want to propose some **improvement** to the system (missing features, improved user experience, etc.)
## Pull requests
@@ -28,11 +28,11 @@ You can also help us by submitting code via pull requests. The process of submit
6. Create and submit a pull request into `main` branch
7. Wait for CI/CD pipelines and code review to pass
When a pull request is submitted, at least two project participants must conduct a code review, after which the proposed changes need to be corrected (if requested) and merged into the project.
When a pull request is submitted, at least two project participants must conduct a code review, after which the proposed changes can be corrected (if it's necessary) and merged into the project.
## Commit style
### Message pattern
### Pattern
The commit message should look like this:
@@ -66,17 +66,6 @@ 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.
We hope this small instructions will help you to get familiar with KolibriOS contribution rules and inspire you to participate in the work of this project.

View File

@@ -1,13 +1,13 @@
# KolibriOS
[![License](https://img.shields.io/badge/License-GPL%202.0-green)](./LICENSE)
[![License](https://img.shields.io/badge/License-GPL%202.0-green)](./COPYING.TXT)
[![Build system](https://git.kolibrios.org/KolibriOS/kolibrios/actions/workflows/build.yaml/badge.svg)](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.
KolibriOS is a hobby operating system for x86-compatible computers, which is currently being developed by a small teem of enthusiasts.
Its kernel, most drivers, and many programs are written entirely in [FASM](https://flatassembler.net/) assembly language, making them very compact and lean on system resources.
It's kernel is written entirely in [FASM](https://flatassembler.net/) assembly language, making it very compact and lean on system resources.
Based on [MenuetOS](https://www.menuetos.net/), it uses its own standards and is NOT fully POSIX or UNIX compliant.
Based on [MenuetOS](https://www.menuetos.net/), it uses its own standards and is NOT fully POSIX or UNIX compliant
## Contributing

View File

@@ -85,7 +85,6 @@ 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"},
@@ -157,7 +156,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/blocks.kex", "../programs/bcc32/games/blocks/bin/blocks.kex"},
{"kolibrios/3D/blocks/", "../programs/bcc32/games/blocks/bin/*"},
{"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/*"},
@@ -631,10 +630,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, {
@@ -642,7 +641,6 @@ 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
@@ -668,7 +666,6 @@ 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"},

View File

@@ -1,2 +0,0 @@
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("welcome.htm", "cp %f %o" .. tup.getconfig("KPACK_CMD"), "welcome.htm.kpack")

View File

@@ -12,7 +12,6 @@
23 Game Center |allgames
60 System panel |syspanel
18 Documentation |docpack
49 Search |search
53 Run |run
04 Shut down |end
#1 **** DEMOS

View File

@@ -1,95 +1,78 @@
<html>
<title>Welcome notes</title>
<html><title>Welcome notes</title><body bgcolor=#fff>
<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;">
<h1><font color=1BB71A>Welcome to KolibriOS</font> 0.8.0.0 beta</h1>
<pre>
Dear friends,
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.
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.
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 :)
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 :)
<dd><h3><kosicon n=5> Floppy version</h3>
<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 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=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.
<h3><kosicon n=7> Sound</h3>
<h3><kosicon n=7>Sound</h3>
List of supported devices:
- Most AC97 cards: Intel, nForce, VIA
- A variety of HD Audio devices: Intel, Realtek...
- SIS PCI audio (Sis 7012)
- Creative labs EMU10K1X (Dell OEM)
- Media Forte FM801
- ISA Sound Blaster 16
<i>Only THIS particular model works,
not other cards that have software SB16-emulation</i>
- ISA Sound Blaster 16. Only THIS particular model works, not other SB cards that have software SB16-emulation
<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. 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.
<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.
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.
<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 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).
<h3><kosicon n=25> LAN/Ethernet</h3>
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
<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.
* - 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 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 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
<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.
- 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:
~ 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
~ 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
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, brave and curious users, as we are doing it all for you!
<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!
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 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?" -->
<!-- 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?" -->

View File

@@ -13,7 +13,6 @@
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

View File

@@ -12,7 +12,6 @@
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>

View File

@@ -1,2 +0,0 @@
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

View File

@@ -1,229 +0,0 @@
// 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],
];

View File

@@ -1,531 +0,0 @@
// 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],
];

View File

@@ -1,8 +1,9 @@
//Leency, Veliant, Punk_Joker, PavelYakov & KolibriOS Team 2008-2025
//Leency, Veliant, Punk_Joker, PavelYakov & KolibriOS Team 2008-2022
//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:
@@ -10,9 +11,9 @@ TODO:
http://board.kolibrios.org/viewtopic.php?f=23&t=4521&p=77334#p77334
*/
#define ABOUT_TITLE "Eolite 5.32"
#define TITLE_EOLITE "Eolite File Manager 5.32"
#define TITLE_KFM "Kolibri File Manager 2.32";
#define ABOUT_TITLE "EOLITE 5.29"
#define TITLE_EOLITE "Eolite File Manager 5.29"
#define TITLE_KFM "Kolibri File Manager 2.29";
#define MEMSIZE 1024 * 250
#include "../lib/clipboard.h"
@@ -25,15 +26,12 @@ 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"
@@ -112,8 +110,6 @@ 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"
@@ -125,8 +121,6 @@ _ini icons_ini = { "/sys/File managers/icons.ini", NULL };
#include "include\about.h"
#include "include\properties.h"
#include "search.c"
void handle_param()
{
//-p <path> : just show file/folder properties dialog
@@ -152,14 +146,6 @@ 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':
@@ -443,9 +429,6 @@ void main()
}
EventDriveClick(key_scancode);
break;
case SCAN_CODE_KEY_P:
EventCopyItemPath();
break;
case SCAN_CODE_KEY_X:
CopyFilesListToClipboard(CUT);
break;
@@ -455,9 +438,6 @@ void main()
case SCAN_CODE_KEY_G:
EventOpenConsoleHere();
break;
case SCAN_CODE_KEY_F:
EventOpenSearch();
break;
case SCAN_CODE_KEY_V:
EventPaste(path);
break;
@@ -718,7 +698,7 @@ void DrawFilePanels()
DrawButtonsAroundList();
path = location[active_panel^1];
active_panel ^= 1;
OpenDir_without_unselect(WITH_REDRAW);
OpenDir2(WITH_REDRAW);
active_panel ^= 1;
if (!getSelectedCount()) files_inactive.count = files.count;
llist_copy(#files, #files_active);
@@ -731,22 +711,38 @@ void DrawFilePanels()
DrawButtonsAroundList();
path = location[active_panel];
OpenDir_without_unselect(WITH_REDRAW);
OpenDir2(WITH_REDRAW);
}
}
void OpenDir(char redraw) {
unselectAll();
OpenDir_without_unselect(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_without_unselect(char redraw) {
void OpenDir(char redraw){
int errornum;
unselectAll();
if (buf) free(buf);
if (errornum = GetDir(#buf, #files.count, path, DIRS_NOROOT)) {
history.add(path);
//EventHistoryGoBack();
Dir_Up();
Write_Error(errornum);
return;
@@ -1041,6 +1037,7 @@ void EventHistoryGoForward()
}
}
void ShowOpenWithDialog()
{
byte open_param[4097];
@@ -1134,7 +1131,6 @@ 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);
@@ -1326,18 +1322,6 @@ 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;

View File

@@ -1,8 +1,16 @@
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
tup.rule("Eolite.c", "c-- /D=$(C_LANG) /OPATH=%o %f" .. tup.getconfig("KPACK_CMD"), "Eolite.com")
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")

View File

@@ -1,3 +1,4 @@
_ini icons_ini = { "/sys/File managers/icons.ini", NULL };
struct ICONS_INI {
collection exts;

View File

@@ -4,11 +4,9 @@ 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
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |Ctrl+C
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |Ctrl+X
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |Ctrl+V
-
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |F2
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |Del
@@ -17,10 +15,8 @@ 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>|Ctrl+F
-
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|Ctrl+R
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|F10
<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>";
@@ -29,8 +25,6 @@ char file_actions[]=
"Ava |Enter
Ava ... |Ctrl+Ent
-
Copy path |Ctrl+P
-
Kopeeri |Ctrl+C
L<EFBFBD>ika |Ctrl+X
Aseta |Ctrl+V
@@ -42,10 +36,8 @@ char empty_folder_actions[]=
"Aseta |Ctrl+V";
char burger_menu_items[] =
"New window|Ctrl+N
-
Open console here|Ctrl+G
Search|Ctrl+F
-
V<EFBFBD>rskenda|Ctrl+R
Settings|F10
About";
@@ -54,8 +46,6 @@ char file_actions[]=
"Open |Enter
Open with... |Ctrl+Ent
-
Copy path |Ctrl+P
-
Copy |Ctrl+C
Cut |Ctrl+X
Paste |Ctrl+V
@@ -67,10 +57,8 @@ char empty_folder_actions[]=
"Paste |Ctrl+V";
char burger_menu_items[] =
"New window|Ctrl+N
-
Open console here|Ctrl+G
Search|Ctrl+F
-
Refresh folder|Ctrl+R
Settings|F10
About";
#endif
@@ -88,18 +76,17 @@ void EventMenuClick(dword _id)
if (active_menu == MENU_FILE) switch(_id) {
case 1: EventOpen(0); break;
case 2: ShowOpenWithDialog(); 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;
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;
}
if (active_menu == MENU_BURGER) switch(_id) {
case 1: EventOpenNewEolite(); break;
case 2: EventOpenConsoleHere(); break;
case 3: EventOpenSearch(); break;
case 3: EventRefreshDisksAndFolders(); break;
case 4: FnProcess(10); break;
case 5: EventShowAbout(); break;
}

View File

@@ -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_editbox);
edit_box_key_c stdcall (#path_start_ed,key_ascii << 8);
break;
case evReDraw:

View File

@@ -9,6 +9,7 @@
#pragma option -CPA
#initallvar 0
#ifndef __COFF__
#jumptomain FALSE
#startaddress 0
@@ -29,6 +30,17 @@ 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
@@ -391,7 +403,6 @@ 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)
{

View File

@@ -116,10 +116,17 @@
EAX = 37;
EBX = 2;
$int 64
$mov ebx, eax
$mov ecx, eax
key = EAX;
lkm = EAX&MOUSE_LEFT;
pkm = EAX&MOUSE_RIGHT;
mkm = EAX&MOUSE_MIDDLE;
$and eax, 0x00000001
$shr ebx, 1
$and ebx, 0x00000001
$shr ecx, 2
$and ecx, 0x00000001
lkm = EAX;
pkm = EBX;
mkm = ECX;
//when you release the MOUSE button
// Mouse Move Event

View File

@@ -6,6 +6,37 @@
#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
@@ -211,3 +242,5 @@ struct frame
frame_draw stdcall (#frame123);
}
#endif

View File

@@ -44,14 +44,15 @@ signed SelectList_ProcessMouse()
return true;
}
if (mouse.up) && (select_list.ProcessMouse(mouse.x, mouse.y)) {
SelectList_LineChanged();
return true;
}
if (mouse.up) && (mouse.click)
if (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);
@@ -60,8 +61,8 @@ signed SelectList_ProcessMouse()
void SelectList_DrawScroller()
{
scroll1.bckg_col = sc.dark; // MixColors(sc.work, 0xBBBbbb, 80);
scroll1.frnt_col = sc.light; // MixColors(sc.work,0xFFFfff,120);
scroll1.bckg_col = MixColors(sc.work, 0xBBBbbb, 80);
scroll1.frnt_col = MixColors(sc.work,0xFFFfff,120);
scroll1.line_col = sc.line;
scroll1.max_area = select_list.count;

View File

@@ -1,13 +0,0 @@
#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();
}

View File

@@ -0,0 +1,6 @@
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")

View File

@@ -0,0 +1,10 @@
@del search
@c-- /D=LANG_ENG search.c
@rename search.com search
@del warning.txt
if exist search (
@exit
) else (
@pause
)

View File

@@ -0,0 +1,10 @@
@del search
@c-- /D=LANG_RUS search.c
@rename search.com search
@del warning.txt
if exist search (
@exit
) else (
@pause
)

View File

@@ -1,3 +1,13 @@
#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 //
@@ -24,11 +34,11 @@ enum {
BTN_CHOOSE_PATH
};
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};
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};
opendialog open_folder_dialog =
{
@@ -39,7 +49,7 @@ opendialog open_folder_dialog =
0, //dword opendir_path,
#search_path, //dword dir_default_path,
#open_dialog_path,
#draw_window_search,
#draw_window,
0,
#search_path, //dword openfile_path,
0, //dword filename_area,
@@ -87,72 +97,47 @@ void RESULTS::drop()
// //
//===================================================//
void SearchThread()
void main()
{
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);
if (!ESBYTE[path]) strcpy(path, "/sys");
edit_box_set_text stdcall (#edit_path, path);
edit_box_set_text stdcall (#edit_name, ".ini");
edit_box_set_text stdcall (#edit_path, "/kolibrios");
@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 (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;
if (mouse.key&MOUSE_RIGHT) && (mouse.up) && (select_list.MouseOver()) EventOpenFile(false);
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_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;
}
@GetKeys();
edit_box_key stdcall (#edit_name);
edit_box_key stdcall (#edit_path);
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) EventRunFile();
if (SCAN_CODE_ENTER == key_scancode) EventOpenFile(true);
prev_first = select_list.first;
prev_cur_y = select_list.cur_y;
if (select_list.ProcessKey(key_scancode)) {
@@ -167,37 +152,33 @@ void SearchThread()
break;
case evReDraw:
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();
draw_window();
break;
}
}
#define TOOLBAR_H 100
#define PAD 10
#define LISTX PAD
#define LISTY TOOLBAR_H
void draw_window_search()
void draw_window()
{
SelectList_Init(LISTX, LISTY, Form.cwidth-scroll1.size_x-LISTX-LISTX, Form.cheight-TOOLBAR_H-PAD);
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_Draw();
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, TOOLBAR_H-1, Form.cwidth, 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;
@@ -220,19 +201,16 @@ void SelectList_DrawLine(dword i)
} else {
strcpy(#tname, results.name.get(select_list.first + i));
strlwr(#tname);
icons_ini.section = "icons16";
icon = icons_ini.GetInt(#tname + strrchr(#tname, '.'), 2);
icon = ini.GetInt(#tname + strrchr(#tname, '.'), 2);
}
#define ICONX 7
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);
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);
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));
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));
}
void SelectList_LineChanged()
@@ -240,12 +218,6 @@ void SelectList_LineChanged()
return;
}
void getfullpath(dword to, path, name) {
strcpy(to, path);
chrcat(to, '/');
strcat(to, name);
}
//===================================================//
// //
// EVENTS //
@@ -260,21 +232,22 @@ void EventChooseSearchInPath()
}
}
void EventShowFileInFolder()
{
char full_path[4096];
int pos = select_list.cur_y;
getfullpath(#full_path, results.path.get(pos), results.name.get(pos));
RunProgram(#program_path, #full_path);
void getfullpath(dword to, path, name) {
strcpy(to, path);
chrcat(to, '/');
strcat(to, name);
}
void EventRunFile()
void EventOpenFile(int run_file_not_show_in_folder)
{
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);
if (run_file_not_show_in_folder) {
RunProgram("/sys/@open", #full_path);
} else {
RunProgram("/sys/file managers/eolite", #full_path);
}
}
void EventSearch()
@@ -316,4 +289,6 @@ void find_loop(dword way)
}
}
stop:

View File

@@ -1,6 +1,7 @@
; 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>
; <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
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><>
@@ -13,52 +14,6 @@ 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
@@ -508,24 +463,34 @@ proc tl_draw, tlist:dword
cmp tl_capt_cy,9 ;9 - minimum caption height
jl @f
call tl_draw_caption_cur_pos
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
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]
mcall SF_DRAW_TEXT ;undo
int 0x40
@@:
;cycle to nodes
@@ -1198,11 +1163,10 @@ 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
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
and ecx,0xffffff
mcall SF_DRAW_TEXT
@@:
ret
endp
@@ -1215,15 +1179,13 @@ 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
@@ -1896,8 +1858,10 @@ pushad
.po8:
call tl_node_move_po8 ;㧫<> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>塞 8 <20><><EFBFBD>
.cur_mov:
stdcall tl_cur_perv, edi
stdcall tl_draw, edi
push dword edi
call tl_cur_perv
push dword edi
call tl_draw
@@:
popad
ret
@@ -2017,11 +1981,10 @@ 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 ;row number
mcall SF_DRAW_TEXT ;captions
popad
@@:
ret
@@ -2290,6 +2253,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 word[edi],' ' ;add space symbol and 0
mov byte[edi],0
@@:
ret

View File

@@ -6,7 +6,7 @@ MK_C_SYM(__ieee754_expf)
fstl %st(1)
frndint
fstl %st(2)
fsubp
fsubrp
f2xm1
fld1
faddp

View File

@@ -32,6 +32,7 @@ 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"
@@ -43,9 +44,9 @@ include "..\..\..\bcc32\include\kos_heap.inc"
@@StrToInt$qpc equ @StrToInt$qpc
@@StrToDouble$qpc equ @StrToDouble$qpc
mem.alloc dd ? ;memory allocation function
mem.free dd ? ;function to free up memory
mem.realloc dd ? ;function for memory reallocation
mem.alloc dd ? ;функция для выделения памяти
mem.free dd ? ;функция для освобождения памяти
mem.realloc dd ? ;функция для перераспределения памяти
dll.load dd ?
PRECISION equ 16
@@ -53,20 +54,20 @@ NNP_FF_BIN equ 0x6e6962
NNP_FF_JSON equ 0x6e6f736a
struct Layer
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
c_size dd ? ;+ 0 curent size - число нейронов в текущем слое
n_size dd ? ;+ 4 next size - число нейронов на следующем слое
neurons dd ? ;+ 8 []
biases dd ? ;+12 []
weights dd ? ;+16 [][]
ends
struct NeuralNetwork
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
learningRate dq ? ;+ 0 скорость обучения
layers dd ? ;+ 8 [] слои
layers_length dd ? ;+12 число слоев
activation dd ? ;+16 указатель на функцию активации
derivative dd ? ;+20 указатель на функцию
errors dd ? ;+24 массив для вычислений
errorsNext dd ? ;+28
gradients dd ? ;+32
deltas dd ? ;+36
@@ -112,6 +113,11 @@ 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
@@ -131,21 +137,6 @@ 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
@@ -154,7 +145,7 @@ sigmoid:
fld qword[ebp+8]
fchs
fstp qword[esp]
call ieee754_exp
call dword[_exp]
add esp,8
fadd dword[f_1_0]
fdivr dword[f_1_0]
@@ -199,7 +190,7 @@ Layer_Create:
mov dword[esi+Layer.weights],eax
xor ebx,ebx
cmp edi,ebx
jbe .end_f
jbe .end_f
@@:
mov eax,[ebp+16]
shl eax,3
@@ -259,18 +250,18 @@ NNP_Create:
mov eax,[ebp+28] ;sizes
lea edx,[eax+4]
mov dword[ebp-8],edx ;save &sizes[i+1]
jmp .3
jmp .150
.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 @f
jae .152
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]
@@ -286,7 +277,7 @@ NNP_Create:
mov eax,[ebp-8]
lea edx,[eax-4]
mov dword[ebp-12],edx ;save &sizes[i]
jmp .2
jmp .154
.cycle_1: ;for (j=0; j < sizes[i]; j++)
call Math_random
fmul dword[f_2_0]
@@ -299,7 +290,7 @@ NNP_Create:
fstp qword[ecx+8*esi]
xor ebx,ebx ;k=0
cmp ebx,[ebp-4]
jae .1
jae .157
@@: ;for (k=0; k < nextSize; k++)
call Math_random
fmul dword[f_2_0]
@@ -314,15 +305,15 @@ NNP_Create:
inc ebx
cmp ebx,[ebp-4]
jb @b
.1:
.157:
inc esi
.2:
.154:
mov ecx,[ebp-12]
cmp esi,[ecx]
jb .cycle_1
inc edi
add dword[ebp-8],4
.3:
.150:
cmp edi,[ebp+32] ;sizes_length
jb .cycle_0
;create errors array
@@ -358,7 +349,7 @@ f_2_0:
f_1_0:
dd 1.0
;random number filling
;заполнение случайными числами
;+ 8 NeuralNetwork* o
align 16
NNP_Reset:
@@ -422,7 +413,7 @@ NNP_Reset:
pop ebp
ret 4
;calculation of input and output neurons
;расчет входных и выходных нейронов
;+ 8 NeuralNetwork* o
;+12 double* inputs
align 16
@@ -517,7 +508,7 @@ NNP_BackPropagation:
add edi,[esi+NeuralNetwork.layers]
xor ebx,ebx ;i=0
mov eax,[ebp+12] ;eax = targets[]
jmp .1
jmp .180
align 4
.cycle_0:
mov edx,[edi+Layer.neurons]
@@ -527,7 +518,7 @@ align 4
fstp qword[ecx+8*ebx]
inc ebx
add eax,8
.1:
.180:
cmp ebx,[edi+Layer.c_size]
jb .cycle_0
dec dword[ebp-4] ;k--
@@ -537,7 +528,7 @@ align 4
.cycle_1:
sub edi,sizeof.Layer
xor ebx,ebx ;i=0
jmp .2
jmp .186
align 4
.cycle_2:
mov eax,[edi+sizeof.Layer+Layer.neurons]
@@ -550,12 +541,12 @@ align 4
mov edx,[esi+NeuralNetwork.gradients]
fstp qword[edx+8*ebx]
inc ebx
.2:
.186:
cmp ebx,[edi+sizeof.Layer+Layer.c_size]
jb .cycle_2
mov edx,[esi+NeuralNetwork.deltas]
xor ebx,ebx
jmp .3
jmp .189
align 4
.cycle_3:
mov eax,[edi+Layer.c_size]
@@ -565,7 +556,7 @@ align 4
pop ecx
mov dword[edx],eax
xor eax,eax ;j=0
jmp @f
jmp .191
align 4
.cycle_4:
mov ecx,[esi+NeuralNetwork.gradients]
@@ -575,16 +566,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
.3:
.189:
cmp ebx,[edi+sizeof.Layer+Layer.c_size]
jb .cycle_3
xor ebx,ebx
jmp .4
jmp .195
align 4
.cycle_5:
mov eax,[esi+NeuralNetwork.errorsNext]
@@ -592,7 +583,7 @@ align 4
mov dword[eax+8*ebx],edx
mov dword[eax+8*ebx+4],edx
xor eax,eax ;j=0
jmp @f
jmp .197
align 4
.cycle_6:
mov edx,[edi+Layer.weights]
@@ -604,11 +595,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
.4:
.195:
cmp ebx,[edi]
jb .cycle_5
;copy errors to next level
@@ -619,7 +610,7 @@ align 4
mov eax,[esi+NeuralNetwork.deltas]
mov dword[ebp-12],eax
xor ebx,ebx ;i=0
jmp .6
jmp .201
align 4
.cycle_7:
mov ecx,[esi+NeuralNetwork.gradients]
@@ -629,7 +620,7 @@ align 4
fstp qword[eax+8*ebx]
xor eax,eax ;j=0
mov edx,[ebp-12] ;edx = deltas[i]
jmp .5
jmp .203
align 4
.cycle_8:
; mov ecx,[edx]
@@ -665,7 +656,7 @@ align 4
; pop edx
;@@:
inc eax
.5:
.203:
cmp eax,[edi+Layer.c_size]
jb .cycle_8
mov eax,[ebp-12]
@@ -673,7 +664,7 @@ align 4
pop ecx
inc ebx
add dword[ebp-12],4
.6:
.201:
cmp ebx,[edi+sizeof.Layer+Layer.c_size]
jb .cycle_7
dec dword[ebp-4]
@@ -702,7 +693,8 @@ NNP_GetMemData:
jne .end_f
mov esi,[ebp+16]
mov byte[esi],0
stdcall str_cat, esi,txt_QlearningRateQ_
stdcall [_strcat], esi,txt_QlearningRateQ_
add esp,8
push 1
push PRECISION
mov eax,[ebp+8]
@@ -710,9 +702,12 @@ NNP_GetMemData:
push dword[eax+NeuralNetwork.learningRate]
call @@DoubleToStr$qduso
add esp,16
stdcall str_cat, esi,eax
stdcall str_cat, esi,txt_zap_nl
stdcall str_cat, esi,txt_Qlayers_lengthQ
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
push 1
push 0
mov ecx,[ebp+8]
@@ -721,18 +716,23 @@ NNP_GetMemData:
fstp qword[esp]
call @@DoubleToStr$qduso
add esp,16
stdcall str_cat, esi,eax
stdcall str_cat, esi,txt_zap_nl
stdcall str_cat, esi,txt_QlayersQ
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
xor edi,edi ;i=0
jmp .7
jmp .232
align 4
.cycle_0:
push esi
call @@strlen$qpxc
pop ecx
add esi,eax
stdcall str_cat, esi,txt_nl_t_Qc_sizeQ
stdcall [_strcat], esi,txt_nl_t_Qc_sizeQ
add esp,8
mov ebx,edi
imul ebx,sizeof.Layer
push 1
@@ -748,8 +748,10 @@ align 4
fstp qword[esp]
call @@DoubleToStr$qduso
add esp,16
stdcall str_cat, esi,eax
stdcall str_cat, esi,txt_zap_nl_t_Qn_sizeQ
stdcall [_strcat], esi,eax
add esp,8
stdcall [_strcat], esi,txt_zap_nl_t_Qn_sizeQ
add esp,8
push 1
push 0
mov ecx,[ebp+8]
@@ -763,17 +765,21 @@ align 4
fstp qword[esp]
call @@DoubleToStr$qduso
add esp,16
stdcall str_cat, esi,eax
stdcall str_cat, esi,txt_zap_nl
stdcall str_cat, esi,txt_t_QneuronsQ
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
xor ebx,ebx ;j=0
jmp .1
jmp .234
align 4
.cycle_1:
test ebx,ebx
je @f
stdcall str_cat, esi,txt_zap_sp
@@:
je .235
stdcall [_strcat], esi,txt_zap_sp
add esp,8
.235:
push 1
push PRECISION
mov eax,edi
@@ -785,25 +791,29 @@ align 4
push dword[eax+8*ebx]
call @@DoubleToStr$qduso
add esp,16
stdcall str_cat, esi,eax
stdcall [_strcat], esi,eax
add esp,8
inc ebx
.1:
.234:
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 str_cat, esi,txt_sqbr_zap_nl
stdcall str_cat, esi,txt_t_QbiasesQ
stdcall [_strcat], esi,txt_sqbr_zap_nl
add esp,8
stdcall [_strcat], esi,txt_t_QbiasesQ
add esp,8
xor ebx,ebx ;j=0
jmp .2
jmp .238
align 4
.cycle_2:
test ebx,ebx
je @f
stdcall str_cat, esi,txt_zap_sp
@@:
je .239
stdcall [_strcat], esi,txt_zap_sp
add esp,8
.239:
push 1
push PRECISION
mov eax,edi
@@ -815,38 +825,43 @@ align 4
push dword[eax+8*ebx]
call @@DoubleToStr$qduso
add esp,16
stdcall str_cat, esi,eax
stdcall [_strcat], esi,eax
add esp,8
inc ebx
.2:
.238:
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 str_cat, esi,txt_sqbr_zap_t_QweightsQ
stdcall [_strcat], esi,txt_sqbr_zap_t_QweightsQ
add esp,8
mov eax,[ebp+8]
mov ecx,edi
imul ecx,sizeof.Layer
add ecx,[eax+NeuralNetwork.layers]
cmp dword[ecx+Layer.n_size],0
je .6
je .241
xor ebx,ebx
jmp .5
.cycle_3:
jmp .243
.242:
test ebx,ebx
je @f
stdcall str_cat, esi,txt_zap_nl_t_t
@@:
stdcall str_cat, esi,txt_sqbro
je .244
stdcall [_strcat], esi,txt_zap_nl_t_t
add esp,8
.244:
stdcall [_strcat], esi,txt_sqbro
add esp,8
xor eax,eax
mov dword[ebp-4],eax
jmp .4
.3:
jmp .246
.245:
cmp dword[ebp-4],0
je @f
stdcall str_cat, esi,txt_zap_sp
@@:
je .247
stdcall [_strcat], esi,txt_zap_sp
add esp,8
.247:
push 1
push PRECISION
mov edx,edi
@@ -860,39 +875,43 @@ align 4
push dword[ecx+8*eax]
@@:
call @@DoubleToStr$qduso
dec dword[esp+8] ;decrease PRECISION
jz @f ;to avoid looping
dec dword[esp+8] ;уменьшаем PRECISION
jz @f ;для избежания зацикливания
cmp word[eax],'#'
je @b ;if the number does not fit, we try to translate with less precision
je @b ;если число не поместилось пробуем перевести с меньшей точностью
@@:
add esp,16
stdcall str_cat, esi,eax
stdcall [_strcat], esi,eax
add esp,8
inc dword[ebp-4]
.4:
.246:
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 .3
stdcall str_cat, esi,txt_sqbr
ja .245
stdcall [_strcat], esi,txt_sqbr
add esp,8
inc ebx
.5:
.243:
mov eax,edi
imul eax,sizeof.Layer
mov ecx,[ebp+8]
add eax,[ecx+NeuralNetwork.layers]
cmp ebx,[eax+Layer.c_size]
jb .cycle_3
.6:
stdcall str_cat, esi,txt_sqbr_fbr_zap
jb .242
.241:
stdcall [_strcat], esi,txt_sqbr_fbr_zap
add esp,8
inc edi
.7:
.232:
mov eax,[ebp+8]
cmp edi,[eax+NeuralNetwork.layers_length]
jb .cycle_0
stdcall str_cat, esi,txt_nl_t_sqbr
stdcall [_strcat], esi,txt_nl_t_sqbr
add esp,8
.end_f:
pop edi esi ebx
mov esp,ebp
@@ -944,11 +963,12 @@ NNP_SetMemData:
mov eax,[ebp+16]
mov edx,[ebp+12]
; cmp edx,NNP_FF_BIN
; jne @f
; jne .191
;...
;@@:
;.191:
cmp edx,NNP_FF_JSON
jne .9
jne .198
.199:
stdcall @@strstr$qpxct1, eax,txt_learningRate
add esp,8
mov esi,eax
@@ -956,27 +976,27 @@ NNP_SetMemData:
add esp,8
mov esi,eax
test esi,esi
jne @f
jne .200
mov eax,1
jmp .end_f
@@:
jmp .193
.200:
stdcall @@strchr$qpxci, esi,':'
add esp,8
mov ebx,eax
test ebx,ebx
jne @f
jne .201
mov eax,2
jmp .end_f
@@:
jmp .193
.201:
inc ebx
stdcall @@strchr$qpxci, esi,','
add esp,8
mov esi,eax
test esi,esi
jne @f
jne .202
mov eax,3
jmp .end_f
@@:
jmp .193
.202:
mov byte[esi],0
inc esi
stdcall @@StrToInt$qpc, ebx
@@ -988,38 +1008,38 @@ NNP_SetMemData:
mov eax,[ebp+8]
mov edx,[eax+12]
cmp edx,[ebp-4]
je @f
je .203
mov eax,txt_err_layers_neq
jmp .end_f
@@:
jmp .193
.203:
xor edi,edi ;i=0
jmp .8
.cycle_0: ;for(i=0;i<o->layers_length;i++)
jmp .205
.204: ;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 @f
jne .206
mov eax,txt_err_c_size
jmp .end_f
@@:
jmp .193
.206:
stdcall @@strchr$qpxci, esi,':'
add esp,8
mov ebx,eax
test ebx,ebx
jne @f
jne .207
mov eax,6
jmp .end_f
@@:
jmp .193
.207:
inc ebx
stdcall @@strchr$qpxci, esi,','
add esp,8
mov esi,eax
test esi,esi
jne @f
jne .208
mov eax,7
jmp .end_f
@@:
jmp .193
.208:
mov byte[esi],0
inc esi
stdcall @@StrToInt$qpc, ebx
@@ -1029,27 +1049,27 @@ NNP_SetMemData:
add esp,8
mov esi,eax
test esi,esi
jne @f
jne .209
mov eax,8
jmp .end_f
@@:
jmp .193
.209:
stdcall @@strchr$qpxci, esi,':'
add esp,8
mov ebx,eax
test ebx,ebx
jne @f
jne .210
mov eax,9
jmp .end_f
@@:
jmp .193
.210:
inc ebx
stdcall @@strchr$qpxci, esi,','
add esp,8
mov esi,eax
test esi,esi
jne @f
jne .211
mov eax,10
jmp .end_f
@@:
jmp .193
.211:
mov byte[esi],0
inc esi
stdcall @@StrToInt$qpc,ebx
@@ -1061,11 +1081,11 @@ NNP_SetMemData:
add eax,[edx+NeuralNetwork.layers]
mov edx,[eax+Layer.c_size]
cmp edx,[ebp-4]
jne @f
jne .213
mov edx,[eax+Layer.n_size]
cmp edx,[ebp-8]
je .1
@@:
je .214
.213:
mov ecx,[ebp+8]
stdcall NNP_GetMaxLLen,ecx
mov ecx,edi
@@ -1086,10 +1106,10 @@ NNP_SetMemData:
add eax,edx
stdcall Layer_Create,eax
cmp ebx,[ebp-4] ;if(n>s || k>s)
jb @f
jb .215
cmp ebx,[ebp-8]
jae .1
@@:
jae .214
.215:
mov edx,[ebp+8]
mov ecx,[edx+NeuralNetwork.errors]
cmp ecx,[edx+NeuralNetwork.errorsNext]
@@ -1115,45 +1135,45 @@ NNP_SetMemData:
stdcall [mem.realloc], [edx+NeuralNetwork.deltas],ebx
mov edx,[ebp+8]
mov dword[edx+NeuralNetwork.deltas],eax
.1:
.214:
stdcall @@strstr$qpxct1, esi,txt_biases
add esp,8
mov esi,eax
test esi,esi
jne @f
jne .216
mov eax,11
jmp .end_f
@@:
jmp .193
.216:
stdcall @@strchr$qpxci, esi,'['
add esp,8
mov ebx,eax
test ebx,ebx
jne @f
jne .217
mov eax,txt_err_sqbrl_b1
jmp .end_f
@@:
jmp .193
.217:
inc ebx
xor edx,edx
mov dword[ebp-8],edx
jmp .4
.2:
jmp .219
.218:
dec edx
cmp eax,edx
jae @f
jae .220
stdcall @@strchr$qpxci, ebx,','
add esp,8
mov esi,eax
jmp .3
@@:
jmp .221
.220:
stdcall @@strchr$qpxci, ebx,']'
add esp,8
mov esi,eax
.3:
.221:
test esi,esi
jne @f
jne .222
mov eax,13
jmp .end_f
@@:
jmp .193
.222:
mov byte[esi],0
stdcall @@StrToDouble$qpc,ebx
pop ecx
@@ -1166,7 +1186,7 @@ NNP_SetMemData:
mov edx,[eax+edx+Layer.biases]
fstp qword[edx+8*ecx]
inc dword[ebp-8]
.4:
.219:
mov edx,edi
imul edx,sizeof.Layer
mov ecx,[ebp+8]
@@ -1174,29 +1194,29 @@ NNP_SetMemData:
mov edx,[edx+Layer.c_size]
mov eax,[ebp-8]
cmp edx,eax
ja .2
ja .218
mov esi,ebx
stdcall @@strstr$qpxct1, esi,txt_weights
add esp,8
mov esi,eax
test esi,esi
jne @f
jne .224
mov eax,14
jmp .end_f
@@:
jmp .193
.224:
stdcall @@strchr$qpxci, esi,'['
add esp,8
mov esi,eax
test esi,esi
jne @f
jne .225
mov eax,txt_err_sqbrl_w1
jmp .end_f
@@:
jmp .193
.225:
inc esi
xor edx,edx
mov dword[ebp-8],edx ;k=0
jmp .7
.cycle_1: ;for(k=0;k<o->layers[i].c_size;k++)
jmp .227
.226: ;for(k=0;k<o->layers[i].c_size;k++)
mov eax,edi
imul eax,sizeof.Layer
@@ -1206,39 +1226,39 @@ NNP_SetMemData:
or eax,eax
jnz .end_null_we
inc dword[ebp-8] ;k++
jmp .7 ;if 'weights' is null array
jmp .227 ;if 'weights' is null array
.end_null_we:
stdcall @@strchr$qpxci, esi,'['
add esp,8
mov ebx,eax
test ebx,ebx
jne @f
jne .228
mov eax,txt_err_sqbrl_w2
jmp .end_f
@@:
jmp .193
.228:
inc ebx
xor edx,edx
mov dword[ebp-12],edx ;j=0
jmp .6
.cycle_2: ;for(j=0;j<o->layers[i].n_size;j++)
jmp .230
.229: ;for(j=0;j<o->layers[i].n_size;j++)
dec edx
cmp eax,edx ;eax = j, edx = n_size-1
jae @f
jae .231
stdcall @@strchr$qpxci, ebx,','
add esp,8
mov esi,eax
jmp .5
@@:
jmp .232
.231:
stdcall @@strchr$qpxci, ebx,']'
add esp,8
mov esi,eax
.5:
.232:
test esi,esi
jne @f
jne .233
mov eax,txt_err_sqbrr_w2
jmp .end_f
@@:
jmp .193
.233:
mov byte[esi],0
stdcall @@StrToDouble$qpc,ebx
pop ecx
@@ -1253,7 +1273,7 @@ NNP_SetMemData:
mov edx,[ebp-12]
fstp qword[eax+8*edx]
inc dword[ebp-12]
.6:
.230:
mov edx,edi
imul edx,sizeof.Layer
mov ecx,[ebp+8]
@@ -1261,27 +1281,27 @@ NNP_SetMemData:
mov edx,[edx+Layer.n_size]
mov eax,[ebp-12]
cmp edx,eax
ja .cycle_2
ja .229
mov esi,ebx
inc dword[ebp-8]
.7:
.227:
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 .cycle_1
ja .226
inc edi
.8:
.205:
mov edx,[ebp+8]
cmp edi,[edx+NeuralNetwork.layers_length]
jb .cycle_0
jb .204
xor eax,eax
jmp .end_f
.9:
jmp .193
.198:
mov eax,1000
.end_f:
.193:
pop edi esi ebx
mov esp,ebp
pop ebp
@@ -1300,19 +1320,20 @@ Layer_Destroy:
call @$bdele$qpv
pop ecx
xor ebx,ebx
jmp @f
.cycle_1:
jmp .143
.142:
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 .cycle_1
jb .142
push dword[esi+Layer.weights]
call @$bdele$qpv
pop ecx
.145:
pop esi ebx ebp
ret 4
@@ -1323,17 +1344,17 @@ NNP_Destroy:
push ebx esi
mov esi,[ebp+8]
xor ebx,ebx
jmp @f
.cycle_1:
jmp .232
.231:
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 .cycle_1
jb .231
push dword[esi+NeuralNetwork.layers]
call @$bdele$qpv
pop ecx
@@ -1377,3 +1398,14 @@ 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',\ ;???

View File

@@ -41,7 +41,6 @@ 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'
@@ -370,12 +369,6 @@ 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:

View File

@@ -1,5 +0,0 @@
@del *.
@For /R %%i In (*.c) Do c-- "%%i"
@rename *.com *.
@pause
@del warning.txt

View File

@@ -0,0 +1,9 @@
@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

View File

@@ -0,0 +1,9 @@
@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

View File

@@ -1,44 +1,49 @@
// 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>
//Leency 06.10.2011, Flood-it! v2.41, GPL
#include "lib\kolibri.h"
#include "lib\random.h"
#ifndef AUTOBUILD
#include "lang.h--"
#endif
system_colors sc;
proc_info Form;
dword help_window_stak[100];
dword stak[100]; //<2F><><EFBFBD><EFBFBD> <20><><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><><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>
//<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>
//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";
#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 };
#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><EFBFBD>: /";
char LEVELS_TEXT[]=" <EFBFBD><EFBFBD><EFBFBD><EFBFBD>:";
char CLICKS_TEXT[]=" <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: /";
char LEVELS_TEXT[]="<EFBFBD><EFBFBD><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><EFBFBD> <20><> <20><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><>᫮ 室<EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><><E0A0A7><EFBFBD><EFBFBD> <20><>᪨.",
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>",
"<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><EFBFBD><><E2A0AA> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:",
"[Q] [W] [E]",
@@ -57,25 +62,28 @@ char BOARD_SIZES[] = "S\0L";
"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.",
"vahel. Proovi v<>li <20>le ujutada etteandtud k<>ikude arvuga!",
"Kaasahaarav ja l<>bus!",
"",
"M<EFBFBD>ngida saab ka klaviatuuriga:",
"[Q] [W] [E]",
"[A] [S] [D]",
0};
#else
char *BUTTON_CAPTIONS[]={ "Restart [F2]", " Help [F1]", " Exit [Esc]", 0};
char *BUTTON_CAPTIONS[]={ "New Game [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?",
"",
"You start from the TOP LEFT corner and progress by selecting one",
"Flood the whole board with one color within the allowed steps.",
"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 2 sizes of",
"way you can flood other areas of the board. Select from 3 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]",
@@ -84,7 +92,7 @@ char BOARD_SIZES[] = "S\0L";
#endif
unsigned char color_matrix[28*28]; //our field
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 loss_matrix[14*14]={
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -124,160 +132,152 @@ void main()
{
int key, id;
set_board_size(0); //small board by default
new_game();
loop() switch(WaitEvent())
loop()
{
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) {
make_turn(id-100);
}
if (id==10) set_board_size(0);
if (id==11) set_board_size(1);
break;
case evKey:
key = GetKeyScancode();
IF (key==01) //Escape
ExitProcess();
IF (key==59) //F1
{
_HELP_MARK:
CreateThread(#help_thread,#help_window_stak);
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)
{
make_turn(id-100);
break;
}
IF (key==60) //F2
{
_NEW_GAME_MARK:
}
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();
draw_clicks_num();
draw_field();
break;
}
IF (key==16) make_turn(0); //Q
IF (key==17) make_turn(1); //W
IF (key==18) make_turn(2); //E
IF (key==30) make_turn(3); //A
IF (key==31) make_turn(4); //S
IF (key==32) make_turn(5); //D
break;
case evReDraw:
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);
MoveSize(-1, -1, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14);
}
break;
case evKey:
key = GetKeyScancode();
IF (key==01) //Escape
ExitProcess();
IF (key==59) //F1
{
_HELP_MARK:
CreateThread(#help,#stak);
}
IF (key==60) //F2
{
_NEW_GAME_MARK:
new_game();
draw_clicks_num();
draw_field();
}
IF (key==16) make_turn(0); //Q
IF (key==17) make_turn(1); //W
IF (key==18) make_turn(2); //E
IF (key==30) make_turn(3); //A
IF (key==31) make_turn(4); //S
IF (key==32) make_turn(5); //D
break;
case evReDraw:
draw_window();
}
}
}
void make_turn(int turn_id)
{
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);
if (!game_is_ended()) draw_field();
}
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>
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>
}
void draw_window()
{
int i;
int i, j;
#define BUTTON_SIZE 28
sc.get();
DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH,
BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14, 0x74,0,"Flood-it!");
DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14, 0x74,sc.work,0,0,"Flood-it!");
// Fix rolled-up bug
//<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>
GetProcessInfo(#Form, SelfInfo);
IF (Form.status_window==4) return;
// Fill background to reduce window redraw
//<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>
for (i=0;i<=4;i++)
{
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);
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>
}
DrawBar(0,0, USER_PANEL_WIDTH-5, BLOCK_SIZE*BLOCKS_NUM+10, sc.work);
//<2F><><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]);
// Menu buttons
for (i=0;i<3;i++)
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (j=0;j<3;j++)
{
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);
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);
}
// Board size
WriteText(17,BLOCKS_NUM*BLOCK_SIZE-25+7,0x90,sc.work_text,#LEVELS_TEXT,0);
for (i=0;i<2;i++)
//<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++)
{
IF (board_size == i) {
ESI=sc.work_button;
EDI=sc.work_button_text;
} ELSE {
ESI = sc.work;
EDI = sc.work_text;
}
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
DefineButton(j*25+56,BLOCKS_NUM*BLOCK_SIZE-20, 20,20, j+10,sc.work_button);
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);
}
draw_clicks_num();
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;
game_end = false;
randomly_fill_the_board();
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++)
color_matrix[i] = random(6);
}
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,16 +289,15 @@ void fill_field(int new_color_id)
for (i=0;i<BLOCKS_NUM;i++)
for (j=0;j<BLOCKS_NUM;j++)
{
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 (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>
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 (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 (color_matrix[cur_cell]==MARKED) restart=1;
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 (restart) goto _RESTART_MARK;
@@ -306,83 +305,101 @@ void fill_field(int new_color_id)
IF (color_matrix[i]==MARKED) color_matrix[i]=new_color_id;
}
void draw_win_or_loose_animation(dword matrix)
int check_for_end()
{
int i, j, ii, jj;
for (i=0;i<14;i++) {
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 (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];
draw_field();
//Pause(5);
}
return 1;
}
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>
_WIN_MARK:
for (i=0;i<25;i++)
{
new_game();
draw_field();
Pause(7);
}
CLICKS=MAX_CLICKS;
for (i=0;i<14;i++)
for (j=0;j<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();
}
}
}
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;
//field is solid and CLICKS<MAX_CLICKS -> win
_WIN_MARK:
for (i=0;i<25;i++)
{
randomly_fill_the_board();
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(7);
}
draw_win_or_loose_animation(#win_matrix);
return 1;
}
//Pause(5);
}
return 1;
}
void draw_clicks_num()
{
#define TEXT_X 19
#define TEXT_Y 100
#define TEXT_X 21
#define TEXT_Y 92
DrawBar(TEXT_X, TEXT_Y, USER_PANEL_WIDTH-TEXT_X-5,16, sc.work);
DrawBar(TEXT_X, TEXT_Y, USER_PANEL_WIDTH-TEXT_X-3,9, sc.work);
WriteText(TEXT_X,TEXT_Y,0x90,sc.work_text,#CLICKS_TEXT,0);
WriteText(TEXT_X,TEXT_Y,0x80,sc.work_text,#CLICKS_TEXT,0);
IF (CLICKS<10) EBX=9*8+TEXT_X;
else EBX=8*8+TEXT_X;
IF (CLICKS<10) EBX=9*6+TEXT_X;
else EBX=8*6+TEXT_X;
WriteText(EBX,TEXT_Y,0x90,sc.work_text,itoa_nosign(CLICKS),0);
WriteText(EBX,TEXT_Y,0x80,sc.work_text,IntToStr(CLICKS),0);
WriteText(11*8+TEXT_X,TEXT_Y,0x90,sc.work_text,itoa_nosign(MAX_CLICKS),0);
WriteText(11*6+TEXT_X,TEXT_Y,0x80,sc.work_text,IntToStr(MAX_CLICKS),0);
}
@@ -400,7 +417,7 @@ void draw_field()
}
void help_thread()
void help()
{
int i;
@@ -412,10 +429,10 @@ void help_thread()
IF (GetKeyScancode()==001) ExitProcess(); //Esc
break;
case evReDraw:
//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);
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);
}
}

View File

@@ -23,10 +23,6 @@ dword I_Path = 0;
#define BT_HIDE 0x40000000
#define BT_NOFRAME 0x20000000
#define bool char
#define true 1
#define false 0
//-------------------------------------------------------------------------
@@ -98,11 +94,16 @@ inline fastcall Pause(dword EBX)
//------------------------------------------------------------------------------
char buffer[5];
inline fastcall dword itoa_nosign(dword ESI)
char buffer[11]="";
inline fastcall dword IntToStr(dword ESI)
{
$mov edi, #buffer
$mov ecx, 10
$test esi, esi
$jns f1
$mov al, '-'
$stosb
$neg esi
f1:
$mov eax, esi
$push -'0'
@@ -125,7 +126,7 @@ f3:
//------------------------------------------------------------------------------
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,EDI)
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI)
{
EAX = 12; // function 12:tell os about windowdraw
EBX = 1;
@@ -134,7 +135,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 = 0;
ESI = headerType << 24 | headerColour;
$xor eax,eax
$int 0x40
@@ -165,13 +166,6 @@ 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;
@@ -196,20 +190,12 @@ void DefineButton(dword x,y,w,h,EDX,ESI)
$int 0x40
}
void DrawRegion(dword x,y,s,EDX)
void DrawRegion(dword x,y,width,height,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
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);
}
inline fastcall dword WriteDebug(dword EDX)

View File

@@ -1,11 +1,5 @@
====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

View File

@@ -18,42 +18,43 @@
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()
void draw_window() // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
{
dword iconimg = sys_memopen("ICONS18", 0, SHM_READ);
//sys_get_colors(#colors, 40);
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, clGray | 0x80000000, "MineSweeper");
sys_draw_window(EBX, ECX, 0x34CCCCCC, colors.w_work | 0x80000000, "MineSweeper");
sys_window_redraw(2);
// Leency ROLLED UP FIX
sys_process_info(#procinfo, -1);
#define ROLLED_UP 0x04
IF (procinfo.status_window&ROLLED_UP) return;
IF (procinfo.ysize<70) return;
// <NEW GAME> BUTTON (911)
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);
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);
// <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+4, 0x90656565, #game_mode, 3);
sys_write_text(9<<16+HEADER_Y+3, 0x90000000+clDarkGray, #game_mode, 3);
// <USER FIELD> BUTTON (1002)
//sys_draw_button(BTNSIZE<<16+7, ECX, EDX+1, 0xddbb44);
draw_time();
draw_mines_left();
draw_squares();
sys_window_redraw(2);
draw_time(); // draw timer
draw_mines_left(); // draw mines
draw_squares(); // draw field
}
dword num_colors[8]=
@@ -69,11 +70,11 @@ dword num_colors[8]=
};
// Draw a single square
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void draw_square(int x, y)
{
int xl, xr, yt, yb; // lefx, right, top, bottom
dword tcolor = clBlack; // set default color as black
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>
byte tchar, tval;
xl = XPX * x + XST;
@@ -85,7 +86,7 @@ void draw_square(int x, y)
ECX = yt+1 << 16 + yb - yt-1;
$inc ebx
$inc ecx
sys_draw_bar(EBX, ECX, clLightGray); // fill bg
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>
if (!get_open(x, y))
{
@@ -99,16 +100,16 @@ void draw_square(int x, y)
SWITCH (get_mark(x, y))
{
CASE 2: tcolor = 0x10121288; tchar = '?'; BREAK;
CASE 1: tcolor = 0x10d04444; tchar = 'P';
CASE 2: tcolor = 0x121288; tchar = '?'; BREAK;
CASE 1: tcolor = 0xd04444; tchar = 'P';
}
IF (get_mark(x,y))
{
EBX = xl + 6 << 16 + yt + 4;
EBX = xl + 5 << 16 + yt + 4;
sys_write_text(EBX, tcolor, #tchar, 1);
EBX += 0x00010000;
/* Second run - registers are saved */
/* <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> */
sys_write_text(EBX, ECX, EDX, ESI);
}
}
@@ -119,15 +120,15 @@ void draw_square(int x, y)
{
IF (tval == MINE)
{
tcolor = 0x10ee1111;
tcolor = 0xee1111;
tchar = '*';
}
ELSE
{
tchar = tval + '0';
tcolor = num_colors[tval-1]+0x10000000;
tcolor = num_colors[tval-1];
}
EBX = xl + 7 << 16 + yt + 4;
EBX = xl + 5 << 16 + yt + 5;
sys_write_text(EBX, tcolor, #tchar, 1);
EBX += 0x00010000;
sys_write_text(EBX, ECX, EDX, ESI);
@@ -139,19 +140,19 @@ void draw_square(int x, y)
void draw_time()
{
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);
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);
}
void draw_mines_left()
{
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);
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);
}
// Draw mine field
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void draw_squares()
{
int x,y;

View File

@@ -64,8 +64,7 @@ struct ProcessInfo
ystart,
xsize,
ysize;
char status_window;
byte reserved[1024-71];
byte not_used2[974];
};
#define SystemColors SystemColours // usa/british
@@ -213,15 +212,6 @@ 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
@@ -1127,44 +1117,11 @@ inline fastcall dword sys_debug_read_char(dword EBX)
}
inline fastcall dword sys_window_move_size(dword EBX,ECX,EDX,ESI){
inline fastcall dword 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

View File

@@ -26,26 +26,17 @@
//? 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.62 <20>"
? print "\n<> (C) Leency (leency@mail.ru) 2010-2025 <20>"
? print "\n<> KolibriOS MineSweeper v0.52 <20>"
? print "\n<> (C) Leency (leency@mail.ru) 2010,2011 <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"
/************************************* DEFINES *************************************/
?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 **************************************/
? 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 MINE 255 // <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> value = MINE
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>
@@ -67,6 +58,9 @@ 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>
@@ -85,7 +79,7 @@ byte stop_game = FALSE, // game stopped -
firstmine;
ProcessInfo procinfo;
//SystemColors colors;
SystemColors colors;
/************************************** CODE **************************************/
@@ -435,8 +429,6 @@ void end_game()
void main()
{
sys_mem_init();
new_game();
draw_window();
@@ -466,11 +458,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();
sys_window_move_size(OLD,OLD,xsize+9,ysize);
window_move_size(OLD,OLD,xsize+9,ysize);
CONTINUE;
}
// ELSE IF (EAX == 1002)