Compare commits
37 Commits
3dcube-upd
...
66661184b7
| Author | SHA1 | Date | |
|---|---|---|---|
| 66661184b7 | |||
| 92f9d76f14 | |||
| 32466e31f4 | |||
| 63cd6f0ac8 | |||
| 4fcc17675c | |||
| 4e903ce12b | |||
| bfdb42c91f | |||
| 55d641b0da | |||
| 0e7cff0715 | |||
| 4d30fd7a2b | |||
| 292bd1d739 | |||
| 1a756358f5 | |||
| 009c0d0519 | |||
| bab6267412 | |||
| 72196f42de | |||
| f1e958af41 | |||
|
|
78de535233 | ||
| e353771faa | |||
| 714cc0a65c | |||
| 9357a21169 | |||
| 75e732a437 | |||
| afd07534ab | |||
| 20aba254bc | |||
| fbd99c82a4 | |||
| 784b02b4a4 | |||
|
|
7a2e48bed2 | ||
| 31ca1c76bb | |||
| 99ddd88ff8 | |||
| 4f1a8ef9a1 | |||
| 93f12c7673 | |||
|
|
3eb02af5fd | ||
|
|
83d8146ad1 | ||
|
|
1974f45c50 | ||
| 36ce6f0b74 | |||
| 4701a15222 | |||
| 61277f8822 | |||
| abb7442055 |
@@ -28,6 +28,8 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Get describe
|
||||
id: vars
|
||||
@@ -77,6 +79,7 @@ jobs:
|
||||
- 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
|
||||
@@ -85,6 +88,7 @@ jobs:
|
||||
- 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
|
||||
@@ -144,6 +148,7 @@ jobs:
|
||||
- name: (en_US) Build KolibriOS
|
||||
run: |
|
||||
export PATH=/home/autobuild/tools/win32/bin:$PATH
|
||||
source kos32-export-env-vars ${{ gitea.workspace }}
|
||||
tup build-en_US
|
||||
|
||||
- name: (en_US) Upload floppy image
|
||||
@@ -168,6 +173,7 @@ jobs:
|
||||
- name: (ru_RU) Build KolibriOS
|
||||
run: |
|
||||
export PATH=/home/autobuild/tools/win32/bin:$PATH
|
||||
source kos32-export-env-vars ${{ gitea.workspace }}
|
||||
tup build-ru_RU
|
||||
|
||||
- name: (ru_RU) Upload floppy image
|
||||
@@ -192,6 +198,7 @@ jobs:
|
||||
- name: (es_ES) Build KolibriOS
|
||||
run: |
|
||||
export PATH=/home/autobuild/tools/win32/bin:$PATH
|
||||
source kos32-export-env-vars ${{ gitea.workspace }}
|
||||
tup build-es_ES
|
||||
|
||||
- name: (es_ES) Upload floppy image
|
||||
|
||||
@@ -85,6 +85,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
|
||||
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"},
|
||||
{"SETTINGS/SYSPANEL.INI", "ru_RU/settings/syspanel.ini"},
|
||||
}) elseif build_type == "en_US" then tup.append_table(img_files, {
|
||||
{"WELCOME.HTM", VAR_DATA .. "/" .. build_type .. "/welcome.htm.kpack"},
|
||||
{"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"},
|
||||
{"DEVELOP/BACKY", SRC_PROGS .. "/develop/backy/Backy"},
|
||||
{"File Managers/KFAR.INI", "common/File Managers/kfar.ini"},
|
||||
@@ -289,6 +290,7 @@ extra_files = {
|
||||
{"kolibrios/res/templates/NES/", "common/templates/NES/*"},
|
||||
{"kolibrios/res/wallpapers/", "common/wallpapers/*"},
|
||||
{"kolibrios/res/system/", build_type .. "/settings/kolibri.lbl"},
|
||||
{"kolibrios/res/system/", "common/signs.png"},
|
||||
{"kolibrios/utils/vmode", "common/vmode"},
|
||||
{"kolibrios/utils/texture", "common/utils/texture"},
|
||||
{"kolibrios/utils/cnc_editor/cnc_editor", VAR_PROGS .. "/other/cnc_editor/cnc_editor"},
|
||||
@@ -456,14 +458,14 @@ tup.append_table(img_files, {
|
||||
{"DEMOS/BCDCLK", VAR_PROGS .. "/demos/bcdclk/trunk/bcdclk"},
|
||||
{"DEMOS/BUDHBROT", VAR_PROGS .. "/demos/buddhabrot/trunk/buddhabrot"},
|
||||
{"DEMOS/EYES", VAR_PROGS .. "/demos/eyes/trunk/eyes"},
|
||||
{"DEMOS/FIREWORK", VAR_PROGS .. "/demos/firework/trunk/firework"},
|
||||
{"DEMOS/MOVBACK", VAR_PROGS .. "/demos/movback/trunk/movback"},
|
||||
{"DEMOS/PLASMA", VAR_PROGS .. "/demos/plasma/trunk/plasma"},
|
||||
{"DEMOS/FIREWORK", VAR_PROGS .. "/demos/firework/firework"},
|
||||
{"DEMOS/MOVBACK", VAR_PROGS .. "/demos/movback/movback"},
|
||||
{"DEMOS/PLASMA", VAR_PROGS .. "/demos/plasma/plasma"},
|
||||
{"DEMOS/SPIRAL", VAR_PROGS .. "/demos/spiral/spiral"},
|
||||
{"DEMOS/TINYFRAC", VAR_PROGS .. "/demos/tinyfrac/trunk/tinyfrac"},
|
||||
{"DEMOS/TRANTEST", VAR_PROGS .. "/demos/trantest/trunk/trantest"},
|
||||
{"DEMOS/TUBE", VAR_PROGS .. "/demos/tube/trunk/tube"},
|
||||
{"DEMOS/UNVWATER", VAR_PROGS .. "/demos/unvwater/trunk/unvwater"},
|
||||
{"DEMOS/TUBE", VAR_PROGS .. "/demos/tube/tube"},
|
||||
{"DEMOS/UNVWATER", VAR_PROGS .. "/demos/unvwater/unvwater"},
|
||||
{"DEMOS/WEB", VAR_PROGS .. "/demos/web/trunk/web"},
|
||||
{"DEMOS/ZEROLINE", VAR_PROGS .. "/demos/zeroline/trunk/zeroline"},
|
||||
{"DEVELOP/BOARD", VAR_PROGS .. "/system/board/trunk/board"},
|
||||
@@ -474,6 +476,7 @@ tup.append_table(img_files, {
|
||||
{"DEVELOP/ENTROPYV", VAR_PROGS .. "/develop/entropyview/entropyview"},
|
||||
{"DEVELOP/FASM", VAR_PROGS .. "/develop/fasm/1.73/fasm"},
|
||||
{"DEVELOP/GENFILES", VAR_PROGS .. "/testing/genfiles/GenFiles"},
|
||||
{"DEVELOP/PIPET", VAR_PROGS .. "/other/pipet/pipet"},
|
||||
{"DEVELOP/H2D2B", VAR_PROGS .. "/develop/h2d2b/trunk/h2d2b"},
|
||||
{"DEVELOP/HEED", VAR_PROGS .. "/develop/heed/trunk/heed"},
|
||||
{"DEVELOP/MTDBG", VAR_PROGS .. "/develop/mtdbg/mtdbg"},
|
||||
@@ -669,7 +672,6 @@ tup.append_table(img_files, {
|
||||
{"TMPDISK", VAR_PROGS .. "/cmm/tmpdisk/tmpdisk.com"},
|
||||
{"DEVELOP/CLIPVIEW", VAR_PROGS .. "/cmm/clipview/clipview.com"},
|
||||
{"DEVELOP/MENU", VAR_PROGS .. "/cmm/menu/menu.com"},
|
||||
{"DEVELOP/PIPET", VAR_PROGS .. "/cmm/misc/pipet.com"},
|
||||
{"File Managers/EOLITE", VAR_PROGS .. "/cmm/eolite/Eolite.com"},
|
||||
{"File Managers/KFM2", VAR_PROGS .. "/cmm/misc/kfm2.com"},
|
||||
{"DEVELOP/DIFF", VAR_PROGS .. "/cmm/diff/diff.com"},
|
||||
@@ -694,7 +696,6 @@ tup.append_table(extra_files, {
|
||||
{"kolibrios/utils/notes", VAR_PROGS .. "/cmm/notes/notes.com"},
|
||||
{"kolibrios/utils/osupdate", VAR_PROGS .. "/cmm/misc/osupdate.com"},
|
||||
{"kolibrios/utils/quark", VAR_PROGS .. "/cmm/quark/quark.com"},
|
||||
{"kolibrios/utils/kf_view", VAR_PROGS .. "/cmm/kf_font_viewer/font_viewer.com"},
|
||||
})
|
||||
end -- tup.getconfig('NO_CMM') ~= 'full'
|
||||
|
||||
@@ -891,10 +892,6 @@ for i,v in ipairs(img_files) do
|
||||
str = string.gsub(str, "%%", "%%%%") -- escape % as %%
|
||||
cmd += " && str=" .. str
|
||||
cmd += ' && echo -n $str | dd status=none of=%o bs=1 seek=`expr 274 - length "$str"` conv=notrunc'
|
||||
str2='$(get-current-cmtid|grep -oE "\\+[0-9]+")'
|
||||
str2 = string.gsub(str2, "%$", "\\$") -- escape $ as \$
|
||||
cmd += " && str2=" .. str2
|
||||
cmd += ' && echo -n $str2 | dd status=none of=%o bs=1 seek=216 conv=notrunc'
|
||||
end
|
||||
local_file = VAR_KERNEL .. "/.kernel.mnt"
|
||||
tup.definerule{inputs = {v[2]}, command = cmd, outputs = {local_file}}
|
||||
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 720 B After Width: | Height: | Size: 700 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 809 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 19 KiB |
@@ -79,7 +79,7 @@ next=$TextEditor
|
||||
[Assoc]
|
||||
/=/sys/file managers/eolite
|
||||
|
||||
kf=/kolibrios/utils/kf_view
|
||||
kf=/sys/syspanel
|
||||
|
||||
txt=$CodeEdit
|
||||
log=$CodeEdit
|
||||
|
||||
BIN
data/common/signs.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
2
data/en_US/Tupfile.lua
Normal file
@@ -0,0 +1,2 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
tup.rule("welcome.htm", "cp %f %o" .. tup.getconfig("KPACK_CMD"), "welcome.htm.kpack")
|
||||
78
data/en_US/welcome.htm
Normal file
@@ -0,0 +1,78 @@
|
||||
<html><title>Welcome notes</title><body bgcolor=#fff>
|
||||
|
||||
<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. 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 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>
|
||||
The asterisk [*] in the Menu means the app isn't available in the Floppy version, only in the Big distro (Flash/ISO/UEFI-HDD). Not all programs are available via Menu to encourage you to explore KolibriOS files by yourself.
|
||||
|
||||
<h3><kosicon n=25>If you have problems with USB</h3>
|
||||
Only USB1.1 and USB2 ports are supported, not USB3+. And yep, the USB driver is written entirely in assembler. Some motherboards have options like "USB Legacy Support" or something similar, which may help the system detect your device. Also, some ports on your motherboard may work while others may not, only G-d knows why. So, play with the BIOS/UEFI settings and try different ports.
|
||||
|
||||
<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. 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. 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.
|
||||
|
||||
<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>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=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.
|
||||
|
||||
<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:
|
||||
~ 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, 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 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?" -->
|
||||
@@ -3,10 +3,25 @@ HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../programs" or tup.getco
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
-- environment variables
|
||||
tup.import("KOLIBRIOS_BUILD_OFFSET") -- 1234
|
||||
tup.import("KOLIBRIOS_BUILD_CMTID") -- 0xaabbccdd
|
||||
tup.import("KOLIBRIOS_BUILD_DBGTAG") -- 0x61 for 'a', etc
|
||||
|
||||
str_build = ""
|
||||
if KOLIBRIOS_BUILD_OFFSET then
|
||||
str_build += " -dBUILD_OFFSET=" .. KOLIBRIOS_BUILD_OFFSET
|
||||
end
|
||||
if KOLIBRIOS_BUILD_CMTID then
|
||||
str_build += " -dBUILD_CMTID=" .. KOLIBRIOS_BUILD_CMTID
|
||||
end
|
||||
if KOLIBRIOS_BUILD_DBGTAG then
|
||||
str_build += " -dBUILD_DBGTAG=" .. KOLIBRIOS_BUILD_DBGTAG
|
||||
end
|
||||
|
||||
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt")
|
||||
--tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -s %o.fas" .. tup.getconfig("KERPACK_CMD"), {"kernel.mnt", extra_outputs = {"kernel.mnt.fas"}})
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -s %o.fas" .. str_build .. tup.getconfig("KERPACK_CMD"), {"kernel.mnt", extra_outputs = {"kernel.mnt.fas"}})
|
||||
--tup.rule({"kernel.mnt.fas", extra_inputs = {"kernel.mnt"}}, "symbols %f %o", "kernel.mnt.sym")
|
||||
--tup.rule({"kernel.mnt.fas", extra_inputs = {"kernel.mnt"}}, "listing %f %o", "kernel.mnt.lst")
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -dextended_primary_loader=1" .. tup.getconfig("KERPACK_CMD"), "kernel.mnt.ext_loader")
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -dpretest_build=1 -ddebug_com_base=0xe9", "kernel.mnt.pretest")
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o " .. str_build .. " -dextended_primary_loader=1 " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt.ext_loader")
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o " .. str_build .. " -dpretest_build=1 -ddebug_com_base=0xe9", "kernel.mnt.pretest")
|
||||
|
||||
@@ -28,36 +28,42 @@ macro line_space {
|
||||
db 186
|
||||
}
|
||||
d80x25_top:
|
||||
line_full_top
|
||||
if __REV__ > 0
|
||||
line_full_top
|
||||
; draw seven digits of the git hash
|
||||
__x = BUILD_CMTID
|
||||
if __x > 0
|
||||
__x = __x SHR 4
|
||||
cur_line_pos = 75
|
||||
store byte ' ' at d80x25_top+cur_line_pos+1
|
||||
rev_var = __REV__
|
||||
while rev_var > 0
|
||||
store byte rev_var mod 10 + '0' at d80x25_top+cur_line_pos
|
||||
cur_line_pos = cur_line_pos - 1
|
||||
rev_var = rev_var / 10
|
||||
end while
|
||||
store byte ' ' at d80x25_top+cur_line_pos
|
||||
store dword ' SVN' at d80x25_top+cur_line_pos-4
|
||||
store byte ' ' at d80x25_top+cur_line_pos+1
|
||||
repeat 7
|
||||
digit = __x AND 0xf
|
||||
if digit > 9
|
||||
digit = digit - 10 + 'a'
|
||||
else
|
||||
digit = digit + '0'
|
||||
end if
|
||||
store byte digit at d80x25_top+cur_line_pos
|
||||
cur_line_pos = cur_line_pos - 1
|
||||
__x = __x SHR 4
|
||||
end repeat
|
||||
store byte ' ' at d80x25_top+cur_line_pos
|
||||
store dword ' GIT' at d80x25_top+cur_line_pos-4
|
||||
end if
|
||||
|
||||
space_msg:
|
||||
line_space
|
||||
line_space
|
||||
verstr:
|
||||
; line_space
|
||||
; version string
|
||||
db 186,32
|
||||
repeat 78
|
||||
load a byte from kernel_header.signature+%-1
|
||||
if a = 13
|
||||
break
|
||||
end if
|
||||
db a
|
||||
end repeat
|
||||
repeat 78 - ($-verstr)
|
||||
db ' '
|
||||
end repeat
|
||||
db 32,186
|
||||
line_half
|
||||
db 186,32
|
||||
repeat 78
|
||||
load a byte from kernel_header.signature+%-1
|
||||
if a = 13
|
||||
break
|
||||
end if
|
||||
db a
|
||||
end repeat
|
||||
repeat 78 - ($-verstr)
|
||||
db ' '
|
||||
end repeat
|
||||
db 32,186
|
||||
line_half
|
||||
d80x25_top_num = 4
|
||||
|
||||
@@ -24,9 +24,38 @@ org 0
|
||||
; struct kernel_header
|
||||
jmp start_of_code ; jump
|
||||
db 'KolibriOS ' ; signature
|
||||
db 'v0.7.7.0 ',13,10,13,10,0 ; FIXME: get distribution version from git tag
|
||||
db 'v0.7.7.0' ; FIXME: get distribution version from git tag?
|
||||
.offset db ' ',13,10,0
|
||||
dd B32-KERNEL_BASE ; offset of the kernel's 32-bit entry point
|
||||
|
||||
cur_line_pos = 0
|
||||
offset_len = 0
|
||||
__x = BUILD_OFFSET
|
||||
if __x > 0
|
||||
store byte '+' at .offset+cur_line_pos
|
||||
if __x < 10
|
||||
offset_len = 2 ; '+' and a digit
|
||||
else if __x < 100
|
||||
offset_len = 3
|
||||
else if __x < 1000
|
||||
offset_len = 4
|
||||
else if __x < 10000
|
||||
offset_len = 5
|
||||
else
|
||||
offset_len = 6
|
||||
end if
|
||||
cur_line_pos = cur_line_pos + offset_len - 1
|
||||
while __x > 0
|
||||
store byte __x mod 10 + '0' at .offset+cur_line_pos
|
||||
cur_line_pos = cur_line_pos - 1
|
||||
__x = __x / 10
|
||||
end while
|
||||
end if
|
||||
if BUILD_DBGTAG > 0
|
||||
store byte '-' at .offset+offset_len
|
||||
store byte BUILD_DBGTAG at .offset+offset_len+1
|
||||
end if
|
||||
|
||||
include "boot/bootstr.inc" ; language-independent boot messages
|
||||
include "boot/preboot.inc"
|
||||
|
||||
|
||||
@@ -227,6 +227,33 @@ struct kernel_header
|
||||
; KERNEL.MNT file can be booted on BIOS as well as on UEFI.
|
||||
ends
|
||||
|
||||
struct kernel_version
|
||||
; OS release number, e.g. 0,7,7,0. Distro-specific.
|
||||
osrel rb 4
|
||||
; A single char like 'a' to append to the version, or 0 to omit it.
|
||||
; 0 means 0.7.7.0+1234, 'a' means 0.7.7.0+1234-a, etc.
|
||||
; This allows developers to determine the debug build by its log.
|
||||
; Unfortunately, users sometimes mess things and test not the build they
|
||||
; were asked to test.
|
||||
dbgtag db ?
|
||||
; The kernel itself doesn't have any version other than its ABI version.
|
||||
; The minor and major parts were meant to mean significant compatible
|
||||
; and incompatible changes correspondingly. It is for a developer to
|
||||
; decide on what is a significant change.
|
||||
abimin db ?
|
||||
; The major ABI version must be at least 0x28 for backward compatibility
|
||||
; with the old revision number: 0x2800 = 10240 > the last SVN revision.
|
||||
abimaj dw ?
|
||||
; In binary, e.g. a short git hash. A single dword is 8 digits which
|
||||
; should be enough for the foreseeable future. We always can get space
|
||||
; for four more digits from the two reserved bytes below if needed.
|
||||
cmtid dd ?
|
||||
reserved dw ?
|
||||
; The number of commits from the last release.
|
||||
offset dw ?
|
||||
ends
|
||||
assert sizeof.kernel_version = 16
|
||||
|
||||
DRIVE_DATA_SIZE = 16
|
||||
|
||||
OS_BASE = 0x80000000
|
||||
|
||||
@@ -970,13 +970,21 @@ picture rb Xsize*Ysize*4 ; 32 бита
|
||||
размером 16 байт для будущей совместимости, в будущем могут быть
|
||||
добавлены некоторые поля.
|
||||
Структура буфера:
|
||||
db a,b,c,d для версии a.b.c.d
|
||||
db 0: зарезервировано
|
||||
dd REV - номер svn-ревизии ядра
|
||||
Для ядра Kolibri 0.7.7.0+:
|
||||
db a,b,c,d для версии ОС a.b.c.d
|
||||
db отладочная метка, для релиза всегда 0, иначе любой символ ASCII
|
||||
db младшая часть ABI ядра
|
||||
dw старшая часть ABI ядра
|
||||
dd идентификатор коммита, например краткий git-хэш в бинарном виде
|
||||
dw зарезервировано
|
||||
dw количество коммитов с момента последнего релиза
|
||||
Пример структуры для ядра Kolibri 0.7.7.0+:
|
||||
db 0,7,7,0
|
||||
db 0
|
||||
dd 1675
|
||||
db 0
|
||||
dw 40
|
||||
dd 0xf26d5b28
|
||||
dw 0
|
||||
dw 1675
|
||||
|
||||
---------------------- Константы для регистров: ----------------------
|
||||
eax - SF_SYSTEM (18)
|
||||
|
||||
@@ -962,13 +962,21 @@ Remarks:
|
||||
16 byte buffer for the future compatibility, in the future
|
||||
some fields can be added.
|
||||
Structure of the buffer:
|
||||
db a,b,c,d for version a.b.c.d
|
||||
db 0: reserved
|
||||
dd REV - kernel SVN revision number
|
||||
For Kolibri 0.7.7.0+ kernel:
|
||||
db a,b,c,d for os version a.b.c.d
|
||||
db debug tag, 0 for release, any ASCII char otherwise
|
||||
db kernel ABI minor
|
||||
dw kernel ABI major
|
||||
dd commit id, e.g. short git hash in binary
|
||||
dw reserved
|
||||
dw the number of commits since the latest release
|
||||
For Kolibri 0.7.7.0+ the structure is like this:
|
||||
db 0,7,7,0
|
||||
db 0
|
||||
dd 1675
|
||||
db 0
|
||||
dw 40
|
||||
dd 0xf26d5b28
|
||||
dw 0
|
||||
dw 1675
|
||||
|
||||
---------------------- Constants for registers: ----------------------
|
||||
eax - SF_SYSTEM (18)
|
||||
|
||||
@@ -30,6 +30,8 @@ format binary as "mnt"
|
||||
include 'macros.inc'
|
||||
include 'struct.inc'
|
||||
|
||||
ABI_MAJOR = 0x28
|
||||
ABI_MINOR = 0
|
||||
|
||||
USE_COM_IRQ = 1 ; make irq 3 and irq 4 available for PCI devices
|
||||
VESA_1_2_VIDEO = 0 ; enable vesa 1.2 bank switch functions
|
||||
@@ -711,10 +713,33 @@ end if
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
; show SVN version of kernel on the message board
|
||||
; show OS version, offset, debug tag and commit id on the message board
|
||||
;-----------------------------------------------------------------------------
|
||||
mov eax, [version_inf.rev]
|
||||
DEBUGF 1, "K : kernel SVN r%d\n", eax
|
||||
mov eax, version_inf.osrel
|
||||
DEBUGF 1, "K : OS version: %u.%u.%u.%u", [eax+0]:1, [eax+1]:1, \
|
||||
[eax+2]:1, [eax+3]:1, ecx
|
||||
movzx ecx, [version_inf.offset]
|
||||
jecxz @f
|
||||
DEBUGF 1, "+%u", ecx
|
||||
@@:
|
||||
movzx ecx, [version_inf.dbgtag]
|
||||
jecxz @f
|
||||
push ecx
|
||||
mov ecx, esp
|
||||
DEBUGF 1, "-%s", ecx
|
||||
pop ecx
|
||||
@@:
|
||||
DEBUGF 1, "\n"
|
||||
mov ecx, [version_inf.cmtid]
|
||||
jecxz @f
|
||||
DEBUGF 1, "K : Commit ID: %x\n", ecx
|
||||
@@:
|
||||
;-----------------------------------------------------------------------------
|
||||
; show kernel ABI
|
||||
;-----------------------------------------------------------------------------
|
||||
movzx eax, [version_inf.abimaj]
|
||||
movzx ecx, [version_inf.abimin]
|
||||
DEBUGF 1, "K : Kernel ABI: %u.%u\n", eax, ecx
|
||||
;-----------------------------------------------------------------------------
|
||||
; show CPU count on the message board
|
||||
;-----------------------------------------------------------------------------
|
||||
@@ -2102,12 +2127,12 @@ sysfn_getdiskinfo: ; 18.11 = get disk info table
|
||||
;------------------------------------------------------------------------------
|
||||
sysfn_getversion: ; 18.13 = get kernel ID and version
|
||||
; if given memory address belongs to kernel then error
|
||||
stdcall is_region_userspace, ecx, version_inf.size
|
||||
stdcall is_region_userspace, ecx, sizeof.kernel_version
|
||||
jnz .addr_error
|
||||
|
||||
mov edi, ecx
|
||||
mov esi, version_inf
|
||||
mov ecx, version_inf.size
|
||||
mov ecx, sizeof.kernel_version
|
||||
rep movsb
|
||||
ret
|
||||
.addr_error: ; if given memory address is illegal
|
||||
@@ -2287,11 +2312,18 @@ sound_flag db 0
|
||||
endg
|
||||
|
||||
iglobal
|
||||
version_inf:
|
||||
db 0,7,7,0 ; FIXME: Get distribution version from git tag
|
||||
db 0
|
||||
.rev dd __REV__
|
||||
.size = $ - version_inf
|
||||
if ~ definite BUILD_DBGTAG
|
||||
BUILD_DBGTAG = 0
|
||||
end if
|
||||
if ~ definite BUILD_CMTID
|
||||
BUILD_CMTID = 0
|
||||
end if
|
||||
if ~ definite BUILD_OFFSET
|
||||
BUILD_OFFSET = 0
|
||||
end if
|
||||
align 4
|
||||
version_inf kernel_version <0,7,7,0>, BUILD_DBGTAG, ABI_MINOR, ABI_MAJOR, \
|
||||
BUILD_CMTID, 0, BUILD_OFFSET
|
||||
endg
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
@@ -4457,8 +4489,6 @@ end if
|
||||
|
||||
include "data32.inc"
|
||||
|
||||
__REV__ = __REV
|
||||
|
||||
if ~ lang eq es_ES
|
||||
diff16 "end of kernel code",0,$
|
||||
end if
|
||||
|
||||
@@ -5,16 +5,6 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
__REV = 0
|
||||
|
||||
macro $Revision a {
|
||||
match =: Num =$,a \{
|
||||
if __REV < Num
|
||||
__REV = Num
|
||||
end if
|
||||
\}
|
||||
}
|
||||
|
||||
;// mike.dld, 2006-29-01 [
|
||||
|
||||
; macros definition
|
||||
|
||||
@@ -68,6 +68,7 @@ struct TWebBrowser {
|
||||
void tag_a();
|
||||
void tag_p();
|
||||
void tag_img();
|
||||
void tag_kosicon();
|
||||
void tag_div();
|
||||
void tag_h1234_caption();
|
||||
void tag_ol_ul_dt();
|
||||
@@ -176,7 +177,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
|
||||
}
|
||||
}
|
||||
if (ESBYTE[bufpos] == '&') {
|
||||
bufpos = GetUnicodeSymbol(#linebuf, sizeof(TWebBrowser.linebuf), bufpos+1, bufpointer+bufsize);
|
||||
bufpos = GetUnicodeSymbol(#linebuf, sizeof(TWebBrowser.linebuf)-1, bufpos+1, bufpointer+bufsize);
|
||||
continue;
|
||||
}
|
||||
if (ESBYTE[bufpos] == '<') && (is_html) {
|
||||
|
||||
@@ -67,7 +67,7 @@ bool _tag::parse(dword _bufpos, bufend)
|
||||
|
||||
if (!whitepos) || (whitepos > closepos) {
|
||||
//no param
|
||||
strncpy(#name, bufpos, math.min(closepos - bufpos, sizeof(tag.name)));
|
||||
strncpy(#name, bufpos, math.min(closepos - bufpos, sizeof(tag.name)-1));
|
||||
bufpos = closepos;
|
||||
} else {
|
||||
//we have param
|
||||
@@ -76,7 +76,7 @@ bool _tag::parse(dword _bufpos, bufend)
|
||||
if (openpos < strchr(closepos+1, '>')) break;
|
||||
if (!closepos = EAX) {closepos = bufend;break;}
|
||||
}
|
||||
strncpy(#name, bufpos, math.min(whitepos - bufpos, sizeof(tag.name)));
|
||||
strncpy(#name, bufpos, math.min(whitepos - bufpos, sizeof(tag.name)-1));
|
||||
bufpos = closepos;
|
||||
|
||||
params = malloc(closepos - whitepos + 1);
|
||||
|
||||
@@ -151,7 +151,7 @@ bool TWebBrowser::RenderImage(dword cur_img)
|
||||
int img_x, img_y, img_w, img_h;
|
||||
dword imgbuf[44];
|
||||
|
||||
if (!cur_img) return false;
|
||||
if (!cur_img) || (!buf_data) return false;
|
||||
|
||||
img_h = ESDWORD[cur_img+8];
|
||||
img_w = ESDWORD[cur_img+4];
|
||||
|
||||
@@ -10,6 +10,7 @@ void TWebBrowser::SetStyle()
|
||||
if (tag.is("a")) { tag_a(); return; }
|
||||
if (tag.is("p")) { tag_p(); return; }
|
||||
if (tag.is("img")) { tag_img(); return; }
|
||||
if (tag.is("kosicon")) { tag_kosicon(); return; }
|
||||
if (tag.is("div")) { tag_div(); return; }
|
||||
if (tag.is("br")) { /*draw_x++;*/NewLine(); return; }
|
||||
if (tag.is("nav")) { style.nav = tag.opened; return; }
|
||||
@@ -266,6 +267,17 @@ void TWebBrowser::tag_h1234_caption()
|
||||
}
|
||||
}
|
||||
|
||||
void TWebBrowser::tag_kosicon()
|
||||
{
|
||||
dword imgbuf[44];
|
||||
dword shared_i18 = memopen("ICONS18", NULL, SHM_READ);
|
||||
if (shared_i18) && (tag.get_number_of("n")) {
|
||||
if (draw_x + 18 > canvas.bufw) NewLine();
|
||||
canvas.DrawImage(draw_x, draw_y-2, 18, 18, 18*18*4*tag.number+shared_i18);
|
||||
draw_x += 22;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void TWebBrowser::tag_img()
|
||||
{
|
||||
@@ -305,7 +317,7 @@ void TWebBrowser::tag_img()
|
||||
img_decode stdcall (cache.current_buf, cache.current_size, 0);
|
||||
if (EAX) goto IMGOK; else goto NOIMG;
|
||||
} else {
|
||||
img_url.add(#img_path);
|
||||
if (img_url.get_pos_by_name(#img_path)==-1) img_url.add(#img_path);
|
||||
goto NOIMG;
|
||||
}
|
||||
|
||||
@@ -453,9 +465,10 @@ void TWebBrowser::tag_table()
|
||||
}
|
||||
if (table.cols.get(tr_pos-1)-td_pos>1) && (tag.get_number_of("width")) {
|
||||
if (strchr(tag.value, '%')) {
|
||||
tag.number = cur_cell_w - table.margin - 23 - left_gap * tag.number / 100;
|
||||
tag.number = cur_cell_w * tag.number / 100; //
|
||||
}
|
||||
if (tag.number < draw_w) draw_w = tag.number;
|
||||
if (tag.number < list.w - table.margin - left_gap) draw_w = tag.number;
|
||||
|
||||
}
|
||||
draw_y = row_start_y;
|
||||
td_pos++;
|
||||
|
||||
@@ -66,6 +66,7 @@ char *unicode_symbols[]={
|
||||
"lowast","*",
|
||||
|
||||
"#128154","<3",
|
||||
"#128545",":(",
|
||||
|
||||
0};
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ char default_dir[] = "/sys";
|
||||
od_filter filter2 = { 22, "TXT\0HTM\0HTML\0DOCX\0\0" };
|
||||
|
||||
char editURL[URL_SIZE+1];
|
||||
edit_box omnibox_edit = {, 0, 0, 0xffffff,
|
||||
edit_box omnibox_edit = {250, 0, 0, 0xffffff,
|
||||
0x94AECE, 0xffffff, 0xffffff,0x10000000,URL_SIZE-2,#editURL,0,,19,19};
|
||||
|
||||
//===================================================//
|
||||
@@ -199,7 +199,7 @@ void main()
|
||||
GetProcessInfo(#Form, SelfInfo);
|
||||
ProcessMenuClick();
|
||||
sc.get();
|
||||
if (Form.status_window>2) break;
|
||||
if (Form.status_window & ROLLED_UP) break;
|
||||
if (Form.height<120) { MoveSize(OLD,OLD,OLD,120); break; }
|
||||
if (Form.width<280) { MoveSize(OLD,OLD,280,OLD); break; }
|
||||
draw_window();
|
||||
@@ -258,6 +258,7 @@ void main()
|
||||
free(http.content_pointer);
|
||||
GetImg(false);
|
||||
}
|
||||
debugln("end evNetwork");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -516,7 +517,6 @@ bool GetLocalFileData(dword _path)
|
||||
bool GetUrl(dword _http_url)
|
||||
{
|
||||
char new_url_full[URL_SIZE+1];
|
||||
|
||||
if (!strncmp(_http_url,"http:",5)) {
|
||||
http.get(_http_url);
|
||||
return true;
|
||||
@@ -571,10 +571,10 @@ void OpenPage(dword _open_URL)
|
||||
//INTERNAL PAGE
|
||||
history.add(#new_url);
|
||||
WB1.custom_encoding = -1;
|
||||
if (streq(#new_url, URL_SERVICE_HOMEPAGE)) LoadInternalPage(#buildin_page_home, sizeof(buildin_page_home));
|
||||
else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test));
|
||||
if (streq(#new_url, URL_SERVICE_HOMEPAGE)) LoadInternalPage(#buildin_page_home, sizeof(buildin_page_home)-1);
|
||||
else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test)-1);
|
||||
else if (streq(#new_url, URL_SERVICE_HISTORY)) ShowHistory();
|
||||
else LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
|
||||
else LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
|
||||
|
||||
} else if (!strncmp(#new_url,"http:",5)) || (!strncmp(#new_url,"https:",6)) {
|
||||
//WEB PAGE
|
||||
@@ -589,7 +589,7 @@ void OpenPage(dword _open_URL)
|
||||
|
||||
if (!http.transfer) {
|
||||
history.add(#new_url);
|
||||
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
|
||||
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
|
||||
}
|
||||
} else {
|
||||
//LOCAL PAGE
|
||||
@@ -602,7 +602,7 @@ void OpenPage(dword _open_URL)
|
||||
strcpy(#new_url, "/tmp0/1/temp/word/document.xml");
|
||||
}
|
||||
if (!GetLocalFileData(#new_url)) {
|
||||
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
|
||||
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -712,7 +712,7 @@ void EventSubmitOmnibox()
|
||||
|
||||
void LoadInternalPage(dword _bufdata, _in_bufsize){
|
||||
if (!_bufdata) || (!_in_bufsize) {
|
||||
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
|
||||
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
|
||||
} else {
|
||||
WB1.list.first = 0; //scroll page to the top
|
||||
DrawOmnibox();
|
||||
@@ -870,7 +870,7 @@ void DrawStatusBar(dword _msg)
|
||||
{
|
||||
dword status_y = Form.cheight - STATUSBAR_H + 4;
|
||||
dword status_w = Form.cwidth - 90;
|
||||
if (Form.status_window>2) return;
|
||||
if (Form.status_window & ROLLED_UP) return;
|
||||
DrawBar(0,Form.cheight - STATUSBAR_H+1, Form.cwidth,STATUSBAR_H-1, sc.work);
|
||||
if (_msg) {
|
||||
ESI = math.min(status_w/6, strlen(_msg));
|
||||
@@ -920,7 +920,7 @@ dword GetAbsoluteActiveURL()
|
||||
void CheckContentType()
|
||||
{
|
||||
char content_type[64];
|
||||
if (http.header_field("content-type", #content_type, sizeof(content_type))) // application || image
|
||||
if (http.header_field("content-type", #content_type, sizeof(content_type)-1)) // application || image
|
||||
|
||||
if (content_type[0] == 'i') {
|
||||
EventDownloadAndOpenImage(http.cur_url);
|
||||
@@ -968,12 +968,14 @@ dword GetImg(bool _new)
|
||||
for (i = 0; i < WB1.img_url.count; i++)
|
||||
{
|
||||
cur_img_url = WB1.img_url.get(i);
|
||||
if (debug_mode)
|
||||
{debug("get img: ");debugln(cur_img_url);}
|
||||
if (cache.has(cur_img_url)==false) {
|
||||
prbar.max = WB1.img_url.count;
|
||||
prbar.value = i;
|
||||
if (GetUrl(cur_img_url)) {DrawStatusBar(cur_img_url); DrawProgress(); return;}
|
||||
if (GetUrl(cur_img_url)) {
|
||||
DrawStatusBar(cur_img_url);
|
||||
DrawProgress();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_new) return;
|
||||
|
||||
@@ -112,4 +112,4 @@ char editbox_icons[] = FROM "res/editbox_icons.raw";
|
||||
|
||||
#define DEFAULT_URL URL_SERVICE_HOMEPAGE
|
||||
|
||||
char version[]="WebView 3.82";
|
||||
char version[]="WebView 3.85";
|
||||
@@ -2,38 +2,38 @@
|
||||
<title>TEST</title>
|
||||
<style>a {display:block;font-size:130%;margin:5px 40px 5px 0;}</style>
|
||||
<body>
|
||||
<pre><a href=//wiby.org>wiby.org</a>
|
||||
<a href=//www.xlr8yourmac.com/OSX/os_x_network_cards.html>OSX network cards</a>
|
||||
<a href=//macintoshgarden.org/>Macintosh Garden</a>
|
||||
|
||||
<table><tr><td>Simplest:
|
||||
<a href=//nostalgy.net.ru/>nostalgy.net.ru</a>
|
||||
<pre><h2>HTTP</h2>
|
||||
<a href=//th99.infania.net>Total Hardware 1999</a>
|
||||
<a href=//wiby.org>wiby.org</a>
|
||||
<a href=//menuetos.net>menuetos.net</a>
|
||||
<a href=//macintosh.garden/>Macintosh Garden</a>
|
||||
<a href=//pci-ids.ucw.cz>pci.ids</a>
|
||||
<a href=//toastytech.com/guis/index.html>GUI Gallery</a>
|
||||
<a href=//www.weitek.com/textual/support/driver.html>weitek</a>
|
||||
<a href=//www.abandonwarering.com/?Page=Listing>abandonware</a>
|
||||
<a href=//neonfloppy.sytes.net/articles/win3-usb/>neonfloppy</a>
|
||||
<a href=//www.win31.de/eindex.htm>win31.de</a>
|
||||
|
||||
<h3>VPN-only</h3>
|
||||
<a href=//dgmag.in>dgmag.in</a>
|
||||
<a href=//web.archive.org/web/https://bash.im>bash.im</a>
|
||||
<a href=//web.archive.org/web/https://opennet.ru>opennet</a>
|
||||
<a href=//linux.org.ru>LOR</a>
|
||||
<a href=//web.archive.org/web/https://samlib.ru/b>samlib.ru/b</a>
|
||||
<a href=//web.archive.org/web/https://mirrors.pdp-11.ru>mirrors.pdp-11.ru</a>
|
||||
<a href=//web.archive.org/web/http://gona.mactar.hu/ATI_Mac/>ATI drivers for Mac</a>
|
||||
<td>Simple:
|
||||
<a href=//web.archive.org/web/http://lionovsky.us>lionovsky.us</a>
|
||||
<a href=//fdd5-25.pdp-11.ru>fdd5-25</a>
|
||||
<a href=//old-dos.ru>old-dos.ru</a>
|
||||
<a href=//artcon.ru>artcon.ru</a>
|
||||
<a href=//nubo.ru>nubo.ru</a>
|
||||
<a href=//mirrors.pdp-11.ru>mirrors.pdp-11.ru</a>
|
||||
<a href=//nostalgy.net.ru/>nostalgy.net.ru</a>
|
||||
|
||||
<h2>HTTPS :(</h2>
|
||||
<a href=//os-menuet.narod.ru>os-menuet.narod.ru</a>
|
||||
<a href=//mestack.narod.ru/index.html>mestack.narod.ru</a>
|
||||
<a href=//coolthemes.narod.ru/indexold.html>coolthemes.narod.ru</a>
|
||||
<a href=//vetusware.com>vetusware.com</a>
|
||||
<a href=//th99.infania.net>Total Hardware 1999</a>
|
||||
<a href=//toastytech.com/guis/index.html>GUI Gallery</a>
|
||||
<a href=//menuetos.net>menuetos.net</a>
|
||||
<tr><td>
|
||||
Moderate:
|
||||
<a href=//fdd5-25.pdp-11.ru>fdd5-25</a>
|
||||
<a href=//lionovsky.us>lionovsky.us</a>
|
||||
<a href=//acmp.ru/index.asp?main=tasks>acmp.ru</a>
|
||||
<a href=//old-dos.ru>old-dos.ru</a>
|
||||
<a href=//www.weitek.com/textual/support/driver.html>weitek</a>
|
||||
<a href=//www.abandonwarering.com/?Page=Listing>abandonware</a>
|
||||
<td>Complex:
|
||||
<a href=//web.archive.org/web/https://artcon.ru>artcon.ru</a>
|
||||
<a href=//nubo.ru>nubo.ru</a>
|
||||
<a href=//xn--80abh7bk0c.xn--p1ai>bashorg</a>
|
||||
<a href=//opennet.ru>opennet</a>
|
||||
<a href=//linux.org.ru>LOR</a>
|
||||
<a href=//www.xlr8yourmac.com/OSX/os_x_network_cards.html>OSX network cards</a>
|
||||
<a href=//samlib.ru/b>samlib.ru/b</a>
|
||||
<a href=//vetusware.com>vetusware.com</a>
|
||||
<a href=//electromyne.de>electromyne.de</a>
|
||||
<a href=//web.archive.org/web/20190403215447//www.thg.ru/>thg</a>
|
||||
@@ -11,9 +11,9 @@ TODO:
|
||||
http://board.kolibrios.org/viewtopic.php?f=23&t=4521&p=77334#p77334
|
||||
*/
|
||||
|
||||
#define ABOUT_TITLE "EOLITE 5.27"
|
||||
#define TITLE_EOLITE "Eolite File Manager 5.27"
|
||||
#define TITLE_KFM "Kolibri File Manager 2.27";
|
||||
#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"
|
||||
@@ -195,6 +195,8 @@ void main()
|
||||
|
||||
handle_param();
|
||||
|
||||
kfont.init(DEFAULT_FONT);
|
||||
|
||||
SystemDiscs.Get();
|
||||
OpenDir(ONLY_OPEN);
|
||||
llist_copy(#files_inactive, #files);
|
||||
@@ -542,14 +544,11 @@ void draw_window()
|
||||
static int rand_n;
|
||||
if (!rand_n) && (Form.width + 1 != screen.w) rand_n = random(80);
|
||||
|
||||
if (show_status_bar.checked) {
|
||||
#define STBAR_EOLITE_H 16
|
||||
#define STBAR_KFM_H 21
|
||||
if (efm) status_bar_h = STBAR_KFM_H;
|
||||
else status_bar_h = STBAR_EOLITE_H;
|
||||
} else {
|
||||
status_bar_h = 0;
|
||||
}
|
||||
#define STBAR_EOLITE_H 16
|
||||
#define STBAR_KFM_H 21
|
||||
if (efm) status_bar_h = STBAR_KFM_H;
|
||||
else status_bar_h = STBAR_EOLITE_H;
|
||||
|
||||
if (efm) title = TITLE_KFM; else title = TITLE_EOLITE;
|
||||
DefineAndDrawWindow(Form.left+rand_n,Form.top+rand_n,Form.width,Form.height,0x73,NULL,title,0);
|
||||
GetProcessInfo(#Form, SelfInfo);
|
||||
@@ -597,7 +596,7 @@ void draw_window()
|
||||
}
|
||||
//main rectangles
|
||||
DrawRectangle(1,40,Form.cwidth-3,Form.cheight - 42-status_bar_h,sc.line);
|
||||
DrawBar(0,39,1,-show_status_bar.checked*status_bar_h + Form.cheight - 40, sc.work);
|
||||
DrawBar(0,39,1,-status_bar_h + Form.cheight - 40, sc.work);
|
||||
EBX = Form.cwidth-1 * 65536 + 1;
|
||||
$int 64
|
||||
for (i=0; i<6; i++) DrawBar(0, 34+i, Form.cwidth, 1, MixColors(sc.dark, sc.work, i*10));
|
||||
@@ -652,17 +651,13 @@ void DrawStatusBar()
|
||||
{
|
||||
char status_bar_str[80];
|
||||
int go_up_folder_exists=0;
|
||||
dword topcolor;
|
||||
|
||||
if (show_status_bar.checked) topcolor=sc.light; else topcolor=sc.work;
|
||||
DrawBar(0, Form.cheight - status_bar_h-1, Form.cwidth, 1, topcolor);
|
||||
|
||||
DrawBar(0, Form.cheight - status_bar_h-1, Form.cwidth, 1, sc.light);
|
||||
if (efm) {
|
||||
DrawBar(0, Form.cheight - status_bar_h, Form.cwidth, 2, sc.work);
|
||||
DrawBar(0, Form.cheight - 2, Form.cwidth, 2, EDX);
|
||||
DrawBar(Form.cwidth-1, Form.cheight - 19, 1, 17, EDX);
|
||||
DrawFuncButtonsInKfm();
|
||||
} else if (show_status_bar.checked) {
|
||||
} else {
|
||||
if (files.count>0) && (streq(items.get(0)*304+buf+72,"..")) go_up_folder_exists=1;
|
||||
DrawBar(0, Form.cheight - status_bar_h, Form.cwidth, status_bar_h, sc.work);
|
||||
sprintf(#status_bar_str, T_STATUS_EVEMENTS, folder_count-go_up_folder_exists, files.count-folder_count);
|
||||
@@ -1116,7 +1111,6 @@ void EventClosePopinForm()
|
||||
void ShowPopinForm(byte _popin_type)
|
||||
{
|
||||
int popinx;
|
||||
popin_string[0] = -1;
|
||||
switch(_popin_type) {
|
||||
case POPIN_PATH:
|
||||
edit_box_set_text stdcall (#popin_text, path);
|
||||
@@ -1131,6 +1125,7 @@ void ShowPopinForm(byte _popin_type)
|
||||
DrawEolitePopup(T_CREATE, T_CANCEL);
|
||||
break;
|
||||
case POPIN_RENAME:
|
||||
if (itdir) && (streq(#file_name,"..")) return;
|
||||
edit_box_set_text stdcall (#popin_text, #file_name);
|
||||
DrawEolitePopup(T_RENAME, T_CANCEL);
|
||||
break;
|
||||
@@ -1188,7 +1183,7 @@ void FnProcess(byte N)
|
||||
if (files.count) ShowPopinForm(POPIN_RENAME);
|
||||
break;
|
||||
case 3:
|
||||
if (files.count) && (!itdir) RunProgram("/kolibrios/utils/quark", #file_path);
|
||||
if (files.count) && (!itdir) RunProgram("/sys/develop/heed", #file_path);
|
||||
break;
|
||||
case 4:
|
||||
if (files.count) && (!itdir) RunProgram("/sys/develop/cedit", #file_path);
|
||||
|
||||
@@ -42,7 +42,7 @@ void about_dialog()
|
||||
about_x = -strlen(ABOUT_TITLE)*18+about_form.cwidth/2;
|
||||
WriteTextB(about_x+2,107,0x82,0xD49CD2,ABOUT_TITLE);
|
||||
WriteTextB(about_x,105,0x82,0x9D129D,ABOUT_TITLE);
|
||||
WriteTextLines(73,163,0x90,sc.work_text," By Leency\nand KolibriOS Team\n 2008-2021",20);
|
||||
WriteTextLines(73,163,0x90,sc.work_text," By Leency\nand KolibriOS Team\n 2008-2025",20);
|
||||
#ifdef LANG_RUS
|
||||
DrawStandartCaptButton(60,about_form.cheight-38,11,"ˆáâ®à¨ï à §à ¡®âª¨");
|
||||
#endif
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
char *kfm_func = {
|
||||
"ˆä®",
|
||||
"<EFBFBD>¥à¥¨¬¥.",
|
||||
"<EFBFBD>à®á¬®âà",
|
||||
"HEX-¯à®á¬.",
|
||||
"<EFBFBD>¥¤ ªâ.",
|
||||
"Š®¯¨à®¢ âì",
|
||||
"<EFBFBD>¥à¥¬¥áâ¨âì",
|
||||
@@ -86,9 +86,9 @@ char *actions[] = {
|
||||
|
||||
#define TITLE_SETT "<22> áâனª¨"
|
||||
#define SHOW_DEVICE_CLASS "‚뢮¤¨âì §¢ ¨ï ª« áá ãáâனáâ¢"
|
||||
#define SHOW_STATUS_BAR "<22>®ª §ë¢ âì áâ âãá ¡ à"
|
||||
#define BIG_ICONS "ˆá¯®«ì§®¢ âì ¡®«ì訥 ¨ª®ª¨"
|
||||
#define COLORED_LINES "<22>®¤á¢¥ç¨¢ âì ç¥âë¥ «¨¨¨ ¢ ᯨ᪥"
|
||||
#define FONT_BOLD "†¨àë© èà¨äâ"
|
||||
#define FONT_SIZE_LABEL "<22> §¬¥à èà¨äâ "
|
||||
#define LIST_LINE_HEIGHT "‚ëá®â áâப¨ ¢ ᯨ᪥"
|
||||
#define SAVE_PATH_AS_DEFAULT "’¥ªã騩 ¯ãâì"
|
||||
@@ -137,7 +137,7 @@ char *actions[] = {
|
||||
char *kfm_func = {
|
||||
"Info",
|
||||
"Rename",
|
||||
"View",
|
||||
"HEX View",
|
||||
"Edit",
|
||||
"Copy",
|
||||
"Move",
|
||||
@@ -185,9 +185,9 @@ char *actions[] = {
|
||||
|
||||
#define TITLE_SETT "Settings"
|
||||
#define SHOW_DEVICE_CLASS "Show device class name"
|
||||
#define SHOW_STATUS_BAR "Show status bar"
|
||||
#define BIG_ICONS "Big icons in list"
|
||||
#define COLORED_LINES "Highlight even lines in list"
|
||||
#define FONT_BOLD "Bold font"
|
||||
#define FONT_SIZE_LABEL "Font size"
|
||||
#define LIST_LINE_HEIGHT "List line height"
|
||||
#define SAVE_PATH_AS_DEFAULT "Current path"
|
||||
|
||||
@@ -158,25 +158,27 @@ void _SystemDiscs::DrawOptions(int draw_x)
|
||||
SystemDiscs.Get();
|
||||
|
||||
DrawPopup(draw_x, optionsy, DDW, list.count*KFM2_DEVH, 1, -1, sc.line);
|
||||
EAX = kfont.bold;
|
||||
$push eax
|
||||
|
||||
for (i=0;i<list.count;i++) {
|
||||
strcpy(#dev_name, list.get(i));
|
||||
GetDiskIconAndName(#dev_name, #dev_icon, #disc_name);
|
||||
if (strstr(path, #dev_name)!=0) is_active=true; else is_active=false;
|
||||
if (strstr(path, #dev_name)!=0) kfont.bold=true; else kfont.bold=false;
|
||||
|
||||
DrawBar(draw_x, optionsy, DDW, KFM2_DEVH, 0xFFFFFF);
|
||||
DefineButton(draw_x, optionsy, DDW, KFM2_DEVH-1, 100+i+BT_HIDE,0xFFFFFF);
|
||||
PutImage(draw_x + 5, optionsy+2, 18,17, is_active*7+dev_icon*17*18*3+#devices);
|
||||
if (is_active) kfont.bold = true;
|
||||
PutImage(draw_x + 5, optionsy+2, 18,17, kfont.bold*7+dev_icon*17*18*3+#devices);
|
||||
//strncpy(#volume_label, GetVolumeLabel(#dev_name), sizeof(volume_label));
|
||||
strcpy(#label_file_name, #dev_name);
|
||||
//if (dev_name[1]!='k') && (dev_name[2]!='y') {
|
||||
// if (volume_label) sprintf(#label_file_name, "%s [%s]", #dev_name, #volume_label);
|
||||
//}
|
||||
kfont.WriteIntoWindow(draw_x + 24, optionsy+2, 0xFFFfff, 0x000000, kfont.size.pt, #label_file_name+1);
|
||||
kfont.bold = false;
|
||||
optionsy += KFM2_DEVH;
|
||||
}
|
||||
$pop eax
|
||||
kfont.bold = EAX;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -175,8 +175,10 @@ void properties_dialog()
|
||||
break;
|
||||
|
||||
case evMouse:
|
||||
edit_box_mouse stdcall (#file_name_ed);
|
||||
edit_box_mouse stdcall (#path_to_file_ed);
|
||||
if (!apply_question_active) {
|
||||
edit_box_mouse stdcall (#file_name_ed);
|
||||
edit_box_mouse stdcall (#path_to_file_ed);
|
||||
}
|
||||
break;
|
||||
|
||||
case evKey:
|
||||
|
||||
@@ -7,11 +7,11 @@ edit_box path_start_ed = {290,50,57,0xffffff,0x94AECE,0xffffff,0xffffff,0x100000
|
||||
#path_start,0, 100000000000010b,0,0};
|
||||
|
||||
more_less_box font_size = { NULL, 9, 22, FONT_SIZE_LABEL };
|
||||
more_less_box line_height = { NULL, 16, 64, LIST_LINE_HEIGHT };
|
||||
more_less_box line_height = { NULL, 18, 64, LIST_LINE_HEIGHT };
|
||||
checkbox show_dev_name = { SHOW_DEVICE_CLASS };
|
||||
checkbox show_status_bar = { SHOW_STATUS_BAR };
|
||||
checkbox big_icons = { BIG_ICONS };
|
||||
checkbox colored_lines = { COLORED_LINES };
|
||||
checkbox bold_font = { FONT_BOLD };
|
||||
|
||||
|
||||
void settings_dialog()
|
||||
@@ -51,8 +51,10 @@ void settings_dialog()
|
||||
break;
|
||||
}
|
||||
show_dev_name.click(id);
|
||||
show_status_bar.click(id);
|
||||
colored_lines.click(id);
|
||||
if (bold_font.click(id)) {
|
||||
kfont.bold^=1;
|
||||
}
|
||||
if (font_size.click(id)) {
|
||||
kfont.size.pt = font_size.value;
|
||||
kfont.changeSIZE();
|
||||
@@ -72,7 +74,7 @@ void settings_dialog()
|
||||
|
||||
case evReDraw:
|
||||
DefineAndDrawWindow(Form.cwidth-300/2+Form.left, Form.cheight-292/2+Form.top, 400,
|
||||
-efm*42+345+skin_h,0x34,sc.work,TITLE_SETT,0);
|
||||
345+skin_h,0x34,sc.work,TITLE_SETT,0);
|
||||
GetProcessInfo(#Settings, SelfInfo);
|
||||
DrawSettingsCheckBoxes();
|
||||
}
|
||||
@@ -96,10 +98,10 @@ void DrawSettingsCheckBoxes()
|
||||
y.n = 0;
|
||||
if (!efm) {
|
||||
show_dev_name.draw(XXX, y.inc(14));
|
||||
show_status_bar.draw(XXX, y.inc(25));
|
||||
}
|
||||
big_icons.draw(XXX, y.inc(25));
|
||||
colored_lines.draw(XXX, y.inc(25));
|
||||
bold_font.draw(XXX, y.inc(25));
|
||||
font_size.draw(XXX, y.inc(31));
|
||||
line_height.draw(XXX, y.inc(31));
|
||||
|
||||
@@ -121,7 +123,7 @@ void LoadIniSettings()
|
||||
|
||||
files.SetFont(6, 9, 10000000b);
|
||||
show_dev_name.checked = ini.GetInt("ShowDeviceName", true);
|
||||
show_status_bar.checked = ini.GetInt("ShowStatusBar", true);
|
||||
kfont.bold = bold_font.checked = ini.GetInt("BoldFont", false);
|
||||
big_icons.checked = ini.GetInt("BigIcons", false); BigIconsSwitch();
|
||||
colored_lines.checked = ini.GetInt("ColoredLines", true);
|
||||
kfont.size.pt = ini.GetInt("FontSize", 13);
|
||||
@@ -132,7 +134,6 @@ void LoadIniSettings()
|
||||
Form.height = ini.GetInt("WinH", efm*100+517);
|
||||
ini.GetString("DefaultPath", #path_start, 4096, "/sys");
|
||||
path_start_ed.size = path_start_ed.pos = strlen(#path_start);
|
||||
kfont.init(DEFAULT_FONT);
|
||||
ini_get_str stdcall ("/sys/SETTINGS/SYSTEM.INI", "system", "font smoothing",#temp,4096,"on");
|
||||
if(streq(#temp,"off")) kfont.smooth = false; else kfont.smooth = true;
|
||||
}
|
||||
@@ -141,7 +142,7 @@ void LoadIniSettings()
|
||||
void SaveIniSettings()
|
||||
{
|
||||
ini.SetInt("ShowDeviceName", show_dev_name.checked);
|
||||
ini.SetInt("ShowStatusBar", show_status_bar.checked);
|
||||
ini.SetInt("BoldFont", bold_font.checked);
|
||||
ini.SetInt("BigIcons", big_icons.checked);
|
||||
ini.SetInt("ColoredLines", colored_lines.checked);
|
||||
ini.SetInt("FontSize", kfont.size.pt);
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
if tup.getconfig("NO_CMM") ~= "" then return end
|
||||
if tup.getconfig("LANG") == "ru_RU"
|
||||
then C_LANG = "LANG_RUS"
|
||||
else C_LANG = "LANG_ENG" -- this includes default case without config
|
||||
end
|
||||
tup.rule("font_viewer.c", "c-- /D=$(C_LANG) /OPATH=%o %f" .. tup.getconfig("KPACK_CMD"), "font_viewer.com")
|
||||
@@ -1,4 +0,0 @@
|
||||
@del kf_view
|
||||
@C-- font_viewer.c
|
||||
@rename font_viewer.com kf_view
|
||||
if not exist kf_view ( @pause )
|
||||
@@ -26,15 +26,9 @@ struct collection_int
|
||||
|
||||
:void collection_int::add(dword _in) {
|
||||
unsigned i;
|
||||
if (!buf) {
|
||||
//if (buf_size) notify("'buf_size on empty buf' -A");
|
||||
buf_size = 4096 * 5;
|
||||
buf = malloc(4096 * 5);
|
||||
//if (!buf) notify("'malloc error' -E");
|
||||
} else if (count + 1 * DWSIZE4 >= buf_size) {
|
||||
if (!buf) || (count + 1 * DWSIZE4 >= buf_size) {
|
||||
buf_size += 4096 * 5;
|
||||
buf = realloc(buf, buf_size);
|
||||
//if (!buf) notify("'realloc error' -E");
|
||||
}
|
||||
i = count * DWSIZE4 + buf;
|
||||
ESDWORD[i] = _in;
|
||||
@@ -77,8 +71,8 @@ struct collection_int
|
||||
|
||||
:void collection_int::drop() {
|
||||
count = 0;
|
||||
if (buf) buf = free(buf);
|
||||
buf_size = 0;
|
||||
//if (buf) buf = free(buf);
|
||||
//buf_size = 0;
|
||||
}
|
||||
|
||||
/*========================================================
|
||||
@@ -97,31 +91,30 @@ struct collection
|
||||
dword get(); //get_name_by_pos
|
||||
dword get_pos_by_name();
|
||||
void drop();
|
||||
void increase_data_size();
|
||||
dword get_last();
|
||||
bool pop();
|
||||
};
|
||||
|
||||
:void collection::increase_data_size() {
|
||||
if (realloc_size<4096) realloc_size = 4096;
|
||||
if (!data_size) {
|
||||
data_size = realloc_size;
|
||||
data_start = malloc(data_size);
|
||||
} else {
|
||||
data_size = data_size + realloc_size;
|
||||
data_start = realloc(data_start, data_size);
|
||||
}
|
||||
}
|
||||
|
||||
:dword collection::add(dword in) {
|
||||
dword len = strlen(in);
|
||||
while (offset.get(count) + len + 4 > data_size) {
|
||||
increase_data_size();
|
||||
unsigned cur_buf_size;
|
||||
|
||||
if (!count) {
|
||||
cur_buf_size = 0;
|
||||
} else {
|
||||
cur_buf_size = offset.get(count);
|
||||
}
|
||||
strncpy(data_start+offset.get(count), in, len);
|
||||
|
||||
if (realloc_size<4096) realloc_size = 4096;
|
||||
while (cur_buf_size + len + 4 > data_size) {
|
||||
data_size += realloc_size;
|
||||
data_start = realloc(data_start, data_size);
|
||||
}
|
||||
|
||||
strncpy(data_start+cur_buf_size, in, len);
|
||||
count++;
|
||||
offset.set(count, offset.get(count-1) + len + 1);
|
||||
return data_start+offset.get(count-1);
|
||||
offset.set(count, cur_buf_size + len + 1);
|
||||
return data_start + cur_buf_size;
|
||||
}
|
||||
|
||||
:dword collection::get(dword pos) {
|
||||
|
||||
@@ -17,17 +17,25 @@ struct CANVAS {
|
||||
void Show();
|
||||
void Fill();
|
||||
void DrawBar();
|
||||
void DrawImage();
|
||||
void WriteText();
|
||||
void PutPixel();
|
||||
void AlignCenter();
|
||||
void AlignRight();
|
||||
void IncreaseBufSize();
|
||||
bool BufIsInvalid();
|
||||
};
|
||||
|
||||
char draw_buf_not_enaught_ram[] =
|
||||
"'CANVAS requested %i MB more memory than the system has.
|
||||
Application could be unstable.' -E";
|
||||
|
||||
bool CANVAS::BufIsInvalid()
|
||||
{
|
||||
if (!buf_data) || (!bufw) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CANVAS::Init(dword i_bufx, i_bufy, i_bufw, i_bufh)
|
||||
{
|
||||
bufx = i_bufx;
|
||||
@@ -45,6 +53,7 @@ bool CANVAS::Init(dword i_bufx, i_bufy, i_bufw, i_bufh)
|
||||
void CANVAS::Fill(dword start_pointer, i_fill_color)
|
||||
{
|
||||
dword max_i = bufw * bufh * 4 - start_pointer/4;
|
||||
if (BufIsInvalid()) return;
|
||||
fill_color = i_fill_color | 0xFF000000; //set background color non-transparent
|
||||
@MEMSETD(buf_data+start_pointer+8, max_i, fill_color);
|
||||
}
|
||||
@@ -52,6 +61,7 @@ void CANVAS::Fill(dword start_pointer, i_fill_color)
|
||||
void CANVAS::DrawBar(dword x, y, w, h, color)
|
||||
{
|
||||
dword i, j;
|
||||
if (BufIsInvalid()) return;
|
||||
if (y + h >= bufh) IncreaseBufSize();
|
||||
for (j=0; j<h; j++) {
|
||||
for (i = y+j*bufw+x<<2+8+buf_data; i<y+j*bufw+x+w<<2+8+buf_data; i+=4) {
|
||||
@@ -60,12 +70,30 @@ void CANVAS::DrawBar(dword x, y, w, h, color)
|
||||
}
|
||||
}
|
||||
|
||||
void CANVAS::DrawImage(dword x, y, w, h, img)
|
||||
{
|
||||
dword i, j, p=0;
|
||||
dword ystart;
|
||||
if (BufIsInvalid()) return;
|
||||
if (y < 0) y = 0;
|
||||
if (x < 0) x = 0;
|
||||
while (y + h >= bufh) IncreaseBufSize(); //WHY NOT WORKING?
|
||||
for (j=0; j<h; j++) {
|
||||
ystart = y + j * bufw + x;
|
||||
for (i = ystart<<2+8+buf_data; i<ystart+w<<2+8+buf_data; i+=4) {
|
||||
ESDWORD[i] = ESDWORD[img+p];
|
||||
p+=4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CANVAS::WriteText(dword x, y, byte fontType, dword color, str_offset, strlen)
|
||||
{
|
||||
#define BUGFIX_32000 32000
|
||||
dword ydiv=0;
|
||||
dword reserve_data_1, reserve_data_2;
|
||||
dword new_buf_offset;
|
||||
if (BufIsInvalid()) return;
|
||||
if (y + 30 >= bufh) IncreaseBufSize();
|
||||
if (y < BUGFIX_32000) {
|
||||
ESI = strlen;
|
||||
@@ -92,6 +120,7 @@ void CANVAS::WriteText(dword x, y, byte fontType, dword color, str_offset, strle
|
||||
void CANVAS::PutPixel(dword x, y, color)
|
||||
{
|
||||
dword pos = y*bufw+x*4+8+buf_data;
|
||||
if (BufIsInvalid()) return;
|
||||
ESDWORD[pos] = color;
|
||||
}
|
||||
|
||||
@@ -99,6 +128,7 @@ void CANVAS::AlignRight(dword x,y,w,h, content_width)
|
||||
{
|
||||
dword i, j, l;
|
||||
dword content_left = w - content_width / 2;
|
||||
if (BufIsInvalid()) return;
|
||||
for (j=0; j<h; j++)
|
||||
{
|
||||
for (i=j*w+w-x*4, l=j*w+content_width+x*4; (i>=j*w+content_left*4) && (l>=j*w*4); i-=4, l-=4)
|
||||
@@ -112,6 +142,7 @@ void CANVAS::AlignCenter(dword x,y,w,h, content_width)
|
||||
{
|
||||
dword i, j, l;
|
||||
dword content_left = w - content_width / 2;
|
||||
if (BufIsInvalid()) return;
|
||||
for (j=0; j<h; j++)
|
||||
{
|
||||
for (i=j*w+content_width+content_left*4, l=j*w+content_width+x*4; (i>=j*w+content_left*4) && (l>=j*w*4); i-=4, l-=4)
|
||||
@@ -123,6 +154,7 @@ void CANVAS::AlignCenter(dword x,y,w,h, content_width)
|
||||
|
||||
void CANVAS::Show(dword _y_offset, _h)
|
||||
{
|
||||
if (BufIsInvalid()) return;
|
||||
PutPaletteImage(_y_offset * bufw * 4 + buf_data+8, bufw, _h, bufx, bufy, 32, 0);
|
||||
}
|
||||
|
||||
@@ -133,6 +165,8 @@ void CANVAS::IncreaseBufSize()
|
||||
dword free_ram_size;
|
||||
char error_str[256];
|
||||
|
||||
if (!bufw) return;
|
||||
|
||||
if (!buf_data) {
|
||||
alloc_size = bufh * bufw * 4 + 8;
|
||||
buf_data = malloc(alloc_size);
|
||||
|
||||
@@ -66,10 +66,11 @@ int kfont_char_width[255];
|
||||
:bool KFONT::init(dword font_path)
|
||||
{
|
||||
dword fsize_notused;
|
||||
if(font)free(font);
|
||||
if(font) font = free(font);
|
||||
read_file(font_path, #font_begin, #fsize_notused);
|
||||
if(!EAX) {
|
||||
RunProgram("/sys/@notify", "'Error: KFONT is not loaded.' -E");
|
||||
RunProgram("/sys/@notify", "'Error: KFONT is not loaded' -E");
|
||||
kfont.height = 14;
|
||||
return false;
|
||||
}
|
||||
changeSIZE();
|
||||
@@ -99,6 +100,10 @@ int kfont_char_width[255];
|
||||
|
||||
:dword KFONT::getsize(byte font_size, dword text1)
|
||||
{
|
||||
if (!font) {
|
||||
size.width = strlen(text1) * 8;
|
||||
return size.width;
|
||||
}
|
||||
size.height = size.width = 0;
|
||||
size.offset_x = size.offset_y = -1;
|
||||
if (size.pt != font_size) {
|
||||
@@ -275,6 +280,11 @@ inline fastcall dword b32(EAX) { return DSDWORD[EAX]; }
|
||||
{
|
||||
if(!text1)return 0;
|
||||
getsize(font_size, text1);
|
||||
if (!font) {
|
||||
EDI = _background;
|
||||
WriteText(x, y, 0xD0, _color, text1);
|
||||
return size.width;
|
||||
}
|
||||
raw_size = NULL;
|
||||
WriteIntoBuffer(0, -size.offset_y, size.width-size.offset_x,
|
||||
size.height-size.offset_y, _background, _color, font_size, text1);
|
||||
|
||||
@@ -273,7 +273,7 @@ void draw_list()
|
||||
}
|
||||
|
||||
init = false;
|
||||
if (selected) WriteText(5, selected-1*ITEM_H + menu1.y + menu1.text_y, TEXT_FONT_TYPE, 0xEE0000, "\x10"); // ?
|
||||
if (selected) WriteText(5, selected-1*ITEM_H + menu1.y + menu1.text_y +3, 0x80, 0xEE0000, "\x10"); // ?
|
||||
}
|
||||
|
||||
void click()
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
#define MEMSIZE 1024*30
|
||||
#define ENTRY_POINT #main
|
||||
|
||||
#include "../lib/kfont.h"
|
||||
#include "../lib/gui.h"
|
||||
|
||||
#define BARH 28
|
||||
#define WINW 528
|
||||
@@ -12,11 +8,8 @@ char active_tab = 0;
|
||||
char colored = true;
|
||||
dword checkbox_flag;
|
||||
|
||||
void main()
|
||||
void main_kfont()
|
||||
{
|
||||
proc_info Form;
|
||||
|
||||
mem_init();
|
||||
checkbox_flag = memopen("CHECKBOX", NULL, SHM_READ);
|
||||
|
||||
if (!param) strcpy(#param, DEFAULT_FONT);
|
||||
@@ -48,7 +41,7 @@ void main()
|
||||
|
||||
case evReDraw:
|
||||
sc.get();
|
||||
DefineAndDrawWindow(215,100,WINW+9,WINH+GetSkinHeight()+4,0x74,0xFFFFFF,#title,0);
|
||||
DefineAndDrawWindow(215,100,WINW+9,WINH+skin_h+4,0x74,0xFFFFFF,#title,0);
|
||||
GetProcessInfo(#Form, SelfInfo);
|
||||
if (Form.status_window&ROLLED_UP) break;
|
||||
_DRAW_WINDOW_CONTENT:
|
||||
@@ -10,11 +10,13 @@ SOFTWARE CENTER v2.87
|
||||
#include "..\lib\obj\libini.h"
|
||||
#include "..\lib\kfont.h"
|
||||
#include "..\lib\list_box.h"
|
||||
#include "..\lib\collection.h"
|
||||
|
||||
proc_info Form;
|
||||
|
||||
#include "font_viewer.h"
|
||||
|
||||
llist list;
|
||||
collection app_path_collection=0;
|
||||
dword app_path_collection;
|
||||
bool kolibrios_mounted;
|
||||
|
||||
int window_width,
|
||||
@@ -30,17 +32,11 @@ char window_title[128],
|
||||
|
||||
bool small_screen = false;
|
||||
|
||||
struct SW_COLORS
|
||||
{
|
||||
dword list_bg;
|
||||
dword text;
|
||||
dword graph;
|
||||
dword dark;
|
||||
dword light;
|
||||
} swc;
|
||||
|
||||
block selection[128];
|
||||
|
||||
#define MAX_ITEMS 75
|
||||
#define MAX_FPATH 1024
|
||||
|
||||
void load_ini_config(dword _ini_path)
|
||||
{
|
||||
_ini ini;
|
||||
@@ -57,17 +53,21 @@ void main()
|
||||
{
|
||||
dword id;
|
||||
kfont.init(DEFAULT_FONT);
|
||||
load_dll(libini, #lib_init,1);
|
||||
|
||||
kolibrios_mounted = dir_exists("/kolibrios");
|
||||
|
||||
if (param) {
|
||||
if (streq(#param + strlen(#param) - 3, ".kf")) {
|
||||
main_kfont();
|
||||
} else if (param) {
|
||||
strcpy(#settings_ini_path, #param);
|
||||
} else {
|
||||
strcpy(#settings_ini_path, "/sys/settings/");
|
||||
strcat(#settings_ini_path, I_Path + strrchr(I_Path, '/'));
|
||||
strcat(#settings_ini_path, ".ini");
|
||||
}
|
||||
|
||||
load_dll(libini, #lib_init,1);
|
||||
kolibrios_mounted = dir_exists("/kolibrios");
|
||||
|
||||
app_path_collection = malloc(MAX_FPATH*MAX_ITEMS);
|
||||
|
||||
load_ini_config(#settings_ini_path);
|
||||
list.cur_y = -1;
|
||||
@@ -99,8 +99,8 @@ void main()
|
||||
break;
|
||||
|
||||
case evReDraw:
|
||||
SetAppColors();
|
||||
DefineAndDrawWindow(screen.w-window_width/2,screen.h-window_height/2,window_width,window_height,0x74,0,"",0);
|
||||
sc.get();
|
||||
GetProcessInfo(#Form, SelfInfo);
|
||||
if (Form.status_window&ROLLED_UP) {
|
||||
DrawTitle(#window_title);
|
||||
@@ -110,41 +110,18 @@ void main()
|
||||
DrawTitle(#window_title);
|
||||
list.y = 0;
|
||||
} else {
|
||||
DrawTitle(NULL);
|
||||
DrawTitle(NULL);
|
||||
DrawTopBar();
|
||||
}
|
||||
DrawList();
|
||||
DrawBar(0, row +1 * list.item_h + list_pos, Form.cwidth, -row - 1 * list.item_h - list_pos + Form.cheight, swc.list_bg);
|
||||
DrawBar(0, row +1 * list.item_h + list_pos, Form.cwidth, -row - 1 * list.item_h - list_pos + Form.cheight, sc.light);
|
||||
DrawSelection();
|
||||
}
|
||||
}
|
||||
|
||||
void SetAppColors()
|
||||
{
|
||||
dword bg_col, old_list_bg_color;
|
||||
sc.get();
|
||||
old_list_bg_color = swc.list_bg;
|
||||
bg_col = sc.work;
|
||||
if (skin_is_dark())
|
||||
{
|
||||
//dark colors
|
||||
swc.list_bg = sc.work;
|
||||
swc.text = sc.work_text;
|
||||
swc.dark = sc.dark;
|
||||
swc.light = sc.light;
|
||||
} else {
|
||||
//light colors
|
||||
swc.list_bg = 0xF3F3F3;
|
||||
swc.text = 0x000000;
|
||||
swc.dark = 0xDCDCDC;
|
||||
swc.light = 0xFCFCFC;
|
||||
}
|
||||
}
|
||||
|
||||
void DrawList() {
|
||||
list.count = 0;
|
||||
row = -1;
|
||||
app_path_collection.drop();
|
||||
list_pos = list.y;
|
||||
list.column_max = window_width - 10 / list.item_w;
|
||||
ini_enum_sections stdcall (#settings_ini_path, #process_sections);
|
||||
@@ -168,7 +145,7 @@ byte draw_icons_from_section(dword key_value, key_name, sec_name, f_name)
|
||||
col=0;
|
||||
}
|
||||
|
||||
if (col==0) DrawBar(0, row * list.item_h + list_pos, Form.cwidth, list.item_h, swc.list_bg);
|
||||
if (col==0) DrawBar(0, row * list.item_h + list_pos, Form.cwidth, list.item_h, sc.light);
|
||||
DefineButton(col*list.item_w+6, row*list.item_h + list_pos,list.item_w,list.item_h-3,list.count + 100 + BT_HIDE,0);
|
||||
|
||||
icon_char_pos = strchr(key_value, ',');
|
||||
@@ -177,20 +154,21 @@ byte draw_icons_from_section(dword key_value, key_name, sec_name, f_name)
|
||||
selection[list.count].x = icon_x-2;
|
||||
selection[list.count].y = icon_y-2;
|
||||
if (icon_char_pos) ESBYTE[icon_char_pos] = '\0'; //delete icon from string
|
||||
app_path_collection.add(key_value);
|
||||
|
||||
strncpy(list.count * MAX_FPATH + app_path_collection, key_value, MAX_FPATH);
|
||||
|
||||
text_x = col*list.item_w+5;
|
||||
text_y = list.item_h - 40 / 2;
|
||||
if (!strchr(key_name, ' ')) {//|| (kfont.getsize(key_name)+30<list.item_w) <== too slow
|
||||
kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos, list.item_w,0, swc.list_bg, swc.text, 12, key_name);
|
||||
kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos, list.item_w,0, sc.light, sc.work_text, 12, key_name);
|
||||
} else {
|
||||
space_pos = strrchr(key_name, ' ');
|
||||
ESBYTE[key_name+space_pos-1] = '\0';
|
||||
kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos - 2, list.item_w,0, swc.list_bg, swc.text, 12, key_name);
|
||||
kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos + 13, list.item_w,0, swc.list_bg, swc.text, 12, key_name+space_pos);
|
||||
kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos - 2, list.item_w,0, sc.light, sc.work_text, 12, key_name);
|
||||
kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos + 13, list.item_w,0, sc.light, sc.work_text, 12, key_name+space_pos);
|
||||
}
|
||||
if (icon_char_pos) icon_id = atoi(icon_char_pos+1);
|
||||
if (Form.cwidth) draw_icon_32(icon_x, icon_y, swc.list_bg, icon_id);
|
||||
if (Form.cwidth) draw_icon_32(icon_x, icon_y, sc.light, icon_id);
|
||||
list.count++;
|
||||
col++;
|
||||
return true;
|
||||
@@ -212,10 +190,9 @@ byte process_sections(dword sec_name, f_name)
|
||||
old_row = row;
|
||||
|
||||
if (!small_screen) {
|
||||
DrawBar(0, row * list.item_h + list_pos, Form.cwidth , 29, swc.list_bg);
|
||||
text_len = kfont.WriteIntoWindow(10, row * list.item_h + 10 + list_pos, swc.list_bg, swc.text, 15, sec_name);
|
||||
DrawBar(text_len+20, row * list.item_h + list_pos + 20, Form.cwidth-text_len-20, 1, swc.dark);
|
||||
DrawBar(text_len+20, row * list.item_h + list_pos + 21, Form.cwidth-text_len-20, 1, swc.light);
|
||||
DrawBar(0, row * list.item_h + list_pos, Form.cwidth , 29, sc.light);
|
||||
text_len = kfont.WriteIntoWindow(10, row * list.item_h + 10 + list_pos, sc.light, sc.work_text, 15, sec_name);
|
||||
DrawBar(text_len+20, row * list.item_h + list_pos + 20, Form.cwidth-text_len-20, 2, sc.work);
|
||||
list_pos += 29;
|
||||
}
|
||||
ini_enum_keys stdcall (f_name, sec_name, #draw_icons_from_section);
|
||||
@@ -233,7 +210,7 @@ void DrawTopBar()
|
||||
void EventIconClick(dword appid)
|
||||
{
|
||||
char run_app_path[4096];
|
||||
dword app_path = app_path_collection.get(appid);
|
||||
dword app_path = MAX_FPATH * appid + app_path_collection;
|
||||
dword param_pos = strchr(app_path, '|');
|
||||
if (param_pos) {
|
||||
ESBYTE[param_pos] = NULL;
|
||||
@@ -273,7 +250,7 @@ void DrawSelection()
|
||||
int i;
|
||||
dword col;
|
||||
for (i=0; i<list.count; i++) {
|
||||
if (i==list.cur_y) col=0x0080FF; else col=swc.list_bg;
|
||||
if (i==list.cur_y) col=0x0080FF; else col=sc.light;
|
||||
DrawWideRectangle(selection[i].x, selection[i].y, 36, 36, 2, col);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,11 +23,8 @@ MAX_TRIANGLES equ 12
|
||||
SCREEN_X equ 320
|
||||
SCREEN_Y equ 200
|
||||
|
||||
include 'lang.inc'
|
||||
include '..\..\..\macros.inc'
|
||||
;purge mov
|
||||
include 'ascl.inc'
|
||||
include 'ascgl.inc'
|
||||
|
||||
START:
|
||||
init_sin_cos:
|
||||
@@ -65,7 +62,47 @@ still:
|
||||
; cmp eax,3 ; button in buffer ?
|
||||
jz button
|
||||
|
||||
fps 220,8,cl_White,cl_Black
|
||||
|
||||
; FPS - Set Frame Per Second Display
|
||||
fps_show_frequency=40
|
||||
macro fps x,y,color,delcolor
|
||||
{
|
||||
local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt
|
||||
local no_out_fps
|
||||
jmp spdat
|
||||
savetime dd 0
|
||||
fps_cntr dd 0
|
||||
fps dd 0
|
||||
ttt dd 0
|
||||
spdat:
|
||||
get_time:
|
||||
mov eax,3
|
||||
mcall
|
||||
cmp eax,[savetime]
|
||||
jne new_time
|
||||
inc [fps_cntr]
|
||||
cmp dword [ttt],0
|
||||
je out_fps
|
||||
dec dword [ttt]
|
||||
jmp no_out_fps
|
||||
new_time:
|
||||
mov [savetime],eax
|
||||
mov ebx,[fps_cntr]
|
||||
mov [fps],ebx
|
||||
mov [fps_cntr],0
|
||||
out_fps:
|
||||
mov dword [ttt],fps_show_frequency
|
||||
mov eax,47
|
||||
mov ebx,5*65536
|
||||
mov edx,(x+1)*65536+y
|
||||
mov esi,color+0xD0000000
|
||||
mov edi,delcolor
|
||||
mov ecx,[fps]
|
||||
mcall
|
||||
no_out_fps:
|
||||
}
|
||||
|
||||
fps 220,5,0x00FFFfff,0x00000000
|
||||
|
||||
main_loop:
|
||||
|
||||
@@ -112,15 +149,15 @@ exit:
|
||||
draw_window:
|
||||
mcall 12, 1 ;Start window redraw
|
||||
|
||||
mcall 48, 4
|
||||
mcall 48, 4
|
||||
|
||||
lea ecx, [100*65536+SCREEN_Y+4+eax]; [y start] *65536 + [y size] + [skin_height]
|
||||
xor eax, eax ;Draw window
|
||||
lea ecx,[100*65536+SCREEN_Y+4+eax]; [y start] *65536 + [y size] + [skin_height]
|
||||
xor eax,eax ;Draw window
|
||||
mov ebx,100*65536+(SCREEN_X+9) ;x start*65536+x size
|
||||
mov edx,0x54000000 ;0x03 use skinned window
|
||||
mov edi,title
|
||||
mcall
|
||||
|
||||
|
||||
mcall 12, 2 ;End window redraw
|
||||
|
||||
ret
|
||||
@@ -196,7 +233,7 @@ clear_screen_buffer:
|
||||
rep stosd
|
||||
|
||||
ret
|
||||
|
||||
|
||||
;include triangle.asm
|
||||
; Mikolaj Felix 14/5/2001
|
||||
; mfelix@polbox.com
|
||||
|
||||
@@ -3,5 +3,4 @@ HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
||||
tup.rule({"3DCUBE2.ASM", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "3DCUBE2")
|
||||
tup.rule({"3DCUBE2.ASM"}, "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "3DCUBE2")
|
||||
|
||||
@@ -1,624 +0,0 @@
|
||||
lang equ ru_RU
|
||||
|
||||
;
|
||||
; Assembler
|
||||
; SMALL
|
||||
; CODE
|
||||
; Graphics
|
||||
; Libary
|
||||
;
|
||||
; Ver 0.10 By Pavlushin Evgeni (RUSSIA)
|
||||
; www.waptap@mail.ru
|
||||
|
||||
;InfoList
|
||||
;0.01 LoadImage
|
||||
;0.02 SetBmp
|
||||
;0.03 Bmptoimg, Setimg ~01.03.2004
|
||||
;0.04 Bug deleted, copyimg ~03.05.2004
|
||||
;0.05 fullimg, collimg ~05.05.2004
|
||||
;0.06 getimg ~09.05.2004
|
||||
;0.07 convbmp ~13.05.2004
|
||||
;0.08 fps ~14.05.2004
|
||||
;0.09 drawfbox ~03.06.2004
|
||||
;0.10 all macros optimized by halyavin, add at ~07.06.2004
|
||||
|
||||
;DrawBox
|
||||
macro drawfbox x,y,xs,ys,color
|
||||
{
|
||||
mov ecx,y
|
||||
mov ebx,x
|
||||
shl ebx,16
|
||||
add ebx,xs
|
||||
shl ecx,16
|
||||
add ecx,ys
|
||||
mov edx,color
|
||||
mov eax,13
|
||||
mcall
|
||||
}
|
||||
|
||||
; FPS - Set Frame Per Second Display
|
||||
fps_show_frequency=40
|
||||
macro fps x,y,color,delcolor
|
||||
{
|
||||
local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt
|
||||
local no_out_fps
|
||||
jmp spdat
|
||||
savetime dd 0
|
||||
fps_cntr dd 0
|
||||
fps dd 0
|
||||
ttt dd 0
|
||||
spdat:
|
||||
get_time:
|
||||
mov eax,3
|
||||
mcall
|
||||
cmp eax,[savetime]
|
||||
jne new_time
|
||||
inc [fps_cntr]
|
||||
cmp dword [ttt],0
|
||||
je out_fps
|
||||
dec dword [ttt]
|
||||
jmp no_out_fps
|
||||
new_time:
|
||||
mov [savetime],eax
|
||||
mov ebx,[fps_cntr]
|
||||
mov [fps],ebx
|
||||
mov [fps_cntr],0
|
||||
out_fps:
|
||||
if ~(delcolor eq )
|
||||
mov ebx,x*65536+30
|
||||
mov ecx,y*65536+7
|
||||
mov edx,delcolor
|
||||
mov eax,13
|
||||
mcall
|
||||
end if
|
||||
mov dword [ttt],fps_show_frequency
|
||||
mov eax,47
|
||||
mov ebx,5*65536
|
||||
; mov bl,0
|
||||
mov edx,x*65536+y
|
||||
mov esi,color
|
||||
mov ecx,[fps]
|
||||
mcall
|
||||
no_out_fps:
|
||||
}
|
||||
|
||||
|
||||
|
||||
; COLLIMG - Collusion image's
|
||||
_ldbounce_count=0;
|
||||
macro collimg img1_off,x1,y1,img2_off,x2,y2,otv
|
||||
{
|
||||
local bounce,exit,_1dbounce,anot,bc,nbc
|
||||
mov esi,[img1_off] ;xs1
|
||||
mov edi,[img2_off] ;ys2
|
||||
mov eax,x1 ;
|
||||
mov ebx,x2 ;
|
||||
call _1dbounce
|
||||
mov edx,ecx
|
||||
mov esi,[img1_off+4] ;ys1
|
||||
mov edi,[img2_off+4] ;ys2
|
||||
mov eax,y1 ;
|
||||
mov ebx,y2 ;
|
||||
call _1dbounce
|
||||
add edx,ecx
|
||||
cmp edx,2
|
||||
je bounce
|
||||
mov otv,0
|
||||
jmp exit
|
||||
_ldbounce_count=_ldbounce_count+1
|
||||
if (_ldbounce_count = 1)
|
||||
_1dbounce:
|
||||
cmp ebx,eax
|
||||
jnae anot
|
||||
add eax,esi
|
||||
cmp eax,ebx
|
||||
jna nbc
|
||||
jmp bc
|
||||
anot:
|
||||
add ebx,edi
|
||||
cmp ebx,eax
|
||||
jna nbc
|
||||
bc:
|
||||
mov ecx,1
|
||||
ret
|
||||
nbc:
|
||||
mov ecx,0
|
||||
ret
|
||||
end if
|
||||
bounce:
|
||||
mov otv,1
|
||||
exit:
|
||||
}
|
||||
|
||||
; SETBMP - Set bmp to window
|
||||
; (SYNTAX) SETBMP dd xstart ,dd ystart ,BMP_offset,dd soi
|
||||
; (SAMPLE) SETBMP dword [xt],dword [yt],I_END,dword [tsoi]
|
||||
; SETBMP 15,10,I_END,dword [tsoi]
|
||||
; ( NOTE ) SOI - Start of image
|
||||
|
||||
macro setbmp arg1,arg2,arg3,arg4
|
||||
{
|
||||
local nodi
|
||||
cmp word [arg3],word 'BM'
|
||||
jne nodi
|
||||
mov eax,7
|
||||
mov ebx,arg4 ;[soi]
|
||||
mov ecx,dword [arg3+18]
|
||||
shl ecx,16
|
||||
add ecx,dword [arg3+22]
|
||||
if (arg1 eqtype 0) & (arg2 eqtype 0)
|
||||
mov edx,arg1*65536+arg2
|
||||
else
|
||||
mov edx,arg1
|
||||
shl edx,16
|
||||
add edx,arg2
|
||||
end if
|
||||
mcall
|
||||
nodi:
|
||||
}
|
||||
|
||||
macro setimg arg1,arg2,arg3
|
||||
{
|
||||
local nodi
|
||||
mov eax,7
|
||||
mov ebx,arg3
|
||||
add ebx,8
|
||||
mov ecx,dword [arg3]
|
||||
shl ecx,16
|
||||
add ecx,dword [arg3+4]
|
||||
if (arg1 eqtype 0) & (arg2 eqtype 0)
|
||||
mov edx,arg1*65536+arg2
|
||||
else
|
||||
mov edx,arg1
|
||||
shl edx,16
|
||||
add edx,arg2
|
||||
end if
|
||||
mcall
|
||||
}
|
||||
|
||||
;Not optimiz
|
||||
macro getimg imgsrc,x,y,xs,ys,imgdest
|
||||
{
|
||||
local cyc
|
||||
mov eax,xs
|
||||
mov dword [imgdest],eax
|
||||
mov eax,ys
|
||||
mov dword [imgdest+4],eax
|
||||
|
||||
mov eax,dword [imgsrc] ;getx size
|
||||
mov edi,eax
|
||||
mov ebx,y
|
||||
mul ebx
|
||||
add eax,x
|
||||
mov ebx,3
|
||||
mul ebx ;eax=offset on imsrc
|
||||
|
||||
mov ecx,0
|
||||
mov ebx,0
|
||||
mov ebp,eax
|
||||
mov esi,0
|
||||
|
||||
add esi,8
|
||||
add ebp,8
|
||||
|
||||
cyc:
|
||||
mov al,byte [imgsrc+ebp]
|
||||
mov [imgdest+esi],al
|
||||
mov al,byte [imgsrc+ebp+1]
|
||||
mov [imgdest+esi+1],al
|
||||
mov al,byte [imgsrc+ebp+2]
|
||||
mov [imgdest+esi+2],al
|
||||
add esi,3
|
||||
add ebp,3
|
||||
inc ecx
|
||||
cmp ecx,xs
|
||||
jne cyc
|
||||
add ebp,edi
|
||||
add ebp,edi
|
||||
add ebp,edi
|
||||
sub ebp,xs
|
||||
sub ebp,xs
|
||||
sub ebp,xs
|
||||
mov ecx,0
|
||||
inc ebx
|
||||
cmp ebx,ys
|
||||
jne cyc
|
||||
|
||||
}
|
||||
|
||||
;
|
||||
macro bmptoimg bmp_off,soi,img_off
|
||||
{
|
||||
local nodix,conv
|
||||
cmp word [bmp_off],word 'BM'
|
||||
jne nodix
|
||||
mov eax,dword [bmp_off+18]
|
||||
mov ebx,dword [bmp_off+22]
|
||||
mov dword [img_off],eax
|
||||
mov dword [img_off+4],ebx
|
||||
mul ebx
|
||||
lea ecx,[eax+2*eax]
|
||||
lea edi,[img_off+8]
|
||||
mov esi,dword [soi]
|
||||
cld
|
||||
rep movsb
|
||||
nodix:
|
||||
}
|
||||
|
||||
macro copyimg img2_off,img1_off
|
||||
{
|
||||
local cop
|
||||
mov eax,dword [img1_off]
|
||||
mov ebx,dword [img1_off+4]
|
||||
mul ebx
|
||||
lea ecx,[eax+2*eax]
|
||||
lea esi,[img1_off+8]
|
||||
lea edi,[img2_off+8]
|
||||
cld
|
||||
rep movsb
|
||||
}
|
||||
|
||||
macro fullimg img_off,xs,ys,color
|
||||
{
|
||||
local cop
|
||||
mov eax,xs
|
||||
mov ebx,ys
|
||||
mov dword [img_off],eax
|
||||
mov dword [img_off+4],ebx
|
||||
mul ebx
|
||||
lea ebp,[eax+2*eax]
|
||||
mov esi,color
|
||||
if color eqtype 0
|
||||
mov ecx,color/65536
|
||||
else
|
||||
mov ecx,esi
|
||||
shr ecx,16
|
||||
end if
|
||||
xor edi,edi
|
||||
cop:
|
||||
mov word [img_off+8+edi],si
|
||||
add edi,2
|
||||
mov byte [img_off+8+edi],cl
|
||||
inc edi
|
||||
cmp edi,ebp
|
||||
jne cop
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
macro convbmp bmp_load_area,bmp_soi
|
||||
{
|
||||
local status,bps,dwps,soi,sop,eop,eos,process,fileinfo,string,end_bmp
|
||||
local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2
|
||||
local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize
|
||||
local noaddword
|
||||
;local qwe,bmpfn
|
||||
|
||||
; convert:
|
||||
movzx eax,word [bmp_load_area+28]
|
||||
mul dword [bmp_load_area+18]
|
||||
mov ebx,32
|
||||
div ebx
|
||||
test edx,edx
|
||||
je noaddword
|
||||
inc eax
|
||||
noaddword:
|
||||
mov dword [dwps],eax ;dwps-doublewords per string
|
||||
shl eax,2
|
||||
mov dword [bps],eax ;bps-bytes per string
|
||||
|
||||
cmp dword [bmp_load_area+34],0
|
||||
jne yespicsize ;if picture size is defined
|
||||
mul dword [bmp_load_area+22]
|
||||
mov dword [bmp_load_area+34],eax
|
||||
|
||||
yespicsize:
|
||||
mov eax,bmp_load_area
|
||||
mov ebx,eax
|
||||
add ebx, [bmp_load_area+2];file size
|
||||
inc ebx
|
||||
mov dword [bmp_soi],ebx ;soi-start of image area for drawing
|
||||
add eax, [bmp_load_area+10]
|
||||
mov dword [sop],eax ;sop-start of picture in file
|
||||
add eax, [bmp_load_area+34]
|
||||
mov dword [eop],eax ;eop-end of picture in file
|
||||
mov eax, [bmp_load_area+18]
|
||||
lea eax,[eax+2*eax] ;3x pixels in eax
|
||||
|
||||
mov edi,dword [bmp_soi] ;initializing
|
||||
mov esi,dword [eop]
|
||||
sub esi,dword [bps]
|
||||
|
||||
|
||||
nextstring:
|
||||
push edi
|
||||
cmp word [bmp_load_area+28],24
|
||||
jne convertno32
|
||||
|
||||
mov ecx,[dwps]
|
||||
cld
|
||||
rep movsd
|
||||
convert1:
|
||||
pop edi
|
||||
sub esi,dword [bps]
|
||||
sub esi,dword [bps]
|
||||
cmp esi,dword [sop]
|
||||
jb end_bmp;nomorestring
|
||||
add edi,eax
|
||||
jmp nextstring
|
||||
|
||||
; nomorestring:
|
||||
; jmp end_bmp
|
||||
|
||||
convertno32:
|
||||
mov ebx,bmp_load_area
|
||||
add ebx, [bmp_load_area+14]
|
||||
add ebx,14 ;start of color table
|
||||
push esi
|
||||
add esi,dword [bps]
|
||||
mov dword [eos],esi
|
||||
pop esi
|
||||
nextelem:
|
||||
push eax
|
||||
movzx eax,byte [esi]
|
||||
cmp word [bmp_load_area+28],4
|
||||
je convert4bpp
|
||||
cmp word [bmp_load_area+28],1
|
||||
je convert1bpp
|
||||
call converttable
|
||||
convert2:
|
||||
pop eax
|
||||
inc esi
|
||||
cmp esi,dword [eos]
|
||||
jae convert1
|
||||
add edi,3
|
||||
jmp nextelem
|
||||
|
||||
convert4bpp:
|
||||
shl ax,4
|
||||
shr al,4
|
||||
push ax
|
||||
movzx eax,ah
|
||||
call converttable
|
||||
add edi,3
|
||||
pop ax
|
||||
movzx eax,al
|
||||
call converttable
|
||||
jmp convert2
|
||||
|
||||
convert1bpp:
|
||||
mov ecx,eax
|
||||
mov edx,7
|
||||
nextbit:
|
||||
xor eax,eax
|
||||
bt ecx,edx
|
||||
jnc noaddelem
|
||||
inc eax
|
||||
noaddelem:
|
||||
push edx
|
||||
call converttable
|
||||
pop edx
|
||||
dec edx
|
||||
cmp edx,0xffffffff
|
||||
je convert2
|
||||
add edi,3
|
||||
jmp nextbit
|
||||
|
||||
converttable:
|
||||
shl eax,2
|
||||
add eax,ebx
|
||||
mov edx, dword [eax]
|
||||
mov dword [edi],edx
|
||||
ret
|
||||
|
||||
|
||||
; DATA AREA
|
||||
|
||||
;status dd 0 ;bit0=1 if file thread is created
|
||||
bps dd 0
|
||||
dwps dd 0
|
||||
;soi dd 0
|
||||
sop dd 0
|
||||
eop dd 0
|
||||
eos dd 0
|
||||
;process dd 0
|
||||
|
||||
end_bmp:
|
||||
; mov eax,dword [soi]
|
||||
; mov dword [bmp_soi],eax
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
; LOADBMP - Load bmp image from file
|
||||
; (SYNTAX) LOADBMP 'file_path',temp_area(rb 0x10000),load_area,dd soi
|
||||
; (SAMPLE) LOADBMP '/sys/menuet.bmp',temp_area,I_END,tsoi
|
||||
; ( NOTE ) Macros create on Base of
|
||||
; Picture browser by lisovin@26.ru & Ivan Poddubny
|
||||
; SOI - Start of image
|
||||
|
||||
macro loadbmp bmp_file_name,bmp_temp_area,bmp_load_area,bmp_soi
|
||||
{
|
||||
local status,bps,dwps,soi,sop,eop,eos,process,fileinfo,string,end_bmp
|
||||
local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2
|
||||
local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize
|
||||
local noaddword
|
||||
;local qwe,bmpfn
|
||||
|
||||
mov dword [fileinfo+8],1 ; how many blocks to read (1)
|
||||
mov eax,58
|
||||
mov ebx,fileinfo
|
||||
mcall
|
||||
mov eax,[bmp_load_area+2]
|
||||
shr eax,9 ; ŻŽ¤ĽŤ¨Ź 512 ¨ Żŕ¨Ą ˘¨Ź 1 - ŻŽŤă稏 ç¨áŤŽ ĄŤŽŞŽ˘
|
||||
inc eax
|
||||
mov dword [fileinfo+8],eax
|
||||
mov eax,58
|
||||
mov ebx,fileinfo
|
||||
mcall
|
||||
|
||||
; jmp qwe
|
||||
;bmpfn db bmp_file_name
|
||||
;qwe:
|
||||
; mov eax,6
|
||||
; mov ebx,bmpfn
|
||||
; mov ecx,0
|
||||
; mov edx,0xFFFFFF
|
||||
; mov esi,bmp_load_area
|
||||
; mov edi,0
|
||||
; mcall
|
||||
|
||||
; convert:
|
||||
movzx eax,word [bmp_load_area+28]
|
||||
mul dword [bmp_load_area+18]
|
||||
mov ebx,32
|
||||
div ebx
|
||||
test edx,edx
|
||||
je noaddword
|
||||
inc eax
|
||||
noaddword:
|
||||
mov dword [dwps],eax ;dwps-doublewords per string
|
||||
shl eax,2
|
||||
mov dword [bps],eax ;bps-bytes per string
|
||||
|
||||
cmp dword [bmp_load_area+34],0
|
||||
jne yespicsize ;if picture size is defined
|
||||
mul dword [bmp_load_area+22]
|
||||
mov dword [bmp_load_area+34],eax
|
||||
|
||||
yespicsize:
|
||||
mov eax,bmp_load_area
|
||||
push eax
|
||||
add eax, [bmp_load_area+2];file size
|
||||
inc eax
|
||||
mov dword [soi],eax ;soi-start of image area for drawing
|
||||
pop eax
|
||||
add eax, [bmp_load_area+10]
|
||||
mov dword [sop],eax ;sop-start of picture in file
|
||||
add eax, [bmp_load_area+34]
|
||||
mov dword [eop],eax ;eop-end of picture in file
|
||||
mov eax, [bmp_load_area+18]
|
||||
mov ebx,3
|
||||
mul ebx ;3x pixels in eax
|
||||
|
||||
mov edi,dword [soi] ;initializing
|
||||
mov esi,dword [eop]
|
||||
sub esi,dword [bps]
|
||||
|
||||
|
||||
nextstring:
|
||||
push edi
|
||||
cmp word [bmp_load_area+28],24
|
||||
jne convertno32
|
||||
|
||||
mov ecx,[dwps]
|
||||
cld
|
||||
rep movsd
|
||||
convert1:
|
||||
pop edi
|
||||
sub esi,dword [bps]
|
||||
sub esi,dword [bps]
|
||||
cmp esi,dword [sop]
|
||||
jb nomorestring
|
||||
add edi,eax
|
||||
jmp nextstring
|
||||
|
||||
nomorestring:
|
||||
jmp end_bmp
|
||||
|
||||
convertno32:
|
||||
mov ebx,bmp_load_area
|
||||
add ebx, [bmp_load_area+14]
|
||||
add ebx,14 ;start of color table
|
||||
push esi
|
||||
add esi,dword [bps]
|
||||
mov dword [eos],esi
|
||||
pop esi
|
||||
nextelem:
|
||||
push eax
|
||||
movzx eax,byte [esi]
|
||||
cmp word [bmp_load_area+28],4
|
||||
je convert4bpp
|
||||
cmp word [bmp_load_area+28],1
|
||||
je convert1bpp
|
||||
call converttable
|
||||
convert2:
|
||||
pop eax
|
||||
inc esi
|
||||
cmp esi,dword [eos]
|
||||
jae convert1
|
||||
add edi,3
|
||||
jmp nextelem
|
||||
|
||||
convert4bpp:
|
||||
shl ax,4
|
||||
shr al,4
|
||||
push ax
|
||||
movzx eax,ah
|
||||
call converttable
|
||||
add edi,3
|
||||
pop ax
|
||||
movzx eax,al
|
||||
call converttable
|
||||
jmp convert2
|
||||
|
||||
convert1bpp:
|
||||
mov ecx,eax
|
||||
mov edx,7
|
||||
nextbit:
|
||||
xor eax,eax
|
||||
bt ecx,edx
|
||||
jnc noaddelem
|
||||
inc eax
|
||||
noaddelem:
|
||||
push edx
|
||||
call converttable
|
||||
pop edx
|
||||
dec edx
|
||||
cmp edx,0xffffffff
|
||||
je convert2
|
||||
add edi,3
|
||||
jmp nextbit
|
||||
|
||||
converttable:
|
||||
shl eax,2
|
||||
add eax,ebx
|
||||
mov edx, dword [eax]
|
||||
mov dword [edi],edx
|
||||
ret
|
||||
|
||||
|
||||
; DATA AREA
|
||||
|
||||
;status dd 0 ;bit0=1 if file thread is created
|
||||
bps dd 0
|
||||
dwps dd 0
|
||||
soi dd 0
|
||||
sop dd 0
|
||||
eop dd 0
|
||||
eos dd 0
|
||||
;process dd 0
|
||||
|
||||
; DATA AREA
|
||||
fileinfo:
|
||||
dd 0
|
||||
dd 0
|
||||
dd 1 ;number of blocks of 512 bytes
|
||||
dd bmp_load_area
|
||||
dd bmp_temp_area
|
||||
string:
|
||||
db bmp_file_name,0
|
||||
db ' '
|
||||
db ' '
|
||||
db ' '
|
||||
db ' ',0
|
||||
|
||||
|
||||
end_bmp:
|
||||
mov eax,dword [soi]
|
||||
mov dword [bmp_soi],eax
|
||||
|
||||
}
|
||||
@@ -1,499 +0,0 @@
|
||||
lang equ ru_RU ; ru_RU en_US fr_FR de_DE fi_FI
|
||||
|
||||
;
|
||||
; Assembler
|
||||
; SMALL
|
||||
; CODE
|
||||
; Libary
|
||||
;
|
||||
; Ver 0.09 By Pavlushin Evgeni (RUSSIA)
|
||||
; www.waptap@mail.ru
|
||||
|
||||
;InfoList
|
||||
;0.01 scank,putpix,puttxt
|
||||
;0.02 label,random,colors
|
||||
;0.03 window,startwd,endwd,attributes
|
||||
;0.04 close,delay,scevent ~30.04.2004
|
||||
;0.05 small random, ~04.05.2004
|
||||
;0.06 wtevent ~09.05.2004
|
||||
;0.07 timeevent ~23.05.2004
|
||||
;0.08 txtput ~14.06.2004
|
||||
;0.09 opendialog,savedialog ~20.06.2004
|
||||
|
||||
macro opendialog redproc,openoff,erroff,path,testtime
|
||||
{
|
||||
local still, dlg_file, clip_file, redwait
|
||||
local button, key, red, zzz, still, zzz2, incf, file_is_open, zzz3
|
||||
|
||||
mov ecx,200
|
||||
zzz3:
|
||||
mov byte [path+ecx-1],0
|
||||
loop zzz3
|
||||
|
||||
dec byte [clip_file+7]
|
||||
incf:
|
||||
inc byte [clip_file+7]
|
||||
mov eax,6
|
||||
mov ebx,clip_file
|
||||
mov ecx,0
|
||||
or edx,-1
|
||||
mov esi,path
|
||||
mcall
|
||||
cmp byte [clip_file+7],'Z'
|
||||
je erroff
|
||||
cmp eax,0xffffffff
|
||||
jne incf
|
||||
|
||||
mov ecx,200
|
||||
zzz2:
|
||||
mov byte [path+ecx],0
|
||||
loop zzz2
|
||||
|
||||
mov ebx,clip_file
|
||||
mov ecx,path
|
||||
mov edx,100
|
||||
mov esi,0
|
||||
mov eax,33
|
||||
mcall
|
||||
|
||||
mov ebx,dlg_file
|
||||
mov ecx,clip_file
|
||||
mov eax,19
|
||||
mcall
|
||||
|
||||
still:
|
||||
scevent red,key,button
|
||||
cmp byte [path],0
|
||||
jne file_is_open
|
||||
cmp dword [redwait],testtime ;20
|
||||
jnae zzz
|
||||
mov eax,6
|
||||
mov ebx,clip_file
|
||||
mov ecx,0
|
||||
mov edx,-1
|
||||
mov esi,path
|
||||
mcall
|
||||
cmp eax,0xffffffff
|
||||
je erroff ;errexit
|
||||
mov dword [redwait],0
|
||||
zzz:
|
||||
delay 5
|
||||
inc dword [redwait]
|
||||
jmp still
|
||||
|
||||
file_is_open:
|
||||
mov eax,32
|
||||
mov ebx,clip_file
|
||||
mcall
|
||||
jmp openoff
|
||||
|
||||
key: ; key
|
||||
mcall ; read (eax=2)
|
||||
jmp still
|
||||
button: ; button
|
||||
mov eax,17 ; get id
|
||||
mcall
|
||||
cmp ah,1 ; button id=1 ?
|
||||
jne still
|
||||
mov eax,-1 ; close this program
|
||||
mcall
|
||||
|
||||
red:
|
||||
call redproc
|
||||
jmp still
|
||||
|
||||
dlg_file db 'SYSXTREE '
|
||||
clip_file db 'OPENCLPACLP'
|
||||
db 'O' ;Dialog type O-open S-save
|
||||
db 0 ;Marker
|
||||
redwait dd 0
|
||||
}
|
||||
|
||||
macro savedialog redproc,openoff,erroff,path,testtime
|
||||
{
|
||||
local still, dlg_file, clip_file, redwait, zzz3
|
||||
local button, key, red, zzz, still, zzz2, incf, file_is_open
|
||||
|
||||
mov ecx,200
|
||||
zzz3:
|
||||
mov byte [path+ecx-1],0
|
||||
loop zzz3
|
||||
|
||||
dec byte [clip_file+7]
|
||||
incf:
|
||||
inc byte [clip_file+7]
|
||||
mov eax,6
|
||||
mov ebx,clip_file
|
||||
mov ecx,0
|
||||
mov edx,-1
|
||||
mov esi,path
|
||||
mcall
|
||||
cmp byte [clip_file+7],'Z'
|
||||
je erroff
|
||||
cmp eax,0xffffffff
|
||||
jne incf
|
||||
|
||||
mov ecx,200
|
||||
zzz2:
|
||||
mov byte [path+ecx],0
|
||||
loop zzz2
|
||||
|
||||
mov ebx,clip_file
|
||||
mov ecx,path
|
||||
mov edx,100
|
||||
mov esi,0
|
||||
mov eax,33
|
||||
mcall
|
||||
|
||||
mov ebx,dlg_file
|
||||
mov ecx,clip_file
|
||||
mov eax,19
|
||||
mcall
|
||||
|
||||
still:
|
||||
scevent red,key,button
|
||||
cmp byte [path],0
|
||||
jne file_is_open
|
||||
cmp dword [redwait],testtime ;20
|
||||
jnae zzz
|
||||
mov eax,6
|
||||
mov ebx,clip_file
|
||||
mov ecx,0
|
||||
mov edx,-1
|
||||
mov esi,path
|
||||
mcall
|
||||
cmp eax,0xffffffff
|
||||
je erroff ;errexit
|
||||
mov dword [redwait],0
|
||||
zzz:
|
||||
delay 5
|
||||
inc dword [redwait]
|
||||
jmp still
|
||||
|
||||
file_is_open:
|
||||
mov eax,32
|
||||
mov ebx,clip_file
|
||||
mcall
|
||||
jmp openoff
|
||||
|
||||
key: ; key
|
||||
mcall ; read (eax=2)
|
||||
jmp still
|
||||
button: ; button
|
||||
mov eax,17 ; get id
|
||||
mcall
|
||||
cmp ah,1 ; button id=1 ?
|
||||
jne still
|
||||
mov eax,-1 ; close this program
|
||||
mcall
|
||||
|
||||
red:
|
||||
call redproc
|
||||
jmp still
|
||||
|
||||
dlg_file db 'SYSXTREE '
|
||||
clip_file db 'SAVECLPACLP'
|
||||
db 'S' ;Dialog type O-open S-save
|
||||
db 0 ;Marker
|
||||
redwait dd 0
|
||||
}
|
||||
|
||||
|
||||
; RANDOM - generate random count (small)
|
||||
; (SYNTAX) RANDOM MaxCount,OutArgument
|
||||
; (SAMPLE) RANDOM 10000,eax
|
||||
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations
|
||||
|
||||
randomuse = 0
|
||||
|
||||
macro random arg1,arg2
|
||||
{
|
||||
local rxproc
|
||||
randomuse = randomuse + 1
|
||||
|
||||
jmp rxproc
|
||||
|
||||
if defined randomuse & randomuse = 1
|
||||
randomproc:
|
||||
jmp rnj
|
||||
rsx1 dw 0x4321
|
||||
rsx2 dw 0x1234
|
||||
rnj:
|
||||
; mov eax,arg1
|
||||
push bx
|
||||
push cx
|
||||
push dx
|
||||
push si
|
||||
push di
|
||||
mov cx,ax
|
||||
mov ax,word ptr rsx1
|
||||
mov bx,word ptr rsx2
|
||||
mov si,ax
|
||||
mov di,bx
|
||||
mov dl,ah
|
||||
mov ah,al
|
||||
mov al,bh
|
||||
mov bh,bl
|
||||
xor bl,bl
|
||||
rcr dl,1
|
||||
rcr ax,1
|
||||
rcr bx,1
|
||||
add bx,di
|
||||
adc ax,si
|
||||
add bx,0x62e9
|
||||
adc ax,0x3619
|
||||
mov word ptr rsx1,bx
|
||||
mov word ptr rsx2,ax
|
||||
xor dx,dx
|
||||
cmp ax,0
|
||||
je nodiv
|
||||
cmp cx,0
|
||||
je nodiv
|
||||
div cx
|
||||
nodiv:
|
||||
mov ax,dx
|
||||
pop di
|
||||
pop si
|
||||
pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
; mov arg2,0
|
||||
; mov arg2,eax
|
||||
ret
|
||||
end if
|
||||
|
||||
rxproc:
|
||||
mov eax,arg1
|
||||
call randomproc
|
||||
mov arg2,0
|
||||
mov arg2,eax
|
||||
}
|
||||
|
||||
macro scank
|
||||
{
|
||||
mov eax,10
|
||||
mcall
|
||||
}
|
||||
|
||||
macro putpix x,y,color
|
||||
{
|
||||
mov ebx,x
|
||||
mov ecx,y
|
||||
mov edx,color
|
||||
mov eax,1
|
||||
mcall
|
||||
}
|
||||
|
||||
macro puttxt x,y,offs,size,color
|
||||
{
|
||||
mov ebx,x
|
||||
shl ebx,16
|
||||
add ebx,y
|
||||
mov ecx,color
|
||||
mov edx,offs
|
||||
mov esi,size
|
||||
mov eax,4
|
||||
mcall
|
||||
}
|
||||
|
||||
;_ equ '____'
|
||||
|
||||
;macro libtest x,y,color
|
||||
;{
|
||||
;if x = as dword
|
||||
; mov ebx,x
|
||||
;end if
|
||||
; mov ecx,y
|
||||
; mov edx,color
|
||||
; mov eax,1
|
||||
; mcall
|
||||
;}
|
||||
|
||||
|
||||
macro outcount data, x, y, color, numtype
|
||||
{
|
||||
mov ecx,data
|
||||
mov ebx,numtype
|
||||
mov bl,0
|
||||
mov edx,x*65536+y
|
||||
mov esi,color
|
||||
mov eax,47
|
||||
mcall
|
||||
}
|
||||
|
||||
; SCEVENT - Scan event
|
||||
|
||||
macro scevent red,key,but
|
||||
{
|
||||
mov eax,11
|
||||
mcall
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jz key
|
||||
dec eax
|
||||
jz but
|
||||
}
|
||||
|
||||
; WTEVENT - Wait event
|
||||
|
||||
macro wtevent red,key,but
|
||||
{
|
||||
mov eax,10
|
||||
mcall
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jz key
|
||||
dec eax
|
||||
jz but
|
||||
}
|
||||
|
||||
; TIMEEVENT - Wite for event with timeout
|
||||
|
||||
macro timeevent xfps,noevent,red,key,but
|
||||
{
|
||||
mov eax,23
|
||||
mov ebx,xfps
|
||||
mcall
|
||||
cmp eax,0
|
||||
je noevent
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jz key
|
||||
dec eax
|
||||
jz but
|
||||
}
|
||||
|
||||
|
||||
; CLOSE - Close program
|
||||
|
||||
macro close
|
||||
{
|
||||
mov eax,-1
|
||||
mcall
|
||||
}
|
||||
|
||||
; DELAY - Create delay 1/100 sec
|
||||
; (SYNTAX) Delay time
|
||||
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec
|
||||
|
||||
macro delay arg1
|
||||
{
|
||||
mov eax,5
|
||||
mov ebx,arg1
|
||||
mcall
|
||||
}
|
||||
|
||||
; WINDOW - Draw window
|
||||
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color
|
||||
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned
|
||||
|
||||
macro window arg1,arg2,arg3,arg4,arg5
|
||||
{
|
||||
mov ebx,arg1*65536+arg3
|
||||
mov ecx,arg2*65536+arg4
|
||||
mov edx,arg5
|
||||
mov eax,0
|
||||
mcall
|
||||
}
|
||||
|
||||
macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7
|
||||
{
|
||||
mov ebx,arg1*65536+arg3
|
||||
mov ecx,arg2*65536+arg4
|
||||
mov edx,arg5
|
||||
mov esi,arg6
|
||||
mov edi,arg7
|
||||
mov eax,0
|
||||
mcall
|
||||
}
|
||||
|
||||
|
||||
; STARTWD - Start of window draw
|
||||
|
||||
macro startwd
|
||||
{
|
||||
mov eax,12
|
||||
mov ebx,1
|
||||
mcall
|
||||
}
|
||||
|
||||
; ENDWD - End window draw
|
||||
|
||||
macro endwd
|
||||
{
|
||||
mov eax,12
|
||||
mov ebx,2
|
||||
mcall
|
||||
}
|
||||
|
||||
; LABEL - Put text to frame
|
||||
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color
|
||||
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big
|
||||
|
||||
macro label arg1,arg2,arg3,arg4
|
||||
{
|
||||
local asd,lab
|
||||
jmp asd
|
||||
lab db arg3 ;arg label
|
||||
asd:
|
||||
mov ebx,arg1 ;arg1=y arg2=x
|
||||
shl ebx,16
|
||||
add ebx,arg2
|
||||
mov ecx,arg4 ;arg4 color
|
||||
mov edx,lab
|
||||
mov esi,asd-lab ;calc size
|
||||
mov eax,4
|
||||
mcall
|
||||
}
|
||||
|
||||
;Key's
|
||||
key_Up equ 178
|
||||
key_Down equ 177
|
||||
key_Right equ 179
|
||||
key_Left equ 176
|
||||
key_Esc equ 27
|
||||
key_Space equ 32
|
||||
key_Enter equ 13
|
||||
key_Bspace equ 8
|
||||
key_F1 equ 50
|
||||
key_F2 equ 51
|
||||
key_F3 equ 52
|
||||
key_F4 equ 53
|
||||
key_F5 equ 54
|
||||
key_F6 equ 55
|
||||
key_F7 equ 56
|
||||
key_F8 equ 57
|
||||
key_F9 equ 48
|
||||
key_F10 equ 49
|
||||
key_F11 equ 68
|
||||
key_F12 equ 255
|
||||
key_Home equ 180
|
||||
key_End equ 181
|
||||
key_PgUp equ 184
|
||||
key_PgDown equ 183
|
||||
|
||||
;Attributes
|
||||
|
||||
;Window Attributes
|
||||
window_Skinned equ 0x03000000
|
||||
window_Type2 equ 0x02000000
|
||||
window_Type1 equ 0x00000000
|
||||
window_Reserve equ 0x01000000
|
||||
|
||||
;Font Attributes
|
||||
font_Big equ 0x10000000
|
||||
|
||||
;Colors
|
||||
cl_White equ 0x00ffffff
|
||||
cl_Black equ 0x00000000
|
||||
cl_Grey equ 0x00888888
|
||||
cl_Red equ 0x00ff0000
|
||||
cl_Lime equ 0x0000ff00
|
||||
cl_Green equ 0x0000af00
|
||||
cl_Blue equ 0x000000ff
|
||||
cl_Purple equ 0x008080ff
|
||||
cl_Violet equ 0x008040ff
|
||||
cl_Cyan equ 0x0040e0ff
|
||||
3
programs/demos/3dcube2/trunk/build.bat
Normal file
@@ -0,0 +1,3 @@
|
||||
@fasm 3dcube2.asm 3dcube2
|
||||
@kpack 3dcube2
|
||||
if not exist 3dcube2 ( @pause )
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix en_US >lang.inc
|
||||
@fasm 3dcube2.asm 3dcube2
|
||||
@erase lang.inc
|
||||
@kpack 3dcube2
|
||||
@pause
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru_RU >lang.inc
|
||||
@fasm 3dcube2.asm 3dcube2
|
||||
@erase lang.inc
|
||||
@kpack 3dcube2
|
||||
@pause
|
||||
@@ -1,82 +1,60 @@
|
||||
;
|
||||
; FIRE for MENUET - Compile with FASM
|
||||
; Fire for Kolibri OS - Compile with FASM
|
||||
;
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01' ; 8 byte id
|
||||
dd 1 ; header version
|
||||
dd START ; program start
|
||||
dd image_end ; image size
|
||||
dd mem_end ; reguired amount of memory
|
||||
dd stacktop
|
||||
dd 0,0 ; no parameters, no path
|
||||
|
||||
org 0x0
|
||||
db 'MENUET01' ; 8 byte id
|
||||
dd 1 ; header version
|
||||
dd START ; program start
|
||||
dd I_END ; image size
|
||||
dd mem_end ; reguired amount of memory
|
||||
dd mem_end
|
||||
dd 0,0 ; no parameters, no path
|
||||
include '..\..\macros.inc'
|
||||
include '..\..\KOSfuncs.inc'
|
||||
|
||||
Screen_W equ 480
|
||||
|
||||
include '..\..\..\macros.inc'
|
||||
|
||||
START:
|
||||
|
||||
red:
|
||||
|
||||
; ************************************************
|
||||
; ********* WINDOW DEFINITIONS AND DRAW **********
|
||||
; ************************************************
|
||||
|
||||
draw_window:
|
||||
|
||||
mov eax,12 ; tell os about redraw
|
||||
mov ebx,1
|
||||
mcall
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
xor eax,eax ; define and draw window
|
||||
mov ebx,100*65536+321
|
||||
mov ecx,70*65536+222
|
||||
mov edx,0x01000000
|
||||
mov esi,0x00000000
|
||||
mov edi,0x00000000
|
||||
mcall
|
||||
mcall SF_CREATE_WINDOW,<100,Screen_W+1>,<70,222>,0x01000000,0,0
|
||||
|
||||
mcall 13,0*65536+321,0*65536+30,0
|
||||
mcall ,0*65536+1 ,0*65536+222
|
||||
mcall ,321*65536+1,0*65536+223
|
||||
mcall ,0*65536+321,222*65536+1
|
||||
mcall SF_DRAW_RECT,<0,Screen_W+1>,<0,30>,0
|
||||
mcall ,<0,1>,<0,222>
|
||||
mcall ,<Screen_W+1,1>,<0,223>
|
||||
mcall ,<0,Screen_W+1>,<222,1>
|
||||
|
||||
mcall SF_DRAW_TEXT,<(Screen_W-108)/2,8>,dword 0x00FFFFFF,text,textlen-text
|
||||
|
||||
mov al,4 ; 'FIRE FOR KOLIBRI'
|
||||
mov ebx,106*65536+8
|
||||
mov ecx,dword 0x00FFFFFF
|
||||
mov edx,text
|
||||
mov esi,textlen-text
|
||||
mcall
|
||||
mcall SF_DEFINE_BUTTON,<(Screen_W+1-19),12>,<5,12>,1,0x009a0000
|
||||
|
||||
mov al,8
|
||||
mov ebx,(321-19)*65536+12 ; button start x & size
|
||||
mov ecx,5*65536+12 ; button start y & size
|
||||
mov edx,1 ; button number
|
||||
mov esi,0x009a0000
|
||||
mcall
|
||||
mov ebx,ecx ;5*65536+12
|
||||
inc edx
|
||||
mcall
|
||||
|
||||
mov ebx,ecx ;5*65536+12
|
||||
inc edx
|
||||
mcall
|
||||
mcall ,<18,12>
|
||||
|
||||
mov ebx,18*65536+12
|
||||
inc edx
|
||||
mcall
|
||||
mcall ,<31,12>
|
||||
|
||||
mov ebx,31*65536+12
|
||||
inc edx
|
||||
mcall
|
||||
|
||||
mov al,12 ; tell os about redraw end
|
||||
mov ebx,2
|
||||
mcall
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
|
||||
sta: ; calculate fire image
|
||||
|
||||
mov esi, FireScreen+0x2300-80
|
||||
mov ecx, 80
|
||||
mov esi, FireScreen.end+Screen_W*3-Screen_W/4
|
||||
mov ecx, Screen_W/4
|
||||
mov eax, [FireSeed]
|
||||
|
||||
NEWLINE:
|
||||
@@ -89,7 +67,7 @@ sta: ; calculate fire image
|
||||
|
||||
mov [FireSeed], eax
|
||||
|
||||
mov ecx, 0x2300-80
|
||||
mov ecx, (Screen_W*200)/8+Screen_W*3-Screen_W/4
|
||||
sub esi, ecx
|
||||
xor edx, edx
|
||||
xor eax, eax
|
||||
@@ -103,7 +81,7 @@ sta: ; calculate fire image
|
||||
add eax, edx
|
||||
mov dl, [esi]
|
||||
add eax, edx
|
||||
mov dl, [esi + 80]
|
||||
mov dl, [esi + Screen_W/4]
|
||||
jmp typedone
|
||||
notype1:
|
||||
|
||||
@@ -114,7 +92,7 @@ sta: ; calculate fire image
|
||||
; mov dl, [esi - 2]
|
||||
; add eax, edx
|
||||
lea eax, [eax + edx*2]
|
||||
mov dl, [esi + 78]
|
||||
mov dl, [esi + Screen_W/4-2]
|
||||
; notype2:
|
||||
|
||||
; type 2 is never used
|
||||
@@ -124,7 +102,7 @@ sta: ; calculate fire image
|
||||
; add eax, edx
|
||||
; mov dl, [esi]
|
||||
; add eax, edx
|
||||
; mov dl, [esi + 80]
|
||||
; mov dl, [esi + Screen_W/4]
|
||||
; notype3:
|
||||
|
||||
typedone:
|
||||
@@ -135,12 +113,10 @@ typedone:
|
||||
|
||||
ZERO:
|
||||
|
||||
mov [esi - 81], al
|
||||
mov [esi - Screen_W/4-1], al
|
||||
loop FIRELOOP
|
||||
|
||||
mov al, 5 ; in this moment always high 24 bits of eax are zero!
|
||||
mov ebx,[delay]
|
||||
mcall
|
||||
mcall SF_SLEEP,[delay]
|
||||
|
||||
inc [calc]
|
||||
cmp [calc], byte 2
|
||||
@@ -169,7 +145,7 @@ typedone:
|
||||
mov [edi+3],ecx
|
||||
mov [edi+6],ecx
|
||||
mov [edi+9],cx
|
||||
lea ebx, [edi+320*3]
|
||||
lea ebx, [edi+Screen_W*3]
|
||||
mov [ebx+0],ecx
|
||||
mov [ebx+3],ecx
|
||||
mov [ebx+6],ecx
|
||||
@@ -177,50 +153,43 @@ typedone:
|
||||
|
||||
add edi,12
|
||||
inc edx
|
||||
cmp edx,80
|
||||
cmp edx,Screen_W/4
|
||||
jnz nnl
|
||||
xor edx,edx
|
||||
add edi,320*3
|
||||
add edi,Screen_W*3
|
||||
nnl:
|
||||
cmp esi,FireScreen+8000; 0x2000
|
||||
cmp esi,FireScreen.end
|
||||
jnz newc
|
||||
|
||||
mov al,7 ; display image
|
||||
; high 24 bits of eax are zero!
|
||||
pop ebx
|
||||
mov ecx,4*80*65536+200
|
||||
mov edx,1*65536+22
|
||||
mcall
|
||||
mcall SF_PUT_IMAGE,,<Screen_W,200>,<1,22>
|
||||
|
||||
nodrw:
|
||||
|
||||
mov eax,11 ; check if os wants to talk to us
|
||||
mcall
|
||||
mcall SF_CHECK_EVENT ; check if os wants to talk to us
|
||||
dec eax
|
||||
jz red
|
||||
jz draw_window
|
||||
cmp al, 3-1
|
||||
jnz nob4
|
||||
|
||||
button: ; get button id
|
||||
mov al,17
|
||||
mcall
|
||||
mcall SF_GET_BUTTON
|
||||
shr eax, 8
|
||||
|
||||
dec eax
|
||||
jnz noclose
|
||||
or eax,-1 ; close this program
|
||||
mcall
|
||||
noclose:
|
||||
jnz @f
|
||||
mcall SF_TERMINATE_PROCESS ; close this program
|
||||
@@:
|
||||
|
||||
dec eax ; change fire type
|
||||
jnz nob2
|
||||
jnz @f
|
||||
xor [type], 1
|
||||
nob2:
|
||||
@@:
|
||||
|
||||
dec eax ; change delay
|
||||
jnz nob3
|
||||
jnz @f
|
||||
xor [delay], 1
|
||||
nob3:
|
||||
@@:
|
||||
|
||||
dec eax ; change color
|
||||
jnz nob4
|
||||
@@ -233,7 +202,7 @@ typedone:
|
||||
fcok:
|
||||
mov [fcolor],eax
|
||||
mov edi,ImageData
|
||||
mov ecx,(320*600)/4
|
||||
mov ecx,(Screen_W*200*3)/4
|
||||
xor eax,eax
|
||||
rep stosd
|
||||
|
||||
@@ -246,19 +215,23 @@ fcolor dd 2
|
||||
xx db 'x'
|
||||
type db 0
|
||||
calc db 0
|
||||
delay dd 0
|
||||
delay dd 1
|
||||
FireSeed dd 0x1234
|
||||
text: db 'FIRE FOR KOLIBRI'
|
||||
text: db 'Fire for Kolibri'
|
||||
textlen:
|
||||
|
||||
I_END:
|
||||
align 4
|
||||
image_end:
|
||||
|
||||
FireScreen:
|
||||
rb 0x2300
|
||||
rb (Screen_W*200)/8 ;wisible fire
|
||||
.end:
|
||||
rb Screen_W*3 ;hidden fire (need for generation)
|
||||
ImageData:
|
||||
rb 320*200*3
|
||||
rb Screen_W*200*3
|
||||
|
||||
; stack
|
||||
align 512
|
||||
rb 512
|
||||
align 512
|
||||
rb 512
|
||||
stacktop:
|
||||
mem_end:
|
||||
@@ -1,2 +0,0 @@
|
||||
@fasm fire.asm fire
|
||||
@pause
|
||||
@@ -1,6 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; A firework demo
|
||||
; Programmed by Yaniv LEVIATHAN
|
||||
; Copyright (C) 2010-2025 KolibriOS team
|
||||
;
|
||||
; Initially ðrogrammed by Yaniv Leviathan
|
||||
; http://yaniv.leviathanonline.com
|
||||
; Converted to DexOS, By Dex
|
||||
; Converted to KolibriOS, By Asper
|
||||
@@ -11,19 +14,24 @@
|
||||
; optionally AVX, AVX2, AVX512
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
use32
|
||||
org 0x0
|
||||
org 0
|
||||
|
||||
db 'MENUET01' ; 8 byte id
|
||||
dd 0x01 ; version
|
||||
dd 1 ; version
|
||||
dd STARTAPP ; program start
|
||||
dd I_END ; program image size
|
||||
dd E_END ; required amount of memory
|
||||
dd stacktop ; reserved=no extended header
|
||||
dd 0, 0
|
||||
|
||||
include '../../../macros.inc'
|
||||
SCREEN_WIDTH = 320
|
||||
SCREEN_HEIGHT = 200
|
||||
include '../../macros.inc'
|
||||
include '../../KOSfuncs.inc'
|
||||
|
||||
SCREEN_WIDTH = 600 ;.. mod 8 == 0
|
||||
Screen_W dd SCREEN_WIDTH
|
||||
Screen_H dd 400
|
||||
lost_bytes dd 0
|
||||
|
||||
SIMD equ SSE
|
||||
SIMD_BYTES = 8
|
||||
; SSE 8
|
||||
@@ -46,41 +54,37 @@ PART_SIZE = 20
|
||||
macro shade
|
||||
{
|
||||
local .lop
|
||||
mov ecx, [Screen_H]
|
||||
imul ecx, [Screen_W]
|
||||
shr ecx, 3 ;ecx = Screen_W * Screen_H / SIMD_BYTES
|
||||
mov edi, [buffer]
|
||||
if SIMD eq SSE
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
|
||||
mov edi, buffer
|
||||
movq mm1, qword [sub_mask]
|
||||
.lop:
|
||||
.lop:
|
||||
movq mm0, [edi]
|
||||
psubusb mm0, mm1
|
||||
movq [edi], mm0
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
|
||||
mov edi, buffer
|
||||
vmovdqa xmm1, xword [sub_mask]
|
||||
.lop:
|
||||
.lop:
|
||||
vmovdqa xmm0, [edi]
|
||||
vpsubusb xmm0, xmm0, xmm1
|
||||
vmovdqa [edi], xmm0
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX2
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
|
||||
mov edi, buffer
|
||||
vmovdqa ymm1, yword [sub_mask]
|
||||
.lop:
|
||||
.lop:
|
||||
vmovdqa ymm0, [edi]
|
||||
vpsubusb ymm0, ymm0, ymm1
|
||||
vmovdqa [edi], ymm0
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX512
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
|
||||
mov edi, buffer
|
||||
vmovdqa64 zmm1, zword [sub_mask]
|
||||
.lop:
|
||||
.lop:
|
||||
vmovdqa64 zmm0, [edi]
|
||||
vpsubusb zmm0, zmm0, zmm1
|
||||
vmovdqa64 [edi], zmm0
|
||||
@@ -91,10 +95,18 @@ end if
|
||||
|
||||
macro blur_prepare
|
||||
{
|
||||
mov ecx, (SCREEN_WIDTH * SCREEN_HEIGHT - SCREEN_WIDTH * 2 - SIMD_BYTES*2) / SIMD_BYTES
|
||||
mov edi, buffer + SCREEN_WIDTH + SIMD_BYTES
|
||||
mov ecx, [Screen_H]
|
||||
dec ecx
|
||||
dec ecx
|
||||
imul ecx, [Screen_W]
|
||||
sub ecx, SIMD_BYTES*2
|
||||
shr ecx, 3 ;ecx = (Screen_W * (Screen_H - 2) - SIMD_BYTES*2) / SIMD_BYTES
|
||||
mov edi, SIMD_BYTES
|
||||
add edi, [buffer]
|
||||
add edi, [Screen_W]
|
||||
}
|
||||
|
||||
; eax = [Screen_W]
|
||||
macro blur
|
||||
{
|
||||
local .lop
|
||||
@@ -104,8 +116,10 @@ if SIMD eq SSE
|
||||
movq mm1, [edi + 1]
|
||||
movq mm2, [edi - 1]
|
||||
movq mm3, mm0
|
||||
movq mm4, [edi - SCREEN_WIDTH]
|
||||
movq mm5, [edi + SCREEN_WIDTH]
|
||||
neg eax
|
||||
movq mm4, [edi + eax]
|
||||
neg eax
|
||||
movq mm5, [edi + eax]
|
||||
|
||||
pavgb mm0, mm1 ; mm0 = avg(cur,cur+1)
|
||||
pavgb mm3, mm2 ; mm3 = avg(cur,cur-1)
|
||||
@@ -120,11 +134,13 @@ else if SIMD eq AVX
|
||||
.lop:
|
||||
vmovdqa xmm0, [edi]
|
||||
vmovdqa xmm1, xmm0
|
||||
vmovdqa xmm2, [edi - SCREEN_WIDTH]
|
||||
neg eax
|
||||
vmovdqa xmm2, [edi + eax]
|
||||
neg eax
|
||||
|
||||
vpavgb xmm0, xmm0, [edi + 1]
|
||||
vpavgb xmm1, xmm1, [edi - 1]
|
||||
vpavgb xmm2, xmm2, [edi + SCREEN_WIDTH]
|
||||
vpavgb xmm2, xmm2, [edi + eax]
|
||||
vpavgb xmm1, xmm1, xmm2
|
||||
vpavgb xmm0, xmm0, xmm1
|
||||
|
||||
@@ -135,11 +151,13 @@ else if SIMD eq AVX2
|
||||
.lop:
|
||||
vmovdqa ymm0, [edi]
|
||||
vmovdqa ymm1, ymm0
|
||||
vmovdqa ymm2, [edi - SCREEN_WIDTH]
|
||||
neg eax
|
||||
vmovdqa ymm2, [edi + eax]
|
||||
neg eax
|
||||
|
||||
vpavgb ymm0, ymm0, [edi + 1]
|
||||
vpavgb ymm1, ymm1, [edi - 1]
|
||||
vpavgb ymm2, ymm2, [edi + SCREEN_WIDTH]
|
||||
vpavgb ymm2, ymm2, [edi + eax]
|
||||
vpavgb ymm1, ymm1, ymm2
|
||||
vpavgb ymm0, ymm0, ymm1
|
||||
|
||||
@@ -150,11 +168,13 @@ else if SIMD eq AVX512
|
||||
.lop:
|
||||
vmovdqa64 zmm0, [edi]
|
||||
vmovdqa64 zmm1, zmm0
|
||||
vmovdqa64 zmm2, [edi - SCREEN_WIDTH]
|
||||
neg eax
|
||||
vmovdqa64 zmm2, [edi + eax]
|
||||
neg eax
|
||||
|
||||
vpavgb zmm0, zmm0, [edi + 1]
|
||||
vpavgb zmm1, zmm1, [edi - 1]
|
||||
vpavgb zmm2, zmm2, [edi + SCREEN_WIDTH]
|
||||
vpavgb zmm2, zmm2, [edi + eax]
|
||||
vpavgb zmm1, zmm1, zmm2
|
||||
vpavgb zmm0, zmm0, zmm1
|
||||
|
||||
@@ -164,6 +184,7 @@ else if SIMD eq AVX512
|
||||
end if
|
||||
}
|
||||
|
||||
; eax = [Screen_W]
|
||||
macro blur_right
|
||||
{
|
||||
local .lop
|
||||
@@ -171,8 +192,8 @@ if SIMD eq SSE
|
||||
.lop:
|
||||
movq mm0, [edi]
|
||||
movq mm1, [edi + 1]
|
||||
movq mm2, [edi + SCREEN_WIDTH]
|
||||
movq mm3, [edi + SCREEN_WIDTH + 1]
|
||||
movq mm2, [edi + eax]
|
||||
movq mm3, [edi + eax + 1]
|
||||
pavgb mm0, mm1
|
||||
pavgb mm3, mm2
|
||||
pavgb mm0, mm3
|
||||
@@ -182,30 +203,30 @@ if SIMD eq SSE
|
||||
else if SIMD eq AVX
|
||||
.lop:
|
||||
vmovdqa xmm0, [edi]
|
||||
vmovdqu xmm1, [edi + SCREEN_WIDTH + 1]
|
||||
vpavgb xmm2, xmm0, [edi + 1]
|
||||
vpavgb xmm3, xmm1, [edi + SCREEN_WIDTH]
|
||||
vpavgb xmm4, xmm2, xmm3
|
||||
vmovdqu xmm1, [edi + eax + 1]
|
||||
vpavgb xmm2, xmm0, [edi + 1]
|
||||
vpavgb xmm3, xmm1, [edi + eax]
|
||||
vpavgb xmm4, xmm2, xmm3
|
||||
vmovdqa [edi], xmm4
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX2
|
||||
.lop:
|
||||
vmovdqa ymm0, [edi]
|
||||
vmovdqu ymm1, [edi + SCREEN_WIDTH + 1]
|
||||
vpavgb ymm2, ymm0, [edi + 1]
|
||||
vpavgb ymm3, ymm1, [edi + SCREEN_WIDTH]
|
||||
vpavgb ymm4, ymm2, ymm3
|
||||
vmovdqu ymm1, [edi + eax + 1]
|
||||
vpavgb ymm2, ymm0, [edi + 1]
|
||||
vpavgb ymm3, ymm1, [edi + eax]
|
||||
vpavgb ymm4, ymm2, ymm3
|
||||
vmovdqa [edi], ymm4
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX512
|
||||
.lop:
|
||||
vmovdqa64 zmm0, [edi]
|
||||
vmovdqu64 zmm1, [edi + SCREEN_WIDTH + 1]
|
||||
vmovdqu64 zmm1, [edi + eax + 1]
|
||||
vpavgb zmm2, zmm0, [edi + 1]
|
||||
vpavgb zmm3, zmm1, [edi + SCREEN_WIDTH]
|
||||
vpavgb zmm4, zmm2, zmm3
|
||||
vpavgb zmm3, zmm1, [edi + eax]
|
||||
vpavgb zmm4, zmm2, zmm3
|
||||
vmovdqa64 [edi], zmm4
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
@@ -217,12 +238,12 @@ STARTAPP:
|
||||
init_palette:
|
||||
mov edi, pal
|
||||
xor eax, eax
|
||||
red_loop:
|
||||
@@:
|
||||
stosd
|
||||
stosd
|
||||
add eax, 0x040000
|
||||
and eax, 0xFFFFFF
|
||||
jnz red_loop
|
||||
jnz @b
|
||||
|
||||
mov eax, 63*4 SHL 16
|
||||
@@:
|
||||
@@ -231,11 +252,9 @@ red_loop:
|
||||
add ax, 0x0404
|
||||
jnc @b
|
||||
|
||||
;zero_buffer:
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / 4
|
||||
; mov edi, buffer
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
;init buffer
|
||||
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||
call OnResize
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; Main Functions
|
||||
@@ -253,30 +272,64 @@ end virtual
|
||||
|
||||
jmp MAIN
|
||||
|
||||
align 4
|
||||
OnResize:
|
||||
mov ecx,[Screen_W]
|
||||
imul ecx,[Screen_H]
|
||||
;ecx = SCREEN_W*SCREEN_H
|
||||
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buffer]
|
||||
mov [buffer],eax
|
||||
ret
|
||||
|
||||
align 4
|
||||
red:
|
||||
mcall 9, proc_info, -1
|
||||
x = 100
|
||||
y = 70
|
||||
xsize = SCREEN_WIDTH+9
|
||||
ysize = SCREEN_HEIGHT+4
|
||||
areacolor = 0x54224466
|
||||
mov eax, 12 ; function 12:tell os about windowdraw
|
||||
mov ebx, 1 ; 1, start of draw
|
||||
int 0x40
|
||||
mov eax, 48
|
||||
mov ebx, 4
|
||||
int 0x40
|
||||
lea ecx, [(y SHL 16) + ysize + eax]
|
||||
xor eax, eax ; function 0 : define and draw window
|
||||
mov ebx, (x SHL 16) + xsize ; [x start] *65536 + [x size]
|
||||
mov edx, areacolor ; color of work area RRGGBB
|
||||
mov edi, window_title
|
||||
int 0x40
|
||||
mov eax, 12 ; end of redraw
|
||||
mov ebx, 2
|
||||
int 0x40
|
||||
mcall SF_THREAD_INFO, proc_info, -1
|
||||
areacolor = 0x53224466
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
add eax, 4
|
||||
push eax ;for test resize
|
||||
add eax, [Screen_H]
|
||||
lea ecx, [(70 shl 16) + eax]
|
||||
mov ebx, [Screen_W]
|
||||
lea ebx, [(100 shl 16) + 9 + ebx]
|
||||
mcall SF_CREATE_WINDOW,,, areacolor,, window_title
|
||||
|
||||
;test resize
|
||||
pop eax
|
||||
cmp dword[proc_info.box.height],0
|
||||
je .resize_end
|
||||
sub eax,[proc_info.box.height]
|
||||
neg eax
|
||||
cmp eax,[Screen_H]
|
||||
je .end_h
|
||||
cmp eax,32 ;min height
|
||||
jge @f
|
||||
mov eax,32
|
||||
@@:
|
||||
mov [Screen_H],eax
|
||||
xor eax,eax
|
||||
mov [Screen_W],eax
|
||||
.end_h:
|
||||
|
||||
mov eax,[proc_info.box.width]
|
||||
sub eax,9
|
||||
mov [lost_bytes],eax
|
||||
and eax,0xffff-(SIMD_BYTES-1)
|
||||
cmp eax,[Screen_W]
|
||||
je .resize_end
|
||||
cmp eax,64 ;min width
|
||||
jge @f
|
||||
mov eax,64
|
||||
@@:
|
||||
mov [Screen_W],eax
|
||||
|
||||
call OnResize
|
||||
.resize_end:
|
||||
|
||||
mcall SF_REDRAW, SSF_END_DRAW ; end of redraw
|
||||
|
||||
align 4
|
||||
MAIN:
|
||||
test [proc_info.wnd_state], 0x04
|
||||
jnz still
|
||||
@@ -291,11 +344,15 @@ MAIN:
|
||||
|
||||
cmp eax, 5
|
||||
jb .new_particle
|
||||
cmp eax, SCREEN_WIDTH - 5
|
||||
mov edx, [Screen_W]
|
||||
sub edx, 5
|
||||
cmp eax, edx
|
||||
jge .new_particle
|
||||
cmp ebx, 5
|
||||
jb .new_particle
|
||||
cmp ebx, SCREEN_HEIGHT - 5
|
||||
mov edx, [Screen_H]
|
||||
sub edx, 5
|
||||
cmp ebx, edx
|
||||
jl .part_ok
|
||||
|
||||
.new_particle:
|
||||
@@ -303,9 +360,11 @@ MAIN:
|
||||
jmp .advance_particles
|
||||
|
||||
.part_ok:
|
||||
imul edi, ebx, SCREEN_WIDTH
|
||||
mov edi, ebx
|
||||
imul edi, [Screen_W]
|
||||
mov dl, [ebp+COLOR_OFFSET]
|
||||
mov [buffer+eax+edi], dl
|
||||
add eax,[buffer]
|
||||
mov [eax+edi], dl
|
||||
|
||||
mov eax, [ebp+X_SPEED_OFFSET]
|
||||
add [ebp+X_OFFSET], eax
|
||||
@@ -324,6 +383,7 @@ MAIN:
|
||||
shade
|
||||
; jmp .copy_buffer_to_video
|
||||
blur_prepare
|
||||
mov eax, [Screen_W]
|
||||
test dword [blur_right_flag] , 0x800000
|
||||
jnz .do_blur_right
|
||||
blur
|
||||
@@ -339,36 +399,45 @@ MAIN:
|
||||
|
||||
.copy_buffer_to_video:
|
||||
|
||||
mcall 48, 4
|
||||
lea edx, [(5 SHL 16) + eax]
|
||||
|
||||
mov eax, 65
|
||||
mov ebx, buffer
|
||||
mov ecx, (SCREEN_WIDTH SHL 16) + SCREEN_HEIGHT
|
||||
push 8
|
||||
pop esi
|
||||
mov edi, pal
|
||||
xor ebp, ebp
|
||||
int 0x40
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
lea edx, [(5 shl 16) + eax]
|
||||
push 8
|
||||
pop esi
|
||||
xor ebp, ebp
|
||||
mov ecx, [Screen_W]
|
||||
shl ecx, 16
|
||||
add ecx, [Screen_H]
|
||||
mcall SF_PUT_IMAGE_EXT, [buffer],,,, pal
|
||||
|
||||
and [lost_bytes], SIMD_BYTES-1
|
||||
jz still
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
mov ecx, eax
|
||||
shl ecx, 16
|
||||
add ecx, [Screen_H]
|
||||
mov ebx, [Screen_W]
|
||||
add ebx, 5 ;left border
|
||||
shl ebx, 16
|
||||
add ebx, [lost_bytes]
|
||||
xor edx, edx
|
||||
mcall SF_DRAW_RECT
|
||||
|
||||
align 4
|
||||
still:
|
||||
mov eax, 11 ; Test if there is an event in the queue.
|
||||
int 0x40
|
||||
mcall SF_WAIT_EVENT_TIMEOUT, 1
|
||||
|
||||
dec eax ; redraw request ?
|
||||
jz red
|
||||
dec eax ; key in buffer ?
|
||||
jz key
|
||||
dec eax ; button in buffer ?
|
||||
jz button
|
||||
|
||||
jmp MAIN
|
||||
dec eax ; redraw request ?
|
||||
jz red
|
||||
dec eax ; key in buffer ?
|
||||
jz key
|
||||
dec eax ; button in buffer ?
|
||||
jz button
|
||||
|
||||
jmp MAIN
|
||||
|
||||
align 4
|
||||
key:
|
||||
mov eax, 2
|
||||
int 0x40
|
||||
mcall SF_GET_KEY
|
||||
; cmp ah, 1 ; Test Esc in Scan
|
||||
; je close_app
|
||||
cmp ah, 27 ; Test Esc in ASCII
|
||||
@@ -378,8 +447,7 @@ key:
|
||||
button:
|
||||
; we have only one button, close
|
||||
close_app:
|
||||
mov eax, -1 ; close this program
|
||||
int 0x40
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
init_particle:
|
||||
rdtsc
|
||||
@@ -389,7 +457,7 @@ init_particle:
|
||||
call rand
|
||||
cdq
|
||||
;xor dx, dx
|
||||
mov ebx, SCREEN_WIDTH
|
||||
mov ebx, [Screen_W]
|
||||
div ebx
|
||||
shl edx, 6
|
||||
mov [4 + global_x], edx
|
||||
@@ -397,7 +465,7 @@ init_particle:
|
||||
call rand
|
||||
cdq
|
||||
;xor dx, dx
|
||||
mov ebx, SCREEN_HEIGHT
|
||||
mov ebx, [Screen_H]
|
||||
div ebx
|
||||
shl edx, 6
|
||||
mov [4 + global_y], edx
|
||||
@@ -444,7 +512,8 @@ proc_info process_information
|
||||
align 16
|
||||
pal rb 256 * 4
|
||||
align SIMD_BYTES
|
||||
buffer rb SCREEN_WIDTH * SCREEN_HEIGHT
|
||||
E_END:
|
||||
rd 0x200
|
||||
buffer dd 0
|
||||
align 4
|
||||
rd 1024
|
||||
stacktop:
|
||||
E_END:
|
||||
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 85 KiB |
2
programs/demos/movback/Tupfile.lua
Normal file
@@ -0,0 +1,2 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
tup.rule("movback.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "movback")
|
||||
@@ -1,15 +1,24 @@
|
||||
include "lang.inc"
|
||||
include "../../../macros.inc"
|
||||
include "../../../KOSfuncs.inc"
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; A MoveBack demo
|
||||
; Copyright (C) 2010-2025 KolibriOS team
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
WND_SIZE_X = 320
|
||||
WND_SIZE_Y = 200
|
||||
include "../../macros.inc"
|
||||
include "../../KOSfuncs.inc"
|
||||
|
||||
KOS_APP_START
|
||||
|
||||
Screen_W dd 600-10 ;10 px for borders
|
||||
Screen_H dd 400
|
||||
|
||||
VC_DELTA = 1
|
||||
HC_DELTA = 2
|
||||
|
||||
MEOS_APP_START
|
||||
|
||||
CODE
|
||||
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||
call OnResize
|
||||
fninit
|
||||
call init_sinus_table
|
||||
call init_background
|
||||
@@ -17,6 +26,7 @@ CODE
|
||||
mcall SF_SET_EVENTS_MASK, 101b
|
||||
jmp .paint_window
|
||||
|
||||
align 4
|
||||
.event_loop:
|
||||
mcall SF_WAIT_EVENT_TIMEOUT, 1
|
||||
|
||||
@@ -34,24 +44,63 @@ CODE
|
||||
add word [hor_counter],HC_DELTA
|
||||
call handle_animation
|
||||
xor ebp,ebp
|
||||
mcall SF_PUT_IMAGE_EXT, virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,<0,0>,8,_palette
|
||||
mov ecx,[Screen_W]
|
||||
shl ecx,16
|
||||
add ecx,[Screen_H]
|
||||
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,<0,0>,8,_palette
|
||||
jmp .event_loop
|
||||
|
||||
.paint_window:
|
||||
mcall SF_THREAD_INFO, proc_info,-1
|
||||
cmp dword[proc_info.box.height],0
|
||||
je .resize_end
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
add eax,4
|
||||
sub eax,[proc_info.box.height]
|
||||
neg eax
|
||||
cmp eax,[Screen_H]
|
||||
je .end_h
|
||||
cmp eax,32 ;min height
|
||||
jge @f
|
||||
mov eax,32
|
||||
@@:
|
||||
mov [Screen_H],eax
|
||||
xor eax,eax
|
||||
mov [Screen_W],eax
|
||||
.end_h:
|
||||
|
||||
mov eax,[proc_info.box.width]
|
||||
sub eax,9
|
||||
cmp eax,[Screen_W]
|
||||
je .resize_end
|
||||
cmp eax,64 ;min width
|
||||
jge @f
|
||||
mov eax,64
|
||||
@@:
|
||||
mov [Screen_W],eax
|
||||
|
||||
call OnResize
|
||||
.resize_end:
|
||||
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
lea ecx,[eax + (100 shl 16) + WND_SIZE_Y+4]
|
||||
lea ecx,[eax + (100 shl 16) +4]
|
||||
add ecx,[Screen_H]
|
||||
mov edi,title
|
||||
mcall SF_CREATE_WINDOW, <100,WND_SIZE_X+9>,,0x74000000
|
||||
mov ebx,(100 shl 16)+9
|
||||
add ebx,[Screen_W]
|
||||
mcall SF_CREATE_WINDOW,,,0x73000000
|
||||
|
||||
test [proc_info.wnd_state], 0x04
|
||||
jnz @f
|
||||
|
||||
xor ebp,ebp
|
||||
mcall SF_PUT_IMAGE_EXT, virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,<0,0>,8,_palette
|
||||
@@:
|
||||
mov ecx,[Screen_W]
|
||||
shl ecx,16
|
||||
add ecx,[Screen_H]
|
||||
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,<0,0>,8,_palette
|
||||
@@:
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
|
||||
jmp .event_loop
|
||||
@@ -105,8 +154,16 @@ init_background:
|
||||
jne .ib_vertical
|
||||
ret
|
||||
|
||||
s_OFFX = 0
|
||||
s_OFFY = 2
|
||||
align 4
|
||||
OnResize:
|
||||
mov ecx,[Screen_W]
|
||||
imul ecx,[Screen_H]
|
||||
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[virtual_screen_8]
|
||||
mov [virtual_screen_8],eax
|
||||
ret
|
||||
|
||||
s_OFFX = 0
|
||||
s_OFFY = 2
|
||||
|
||||
handle_animation:
|
||||
sub esp,4
|
||||
@@ -120,10 +177,12 @@ handle_animation:
|
||||
add ebx,ebx
|
||||
mov ax,[sinetable+ebx]
|
||||
mov [esp+s_OFFX],ax
|
||||
mov edi,virtual_screen_8
|
||||
mov edx,WND_SIZE_Y-1
|
||||
mov edi,[virtual_screen_8]
|
||||
mov edx,[Screen_H]
|
||||
dec edx
|
||||
.a_ver:
|
||||
mov ecx,WND_SIZE_X-1
|
||||
mov ecx,[Screen_W]
|
||||
dec ecx
|
||||
mov bx,[esp+s_OFFY]
|
||||
add bx,dx
|
||||
and ebx,255
|
||||
@@ -142,26 +201,25 @@ handle_animation:
|
||||
ret
|
||||
|
||||
DATA
|
||||
delta_angle dd 0.0245436926066 ; pi/128
|
||||
scale_sin dd 128.0
|
||||
delta_angle dd 0.0245436926066 ; pi/128
|
||||
scale_sin dd 128.0
|
||||
|
||||
title db 'MoveBack',0
|
||||
title db 'MoveBack',0
|
||||
|
||||
UDATA
|
||||
ver_counter dd ?
|
||||
hor_counter dd ?
|
||||
ver_counter dd ?
|
||||
hor_counter dd ?
|
||||
|
||||
_palette: rd 256
|
||||
_palette: rd 256
|
||||
|
||||
virtual_screen_8:
|
||||
rb WND_SIZE_X*WND_SIZE_Y
|
||||
virtual_screen_8 dd ?
|
||||
|
||||
background:
|
||||
rb 256*256
|
||||
background:
|
||||
rb 256*256
|
||||
|
||||
sinetable:
|
||||
rw 256
|
||||
sinetable:
|
||||
rw 256
|
||||
|
||||
proc_info process_information
|
||||
proc_info process_information
|
||||
|
||||
MEOS_APP_END
|
||||
KOS_APP_END
|
||||
@@ -1,7 +0,0 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
||||
tup.rule({"movback.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "movback")
|
||||
@@ -1,5 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix en_US >lang.inc
|
||||
@fasm movback.asm movback
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,5 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru_RU >lang.inc
|
||||
@fasm movback.asm movback
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,5 +1,5 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
@@ -1,48 +1,104 @@
|
||||
; Originally written by Jarek Pelczar
|
||||
include "lang.inc"
|
||||
include "..\..\..\macros.inc"
|
||||
include "..\..\macros.inc"
|
||||
include "..\..\KOSfuncs.inc"
|
||||
|
||||
WND_SIZE_X = 320
|
||||
WND_SIZE_Y = 200
|
||||
KOS_APP_START
|
||||
|
||||
WND_SIZE_X dd 640
|
||||
WND_SIZE_Y dd 400
|
||||
|
||||
title db 'Plasma',0
|
||||
|
||||
MEOS_APP_START
|
||||
CODE
|
||||
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||
call OnResize
|
||||
|
||||
fninit
|
||||
mcall 40,101b
|
||||
mcall SF_SET_EVENTS_MASK, 101b
|
||||
call init_palette
|
||||
call init_texture
|
||||
jmp .paint_window
|
||||
.event_loop:
|
||||
mcall 23,1
|
||||
mcall SF_WAIT_EVENT_TIMEOUT, 1
|
||||
test eax,eax
|
||||
je .draw_screen
|
||||
dec eax
|
||||
je .paint_window
|
||||
|
||||
or eax,-1
|
||||
mcall
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
.draw_screen:
|
||||
xor ebp,ebp
|
||||
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette
|
||||
mov ecx,[WND_SIZE_X]
|
||||
shl ecx,16
|
||||
add ecx,[WND_SIZE_Y]
|
||||
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
|
||||
call rotate_pal
|
||||
jmp .event_loop
|
||||
|
||||
.paint_window:
|
||||
mcall 12,1
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
mcall 48,4 ; get skin height
|
||||
lea ecx,[eax + (110 shl 16) + WND_SIZE_Y + 4]
|
||||
;if window resize
|
||||
mcall SF_THREAD_INFO,procinfo,-1
|
||||
cmp dword[procinfo.box.height],0
|
||||
je .resize_end
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
add eax,4
|
||||
sub eax,[procinfo.box.height]
|
||||
neg eax
|
||||
cmp eax,[WND_SIZE_Y]
|
||||
je .end_h
|
||||
cmp eax,32 ;min height
|
||||
jge @f
|
||||
mov eax,32
|
||||
@@:
|
||||
mov [WND_SIZE_Y],eax
|
||||
xor eax,eax
|
||||
mov [WND_SIZE_X],eax
|
||||
.end_h:
|
||||
|
||||
mov eax,[procinfo.box.width]
|
||||
sub eax,9
|
||||
cmp eax,[WND_SIZE_X]
|
||||
je .resize_end
|
||||
cmp eax,64 ;min width
|
||||
jge @f
|
||||
mov eax,64
|
||||
@@:
|
||||
mov [WND_SIZE_X],eax
|
||||
|
||||
call OnResize
|
||||
call init_texture
|
||||
.resize_end:
|
||||
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
lea ecx,[eax + (110 shl 16) + 4]
|
||||
add ecx,[WND_SIZE_Y]
|
||||
mov edi,title
|
||||
mcall 0,<110,WND_SIZE_X+9>,,0x74000000
|
||||
mov ebx,[WND_SIZE_X]
|
||||
add ebx,(110 shl 16)+9
|
||||
mcall SF_CREATE_WINDOW,,,0x73000000
|
||||
|
||||
xor ebp,ebp
|
||||
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette
|
||||
xor ebp,ebp
|
||||
mov ecx,[WND_SIZE_X]
|
||||
shl ecx,16
|
||||
add ecx,[WND_SIZE_Y]
|
||||
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
|
||||
|
||||
mcall 12,2
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
|
||||
jmp .event_loop
|
||||
|
||||
align 4
|
||||
OnResize:
|
||||
mov ecx,[WND_SIZE_X]
|
||||
imul ecx,[WND_SIZE_Y]
|
||||
mcall SF_SYS_MISC,SSF_MEM_ALLOC,, [virtual_screen_8]
|
||||
mov [virtual_screen_8],eax
|
||||
ret
|
||||
|
||||
align 4
|
||||
init_palette:
|
||||
mov edi,_palette
|
||||
mov ecx,64
|
||||
@@ -92,7 +148,7 @@ init_texture:
|
||||
mov [_fpom16],180
|
||||
fidiv [_fpom16]
|
||||
fstp [_st_rad]
|
||||
mov edi,virtual_screen_8
|
||||
mov edi,[virtual_screen_8]
|
||||
cdq
|
||||
.itex_vertical:
|
||||
xor ecx,ecx
|
||||
@@ -120,10 +176,10 @@ init_texture:
|
||||
inc eax
|
||||
stosb
|
||||
inc ecx
|
||||
cmp ecx,WND_SIZE_X
|
||||
cmp ecx,[WND_SIZE_X]
|
||||
jne .itex_horizontal
|
||||
inc edx
|
||||
cmp edx,WND_SIZE_Y
|
||||
cmp edx,[WND_SIZE_Y]
|
||||
jne .itex_vertical
|
||||
ret
|
||||
|
||||
@@ -141,7 +197,6 @@ rotate_pal:
|
||||
DATA
|
||||
_multiplier dd 63.5
|
||||
|
||||
title db 'Plasma',0
|
||||
|
||||
UDATA
|
||||
_fpom32 rd 1
|
||||
@@ -149,7 +204,7 @@ UDATA
|
||||
_st_rad rd 1
|
||||
_palette: rd 256
|
||||
|
||||
virtual_screen_8:
|
||||
rb WND_SIZE_X*WND_SIZE_Y
|
||||
virtual_screen_8 rd 1
|
||||
procinfo process_information
|
||||
|
||||
MEOS_APP_END
|
||||
KOS_APP_END
|
||||
@@ -1,5 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix en_US >lang.inc
|
||||
@fasm plasma.asm plasma
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,5 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru_RU >lang.inc
|
||||
@fasm plasma.asm plasma
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,2 +1,2 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
tup.rule("tube.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "tube")
|
||||
tup.rule("tube.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "tube")
|
||||
@@ -1,5 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix en_US >lang.inc
|
||||
@fasm tube.asm tube
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,5 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru_RU >lang.inc
|
||||
@fasm tube.asm tube
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,264 +0,0 @@
|
||||
|
||||
; (Ü) ( ) Ü ) ( ) 256b intro by baze/3SC for Syndeecate 2001
|
||||
; ßÛß ÛÜÛ ÛÛÛ ÛÛÜ loveC: thanks, Serzh: eat my socks dude ;]
|
||||
; ( ) ( ) ( ) ( ) e-mail: baze@stonline.sk, web: www.3SC.sk
|
||||
|
||||
; Menuet port by VT
|
||||
|
||||
appname equ 'TUBE - FPU'
|
||||
|
||||
use32
|
||||
org 0x0
|
||||
|
||||
db 'MENUET01'
|
||||
dd 0x01
|
||||
dd START
|
||||
dd I_END
|
||||
dd 0x40000
|
||||
dd 0x40000
|
||||
dd 0,0
|
||||
|
||||
include '..\..\..\macros.inc'
|
||||
|
||||
START:
|
||||
|
||||
call draw_window
|
||||
|
||||
call init_tube
|
||||
|
||||
push ebx
|
||||
|
||||
still:
|
||||
|
||||
pop ebx
|
||||
|
||||
call MAIN
|
||||
|
||||
push ebx
|
||||
|
||||
mov eax,23
|
||||
mov ebx,1
|
||||
mcall
|
||||
|
||||
cmp eax,1
|
||||
jne no_red
|
||||
call draw_window
|
||||
jmp still
|
||||
no_red:
|
||||
|
||||
cmp eax,0
|
||||
je still
|
||||
|
||||
or eax,-1
|
||||
mcall
|
||||
|
||||
SCREEN equ 160
|
||||
PIXBUF equ 200h
|
||||
EYE equ EYE_P-2
|
||||
|
||||
|
||||
MAIN:
|
||||
|
||||
add bh,10;8
|
||||
mov edi,PIXBUF
|
||||
fadd dword [di-PIXBUF+TEXUV-4]
|
||||
push di
|
||||
mov dx,-80
|
||||
|
||||
TUBEY:
|
||||
|
||||
mov bp,-160
|
||||
|
||||
TUBEX:
|
||||
|
||||
mov si,TEXUV
|
||||
fild word [si-TEXUV+EYE]
|
||||
mov [si],bp
|
||||
fild word [si]
|
||||
mov [si],dx
|
||||
fild word [si]
|
||||
mov cl,2
|
||||
|
||||
ROTATE:
|
||||
|
||||
fld st3
|
||||
fsincos
|
||||
fld st2
|
||||
fmul st0,st1
|
||||
fld st4
|
||||
fmul st0,st3
|
||||
db 0xde,0xe9 ; fsubp st1,st0
|
||||
db 0xd9,0xcb ; fxch st3
|
||||
fmulp st2,st0
|
||||
fmulp st3,st0
|
||||
faddp st2,st0
|
||||
db 0xd9,0xca ; fxch st2
|
||||
|
||||
loop ROTATE
|
||||
|
||||
fld st1
|
||||
db 0xdc,0xc8 ; fmul st0,st
|
||||
fld st1
|
||||
db 0xdc,0xc8 ; fmul st0,st
|
||||
faddp st1,st0
|
||||
fsqrt
|
||||
db 0xde,0xfb ; fdivp st3,st0
|
||||
fpatan
|
||||
fimul word [si-4]
|
||||
fistp word [si]
|
||||
fimul word [si-4]
|
||||
fistp word [si+1]
|
||||
mov si,[si]
|
||||
|
||||
lea ax,[bx+si]
|
||||
add al,ah
|
||||
and al,64
|
||||
mov al,-5
|
||||
jz STORE_1
|
||||
|
||||
shl si,2
|
||||
lea ax,[bx+si]
|
||||
sub al,ah
|
||||
mov al,-16
|
||||
jns STORE_1
|
||||
|
||||
shl si,1
|
||||
mov al,-48
|
||||
|
||||
STORE_1:
|
||||
|
||||
; add al,[ebx+esi+0x80000]
|
||||
add [di],al
|
||||
inc di
|
||||
|
||||
inc bp
|
||||
cmp bp,160
|
||||
|
||||
EYE_P:
|
||||
|
||||
jnz TUBEX
|
||||
inc dx
|
||||
cmp dx,80
|
||||
jnz TUBEY
|
||||
|
||||
call display_image
|
||||
|
||||
pop si
|
||||
mov ch,SCREEN*320/256
|
||||
|
||||
BLUR:
|
||||
|
||||
inc si
|
||||
sar byte [si],2
|
||||
loop BLUR
|
||||
|
||||
ret
|
||||
|
||||
|
||||
|
||||
display_image:
|
||||
|
||||
pusha
|
||||
|
||||
mov esi,PIXBUF
|
||||
mov edi,0x10000
|
||||
newp:
|
||||
movzx edx,byte [esi]
|
||||
shl edx,4
|
||||
; mov dh,dl
|
||||
mov [edi],edx
|
||||
|
||||
add edi,3
|
||||
inc esi
|
||||
|
||||
cmp esi,320*160+PIXBUF
|
||||
jbe newp
|
||||
|
||||
mov eax,7
|
||||
mov ecx,320*65536+160
|
||||
xor edx,edx
|
||||
mov ebx,0x10000
|
||||
mcall
|
||||
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
|
||||
draw_window:
|
||||
|
||||
pusha
|
||||
|
||||
mcall 12, 1
|
||||
mcall 48, 4 ;get skin width
|
||||
lea ecx,[100*65536+164+eax]
|
||||
xor eax,eax
|
||||
mov ebx,100*65536+329
|
||||
mov edx,0x74000000
|
||||
mov edi,title
|
||||
mcall
|
||||
mcall 12, 2
|
||||
popa
|
||||
ret
|
||||
|
||||
title db appname,0
|
||||
|
||||
db 41,0,0xC3,0x3C
|
||||
|
||||
TEXUV:
|
||||
|
||||
init_tube:
|
||||
|
||||
mov ecx,256
|
||||
|
||||
PAL1:
|
||||
|
||||
mov dx,3C8h
|
||||
mov ax,cx
|
||||
inc dx
|
||||
sar al,1
|
||||
js PAL2
|
||||
mul al
|
||||
shr ax,6
|
||||
|
||||
PAL2:
|
||||
|
||||
mov al,0
|
||||
jns PAL3
|
||||
sub al,cl
|
||||
shr al,1
|
||||
shr al,1
|
||||
|
||||
PAL3:
|
||||
|
||||
mov bx,cx
|
||||
mov [ebx+0x1000],bh
|
||||
loop PAL1
|
||||
mov ecx,256
|
||||
|
||||
TEX:
|
||||
|
||||
mov bx,cx
|
||||
add ax,cx
|
||||
rol ax,cl
|
||||
mov dh,al
|
||||
sar dh,5
|
||||
adc dl,dh
|
||||
adc dl,[ebx+255+0x1000]
|
||||
shr dl,1
|
||||
mov [ebx+0x1000],dl
|
||||
not bh
|
||||
mov [ebx+0x1000],dl
|
||||
loop TEX
|
||||
|
||||
fninit
|
||||
fldz
|
||||
|
||||
ret
|
||||
|
||||
|
||||
I_END:
|
||||
|
||||
|
||||
|
||||
|
||||
267
programs/demos/tube/tube.asm
Normal file
@@ -0,0 +1,267 @@
|
||||
; SPDX-License-Identifier: GPL-2.0
|
||||
; Ported tube demo by VT
|
||||
; Copyright (C) 2001 Miloš Bazelides <baze@stonline.sk>
|
||||
; Copyright (C) 2006-2025 KolibriOS team
|
||||
|
||||
; Original comments:
|
||||
; 256b intro by baze/3SC for Syndeecate 2001
|
||||
; loveC: thanks, Serzh: eat my socks dude ;]
|
||||
; e-mail: baze@stonline.sk, web: www.3SC.sk
|
||||
|
||||
; Original source: https://baze.sk/3sc/files/tube.zip
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01'
|
||||
dd 1,START,image_end,memory_end,stacktop,0,0
|
||||
|
||||
include '../../macros.inc'
|
||||
include '../../KOSfuncs.inc'
|
||||
|
||||
title db 'Tube - FPU',0
|
||||
|
||||
SCREEN_W dd 600-10 ;10 px for borders
|
||||
SCREEN_H dd 400-10
|
||||
|
||||
align 4
|
||||
START:
|
||||
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||
call OnResize
|
||||
call draw_window
|
||||
fninit
|
||||
fldz
|
||||
push ebx
|
||||
|
||||
still:
|
||||
pop ebx
|
||||
call MAIN
|
||||
push ebx
|
||||
|
||||
mcall SF_WAIT_EVENT_TIMEOUT,1
|
||||
|
||||
cmp eax,EV_REDRAW
|
||||
jne no_red
|
||||
call draw_window
|
||||
jmp still
|
||||
no_red:
|
||||
|
||||
or eax,eax
|
||||
jz still
|
||||
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
align 4
|
||||
OnResize:
|
||||
mov ecx,[SCREEN_W]
|
||||
imul ecx,[SCREEN_H]
|
||||
;ecx = SCREEN_W*SCREEN_H
|
||||
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[PIXBUF]
|
||||
mov [PIXBUF],eax
|
||||
lea ecx,[ecx+2*ecx]
|
||||
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buf2]
|
||||
mov [buf2],eax
|
||||
ret
|
||||
|
||||
align 4
|
||||
MAIN:
|
||||
;edx - coord y
|
||||
;ebp - coord x
|
||||
;edi - pixel buffer
|
||||
add ebx,10 shl 8
|
||||
mov edi,[PIXBUF]
|
||||
fadd dword [TEXUV-4]
|
||||
push edi
|
||||
mov edx,[SCREEN_H]
|
||||
inc edx ;fix (height%2)==1
|
||||
shr edx,1
|
||||
neg edx ;edx=-SCREEN_H/2
|
||||
align 4
|
||||
TUBEY:
|
||||
mov ebp,[SCREEN_W]
|
||||
inc ebp ;fix (width%2)==1
|
||||
shr ebp,1
|
||||
neg ebp ;ebp=-SCREEN_W/2
|
||||
align 4
|
||||
TUBEX:
|
||||
mov esi,TEXUV
|
||||
fild dword [SCREEN_W]
|
||||
fld1
|
||||
fld1
|
||||
faddp
|
||||
fdivp ;st0=SCREEN_W/2
|
||||
mov [esi],ebp
|
||||
fild word [esi]
|
||||
mov [esi],edx
|
||||
fild word [esi]
|
||||
mov cl,2
|
||||
|
||||
ROTATE:
|
||||
fld st3
|
||||
fsincos
|
||||
fld st2
|
||||
fmul st0,st1
|
||||
fld st4
|
||||
fmul st0,st3
|
||||
fsubp st1,st0
|
||||
fxch st3
|
||||
fmulp st2,st0
|
||||
fmulp st3,st0
|
||||
faddp st2,st0
|
||||
fxch st2
|
||||
loop ROTATE
|
||||
|
||||
fld st1
|
||||
fmul st0,st0
|
||||
fld st1
|
||||
fmul st0,st0
|
||||
faddp st1,st0
|
||||
fsqrt
|
||||
|
||||
fdivp st3,st0
|
||||
fpatan
|
||||
fimul word [esi-4]
|
||||
fistp word [esi]
|
||||
fimul word [esi-4]
|
||||
fistp word [esi+1]
|
||||
mov esi,[esi]
|
||||
|
||||
lea eax,[ebx+esi]
|
||||
add al,ah
|
||||
and al,64
|
||||
mov al,-5
|
||||
jz STORE_1
|
||||
|
||||
shl esi,2
|
||||
lea eax,[ebx+esi]
|
||||
sub al,ah
|
||||
mov al,-16
|
||||
jns STORE_1
|
||||
|
||||
shl esi,1
|
||||
mov al,-48
|
||||
|
||||
STORE_1:
|
||||
; add al,[ebx+esi+0x80000]
|
||||
add [edi],al
|
||||
inc edi
|
||||
inc ebp
|
||||
mov eax,[SCREEN_W]
|
||||
shr eax,1 ;eax=SCREEN_W/2
|
||||
cmp ebp,eax
|
||||
|
||||
jnz TUBEX
|
||||
inc edx
|
||||
mov eax,[SCREEN_H]
|
||||
shr eax,1 ;eax=SCREEN_H/2
|
||||
cmp edx,eax
|
||||
jnz TUBEY
|
||||
|
||||
call display_image
|
||||
|
||||
pop esi ;esi=PIXBUF
|
||||
mov ecx,[SCREEN_W]
|
||||
imul ecx,[SCREEN_H]
|
||||
|
||||
align 4
|
||||
BLUR:
|
||||
sar byte [esi],2
|
||||
inc esi
|
||||
loop BLUR
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
display_image:
|
||||
pusha
|
||||
|
||||
mov esi,[PIXBUF]
|
||||
mov edi,[buf2]
|
||||
mov eax,[SCREEN_W]
|
||||
imul eax,[SCREEN_H]
|
||||
add eax,esi
|
||||
align 4
|
||||
newp:
|
||||
movzx edx,byte [esi]
|
||||
shl edx,4
|
||||
|
||||
mov word [edi],dx ;blue,green
|
||||
;shr edx,16
|
||||
;mov [edi+2],dl ;red - not used
|
||||
|
||||
add edi,3
|
||||
inc esi
|
||||
|
||||
cmp esi,eax
|
||||
jb newp
|
||||
|
||||
xor edx,edx
|
||||
mov ecx,[SCREEN_W]
|
||||
shl ecx,16
|
||||
add ecx,[SCREEN_H]
|
||||
mcall SF_PUT_IMAGE,[buf2]
|
||||
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
draw_window:
|
||||
pusha
|
||||
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
add eax,[SCREEN_H]
|
||||
lea ecx,[100*65536+4+eax]
|
||||
mov ebx,[SCREEN_W]
|
||||
add ebx,(100 shl 16)+9
|
||||
mcall SF_CREATE_WINDOW,,, 0x73000000,,title
|
||||
|
||||
mcall SF_THREAD_INFO,procinfo,-1
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
add eax,4
|
||||
sub eax,[procinfo.box.height]
|
||||
neg eax
|
||||
cmp eax,[SCREEN_H]
|
||||
je .end_h
|
||||
cmp eax,32 ;min height
|
||||
jge @f
|
||||
mov eax,32
|
||||
@@:
|
||||
mov [SCREEN_H],eax
|
||||
xor eax,eax
|
||||
mov [SCREEN_W],eax
|
||||
.end_h:
|
||||
|
||||
mov eax,[procinfo.box.width]
|
||||
sub eax,9
|
||||
cmp eax,[SCREEN_W]
|
||||
je .resize_end
|
||||
cmp eax,64 ;min width
|
||||
jge @f
|
||||
mov eax,64
|
||||
@@:
|
||||
mov [SCREEN_W],eax
|
||||
|
||||
call OnResize
|
||||
.resize_end:
|
||||
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
popa
|
||||
ret
|
||||
|
||||
align 4
|
||||
db 41,0,0xC3,0x3C
|
||||
TEXUV:
|
||||
rd 1
|
||||
|
||||
align 4
|
||||
image_end:
|
||||
|
||||
PIXBUF rd 1
|
||||
buf2 rd 1
|
||||
procinfo process_information
|
||||
|
||||
rb 1024
|
||||
align 4
|
||||
stacktop:
|
||||
memory_end:
|
||||
@@ -1,4 +1,4 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
tup.rule("unvwater.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o " .. tup.getconfig("KPACK_CMD"), "%B")
|
||||
@@ -1,142 +0,0 @@
|
||||
include 'proc32.inc'
|
||||
|
||||
macro start_draw_window x,y,xsize,ysize,areacolor,caption;,capsize
|
||||
{
|
||||
mov eax, 12 ; function 12:tell os about windowdraw
|
||||
mov ebx, 1 ; 1, start of draw
|
||||
int 0x40
|
||||
; DRAW WINDOW
|
||||
mov eax, 48 ; function 48.4 : get skin height
|
||||
mov ebx, 4
|
||||
int 0x40
|
||||
push eax
|
||||
lea ecx, [y*65536+ysize+eax]; [y start] *65536 + [y size] + [skin_height]
|
||||
xor eax, eax ; function 0 : define and draw window
|
||||
mov ebx, x*65536+xsize ; [x start] *65536 + [x size]
|
||||
mov edx, areacolor ; color of work area RRGGBB
|
||||
;mov esi, 0x00334455 ; color of grab bar RRGGBB
|
||||
mov edi, caption;0x00ddeeff ; color of frames RRGGBB
|
||||
int 0x40
|
||||
; WINDOW LABEL
|
||||
;mov eax, 4 ; function 4 : write text to window
|
||||
;mov ebx, 8*65536+8 ; [x start] *65536 + [y start]
|
||||
;mov ecx, 0x00ffffff ; color of text RRGGBB
|
||||
;mov edx, caption ; pointer to text beginning
|
||||
;mov esi, capsize ; text length
|
||||
;mov eax, 71 ; function 71.1
|
||||
;mov ebx, 1 ; set window caption
|
||||
;mov ecx, caption ; pointer to text
|
||||
;int 0x40
|
||||
pop eax
|
||||
}
|
||||
|
||||
macro end_draw_window
|
||||
{
|
||||
mov eax, 12 ; end of redraw
|
||||
mov ebx, 2
|
||||
int 0x40
|
||||
}
|
||||
|
||||
proc draw_button stdcall, x:dword, y:dword, xsize:dword, ysize:dword, \
|
||||
id:dword, butcolor:dword, text:dword, textlen:byte, textcolor:dword
|
||||
|
||||
;pusha
|
||||
mov ebx, dword [x]
|
||||
shl ebx, 16
|
||||
add ebx, dword [xsize] ; [x start] *65536 + [x size]
|
||||
|
||||
mov ecx, dword [y]
|
||||
shl ecx, 16
|
||||
add ecx, dword [ysize] ; [y start] *65536 + [y size]
|
||||
|
||||
mov edx, dword [id] ; button id
|
||||
mov esi, dword [butcolor] ; button color RRGGBB
|
||||
mov eax, 8 ; function 8 : define and draw button
|
||||
int 0x40
|
||||
|
||||
mov ebx, dword [x]
|
||||
add ebx, 5
|
||||
shl ebx, 16
|
||||
mov eax, dword [ysize]
|
||||
sub eax, 5
|
||||
shr eax, 1
|
||||
add ebx, eax
|
||||
add ebx, dword [y] ;mov ebx, (x+5)*65536+y+(ysize-5)/2 ; Draw button text
|
||||
|
||||
mov ecx, dword [textcolor]
|
||||
mov edx, dword [text]
|
||||
xor eax, eax
|
||||
mov al, byte [textlen]
|
||||
mov esi, eax
|
||||
mov eax, 4
|
||||
int 0x40
|
||||
;popa
|
||||
ret
|
||||
endp
|
||||
|
||||
macro outtextxy x,y,prompt,prompt_len,color
|
||||
{
|
||||
pusha
|
||||
mov ebx, x*65536+y ; draw info text with function 4
|
||||
mov ecx, color
|
||||
mov edx, prompt
|
||||
xor eax, eax
|
||||
mov al, prompt_len
|
||||
mov esi, eax
|
||||
mov eax, 4
|
||||
int 0x40
|
||||
popa
|
||||
}
|
||||
|
||||
;proc bar x:dword, y:dword, xsize:dword, ysize:dword, color:dword
|
||||
macro bar x, y, xsize, ysize, color
|
||||
{
|
||||
pusha
|
||||
mov eax, 13
|
||||
;mov ebx, [x]
|
||||
;shl ebx, 16
|
||||
;add ebx, [xsize]
|
||||
;mov ecx, [y]
|
||||
;shl ecx, 16
|
||||
;add ecx, [ysize]
|
||||
;mov edx, [color]
|
||||
mov ebx, x*65536+xsize
|
||||
mov ecx, y*65536+ysize
|
||||
mov edx, color
|
||||
|
||||
int 0x40
|
||||
popa
|
||||
;ret
|
||||
;endp
|
||||
}
|
||||
|
||||
macro line x1,y1,x2,y2,color
|
||||
{
|
||||
pusha
|
||||
mov eax, 38
|
||||
mov ebx, x1*65536+x2
|
||||
mov ecx, y1*65536+y2
|
||||
mov edx, color
|
||||
int 0x40
|
||||
popa
|
||||
}
|
||||
|
||||
macro rectangle x,y,xsize,ysize,color
|
||||
{
|
||||
x2=x+xsize
|
||||
y2=y+ysize
|
||||
line x,y,x2,y,color
|
||||
line x,y,x,y2,color
|
||||
line x,y2,x2,y2,color
|
||||
line x2,y,x2,y2,color
|
||||
}
|
||||
|
||||
macro putpixel x,y,color
|
||||
{
|
||||
mov eax, 1
|
||||
mov ebx, x
|
||||
mov ecx, y
|
||||
mov edx, color
|
||||
int 0x40
|
||||
}
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; A unvwater demo
|
||||
; Programmed by Octavio Vega Fernandez
|
||||
; http://octavio.vega.fernandez.googlepages.com/CV4.HTM
|
||||
; Converted to KolibriOS, By Asper
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
use32
|
||||
org 0x0
|
||||
|
||||
db 'MENUET01' ; header
|
||||
dd 1 ; version
|
||||
dd STARTAPP ; program start
|
||||
dd I_END ; program image size
|
||||
dd MEM ; size memory for program
|
||||
dd STACKTOP ; pointer of stack
|
||||
dd 0
|
||||
dd 0
|
||||
|
||||
;macro start_draw_window x,y,xsize,ysize,areacolor,caption;,capsize
|
||||
;{
|
||||
; mov eax, 12 ; function 12:tell os about windowdraw
|
||||
; mov ebx, 1 ; 1, start of draw
|
||||
; int 0x40
|
||||
; ; DRAW WINDOW
|
||||
; mov eax, 48 ; function 48.4 : get skin height
|
||||
; mov ebx, 4
|
||||
; int 0x40
|
||||
; push eax
|
||||
; lea ecx, [y*65536+ysize+eax]; [y start] *65536 + [y size] + [skin_height]
|
||||
; xor eax, eax ; function 0 : define and draw window
|
||||
; mov ebx, x*65536+xsize ; [x start] *65536 + [x size]
|
||||
; mov edx, areacolor ; color of work area RRGGBB
|
||||
; ;mov esi, 0x00334455 ; color of grab bar RRGGBB
|
||||
; mov edi, caption;0x00ddeeff ; color of frames RRGGBB
|
||||
; int 0x40
|
||||
; pop eax
|
||||
;}
|
||||
;
|
||||
;macro end_draw_window
|
||||
;{
|
||||
; mov eax, 12 ; end of redraw
|
||||
; mov ebx, 2
|
||||
; int 0x40
|
||||
;}
|
||||
|
||||
include "aspapi.inc"
|
||||
SCREEN_WIDTH equ 100h
|
||||
SCREEN_HEIGHT equ 100h
|
||||
|
||||
|
||||
STARTAPP:
|
||||
|
||||
mov eax, 18 ;Get CPU speed
|
||||
mov ebx, 5
|
||||
int 0x40
|
||||
shr eax, 28
|
||||
mov dword [delay], eax
|
||||
|
||||
init_palette:
|
||||
mov edi, Paleta
|
||||
;xor eax, eax
|
||||
mov eax, 0x40
|
||||
@@:
|
||||
stosd
|
||||
inc al
|
||||
jnz @b
|
||||
|
||||
MAIN:
|
||||
l1:
|
||||
xor esi, esi
|
||||
l11:
|
||||
xor ebx, ebx
|
||||
mov edx, 303h
|
||||
sub esi, 101h
|
||||
l2:
|
||||
and esi, 0xFFFF ;esi=si
|
||||
add bl, [esi+img]
|
||||
adc bh, ah
|
||||
inc esi
|
||||
dec dh
|
||||
jnz l2
|
||||
|
||||
mov dh, 3
|
||||
add esi, 100h-3
|
||||
dec dl
|
||||
jnz l2
|
||||
sub esi, 1ffh
|
||||
and esi, 0xFFFF ;esi=si
|
||||
|
||||
mov al, [img+esi]
|
||||
sub bx, ax
|
||||
shl ax, 2
|
||||
sub bx, ax
|
||||
shr bx, 2
|
||||
|
||||
mov ax, bx
|
||||
shr ax, 7
|
||||
sub bx, ax
|
||||
mov [img+esi], bl
|
||||
inc si
|
||||
jnz l11
|
||||
|
||||
call copy_buffer_to_video
|
||||
|
||||
|
||||
still:
|
||||
mov eax, 11 ; Test if there is an event in the queue.
|
||||
int 0x40
|
||||
|
||||
cmp al,1 ; redraw request ?
|
||||
jz red
|
||||
cmp al,2 ; key in buffer ?
|
||||
jz key
|
||||
cmp al,3 ; button in buffer ?
|
||||
jz button
|
||||
|
||||
jmp MAIN
|
||||
|
||||
red:
|
||||
call draw_window
|
||||
jmp MAIN
|
||||
|
||||
|
||||
key:
|
||||
mov eax, 2
|
||||
int 0x40
|
||||
cmp ah, 27 ; Test Esc in ASCII
|
||||
je close_app
|
||||
jmp MAIN
|
||||
|
||||
button:
|
||||
mov eax, 17 ; Get pressed button code
|
||||
int 0x40
|
||||
cmp ah, 1 ; Test x button
|
||||
je close_app
|
||||
jmp MAIN
|
||||
|
||||
draw_window:
|
||||
start_draw_window 100,70,SCREEN_WIDTH+9,SCREEN_HEIGHT+4,0x54224466,labelt;, 14;labellen-labelt
|
||||
mov dword [skin_h], eax
|
||||
end_draw_window
|
||||
ret
|
||||
|
||||
|
||||
fail:
|
||||
; Type something here.
|
||||
close_app:
|
||||
mov eax, -1 ; close this program
|
||||
int 0x40
|
||||
|
||||
|
||||
|
||||
copy_buffer_to_video:
|
||||
pusha
|
||||
; mov eax, 18 ;@WAITVSYNC();
|
||||
; mov ebx, 14
|
||||
; int 0x40
|
||||
mov eax, 5 ;delay
|
||||
mov ebx, dword [delay]
|
||||
int 0x40
|
||||
|
||||
mov eax, dword [skin_h]
|
||||
lea edx, [5*65536+eax]
|
||||
|
||||
mov eax, 65
|
||||
mov ebx, img
|
||||
mov ecx, SCREEN_WIDTH*65536+SCREEN_HEIGHT ;ecx = w*65536+h
|
||||
; mov edx, 5*65536+25 ;edx = x*65536+y
|
||||
mov esi, 8
|
||||
mov edi, Paleta
|
||||
xor ebp, ebp
|
||||
int 0x40
|
||||
popa
|
||||
ret
|
||||
|
||||
; DATA AREA
|
||||
|
||||
; Application Title
|
||||
labelt db 'UnvWater demo',0
|
||||
delay dd 0
|
||||
skin_h dd 25 ; Skin height.
|
||||
|
||||
I_END:
|
||||
Paleta rb 1024
|
||||
img db 1
|
||||
rb 10000h
|
||||
|
||||
rb 256
|
||||
STACKTOP:
|
||||
MEM:
|
||||
233
programs/demos/unvwater/unvwater.asm
Normal file
@@ -0,0 +1,233 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; Unvwater demo
|
||||
; Copyright (C) 2010-2025 KolibriOS team
|
||||
;
|
||||
; Initially programmed by Octavio Vega Fernandez (c) in OctASM
|
||||
; http://octavio.vega.fernandez.googlepages.com/CV4.HTM
|
||||
; Converted to FASM for KolibriOS by Asper
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
use32
|
||||
org 0x0
|
||||
|
||||
db 'MENUET01' ; header
|
||||
dd 1 ; version
|
||||
dd STARTAPP ; program start
|
||||
dd I_END ; program image size
|
||||
dd MEM ; size memory for program
|
||||
dd STACKTOP ; pointer of stack
|
||||
dd 0,0
|
||||
|
||||
|
||||
include '../../proc32.inc'
|
||||
include '../../macros.inc'
|
||||
include '../../KOSfuncs.inc'
|
||||
|
||||
Screen_W dd 600-10 ;10 px for borders
|
||||
Screen_H dd 400
|
||||
|
||||
align 4
|
||||
STARTAPP:
|
||||
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||
call OnResize
|
||||
mcall SF_SYSTEM, SSF_GET_CPU_FREQUENCY
|
||||
shr eax, 28
|
||||
mov dword [delay], eax
|
||||
|
||||
init_palette:
|
||||
mov edi, Paleta
|
||||
mov eax, 0x40
|
||||
@@:
|
||||
stosd
|
||||
inc al
|
||||
jnz @b
|
||||
|
||||
align 4
|
||||
MAIN:
|
||||
xor esi, esi
|
||||
mov edi, [img]
|
||||
mov ecx, [Screen_W]
|
||||
imul ecx, [Screen_H]
|
||||
l11:
|
||||
xor ebx, ebx
|
||||
mov edx, 303h
|
||||
sub esi, [Screen_W]
|
||||
dec esi
|
||||
l2:
|
||||
cmp esi,0
|
||||
jge @f
|
||||
add esi, ecx
|
||||
@@:
|
||||
cmp esi, ecx
|
||||
jl @f
|
||||
sub esi, ecx
|
||||
@@:
|
||||
|
||||
add bl, [esi+edi]
|
||||
adc bh, ah
|
||||
inc esi
|
||||
dec dh
|
||||
jnz l2
|
||||
|
||||
mov dh, 3
|
||||
add esi, [Screen_W]
|
||||
sub esi, 3
|
||||
dec dl
|
||||
jnz l2
|
||||
|
||||
sub esi, [Screen_W]
|
||||
sub esi, [Screen_W]
|
||||
inc esi
|
||||
cmp esi,0
|
||||
jge @f
|
||||
add esi, ecx
|
||||
@@:
|
||||
cmp esi, ecx
|
||||
jl @f
|
||||
sub esi, ecx
|
||||
@@:
|
||||
|
||||
mov al, [edi+esi]
|
||||
sub bx, ax
|
||||
shl ax, 2
|
||||
sub bx, ax
|
||||
shr bx, 2
|
||||
|
||||
mov ax, bx
|
||||
shr ax, 7
|
||||
sub bx, ax
|
||||
mov [edi+esi], bl
|
||||
inc esi
|
||||
|
||||
cmp esi, ecx
|
||||
jl l11
|
||||
|
||||
call copy_buffer_to_video
|
||||
|
||||
|
||||
still:
|
||||
mcall SF_CHECK_EVENT ; Test if there is an event in the queue.
|
||||
|
||||
cmp al,EV_REDRAW
|
||||
jz red
|
||||
cmp al,EV_KEY
|
||||
jz key
|
||||
cmp al,EV_BUTTON
|
||||
jz button
|
||||
|
||||
jmp MAIN
|
||||
|
||||
red:
|
||||
call draw_window
|
||||
jmp MAIN
|
||||
|
||||
|
||||
key:
|
||||
mcall SF_GET_KEY
|
||||
cmp ah, 27 ; Test Esc in ASCII
|
||||
je close_app
|
||||
jmp MAIN
|
||||
|
||||
button:
|
||||
mcall SF_GET_BUTTON ; Get pressed button code
|
||||
cmp ah, 1 ; Test x button
|
||||
je close_app
|
||||
jmp MAIN
|
||||
|
||||
align 4
|
||||
draw_window:
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
mov [skin_h], eax
|
||||
lea ecx, [70*65536+4+eax]
|
||||
add ecx, [Screen_H] ; [y start] *65536 + [y size] + [skin_height]
|
||||
mov ebx, 100 shl 16
|
||||
add ebx, [Screen_W]
|
||||
add ebx, 9
|
||||
mov edi, labelt
|
||||
mcall SF_CREATE_WINDOW,,, 0x53224466
|
||||
|
||||
mcall SF_THREAD_INFO,procinfo,-1
|
||||
mov eax, [skin_h]
|
||||
add eax, 4
|
||||
sub eax, [procinfo.box.height]
|
||||
neg eax
|
||||
cmp eax, [Screen_H]
|
||||
je .end_h
|
||||
cmp eax,32 ;min height
|
||||
jge @f
|
||||
mov eax,32
|
||||
@@:
|
||||
mov [Screen_H],eax
|
||||
xor eax,eax
|
||||
mov [Screen_W],eax
|
||||
.end_h:
|
||||
|
||||
mov eax,[procinfo.box.width]
|
||||
sub eax,9
|
||||
cmp eax,[Screen_W]
|
||||
je .resize_end
|
||||
cmp eax,64 ;min width
|
||||
jge @f
|
||||
mov eax,64
|
||||
@@:
|
||||
mov [Screen_W],eax
|
||||
|
||||
call OnResize
|
||||
.resize_end:
|
||||
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
ret
|
||||
|
||||
|
||||
fail:
|
||||
; Type something here.
|
||||
close_app:
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
align 4
|
||||
OnResize:
|
||||
mov ecx,[Screen_W]
|
||||
imul ecx,[Screen_H]
|
||||
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[img]
|
||||
mov byte[eax],1 ; set the coordinate of the start of the first wave:
|
||||
; eax+0 -> point(0,0), eax+H*W+W -> point(W,H)
|
||||
mov [img],eax
|
||||
ret
|
||||
|
||||
align 4
|
||||
copy_buffer_to_video:
|
||||
pusha
|
||||
;mcall SF_SYSTEM, SSF_WAIT_RETRACE
|
||||
mcall SF_SLEEP, [delay]
|
||||
|
||||
mov eax, [skin_h]
|
||||
lea edx, [5*65536+eax]
|
||||
|
||||
mov ecx, [Screen_W]
|
||||
shl ecx, 16
|
||||
add ecx, [Screen_H]
|
||||
;mov edx, 5*65536+25 ;edx = x*65536+y
|
||||
mov esi, 8
|
||||
mov edi, Paleta
|
||||
xor ebp, ebp
|
||||
mcall SF_PUT_IMAGE_EXT, [img]
|
||||
popa
|
||||
ret
|
||||
|
||||
; DATA AREA
|
||||
|
||||
; Application Title
|
||||
labelt db 'UnvWater demo',0
|
||||
delay dd 0
|
||||
skin_h dd 25 ; Skin height.
|
||||
|
||||
I_END:
|
||||
Paleta rb 1024
|
||||
img dd 0
|
||||
procinfo process_information
|
||||
rb 256
|
||||
align 4
|
||||
STACKTOP:
|
||||
MEM:
|
||||
@@ -601,6 +601,8 @@ edit_box_mouse:
|
||||
jnz edit_box_mouse.mouse_left_button
|
||||
and word ed_flags,ed_mouse_on_off
|
||||
mov ebx,ed_mouse_variable
|
||||
or ebx,ebx
|
||||
jz edit_box_exit
|
||||
push 0
|
||||
pop dword [ebx]
|
||||
jmp edit_box_exit
|
||||
@@ -610,13 +612,14 @@ edit_box_mouse:
|
||||
;--- ¡«®ª¨à®¢ª ®â 䮪ãá¨à®¢ª¨ ¢ ¤àã£¨å ¡®ªá å ¯à¨ ¯®¯ ¤ ¨¨ ¨å ªãàá®à
|
||||
;----------------------------------------------------------
|
||||
mov eax,ed_mouse_variable
|
||||
test eax,eax
|
||||
jz @f ;¥á«¨ ed_mouse_variable=0
|
||||
push dword [eax]
|
||||
pop eax
|
||||
test eax,eax
|
||||
jz @f
|
||||
jz @f ;¥á«¨ [ed_mouse_variable]=0
|
||||
cmp eax,edi
|
||||
je @f
|
||||
jmp edit_box_mouse._blur
|
||||
jne edit_box_mouse._blur
|
||||
;----------------------------------------------------------
|
||||
;--- ¯®«ãç ¥¬ ª®®à¤¨ âë ¬ëè¨ ®â®á¨â¥«ì® 0 â.¥ ¢á¥© ®¡« á⨠íªà
|
||||
;----------------------------------------------------------
|
||||
@@ -672,8 +675,11 @@ edit_box_mouse._mshift:
|
||||
or word ed_flags,ed_mouse_on
|
||||
mov ed_pos,eax
|
||||
mov ebx,ed_mouse_variable
|
||||
or ebx,ebx
|
||||
jz edit_box_mouse.mv_end
|
||||
push edi
|
||||
pop dword [ebx]
|
||||
edit_box_mouse.mv_end:
|
||||
bts word ed_flags,1
|
||||
call edit_box_draw.bg
|
||||
jmp edit_box_mouse.m_sh
|
||||
|
||||
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 106 KiB |
@@ -1675,6 +1675,14 @@ proc generate_window_header
|
||||
mov eax, [ebx+Image.Height]
|
||||
call bin2dec
|
||||
|
||||
mov eax, [ebx+Image.Type]
|
||||
dec eax
|
||||
shl eax, 2
|
||||
add eax, BppTypeNames
|
||||
mov eax, [eax]
|
||||
mov dword[edi], eax
|
||||
add edi, 4
|
||||
|
||||
mov byte[edi], ')'
|
||||
inc edi
|
||||
|
||||
@@ -2544,6 +2552,18 @@ db 'XBM',0
|
||||
.end:
|
||||
db 0
|
||||
|
||||
BppTypeNames:
|
||||
db '@08b'
|
||||
db '@24b'
|
||||
db '@32b'
|
||||
db '@15b'
|
||||
db '@16b'
|
||||
db '@01b'
|
||||
db '@8gr'
|
||||
db '@02b'
|
||||
db '@04b'
|
||||
db '@08a'
|
||||
|
||||
draw_window_fake:
|
||||
ret
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
draw_palitra:
|
||||
; ”ãªæ¨ï 13 - à¨á®¢ âì ¯àאַ㣮«ì¨ª
|
||||
;mcall SF_DRAW_RECT, 110 shl 16+148, 9 shl 16+148, [sc.work]
|
||||
;mcall SF_DRAW_RECT, PALITRA_XW, PALITRA_YW, [sc.work]
|
||||
|
||||
cmp [renmode],2
|
||||
cmp [renmode],MODE_PIPET
|
||||
je cyrcle_draw
|
||||
;cmp [renmode],1
|
||||
;je picker_draw
|
||||
cmp [renmode],0
|
||||
cmp [renmode],MODE_PALITRA
|
||||
je sheme_draw
|
||||
ret
|
||||
|
||||
@@ -39,6 +39,15 @@ draw_palitra:
|
||||
;mov ebx,109*65536+150
|
||||
;mov ecx, 10*65536+150
|
||||
;mcall
|
||||
|
||||
PIPET_CELLW = 13
|
||||
PIPET_AREA_W = PIPET_CELLW*PIPET_CELL_COUNT_X
|
||||
PIPET_AREA_H = PIPET_CELLW*PIPET_CELL_COUNT_Y
|
||||
PIPET_CELL_COUNT_X = 15
|
||||
PIPET_CELL_COUNT_Y = 13
|
||||
PIPET_SELECTED_X = PIPET_AREA_W/2+PALITRA_X
|
||||
PIPET_SELECTED_Y = PIPET_AREA_H/2+DRAWY+2
|
||||
|
||||
call mouse_local ; ¯®«ãç ¥¬ ª®®à¤¨ âë ¬ëè¨ ®â®á¨â¥«ì® ®ª
|
||||
mov ecx, [mouse_x] ; § ®á¨¬ ¢ ॣ¨áâà
|
||||
mov edx, [mouse_y] ; § ®á¨¬ ¢ ॣ¨áâà
|
||||
@@ -52,38 +61,39 @@ draw_palitra:
|
||||
call desktop_get
|
||||
call mouse_global
|
||||
|
||||
mov ebx,112*65536+11
|
||||
mov ebx,PALITRA_X*65536+PIPET_CELLW
|
||||
mov esi,0 ; counter=8
|
||||
circle_loop:
|
||||
mov ecx, 10*65536+11
|
||||
mov ecx, (DRAWY+1)*65536+PIPET_CELLW
|
||||
mov edi,0
|
||||
circle_loop2:
|
||||
call circle_pixel_read
|
||||
mcall SF_DRAW_RECT
|
||||
add ecx,11 shl 16
|
||||
add ecx,PIPET_CELLW shl 16
|
||||
inc edi
|
||||
cmp edi,13
|
||||
cmp edi,PIPET_CELL_COUNT_Y
|
||||
jne circle_loop2
|
||||
|
||||
add ebx,11 shl 16
|
||||
add ebx,PIPET_CELLW shl 16
|
||||
inc esi
|
||||
cmp esi,13
|
||||
cmp esi,PIPET_CELL_COUNT_X
|
||||
jne circle_loop
|
||||
|
||||
mcall SF_DRAW_RECT, 177*65536+13, 76*65536+13, 0
|
||||
mcall SF_DRAW_RECT, <PIPET_SELECTED_X-10, PIPET_CELLW+4>, <PIPET_SELECTED_Y-10, PIPET_CELLW+4>, 0xFF0000
|
||||
mov ecx, [mouse_x]
|
||||
mov edx, [mouse_y]
|
||||
inc ecx
|
||||
inc ecx
|
||||
inc edx
|
||||
mov ebx, edx
|
||||
imul ebx, [desctop_w]
|
||||
add ebx, ecx
|
||||
mcall SF_GET_PIXEL
|
||||
mov edx,eax
|
||||
mcall SF_DRAW_RECT, 178*65536+11, 77*65536+11
|
||||
mcall SF_DRAW_RECT, <PIPET_SELECTED_X-8, PIPET_CELLW>, <PIPET_SELECTED_Y-8, PIPET_CELLW>
|
||||
ret
|
||||
end_cyrcle_draw:
|
||||
mcall SF_DRAW_RECT, 111*65536+145, 9*65536+145, 0x666666
|
||||
mcall SF_DRAW_RECT, <PALITRA_X-1, PIPET_AREA_W+2>, <DRAWY, PIPET_AREA_H+2>, [sc.work_graph]
|
||||
ret
|
||||
|
||||
circle_pixel_read:
|
||||
@@ -124,20 +134,20 @@ draw_palitra:
|
||||
sheme_draw:
|
||||
mov eax,SF_DRAW_RECT ; ”ãªæ¨ï 13 - à¨á®¢ âì ¯àאַ㣮«ì¨ª
|
||||
mov edx,0x222222 ; 梥â
|
||||
mov ecx, palitra_yw ; <EFBFBD> ç «ìë¥ ª®®à¤¨ âë ¯® y [ª-â y]*65536 + [à §¬¥à]
|
||||
mov ecx, PALITRA_YW ; <EFBFBD> ç «ìë¥ ª®®à¤¨ âë ¯® y [ª-â y]*65536 + [à §¬¥à]
|
||||
mov esi,2 ; ‘ç¥â稪 «¨¨© ¯®¤«®¦¥ª
|
||||
re_draw:
|
||||
mov ebx,palitra_xw ; <EFBFBD> ç «ìë¥ ª®®à¤¨ âë ¯® x [ª-â x]*65536 + [à §¬¥à]
|
||||
mov ebx,PALITRA_XW ; <EFBFBD> ç «ìë¥ ª®®à¤¨ âë ¯® x [ª-â x]*65536 + [à §¬¥à]
|
||||
mov edi,2 ; ‘ç¥â稪 ª®«¨ç¥á⢠¯®¤«®¦¥ª
|
||||
for_fon_loop:
|
||||
int 0x40 ; <EFBFBD>à¥àë¢ ¨¥
|
||||
add ebx,(palitra_w+2) shl 16 ; ‘¬¥é ¥¬ ¯®«®¦¥¨¥ «¨¨¨ ¯® å
|
||||
add ebx,(PALITRA_W+2) shl 16 ; ‘¬¥é ¥¬ ¯®«®¦¥¨¥ «¨¨¨ ¯® å
|
||||
dec edi ; “¬¥ìè ¥¬ áç¥â稪 ª®¯®ª
|
||||
cmp edi,0 ; ‘à ¢¨¢ ¥¬ á ã«¥¬
|
||||
jnz for_fon_loop ; …᫨ ¥ ®«ì â® ¢ ç «® 横«
|
||||
dec esi ; “¬¥ìè ¥¬ ¥£®
|
||||
cmp esi,0 ; ‘à ¢¨¢ ¥¬ á ã«¥¬
|
||||
mov ecx,(palitra_w+DRAWY+3) shl 16+palitra_w ; <EFBFBD> ç «ìë¥ ª®®à¤¨ âë ¯® y [ª-â y]*65536 + [à §¬¥à]
|
||||
mov ecx,(PALITRA_W+DRAWY+3) shl 16+PALITRA_W ; <EFBFBD> ç «ìë¥ ª®®à¤¨ âë ¯® y [ª-â y]*65536 + [à §¬¥à]
|
||||
jnz re_draw ; …᫨ ¥ ®«ì â® ¢ ç «® 横«
|
||||
|
||||
;.................................................................................................
|
||||
@@ -146,12 +156,12 @@ draw_palitra:
|
||||
mov eax,SF_DRAW_RECT ; ”ãªæ¨ï 13 - à¨á®¢ âì ¯àאַ㣮«ì¨ª
|
||||
mov edx,0x0FFFFFFF ; 梥â
|
||||
mov esi,4 ; ‘ç¥â稪 ª®«¨ç¥á⢠¡§ 楢 (#4,8)
|
||||
mov ebx,(palitra_x-CELLW-3) shl 16+CELLW ; <EFBFBD> ç «ìë¥ ª®®à¤¨ âë ¯® x [ª-â x]*65536 + [à §¬¥à]
|
||||
mov ebx,(PALITRA_X-CELLW-3) shl 16+CELLW ; <EFBFBD> ç «ìë¥ ª®®à¤¨ âë ¯® x [ª-â x]*65536 + [à §¬¥à]
|
||||
for_abz:
|
||||
;;push esi ; ‘®åà 塞 § 票¥ áç¥â稪 «¨¨© ¢ á⥪
|
||||
cmp esi,2
|
||||
jne x2_line
|
||||
mov ebx,(palitra_x-CELLW-3) shl 16+CELLW
|
||||
mov ebx,(PALITRA_X-CELLW-3) shl 16+CELLW
|
||||
x2_line:
|
||||
add ebx,3 shl 16 ; ‘¬¥é ¥¬ ¯®«®¦¥¨¥ «¨¨¨ ¯® x
|
||||
mov edi,8 ; ‘ç¥â稪 ª®«¨ç¥á⢠ª®¯®ª ¢ áâப¥
|
||||
@@ -161,7 +171,7 @@ draw_palitra:
|
||||
mov ecx, (1-CELLW/3) shl 16+CELLW ; <EFBFBD> ç «ìë¥ ª®®à¤¨ âë ¯® y [ª-â y]*65536 + [à §¬¥à]
|
||||
cmp esi,2
|
||||
jg y2_line ; …᫨ ¡®«ìè¥ 4 â® ¨£®à¨¬
|
||||
mov ecx,(palitra_w+4-(CELLW/3)) shl 16+CELLW
|
||||
mov ecx,(PALITRA_W+4-(CELLW/3)) shl 16+CELLW
|
||||
y2_line:
|
||||
add ebx,(CELLW+1) shl 16 ; ‘¬¥é ¥¬ ¯®«®¦¥¨¥ «¨¨¨ ¯® x
|
||||
for_loop:
|
||||
|
||||