2 Commits

Author SHA1 Message Date
b5ff84abe1 Docs: Added GNU GPL v2.0
Source: https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt

Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
2025-03-12 01:02:11 +03:00
3cc3fa6689 Docs: Added README and contributing guide
Co-authored-by: Burer
Signed-off-by: Max Logaev <maxlogaev@proton.me>
2025-03-12 00:29:48 +03:00
107 changed files with 3536 additions and 3232 deletions

View File

@@ -1,213 +0,0 @@
# SPDX-License-Identifier: GPL-2.0-only
# SPDX-FileCopyrightText: 2025 KolibriOS team
name: 'Build system'
on:
pull_request:
branches:
- 'main'
jobs:
codestyle:
name: "Check kernel codestyle"
runs-on: kolibri-toolchain
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check codestyle
run: |
find kernel/trunk -iname '*.asm' -or -iname '*.inc' -exec bash -c "echo {}; cat {} | perl .gitea/workflows/checker.pl" \;
build:
name: 'Build'
runs-on: kolibri-toolchain
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get describe
id: vars
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITEA_OUTPUT
- name: Get toolchain hash
id: toolchain-hash
run: |
a=$(find ${{ gitea.workspace }}/programs/develop/cmm/ -type f -print0 | sort -z | xargs -0 sha1sum)
b=$(sha1sum ${{ gitea.workspace }}/programs/develop/ktcc/trunk/bin/kos32-tcc)
c=$(find ${{ gitea.workspace }}/programs/develop/objconv/ -type f -print0 | sort -z | xargs -0 sha1sum)
d=$(find ${{ gitea.workspace }}/programs/other/kpack/kerpack_linux/ -type f -print0 | sort -z | xargs -0 sha1sum)
e=$(find ${{ gitea.workspace }}/programs/other/kpack/linux/ -type f -print0 | sort -z | xargs -0 sha1sum)
f=$(find ${{ gitea.workspace }}/programs/develop/clink/ -type f -print0 | sort -z | xargs -0 sha1sum)
echo hash=$(echo $a $b $c $d $e $f | sha1sum | awk '{print $1}') >> $GITEA_OUTPUT
- name: Restore toolchain
id: cache-toolchain
uses: actions/cache/restore@v4
with:
path: /home/autobuild
key: kolibri-toolchain-${{ steps.toolchain-hash.outputs.hash }}
- name: Build and install C--
if: steps.cache-toolchain.outputs.cache-hit != 'true'
run: |
cd ${{ gitea.workspace }}/programs/develop/cmm/
make -f Makefile.lin32
chmod +x c--
mv c-- /home/autobuild/tools/win32/bin/c--
cp ${{ gitea.workspace }}/programs/cmm/c--/c--.ini /home/autobuild/tools/win32/bin/c--.ini
make -f Makefile.lin32 clean
- name: Install TCC
if: steps.cache-toolchain.outputs.cache-hit != 'true'
run: |
cp ${{ gitea.workspace }}/programs/develop/ktcc/trunk/bin/kos32-tcc /home/autobuild/tools/win32/bin/kos32-tcc
chmod +x /home/autobuild/tools/win32/bin/kos32-tcc
- name: Build and install objconv
if: steps.cache-toolchain.outputs.cache-hit != 'true'
run: |
cd ${{ gitea.workspace }}/programs/develop/objconv/
g++ -o /home/autobuild/tools/win32/bin/objconv -O2 *.cpp
chmod +x /home/autobuild/tools/win32/bin/objconv
- name: Build and install kerpack
if: steps.cache-toolchain.outputs.cache-hit != 'true'
run: |
cd ${{ gitea.workspace }}/programs/other/kpack/kerpack_linux/
make
chmod +x kerpack
mv kerpack /home/autobuild/tools/win32/bin/.
- name: Build and install kpack
if: steps.cache-toolchain.outputs.cache-hit != 'true'
run: |
cd ${{ gitea.workspace }}/programs/other/kpack/linux/
bash build.sh
chmod +x kpack
mv kpack /home/autobuild/tools/win32/bin/.
- name: Build and install clink
if: steps.cache-toolchain.outputs.cache-hit != 'true'
run: |
cd ${{ gitea.workspace }}/programs/develop/clink
gcc main.c -o clink
chmod a+x clink
mv clink /home/autobuild/tools/win32/bin/clink
- name: Prepare cache folder
run: |
rm /home/autobuild
mv /root/autobuild /home/autobuild
if: steps.cache-toolchain.outputs.cache-hit != 'true'
- name: Save toolchain
if: steps.cache-toolchain.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: /home/autobuild
key: kolibri-toolchain-${{ steps.toolchain-hash.outputs.hash }}
- name: Configure tup
run: |
cd ${{ gitea.workspace }}
export ROOT=${{ gitea.workspace }}
echo "CONFIG_KPACK_CMD= && kpack --nologo %o" | tee en_US.config ru_RU.config es_ES.config
echo "CONFIG_KERPACK_CMD= && kerpack %o" | tee -a en_US.config ru_RU.config es_ES.config
echo "CONFIG_PESTRIP_CMD= && EXENAME=%o fasm $ROOT/data/common/pestrip.asm %o" | tee -a en_US.config ru_RU.config es_ES.config
echo "CONFIG_NO_MSVC=full" | tee -a en_US.config ru_RU.config es_ES.config
echo "CONFIG_INSERT_REVISION_ID=1" | tee -a en_US.config ru_RU.config es_ES.config
tup -v
tup init
# Configure en_US
echo "CONFIG_LANG=en_US" >> en_US.config
echo "CONFIG_BUILD_TYPE=en_US" >> en_US.config
tup variant en_US.config
# Configure ru_RU
echo "CONFIG_LANG=ru_RU" >> ru_RU.config
echo "CONFIG_BUILD_TYPE=ru_RU" >> ru_RU.config
tup variant ru_RU.config
# Configure es_ES
echo "CONFIG_LANG=es_ES" >> es_ES.config
echo "CONFIG_BUILD_TYPE=es_ES" >> es_ES.config
tup variant es_ES.config
# -------------------------- Build en_US ------------------------- #
- name: (en_US) Build KolibriOS
run: |
export PATH=/home/autobuild/tools/win32/bin:$PATH
tup build-en_US
- name: (en_US) Upload floppy image
uses: actions/upload-artifact@v3
with:
name: kolibrios-en_US-${{ steps.vars.outputs.sha_short }}.img
path: build-en_US/data/kolibri.img
- name: (en_US) Upload CD image
uses: actions/upload-artifact@v3
with:
name: kolibrios-en_US-${{ steps.vars.outputs.sha_short }}.iso
path: build-en_US/data/kolibri.iso
- name: (en_US) Upload raw image
uses: actions/upload-artifact@v3
with:
name: kolibrios-en_US-${{ steps.vars.outputs.sha_short }}.raw
path: build-en_US/data/kolibri.raw
# -------------------------- Build ru_RU ------------------------- #
- name: (ru_RU) Build KolibriOS
run: |
export PATH=/home/autobuild/tools/win32/bin:$PATH
tup build-ru_RU
- name: (ru_RU) Upload floppy image
uses: actions/upload-artifact@v3
with:
name: kolibrios-ru_RU-${{ steps.vars.outputs.sha_short }}.img
path: build-ru_RU/data/kolibri.img
- name: (ru_RU) Upload CD image
uses: actions/upload-artifact@v3
with:
name: kolibrios-ru_RU-${{ steps.vars.outputs.sha_short }}.iso
path: build-ru_RU/data/kolibri.iso
- name: (ru_RU) Upload raw image
uses: actions/upload-artifact@v3
with:
name: kolibrios-ru_RU-${{ steps.vars.outputs.sha_short }}.raw
path: build-ru_RU/data/kolibri.raw
# -------------------------- Build es_ES ------------------------- #
- name: (es_ES) Build KolibriOS
run: |
export PATH=/home/autobuild/tools/win32/bin:$PATH
tup build-es_ES
- name: (es_ES) Upload floppy image
uses: actions/upload-artifact@v3
with:
name: kolibrios-es_ES-${{ steps.vars.outputs.sha_short }}.img
path: build-es_ES/data/kolibri.img
- name: (es_ES) Upload CD image
uses: actions/upload-artifact@v3
with:
name: kolibrios-es_ES-${{ steps.vars.outputs.sha_short }}.iso
path: build-es_ES/data/kolibri.iso
- name: (es_ES) Upload raw image
uses: actions/upload-artifact@v3
with:
name: kolibrios-es_ES-${{ steps.vars.outputs.sha_short }}.raw
path: build-es_ES/data/kolibri.raw

File diff suppressed because one or more lines are too long

View File

@@ -1,82 +0,0 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-only
# SPDX-FileCopyrightText: 2025 KolibriOS Team
# Written by mxlgv (Maxim Logaev)
# Installation steps described by maxcodehack (Maxim Kuzmitsky)
set -e
print_msg(){
echo -e "\e[34m$1\e[0m"
}
print_ok(){
echo -e "\e[32m$1\e[0m"
}
print_err(){
echo -e "\e[31m$1\e[0m"
exit
}
check_utils(){
printf "%s: " $1
if command -v $1 &> /dev/null
then
print_ok "ok\r"
else
print_err "no\r"
fi
}
print_msg "Checking utilities..."
check_utils wget
check_utils 7z
print_msg "Create the /home/autobuild folder..."
sudo rm -rf ~/autobuild /home/autobuild
mkdir -p ~/autobuild/tools
sudo ln -sf ~/autobuild /home/autobuild
print_ok "Successfully!"
print_msg "Download the kos32-gcc toolchain..."
wget http://ftp.kolibrios.org/users/Serge/new/Toolchain/x86_64-linux-kos32-5.4.0.7z -O ~/autobuild/tools/kos32-toolchain.7z
print_ok "Successfully!"
print_msg "Extracting files ..."
cd ~/autobuild/tools/
7z x -y kos32-toolchain.7z
rm -rf kos32-toolchain.7z
print_ok "Successfully!"
print_msg "Downloading libisl..."
cd /tmp
sudo wget http://board.kolibrios.org/download/file.php?id=8301libisl.so.10.2.2.7z -O /tmp/libisl.so.10.2.2.7z
sudo 7z x -y libisl.so.10.2.2.7z
if ! [ -d /usr/lib/x86_64-linux-gnu/ ]; then
sudo mkdir -p /usr/lib/x86_64-linux-gnu/
fi
print_msg "Fixing libisl..."
sudo mv /tmp/libisl.so.10.2.2 /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2
sudo ln -sf /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2 /usr/lib/x86_64-linux-gnu/libisl.so.10
sudo ln -sf /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2 /usr/lib/libisl.so.10
sudo chmod go-w /usr/lib/x86_64-linux-gnu/libisl.so.10
sudo chmod go-w /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2
print_ok "Successfully!"
print_msg "Fixing libmpfr..."
sudo ln -sf /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
sudo ln -sf /usr/lib/libmpfr.so.6 /usr/lib/libmpfr.so.4
print_ok "Successfully!"
if ! grep -q 'export PATH=$PATH:/home/autobuild/tools/win32/bin' ~/.bashrc; then
export PATH=$PATH:/home/autobuild/tools/win32/bin
print_msg "Adding '/home/autobuild/tools/win32/bin' to '~/.bashrc'"
echo 'export PATH=$PATH:/home/autobuild/tools/win32/bin' >> ~/.bashrc
fi
print_ok "Installation was successful!"

View File

@@ -407,7 +407,6 @@ tup.append_table(img_files, {
{"@SS", VAR_PROGS .. "/system/scrsaver/scrsaver"}, {"@SS", VAR_PROGS .. "/system/scrsaver/scrsaver"},
{"@VOLUME", VAR_PROGS .. "/media/volume/volume"}, {"@VOLUME", VAR_PROGS .. "/media/volume/volume"},
{"HACONFIG", VAR_PROGS .. "/other/ha/HACONFIG"}, {"HACONFIG", VAR_PROGS .. "/other/ha/HACONFIG"},
{"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"},
{"APM", VAR_PROGS .. "/system/apm/apm"}, {"APM", VAR_PROGS .. "/system/apm/apm"},
{"CALC", VAR_PROGS .. "/other/calc/trunk/calc"}, {"CALC", VAR_PROGS .. "/other/calc/trunk/calc"},
{"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/calendar"}, {"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/calendar"},
@@ -442,8 +441,6 @@ tup.append_table(img_files, {
{"TERMINAL", VAR_PROGS .. "/system/terminal/terminal"}, {"TERMINAL", VAR_PROGS .. "/system/terminal/terminal"},
{"TEST", VAR_PROGS .. "/testing/protection/trunk/test"}, {"TEST", VAR_PROGS .. "/testing/protection/trunk/test"},
{"TINYPAD", VAR_PROGS .. "/develop/tinypad/trunk/tinypad"}, {"TINYPAD", VAR_PROGS .. "/develop/tinypad/trunk/tinypad"},
{"TINFO", VAR_PROGS .. "/system/tinfo/tinfo"},
{"TIMER", VAR_PROGS .. "/other/Timer/Timer"},
{"UNZ", VAR_PROGS .. "/fs/unz/unz"}, {"UNZ", VAR_PROGS .. "/fs/unz/unz"},
{"ZKEY", VAR_PROGS .. "/system/zkey/trunk/ZKEY"}, {"ZKEY", VAR_PROGS .. "/system/zkey/trunk/ZKEY"},
{"3D/3DWAV", VAR_PROGS .. "/demos/3dwav/trunk/3dwav"}, {"3D/3DWAV", VAR_PROGS .. "/demos/3dwav/trunk/3dwav"},
@@ -466,28 +463,27 @@ tup.append_table(img_files, {
{"DEMOS/UNVWATER", VAR_PROGS .. "/demos/unvwater/trunk/unvwater"}, {"DEMOS/UNVWATER", VAR_PROGS .. "/demos/unvwater/trunk/unvwater"},
{"DEMOS/WEB", VAR_PROGS .. "/demos/web/trunk/web"}, {"DEMOS/WEB", VAR_PROGS .. "/demos/web/trunk/web"},
{"DEMOS/ZEROLINE", VAR_PROGS .. "/demos/zeroline/trunk/zeroline"}, {"DEMOS/ZEROLINE", VAR_PROGS .. "/demos/zeroline/trunk/zeroline"},
{"DEVELOP/ASCIIVJU", VAR_PROGS .. "/develop/asciivju/trunk/asciivju"},
{"DEVELOP/BOARD", VAR_PROGS .. "/system/board/trunk/board"}, {"DEVELOP/BOARD", VAR_PROGS .. "/system/board/trunk/board"},
{"DEVELOP/DBGBOARD", VAR_PROGS .. "/system/dbgboard/dbgboard"},
{"DEVELOP/CEDIT", SRC_PROGS .. "/develop/cedit/CEDIT"}, {"DEVELOP/CEDIT", SRC_PROGS .. "/develop/cedit/CEDIT"},
{"DEVELOP/CHARSETS", VAR_PROGS .. "/develop/charsets/charsets"},
{"DEVELOP/COBJ", VAR_PROGS .. "/develop/cObj/trunk/cObj"}, {"DEVELOP/COBJ", VAR_PROGS .. "/develop/cObj/trunk/cObj"},
{"DEVELOP/ENTROPYV", VAR_PROGS .. "/develop/entropyview/entropyview"}, {"DEVELOP/ENTROPYV", VAR_PROGS .. "/develop/entropyview/entropyview"},
{"DEVELOP/FASM", VAR_PROGS .. "/develop/fasm/1.73/fasm"}, {"DEVELOP/FASM", VAR_PROGS .. "/develop/fasm/1.73/fasm"},
{"DEVELOP/GENFILES", VAR_PROGS .. "/testing/genfiles/GenFiles"},
{"DEVELOP/H2D2B", VAR_PROGS .. "/develop/h2d2b/trunk/h2d2b"}, {"DEVELOP/H2D2B", VAR_PROGS .. "/develop/h2d2b/trunk/h2d2b"},
{"DEVELOP/HEED", VAR_PROGS .. "/develop/heed/trunk/heed"}, {"DEVELOP/HEED", VAR_PROGS .. "/develop/heed/trunk/heed"},
{"DEVELOP/KEYASCII", VAR_PROGS .. "/develop/keyascii/trunk/keyascii"},
{"DEVELOP/MTDBG", VAR_PROGS .. "/develop/mtdbg/mtdbg"}, {"DEVELOP/MTDBG", VAR_PROGS .. "/develop/mtdbg/mtdbg"},
{"DEVELOP/MSTATE", VAR_PROGS .. "/develop/mstate/mstate"},
{"DEVELOP/SCANCODE", VAR_PROGS .. "/develop/scancode/trunk/scancode"}, {"DEVELOP/SCANCODE", VAR_PROGS .. "/develop/scancode/trunk/scancode"},
{"DEVELOP/EXAMPLES/CIRCLE", VAR_PROGS .. "/develop/examples/circle/trunk/circle"}, {"DEVELOP/EXAMPLES/CIRCLE", VAR_PROGS .. "/develop/examples/circle/trunk/circle"},
{"DEVELOP/EXAMPLES/COLORREF", VAR_PROGS .. "/demos/colorref/trunk/colorref"}, {"DEVELOP/EXAMPLES/COLORREF", VAR_PROGS .. "/demos/colorref/trunk/colorref"},
{"DEVELOP/EXAMPLES/CONGET", VAR_PROGS .. "/develop/libraries/console_coff/examples/test_gets"}, {"DEVELOP/EXAMPLES/CONGET", VAR_PROGS .. "/develop/libraries/console_coff/examples/test_gets"},
{"DEVELOP/EXAMPLES/CSLIDE", VAR_PROGS .. "/demos/cslide/trunk/cslide"}, {"DEVELOP/EXAMPLES/CSLIDE", VAR_PROGS .. "/demos/cslide/trunk/cslide"},
{"DEVELOP/EXAMPLES/THREAD", VAR_PROGS .. "/develop/examples/thread/trunk/thread"}, {"DEVELOP/EXAMPLES/THREAD", VAR_PROGS .. "/develop/examples/thread/trunk/thread"},
{"DEVELOP/EXAMPLES/USE_MB", VAR_PROGS .. "/demos/use_mb/use_mb"},
{"File Managers/KFAR", VAR_PROGS .. "/fs/kfar/trunk/kfar"}, {"File Managers/KFAR", VAR_PROGS .. "/fs/kfar/trunk/kfar"},
{"File Managers/OPENDIAL", VAR_PROGS .. "/fs/opendial/opendial"}, {"File Managers/OPENDIAL", VAR_PROGS .. "/fs/opendial/opendial"},
{"LOD", VAR_PROGS .. "/fs/lod/lod"},
{"GAMES/15", VAR_PROGS .. "/games/15/15"}, {"GAMES/15", VAR_PROGS .. "/games/15/15"},
{"GAMES/DINO", VAR_PROGS .. "/games/dino/dino"},
{"GAMES/FREECELL", VAR_PROGS .. "/games/freecell/freecell"}, {"GAMES/FREECELL", VAR_PROGS .. "/games/freecell/freecell"},
{"GAMES/GOMOKU", VAR_PROGS .. "/games/gomoku/gomoku"}, {"GAMES/GOMOKU", VAR_PROGS .. "/games/gomoku/gomoku"},
{"GAMES/LIGHTS", VAR_PROGS .. "/games/sq_game/SQ_GAME"}, {"GAMES/LIGHTS", VAR_PROGS .. "/games/sq_game/SQ_GAME"},
@@ -502,7 +498,6 @@ tup.append_table(img_files, {
{"GAMES/SW", VAR_PROGS .. "/games/sw/sw"}, {"GAMES/SW", VAR_PROGS .. "/games/sw/sw"},
{"GAMES/TANKS", VAR_PROGS .. "/games/tanks/tanks"}, {"GAMES/TANKS", VAR_PROGS .. "/games/tanks/tanks"},
{"GAMES/TETRIS", VAR_PROGS .. "/games/tetris/tetris"}, {"GAMES/TETRIS", VAR_PROGS .. "/games/tetris/tetris"},
{"GAMES/C4", VAR_PROGS .. "/games/c4/c4"},
{"LIB/ARCHIVER.OBJ", VAR_PROGS .. "/fs/kfar/trunk/kfar_arc/kfar_arc.obj"}, {"LIB/ARCHIVER.OBJ", VAR_PROGS .. "/fs/kfar/trunk/kfar_arc/kfar_arc.obj"},
{"LIB/BOX_LIB.OBJ", VAR_PROGS .. "/develop/libraries/box_lib/trunk/box_lib.obj"}, {"LIB/BOX_LIB.OBJ", VAR_PROGS .. "/develop/libraries/box_lib/trunk/box_lib.obj"},
{"LIB/BUF2D.OBJ", VAR_PROGS .. "/develop/libraries/buf2d/trunk/buf2d.obj"}, {"LIB/BUF2D.OBJ", VAR_PROGS .. "/develop/libraries/buf2d/trunk/buf2d.obj"},
@@ -522,7 +517,6 @@ tup.append_table(img_files, {
{"LIB/SORT.OBJ", VAR_PROGS .. "/develop/libraries/sorter/sort.obj"}, {"LIB/SORT.OBJ", VAR_PROGS .. "/develop/libraries/sorter/sort.obj"},
{"LIB/TINYGL.OBJ", VAR_PROGS .. "/develop/libraries/TinyGL/asm_fork/tinygl.obj"}, {"LIB/TINYGL.OBJ", VAR_PROGS .. "/develop/libraries/TinyGL/asm_fork/tinygl.obj"},
{"MEDIA/ANIMAGE", VAR_PROGS .. "/media/animage/trunk/animage"}, {"MEDIA/ANIMAGE", VAR_PROGS .. "/media/animage/trunk/animage"},
{"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"},
{"MEDIA/KIV", VAR_PROGS .. "/media/kiv/trunk/kiv"}, {"MEDIA/KIV", VAR_PROGS .. "/media/kiv/trunk/kiv"},
{"MEDIA/LISTPLAY", VAR_PROGS .. "/media/listplay/trunk/listplay"}, {"MEDIA/LISTPLAY", VAR_PROGS .. "/media/listplay/trunk/listplay"},
{"MEDIA/MIDAMP", VAR_PROGS .. "/media/midamp/trunk/midamp"}, {"MEDIA/MIDAMP", VAR_PROGS .. "/media/midamp/trunk/midamp"},
@@ -605,6 +599,7 @@ tup.append_table(extra_files, {
{"kolibrios/demos/life3", VAR_PROGS .. "/games/life3/life3"}, {"kolibrios/demos/life3", VAR_PROGS .. "/games/life3/life3"},
{"kolibrios/demos/qjulia", VAR_PROGS .. "/demos/qjulia/trunk/qjulia"}, {"kolibrios/demos/qjulia", VAR_PROGS .. "/demos/qjulia/trunk/qjulia"},
{"kolibrios/develop/koldbg", VAR_PROGS .. "/develop/koldbg/koldbg"}, {"kolibrios/develop/koldbg", VAR_PROGS .. "/develop/koldbg/koldbg"},
{"kolibrios/develop/utils/charset_checker", VAR_PROGS .. "/other/charset_checker/charchck"},
{"kolibrios/games/Almaz", VAR_PROGS .. "/games/almaz/almaz"}, {"kolibrios/games/Almaz", VAR_PROGS .. "/games/almaz/almaz"},
{"kolibrios/games/arcanii", VAR_PROGS .. "/games/arcanii/arcanii"}, {"kolibrios/games/arcanii", VAR_PROGS .. "/games/arcanii/arcanii"},
{"kolibrios/games/bomber/bomber", VAR_PROGS .. "/games/bomber/bomber"}, {"kolibrios/games/bomber/bomber", VAR_PROGS .. "/games/bomber/bomber"},
@@ -635,7 +630,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"GAMES/KLAVISHA", VAR_PROGS .. "/games/klavisha/klavisha"}, {"GAMES/KLAVISHA", VAR_PROGS .. "/games/klavisha/klavisha"},
{"DEVELOP/EXAMPLES/TESTCON2", VAR_PROGS .. "/develop/libraries/console_coff/examples/testcon2_rus"}, {"DEVELOP/EXAMPLES/TESTCON2", VAR_PROGS .. "/develop/libraries/console_coff/examples/testcon2_rus"},
}) else tup.append_table(img_files, { }) else tup.append_table(img_files, {
{"DEVELOP/EXAMPLES/TESTCON2", VAR_PROGS .. "/develop/libraries/console_coff/examples/testcon2_eng"}, {"DEVELOP/TESTCON2", VAR_PROGS .. "/develop/libraries/console_coff/examples/testcon2_eng"},
}) end }) end
if build_type == "ru_RU" then tup.append_table(extra_files, { if build_type == "ru_RU" then tup.append_table(extra_files, {
@@ -644,6 +639,22 @@ if build_type == "ru_RU" then tup.append_table(extra_files, {
end -- tup.getconfig('NO_FASM') ~= 'full' end -- tup.getconfig('NO_FASM') ~= 'full'
-- Programs that require NASM to compile.
if tup.getconfig('NO_NASM') ~= 'full' then
tup.append_table(img_files, {
{"ACLOCK", VAR_PROGS .. "/demos/aclock/trunk/aclock"},
{"LOD", VAR_PROGS .. "/fs/lod/lod"},
{"TIMER", VAR_PROGS .. "/other/Timer/timer"},
{"TINFO", VAR_PROGS .. "/system/tinfo/tinfo"},
{"DEVELOP/MSTATE", VAR_PROGS .. "/develop/mstate/mstate"},
{"DEVELOP/GENFILES", VAR_PROGS .. "/testing/genfiles/GenFiles"},
{"GAMES/C4", VAR_PROGS .. "/games/c4/c4"},
{"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"},
})
tup.append_table(extra_files, {
})
end -- tup.getconfig('NO_NASM') ~= 'full'
-- Programs that require JWASM to compile. -- Programs that require JWASM to compile.
if tup.getconfig('NO_JWASM') ~= 'full' then if tup.getconfig('NO_JWASM') ~= 'full' then
tup.append_table(img_files, { tup.append_table(img_files, {
@@ -672,6 +683,7 @@ tup.append_table(img_files, {
{"DEVELOP/PIPET", VAR_PROGS .. "/cmm/misc/pipet.com"}, {"DEVELOP/PIPET", VAR_PROGS .. "/cmm/misc/pipet.com"},
{"File Managers/EOLITE", VAR_PROGS .. "/cmm/eolite/Eolite.com"}, {"File Managers/EOLITE", VAR_PROGS .. "/cmm/eolite/Eolite.com"},
{"File Managers/KFM2", VAR_PROGS .. "/cmm/misc/kfm2.com"}, {"File Managers/KFM2", VAR_PROGS .. "/cmm/misc/kfm2.com"},
{"KF_VIEW", VAR_PROGS .. "/cmm/kf_font_viewer/font_viewer.com"},
{"DEVELOP/DIFF", VAR_PROGS .. "/cmm/diff/diff.com"}, {"DEVELOP/DIFF", VAR_PROGS .. "/cmm/diff/diff.com"},
{"GAMES/CLICKS", VAR_PROGS .. "/games/clicks/clicks.com"}, {"GAMES/CLICKS", VAR_PROGS .. "/games/clicks/clicks.com"},
{"GAMES/MBLOCKS", VAR_PROGS .. "/cmm/misc/mblocks.com"}, {"GAMES/MBLOCKS", VAR_PROGS .. "/cmm/misc/mblocks.com"},
@@ -694,7 +706,6 @@ tup.append_table(extra_files, {
{"kolibrios/utils/notes", VAR_PROGS .. "/cmm/notes/notes.com"}, {"kolibrios/utils/notes", VAR_PROGS .. "/cmm/notes/notes.com"},
{"kolibrios/utils/osupdate", VAR_PROGS .. "/cmm/misc/osupdate.com"}, {"kolibrios/utils/osupdate", VAR_PROGS .. "/cmm/misc/osupdate.com"},
{"kolibrios/utils/quark", VAR_PROGS .. "/cmm/quark/quark.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' end -- tup.getconfig('NO_CMM') ~= 'full'
@@ -719,7 +730,6 @@ if tup.getconfig('NO_TCC') ~= 'full' then
tup.append_table(img_files, { tup.append_table(img_files, {
{"NETWORK/WHOIS", VAR_PROGS .. "/network/whois/whois"}, {"NETWORK/WHOIS", VAR_PROGS .. "/network/whois/whois"},
{"SHELL", VAR_PROGS .. "/system/shell/shell"}, {"SHELL", VAR_PROGS .. "/system/shell/shell"},
{"GAMES/DINO", VAR_PROGS .. "/games/dino/dino"},
}) })
tup.append_table(extra_files, { tup.append_table(extra_files, {
{"kolibrios/utils/thashview", VAR_PROGS .. "/other/TinyHashView/thashview"}, {"kolibrios/utils/thashview", VAR_PROGS .. "/other/TinyHashView/thashview"},

View File

@@ -79,7 +79,7 @@ next=$TextEditor
[Assoc] [Assoc]
/=/sys/file managers/eolite /=/sys/file managers/eolite
kf=/kolibrios/utils/kf_view kf=/sys/KF_VIEW
txt=$CodeEdit txt=$CodeEdit
log=$CodeEdit log=$CodeEdit

View File

@@ -1,16 +1,14 @@
The following "hot" shortcut keys are used in the system: The following "hot" shortcut keys are used in the system:
(Indexing on time of appearance in the system) (Indexing on time of appearance in the system)
1) Ctrl + Alt + Del start of the application CPU (the manager of processes), is a sole combination maintained on a level of a kernel, all rest "hot" key is realized at the expense of the application @TASKBAR. 1) Ctrl + Alt + Del start of the application CPU (the manager of processes), is a sole combination maintained on a level of a kernel, all rest "hot" key is realized at the expense of the application @TASKBAR.
2) Ctrl + Shift - switching of keyboard layout 2) Ctrl + Shift - switching of keyboard layout.
3) Win - start of the application MENU 3) Win - start of the application MENU.
4) Alt + Ctrl + F12 - start of the application END 4) Alt + Ctrl + F12 - start of the application END.
5) Alt + F4 - terminate the active application 5) Alt + F4 - terminate the active application.
6) Alt + Tab - switch to the next window 6) Alt + Tab - switch to the next (in the window stack) window
7) Alt + Shift + Tab - switch to the previous window 7) Alt + Shift + Tab - switch to the previous (in the window stack) window
8) Alt + Shift + NumLock - start of the application MOUSEMUL, which emulates mouse with numpad, when NumLock is on. 8) Alt + Shift + NumLock - start of the application MOUSEMUL, which emulates mouse with numpad, when NumLock is on.
9) Alt + 1...7 - fast switching to the selected keyboard layout (even if absent for Ctrl + Shift) 9) Alt + 1...7 - fast switching to the selected keyboard layout (even if absent for Ctrl + Shift)
10) Win + D - minimize/restore all windows 10) Win + D - minimize/restore all windows (cleaning of desktop)
11) Win + R - start of the application RUN 11) Win + R - start of the application RUN
12) Ctrl + PrintScreen - start of the application SCRSHOOT 12) Ctrl + PrintScreen - start of the application SCRSHOOT. Just do a screen shot and the user is offered to specify (with OpenDialog) where to save the BMP image.
13) Ctrl + Alt + Left / Right - change sound volume
Ctrl + Alt + Up / Down - mute and unmute sound

View File

@@ -116,8 +116,8 @@ ico=8
x=-67 x=-67
y=68 y=68
[10] [10]
name=DBGBOARD name=BOARD
path=/SYS/DEVELOP/DBGBOARD path=/SYS/DEVELOP/BOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -57,7 +57,8 @@
20 Diff Tool |develop/diff 20 Diff Tool |develop/diff
52 Shared resources |/sys/@reshare 52 Shared resources |/sys/@reshare
34 Base Converter |develop/h2d2b 34 Base Converter |develop/h2d2b
59 Charsets Viewer |develop/CHARSETS 59 Character table |develop/ASCIIVju
59 Key ASCII-codes |develop/keyascii
59 Key SCAN-codes |develop/scancode 59 Key SCAN-codes |develop/scancode
#6 **** EMUL #6 **** EMUL
24 DOSBox * |/kolibrios/emul/DosBox/dosbox 24 DOSBox * |/kolibrios/emul/DosBox/dosbox

View File

@@ -1,16 +1,14 @@
The following "hot" shortcut keys are used in the system: The following "hot" shortcut keys are used in the system:
(Indexing on time of appearance in the system) (Indexing on time of appearance in the system)
1) Ctrl + Alt + Del start of the application CPU (the manager of processes), is a sole combination maintained on a level of a kernel, all rest "hot" key is realized at the expense of the application @TASKBAR. 1) Ctrl + Alt + Del start of the application CPU (the manager of processes), is a sole combination maintained on a level of a kernel, all rest "hot" key is realized at the expense of the application @TASKBAR.
2) Ctrl + Shift - switching of keyboard layout 2) Ctrl + Shift - switching of keyboard layout.
3) Win - start of the application MENU 3) Win - start of the application MENU.
4) Alt + Ctrl + F12 - start of the application END 4) Alt + Ctrl + F12 - start of the application END.
5) Alt + F4 - terminate the active application 5) Alt + F4 - terminate the active application.
6) Alt + Tab - switch to the next window 6) Alt + Tab - switch to the next (in the window stack) window
7) Alt + Shift + Tab - switch to the previous window 7) Alt + Shift + Tab - switch to the previous (in the window stack) window
8) Alt + Shift + NumLock - start of the application MOUSEMUL, which emulates mouse with numpad, when NumLock is on. 8) Alt + Shift + NumLock - start of the application MOUSEMUL, which emulates mouse with numpad, when NumLock is on.
9) Alt + 1...7 - fast switching to the selected keyboard layout (even if absent for Ctrl + Shift) 9) Alt + 1...7 - fast switching to the selected keyboard layout (even if absent for Ctrl + Shift)
10) Win + D - minimize/restore all windows 10) Win + D - minimize/restore all windows (cleaning of desktop)
11) Win + R - start of the application RUN 11) Win + R - start of the application RUN
12) Ctrl + PrintScreen - start of the application SCRSHOOT 12) Ctrl + PrintScreen - start of the application SCRSHOOT. Just do a screen shot and the user is offered to specify (with OpenDialog) where to save the BMP image.
13) Ctrl + Alt + Left / Right - change sound volume
Ctrl + Alt + Up / Down - mute and unmute sound

View File

@@ -116,8 +116,8 @@ ico=8
x=-67 x=-67
y=68 y=68
[10] [10]
name=DBGBOARD name=BOARD
path=/SYS/DEVELOP/DBGBOARD path=/SYS/DEVELOP/BOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -56,7 +56,8 @@
49 Debugger mtdbg |develop/mtdbg 49 Debugger mtdbg |develop/mtdbg
49 Debugger koldbg * |/kolibrios/develop/koldbg 49 Debugger koldbg * |/kolibrios/develop/koldbg
16 Hex2Dec2Bin |develop/h2d2b 16 Hex2Dec2Bin |develop/h2d2b
16 Tabla de caracteres |develop/CHARSETS 16 Tabla de caracteres |ASCIIVju
16 C<>digos ASCII |develop/keyascii
16 C<>digos SCAN |develop/scancode 16 C<>digos SCAN |develop/scancode
#6 **** EMULATORS #6 **** EMULATORS
24 DOSBox * |/kolibrios/emul/DosBox/dosbox 24 DOSBox * |/kolibrios/emul/DosBox/dosbox

View File

@@ -116,8 +116,8 @@ ico=8
x=-67 x=-67
y=68 y=68
[10] [10]
name=DBGBOARD name=BOARD
path=/SYS/DEVELOP/DBGBOARD path=/SYS/DEVELOP/BOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -116,8 +116,8 @@ ico=8
x=-67 x=-67
y=68 y=68
[10] [10]
name=DBGBOARD name=BOARD
path=/SYS/DEVELOP/DBGBOARD path=/SYS/DEVELOP/BOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -1,16 +1,14 @@
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>騥 "<22><><EFBFBD><EFBFBD>稥" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>騥 "<22><><EFBFBD><EFBFBD>稥" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>:
(<28><EFBFBD><E3ACA5><EFBFBD><EFBFBD><EFBFBD> <20><> <20><EFBFBD><E0A5AC><EFBFBD> <20><><EFBFBD><EFA2AB><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>) (<28><EFBFBD><E3ACA5><EFBFBD><EFBFBD><EFBFBD> <20><> <20><EFBFBD><E0A5AC><EFBFBD> <20><><EFBFBD><EFA2AB><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>)
1) Ctrl + Alt + Del <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CPU (<28><><EFBFBD><E1AFA5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᮢ), <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A2A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A0><EFBFBD><EFBFBD> <20><> <20><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><>⠫쭮<E2A0AB><><E0A5A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @TASKBAR. 1) Ctrl + Alt + Del <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CPU (<28><><EFBFBD><E1AFA5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᮢ), <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A2A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A0><EFBFBD><EFBFBD> <20><> <20><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><>⠫쭮<E2A0AB><><E0A5A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @TASKBAR.
2) Ctrl + Shift - <20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><><EFBFBD><E1AAAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2) Ctrl + Shift - <20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><><EFBFBD><E1AAAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
3) Win - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MENU 3) Win - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MENU.
4) Alt + Ctrl + F12 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> END 4) Alt + Ctrl + F12 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> END.
5) Alt + F4 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5) Alt + F4 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
6) Alt + Tab - <20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><><><E1ABA5><EFBFBD><20><><EFBFBD><EFBFBD> 6) Alt + Tab - <20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><><><E1ABA5><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>) <20><><EFBFBD><EFBFBD>
7) Alt + Shift + Tab - <20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><> <20><EFBFBD><E0A5A4><EFBFBD><20><><EFBFBD><EFBFBD> 7) Alt + Shift + Tab - <20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><> <20><EFBFBD><E0A5A4><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>) <20><><EFBFBD><EFBFBD>
8) Alt + Shift + NumLock - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MOUSEMUL, <20><><EFBFBD><E3ABA8><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>񭭮<EFBFBD> NumLock <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E3ACAF><EFBFBD> 8) Alt + Shift + NumLock - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MOUSEMUL, <20><><EFBFBD><E3ABA8><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>񭭮<EFBFBD> NumLock <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E3ACAF><EFBFBD>
9) Alt + 1...7 - <20><><EFBFBD><EFBFBD><20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><E1AAAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Ctrl + Shift) 9) Alt + 1...7 - <20><><EFBFBD><EFBFBD><20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><E1AAAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Ctrl + Shift)
10) Win + D - ᢥ<><E1A2A5><EFBFBD><EFBFBD><EFBFBD>/ࠧ<><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> 10) Win + D - ᢥ<><E1A2A5><EFBFBD><EFBFBD><EFBFBD>/ࠧ<><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>⪠ ࠡ<><EFBFBD> <20><EFBFBD>)
11) Win + R - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RUN 11) Win + R - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RUN
12) Ctrl + PrintScreen - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SCRSHOOT 12) Ctrl + PrintScreen - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SCRSHOOT. <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1ADA8><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><ECA7AE><EFBFBD> <20><EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E3AAA0><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OpenDialog, <20><20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><><E1ADA8><EFBFBD> <20> <20><><EFBFBD><E0ACA0> BMP.
13) Ctrl + Alt + Left / Right - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0AEAC><EFBFBD><EFBFBD><EFBFBD>
Ctrl + Alt + Up / Down - <20><EFBFBD><EBAAAB><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>

View File

@@ -116,8 +116,8 @@ ico=8
x=-67 x=-67
y=68 y=68
[10] [10]
name=DBGBOARD name=BOARD
path=/SYS/DEVELOP/DBGBOARD path=/SYS/DEVELOP/BOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -58,7 +58,8 @@
20 Diff tool |develop/diff 20 Diff tool |develop/diff
52 Shared resources |/sys/@reshare 52 Shared resources |/sys/@reshare
34 Hex2Dec2Bin |develop/h2d2b 34 Hex2Dec2Bin |develop/h2d2b
59 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A8AC><EFBFBD><EFBFBD><EFBFBD> |develop/CHARSETS 59 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A8AC><EFBFBD><EFBFBD><EFBFBD> |develop/ASCIIVju
59 ASCII-<2D><><EFBFBD><EFBFBD> |develop/keyascii
59 SCAN-<2D><><EFBFBD><EFBFBD> |develop/scancode 59 SCAN-<2D><><EFBFBD><EFBFBD> |develop/scancode
#6 **** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #6 **** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
24 DOSBox * |/kolibrios/emul/DosBox/dosbox 24 DOSBox * |/kolibrios/emul/DosBox/dosbox

Binary file not shown.

View File

@@ -55,15 +55,9 @@ _ini taskbar_vars_ini = { #taskbar_ini_path, "Variables" };
_ini docky_ini = { "/sys/settings/docky.ini", "@" }; _ini docky_ini = { "/sys/settings/docky.ini", "@" };
unsigned char panels_img_data[] = FROM "bars.raw";
#define PIMG_W 37 #define PIMG_W 37
#define PIMG_H 27 //27*5 #define PIMG_H 27 //27*5
unsigned char panels_img_data[] = FROM "bars_8b.raw";
dword panels_img_pal[] = {
0x00405D74,0x0084FC84,0x00FAFAFA,0x0000B400,
0x00E4E4E4,0x008C9B9C,0x000212FD,0x00D8DEDF,
0x00585C5D,0x0085B7E0,0x009EC6E7,0x0094C0E5,
0x00CB8800,0x00CE3D9E,0x00D20404,0x00485966
};
proc_info Form; proc_info Form;
@@ -143,7 +137,7 @@ void main()
void DrawPanelsImage(dword y, n) void DrawPanelsImage(dword y, n)
{ {
PutPaletteImage(n * PIMG_W * PIMG_H + #panels_img_data, PIMG_W, PIMG_H, 22, y, 8, #panels_img_pal); PutImage(22, y, PIMG_W, PIMG_H, n * PIMG_W * PIMG_H * 3 + #panels_img_data);
} }
void SetDisabledMode() void SetDisabledMode()

View File

@@ -101,16 +101,13 @@ void TWebBrowser::SetPageDefaults()
img_url.drop(); img_url.drop();
text_colors.drop(); text_colors.drop();
text_colors.add(0); text_colors.add(0);
if (secondrun) {
canvas.Init(list.x, list.y, list.w, math.max(list.visible, list.count));
canvas.Fill(0, bg_colors.get(0));
}
bg_colors.drop(); bg_colors.drop();
bg_colors.add(DEFAULT_BG_COL); bg_colors.add(DEFAULT_BG_COL);
canvas.Fill(0, DEFAULT_BG_COL);
header = NULL; header = NULL;
draw_y = BODY_MARGIN; draw_y = BODY_MARGIN;
draw_x = left_gap = BODY_MARGIN; draw_x = left_gap = BODY_MARGIN;
draw_w = list.w - BODY_MARGIN - BODY_MARGIN; draw_w = list.w - BODY_MARGIN;
linebuf = 0; linebuf = 0;
redirect = '\0'; redirect = '\0';
list.SetFont(8, 14, 10011000b); list.SetFont(8, 14, 10011000b);
@@ -136,6 +133,8 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
dword bufpos; dword bufpos;
bufsize = _bufsize; bufsize = _bufsize;
if (list.w!=canvas.bufw) canvas.Init(list.x, list.y, list.w, 400*20);
if (bufpointer == _bufpointer) { if (bufpointer == _bufpointer) {
custom_encoding = cur_encoding; custom_encoding = cur_encoding;
} else { } else {
@@ -154,6 +153,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
} }
} }
table.cols.drop(); table.cols.drop();
secondrun = false; secondrun = false;
@@ -216,15 +216,19 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
AddCharToTheLine(ESBYTE[bufpos]); AddCharToTheLine(ESBYTE[bufpos]);
} }
RenderTextbuf();
list.count = draw_y + style.cur_line_h;
list.CheckDoesValuesOkey();
anchors.current = NULL;
if (!secondrun) { if (!secondrun) {
secondrun = true; secondrun = true;
goto _PARSE_START_; goto _PARSE_START_;
} }
RenderTextbuf();
list.count = draw_y + style.cur_line_h;
canvas.bufh = math.max(list.visible, list.count);
buf_data = realloc(buf_data, canvas.bufh * canvas.bufw * 4 + 8);
list.CheckDoesValuesOkey();
anchors.current = NULL;
if (!header) { if (!header) {
strncpy(#header, #version, sizeof(TWebBrowser.header)-1); strncpy(#header, #version, sizeof(TWebBrowser.header)-1);
DrawTitle(#header); DrawTitle(#header);

View File

@@ -45,10 +45,9 @@ void PAGE_LINKS::clear()
w.drop(); w.drop();
h.drop(); h.drop();
underline_h.drop(); underline_h.drop();
id.drop();
element_links.drop(); element_links.drop();
unic_links.drop(); unic_links.drop();
id.drop();
active = -1; active = -1;
active_url = 0; active_url = 0;

View File

@@ -112,7 +112,6 @@ dword _tag::get_next_param(dword ps, pe)
// "pe" - param end // "pe" - param end
// "q" - quote char // "q" - quote char
char q = NULL; char q = NULL;
dword initial_pe = pe;
dword fixeq; dword fixeq;
dword val; dword val;
dword attr; dword attr;
@@ -146,14 +145,6 @@ dword _tag::get_next_param(dword ps, pe)
//already have ATTR end //already have ATTR end
} }
if (pe > ps) pe--;
//Fix case: "src ="
while (pe>ps) && (__isWhite(ESBYTE[pe])) {
ESBYTE[pe] = '\0';
pe--;
}
//find ATTR start and copy //find ATTR start and copy
while (pe>ps) && (!__isWhite(ESBYTE[pe])) pe--; while (pe>ps) && (!__isWhite(ESBYTE[pe])) pe--;
attr = pe + 1; attr = pe + 1;
@@ -170,8 +161,6 @@ dword _tag::get_next_param(dword ps, pe)
} }
strlwr(attr); strlwr(attr);
strrtrim(val); strrtrim(val);
//Fix case: " img.png"
while(__isWhite(ESBYTE[val])) && (val<initial_pe) val++;
attributes.add(attr); attributes.add(attr);
values.add(val); values.add(val);

View File

@@ -10,8 +10,10 @@ void TWebBrowser::RenderLine(dword _line)
if (style.title) if (style.title)
{ {
strncpy(#header, _line, sizeof(TWebBrowser.header)-1); strncpy(#header, _line, sizeof(TWebBrowser.header)-1);
strncat(#header, " - ", sizeof(TWebBrowser.header)-1); if (!application_mode) {
strncat(#header, #version, sizeof(TWebBrowser.header)-1); strncat(#header, " - ", sizeof(TWebBrowser.header)-1);
strncat(#header, #version, sizeof(TWebBrowser.header)-1);
}
} }
else if (t_html) && (!t_body) { else if (t_html) && (!t_body) {
// //
@@ -22,8 +24,9 @@ void TWebBrowser::RenderLine(dword _line)
zoom = list.font_w / BASIC_CHAR_W; zoom = list.font_w / BASIC_CHAR_W;
//there is some shit happens!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //there is some shit happens!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (pw > draw_w + BODY_MARGIN) { if (pw > draw_w) {
//debugln("shit"); //draw_w = pw;
NewLine();
} }
if (debug_mode) { if (debug_mode) {
@@ -82,13 +85,12 @@ void TWebBrowser::RenderTextbuf()
//debugln(" \\n"); //debugln(" \\n");
//Is a new line fits in the maximum line width? //Is a new line fits in the current line?
if (br * list.font_w + draw_x - left_gap >= draw_w) { if (br * list.font_w + draw_x - left_gap >= draw_w) {
br = draw_w - draw_x + left_gap /list.font_w; br = draw_w - draw_x + left_gap /list.font_w;
if (br < 0) br = 0;
while(br) { while(br) {
if (ESBYTE[lbp + br]==' ') { if (ESBYTE[lbp + br]==' ') {
if (br < len) br++; br++;
break; break;
} }
br--; br--;
@@ -96,16 +98,7 @@ void TWebBrowser::RenderTextbuf()
} }
//Maybe a new line is too big for the whole new line? Then we have to split it //Maybe a new line is too big for the whole new line? Then we have to split it
if (!br) && (len * list.font_w >= draw_w) { if (!br) && (len * list.font_w >= draw_w) {
//debugln("bigbr");
//debugval("draw_x", draw_x);
//debugval("draw_w", draw_w);
br = draw_w - draw_x / list.font_w; br = draw_w - draw_x / list.font_w;
//debugval("cut into 1", br * list.font_w);
if (br < 0) {
NewLine();
br = draw_w - draw_x / list.font_w;
//debugval("cut into 2", br * list.font_w);
}
} }
if (br) { if (br) {
@@ -131,11 +124,7 @@ void TWebBrowser::NewLine()
if (t_html) && (!t_body) return; if (t_html) && (!t_body) return;
if (draw_x == style.tag_list.level * 5 * list.font_w + left_gap) { if (draw_x == style.tag_list.level * 5 * list.font_w + left_gap) {
if (!empty_line) { if (!empty_line) empty_line=true; else return;
empty_line=true;
} else {
return;
}
} else { } else {
empty_line = false; empty_line = false;
} }

View File

@@ -56,12 +56,15 @@ void TWebBrowser::SetStyle()
if (tag.is("tr")) { tag_table(); return; } if (tag.is("tr")) { tag_table(); return; }
if (tag.is("th")) { tag_table(); return; } if (tag.is("th")) { tag_table(); return; }
if (tag.is("td")) { tag_table(); return; } if (tag.is("td")) { tag_table(); return; }
if (application_mode) {
if (tag.is("exit")) { ExitProcess(); return; }
}
} }
void TWebBrowser::tag_p() void TWebBrowser::tag_p()
{ {
IF (tag.prior[0] == 'h') || (streq(#tag.prior,"td")) return; IF (tag.prior[0] == 'h') || (streq(#tag.prior,"td")) || (streq(#tag.prior,"p")) return;
IF (!tag.opened) && (streq(#tag.prior,"p")) return;
NewLine(); NewLine();
} }
@@ -119,7 +122,6 @@ void TWebBrowser::tag_iframe()
void TWebBrowser::tag_a() void TWebBrowser::tag_a()
{ {
if (!secondrun) return;
if (tag.opened) if (tag.opened)
{ {
if (tag.get_value_of("href")) && (!strstr(tag.value,"javascript:")) if (tag.get_value_of("href")) && (!strstr(tag.value,"javascript:"))
@@ -134,7 +136,6 @@ void TWebBrowser::tag_a()
void TWebBrowser::tag_meta_xml() void TWebBrowser::tag_meta_xml()
{ {
if (secondrun) return;
if (custom_encoding == -1) if (tag.get_value_of("charset")) if (custom_encoding == -1) if (tag.get_value_of("charset"))
|| (tag.get_value_of("content")) || (tag.get_value_of("encoding")) || (tag.get_value_of("content")) || (tag.get_value_of("encoding"))
{ {
@@ -147,6 +148,22 @@ void TWebBrowser::tag_meta_xml()
if (streq(tag.get_value_of("http-equiv"), "refresh")) && (tag.get_value_of("content")) { if (streq(tag.get_value_of("http-equiv"), "refresh")) && (tag.get_value_of("content")) {
if (tag.value = strstri(tag.value, "url")) strcpy(#redirect, tag.value); if (tag.value = strstri(tag.value, "url")) strcpy(#redirect, tag.value);
} }
if (streq(tag.get_value_of("name"), "application")) {
if (application_mode) {
if (tag.get_number_of("left")) {
MoveSize(tag.number,-1,-1,-1);
}
if (tag.get_number_of("top")) {
MoveSize(-1,tag.number,-1,-1);
}
if (tag.get_number_of("width")) {
MoveSize(-1,-1,tag.number,-1);
}
if (tag.get_number_of("height")) {
MoveSize(-1,-1,-1,tag.number);
}
}
}
} }
signed int get_encoding_type_by_name(dword name) signed int get_encoding_type_by_name(dword name)
@@ -189,7 +206,7 @@ void TWebBrowser::tag_ol_ul_dt()
void TWebBrowser::tag_li() void TWebBrowser::tag_li()
{ {
//if (style.nav) return; if (style.nav) return;
if (tag.opened) { if (tag.opened) {
if (!style.tag_list.level) style.tag_list.upd_level(1, 'u'); if (!style.tag_list.level) style.tag_list.upd_level(1, 'u');
if (!style.pre) NewLine(); if (!style.pre) NewLine();
@@ -218,10 +235,13 @@ void TWebBrowser::tag_hr()
void TWebBrowser::tag_body() void TWebBrowser::tag_body()
{ {
t_body = tag.opened; t_body = tag.opened;
if (tag.get_value_of("link")) link_color_default = GetColor(tag.value); if (tag.get_value_of("link")) link_color_default = GetColor(tag.value);
if (tag.get_value_of("alink")) link_color_active = GetColor(tag.value); if (tag.get_value_of("alink")) link_color_active = GetColor(tag.value);
if (tag.get_value_of("text")) text_colors.set(0, GetColor(tag.value)); if (tag.get_value_of("text")) text_colors.set(0, GetColor(tag.value));
if (tag.get_value_of("bgcolor")) bg_colors.set(0, GetColor(tag.value)); if (tag.get_value_of("bgcolor")) {
bg_colors.set(0, GetColor(tag.value));
canvas.Fill(0, bg_colors.get(0));
}
// Autodetecting encoding if no encoding was set // Autodetecting encoding if no encoding was set
if (tag.opened) && (custom_encoding==-1) && (cur_encoding == CH_CP866) { if (tag.opened) && (custom_encoding==-1) && (cur_encoding == CH_CP866) {
if (strstr(bufpointer, "\208\190")) ChangeEncoding(CH_UTF8); if (strstr(bufpointer, "\208\190")) ChangeEncoding(CH_UTF8);
@@ -244,19 +264,11 @@ void TWebBrowser::tag_h1234_caption()
} else { } else {
style.h = tag.opened; style.h = tag.opened;
if (tag.opened) { if (tag.opened) {
if (!style.pre) { if (!style.pre) NewLine();
NewLine(); draw_y += 10;
NewLine(); list.SetFont(BASIC_CHAR_W*2, 14*2, 10011001b);
} list.item_h = BASIC_LINE_H * 2 - 2;
if (tag.is("h1")) { if (tag.is("h1")) style.b = true;
list.SetFont(BASIC_CHAR_W*2, 14+14, 10011001b);
style.b = true;
} else if (tag.is("h2")) {
list.SetFont(BASIC_CHAR_W*2, 14+14, 10011001b);
} else {
list.SetFont(6*2, 9+7, 10001001b);
}
style.cur_line_h = list.item_h = list.font_h + 2;
} else { } else {
if (tag.is("h1")) style.b = false; if (tag.is("h1")) style.b = false;
NewLine(); NewLine();
@@ -293,7 +305,7 @@ void TWebBrowser::tag_img()
if (!strcmp(tag.value + strrchr(tag.value, '.'), "webp")) goto NOIMG; if (!strcmp(tag.value + strrchr(tag.value, '.'), "webp")) goto NOIMG;
strlcpy(#img_path, tag.value, sizeof(img_path)-1); strlcpy(#img_path, tag.value, sizeof(img_path)-1);
replace_char(#img_path, ' ', '\0', sizeof(img_path)-1); replace_char(#img_path, ' ', '\0', sizeof(img_path));
get_absolute_url(#img_path, history.current()); get_absolute_url(#img_path, history.current());
if (check_is_the_adress_local(#img_path)) { if (check_is_the_adress_local(#img_path)) {
@@ -330,28 +342,31 @@ NOIMG:
text_colors.pop(); text_colors.pop();
} }
struct TABLE { struct TABLE {
int count;
int depth; int depth;
int margin; int margin;
collection_int cols; collection_int cols;
collection_int width;
} table; } table;
unsigned table_id;
unsigned colcount; int tr_pos, td_pos;
unsigned tr_pos; int row_start_y;
unsigned td_pos; int colcount;
unsigned row_start_y; dword tallest_cell_in_row;
unsigned tallest_cell_in_row;
unsigned cur_cell_w;
void TWebBrowser::tag_table_reset() void TWebBrowser::tag_table_reset()
{ {
table_id = 0; table.depth = 0;
table.count = 0;
colcount = 0; colcount = 0;
tr_pos = 0; tr_pos = 0;
td_pos = 0; td_pos = 0;
table.depth = 0;
cur_cell_w = 0;
} }
void TWebBrowser::tag_table() void TWebBrowser::tag_table()
@@ -365,15 +380,15 @@ void TWebBrowser::tag_table()
if(tag.opened) { if(tag.opened) {
table.depth++; table.depth++;
if (table.depth==1) { if (table.depth==1) {
table_id++; table.count++;
colcount = 0; colcount = 0;
td_pos = 0; td_pos = 0;
row_start_y = draw_y; row_start_y = draw_y;
if (tag.get_number_of("width")) { if (tag.get_number_of("width")) {
if (strchr(tag.value, '%')) tag.number = list.w * tag.number / 100; if (strchr(tag.value, '%')) tag.number = list.w * tag.number / 100;
cur_cell_w = math.min(tag.number,list.w); table.width.set(table.count, math.min(tag.number,list.w));
} else { } else {
cur_cell_w = list.w; table.width.set(table.count, list.w);
} }
} }
} else { } else {
@@ -432,17 +447,26 @@ void TWebBrowser::tag_table()
if (!tr_pos) goto _TR_FIX; if (!tr_pos) goto _TR_FIX;
tallest_cell_in_row = math.max(draw_y+style.cur_line_h-list.item_h+1, tallest_cell_in_row); /*
if (tag.opened) {
if (tag.get_value_of("bgcolor")) {
bg_colors.add(GetColor(tag.value));
} else {
bg_colors.add(bg_colors.get(0));
}
} */
tallest_cell_in_row = math.max(draw_y+style.cur_line_h-list.item_h, tallest_cell_in_row);
style.cur_line_h = list.item_h; style.cur_line_h = list.item_h;
if (tag.opened) if (tag.opened) {
{
if (!td_pos) { if (!td_pos) {
table.margin = list.w - cur_cell_w / 2 + BODY_MARGIN; table.margin = list.w - table.width.get(table.count) / 2 + BODY_MARGIN;
draw_x = left_gap = table.margin; draw_x = left_gap = table.margin;
draw_w = cur_cell_w - BODY_MARGIN; draw_w = table.width.get(table.count) - BODY_MARGIN;
} else { } else {
draw_x = left_gap = left_gap + draw_w; draw_x = left_gap = left_gap + draw_w;
draw_w = cur_cell_w - left_gap + table.margin - BODY_MARGIN; draw_w = table.width.get(table.count) - left_gap + table.margin - BODY_MARGIN;
} }
if (EAX = table.cols.get(tr_pos-1)-td_pos) { if (EAX = table.cols.get(tr_pos-1)-td_pos) {
@@ -453,18 +477,20 @@ void TWebBrowser::tag_table()
} }
if (table.cols.get(tr_pos-1)-td_pos>1) && (tag.get_number_of("width")) { if (table.cols.get(tr_pos-1)-td_pos>1) && (tag.get_number_of("width")) {
if (strchr(tag.value, '%')) { if (strchr(tag.value, '%')) {
tag.number = cur_cell_w - table.margin - 23 - left_gap * tag.number / 100; tag.number = table.width.get(table.count) - table.margin - 23 - left_gap * tag.number / 100;
} }
if (tag.number < draw_w) draw_w = tag.number; if (tag.number < draw_w) draw_w = tag.number;
} }
draw_y = row_start_y; draw_y = row_start_y;
//canvas.WriteText(draw_x, draw_y, 10001001b, 0x0000FE, itoa(draw_x), NULL);
//canvas.WriteText(draw_x, draw_y+20, 10001001b, 0xFF0000, itoa(draw_w), NULL);
td_pos++; td_pos++;
} }
} }
} }
if (draw_x > cur_cell_w) { if (draw_x > table.width.get(table.count)) {
draw_x = left_gap = table.margin; draw_x = left_gap = table.margin;
draw_w = cur_cell_w - table.margin - 23 - left_gap; draw_w = table.width.get(table.count) - table.margin - 23 - left_gap;
table.depth = 0; table.depth = 0;
NewLine(); NewLine();
if (debug_mode) { if (debug_mode) {
@@ -472,8 +498,11 @@ void TWebBrowser::tag_table()
canvas.DrawBar(0, draw_y, 20, 20, 0xFF0000); canvas.DrawBar(0, draw_y, 20, 20, 0xFF0000);
} }
} }
//if (left_gap + draw_w > list.w) { /*
// draw_w = list.w - left_gap; if (left_gap + draw_w > list.w) {
// if (debug_mode) debugln("anomaly draw_W"); draw_w = list.w - left_gap;
//} if (debug_mode) debugln("anomaly draw_W");
}
*/
} }

View File

@@ -65,8 +65,6 @@ char *unicode_symbols[]={
"times", "x", "times", "x",
"lowast","*", "lowast","*",
"#128154","<3",
0}; 0};

View File

@@ -1,4 +1,4 @@
//Copyright 2007-2025 by Veliant & Leency //Copyright 2007-2021 by Veliant & Leency
//Asper, lev, Lrz, Barsuk, Nable, hidnplayr... //Asper, lev, Lrz, Barsuk, Nable, hidnplayr...
//BUGS //BUGS
@@ -45,6 +45,7 @@
bool debug_mode = false; bool debug_mode = false;
bool show_images = true; bool show_images = true;
bool source_mode = false; bool source_mode = false;
bool application_mode = false;
_history history; _history history;
@@ -109,6 +110,9 @@ void HandleParam()
history.add(#param + 8); history.add(#param + 8);
} else if (!strncmp(#param, "-new ", 5)) { } else if (!strncmp(#param, "-new ", 5)) {
history.add(#param + 5); history.add(#param + 5);
} else if (!strncmp(#param, "-app ", 5)) {
history.add(#param + 5);
application_mode = true;
} else { } else {
if (GetProcessesCount("WEBVIEW") == 1) { if (GetProcessesCount("WEBVIEW") == 1) {
history.add(#param); history.add(#param);
@@ -132,6 +136,14 @@ void main()
LoadLibraries(); LoadLibraries();
HandleParam(); HandleParam();
if (application_mode) {
TOOLBAR_H = 0;
PADDING = 0;
TSZE = 0;
STATUSBAR_H = 0;
TAB_H = 0;
}
omnibox_edit.left = PADDING+TSZE*2+PADDING+6; omnibox_edit.left = PADDING+TSZE*2+PADDING+6;
omnibox_edit.top = PADDING+3; omnibox_edit.top = PADDING+3;
@@ -209,6 +221,15 @@ void main()
if (http.transfer <= 0) break; if (http.transfer <= 0) break;
http.receive(); http.receive();
if (http_get_type==PAGE) {
CheckContentType();
prbar.max = http.content_length;
if (prbar.value != http.content_received) {
prbar.value = http.content_received;
DrawProgress();
}
}
if (http.receive_result != 0) break; if (http.receive_result != 0) break;
if (debug_mode) { if (debug_mode) {
EAX = http.transfer; EAX = http.transfer;
@@ -227,15 +248,6 @@ void main()
notify("'Too many redirects.' -E"); notify("'Too many redirects.' -E");
} }
} else { } else {
if (http_get_type==PAGE) {
CheckContentType();
prbar.max = http.content_length;
if (prbar.value != http.content_received) {
prbar.value = http.content_received;
DrawProgress();
}
}
// Loading the page is complete, free resources // Loading the page is complete, free resources
redirect_count = 0; redirect_count = 0;
if (http_get_type==PAGE) { if (http_get_type==PAGE) {
@@ -312,7 +324,7 @@ void ProcessKeyEvent()
if (key_modifier&KEY_LSHIFT) || (key_modifier&KEY_RSHIFT) if (key_modifier&KEY_LSHIFT) || (key_modifier&KEY_RSHIFT)
{ {
if (key_scancode == SCAN_CODE_TAB) {EventActivatePreviousTab();return;} if (key_scancode == SCAN_CODE_TAB) {EventActivatePreviousTab();return;}
if (key_scancode == SCAN_CODE_BS) {EventOpenNewTab(URL_SERVICE_TEST);return;} if (key_scancode == SCAN_CODE_KEY_T) {EventOpenNewTab(URL_SERVICE_TEST);return;}
} }
if (key_modifier&KEY_LCTRL) || (key_modifier&KEY_RCTRL) switch(key_scancode) if (key_modifier&KEY_LCTRL) || (key_modifier&KEY_RCTRL) switch(key_scancode)
@@ -337,7 +349,6 @@ void ProcessKeyEvent()
{ {
case SCAN_CODE_UP: EventScrollUpAndDown(SCAN_CODE_UP); return; case SCAN_CODE_UP: EventScrollUpAndDown(SCAN_CODE_UP); return;
case SCAN_CODE_DOWN: EventScrollUpAndDown(SCAN_CODE_DOWN); return; case SCAN_CODE_DOWN: EventScrollUpAndDown(SCAN_CODE_DOWN); return;
case SCAN_CODE_F2: EventEditSource(); return;
case SCAN_CODE_F6: {omnibox_edit.flags=ed_focus; DrawOmnibox();} return; case SCAN_CODE_F6: {omnibox_edit.flags=ed_focus; DrawOmnibox();} return;
case SCAN_CODE_F5: EventRefreshPage(); return; case SCAN_CODE_F5: EventRefreshPage(); return;
case SCAN_CODE_ENTER: if (omnibox_edit.flags & ed_focus) EventSubmitOmnibox(); return; case SCAN_CODE_ENTER: if (omnibox_edit.flags & ed_focus) EventSubmitOmnibox(); return;
@@ -371,21 +382,23 @@ void draw_window()
SetElementSizes(); SetElementSizes();
DrawBar(0,0, Form.cwidth,PADDING, sc.work); if (!application_mode) {
DrawBar(0,PADDING+TSZE+1, Form.cwidth,PADDING-1, sc.work); DrawBar(0,0, Form.cwidth,PADDING, sc.work);
DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, MixColors(sc.dark, sc.work, 180)); DrawBar(0,PADDING+TSZE+1, Form.cwidth,PADDING-1, sc.work);
DrawBar(0,TOOLBAR_H-1, Form.cwidth,1, sc.line); DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, MixColors(sc.dark, sc.work, 180));
DrawBar(0, PADDING, omnibox_edit.left-2, TSZE+1, sc.work); DrawBar(0,TOOLBAR_H-1, Form.cwidth,1, sc.line);
DrawBar(omnibox_edit.left+omnibox_edit.width+18, PADDING, Form.cwidth-omnibox_edit.left-omnibox_edit.width-18, TSZE+1, sc.work); DrawBar(0, PADDING, omnibox_edit.left-2, TSZE+1, sc.work);
DrawBar(omnibox_edit.left+omnibox_edit.width+18, PADDING, Form.cwidth-omnibox_edit.left-omnibox_edit.width-18, TSZE+1, sc.work);
DrawTopPanelButton(BACK_BUTTON, PADDING-1, PADDING, 30, false); DrawTopPanelButton(BACK_BUTTON, PADDING-1, PADDING, 30, false);
DrawTopPanelButton(FORWARD_BUTTON, PADDING+TSZE+PADDING-2, PADDING, 31, false); DrawTopPanelButton(FORWARD_BUTTON, PADDING+TSZE+PADDING-2, PADDING, 31, false);
DrawTopPanelButton(SANDWICH_BUTTON, Form.cwidth-PADDING-TSZE-3, PADDING, -1, burger_active); //burger menu DrawTopPanelButton(SANDWICH_BUTTON, Form.cwidth-PADDING-TSZE-3, PADDING, -1, burger_active); //burger menu
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,1, sc.line); DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,1, sc.line);
DrawRectangle(WB1.list.x + WB1.list.w, WB1.list.y, scroll_wv.size_x, DrawRectangle(WB1.list.x + WB1.list.w, WB1.list.y, scroll_wv.size_x,
WB1.list.h-1, scroll_wv.bckg_col); WB1.list.h-1, scroll_wv.bckg_col);
}
if (!canvas.bufw) { if (!canvas.bufw) {
EventOpenFirstPage(); EventOpenFirstPage();
@@ -393,9 +406,12 @@ void draw_window()
WB1.DrawPage(); WB1.DrawPage();
DrawOmnibox(); DrawOmnibox();
} }
DrawProgress(); if (!application_mode) {
DrawStatusBar(NULL); DrawProgress();
DrawTabsBar(); DrawStatusBar(NULL);
DrawTabsBar();
}
} }
void EventOpenFirstPage() void EventOpenFirstPage()
@@ -572,6 +588,7 @@ void OpenPage(dword _open_URL)
history.add(#new_url); history.add(#new_url);
WB1.custom_encoding = -1; WB1.custom_encoding = -1;
if (streq(#new_url, URL_SERVICE_HOMEPAGE)) LoadInternalPage(#buildin_page_home, sizeof(buildin_page_home)); if (streq(#new_url, URL_SERVICE_HOMEPAGE)) LoadInternalPage(#buildin_page_home, sizeof(buildin_page_home));
else if (streq(#new_url, URL_SERVICE_HELP)) LoadInternalPage(#buildin_page_help, sizeof(buildin_page_help));
else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test)); else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test));
else if (streq(#new_url, URL_SERVICE_HISTORY)) ShowHistory(); 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));
@@ -740,12 +757,7 @@ void LoadInternalPage(dword _bufdata, _in_bufsize){
WB1.DrawPage(); WB1.DrawPage();
} }
http.hfree(); http.hfree();
if (WB1.img_url.count) { if (WB1.img_url.count) { GetImg(true); DrawOmnibox(); }
GetImg(true);
DrawOmnibox();
} else {
PageLoaded();
}
} }
} }
@@ -758,6 +770,7 @@ bool UrlExtIs(dword base, ext)
void DrawProgress() void DrawProgress()
{ {
dword pct; dword pct;
if (application_mode) return;
if (!http.transfer) return; if (!http.transfer) return;
if (http_get_type==PAGE) && (prbar.max) pct = prbar.value*30/prbar.max; else pct = 10; if (http_get_type==PAGE) && (prbar.max) pct = prbar.value*30/prbar.max; else pct = 10;
if (http_get_type==IMG) pct = prbar.value * 70 / prbar.max + 30; if (http_get_type==IMG) pct = prbar.value * 70 / prbar.max + 30;
@@ -766,18 +779,21 @@ void DrawProgress()
void EventShowPageMenu() void EventShowPageMenu()
{ {
if (application_mode) return;
open_lmenu(mouse.x, mouse.y, MENU_TOP_LEFT, NULL, #rmb_menu); open_lmenu(mouse.x, mouse.y, MENU_TOP_LEFT, NULL, #rmb_menu);
menu_id = BACK_BUTTON; menu_id = VIEW_SOURCE;
} }
void EventShowLinkMenu() void EventShowLinkMenu()
{ {
if (application_mode) return;
open_lmenu(mouse.x, mouse.y, MENU_TOP_LEFT, NULL, #link_menu); open_lmenu(mouse.x, mouse.y, MENU_TOP_LEFT, NULL, #link_menu);
menu_id = IN_NEW_TAB; menu_id = IN_NEW_TAB;
} }
void EventShowMainMenu() void EventShowMainMenu()
{ {
if (application_mode) return;
open_lmenu(Form.cwidth - PADDING -4, PADDING + TSZE + 3, open_lmenu(Form.cwidth - PADDING -4, PADDING + TSZE + 3,
MENU_TOP_RIGHT, NULL, #main_menu); MENU_TOP_RIGHT, NULL, #main_menu);
menu_id = OPEN_FILE; menu_id = OPEN_FILE;
@@ -785,6 +801,7 @@ void EventShowMainMenu()
void EventShowEncodingsList() void EventShowEncodingsList()
{ {
if (application_mode) return;
open_lmenu(Form.cwidth-4, Form.cheight - STATUSBAR_H + 12, open_lmenu(Form.cwidth-4, Form.cheight - STATUSBAR_H + 12,
MENU_BOT_RIGHT, WB1.cur_encoding + 1, MENU_BOT_RIGHT, WB1.cur_encoding + 1,
"UTF-8\nKOI8-RU\nCP1251\nCP1252\nISO8859-5\nCP866"); "UTF-8\nKOI8-RU\nCP1251\nCP1252\nISO8859-5\nCP866");
@@ -807,8 +824,7 @@ void EventSeachWeb()
{ {
char new_url[URL_SIZE+1]; char new_url[URL_SIZE+1];
replace_char(#editURL, ' ', '+', URL_SIZE); replace_char(#editURL, ' ', '+', URL_SIZE);
//strcpy(#new_url, "https://html.duckduckgo.com/html/?q="); strcpy(#new_url, "https://www.google.com/search?q=");
strcpy(#new_url, "http://bing.com/search?q=");
strncat(#new_url, #editURL, URL_SIZE); strncat(#new_url, #editURL, URL_SIZE);
OpenPage(#new_url); OpenPage(#new_url);
} }
@@ -870,6 +886,7 @@ void DrawStatusBar(dword _msg)
{ {
dword status_y = Form.cheight - STATUSBAR_H + 4; dword status_y = Form.cheight - STATUSBAR_H + 4;
dword status_w = Form.cwidth - 90; dword status_w = Form.cwidth - 90;
if (application_mode) return;
if (Form.status_window>2) return; if (Form.status_window>2) return;
DrawBar(0,Form.cheight - STATUSBAR_H+1, Form.cwidth,STATUSBAR_H-1, sc.work); DrawBar(0,Form.cheight - STATUSBAR_H+1, Form.cwidth,STATUSBAR_H-1, sc.work);
if (_msg) { if (_msg) {
@@ -883,6 +900,7 @@ void DrawStatusBar(dword _msg)
void DrawOmnibox() void DrawOmnibox()
{ {
int imgxoff; int imgxoff;
if (application_mode) return;
DrawOvalBorder(omnibox_edit.left-2, omnibox_edit.top-3, omnibox_edit.width+18, 24, sc.line, DrawOvalBorder(omnibox_edit.left-2, omnibox_edit.top-3, omnibox_edit.width+18, 24, sc.line,
sc.line, sc.line, sc.dark); sc.line, sc.line, sc.dark);
DrawBar(omnibox_edit.left-1, omnibox_edit.top-2, omnibox_edit.width+18, 1, 0xD8DCD8); DrawBar(omnibox_edit.left-1, omnibox_edit.top-2, omnibox_edit.width+18, 1, 0xD8DCD8);
@@ -901,6 +919,7 @@ void DrawOmnibox()
void SetOmniboxText(dword _text) void SetOmniboxText(dword _text)
{ {
if (application_mode) return;
edit_box_set_text stdcall (#omnibox_edit, _text); edit_box_set_text stdcall (#omnibox_edit, _text);
omnibox_edit.pos = omnibox_edit.flags = 0; omnibox_edit.pos = omnibox_edit.flags = 0;
DrawOmnibox(); DrawOmnibox();
@@ -981,13 +1000,8 @@ dword GetImg(bool _new)
DrawStatusBar(T_RENDERING); DrawStatusBar(T_RENDERING);
WB1.Reparse(); WB1.Reparse();
WB1.DrawPage(); WB1.DrawPage();
PageLoaded(); debugln(sprintf(#param, T_DONE_IN_SEC, GetStartTime()-render_start_time/100));
} DrawStatusBar(NULL);
void PageLoaded()
{
DrawStatusBar(sprintf(#param, T_DONE_IN_SEC, GetStartTime()-render_start_time/100,
GetStartTime()-render_start_time*10));
} }
stop: stop:

View File

@@ -16,7 +16,7 @@ struct _cache
void add(); void add();
bool has(); bool has();
void clear(); void clear();
} cache; } cache=0;
void _cache::add(dword _url, _data, _size, _type, _charset) void _cache::add(dword _url, _data, _size, _type, _charset)
{ {
@@ -37,7 +37,6 @@ void _cache::add(dword _url, _data, _size, _type, _charset)
bool _cache::has(dword _link) bool _cache::has(dword _link)
{ {
int pos; int pos;
if (!url.count) return false;
pos = url.get_pos_by_name(_link); pos = url.get_pos_by_name(_link);
if (pos != -1) { if (pos != -1) {
current_buf = data.get(pos); current_buf = data.get(pos);

View File

@@ -9,11 +9,8 @@ char buildin_page_home[] = FROM "res/homepage_ru.htm";
char buildin_page_help[] = FROM "res/help_ru.htm"; char buildin_page_help[] = FROM "res/help_ru.htm";
char accept_language[]= "Accept-Language: ru\n"; char accept_language[]= "Accept-Language: ru\n";
char rmb_menu[] = char rmb_menu[] =
"Back|Ctrl+< "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E5AEA4><EFBFBD>|Ctrl+U
Forward|Ctrl+> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
-
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|Ctrl+U
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|F2";
char main_menu[] = char main_menu[] =
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>...|Ctrl+O "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>...|Ctrl+O
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>|Ctrl+N <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>|Ctrl+N
@@ -30,14 +27,14 @@ char link_menu[] =
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>"; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>";
char loading_text[] = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."; char loading_text[] = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...";
char update_param[] = "-e http://builds.kolibrios.org/ru_RU/data/programs/cmm/browser/WebView.com"; char update_param[] = "-e http://builds.kolibrios.org/rus/data/programs/cmm/browser/WebView.com";
char update_download_error[] = "'WebView\n<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!' -tE"; char update_download_error[] = "'WebView\n<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!' -tE";
char update_ok[] = "'WebView\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20>ᯥ譮 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!' -tO"; char update_ok[] = "'WebView\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20>ᯥ譮 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!' -tO";
char update_is_current[] = "'WebView\n<EFBFBD><EFBFBD><20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E1ABA5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.' -tI"; char update_is_current[] = "'WebView\n<EFBFBD><EFBFBD><20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E1ABA5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.' -tI";
char update_can_not_copy[] = "'WebView\n<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> Downloads <20><> Ramdisk. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>.' -tE"; char update_can_not_copy[] = "'WebView\n<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> Downloads <20><> Ramdisk. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>.' -tE";
char clear_cache_ok[] = "'WebView\n<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>饭.' -tI"; char clear_cache_ok[] = "'WebView\n<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>饭.' -tI";
#define T_RENDERING "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD>..." #define T_RENDERING "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD>..."
#define T_DONE_IN_SEC "<22><><EFBFBD>: %i ᥪ (%i <20><><EFBFBD><EFBFBD>ᥪ)" #define T_DONE_IN_SEC "<22><><EFBFBD>: %i ᥪ"
#else #else
//===================================================// //===================================================//
// // // //
@@ -49,11 +46,8 @@ char buildin_page_home[] = FROM "res/homepage_en.htm";
char buildin_page_help[] = FROM "res/help_en.htm"; char buildin_page_help[] = FROM "res/help_en.htm";
char accept_language[]= "Accept-Language: en\n"; char accept_language[]= "Accept-Language: en\n";
char rmb_menu[] = char rmb_menu[] =
"Back|Ctrl+< "View source|Ctrl+U
Forward|Ctrl+> Edit source";
-
View source|Ctrl+U
Edit source|F2";
char main_menu[] = char main_menu[] =
"Open local file...|Ctrl+O "Open local file...|Ctrl+O
New window|Ctrl+N New window|Ctrl+N
@@ -69,14 +63,14 @@ Open in new window
Copy link Copy link
Download link contents"; Download link contents";
char loading_text[] = "Loading..."; char loading_text[] = "Loading...";
char update_param[] = "-e http://builds.kolibrios.org/en_US/data/programs/cmm/browser/WebView.com"; char update_param[] = "-e http://builds.kolibrios.org/eng/data/programs/cmm/browser/WebView.com";
char update_download_error[] = "'WebView\nError receiving an up to date information!' -tE"; char update_download_error[] = "'WebView\nError receiving an up to date information!' -tE";
char update_ok[] = "'WebView\nThe browser has been updated!' -tO"; char update_ok[] = "'WebView\nThe browser has been updated!' -tO";
char update_is_current[] = "'WebView\nThe browser is up to date.' -tI"; char update_is_current[] = "'WebView\nThe browser is up to date.' -tI";
char update_can_not_copy[] = "'WebView\nError copying a new version from Downloads folder!\nProbably too litle space on Ramdisk.' -tE"; char update_can_not_copy[] = "'WebView\nError copying a new version from Downloads folder!\nProbably too litle space on Ramdisk.' -tE";
char clear_cache_ok[] = "'WebView\nThe cache has been cleared.' -tI"; char clear_cache_ok[] = "'WebView\nThe cache has been cleared.' -tI";
#define T_RENDERING "Rendering..." #define T_RENDERING "Rendering..."
#define T_DONE_IN_SEC "Done in %i sec (%i milisec)" #define T_DONE_IN_SEC "Done in %i sec"
#endif #endif
//===================================================// //===================================================//
@@ -89,6 +83,7 @@ char buildin_page_test[] = FROM "res/test.htm";
#define URL_SERVICE_HISTORY "WebView:history" #define URL_SERVICE_HISTORY "WebView:history"
#define URL_SERVICE_HOMEPAGE "WebView:home" #define URL_SERVICE_HOMEPAGE "WebView:home"
#define URL_SERVICE_HELP "WebView:help"
#define URL_SERVICE_TEST "WebView:test" #define URL_SERVICE_TEST "WebView:test"
char webview_shared[] = "WEBVIEW"; char webview_shared[] = "WEBVIEW";
@@ -96,12 +91,12 @@ char webview_shared[] = "WEBVIEW";
enum { enum {
NEW_TAB=600, NEW_TAB=600,
ENCODINGS=700, ENCODINGS=700,
BACK_BUTTON=800, FORWARD_BUTTON, VIEW_SOURCE, EDIT_SOURCE, BACK_BUTTON=800,
REFRESH_BUTTON, GOTOURL_BUTTON, CHANGE_ENCODING, FORWARD_BUTTON, REFRESH_BUTTON, GOTOURL_BUTTON, CHANGE_ENCODING,
SANDWICH_BUTTON, SANDWICH_BUTTON, VIEW_SOURCE, EDIT_SOURCE, OPEN_FILE,
OPEN_FILE, NEW_WINDOW, VIEW_HISTORY, DOWNLOAD_MANAGER, NEW_WINDOW, VIEW_HISTORY, DOWNLOAD_MANAGER, CLEAR_CACHE,
CLEAR_CACHE, UPDATE_BROWSER, IN_NEW_TAB, IN_NEW_WINDOW, UPDATE_BROWSER, IN_NEW_TAB, IN_NEW_WINDOW, COPY_LINK_URL,
COPY_LINK_URL, DOWNLOAD_LINK_CT, TAB_ID, DOWNLOAD_LINK_CT, TAB_ID,
TAB_CLOSE_ID = 900 TAB_CLOSE_ID = 900
}; };
@@ -112,4 +107,4 @@ char editbox_icons[] = FROM "res/editbox_icons.raw";
#define DEFAULT_URL URL_SERVICE_HOMEPAGE #define DEFAULT_URL URL_SERVICE_HOMEPAGE
char version[]="WebView 3.82"; char version[]="WebView 3.66-3";

View File

@@ -2,16 +2,15 @@
<head> <head>
<title>Homepage</title> <title>Homepage</title>
</head> </head>
<body><pre>Welcome to WebView a Text-Based Browser. <body><pre>Bookmarks:
1. <a href=//kolibrios.org>KolibriOS homepage</a>
KolibriOS Bookmarks: 2. <a href=//kolibri-n.org>KolibriN homepage</a>
1. <a href=//kolibrios.org>Homepage</a> 3. <a href="//builds.kolibrios.org">Night-builds</a>
2. <a href="//builds.kolibrios.org">Night-builds</a> 4. <a href="//store.kolibri-n.org">Kolibri Stuff</a>
3. <a href="//ftp.kolibrios.org">FTP Server</a>
<font bg=#F8F15B>By the way,</font> <font bg=#F8F15B>By the way,</font>
<font color="#555555">&bull; You can check for browser updates from the main menu. <font color="#555555">&bull; You can check for browser updates from the main menu.
&bull; To run a web search, type a text in the adress box and press Ctrl+Enter. &bull; To run a web search, type a text in the adress box and press Ctrl+Enter.
&bull; Pressing F6 moves a text cursor to the omnibox. &bull; You can also use other <a href=WebView:help><font color=555555>Hotkeys</font></a>.
&bull; Click on a label in the bottom right corner to change the encoding of a page. &bull; Click on a label in the bottom right corner to change the encoding of a page.
</font> </font>

View File

@@ -1,15 +1,17 @@
<html><head><meta charset="cp-866"> <html>
<title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></title></head> <head>
<body><pre><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E2AEA2> <20><><EFBFBD><EFBFBD> WebView! <meta charset="cp-866">
<title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></title>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> KolibriOS:<ol> </head>
<li><a href=//kolibrios.org><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><></a> <body><pre><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
<li><a href="//builds.kolibrios.org"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᡮન</a> 1. <a href=//kolibrios.org><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD> KolibriOS</a>
<li><a href="//ftp.kolibrios.org">FTP <20><><EFBFBD></a></ol> 2. <a href=//kolibri-n.org>KolibriN10</a>
3. <a href="//builds.kolibrios.org"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᡮન</a>
4. <a href="//store.kolibri-n.org">Kolibri Store</a>
<font bg=#F8F15B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,</font> <font bg=#F8F15B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,</font>
<font color="#555555">&bull; <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <font color="#555555">&bull; <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
&bull; <20><><EFBFBD> <20><><EFBFBD><20> Google <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ctrl+Enter &bull; <20><><EFBFBD> <20><><EFBFBD><20> Google <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ctrl+Enter
&bull; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> F6 <20><><EFBFBD><EFBFBD><><EFBFBD><E2AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. &bull; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <a href=WebView:help><font color=555555><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></font></a>.
&bull; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><E0A0AD><EFBFBD>, <20><><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E0A0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><> <20><><EFBFBD><EFBFBD>. &bull; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><E0A0AD><EFBFBD>, <20><><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E0A0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><> <20><><EFBFBD><EFBFBD>.
</font>

View File

@@ -2,22 +2,23 @@
<title>TEST</title> <title>TEST</title>
<style>a {display:block;font-size:130%;margin:5px 40px 5px 0;}</style> <style>a {display:block;font-size:130%;margin:5px 40px 5px 0;}</style>
<body> <body>
<pre><a href=//wiby.org>wiby.org</a> <pre>
<a href=//www.xlr8yourmac.com/OSX/os_x_network_cards.html>OSX network cards</a> <a href=//kolibrios.org>KolibriOS</a>
<a href=//macintoshgarden.org/>Macintosh Garden</a> <a href=//kolibri-n.org>KolibriN10</a>
<a href=//store.kolibri-n.org>Kolibri Store</a>
<table><tr><td>Simplest: <table><tr><td>Simplest:
<a href=//nostalgy.net.ru/>nostalgy.net.ru</a> <a href=//nostalgy.net.ru/>nostalgy.net.ru</a>
<a href=//pci-ids.ucw.cz>pci.ids</a> <a href=//pci-ids.ucw.cz>pci.ids</a>
<a href=//dgmag.in>dgmag.in</a> <a href=//dgmag.in>dgmag.in</a>
<a href=//web.archive.org/web/https://bash.im>bash.im</a> <a href=//bash.im>bash.im</a>
<a href=//web.archive.org/web/https://opennet.ru>opennet</a> <a href=//opennet.ru>opennet</a>
<a href=//linux.org.ru>LOR</a> <a href=//linux.org.ru>LOR</a>
<a href=//web.archive.org/web/https://samlib.ru/b>samlib.ru/b</a> <a href=//baravy.by/me/b.html>baravy.by/me/b.html</a>
<a href=//web.archive.org/web/https://mirrors.pdp-11.ru>mirrors.pdp-11.ru</a> <a href=//samlib.ru/b>samlib.ru/b</a>
<a href=//web.archive.org/web/http://gona.mactar.hu/ATI_Mac/>ATI drivers for Mac</a> <a href=//mirrors.pdp-11.ru>mirrors.pdp-11.ru</a>
<td>Simple: <td>Simple:
<a href=//web.archive.org/web/http://lionovsky.us>lionovsky.us</a> <a href=//lionovsky.us>lionovsky.us</a>
<a href=//os-menuet.narod.ru>os-menuet.narod.ru</a> <a href=//os-menuet.narod.ru>os-menuet.narod.ru</a>
<a href=//mestack.narod.ru/index.html>mestack.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=//coolthemes.narod.ru/indexold.html>coolthemes.narod.ru</a>
@@ -33,7 +34,8 @@ Moderate:
<a href=//www.weitek.com/textual/support/driver.html>weitek</a> <a href=//www.weitek.com/textual/support/driver.html>weitek</a>
<a href=//www.abandonwarering.com/?Page=Listing>abandonware</a> <a href=//www.abandonwarering.com/?Page=Listing>abandonware</a>
<td>Complex: <td>Complex:
<a href=//web.archive.org/web/https://artcon.ru>artcon.ru</a> <a href=//artcon.ru>artcon.ru</a>
<a href=//nubo.ru>nubo.ru</a> <a href=//nubo.ru>nubo.ru</a>
<a href=//salinc.ru>salinc.ru</a>
<a href=//electromyne.de>electromyne.de</a> <a href=//electromyne.de>electromyne.de</a>
<a href=//web.archive.org/web/20190403215447//www.thg.ru/>thg</a> <a href=//www.thg.ru/graphic/25year_ati_history>tom's hardware</a>

View File

@@ -7,8 +7,8 @@
#define TABS_MAX 5 #define TABS_MAX 5
TWebBrowser tabdata[TABS_MAX+1]; TWebBrowser tabdata[TABS_MAX+1]=0;
_history tabstory[TABS_MAX+1]; _history tabstory[TABS_MAX+1]=0;
struct TAB struct TAB
{ {

View File

@@ -17,10 +17,8 @@
#define T_STATUS_DL_P2 " M<> <20><><EFBFBD><EFBFBD><EFBFBD> (" #define T_STATUS_DL_P2 " M<> <20><><EFBFBD><EFBFBD><EFBFBD> ("
#define T_STATUS_DL_P3 " K<>/<EFBFBD>) " #define T_STATUS_DL_P3 " K<>/<EFBFBD>) "
#define T_ERROR_TOO_MANY_REDIRECTS "'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>\n<><6E><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>४⮢ (HTTP 3XX)' -Et" #define FILE_SAVED_AS "'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>\n<><6E><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> %s' -Dt"
#define FILE_NOT_SAVED "'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>\n<><EFBFBD><E8A8A1>! <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD> <20><><EFBFBD>\n%s' -Et"
#define T_FILE_SAVED_AS "'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>\n<><6E><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD> <20><><EFBFBD> %s' -Dt"
#define T_FILE_NOT_SAVED "'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>\n<><EFBFBD><E8A8A1>! <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD> <20><><EFBFBD>\n%s' -Et"
#define T_ERROR_STARTING_DOWNLOAD "'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᪠稢<E1AAA0><E7A8A2><EFBFBD><EFBFBD>.\n<><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><E1AEA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>୥⮬.' -E" #define T_ERROR_STARTING_DOWNLOAD "'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᪠稢<E1AAA0><E7A8A2><EFBFBD><EFBFBD>.\n<><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><E1AEA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>୥⮬.' -E"
char accept_language[]= "Accept-Language: ru\n"; char accept_language[]= "Accept-Language: ru\n";
#else #else
@@ -40,10 +38,8 @@
#define T_STATUS_DL_P2 " MB received (" #define T_STATUS_DL_P2 " MB received ("
#define T_STATUS_DL_P3 " KB/s) " #define T_STATUS_DL_P3 " KB/s) "
#define T_ERROR_TOO_MANY_REDIRECTS "'Download manager\nToo many redirects' -Et" #define FILE_SAVED_AS "'Download manager\nFile saved as %s' -Dt"
#define FILE_NOT_SAVED "'Download manager\nError! Can\96t save file as %s' -Et"
#define T_FILE_SAVED_AS "'Download manager\nFile saved as %s' -Dt"
#define T_FILE_NOT_SAVED "'Download manager\nError! Can\96t save file as %s' -Et"
#define T_ERROR_STARTING_DOWNLOAD "'Error while starting download process.\nCheck entered path and Internet connection.' -E" #define T_ERROR_STARTING_DOWNLOAD "'Error while starting download process.\nCheck entered path and Internet connection.' -E"
char accept_language[]= "Accept-Language: en\n"; char accept_language[]= "Accept-Language: en\n";
#endif #endif

View File

@@ -11,8 +11,6 @@ bool open_file = false;
dword speed; dword speed;
int redirect_count;
_http http; _http http;
checkbox autoclose = { T_AUTOCLOSE, false }; checkbox autoclose = { T_AUTOCLOSE, false };
@@ -230,7 +228,6 @@ void InitDownload()
pb.progress_color = PB_COL_PROGRESS; pb.progress_color = PB_COL_PROGRESS;
filepath = '\0'; filepath = '\0';
active_status = T_STATUS_READY; active_status = T_STATUS_READY;
redirect_count = 0;
} }
void MonitorProgress() void MonitorProgress()
@@ -244,13 +241,6 @@ void MonitorProgress()
DrawDownloadingProgress(); DrawDownloadingProgress();
} else { } else {
if (http.status_code >= 300) && (http.status_code < 400) { if (http.status_code >= 300) && (http.status_code < 400) {
redirect_count++;
if (redirect_count >= 5) {
notify(T_ERROR_TOO_MANY_REDIRECTS);
ProcessButtonClick(BTN_STOP);
EditBox_UpdateText(#ed, ed_focus + ed_always_focus);
return;
}
http.header_field("location", #redirect_url, URL_SIZE); http.header_field("location", #redirect_url, URL_SIZE);
get_absolute_url(#redirect_url, #uEdit); get_absolute_url(#redirect_url, #uEdit);
edit_box_set_text stdcall (#ed, #redirect_url); edit_box_set_text stdcall (#ed, #redirect_url);
@@ -317,9 +307,9 @@ void SaveFile(int attempt)
} }
if (CreateFile(http.content_received, http.content_pointer, #filepath)==0) { if (CreateFile(http.content_received, http.content_pointer, #filepath)==0) {
miniprintf(#notify_message, T_FILE_SAVED_AS, #filepath); miniprintf(#notify_message, FILE_SAVED_AS, #filepath);
} else { } else {
miniprintf(#notify_message, T_FILE_NOT_SAVED, #filepath); miniprintf(#notify_message, FILE_NOT_SAVED, #filepath);
} }
if (!autoclose.checked) notify(#notify_message); if (!autoclose.checked) notify(#notify_message);

View File

@@ -11,9 +11,9 @@ TODO:
http://board.kolibrios.org/viewtopic.php?f=23&t=4521&p=77334#p77334 http://board.kolibrios.org/viewtopic.php?f=23&t=4521&p=77334#p77334
*/ */
#define ABOUT_TITLE "EOLITE 5.27" #define ABOUT_TITLE "EOLITE 5.26a"
#define TITLE_EOLITE "Eolite File Manager 5.27" #define TITLE_EOLITE "Eolite File Manager 5.26a"
#define TITLE_KFM "Kolibri File Manager 2.27"; #define TITLE_KFM "Kolibri File Manager 2.26a";
#define MEMSIZE 1024 * 250 #define MEMSIZE 1024 * 250
#include "../lib/clipboard.h" #include "../lib/clipboard.h"
@@ -239,7 +239,6 @@ void main()
if (key_modifier&KEY_LSHIFT) || (key_modifier&KEY_RSHIFT) { if (key_modifier&KEY_LSHIFT) || (key_modifier&KEY_RSHIFT) {
EventChooseFilesRange(old_cur_y, files.cur_y); EventChooseFilesRange(old_cur_y, files.cur_y);
} else if (key_modifier&KEY_LCTRL) || (key_modifier&KEY_RCTRL) { } else if (key_modifier&KEY_LCTRL) || (key_modifier&KEY_RCTRL) {
if (!getSelectedCount()) EventChooseFile(old_cur_y);
EventChooseFile(files.cur_y); EventChooseFile(files.cur_y);
DrawStatusBar(); DrawStatusBar();
List_ReDraw(); List_ReDraw();
@@ -540,7 +539,7 @@ void draw_window()
incn x; incn x;
dword title; dword title;
static int rand_n; static int rand_n;
if (!rand_n) && (Form.width + 1 != screen.w) rand_n = random(80); if (!rand_n) rand_n = random(80);
if (show_status_bar.checked) { if (show_status_bar.checked) {
#define STBAR_EOLITE_H 16 #define STBAR_EOLITE_H 16

View File

@@ -13,6 +13,7 @@ struct collection_int
dword buf; dword buf;
dword buf_size; dword buf_size;
unsigned count; unsigned count;
void alloc();
void add(); void add();
dword get(); dword get();
dword set(); dword set();
@@ -21,35 +22,34 @@ struct collection_int
dword get_last(); dword get_last();
void pop(); void pop();
void drop(); void drop();
#define DWSIZE4 4
}; };
:void collection_int::add(dword _in) { :void collection_int::alloc() {
unsigned i;
if (!buf) { if (!buf) {
//if (buf_size) notify("'buf_size on empty buf' -A"); buf_size = 4096;
buf_size = 4096 * 5; buf = malloc(4096);
buf = malloc(4096 * 5); } else {
//if (!buf) notify("'malloc error' -E"); buf_size += 4096;
} else if (count + 1 * DWSIZE4 >= buf_size) {
buf_size += 4096 * 5;
buf = realloc(buf, buf_size); buf = realloc(buf, buf_size);
//if (!buf) notify("'realloc error' -E");
} }
i = count * DWSIZE4 + buf; }
ESDWORD[i] = _in;
:void collection_int::add(dword _in) {
if (!buf) || (count * sizeof(dword) >= buf_size) alloc();
EAX = count * sizeof(dword) + buf;
ESDWORD[EAX] = _in;
count++; count++;
} }
:dword collection_int::get(dword pos) { :dword collection_int::get(dword pos) {
if (!buf) || (pos<0) || (pos>=count) return 0; if (pos<0) || (pos>=count) return 0;
return ESDWORD[pos * DWSIZE4 + buf]; return ESDWORD[pos * sizeof(dword) + buf];
} }
:dword collection_int::set(dword pos, _in) { :dword collection_int::set(dword pos, _in) {
while (pos >= count) add(0); while (pos >= count) add(0);
EAX = pos * DWSIZE4 + buf; EAX = pos * sizeof(dword) + buf;
ESDWORD[EAX] = _in; ESDWORD[EAX] = _in;
return ESDWORD[EAX]; return ESDWORD[EAX];
} }
@@ -57,8 +57,8 @@ struct collection_int
:void collection_int::swap(dword pos1, pos2) { :void collection_int::swap(dword pos1, pos2) {
while (pos1 >= count) add(0); while (pos1 >= count) add(0);
while (pos2 >= count) add(0); while (pos2 >= count) add(0);
EAX = pos1 * DWSIZE4 + buf; EAX = pos1 * sizeof(dword) + buf;
EBX = pos2 * DWSIZE4 + buf; EBX = pos2 * sizeof(dword) + buf;
ESDWORD[EAX] >< ESDWORD[EBX]; ESDWORD[EAX] >< ESDWORD[EBX];
} }
@@ -77,8 +77,6 @@ struct collection_int
:void collection_int::drop() { :void collection_int::drop() {
count = 0; count = 0;
if (buf) buf = free(buf);
buf_size = 0;
} }
/*======================================================== /*========================================================
@@ -89,11 +87,12 @@ struct collection_int
struct collection struct collection
{ {
unsigned int realloc_size, count; int realloc_size, count;
dword data_start; dword data_start;
dword data_size; dword data_size;
collection_int offset; collection_int offset;
dword add(); int add();
int addn();
dword get(); //get_name_by_pos dword get(); //get_name_by_pos
dword get_pos_by_name(); dword get_pos_by_name();
void drop(); void drop();
@@ -106,22 +105,28 @@ struct collection
if (realloc_size<4096) realloc_size = 4096; if (realloc_size<4096) realloc_size = 4096;
if (!data_size) { if (!data_size) {
data_size = realloc_size; data_size = realloc_size;
data_start = malloc(data_size); data_start = malloc(realloc_size);
} else { }
else {
data_size = data_size + realloc_size; data_size = data_size + realloc_size;
data_start = realloc(data_start, data_size); data_start = realloc(data_start, data_size);
} }
} }
:dword collection::add(dword in) { :int collection::add(dword in) {
dword len = strlen(in); return addn(in, strlen(in));
while (offset.get(count) + len + 4 > data_size) { }
:int collection::addn(dword in, len) {
if (offset.get(count)+len+2 > data_size) {
increase_data_size(); increase_data_size();
addn(in, len);
return 1;
} }
strncpy(data_start+offset.get(count), in, len); strncpy(data_start+offset.get(count), in, len);
count++; count++;
offset.set(count, offset.get(count-1) + len + 1); offset.set(count, offset.get(count-1) + len + 1);
return data_start+offset.get(count-1); return 1;
} }
:dword collection::get(dword pos) { :dword collection::get(dword pos) {
@@ -136,9 +141,7 @@ struct collection
:dword collection::get_pos_by_name(dword name) { :dword collection::get_pos_by_name(dword name) {
dword i; dword i;
for (i=0; i<count; i++) { for (i=0; i<count; i++) {
if (streq(data_start + offset.get(i), name)) { if (strcmp(data_start + offset.get(i), name)==0) return i;
return i;
}
} }
return -1; return -1;
} }

View File

@@ -57,8 +57,8 @@ inline fastcall void utf8rutodos( ESI)
while (BL=ESBYTE[ESI]) while (BL=ESBYTE[ESI])
{ {
if (BL == 0xD0) || (BL == 0xD1) EDI--; if (BL == 0xD0) || (BL == 0xD1) EDI--;
else if (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //I urk else if (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //<EFBFBD>
else if (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //i urk else if (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //<EFBFBD>
//0xE2 0x80 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //0xE2 0x80 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else if (BL == 0xE2) && (ESBYTE[ESI+1]==0x80) else if (BL == 0xE2) && (ESBYTE[ESI+1]==0x80)
switch (ESBYTE[ESI+2]) switch (ESBYTE[ESI+2])

View File

@@ -202,7 +202,7 @@ struct proc_info
byte reserved[1024-71]; byte reserved[1024-71];
}; };
:int GetProcessInfo(dword _process_struct_pointer, _process_id) :void GetProcessInfo(dword _process_struct_pointer, _process_id)
{ {
EAX = 9; EAX = 9;
EBX = _process_struct_pointer; EBX = _process_struct_pointer;

View File

@@ -70,17 +70,17 @@ char aURIunescape[] = "unescape";
#define FLAG_TRANSFER_FAILED 1 << 20 #define FLAG_TRANSFER_FAILED 1 << 20
struct http_msg{ struct http_msg{
dword socket; //socket on which the actual transfer happens dword socket;
dword flags; //flags, reflects status of the transfer using bitflags dword flags;
dword write_ptr; //internal use only (where to write new data in buffer) dword write_ptr;
dword buffer_length; //internal use only (number of available bytes in buffer) dword buffer_length;
dword chunk_ptr; //internal use only (where the next chunk begins) dword chunk_ptr;
dword timestamp; //internal use only (when last data was received) dword timestamp;
dword status; //HTTP status dword status;
dword header_length; //length of HTTP header dword header_length;
dword content_ptr; //ptr to content dword content_ptr;
dword content_length; //total length of HTTP content dword content_length;
dword content_received; //number of currently received content bytes dword content_received;
char http_header; char http_header;
}; };

View File

@@ -30,7 +30,8 @@ enum {
proc_info Process; proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++) for (i=0; i<MAX_PROCESS_COUNT; i++)
{ {
if (i > GetProcessInfo(#Process, i)) break; GetProcessInfo(#Process, i);
if (EAX+1 >= i) break;
if (Process.status_slot != TSTATE_FREE) if (Process.status_slot != TSTATE_FREE)
&& (strcmpi(#Process.name, proc_name)==0) && (strcmpi(#Process.name, proc_name)==0)
{ {
@@ -45,7 +46,8 @@ enum {
proc_info Process; proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++) for (i=0; i<MAX_PROCESS_COUNT; i++)
{ {
if (i > GetProcessInfo(#Process, i)) break; GetProcessInfo(#Process, i);
if (EAX+1 >= i) break;
if (Process.status_slot != TSTATE_FREE) if (Process.status_slot != TSTATE_FREE)
&& (strcmpi(#Process.name, proc_name)==0) && (strcmpi(#Process.name, proc_name)==0)
count++; count++;
@@ -64,7 +66,8 @@ enum {
GetProcessInfo(#Self, -1); GetProcessInfo(#Self, -1);
for (i=0; i<MAX_PROCESS_COUNT; i++) for (i=0; i<MAX_PROCESS_COUNT; i++)
{ {
if (i > GetProcessInfo(#Process, i)) break; GetProcessInfo(#Process, i);
if (EAX+1 >= i) break;
if (Process.name) if (Process.name)
&& (Process.ID != Self.ID) && (Process.ID != Self.ID)
KillProcess(Process.ID); KillProcess(Process.ID);

View File

@@ -1,2 +0,0 @@
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("aclock.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "aclock")

View File

@@ -1,3 +0,0 @@
@fasm.exe -m 16384 aclock.asm aclock.kex
@kpack aclock.kex
pause

View File

@@ -0,0 +1,2 @@
if tup.getconfig("NO_NASM") ~= "" then return end
tup.rule("aclock.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "aclock")

View File

@@ -16,42 +16,44 @@
; along with this program; if not, write to the Free Software ; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use32 bits 32
org 0 %include 'mos.inc'
db 'MENUET01' section .text
dd 1,main,image_end,memory_end,stacktop,cmdLine,0
include '../../macros.inc'
include '../../proc32.inc'
include '../../KOSfuncs.inc'
;******************************************************************** ;********************************************************************
; configuration stuff ; configuration stuff
;******************************************************************** ;********************************************************************
; skinned window borders
MOS_WND_SKIN_BORDER_LEFT = 5 %define APPNAME "Clock"
MOS_WND_SKIN_BORDER_RIGHT = 5 %define STACKSIZE 1024
MOS_WND_SKIN_BORDER_BOTTOM = 5
; default window position/dimensions (work area) ; default window position/dimensions (work area)
DEFAULT_XPOS =-20 %define DEFAULT_XPOS -20
DEFAULT_YPOS =20 %define DEFAULT_YPOS 20
DEFAULT_WIDTH =110 %define DEFAULT_WIDTH 110
DEFAULT_HEIGHT =110 %define DEFAULT_HEIGHT 110
; minimal size (horizontal and vertical) of work area ; minimal size (horizontal and vertical) of work area
MIN_WIDTH =100 %define MIN_WIDTH 100
MIN_HEIGHT =100 %define MIN_HEIGHT 100
;********************************************************************
; header
;********************************************************************
MOS_HEADER01 main,image_end,memory_end,stacktop-4,cmdLine,0
; these includes introduce code and thus mustn't stand ; these includes introduce code and thus mustn't stand
; before the menuet header =) ; before the menuet header =)
include 'dbgboard.inc' %include 'dbgboard.inc'
include 'strfunct.inc' %include 'strlen.inc'
include 'cmdline.inc' %include 'str2dwrd.inc'
include 'adjstwnd.inc' %include 'strtok.inc'
include 'draw.inc' %include 'cmdline.inc'
%include 'adjstwnd.inc'
%include 'draw.inc'
;******************************************************************** ;********************************************************************
; main program ; main program
@@ -87,18 +89,20 @@ main:
; call drawClock ; call drawClock
; wait up to a second for next event ; wait up to a second for next event
mcall SF_WAIT_EVENT_TIMEOUT,100 mov eax,MOS_SC_WAITEVENTTIMEOUT
mov ebx,100
int 0x40
test eax,eax test eax,eax
jne .event_occured jne .event_occured
call drawClock call drawClock
.event_occured: .event_occured:
cmp eax,EV_REDRAW cmp eax,MOS_EVT_REDRAW
je .redraw je .redraw
cmp eax,EV_KEY cmp eax,MOS_EVT_KEY
je .key je .key
cmp eax,EV_BUTTON cmp eax,MOS_EVT_BUTTON
je .button je .button
jmp .msgpump jmp .msgpump
@@ -106,10 +110,12 @@ main:
call drawWindow call drawWindow
jmp .msgpump jmp .msgpump
.key: .key:
mcall SF_GET_KEY mov eax,MOS_SC_GETKEY
int 0x40
jmp .msgpump jmp .msgpump
.button: .button:
mcall SF_TERMINATE_PROCESS mov eax,MOS_SC_EXIT
int 0x40
jmp .msgpump jmp .msgpump
@@ -122,7 +128,11 @@ main:
getDefaultWindowColors: getDefaultWindowColors:
pushad pushad
pushfd pushfd
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,wndColors,sizeof.system_colors mov eax,MOS_SC_WINDOWPROPERTIES
mov ebx,3
mov ecx,wndColors
mov edx,MOS_WNDCOLORS_size
int 0x40
popfd popfd
popad popad
ret ret
@@ -139,24 +149,29 @@ drawWindow:
pusha pusha
; start window redraw ; start window redraw
mcall SF_REDRAW,SSF_BEGIN_DRAW mov eax,MOS_SC_REDRAWSTATUS
mov ebx,1
int 0x40
; create window ; create window
mov eax,MOS_SC_DEFINEWINDOW
mov ebx,[wndXPos] mov ebx,[wndXPos]
shl ebx,16 shl ebx,16
or ebx,[wndWidth] or ebx,[wndWidth]
mov ecx,[wndYPos] mov ecx,[wndYPos]
shl ecx,16 shl ecx,16
or ecx,[wndHeight] or ecx,[wndHeight]
mov edx,[wndColors.work] mov edx,[wndColors+MOS_WNDCOLORS.work]
or edx,0x53000000 or edx,0x53000000
mov edi,w_label mov edi,label
mcall SF_CREATE_WINDOW int 0x40
call drawClock call drawClock
; end window redraw ; end window redraw
mcall SF_REDRAW,SSF_END_DRAW mov eax,MOS_SC_REDRAWSTATUS
mov ebx,2
int 0x40
popa popa
ret ret
@@ -173,29 +188,32 @@ wndWidth dd DEFAULT_WIDTH
wndHeight dd DEFAULT_HEIGHT wndHeight dd DEFAULT_HEIGHT
; window label ; window label
w_label: db "Clock",0 label db APPNAME,0
.end: LABEL_LEN equ ($-label-1)
LABEL_LEN equ (w_label.end-w_label-1)
; token delimiter list for command line ; token delimiter list for command line
delimiters db 9,10,11,12,13,32,0 delimiters db 9,10,11,12,13,32,0
; don't insert anything after this label
image_end: image_end:
;******************************************************************** ;********************************************************************
; uninitialized data ; uninitialized data
;******************************************************************** ;********************************************************************
align 4 section .bss align=4
wndColors system_colors
procInfo process_information wndColors resb MOS_WNDCOLORS_size
procInfo resb MOS_PROCESSINFO_size
; space for command line. at the end we have an additional ; space for command line. at the end we have an additional
; byte for a terminating zero, just to be sure... ; byte for a terminating zero, just to be sure...
cmdLine rb 257 cmdLine resb 257
align 4 alignb 4
rb 1024 stack resb STACKSIZE
stacktop: stacktop:
; don't insert anything after this label
memory_end: memory_end:

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -20,6 +20,8 @@
; along with this program; if not, write to the Free Software ; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
; ;
%ifndef _ADJSTWND_INC
%define _ADJSTWND_INC
;window types ;window types
@@ -70,7 +72,8 @@ adjustWindowDimensions:
; clamp window dimensions ; clamp window dimensions
.clamp: .clamp:
mcall SF_GET_SCREEN_SIZE ; get screen dimensions mov eax,MOS_SC_GETSCREENMAX ; get screen dimensions
int 0x40
mov edi,eax ; edi = screen width mov edi,eax ; edi = screen width
shr edi,16 shr edi,16
mov ebp,eax ; ebp = screen height mov ebp,eax ; ebp = screen height
@@ -133,10 +136,12 @@ adjustWindowDimensions:
add edx,MOS_WND_SKIN_BORDER_LEFT+MOS_WND_SKIN_BORDER_RIGHT add edx,MOS_WND_SKIN_BORDER_LEFT+MOS_WND_SKIN_BORDER_RIGHT
; adjust height (esi). we need the skin height to do this. ; adjust height (esi). we need the skin height to do this.
push ebx push ebx
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT mov eax,MOS_SC_WINDOWPROPERTIES
mov ebx,4
int 0x40
lea esi,[esi+eax+MOS_WND_SKIN_BORDER_BOTTOM] lea esi,[esi+eax+MOS_WND_SKIN_BORDER_BOTTOM]
pop ebx pop ebx
jmp .clamp jmp .clamp
%endif

View File

@@ -17,6 +17,8 @@
; along with this program; if not, write to the Free Software ; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
; ;
%ifndef _CMDLINE_INC
%define _CMDLINE_INC
;******************************************************************** ;********************************************************************
@@ -103,7 +105,8 @@ parseCommandLine:
; output : eax contains position ; output : eax contains position
; destroys : nothing ; destroys : nothing
parsePositionParam: parsePositionParam:
push ebx esi push ebx
push esi
pushfd pushfd
; is the second char of the parameter a '-' ? ; is the second char of the parameter a '-' ?
@@ -126,7 +129,8 @@ parsePositionParam:
.rotationshyperboloid: .rotationshyperboloid:
popfd popfd
pop esi ebx pop esi
pop ebx
ret ret
; parse dimension parameter ; parse dimension parameter
@@ -143,4 +147,5 @@ parseSizeParam:
ret ret
%endif

View File

@@ -19,34 +19,20 @@
; along with this program; if not, write to the Free Software ; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
; ;
%ifndef _DBGBOARD_INC
%define _DBGBOARD_INC
if DEBUG eq %ifdef DEBUG
macro DBG_BOARD_PRINTNEWLINE {
}
macro DBG_BOARD_PRINTCHAR c1 {
}
macro DBG_BOARD_PRINTDWORD w1 {
}
macro DBG_BOARD_PRINTSTRINGLITERAL p1 {
}
macro DBG_BOARD_PRINTSTRING s1 {
}
else
;******************************************************************** ;********************************************************************
; print newline ; print newline
; no input ; no input
;******************************************************************** ;********************************************************************
macro DBG_BOARD_PRINTNEWLINE { %macro DBG_BOARD_PRINTNEWLINE 0
call dbg_board_printnewline call dbg_board_printnewline
} %endm
;******************************************************************** ;********************************************************************
@@ -58,12 +44,12 @@ macro DBG_BOARD_PRINTNEWLINE {
; DBG_BOARD_PRINTCHAR [esi] ; DBG_BOARD_PRINTCHAR [esi]
; DBG_BOARD_PRINTCHAR [somevariable] ; DBG_BOARD_PRINTCHAR [somevariable]
;******************************************************************** ;********************************************************************
macro DBG_BOARD_PRINTCHAR c1 { %macro DBG_BOARD_PRINTCHAR 1
push ecx push ecx
mov cl,byte c1 mov cl,byte %1
call dbg_board_printchar call dbg_board_printchar
pop ecx pop ecx
} %endm
@@ -74,10 +60,10 @@ macro DBG_BOARD_PRINTCHAR c1 {
; DBG_BOARD_PRINTDWORD 0xdeadbeef ; DBG_BOARD_PRINTDWORD 0xdeadbeef
; DBG_BOARD_PRINTDWORD [somevariable] ; DBG_BOARD_PRINTDWORD [somevariable]
;******************************************************************** ;********************************************************************
macro DBG_BOARD_PRINTDWORD w1 { %macro DBG_BOARD_PRINTDWORD 1
push dword w1 push dword %1
call dbg_board_printdword call dbg_board_printdword
} %endm
;******************************************************************** ;********************************************************************
@@ -87,14 +73,13 @@ macro DBG_BOARD_PRINTDWORD w1 {
; examples DBG_BOARD_PRINTSTRINGLITERAL "foo",0 ; examples DBG_BOARD_PRINTSTRINGLITERAL "foo",0
; DBG_BOARD_PRINTSTRINGLITERAL "bar",10,13,0 ; DBG_BOARD_PRINTSTRINGLITERAL "bar",10,13,0
;******************************************************************** ;********************************************************************
macro DBG_BOARD_PRINTSTRINGLITERAL p1 { %macro DBG_BOARD_PRINTSTRINGLITERAL 1+
local .foo jmp %%bar
jmp @f %%foo db %1, 0 ; terminate string, just to be sure
.foo db p1, 0 ; terminate string, just to be sure %%bar:
@@: push dword %%foo
push dword .foo
call dbg_board_printstring call dbg_board_printstring
} %endm
;******************************************************************** ;********************************************************************
@@ -104,18 +89,22 @@ macro DBG_BOARD_PRINTSTRINGLITERAL p1 {
; DBG_BOARD_PRINTSTRING esi ; DBG_BOARD_PRINTSTRING esi
; DBG_BOARD_PRINTSTRING [ebx] ; DBG_BOARD_PRINTSTRING [ebx]
;******************************************************************** ;********************************************************************
macro DBG_BOARD_PRINTSTRING s1 { %macro DBG_BOARD_PRINTSTRING 1
push dword s1 push dword %1
call dbg_board_printstring call dbg_board_printstring
} %endm
; no input ; no input
dbg_board_printnewline: dbg_board_printnewline:
pushad pushad
pushfd pushfd
mcall SF_BOARD,SSF_DEBUG_WRITE,10 mov eax,MOS_SC_DEBUGBOARD
mcall ,,13 mov ebx,1
mov ecx,10
int 0x40
mov ecx,13
int 0x40
popfd popfd
popad popad
ret ret
@@ -125,8 +114,10 @@ dbg_board_printnewline:
dbg_board_printchar: dbg_board_printchar:
pushad pushad
pushfd pushfd
mov eax,MOS_SC_DEBUGBOARD
mov ebx,1
and ecx,0xff and ecx,0xff
mcall SF_BOARD,SSF_DEBUG_WRITE int 0x40
popfd popfd
popad popad
ret ret
@@ -137,16 +128,19 @@ dbg_board_printdword:
enter 0,0 enter 0,0
pushad pushad
pushfd pushfd
; print 0x prefix mov eax,MOS_SC_DEBUGBOARD
mcall SF_BOARD,SSF_DEBUG_WRITE,'0' mov ebx,1
mcall ,,'x' mov ecx,'0' ; print 0x prefix
int 0x40
mov ecx,'x'
int 0x40
mov edx,[ebp + 8] ; get dword to print mov edx,[ebp + 8] ; get dword to print
mov esi,8 ; iterate through all nibbles mov esi,8 ; iterate through all nibbles
.loop: .loop:
mov ecx,edx ; display hex digit mov ecx,edx ; display hex digit
shr ecx,28 shr ecx,28
movzx ecx,byte [dbg_board_printdword_digits + ecx] movzx ecx,byte [dbg_board_printdword_digits + ecx]
mcall int 0x40
shl edx,4 ; next nibble shl edx,4 ; next nibble
dec esi dec esi
jnz .loop jnz .loop
@@ -172,7 +166,8 @@ dbg_board_printstring:
or al,al ; zero ? or al,al ; zero ?
je .done ; yeah -> get outta here je .done ; yeah -> get outta here
movzx ecx,al ; nope -> display character movzx ecx,al ; nope -> display character
mcall SF_BOARD mov eax,MOS_SC_DEBUGBOARD
int 0x40
jmp .loop jmp .loop
.done: .done:
popfd popfd
@@ -180,5 +175,26 @@ dbg_board_printstring:
leave leave
ret 4 ret 4
end if %else
%macro DBG_BOARD_PRINTNEWLINE 0
%endm
%macro DBG_BOARD_PRINTCHAR 1
%endm
%macro DBG_BOARD_PRINTDWORD 1
%endm
%macro DBG_BOARD_PRINTSTRINGLITERAL 1+
%endm
%macro DBG_BOARD_PRINTSTRING 1
%endm
%endif
%endif

View File

@@ -17,6 +17,8 @@
; along with this program; if not, write to the Free Software ; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
; ;
%ifndef _DRAW_INC
%define _DRAW_INC
TMR1_FACTOR dd 0.45 TMR1_FACTOR dd 0.45
@@ -48,36 +50,45 @@ monthNames:
; output : nothing ; output : nothing
; destroys : nothing ; destroys : nothing
;******************************************************************** ;********************************************************************
proc drawClock drawClock:
locals %push drawClock_context
i dd ? %stacksize flat
TMR1X dd ? %assign %$localsize 0
TMR1Y dd ?
TMR2X dd ? %local i:dword, \
TMR2Y dd ? TMR1X:dword, \
SECRX dd ? TMR1Y:dword, \
SECRY dd ? TMR2X:dword, \
MINRX dd ? TMR2Y:dword, \
MINRY dd ? SECRX:dword, \
HOURRX dd ? SECRY:dword, \
HOURRY dd ? MINRX:dword, \
workwidth dd ? MINRY:dword, \
workheight dd ? HOURRX:dword, \
foo dd ? HOURRY:dword, \
endl workwidth:dword, \
workheight:dword, \
foo:dword
enter %$localsize,0
pushad pushad
pushfd pushfd
; get window dimensions ; get window dimensions
mcall SF_THREAD_INFO,procInfo,-1 mov eax,MOS_SC_GETPROCESSINFO
mov ebx,procInfo
mov ecx,-1
int 0x40
; calculate work area size (width/height = ecx/edx) ; calculate work area size (width/height = ecx/edx)
; if the work area is too small (maybe the window is shaded) ; if the work area is too small (maybe the window is shaded)
; we don't draw anything. ; we don't draw anything.
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT ; get skin height (eax) mov eax,MOS_SC_WINDOWPROPERTIES
mov ecx,[procInfo.box.width] mov ebx,4 ; get skin height (eax)
int 0x40
mov ecx,[procInfo + MOS_PROCESSINFO.wndWidth]
sub ecx,MOS_WND_SKIN_BORDER_LEFT+MOS_WND_SKIN_BORDER_RIGHT sub ecx,MOS_WND_SKIN_BORDER_LEFT+MOS_WND_SKIN_BORDER_RIGHT
mov edx,[procInfo.box.height] mov edx,[procInfo + MOS_PROCESSINFO.wndHeight]
sub edx,eax sub edx,eax
sub edx,MOS_WND_SKIN_BORDER_BOTTOM sub edx,MOS_WND_SKIN_BORDER_BOTTOM
cmp ecx,0 ; width too small ? cmp ecx,0 ; width too small ?
@@ -91,9 +102,9 @@ proc drawClock
mov [workheight],edx mov [workheight],edx
; calculate center of clock (x/y = esi/edi) ; calculate center of clock (x/y = esi/edi)
mov esi,[procInfo.box.width] mov esi,[procInfo + MOS_PROCESSINFO.wndWidth]
shr esi,1 shr esi,1
mov edi,[procInfo.box.height] mov edi,[procInfo + MOS_PROCESSINFO.wndHeight]
sub edi,MOS_WND_SKIN_BORDER_BOTTOM sub edi,MOS_WND_SKIN_BORDER_BOTTOM
sub edi,eax sub edi,eax
shr edi,1 shr edi,1
@@ -108,8 +119,9 @@ proc drawClock
shl ecx,16 ; (=skin height) shl ecx,16 ; (=skin height)
or ecx,edx ; height or ecx,edx ; height
inc ecx inc ecx
mov edx,[wndColors.work] mov edx,[wndColors + MOS_WNDCOLORS.work]
mcall SF_DRAW_RECT mov eax,MOS_SC_DRAWBAR
int 0x40
popad popad
; calculate second hand radii ; calculate second hand radii
@@ -151,7 +163,8 @@ proc drawClock
fstp dword [TMR2Y] fstp dword [TMR2Y]
; get system clock (edx) ; get system clock (edx)
mcall SF_GET_SYS_TIME mov eax,MOS_SC_GETSYSCLOCK
int 0x40
mov edx,eax mov edx,eax
; draw second hand ; draw second hand
@@ -160,14 +173,21 @@ proc drawClock
shr eax,16 shr eax,16
call bcdbin call bcdbin
mov ecx,eax ; save seconds for later mov ecx,eax ; save seconds for later
; 2*pi/60 push ecx
stdcall getHandCoords,edi,esi,[SECRY],[SECRX],0.104719755,eax,ecx push eax
fpush32 0.104719755 ; 2*pi/60
push dword [SECRX]
push dword [SECRY]
push esi
push edi
call getHandCoords
mov eax,MOS_SC_DRAWLINE
shl ebx,16 shl ebx,16
or ebx,esi or ebx,esi
shl ecx,16 shl ecx,16
or ecx,edi or ecx,edi
mov edx,[wndColors.work_text] mov edx,[wndColors + MOS_WNDCOLORS.workText]
mcall SF_DRAW_LINE int 0x40
pop ecx pop ecx
pop edx pop edx
@@ -180,14 +200,21 @@ proc drawClock
mul edx mul edx
add eax,ecx add eax,ecx
mov ecx,eax ; save for later mov ecx,eax ; save for later
; 2*pi/60/60 push ecx
stdcall getHandCoords,edi,esi,[MINRY],[MINRX],0.001745329,eax,ecx push eax
fpush32 0.001745329 ; 2*pi/60/60
push dword [MINRX]
push dword [MINRY]
push esi
push edi
call getHandCoords
mov eax,MOS_SC_DRAWLINE
shl ebx,16 shl ebx,16
or ebx,esi or ebx,esi
shl ecx,16 shl ecx,16
or ecx,edi or ecx,edi
mov edx,[wndColors.work_text] mov edx,[wndColors + MOS_WNDCOLORS.workText]
mcall SF_DRAW_LINE int 0x40
pop ecx pop ecx
pop edx pop edx
@@ -202,39 +229,55 @@ proc drawClock
mov edx,60*60 mov edx,60*60
mul edx mul edx
add eax,ecx add eax,ecx
; 2*pi/60/60/12 push eax
stdcall getHandCoords,edi,esi,[HOURRY],[HOURRX],0.000145444,eax fpush32 0.000145444 ; 2*pi/60/60/12
push dword [HOURRX]
push dword [HOURRY]
push esi
push edi
call getHandCoords
mov eax,MOS_SC_DRAWLINE
shl ebx,16 shl ebx,16
or ebx,esi or ebx,esi
shl ecx,16 shl ecx,16
or ecx,edi or ecx,edi
mov edx,[wndColors.work_text] mov edx,[wndColors + MOS_WNDCOLORS.workText]
mcall SF_DRAW_LINE int 0x40
pop edx pop edx
; draw tick marks ; draw tick marks
mov dword [i],11 ; draw 12 marks mov dword [i],11 ; draw 12 marks
.drawtickmarks: .drawtickmarks:
; calculate start point push dword [i] ; calculate start point
; 2*pi/12 fpush32 0.523598776 ; 2*pi/12
stdcall getHandCoords,edi,esi,[TMR1Y],[TMR1X],0.523598776,[i] push dword [TMR1X]
push dword [TMR1Y]
push esi
push edi
call getHandCoords
mov eax,ebx ; save in eax and edx mov eax,ebx ; save in eax and edx
mov edx,ecx mov edx,ecx
; 2*pi/12 push dword [i]
stdcall getHandCoords,edi,esi,[TMR2Y],[TMR2X],0.523598776,[i] fpush32 0.523598776 ; 2*pi/12
push dword [TMR2X]
push dword [TMR2Y]
push esi
push edi
call getHandCoords
shl eax,16 shl eax,16
shl edx,16 shl edx,16
or ebx,eax ; ebx = x start and end or ebx,eax ; ebx = x start and end
or ecx,edx ; ecx = y start and end or ecx,edx ; ecx = y start and end
mov edx,[wndColors.work_text] mov edx,[wndColors + MOS_WNDCOLORS.workText]
mcall SF_DRAW_LINE mov eax,MOS_SC_DRAWLINE
int 0x40
dec dword [i] dec dword [i]
jns .drawtickmarks jns .drawtickmarks
DATE_WIDTH =48 %define DATE_WIDTH 48
; calculate text start position ; calculate text start position
mov eax,[procInfo.box.width] mov eax,[procInfo+MOS_PROCESSINFO.wndWidth]
sub eax,DATE_WIDTH ; x = (wndwidth-textwidth)/2 sub eax,DATE_WIDTH ; x = (wndwidth-textwidth)/2
shr eax,1 ; eax = x shr eax,1 ; eax = x
fild dword [workheight] ; y = DATE_FACTOR*workheight... fild dword [workheight] ; y = DATE_FACTOR*workheight...
@@ -249,7 +292,7 @@ proc drawClock
jb .goodbye jb .goodbye
mov ecx,ebx ; text too high ? mov ecx,ebx ; text too high ?
add ecx,10-1 add ecx,10-1
mov edx,[procInfo.box.height] mov edx,[procInfo+MOS_PROCESSINFO.wndHeight]
sub edx,MOS_WND_SKIN_BORDER_BOTTOM sub edx,MOS_WND_SKIN_BORDER_BOTTOM
cmp ecx,edx cmp ecx,edx
jnae .yousuck jnae .yousuck
@@ -263,7 +306,8 @@ proc drawClock
or ebx,eax or ebx,eax
; get date (edi) ; get date (edi)
mcall SF_GET_SYS_DATE mov eax,MOS_SC_GETDATE
int 0x40
mov edi,eax mov edi,eax
; display month ; display month
@@ -271,41 +315,44 @@ proc drawClock
shr eax,8 shr eax,8
call bcdbin call bcdbin
; ebx contains already position ; ebx contains already position
mov ecx,[wndColors.work_text] mov ecx,[wndColors+MOS_WNDCOLORS.workText]
lea edx,[monthNames-3+eax*2+eax]; -3 because eax = 1..12 =] lea edx,[monthNames-3+eax*2+eax]; -3 because eax = 1..12 =]
mov esi,3 ; text length mov esi,3 ; text length
mcall SF_DRAW_TEXT mov eax,MOS_SC_WRITETEXT
int 0x40
; display date ; display date
add ebx,(3*6+3) shl 16 add ebx,MOS_DWORD(3*6+3,0)
mov eax,edi ; get date mov eax,edi ; get date
shr eax,16 shr eax,16
call bcdbin call bcdbin
mov edx,ebx ; position must be in edx mov edx,ebx ; position must be in edx
mov ebx,0x00020000 ; number, display two digits mov ebx,0x00020000 ; number, display two digits
mov ecx,eax ; number to display mov ecx,eax ; number to display
mov esi,[wndColors.work_text] mov esi,[wndColors+MOS_WNDCOLORS.workText]
mcall SF_DRAW_NUMBER mov eax,MOS_SC_WRITENUMBER
int 0x40
; display year. the way we avoid the y2k bug is even ; display year. the way we avoid the y2k bug is even
; simpler, yet much better than in the last version: ; simpler, yet much better than in the last version:
; now we simply display the last two digits and let the ; now we simply display the last two digits and let the
; user decide wether it's the year 1903 or 2003 =] ; user decide wether it's the year 1903 or 2003 =]
add edx,(2*6+3) shl 16 add edx,MOS_DWORD(2*6+3,0)
mov eax,edi ; get year mov eax,edi ; get year
call bcdbin call bcdbin
mov ebx,0x00020000 ; number, display two digits mov ebx,0x00020000 ; number, display two digits
mov ecx,eax ; number to display mov ecx,eax ; number to display
; edx contains already position ; edx contains already position
mov esi,[wndColors.work_text] mov esi,[wndColors+MOS_WNDCOLORS.workText]
mcall SF_DRAW_NUMBER mov eax,MOS_SC_WRITENUMBER
int 0x40
.byebye: .byebye:
popfd popfd
popad popad
;leave leave
ret ret
endp %pop
;********************************************************** ;**********************************************************
@@ -350,26 +397,36 @@ bcdbin:
; destroys: ; destroys:
; nothing ; nothing
;******************************************************************** ;********************************************************************
proc getHandCoords CENTERY:dword, CENTERX:dword, RADIUSY:dword, RADIUSX:dword, DEG2RAD:dword, ANGLE:dword getHandCoords:
ANGLE equ 28
DEG2RAD equ 24
RADIUSX equ 20
RADIUSY equ 16
CENTERX equ 12
CENTERY equ 8
enter 0,0
pushfd pushfd
fild dword [ANGLE] ; get angle fild dword [ebp+ANGLE] ; get angle
fmul dword [DEG2RAD] ; convert to radians fmul dword [ebp+DEG2RAD] ; convert to radians
fsincos fsincos
fmul dword [RADIUSY] ; -y * radius + clockcy fmul dword [ebp+RADIUSY] ; -y * radius + clockcy
fchs fchs
fiadd dword [CENTERY] fiadd dword [ebp+CENTERY]
fistp dword [CENTERY] fistp dword [ebp+CENTERY]
fmul dword [RADIUSX] ; x * radius + clockcx fmul dword [ebp+RADIUSX] ; x * radius + clockcx
fiadd dword [CENTERX] fiadd dword [ebp+CENTERX]
fistp dword [CENTERX] fistp dword [ebp+CENTERX]
mov ebx,[CENTERX] mov ebx,[ebp+CENTERX]
mov ecx,[CENTERY] mov ecx,[ebp+CENTERY]
popfd popfd
;leave leave
ret ret 4*6
endp
%endif

View File

@@ -0,0 +1,3 @@
@rem nasm -t -f bin -o aclock -l aclock.lst aclock.asm -DDEBUG
nasmw -t -f bin -o aclock aclock.asm
@pause

View File

@@ -0,0 +1,334 @@
; mos.inc 0.03
; Copyright (c) 2002 Thomas Mathys
; killer@vantage.ch
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;
%ifndef _MOS_INC
%define _MOS_INC
;**********************************************************
; generates a menuetos 01 header
; takes 6 parameters:
;
; MOS_HEADER01 start, end, appmem, esp, i_param, i_icon
;**********************************************************
%macro MOS_HEADER01 6
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd %1 ; start of code
dd %2 ; image size
dd %3 ; application memory
dd %4 ; esp
dd %5 ; i_param
dd %6 ; i_icon
%endmacro
;**********************************************************
; MOS_DWORD
; packs 2 words into a double word
;**********************************************************
%define MOS_DWORD(hi,lo) ((((hi) & 0xffff) << 16) + ((lo) & 0xffff))
;**********************************************************
; MOS_RGB
; creates a menuet os compatible color (0x00RRGGBB)
;**********************************************************
%define MOS_RGB(r,g,b) ((((r) & 255) << 16) + (((g) & 255) << 8) + ((b) & 255))
;**********************************************************
; window stuff
;**********************************************************
; default window colors
struc MOS_WNDCOLORS
.frame: resd 1
.grab: resd 1
.grabButton: resd 1
.grabButtonText: resd 1
.grabText: resd 1
.work: resd 1
.workButton: resd 1
.workButtonText: resd 1
.workText: resd 1
.workGraphics: resd 1
endstruc
; skinned window borders
MOS_WND_SKIN_BORDER_LEFT equ 5
MOS_WND_SKIN_BORDER_RIGHT equ 5
MOS_WND_SKIN_BORDER_BOTTOM equ 5
;**********************************************************
; process info structure
;**********************************************************
struc MOS_PROCESSINFO
.CPUUsage: resd 1
.windowStackPos: resw 1
.windowStackVal: resw 1
.reserved1: resw 1
.processName: resb 12
.memStart: resd 1
.memUsed: resd 1
.pid: resd 1
.wndXPos resd 1
.wndYPos resd 1
.wndWidth resd 1
.wndHeight resd 1
.reserved2: resb (1024 - 50)
endstruc
;**********************************************************
; system call numbers
;**********************************************************
MOS_SC_EXIT equ -1
MOS_SC_DEFINEWINDOW equ 0
MOS_SC_PUTPIXEL equ 1
MOS_SC_GETKEY equ 2
MOS_SC_GETSYSCLOCK equ 3
MOS_SC_WRITETEXT equ 4
MOS_SC_DELAY equ 5
MOS_SC_OPENFILEFLOPPY equ 6 ; obsolete
MOS_SC_PUTIMAGE equ 7
MOS_SC_DEFINEBUTTON equ 8
MOS_SC_GETPROCESSINFO equ 9
MOS_SC_WAITEVENT equ 10
MOS_SC_CHECKEVENT equ 11
MOS_SC_REDRAWSTATUS equ 12
MOS_SC_DRAWBAR equ 13
MOS_SC_GETSCREENMAX equ 14
MOS_SC_SETBACKGROUND equ 15
MOS_SC_GETPRESSEDBUTTON equ 17
MOS_SC_SYSTEMSERVICE equ 18
MOS_SC_STARTPROGRAM equ 19 ; obsolete
MOS_SC_MIDIINTERFACE equ 20
MOS_SC_DEVICESETUP equ 21
MOS_SC_WAITEVENTTIMEOUT equ 23
MOS_SC_CDAUDIO equ 24
MOS_SC_SB16MIXER1 equ 25
MOS_SC_GETDEVICESETUP equ 26
MOS_SC_WSS equ 27
MOS_SC_SB16MIXER2 equ 28
MOS_SC_GETDATE equ 29
MOS_SC_READHD equ 30 ; obsolete
MOS_SC_STARTPROGRAMHD equ 31 ; obsolete
MOS_SC_DELETEFILEFLOPPY equ 32
MOS_SC_SAVEFILERAMDISK equ 33 ; obsolete
MOS_SC_READDIRRAMDISK equ 34 ; obsolete
MOS_SC_GETSCREENPIXEL equ 35
MOS_SC_GETMOUSEPOSITION equ 37
MOS_SC_DRAWLINE equ 38
MOS_SC_GETBACKGROUND equ 39
MOS_SC_SETEVENTMASK equ 40
MOS_SC_GETIRQOWNER equ 41
MOS_SC_GETDATAREADBYIRQ equ 42
MOS_SC_SENDDATATODEVICE equ 43
MOS_SC_PROGRAMIRQS equ 44
MOS_SC_RESERVEFREEIRQ equ 45
MOS_SC_RESERVEFREEPORTS equ 46
MOS_SC_WRITENUMBER equ 47
MOS_SC_WINDOWPROPERTIES equ 48
MOS_SC_SHAPEDWINDOWS equ 50
MOS_SC_CREATETHREAD equ 51
MOS_SC_STACKDRIVERSTATE equ 52
MOS_SC_SOCKETINTERFACE equ 53
MOS_SC_SOUNDINTERFACE equ 55
MOS_SC_WRITEFILEHD equ 56 ; obsolete
MOS_SC_DELETEFILEHD equ 57
MOS_SC_SYSTREEACCESS equ 58
MOS_SC_SYSCALLTRACE equ 59
MOS_SC_IPC equ 60
MOS_SC_DIRECTGRAPHICS equ 61
MOS_SC_PCI equ 62
MOS_SC_DEBUGBOARD equ 63
;**********************************************************
; event numbers
;**********************************************************
MOS_EVT_NONE equ 0
MOS_EVT_REDRAW equ 1
MOS_EVT_KEY equ 2
MOS_EVT_BUTTON equ 3
;**********************************************************
; event bits
;**********************************************************
MOS_EVTBIT_REDRAW equ (1 << 0)
MOS_EVTBIT_KEY equ (1 << 1)
MOS_EVTBIT_BUTTON equ (1 << 2)
MOS_EVTBIT_ENDREQUEST equ (1 << 3)
MOS_EVTBIT_BGDRAW equ (1 << 4)
MOS_EVTBIT_MOUSECHANGE equ (1 << 5)
MOS_EVTBIT_IPCEVENT equ (1 << 6)
MOS_EVTBIT_IRQ0 equ (1 << 16)
MOS_EVTBIT_IRQ1 equ (1 << 17)
MOS_EVTBIT_IRQ2 equ (1 << 18)
MOS_EVTBIT_IRQ3 equ (1 << 19)
MOS_EVTBIT_IRQ4 equ (1 << 20)
MOS_EVTBIT_IRQ5 equ (1 << 21)
MOS_EVTBIT_IRQ6 equ (1 << 22)
MOS_EVTBIT_IRQ7 equ (1 << 23)
MOS_EVTBIT_IRQ8 equ (1 << 24)
MOS_EVTBIT_IRQ9 equ (1 << 25)
MOS_EVTBIT_IRQ10 equ (1 << 26)
MOS_EVTBIT_IRQ11 equ (1 << 27)
MOS_EVTBIT_IRQ12 equ (1 << 28)
MOS_EVTBIT_IRQ13 equ (1 << 29)
MOS_EVTBIT_IRQ14 equ (1 << 30)
MOS_EVTBIT_IRQ15 equ (1 << 31)
;**********************************************************
; exit application (syscall -1)
;**********************************************************
; exit application
%macro MOS_EXIT 0
mov eax,MOS_SC_EXIT
int 0x40
%endmacro
; exit application, smaller version
%macro MOS_EXIT_S 0
xor eax,eax
dec eax
int 0x40
%endmacro
;**********************************************************
; wait event stuff
; (MOS_SC_WAITEVENT, syscall 10)
;**********************************************************
; wait for event
; destroys : nothing
; returns : eax = event type
%macro MOS_WAITEVENT 0
mov eax,MOS_SC_WAITEVENT
int 0x40
%endmacro
; wait for event, smaller version
; destroys : flags
; returns : eax = event type
%macro MOS_WAITEVENT_S 0
xor eax,eax
mov al,MOS_SC_WAITEVENT
int 0x40
%endmacro
;**********************************************************
; window redraw status stuff
; (MOS_SC_REDRAWSTATUS, syscall 12)
;**********************************************************
MOS_RS_STARTREDRAW equ 1
MOS_RS_ENDREDRAW equ 2
; start window redraw
; destroys: eax,ebx
%macro MOS_STARTREDRAW 0
mov ebx,MOS_RS_STARTREDRAW
mov eax,MOS_SC_REDRAWSTATUS
int 0x40
%endmacro
; start window redraw, smaller version
; destroys: eax,ebx,flags
%macro MOS_STARTREDRAW_S 0
xor ebx,ebx
inc ebx
xor eax,eax
mov al,MOS_SC_REDRAWSTATUS
int 0x40
%endmacro
; end window redraw
; destroys: eax,ebx
%macro MOS_ENDREDRAW 0
mov ebx,MOS_RS_ENDREDRAW
mov eax,MOS_SC_REDRAWSTATUS
int 0x40
%endmacro
; end window redraw, smaller version
; destroys: eax,ebx,flags
%macro MOS_ENDREDRAW_S 0
xor ebx,ebx
mov bl,MOS_RS_ENDREDRAW
xor eax,eax
mov al,MOS_SC_REDRAWSTATUS
int 0x40
%endmacro
;**********************************************************
; get screen max stuff (syscall 14)
;**********************************************************
; get screen dimensions in eax
; destroys: nothing
%macro MOS_GETSCREENMAX 0
mov eax,MOS_SC_GETSCREENMAX
int 0x40
%endmacro
; get screen dimensions in eax, smaller version
; destroys: flags
%macro MOS_GETSCREENMAX_S 0
xor eax,eax
mov al,MOS_SC_GETSCREENMAX
int 0x40
%endmacro
;********************************************************************
; opcode hacks
;********************************************************************
; nasm refuses to assemble stuff like
; push dword 4.44
; with the following macro this becomes possible:
; fpush32 9.81
; don't forget to use a decimal point. things like
; fpush32 1
; will probably not do what you expect. instead, write:
; fpush32 1.0
%macro fpush32 1
db 0x68 ; push imm32
dd %1
%endm
%endif

View File

@@ -0,0 +1,92 @@
; string2dword - a useless string to double word conversion routine
;
; Copyright (c) 2003 Thomas Mathys
; killer@vantage.ch
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;
;********************************************************************
; converts an asciiz string into an unsigned doubleword.
; (base 10 is assumed)
;
; - first, leading whitespaces are skipped
; - then the function converts the string, until it
; finds the terminating zero, another character it
; cannot convert or the number becomes too large.
;
; input : esi = pointer to string
; output : eax = unsigned doubleword
; the function tries to convert as
; many digits as possible, before it
; stops. if the value of the dword
; becomes too large, 0xffffffff is
; returned.
; destroys : nothing
;********************************************************************
string2dword:
push ebx
push ecx
push edx
push esi
pushfd
xor ebx,ebx ; ebx : dword
; skip leading whitespaces
.skipspaces:
lodsb
cmp al,32 ; space
je .skipspaces
cmp al,12 ; ff
je .skipspaces
cmp al,10 ; lf
je .skipspaces
cmp al,13 ; cr
je .skipspaces
cmp al,9 ; ht
je .skipspaces
cmp al,11 ; vt
je .skipspaces
; convert string
dec esi ; esi -> 1st non-whitespace
.convert:
xor eax,eax ; get character
lodsb
sub al,'0' ; convert to digit
cmp al,9 ; is digit in range [0,9] ?
ja .done ; nope -> stop conversion
mov ecx,eax ; save new digit
mov eax,10 ; dword = dword * 10
mul ebx
jc .overflow
add eax,ecx ; + new digit
jc .overflow
mov ebx,eax
jmp .convert
.overflow:
mov ebx,0xffffffff
.done:
mov eax,ebx
popfd
pop esi
pop edx
pop ecx
pop ebx
ret

View File

@@ -0,0 +1,49 @@
; strlen function
;
; Copyright (c) 2003 Thomas Mathys
; killer@vantage.ch
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;
%ifndef _STRLEN_INC
%define _STRLEN_INC
;********************************************************************
; returns the length of an asciiz string
; input : esi = pointer to string
; output : eax = string length
; destroys : nothing
;********************************************************************
strlen:
push ecx
push edi
pushfd
cld ; !
mov ecx,-1
mov edi,esi ; find terminating zero
xor al,al
repne scasb
mov eax,edi ; calculate string length
sub eax,esi
dec eax
popfd
pop edi
pop ecx
ret
%endif

View File

@@ -1,3 +1,5 @@
; some strtok-like function
;
; Copyright (c) 2003 Thomas Mathys ; Copyright (c) 2003 Thomas Mathys
; killer@vantage.ch ; killer@vantage.ch
; ;
@@ -15,94 +17,8 @@
; along with this program; if not, write to the Free Software ; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
; ;
%ifndef _STRTOK_INC
%define _STRTOK_INC
;********************************************************************
; returns the length of an asciiz string
; input : esi = pointer to string
; output : eax = string length
; destroys : nothing
;********************************************************************
strlen:
push ecx edi
pushfd
cld ; !
mov ecx,-1
mov edi,esi ; find terminating zero
xor al,al
repne scasb
mov eax,edi ; calculate string length
sub eax,esi
dec eax
popfd
pop edi ecx
ret
;********************************************************************
; converts an asciiz string into an unsigned doubleword.
; (base 10 is assumed)
;
; - first, leading whitespaces are skipped
; - then the function converts the string, until it
; finds the terminating zero, another character it
; cannot convert or the number becomes too large.
;
; input : esi = pointer to string
; output : eax = unsigned doubleword
; the function tries to convert as
; many digits as possible, before it
; stops. if the value of the dword
; becomes too large, 0xffffffff is
; returned.
; destroys : nothing
;********************************************************************
string2dword:
push ebx ecx edx esi
pushfd
xor ebx,ebx ; ebx : dword
; skip leading whitespaces
.skipspaces:
lodsb
cmp al,32 ; space
je .skipspaces
cmp al,12 ; ff
je .skipspaces
cmp al,10 ; lf
je .skipspaces
cmp al,13 ; cr
je .skipspaces
cmp al,9 ; ht
je .skipspaces
cmp al,11 ; vt
je .skipspaces
; convert string
dec esi ; esi -> 1st non-whitespace
.convert:
xor eax,eax ; get character
lodsb
sub al,'0' ; convert to digit
cmp al,9 ; is digit in range [0,9] ?
ja .done ; nope -> stop conversion
mov ecx,eax ; save new digit
mov eax,10 ; dword = dword * 10
mul ebx
jc .overflow
add eax,ecx ; + new digit
jc .overflow
mov ebx,eax
jmp .convert
.overflow:
mov ebx,0xffffffff
.done:
mov eax,ebx
popfd
pop esi edx ecx ebx
ret
;******************************************************************** ;********************************************************************
@@ -205,3 +121,5 @@ strtok:
ret ret
.adx dd 0 .adx dd 0
%endif

View File

@@ -1,2 +0,0 @@
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("charsets.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "charsets")

View File

@@ -1,33 +0,0 @@
Development history
22.10.2024 - 0.1.0
- First version, display of charpages in all KOS charsets
23.10.2024 - 0.2.0
- Fixed UTF-8 display by Doczom
- Interface adaptation for skins
- Reduced redraw
- Refactored code
27.10.2024 - 0.2.5
- Fixed version in app header
- Tweaked UI colors
- Something else???
17.01.2025 - 0.3.0
- Added button to reset charpage to 00
- Functionality to pick and preview single character
- Functionality to input characters from keyboard
- Display of ASCII and SCAN codes of characters in dec and hex format
- Tweaked UI colors
17.01.2025 - 0.3.1
- Small UI fixes
- Code refactoring
- Reformatted sources, fixed indentation
and removed non-Unicode characters
07.03.2025 - 0.3.2
- Renamed to Charsets Viewer/Charsets
- Symbol highlight UI tweaks
- Fixed rolled up bug

View File

@@ -1,5 +1,5 @@
; Helper file for console.inc - scrollbar definition ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD> console.inc - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> scrollbar
; Vertical scrolling ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>
virtual at 0 virtual at 0
file 'conscrlv.bmp', 36h file 'conscrlv.bmp', 36h
; sanity check ; sanity check
@@ -28,7 +28,7 @@ if con.vscroll_btn_height*4 + con.vscroll_bgr_height*2 \
error 'conscrlv.bmp: invalid dimensions!' error 'conscrlv.bmp: invalid dimensions!'
end if end if
; Load BMP data, converting it into data for sysfn 7 on the fly ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BMP, <EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> 7-<EFBFBD> <EFBFBD>㭪樨
con.vscroll: con.vscroll:
repeat con.vscroll_height repeat con.vscroll_height
file 'conscrlv.bmp':36h + ((con.vscroll_width*3+3) and not 3)*(con.vscroll_height - %),\ file 'conscrlv.bmp':36h + ((con.vscroll_width*3+3) and not 3)*(con.vscroll_height - %),\

View File

@@ -1,7 +1,6 @@
; SPDX-License-Identifier: GPL-2.0 ; <EFBFBD>㭪樨 ࠡ<><E0A0A1><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E1AEAB> <20><><EFBFBD> <20>ணࠬ<E0AEA3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; Functions for interaction with the console for KolibriOS programs
; diamond, 2006-2008 ; diamond, 2006-2008
; Copyright (C) 2006-2025 KolibriOS team
format MS COFF format MS COFF
@@ -57,7 +56,7 @@ START:
or eax, -1 or eax, -1
ret 4 ret 4
; Console initialization ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
; void __stdcall con_init(dword wnd_width, dword wnd_height, ; void __stdcall con_init(dword wnd_width, dword wnd_height,
; dword scr_width, dword scr_height, const char* title); ; dword scr_width, dword scr_height, const char* title);
@@ -272,13 +271,13 @@ con_write_length:
pop esi ebx pop esi ebx
ret 8 ret 8
; Each character is classified as one of the following ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A8AC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
con.printfc.normal = 0 ; normal character con.printfc.normal = 0 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A8AC><EFBFBD>
con.printfc.percent = 1 ; '%' con.printfc.percent = 1 ; '%'
con.printfc.dot = 2 ; '.' con.printfc.dot = 2 ; '.'
con.printfc.asterisk = 3 ; '*' con.printfc.asterisk = 3 ; '*'
con.printfc.zero = 4 ; '0' con.printfc.zero = 4 ; '0'
con.printfc.digit = 5 ; non-null digit con.printfc.digit = 5 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
con.printfc.plus = 6 ; '+' con.printfc.plus = 6 ; '+'
con.printfc.minus = 7 ; '-' con.printfc.minus = 7 ; '-'
con.printfc.sharp = 8 ; '#' con.printfc.sharp = 8 ; '#'
@@ -377,24 +376,24 @@ con_printf:
jmp .normal jmp .normal
.spec_begin: .spec_begin:
xor ebx, ebx xor ebx, ebx
; bl = position type: ; bl = <20><><EFBFBD><EFBFBD>:
; 0 = start ; 0 = <EFBFBD><EFBFBD><EFBFBD>
; 1 = read leading 0 in format specification ; 1 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD>騩 0 <20><><E1AFA5><EFBFBD><20><><EFBFBD><E0ACA0>
; 2 = read width field ; 2 = <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>
; 3 = read precision field ; 3 = <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><E7ADAE><EFBFBD>
; 4 = read argument size field ; 4 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E3ACA5><EFBFBD>
; 5 = read type field ; 5 = <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <>
; bh = flags: ; bh = <EFBFBD><EFBFBD>:
; 1 = flag '#', output 0/0x/0X ; 1 = <EFBFBD> '#', <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0/0x/0X
; 2 = flag '-', align left ; 2 = <EFBFBD> '-', <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
; 4 = flag '0', zero padding ; 4 = <EFBFBD> '0', <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
; 8 = flag 'h', short argument ; 8 = <EFBFBD> 'h', <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E3ACA5>
push -1 push -1
; dword [esp+8] = precision ; dword [esp+8] = precision
push -1 push -1
; dword [esp+4] = width ; dword [esp+4] = width
push 0 push 0
; byte [esp] = flag 0/'+'/' ' ; byte [esp] = <EFBFBD> 0/'+'/' '
.spec: .spec:
xor eax, eax xor eax, eax
lodsb lodsb
@@ -530,7 +529,7 @@ con_printf:
@@: @@:
push edx push edx
xor edx, edx xor edx, edx
; number in eax, radix in ecx ; <EFBFBD><EFBFBD><20> eax, <20><EFBFBD><E1ADAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1ABA5><EFBFBD> <20> ecx
@@: @@:
cmp dword [esp+16+8], 0 cmp dword [esp+16+8], 0
jnz .print_num jnz .print_num
@@ -1778,10 +1777,10 @@ con.data2image:
mov al, [esi+1] mov al, [esi+1]
push eax push eax
and al, 0xF and al, 0xF
mov ebx, eax ; text color mov ebx, eax ; <EFBFBD><><E2A5AA><EFBFBD>
pop eax pop eax
shr al, 4 shr al, 4
mov ebp, eax ; background color mov ebp, eax ; <EFBFBD><>
sub ebx, ebp sub ebx, ebp
lodsb lodsb
inc esi inc esi
@@ -2189,7 +2188,7 @@ con_gets2:
sub ebx, 1 sub ebx, 1
jle .ret jle .ret
mov byte [esi], 0 mov byte [esi], 0
xor ecx, ecx ; length of the already entered string xor ecx, ecx ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD>񭭮<EFBFBD> <20><><EFBFBD>
call con.get_data_ptr call con.get_data_ptr
.loop: .loop:
call con_getch2 call con_getch2
@@ -2597,15 +2596,15 @@ con.wake:
popad popad
ret ret
; Console window thread. Handles input and output. ; <EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><E0A0A1><EFBFBD><EBA2A0> <20><><EFBFBD><EFBFBD> <20> <20><EFBFBD>.
con.thread: con.thread:
; The thread responds to IPC, which is used only so that it can be "waken up" ; <EFBFBD><EFBFBD>⮪ ॠ<><E0A5A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> IPC, <20><><EFBFBD><EFBFBD><20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20><><EFBFBD><>, <20><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>뫮 "ࠧ<><EFBFBD><E3A4A8>"
push 40 push 40
pop eax pop eax
push 0x80000067 ; program dont getting events mouse, when it dont active push 0x80000067 ; program dont getting events mouse, when it dont active
pop ebx pop ebx
int 0x40 int 0x40
xor ebx,ebx ; clear ebx xor ebx,ebx ;clear ebx
mov al, 60 mov al, 60
mov bl, 1 mov bl, 1
mov ecx, con.ipc_buf mov ecx, con.ipc_buf
@@ -3213,7 +3212,7 @@ con.draw_image:
@@: @@:
int 0x40 int 0x40
push edx push edx
; Calculate the height of the slider ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
mov ax, dx mov ax, dx
sub eax, con.vscroll_btn_height sub eax, con.vscroll_btn_height
mov ecx, eax mov ecx, eax
@@ -3223,7 +3222,7 @@ con.draw_image:
jae @f jae @f
mov al, 5 mov al, 5
@@: @@:
; eax = slider height. Calculate the slider position ; eax = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
mov [con.vscrollbar_size], eax mov [con.vscrollbar_size], eax
xchg eax, ecx xchg eax, ecx
sub eax, ecx sub eax, ecx
@@ -3233,7 +3232,7 @@ con.draw_image:
div ebx div ebx
pop edx pop edx
push edx push edx
; ecx = slider height, eax = position ; ecx = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, eax = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
add eax, con.vscroll_btn_height add eax, con.vscroll_btn_height
mov [con.vscrollbar_pos], eax mov [con.vscrollbar_pos], eax
mov ebx, con.vscroll_bgr2 mov ebx, con.vscroll_bgr2
@@ -3332,8 +3331,8 @@ con.extended_numlock:
cursor_esc dd 27 + ('[' shl 8) cursor_esc dd 27 + ('[' shl 8)
; In the current implementation, the default values are: ; <EFBFBD><>饩 ॠ<><E0A5A0><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><E7A5AD> <20><><><EFBFBD><E7A0AD><><E2A0AA><EFBFBD>.
; In the future, they may be read as parameters from the console.ini ini file. ; <EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD> <20><> ini-䠩<><E4A0A9> console.ini.
con.def_wnd_width dd 80 con.def_wnd_width dd 80
con.def_wnd_height dd 25 con.def_wnd_height dd 25
con.def_scr_width dd 80 con.def_scr_width dd 80

View File

@@ -1,91 +1,91 @@
console.obj экспортирует следующие функции: console.obj <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
typedef unsigned long dword; /* 32-битное беззнаковое целое */ typedef unsigned long dword; /* 32-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */
typedef unsigned short word; /* 16-битное беззнаковое целое */ typedef unsigned short word; /* 16-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */
void __stdcall con_init(dword wnd_width, dword wnd_height, void __stdcall con_init(dword wnd_width, dword wnd_height,
dword scr_width, dword scr_height, const char* title); dword scr_width, dword scr_height, const char* title);
Инициализация консоли. Вызывается один раз в начале программы. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
wnd_width, wnd_height - высота и ширина (в символах) видимой в окне консоли wnd_width, wnd_height - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
области; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
scr_width, scr_height - высота и ширина (в символах) всей консоли; scr_width, scr_height - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
любые из первых 4 параметров могут быть установлены в -1 (=0xFFFFFFFF) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> -1 (=0xFFFFFFFF)
- использовать значения по умолчанию; - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
title - заголовок окна консоли. title - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
void __stdcall con_exit(bool bCloseWindow); void __stdcall con_exit(bool bCloseWindow);
Вызывается при завершении программы. Если (байтовый) параметр bCloseWindow <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bCloseWindow
нулевой, то окно консоли остаётся на экране до того момента, как пользователь <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
пожелает закрыть его, при этом к заголовку добавляется строка " [Finished]". <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> " [Finished]".
void __stdcall con_set_title(const char* title); void __stdcall con_set_title(const char* title);
Устанавливает новый заголовок окна консоли. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
void __stdcall con_write_asciiz(const char* string); void __stdcall con_write_asciiz(const char* string);
Выводит ASCIIZ-строку в консоль в текущую позицию, продвигает текущую позицию. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ASCIIZ-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
void __stdcall con_write_string(const char* string, dword length); void __stdcall con_write_string(const char* string, dword length);
Аналогично con_write_asciiz, но выводит ровно length символов. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> con_write_asciiz, <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> length <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
int __cdecl con_printf(const char* format, ...) int __cdecl con_printf(const char* format, ...)
Стандартная printf из ANSI C. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> printf <EFBFBD><EFBFBD> ANSI C.
dword __stdcall con_get_flags(void); dword __stdcall con_get_flags(void);
Получает значение флагов вывода. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
dword __stdcall con_set_flags(dword new_flags); dword __stdcall con_set_flags(dword new_flags);
Устанавливает значение флагов вывода. Возвращает старое значение. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Флаги (битовая маска): <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>):
/* цвет текста */ /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define CON_COLOR_BLUE 1 #define CON_COLOR_BLUE 1
#define CON_COLOR_GREEN 2 #define CON_COLOR_GREEN 2
#define CON_COLOR_RED 4 #define CON_COLOR_RED 4
#define CON_COLOR_BRIGHT 8 #define CON_COLOR_BRIGHT 8
/* цвет фона */ /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */
#define CON_BGR_BLUE 0x10 #define CON_BGR_BLUE 0x10
#define CON_BGR_GREEN 0x20 #define CON_BGR_GREEN 0x20
#define CON_BGR_RED 0x40 #define CON_BGR_RED 0x40
#define CON_BGR_BRIGHT 0x80 #define CON_BGR_BRIGHT 0x80
/* управление выводом */ /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define CON_IGNORE_SPECIALS 0x100 #define CON_IGNORE_SPECIALS 0x100
/* Если флаг сброшен, функция интерпретирует специальные символы: /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
10 ('\n') - перевод в начало следующей строки 10 ('\n') - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
13 ('\r') - перевод в начало текущей строки 13 ('\r') - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
8 ('\b') - забой (на символ назад) 8 ('\b') - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
9 ('\t') - табуляция 9 ('\t') - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
27 ('\033'='\x1B') - начало Esc-последовательности; 27 ('\033'='\x1B') - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Esc-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
иначе выводит их как обычные символы. */ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. */
/* Поддерживаемые Esc-последовательности: /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Esc-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
Esc[<number1>;<number2>;<number3>m - выбор атрибутов символов: Esc[<number1>;<number2>;<number3>m - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
можно указывать один, два или три кода в любом порядке; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
0 = нормальное изображение (белые символы на чёрном фоне) 0 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
1 = выделение яркостью 1 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
5 = яркий фон 5 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
7 = реверсное изображение (чёрные символы на белом фоне) 7 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
30 = чёрные символы 30 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
31 = красные символы 31 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
32 = зелёные символы 32 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
33 = жёлтые символы 33 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
34 = синие символы 34 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
35 = фиолетовые символы 35 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
36 = бирюзовые символы 36 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
37 = белые символы 37 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
40 = чёрный фон 40 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
41 = красный фон 41 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
42 = зелёный фон 42 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
43 = жёлтый фон 43 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
44 = синий фон 44 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
45 = фиолетовый фон 45 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
46 = бирюзовый фон 46 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
47 = белый фон 47 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
Следующие последовательности появились в версии 5 библиотеки: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
Esc[<number>A - переместить курсор на <number> строк вверх Esc[<number>A - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <number> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
Esc[<number>B - переместить курсор на <number> строк вниз Esc[<number>B - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <number> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Esc[<number>C - переместить курсор на <number> позиций вправо Esc[<number>C - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <number> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Esc[<number>D - переместить курсор на <number> позиций влево Esc[<number>D - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <number> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
Esc[<number1>;<number2>H = Esc[<number1>;<number2>f - Esc[<number1>;<number2>H = Esc[<number1>;<number2>f -
установить курсор в позицию с координатами <number1>,<number2> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <number1>,<number2>
Esc[2J - очистить экран, переместить курсор в левый верхний угол Esc[2J - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Следующие последовательности появились в версии 9 библиотеки: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
Esc[J or Esc[0J - Erase everything below cursor Esc[J or Esc[0J - Erase everything below cursor
Esc[1J - Erase everything above cursor Esc[1J - Erase everything above cursor
Esc[K - Erase in line Esc[K - Erase in line
@@ -107,83 +107,83 @@ dword __stdcall con_set_flags(dword new_flags);
Esc]2<string>ST/BEL - Implemented identical as Esc]0. Esc]2<string>ST/BEL - Implemented identical as Esc]0.
*/ */
/* сигнал о закрытии окна консоли; появился в версии 6 библиотеки; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
флаг игнорируется функцией con_set_flags */ <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> con_set_flags */
#define CON_WINDOW_CLOSED 0x200 #define CON_WINDOW_CLOSED 0x200
Значение по умолчанию для флагов = 7. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 7.
int __stdcall con_get_font_height(void); int __stdcall con_get_font_height(void);
Возвращает значение высоты шрифта. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
int __stdcall con_get_cursor_height(void); int __stdcall con_get_cursor_height(void);
Получает значение высоты курсора. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
int __stdcall con_set_cursor_height(int new_height); int __stdcall con_set_cursor_height(int new_height);
Устанавливает значение высоты курсора. Возвращает старое значение. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Попытка установить значение вне корректного интервала (от 0 до font_height-1) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 0 <EFBFBD><EFBFBD> font_height-1)
игнорируется. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Курсор высоты 0 не отображается на экране. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Значение высоты по умолчанию - 15% от высоты шрифта. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 15% <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
int __stdcall con_getch(void); int __stdcall con_getch(void);
Считывает один символ с клавиатуры. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Для обычных символов возвращается ASCII-код. Для расширенных символов <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ASCII-<2D><><EFBFBD>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(например, Fx и стрелочек) первый вызов функции возвращает 0, (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Fx <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0,
а повторный вызов возвращает расширенный код (подобно DOS-функциям ввода). <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>).
Начиная с версии 7 библиотеки, после закрытия окна консоли возвращается <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
значение 0. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0.
word __stdcall con_getch2(void); word __stdcall con_getch2(void);
Считывает один символ с клавиатуры. Младший байт содержит ASCII-код клавиши <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ASCII-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(0 для расширенных символов), старший - расширенный код (0 <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
(подобно BIOS-функциям ввода). (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BIOS-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>).
Начиная с версии 7 библиотеки, после закрытия окна консоли возвращается <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
значение 0. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0.
int __stdcall con_kbhit(void); int __stdcall con_kbhit(void);
Возвращает 1, если какая-то клавиша была нажата, 0 иначе. Для считывания <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0 <20><><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
нажатой клавиши предназначены функции con_getch и con_getch2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> con_getch <EFBFBD> con_getch2.
Начиная с версии 6 библиотеки, после закрытия окна консоли всегда возвращает 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1.
char* __stdcall con_gets(char* str, int n); char* __stdcall con_gets(char* str, int n);
Считывает строку с клавиатуры. Ввод прерывается при поступлении символа <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
новой строки, а также по прочтении n-1 символа (в зависимости от того, что <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> n-1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD>
произойдёт раньше). В первом случае символ новой строки также записывается в <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>
str. Считанная строка дополняется нулевым символом. str. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Начиная с версии 6 библиотеки, функция возвращает указатель на введённую <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
строку при успешном чтении и NULL, если окно консоли было закрыто. До версии <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> NULL, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
6 возвращаемое значение было неопределено. 6 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
typedef int (__stdcall * con_gets2_callback)(int keycode, char** pstr, int* pn, int* ppos); typedef int (__stdcall * con_gets2_callback)(int keycode, char** pstr, int* pn, int* ppos);
char* __stdcall con_gets2(con_gets2_callback callback, char* str, int n); char* __stdcall con_gets2(con_gets2_callback callback, char* str, int n);
Функция появилась в версии 4 библиотеки. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Полностью аналогична con_gets за исключением того, что когда пользователь <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> con_gets <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
нажимает нераспознанную клавишу, вызывается указанная callback-процедура <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> callback-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(которая может, например, обрабатывать up/down для истории ввода и tab для (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> up/down <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> tab <EFBFBD><EFBFBD><EFBFBD>
автодополнения). Процедуре передаётся код клавиши и три указателя - на строку, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
на лимит и на текущую позицию в строке. Процедура может менять содержимое <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
строки и может менять саму строку (например, перераспределить память для <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
увеличения лимита), лимит, позицию в строке - для этого и передаются указатели. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Возвращаемое значение: 0=строка не менялась; 1=строка изменилась, необходимо <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 0=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 1=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
удалить старую и вывести новую; 2=строка изменилась, необходимо её вывести; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>; 2=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
3=немедленно выйти из функции. 3=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Начиная с версии 6 библиотеки, функция возвращает указатель на введённую <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
строку при успешном чтении и NULL, если окно консоли было закрыто. До версии <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> NULL, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
6 возвращаемое значение было неопределено. 6 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
void __stdcall con_cls(); void __stdcall con_cls();
Функция появилась в версии 5 библиотеки. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Очищает экран и переводит курсор в левый верхний угол. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
void __stdcall con_get_cursor_pos(int* px, int* py); void __stdcall con_get_cursor_pos(int* px, int* py);
Функция появилась в версии 5 библиотеки. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Записывает в *px текущую координату курсора по оси x, в *py - по оси y. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> *px <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> x, <EFBFBD> *py - <EFBFBD><EFBFBD> <20><><EFBFBD> y.
void __stdcall con_set_cursor_pos(int x, int y); void __stdcall con_set_cursor_pos(int x, int y);
Функция появилась в версии 5 библиотеки. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Устанавливает курсор в позицию с указанными координатами. Если какой-то из <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><>
параметров выходит за пределы соответствующего диапазона (от 0 до scr_width-1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 0 <EFBFBD><EFBFBD> scr_width-1
для x, от 0 до scr_height-1 для y, scr_width и scr_height были заданы при <EFBFBD><EFBFBD><EFBFBD> x, <EFBFBD><EFBFBD> 0 <EFBFBD><EFBFBD> scr_height-1 <EFBFBD><EFBFBD><EFBFBD> y, scr_width <EFBFBD> scr_height <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
вызове con_init), то соответствующая координата курсора не меняется. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> con_init), <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
int __stdcall con_get_input(char* buf, int buflen); int __stdcall con_get_input(char* buf, int buflen);
Read as many input events as are available and fit in the receive buffer. Read as many input events as are available and fit in the receive buffer.

View File

@@ -59,7 +59,7 @@ static const unsigned char cp866_page00[24] = {
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, /* 0xb0-0xb7 */ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, /* 0xb0-0xb7 */
}; };
static const unsigned char cp866_page04[96] = { static const unsigned char cp866_page04[96] = {
0x00, 0xf0, 0x00, 0x00, 0xf2, 0x00, /*0x00*/ 0x49, 0xf4, /* 0x00-0x07 */ // Fix BE and UK 'I' 0x00, 0xf0, 0x00, 0x00, 0xf2, 0x00, 0x00, 0xf4, /* 0x00-0x07 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, /* 0x08-0x0f */
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x10-0x17 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x10-0x17 */
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x18-0x1f */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x18-0x1f */
@@ -69,7 +69,7 @@ static const unsigned char cp866_page04[96] = {
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x38-0x3f */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x38-0x3f */
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
0x00, 0xf1, 0x00, 0x00, 0xf3, 0x00, /*0x00*/ 0x69, 0xf5, /* 0x50-0x57 */ // Fix BE and UK 'i' 0x00, 0xf1, 0x00, 0x00, 0xf3, 0x00, 0x00, 0xf5, /* 0x50-0x57 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, /* 0x58-0x5f */
}; };
static const unsigned char cp866_page22[8] = { static const unsigned char cp866_page22[8] = {

View File

@@ -100,4 +100,5 @@ compile_gcc(MBEDTLS_SRC);
table.insert(OBJS,"mbedtls_export.o"); table.insert(OBJS,"mbedtls_export.o");
table.insert(OBJS,"mbedtls_init.o"); table.insert(OBJS,"mbedtls_init.o");
tup.rule(OBJS, "clink -o %o %f" .. " && strip %o --strip-unneeded " .. tup.getconfig("KPACK_CMD"), "mbedtls.obj"); tup.rule(OBJS, "clink -o %o %f" .. " && kos32-strip %o --strip-unneeded " .. tup.getconfig("KPACK_CMD"), "mbedtls.obj");

View File

@@ -1,4 +1,2 @@
if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_NASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") tup.rule("mstate.asm", "nasm -t -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "mstate")
tup.include(HELPERDIR .. "/use_fasm.lua")
tup.rule("mstate.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o " .. tup.getconfig("KPACK_CMD"), "mstate")

View File

@@ -1,3 +0,0 @@
@fasm.exe -m 16384 mstate.asm mstate.kex
@kpack mstate.kex
pause

View File

@@ -0,0 +1 @@
nasm -f bin mstate.asm -o mstate

View File

@@ -1,227 +1,246 @@
; SPDX-License-Identifier: GPL-2.0-only ; This program shows state of mouse buttons ;
; SPDX-FileCopyrightText: 2024 KolibriOS-NG Team ; to compile: nasm -f bin mstate.asm -o mstate ;
ORG 0
format binary as "" BITS 32
use32 ; ---------------------------------------------------------------------------- ;
org 0 PATH_SIZE equ 256
db 'MENUET01' ; signature PARAMS_SIZE equ 256
dd 1 ; header version STACK_SIZE equ 256
dd start ; entry point ; ---------------------------------------------------------------------------- ;
dd _image_end ; end of image TEXT_WIDTH equ 6
dd _memory ; required memory size TEXT_HEIGHT equ 9
dd _stacktop ; address of stack top ; ---------------------------------------------------------------------------- ;
dd 0 ; buffer for command line arguments MOUSE_LEFT_BUTTON_MASK equ 1b
dd 0 ; buffer for path MOUSE_RIGHT_BUTTON_MASK equ 10b
MOUSE_MIDDLE_BUTTON_MASK equ 100b
include '../../macros.inc' ; ---------------------------------------------------------------------------- ;
include '../../KOSfuncs.inc' EM_REDRAW equ 1b
EM_KEY equ 10b
TEXT_WIDTH = 8 EM_BUTTON equ 100b
TEXT_HEIGHT = 16 EM_RESERVED0 equ 1000b
EM_REDRAW_BACKGROUND equ 10000b
MOUSE_LEFT_BUTTON_MASK = 1b EM_MOUSE equ 100000b
MOUSE_RIGHT_BUTTON_MASK = 10b EM_IPC equ 1000000b
MOUSE_MIDDLE_BUTTON_MASK = 100b EM_NETWORK equ 10000000b
EM_DEBUG equ 100000000b
WINDOW_STYLE_SKINNED_FIXED = 0x4000000 ; ---------------------------------------------------------------------------- ;
WINDOW_STYLE_COORD_CLIENT = 0x20000000 WINDOW_STYLE_SKINNED_FIXED equ 0x4000000
WINDOW_STYLE_CAPTION = 0x10000000 WINDOW_STYLE_COORD_CLIENT equ 0x20000000
WINDOW_STYLE_CAPTION equ 0x10000000
WINDOW_BORDER_SIZE = 5 ; ---------------------------------------------------------------------------- ;
WINDOW_STYLE = (WINDOW_STYLE_SKINNED_FIXED or WINDOW_STYLE_COORD_CLIENT or WINDOW_STYLE_CAPTION) WINDOW_BORDER_SIZE equ 5
; ---------------------------------------------------------------------------- ;
MOUSE_BODY_COLOR = 0x007C7C96 WINDOW_STYLE equ WINDOW_STYLE_SKINNED_FIXED | WINDOW_STYLE_COORD_CLIENT | WINDOW_STYLE_CAPTION
MOUSE_LEFT_BUTTON_COLOR = 0x008293A4 ; ---------------------------------------------------------------------------- ;
MOUSE_RIGHT_BUTTON_COLOR = 0x008293A4 MOUSE_BODY_COLOR equ 0x007C7C96
MOUSE_MIDDLE_BUTTON_COLOR = 0x00A48293 MOUSE_LEFT_BUTTON_COLOR equ 0x008293A4
MOUSE_LEFT_BUTTON_PRESSED_COLOR = 0x00568EC7 MOUSE_RIGHT_BUTTON_COLOR equ 0x008293A4
MOUSE_RIGHT_BUTTON_PRESSED_COLOR = 0x00568EC7 MOUSE_MIDDLE_BUTTON_COLOR equ 0x00A48293
MOUSE_MIDDLE_BUTTON_PRESSED_COLOR = 0x00C7568E MOUSE_LEFT_BUTTON_PRESSED_COLOR equ 0x00568EC7
WINDOW_BACK_COLOR = 0x00EFEFEF MOUSE_RIGHT_BUTTON_PRESSED_COLOR equ 0x00568EC7
MOUSE_MIDDLE_BUTTON_PRESSED_COLOR equ 0x00C7568E
MOUSE_WIDTH = 180 WINDOW_BACK_COLOR equ 0x00EFEFEF
MOUSE_HEIGHT = 240 ; ---------------------------------------------------------------------------- ;
MOUSE_MARGIN = 4 MOUSE_WIDTH equ 120
BUTTONS_MARGIN = 2 MOUSE_HEIGHT equ 240
MOUSE_MARGIN equ 4
MOUSE_LEFT = MOUSE_MARGIN BUTTONS_MARGIN equ 2
MOUSE_TOP = MOUSE_MARGIN ; ---------------------------------------------------------------------------- ;
WINDOW_WIDTH = MOUSE_WIDTH + WINDOW_BORDER_SIZE * 2 + MOUSE_MARGIN * 2 MOUSE_LEFT equ MOUSE_MARGIN
MOUSE_BODY_HEIGHT = (MOUSE_HEIGHT - BUTTONS_MARGIN) / 2 MOUSE_TOP equ MOUSE_MARGIN
MOUSE_BODY_TOP = MOUSE_HEIGHT - MOUSE_BODY_HEIGHT + MOUSE_TOP WINDOW_WIDTH equ MOUSE_WIDTH + WINDOW_BORDER_SIZE * 2 + MOUSE_MARGIN * 2
LEFT_BUTTON_HEIGHT = MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN MOUSE_BODY_HEIGHT equ (MOUSE_HEIGHT - BUTTONS_MARGIN) / 2
RIGHT_BUTTON_HEIGHT = MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN MOUSE_BODY_TOP equ MOUSE_HEIGHT - MOUSE_BODY_HEIGHT + MOUSE_TOP
LEFT_BUTTON_WIDTH = (MOUSE_WIDTH - BUTTONS_MARGIN) / 2 LEFT_BUTTON_HEIGHT equ MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN
RIGHT_BUTTON_WIDTH = MOUSE_WIDTH - LEFT_BUTTON_WIDTH - BUTTONS_MARGIN RIGHT_BUTTON_HEIGHT equ MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN
LEFT_BUTTON_LEFT = MOUSE_LEFT LEFT_BUTTON_WIDTH equ (MOUSE_WIDTH - BUTTONS_MARGIN) / 2
RIGHT_BUTTON_LEFT = LEFT_BUTTON_LEFT + LEFT_BUTTON_WIDTH + BUTTONS_MARGIN RIGHT_BUTTON_WIDTH equ MOUSE_WIDTH - LEFT_BUTTON_WIDTH - BUTTONS_MARGIN
MIDDLE_BUTTON_WIDTH = MOUSE_WIDTH / 10 LEFT_BUTTON_LEFT equ MOUSE_LEFT
MIDDLE_BUTTON_HEIGHT = MOUSE_HEIGHT / 6 RIGHT_BUTTON_LEFT equ LEFT_BUTTON_LEFT + LEFT_BUTTON_WIDTH + BUTTONS_MARGIN
MIDDLE_BUTTON_LEFT = (MOUSE_WIDTH - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_LEFT MIDDLE_BUTTON_WIDTH equ MOUSE_WIDTH / 10
MIDDLE_BUTTON_TOP = (MOUSE_WIDTH / 2 - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_TOP MIDDLE_BUTTON_HEIGHT equ MOUSE_HEIGHT / 6
MIDDLE_BUTTON_LEFT equ (MOUSE_WIDTH - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_LEFT
; data: MIDDLE_BUTTON_TOP equ (MOUSE_WIDTH / 2 - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_TOP
; ---------------------------------------------------------------------------- ;
%define SZ_BUTTONS_STATE "Buttons state:"
%define SZ_BIN "bin:"
%define SZ_HEX "hex:0x"
%strlen LEN_SZ_BUTTONS_STATE SZ_BUTTONS_STATE
%strlen LEN_SZ_BIN SZ_BIN
%strlen LEN_SZ_HEX SZ_HEX
; ---------------------------------------------------------------------------- ;
STATE_VALUES_HEIGHT equ 3 * TEXT_HEIGHT ; we have three lines of text
STATE_VALUES_WIDTH equ LEN_SZ_BUTTONS_STATE * TEXT_WIDTH
STATE_VALUES_TOP equ (MOUSE_BODY_HEIGHT - STATE_VALUES_HEIGHT) / 2 + MOUSE_BODY_TOP
STATE_VALUES_LEFT equ (MOUSE_WIDTH - STATE_VALUES_WIDTH) / 2 + MOUSE_LEFT
; ---------------------------------------------------------------------------- ;
MENUET01 db 'MENUET01'
version dd 1
program.start dd START
program.end dd _END
program.memory dd _END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
program.stack dd _END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
program.params dd _END + PATH_SIZE
program.path dd _END
; ---------------------------------------------------------------------------- ;
mouse_body_color dd MOUSE_BODY_COLOR
mouse_left_button_color dd MOUSE_LEFT_BUTTON_COLOR mouse_left_button_color dd MOUSE_LEFT_BUTTON_COLOR
mouse_right_button_color dd MOUSE_RIGHT_BUTTON_COLOR mouse_right_button_color dd MOUSE_RIGHT_BUTTON_COLOR
mouse_middle_button_color dd MOUSE_MIDDLE_BUTTON_COLOR mouse_middle_button_color dd MOUSE_MIDDLE_BUTTON_COLOR
; ---------------------------------------------------------------------------- ;
mouse_button dd 0 mouse.button dd 0
sz_caption db "MouseState", 0 ; ---------------------------------------------------------------------------- ;
sz_caption db "MouseState",0
sz_button_state db "Buttons state:", 0 ; ---------------------------------------------------------------------------- ;
STATE_VALUES_WIDTH = ($ - sz_button_state - 1)*TEXT_WIDTH sz_button_state db SZ_BUTTONS_STATE,0
sz_bin db "bin: ", 0 sz_bin db SZ_BIN,0
LEN_SZ_BIN = $ - sz_bin - 1 sz_hex db SZ_HEX,0
sz_hex db "hex: 0x", 0 ; ---------------------------------------------------------------------------- ;
LEN_SZ_HEX = $ - sz_hex - 1 %macro DrawMouseBody 0
; draw.rectangle
STATE_VALUES_HEIGHT = 3*TEXT_HEIGHT ; we have three lines of text mov eax, 13
STATE_VALUES_TOP = ((MOUSE_BODY_HEIGHT - STATE_VALUES_HEIGHT) / 2 + MOUSE_BODY_TOP) mov ebx, MOUSE_LEFT << 16 | MOUSE_WIDTH
STATE_VALUES_LEFT = ((MOUSE_WIDTH - STATE_VALUES_WIDTH) / 2 + MOUSE_LEFT) mov ecx, MOUSE_BODY_TOP << 16 | MOUSE_BODY_HEIGHT
mov edx, [mouse_body_color]
int 64
; texts
mov eax, 4
mov ecx, 1100b << 28 | WINDOW_BACK_COLOR
mov edi, [mouse_body_color]
; draw.text
mov ebx, (STATE_VALUES_LEFT << 16) | STATE_VALUES_TOP
mov edx, sz_button_state
int 64
; draw.text
add ebx, TEXT_HEIGHT
mov edx, sz_bin
int 64
; draw.text
add ebx, TEXT_HEIGHT
mov edx, sz_hex
int 64
%endmacro
; ---------------------------------------------------------------------------- ;
align 4 align 4
draw_mouse_buttons: DrawMouseButtons:
mov eax, SF_DRAW_RECT mov eax, 13
; draw.rectangle
mov ebx, (LEFT_BUTTON_LEFT shl 16) or LEFT_BUTTON_WIDTH mov ebx, LEFT_BUTTON_LEFT << 16 | LEFT_BUTTON_WIDTH
mov ecx, (MOUSE_TOP shl 16) or LEFT_BUTTON_HEIGHT mov ecx, MOUSE_TOP << 16 | LEFT_BUTTON_HEIGHT
mov edx, [mouse_left_button_color] mov edx, [mouse_left_button_color]
mcall int 64
; draw.rectangle
mov ebx, (RIGHT_BUTTON_LEFT shl 16) or RIGHT_BUTTON_WIDTH mov ebx, RIGHT_BUTTON_LEFT << 16 | RIGHT_BUTTON_WIDTH
mov ecx, (MOUSE_TOP shl 16) or RIGHT_BUTTON_HEIGHT mov ecx, MOUSE_TOP << 16 | RIGHT_BUTTON_HEIGHT
mov edx, [mouse_right_button_color] mov edx, [mouse_right_button_color]
mcall int 64
; draw.rectangle
mov ebx, (MIDDLE_BUTTON_LEFT shl 16) or MIDDLE_BUTTON_WIDTH mov ebx, MIDDLE_BUTTON_LEFT << 16 | MIDDLE_BUTTON_WIDTH
mov ecx, (MIDDLE_BUTTON_TOP shl 16) or MIDDLE_BUTTON_HEIGHT mov ecx, MIDDLE_BUTTON_TOP << 16 | MIDDLE_BUTTON_HEIGHT
mov edx, [mouse_middle_button_color] mov edx, [mouse_middle_button_color]
mcall int 64
; draw state values ; Draw State Values
mov eax, SF_DRAW_NUMBER mov eax, 47
mov esi, (0101b shl 28) or WINDOW_BACK_COLOR mov esi, 0100b << 28 | WINDOW_BACK_COLOR
mov ecx, [mouse_button] mov ecx, [mouse.button]
mov edi, MOUSE_BODY_COLOR mov edi, [mouse_body_color]
; draw.number
mov ebx, (10 shl 16) or (2 shl 8) ; 10 digits, base2 mov ebx, (10 << 16) | (2 << 8) ; 10 digits, base2
mov edx, ((LEN_SZ_BIN * TEXT_WIDTH + STATE_VALUES_LEFT) shl 16) or (STATE_VALUES_TOP + TEXT_HEIGHT) mov edx, (LEN_SZ_BIN * TEXT_WIDTH + STATE_VALUES_LEFT) << 16 | (STATE_VALUES_TOP + TEXT_HEIGHT)
mcall int 64
; draw.number
mov ebx, (8 shl 16) or (1 shl 8) ; 8 digits, base16 mov ebx, (8 << 16) | (1 << 8) ; 8 digits, base16
mov edx, ((LEN_SZ_HEX * TEXT_WIDTH + STATE_VALUES_LEFT) shl 16) or (STATE_VALUES_TOP + TEXT_HEIGHT * 2) mov edx, (LEN_SZ_HEX * TEXT_WIDTH + STATE_VALUES_LEFT) << 16 | (STATE_VALUES_TOP + TEXT_HEIGHT * 2)
mcall int 64
ret ret
; ---------------------------------------------------------------------------- ;
align 4 align 4
start: START:
mcall SF_GET_GRAPHICAL_PARAMS, SSF_SCREEN_SIZE ; get.screen.size
mov edx, eax mov eax, 61
movzx ecx, ax mov ebx, 1
shr edx, 16 int 64
mov edx, eax
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT movzx ecx, ax
add eax, MOUSE_HEIGHT + WINDOW_BORDER_SIZE + MOUSE_MARGIN * 2 - 1 shr edx, 16
mov esi, eax ; skin.height
sub edx, (WINDOW_WIDTH - 1) mov eax, 48
sub ecx, eax mov ebx, 4
shr edx, 1 int 64
shr ecx, 1 add eax, MOUSE_HEIGHT + WINDOW_BORDER_SIZE + MOUSE_MARGIN * 2 - 1
mov esi, eax
mov eax, SF_SET_EVENTS_MASK sub edx, (WINDOW_WIDTH - 1)
mov ebx, EVM_REDRAW or EVM_BUTTON or EVM_MOUSE sub ecx, eax
mcall shr edx, 1
shr ecx, 1
; set.event
mov eax, 40
mov ebx, EM_REDRAW | EM_BUTTON | EM_MOUSE
int 64
; ---------------------------------------------------------------------------- ;
align 4 align 4
on_redraw: on_redraw:
mcall SF_REDRAW, SSF_BEGIN_DRAW ; redraw.start
xor eax, eax ; SF_CREATE_WINDOW mov eax, 12
mov ebx, edx ; window.left mov ebx, 1
int 64
; draw.window
xor eax, eax
mov ebx, edx ; window.left
; ecx = window.top ; ecx = window.top
shl ebx, 16 shl ebx, 16
shl ecx, 16 shl ecx, 16
or ebx, (WINDOW_WIDTH - 1) or ebx, (WINDOW_WIDTH - 1)
or ecx, esi ; window.height or ecx, esi ; window.height
mov edx, WINDOW_STYLE or WINDOW_BACK_COLOR mov edx, WINDOW_STYLE | WINDOW_BACK_COLOR
mov edi, sz_caption mov edi, sz_caption
xor esi, esi xor esi, esi
mcall int 64
; redraw.finish
mcall SF_REDRAW, SSF_END_DRAW mov eax, 12
; draw mouse body: mov ebx, 2
mov eax, SF_DRAW_RECT int 64
mov ebx, (MOUSE_LEFT shl 16) or MOUSE_WIDTH DrawMouseBody
mov ecx, (MOUSE_BODY_TOP shl 16) or MOUSE_BODY_HEIGHT call DrawMouseButtons
mov edx, MOUSE_BODY_COLOR
mcall
mov eax, SF_DRAW_TEXT
mov ecx, (1101b shl 28) or WINDOW_BACK_COLOR
mov edi, MOUSE_BODY_COLOR
mov ebx, (STATE_VALUES_LEFT shl 16) or STATE_VALUES_TOP
mov edx, sz_button_state
mcall
add ebx, TEXT_HEIGHT
mov edx, sz_bin
mcall
add ebx, TEXT_HEIGHT
mov edx, sz_hex
mcall
call draw_mouse_buttons
align 4 align 4
wait_event: wait.event:
mcall SF_WAIT_EVENT mov eax, 10 ; redraw = 001b; 001b & 110b = 000b
cmp eax, EV_REDRAW int 64 ; button = 011b; 011b & 110b = 010b
je on_redraw test eax, 110b ; mouse = 110b; 110b & 110b = 110b
cmp eax, EV_BUTTON jz on_redraw
je on_button jnp on_button
; otherwise mouse: ; get.mouse.button
mov eax, 37
mcall SF_MOUSE_GET, SSF_BUTTON mov ebx, 2
cmp [mouse_button], eax ; if equal, then no need update int 64
je wait_event cmp [mouse.button], eax ; if equal
mov ebx, dword MOUSE_LEFT_BUTTON_COLOR je wait.event ; then no need update
mov ecx, dword MOUSE_RIGHT_BUTTON_COLOR mov ebx, dword MOUSE_LEFT_BUTTON_COLOR
mov edx, dword MOUSE_MIDDLE_BUTTON_COLOR mov ecx, dword MOUSE_RIGHT_BUTTON_COLOR
mov edx, dword MOUSE_MIDDLE_BUTTON_COLOR
.left: .left:
test eax, MOUSE_LEFT_BUTTON_MASK test eax, MOUSE_LEFT_BUTTON_MASK
jz .right jz .right
mov ebx, dword MOUSE_LEFT_BUTTON_PRESSED_COLOR mov ebx, dword MOUSE_LEFT_BUTTON_PRESSED_COLOR
.right: .right:
test eax, MOUSE_RIGHT_BUTTON_MASK test eax, MOUSE_RIGHT_BUTTON_MASK
jz .middle jz .middle
mov ecx, dword MOUSE_RIGHT_BUTTON_PRESSED_COLOR mov ecx, dword MOUSE_RIGHT_BUTTON_PRESSED_COLOR
.middle: .middle:
test eax, MOUSE_MIDDLE_BUTTON_MASK test eax, MOUSE_MIDDLE_BUTTON_MASK
jz .other jz .other
mov edx, dword MOUSE_MIDDLE_BUTTON_PRESSED_COLOR mov edx, dword MOUSE_MIDDLE_BUTTON_PRESSED_COLOR
.other: .other:
mov [mouse_left_button_color], ebx mov [mouse_left_button_color], ebx
mov [mouse_right_button_color], ecx mov [mouse_right_button_color], ecx
mov [mouse_middle_button_color], edx mov [mouse_middle_button_color], edx
mov [mouse_button], eax mov [mouse.button], eax
call draw_mouse_buttons call DrawMouseButtons
jmp wait_event jmp wait.event
align 4 align 4
on_button: on_button: ; terminate because we have only one button(close button)
; terminate because we have only one button (close) or eax, -1
mcall SF_TERMINATE_PROCESS int 64
; ---------------------------------------------------------------------------- ;
align 16 align 4
_image_end: _END:
; reserve for stack:
rb 256
align 16
_stacktop:
_memory:

View File

@@ -1,2 +1,2 @@
if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_NASM") ~= "" then return end
tup.rule("lod.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "lod") tup.rule("lod.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "lod")

View File

@@ -1,3 +0,0 @@
@fasm.exe -m 16384 lod.asm lod.kex
@kpack lod.kex
pause

View File

@@ -8,20 +8,11 @@
; Author 0CodErr ; Author 0CodErr
; http://board.kolibrios.org/viewtopic.php?f=9&t=2486 ; http://board.kolibrios.org/viewtopic.php?f=9&t=2486
use32 ORG 0
org 0 BITS 32
db 'MENUET01' ; ---------------------------------------------------------------------------- ;
version dd 1 PARAMS_SIZE equ 256
dd program.start STACK_SIZE equ 256
dd program.end
dd program.memory
dd program.stack
dd program.params
dd 0
; ---------------------------- ;
include '../../macros.inc'
include '../../KOSfuncs.inc'
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
PROCINFO_SIZE equ 1024 PROCINFO_SIZE equ 1024
FILENAME_AREA_SIZE equ 256 FILENAME_AREA_SIZE equ 256
@@ -30,10 +21,18 @@ OPENFILE_PATH_SIZE equ 4096
FILTER_AREA_SIZE equ 256 FILTER_AREA_SIZE equ 256
FILTER_BRACKET equ "*" ; and for example: LOD *bmp,png,jpeg*/sys/media/kiv FILTER_BRACKET equ "*" ; and for example: LOD *bmp,png,jpeg*/sys/media/kiv
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
align 4 MENUET01 db 'MENUET01'
program.start: version dd 1
mov edi, program.params program.start dd START
cmp [edi], dword 0 program.end dd END
program.memory dd END + PARAMS_SIZE + STACK_SIZE
program.stack dd END + PARAMS_SIZE + STACK_SIZE
program.params dd END
program.path dd 0
; ---------------------------------------------------------------------------- ;
START:
mov edi,[program.params]
cmp [edi],dword 0
je terminate je terminate
call FakeDrawWindow call FakeDrawWindow
@@ -44,13 +43,19 @@ program.start:
je terminate je terminate
mov [file_info.params], eax mov [file_info.params], eax
launch_program: launch_program:
mcall SF_FILE, file_info mov eax, 70
mov ebx, file_info
int 64
terminate: terminate:
mcall SF_TERMINATE_PROCESS or eax, -1
int 64
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
OpenDialogInit: OpenDialogInit:
; load.library ; load.library
mcall SF_SYS_MISC,SSF_LOAD_DLL, sz_proc_lib mov eax, 68
mov ebx, 19
mov ecx, sz_proc_lib
int 64
mov [proclib], eax mov [proclib], eax
push dword[proclib] push dword[proclib]
@@ -63,7 +68,10 @@ OpenDialogInit:
call GetProcAddress call GetProcAddress
mov [opendialog_start], eax mov [opendialog_start], eax
; memory.allocate ; memory.allocate
mcall SF_SYS_MISC,SSF_MEM_ALLOC, PROCINFO_SIZE + FILENAME_AREA_SIZE + OPENDIR_PATH_SIZE + OPENFILE_PATH_SIZE mov eax, 68
mov ebx, 12
mov ecx, PROCINFO_SIZE + FILENAME_AREA_SIZE + OPENDIR_PATH_SIZE + OPENFILE_PATH_SIZE
int 64
mov [od.procinfo], eax mov [od.procinfo], eax
add eax, PROCINFO_SIZE add eax, PROCINFO_SIZE
@@ -113,9 +121,13 @@ GetProcAddress:
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
FakeDrawWindow: FakeDrawWindow:
; redraw.start ; redraw.start
mcall SF_REDRAW,SSF_BEGIN_DRAW mov eax, 12
mov ebx, 1
int 64
; get.screen.size ; get.screen.size
mcall SF_GET_GRAPHICAL_PARAMS,SSF_SCREEN_SIZE mov eax, 61
mov ebx, 1
int 64
shr eax, 1 shr eax, 1
and eax, 0x7FFF7FFF and eax, 0x7FFF7FFF
; draw.window ; draw.window
@@ -124,13 +136,17 @@ FakeDrawWindow:
shr eax, 16 shr eax, 16
movzx ebx, ax movzx ebx, ax
shl ebx, 16 shl ebx, 16
mcall SF_CREATE_WINDOW,,, 0x01000000 mov edx, 0x01000000
xor eax, eax
int 64
; redraw.finish ; redraw.finish
mcall SF_REDRAW,SSF_END_DRAW mov eax, 12
mov ebx, 2
int 64
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
OpenDialogSetFilter: OpenDialogSetFilter:
mov edi, program.params mov edi, [program.params]
mov esi, filefilter + 4 mov esi, filefilter + 4
; skip spaces ; skip spaces
or ecx, -1 or ecx, -1
@@ -179,17 +195,22 @@ OpenDialogSetFilter:
LaunchProgram: LaunchProgram:
mov eax, [od.openfile_path] mov eax, [od.openfile_path]
mov [file_info.params], eax mov [file_info.params], eax
mcall SF_FILE, file_info mov eax, 70
mov ebx, file_info
int 64
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
file_info: file_info:
dd SSF_START_APP,0 dd 7
.params dd 0,0,0 dd 0
.params dd 0
dd 0
dd 0
db 0 db 0
.file_path dd 0 .file_path dd 0
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
filefilter dd 0 filefilter dd 0
rb FILTER_AREA_SIZE resb FILTER_AREA_SIZE
.end db 0 .end db 0
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
od: od:
@@ -221,10 +242,4 @@ proclib dd 0
opendialog_init dd 0 opendialog_init dd 0
opendialog_start dd 0 opendialog_start dd 0
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
align 4 END:
program.end:
program.params rb 256
rb 256
align 16
program.stack:
program.memory:

2
programs/fs/lod/make.bat Normal file
View File

@@ -0,0 +1,2 @@
nasm -f bin LOD.asm -o LOD
pause

View File

@@ -1,7 +1,7 @@
if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_NASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") -- tup.rule is too unmannerly to %define
tup.include(HELPERDIR .. "/use_fasm.lua") tup.definerule{
add_include(tup.getvariantdir()) command = "echo %%define lang '" .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. "'> %o",
outputs = {"lang_nasm.inc"}
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"}) }
tup.rule({"c4.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "c4") tup.rule({"c4.asm", extra_inputs = {"lang_nasm.inc"}}, "nasm -I" .. tup.getvariantdir() .. "/ -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "c4")

View File

@@ -18,11 +18,16 @@
; along with C4; if not, write to the Free Software ; along with C4; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
%ifndef _AI_INC
%define _AI_INC
INFTY equ 1000000000 INFTY equ 1000000000
section .data
; table used to perform some primitive move "ordering": ; table used to perform some primitive move "ordering":
; middle columns which are usually more important are ; middle columns which are usually more important are
; searched first. ; searched first.
@@ -41,10 +46,18 @@ evaltable: dd 0, 0, 0, 0, 0, 0, 0, 0, 0
dd 0, 0, 0, 0, 0, 0, 0, 0, 0 dd 0, 0, 0, 0, 0, 0, 0, 0, 0
cpulevel rd 1 ; level of current cpu player
bestval rd 1 ; value of best move found so far section .bss
nbestmoves rd 1 ; # of best moves found so far
bestmoves rd 7 ; array to hold all best moves cpulevel resd 1 ; level of current cpu player
bestval resd 1 ; value of best move found so far
nbestmoves resd 1 ; # of best moves found so far
bestmoves resd 7 ; array to hold all best moves
section .text
;********************************************************** ;**********************************************************
@@ -135,16 +148,15 @@ aiGetMove:
; output : eax = move value ; output : eax = move value
; destroys : everything ; destroys : everything
;********************************************************** ;**********************************************************
align 4
alphabeta: alphabeta:
ply equ (ebp+20) %define ply (ebp+20)
player equ (ebp+16) %define player (ebp+16)
alpha equ (ebp+12) %define alpha (ebp+12)
beta equ (ebp+ 8) %define beta (ebp+ 8)
enter 0,0
push ebp
mov ebp,esp
; win for other player -> end search ; win for other player -> end search
mov eax,[player] mov eax,[player]
BOARDGETOTHERPLAYER eax BOARDGETOTHERPLAYER eax
@@ -250,8 +262,9 @@ beta equ (ebp+ 8)
leave ; eax contains static value leave ; eax contains static value
ret 4*4 ret 4*4
purge ply %undef ply
purge player %undef player
purge alpha %undef alpha
purge beta %undef beta
%endif

View File

@@ -18,6 +18,9 @@
; along with C4; if not, write to the Free Software ; along with C4; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
%ifndef _BOARD_INC
%define _BOARD_INC
;********************************************************** ;**********************************************************
; magic numbers ; magic numbers
@@ -33,15 +36,27 @@ BHEIGHT equ 8
board rd BHEIGHT*BWIDTH ; the board ;**********************************************************
free rd BWIDTH ; # of free fields for each column ; uninitialized data
totalfree rd 1 ; total # of free fields ;**********************************************************
currentplayer rd 1 ; player to make next move
lastmove rd 1 ; last move done on the board section .bss
board resd BHEIGHT*BWIDTH ; the board
free resd BWIDTH ; # of free fields for each column
totalfree resd 1 ; total # of free fields
currentplayer resd 1 ; player to make next move
lastmove resd 1 ; last move done on the board
; (0 if no last move available) ; (0 if no last move available)
;**********************************************************
; code
;**********************************************************
section .text
;********************************************************** ;**********************************************************
; boardReset ; boardReset
@@ -87,9 +102,9 @@ boardReset:
; zero flag clear -> move is valid ; zero flag clear -> move is valid
; destroys : nothing ; destroys : nothing
;********************************************************** ;**********************************************************
macro BOARDISVALIDMOVE p1 { %macro BOARDISVALIDMOVE 1
cmp dword [free+p1*4],0 cmp dword [free+%1*4],0
} %endmacro
@@ -145,9 +160,9 @@ boardUndoMove:
; output : current player is switched ; output : current player is switched
; destroys : flags ; destroys : flags
;********************************************************** ;**********************************************************
macro BOARDSWITCHPLAYERS { %macro BOARDSWITCHPLAYERS 0
xor dword [currentplayer],(PLAYER1 xor PLAYER2) xor dword [currentplayer],(PLAYER1 ^ PLAYER2)
} %endmacro
@@ -159,9 +174,9 @@ macro BOARDSWITCHPLAYERS {
; output : player changed ; output : player changed
; destroys : flags ; destroys : flags
;********************************************************** ;**********************************************************
macro BOARDGETOTHERPLAYER r1 { %macro BOARDGETOTHERPLAYER 1
xor r1,(PLAYER1 xor PLAYER2) xor %1,(PLAYER1 ^ PLAYER2)
} %endmacro
@@ -173,9 +188,9 @@ macro BOARDGETOTHERPLAYER r1 {
; output : zero flag set -> board is full ; output : zero flag set -> board is full
; zero flag clear -> board isn't full ; zero flag clear -> board isn't full
;********************************************************** ;**********************************************************
macro BOARDISFULL { %macro BOARDISFULL 0
cmp dword [totalfree],0 cmp dword [totalfree],0
} %endmacro
@@ -298,3 +313,6 @@ boardIsWin:
; no win for this player ; no win for this player
xor eax,eax xor eax,eax
ret ret
%endif

View File

@@ -0,0 +1,2 @@
@nasmw -f bin -o c4 c4.asm
@pause

View File

@@ -1,4 +0,0 @@
@echo lang fix en_EN >lang.inc
@fasm.exe -m 16384 c4.asm c4.kex
@kpack c4.kex
pause

View File

@@ -1,4 +0,0 @@
@echo lang fix ru_RU >lang.inc
@fasm.exe -m 16384 c4.asm c4.kex
@kpack c4.kex
pause

View File

@@ -18,15 +18,14 @@
; along with C4; if not, write to the Free Software ; along with C4; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use32 bits 32
org 0 %include 'mos.inc'
db 'MENUET01' section .text
dd 1,start,i_end,mem,stacktop,0,0 %include 'lang_nasm.inc' ;fedesco
MOS_HEADER01 start,end
include '../../macros.inc'
include '../../proc32.inc'
include '../../KOSfuncs.inc'
include 'lang.inc' ;fedesco
;********************************************************** ;**********************************************************
@@ -47,20 +46,11 @@ BUTTON_HEIGHT equ 12
BUTTON_NEW_X equ 14 BUTTON_NEW_X equ 14
BUTTON_NEW_Y equ 30 BUTTON_NEW_Y equ 30
BUTTON_NEW_HEIGHT equ 32 %ifidn lang, 'it_IT'
if lang eq it_IT BUTTON_NEW_WIDTH equ 56 + 28
BUTTON_NEW_WIDTH = 56 + 28 %else
LABEL_PL1_X = 90 + 10 BUTTON_NEW_WIDTH equ 56
LABEL_PL1TYPE_X = (LABEL_PL1_X + 10*6 - 4) %endif
else if lang eq ru_RU
BUTTON_NEW_WIDTH = 56 + 12
LABEL_PL1_X = 90
LABEL_PL1TYPE_X = (LABEL_PL1_X + 10*6)
else
BUTTON_NEW_WIDTH = 56
LABEL_PL1_X = 90
LABEL_PL1TYPE_X = (LABEL_PL1_X + 10*6)
end if
BUTTON_SPIN_WIDTH equ 8 BUTTON_SPIN_WIDTH equ 8
BUTTON_PL1DN_X equ 228 BUTTON_PL1DN_X equ 228
@@ -74,9 +64,19 @@ BUTTON_PL2UP_X equ (BUTTON_PL2DN_X + BUTTON_SPIN_WIDTH + 1)
BUTTON_PL2UP_Y equ BUTTON_PL2DN_Y BUTTON_PL2UP_Y equ BUTTON_PL2DN_Y
; label dimensions ; label dimensions
%ifidn lang, 'it_IT'
LABEL_PL1_X equ 90 + 10
%else
LABEL_PL1_X equ 90
%endif
LABEL_PL1_Y equ (1 + BUTTON_PL1DN_Y + (BUTTON_HEIGHT-8)/2) LABEL_PL1_Y equ (1 + BUTTON_PL1DN_Y + (BUTTON_HEIGHT-8)/2)
LABEL_PL2_X equ LABEL_PL1_X LABEL_PL2_X equ LABEL_PL1_X
LABEL_PL2_Y equ (1 + BUTTON_PL2DN_Y + (BUTTON_HEIGHT-8)/2) LABEL_PL2_Y equ (1 + BUTTON_PL2DN_Y + (BUTTON_HEIGHT-8)/2)
%ifidn lang, 'it_IT'
LABEL_PL1TYPE_X equ (LABEL_PL1_X + 10*6 - 4)
%else
LABEL_PL1TYPE_X equ (LABEL_PL1_X + 10*6)
%endif
LABEL_PL1TYPE_Y equ LABEL_PL1_Y LABEL_PL1TYPE_Y equ LABEL_PL1_Y
LABEL_PL2TYPE_X equ LABEL_PL1TYPE_X LABEL_PL2TYPE_X equ LABEL_PL1TYPE_X
LABEL_PL2TYPE_Y equ LABEL_PL2_Y LABEL_PL2TYPE_Y equ LABEL_PL2_Y
@@ -94,7 +94,9 @@ GRIDY equ 70
GRIDSPACING equ (STONESIZE + 1) ; space between lines GRIDSPACING equ (STONESIZE + 1) ; space between lines
GRIDHEIGHT equ (6*GRIDSPACING+1) ; total grid width and height GRIDHEIGHT equ (6*GRIDSPACING+1) ; total grid width and height
GRIDWIDTH equ (7*GRIDSPACING+1) GRIDWIDTH equ (7*GRIDSPACING+1)
GRIDCOLOR equ 0x808080 GRIDCOLOR equ MOS_RGB(128,128,128)
; button id's ; button id's
BT_QUIT equ 1 BT_QUIT equ 1
@@ -104,170 +106,55 @@ BT_PLAYER1UP equ 4
BT_PLAYER2DN equ 5 BT_PLAYER2DN equ 5
BT_PLAYER2UP equ 6 BT_PLAYER2UP equ 6
include "pcx.inc"
include "windows.inc"
include "board.inc"
include "rng.inc"
;include "randomai.inc"
include "ai.inc"
;
; label table
;
if lang eq it_IT
newgame db "Nuova partita",0
down db "<",0
up db ">",0
pl1 db "Giocatore 1:",0
pl2 db "Giocatore 2:",0
playertypes:
db "Umano ",0
.e1:
db "CPU 1 ",0
db "CPU 2 ",0
db "CPU 3 ",0
db "CPU 4 ",0
db "CPU 5 ",0
db "CPU 6 ",0
db "CPU 7 ",0
db "CPU 8 ",0
else if lang eq ru_RU
newgame db "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",0
down db "<",0
up db ">",0
pl1 db "<22><>ப 1:",0
pl2 db "<22><>ப 2:",0
playertypes:
db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ",0
.e1:
db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 ",0
db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 ",0
db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3 ",0
db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4 ",0
db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5 ",0
db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6 ",0
db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 ",0
db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8 ",0
else
newgame db "New game",0
down db "<",0
up db ">",0
pl1 db "Player 1:",0
pl2 db "Player 2:",0
playertypes:
db "Human ",0
.e1:
db "CPU level 1 ",0
db "CPU level 2 ",0
db "CPU level 3 ",0
db "CPU level 4 ",0
db "CPU level 5 ",0
db "CPU level 6 ",0
db "CPU level 7 ",0
db "CPU level 8 ",0
end if
playertypes_end:
PLAYERTYPELEN equ (playertypes.e1 - playertypes)
NPLAYERTYPES equ ((playertypes_end-playertypes)/PLAYERTYPELEN)
;
; button table
;
align 4
buttons:
; new
BUTTON (BUTTON_NEW_X shl 16) + BUTTON_NEW_WIDTH, (BUTTON_NEW_Y shl 16) + BUTTON_NEW_HEIGHT, BT_NEW, BUTTON_COLOR_WORK
; player 1 down
BUTTON (BUTTON_PL1DN_X shl 16) + BUTTON_SPIN_WIDTH, (BUTTON_PL1DN_Y shl 16) + BUTTON_HEIGHT, BT_PLAYER1DN, BUTTON_COLOR_WORK
; player 1 up
BUTTON (BUTTON_PL1UP_X shl 16) + BUTTON_SPIN_WIDTH, (BUTTON_PL1UP_Y shl 16) + BUTTON_HEIGHT, BT_PLAYER1UP, BUTTON_COLOR_WORK
; player 2 down
BUTTON (BUTTON_PL2DN_X shl 16) + BUTTON_SPIN_WIDTH, (BUTTON_PL2DN_Y shl 16) + BUTTON_HEIGHT, BT_PLAYER2DN, BUTTON_COLOR_WORK
; player 2 up
BUTTON (BUTTON_PL2UP_X shl 16) + BUTTON_SPIN_WIDTH, (BUTTON_PL2UP_Y shl 16) + BUTTON_HEIGHT, BT_PLAYER2UP, BUTTON_COLOR_WORK
buttons_end:
NBUTTONS equ ((buttons_end-buttons)/sizeof.BUTTON)
align 4
labels:
; new
LABEL ((BUTTON_NEW_X+4) shl 16) + (1+BUTTON_NEW_Y+(BUTTON_NEW_HEIGHT-8)/2), newgame,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT
; player 1 down
LABEL ((BUTTON_PL1DN_X+(BUTTON_SPIN_WIDTH-4)/2) shl 16) + (1+BUTTON_PL1DN_Y+(BUTTON_HEIGHT-8)/2), down,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT
; player 1 up
LABEL ((1+BUTTON_PL1UP_X+(BUTTON_SPIN_WIDTH-4)/2) shl 16) + (1+BUTTON_PL1UP_Y+(BUTTON_HEIGHT-8)/2), up,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT
; player 2 down
LABEL ((BUTTON_PL2DN_X+(BUTTON_SPIN_WIDTH-4)/2) shl 16) + (1+BUTTON_PL2DN_Y+(BUTTON_HEIGHT-8)/2), down,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT
; player 2 up
LABEL ((1+BUTTON_PL2UP_X+(BUTTON_SPIN_WIDTH-4)/2) shl 16) + (1+BUTTON_PL2UP_Y+(BUTTON_HEIGHT-8)/2), up,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT
; player 1
LABEL (LABEL_PL1_X shl 16) + LABEL_PL1_Y, pl1,0xffffff,LABEL_BGCOLOR_TRANSPARENT
; player 2
LABEL (LABEL_PL2_X shl 16) + LABEL_PL2_Y, pl2,0xffffff,LABEL_BGCOLOR_TRANSPARENT
; status bar
statusbar LABEL (LABEL_STATUS_X shl 16) + LABEL_STATUS_Y, 0,0xffffff,LABEL_BGCOLOR_TRANSPARENT
if lang eq it_IT
label_pl1type LABEL ((LABEL_PL1TYPE_X + 18) shl 16) + LABEL_PL1TYPE_Y, playertypes+PL1TYPE_INIT*PLAYERTYPELEN,0xffffff,0
label_pl2type LABEL ((LABEL_PL2TYPE_X + 18) shl 16) + LABEL_PL2TYPE_Y, playertypes+PL2TYPE_INIT*PLAYERTYPELEN,0xffffff,0
else
label_pl1type LABEL (LABEL_PL1TYPE_X shl 16) + LABEL_PL1TYPE_Y, playertypes+PL1TYPE_INIT*PLAYERTYPELEN,0xffffff,0
label_pl2type LABEL (LABEL_PL2TYPE_X shl 16) + LABEL_PL2TYPE_Y, playertypes+PL2TYPE_INIT*PLAYERTYPELEN,0xffffff,0
end if
labels_end:
NLABELS equ ((labels_end-labels)/sizeof.LABEL)
; button images
redpcx:
file "red.pcx"
REDPCXSIZE equ (bluepcx - redpcx)
bluepcx:
file "blue.pcx"
pcx_end:
BLUEPCXSIZE equ (pcx_end - bluepcx)
align 4
start: start:
jmp main
%include "pcx.inc"
%include "windows.inc"
%include "board.inc"
%include "rng.inc"
; %include "randomai.inc"
%include "ai.inc"
;**********************************************************
; main program
;**********************************************************
main:
call randomize call randomize
call defineWindow call defineWindow
call decrunchImages call decrunchImages
call newGame call newGame
align 16
.msgpump: .msgpump:
; wait for event ; wait for event
mcall SF_WAIT_EVENT_TIMEOUT,1 mov ebx,1
mov eax,MOS_SC_WAITEVENTTIMEOUT
int 0x40
; process events ; process events
cmp eax,EV_REDRAW cmp eax,MOS_EVT_REDRAW
je .redraw je short .redraw
cmp eax,EV_KEY cmp eax,MOS_EVT_KEY
je .key je short .key
cmp eax,EV_BUTTON cmp eax,MOS_EVT_BUTTON
je .button je short .button
call pollMouse call pollMouse
call gameLoop call gameLoop
jmp .msgpump jmp short .msgpump
.redraw: .redraw:
call defineWindow call defineWindow
jmp .msgpump jmp short .msgpump
.key: .key:
call keyboardInput call keyboardInput
jmp .msgpump jmp short .msgpump
.button: .button:
call handleButton call handleButton
jmp .msgpump jmp short .msgpump
@@ -275,27 +162,28 @@ align 16
; button handling function ; button handling function
;********************************************************** ;**********************************************************
handleButton: handleButton:
mcall SF_GET_BUTTON ; get button id mov eax,MOS_SC_GETPRESSEDBUTTON ; get button id
int 0x40
cmp al,1 ; button pressed ? cmp al,1 ; button pressed ?
je .bye ; nope -> nothing to do je short .bye ; nope -> nothing to do
cmp ah,BT_QUIT ; which button has been pressed ? cmp ah,BT_QUIT ; which button has been pressed ?
je .quit je short .quit
cmp ah,BT_NEW cmp ah,BT_NEW
je .new je short .new
cmp ah,BT_PLAYER1DN cmp ah,BT_PLAYER1DN
je .player1dn je short .player1dn
cmp ah,BT_PLAYER1UP cmp ah,BT_PLAYER1UP
je .player1up je short .player1up
cmp ah,BT_PLAYER2DN cmp ah,BT_PLAYER2DN
je .player2dn je short .player2dn
cmp ah,BT_PLAYER2UP cmp ah,BT_PLAYER2UP
je .player2up je short .player2up
.bye: .bye:
ret ret
.quit: .quit:
mcall SF_TERMINATE_PROCESS MOS_EXIT
.new: .new:
call newGame call newGame
ret ret
@@ -346,7 +234,7 @@ handleButton:
; window definition function ; window definition function
;********************************************************** ;**********************************************************
defineWindow: defineWindow:
mcall SF_REDRAW,SSF_BEGIN_DRAW MOS_STARTREDRAW
mov edi,window mov edi,window
call drawWindow call drawWindow
@@ -362,7 +250,7 @@ defineWindow:
xor eax,eax xor eax,eax
call drawBoard call drawBoard
mcall SF_REDRAW,SSF_END_DRAW MOS_ENDREDRAW
ret ret
@@ -382,10 +270,11 @@ updateStatusText:
mov dword [statusbar + LABEL.caption],esi ; yeah -> save & redraw mov dword [statusbar + LABEL.caption],esi ; yeah -> save & redraw
; clear background ; clear background
mov ebx, LABEL_STATUS_X shl 16 + LABEL_STATUS_WIDTH mov ebx,MOS_DWORD(LABEL_STATUS_X,LABEL_STATUS_WIDTH)
mov ecx, LABEL_STATUS_Y shl 16 + LABEL_STATUS_HEIGHT mov ecx,MOS_DWORD(LABEL_STATUS_Y,LABEL_STATUS_HEIGHT)
xor edx,edx xor edx,edx
mcall SF_DRAW_RECT mov eax,MOS_SC_DRAWBAR
int 0x40
; redraw label ; redraw label
mov edi,statusbar mov edi,statusbar
@@ -421,50 +310,50 @@ updatePlayerType:
; draw whole board ; draw whole board
; ;
; input : eax nonzero = clear board background ; input : eax nonzero = clear board background
align 4
drawBoard: drawBoard:
; clear background ? ; clear background ?
or eax,eax or eax,eax
jz .noclear jz .noclear
mov ebx, GRIDX shl 16 + GRIDWIDTH mov ebx,MOS_DWORD(GRIDX,GRIDWIDTH)
mov ecx, GRIDY shl 16 + GRIDHEIGHT mov ecx,MOS_DWORD(GRIDY,GRIDHEIGHT)
mov edx,WND_WORKCOLOR mov edx,WND_WORKCOLOR
mcall SF_DRAW_RECT mov eax,MOS_SC_DRAWBAR
int 0x40
.noclear: .noclear:
call drawGrid call drawGrid
call drawStones call drawStones
ret ret
align 4
drawGrid: drawGrid:
; vertical lines ; vertical lines
mov ebx, GRIDX shl 16 + GRIDX mov ebx,MOS_DWORD(GRIDX,GRIDX)
mov ecx, GRIDY shl 16 + GRIDY+GRIDHEIGHT-1 mov ecx,MOS_DWORD(GRIDY,GRIDY+GRIDHEIGHT-1)
mov edx,GRIDCOLOR mov edx,GRIDCOLOR
mcall SF_DRAW_LINE mov eax,MOS_SC_DRAWLINE
mov esi,8 mov esi,8
.vlines: .vlines:
int 0x40 int 0x40
add ebx, GRIDSPACING shl 16 + GRIDSPACING add ebx,MOS_DWORD(GRIDSPACING,GRIDSPACING)
dec esi dec esi
jnz .vlines jnz .vlines
; horizontal lines ; horizontal lines
mov ebx, GRIDX shl 16 + GRIDX+GRIDWIDTH-1 mov ebx,MOS_DWORD(GRIDX,GRIDX+GRIDWIDTH-1)
mov ecx, GRIDY shl 16 + GRIDY mov ecx,MOS_DWORD(GRIDY,GRIDY)
mov esi,7 mov esi,7
.hlines: .hlines:
int 0x40 int 0x40
add ecx, GRIDSPACING shl 16 + GRIDSPACING add ecx,MOS_DWORD(GRIDSPACING,GRIDSPACING)
dec esi dec esi
jnz .hlines jnz .hlines
ret ret
align 4
drawStones: drawStones:
mov ebx,6 mov ebx,6
.col: .col:
@@ -480,7 +369,6 @@ drawStones:
; ecx = column (1..7) ; ecx = column (1..7)
; ebx = row (1..6) ; ebx = row (1..6)
align 4
drawStone: drawStone:
pushad pushad
@@ -514,8 +402,9 @@ drawStone:
; put image (position is already in edx) ; put image (position is already in edx)
mov ebx,ebp ; image address mov ebx,ebp ; image address
mov ecx, (STONESIZE shl 16) + STONESIZE ; image dimensions mov ecx,MOS_DWORD(STONESIZE,STONESIZE) ; image dimensions
mcall SF_PUT_IMAGE mov eax,MOS_SC_PUTIMAGE
int 0x40
.bye: .bye:
popad popad
@@ -572,8 +461,9 @@ newGame:
; destroys : everything ; destroys : everything
;********************************************************** ;**********************************************************
pollMouse: pollMouse:
mcall SF_MOUSE_GET,SSF_BUTTON mov ebx,2
mov eax,MOS_SC_GETMOUSEPOSITION
int 0x40
and eax,1 and eax,1
jz .mousenotpressed jz .mousenotpressed
.mousepressed: .mousepressed:
@@ -613,7 +503,9 @@ pollMouse:
;********************************************************** ;**********************************************************
getMouseCol: getMouseCol:
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION ; get mouse position, window relative mov ebx,1 ; get mouse position, window relative
mov eax,MOS_SC_GETMOUSEPOSITION
int 0x40
movzx ebx,ax ; y clipping movzx ebx,ax ; y clipping
cmp ebx,GRIDY cmp ebx,GRIDY
@@ -647,15 +539,24 @@ getMouseCol:
; destroys : everything ; destroys : everything
;********************************************************** ;**********************************************************
isActiveApp: isActiveApp:
%define PROCINFO (ebp-MOS_PROCESSINFO_size)
enter MOS_PROCESSINFO_size,0
; get process information ; get process information
mcall SF_THREAD_INFO,procinfo,-1 mov eax,MOS_SC_GETPROCESSINFO
lea ebx,[ebp-MOS_PROCESSINFO_size]
mov ecx,-1
int 0x40
; set al to 1 if we are the active application ; set al to 1 if we are the active application
cmp ax,[procinfo+process_information.window_stack_position] cmp ax,[PROCINFO+MOS_PROCESSINFO.windowStackPos]
sete al sete al
;;;leave leave
ret ret
%undef PROCINFO
@@ -668,7 +569,8 @@ isActiveApp:
; destroys : everything ; destroys : everything
;********************************************************** ;**********************************************************
keyboardInput: keyboardInput:
mcall SF_GET_KEY ; get key mov eax,MOS_SC_GETKEY ; get key
int 0x40
or al,al ; key available ? or al,al ; key available ?
jnz .bye ; no -> bye jnz .bye ; no -> bye
cmp dword [playerinput],0 ; unprocessed input available ? cmp dword [playerinput],0 ; unprocessed input available ?
@@ -796,7 +698,7 @@ updatePlayerStatusText:
cmp dword [player1_type],0 cmp dword [player1_type],0
je .statustextok je .statustextok
mov esi,player1cpuprmpt mov esi,player1cpuprmpt
jmp .statustextok jmp short .statustextok
.player2: .player2:
mov esi,player2hmnprmpt mov esi,player2hmnprmpt
cmp dword [player2_type],0 cmp dword [player2_type],0
@@ -812,11 +714,196 @@ updatePlayerStatusText:
; initialized data ; initialized data
;********************************************************** ;**********************************************************
section .data
; ;
; window definition ; window definition
; ;
windowtitle db "C4",0 windowtitle db "C4",0
window WND WND_WIDTH, WND_HEIGHT, 0x14000000 or WND_WORKCOLOR, 0,0,windowtitle,0, WND_CENTER or WND_DEFAULT_GRABCOLOR or WND_DEFAULT_FRAMECOLOR or WND_DEFAULT_CAPTIONCOLOR window:
istruc WND
at WND.xposandsize, dd MOS_DWORD(0,WND_WIDTH)
at WND.yposandsize, dd MOS_DWORD(0,WND_HEIGHT)
at WND.workcolor, dd 0x14000000 | WND_WORKCOLOR
at WND.grabcolor, dd 0
at WND.framecolor, dd 0
at WND.caption, dd windowtitle
at WND.captioncolor, dd 0
at WND.flags, dd WND_CENTER | WND_DEFAULT_GRABCOLOR | WND_DEFAULT_FRAMECOLOR | WND_DEFAULT_CAPTIONCOLOR
iend
;
; button table
;
buttons:
istruc BUTTON ; new
at BUTTON.xposandsize
dd MOS_DWORD(BUTTON_NEW_X,BUTTON_NEW_WIDTH)
dd MOS_DWORD(BUTTON_NEW_Y,BUTTON_HEIGHT)
dd BT_NEW
dd BUTTON_COLOR_WORK
iend
istruc BUTTON ; player 1 down
at BUTTON.xposandsize
dd MOS_DWORD(BUTTON_PL1DN_X,BUTTON_SPIN_WIDTH)
dd MOS_DWORD(BUTTON_PL1DN_Y,BUTTON_HEIGHT)
dd BT_PLAYER1DN
dd BUTTON_COLOR_WORK
iend
istruc BUTTON ; player 1 up
at BUTTON.xposandsize
dd MOS_DWORD(BUTTON_PL1UP_X,BUTTON_SPIN_WIDTH)
dd MOS_DWORD(BUTTON_PL1UP_Y,BUTTON_HEIGHT)
dd BT_PLAYER1UP
dd BUTTON_COLOR_WORK
iend
istruc BUTTON ; player 2 down
at BUTTON.xposandsize
dd MOS_DWORD(BUTTON_PL2DN_X,BUTTON_SPIN_WIDTH)
dd MOS_DWORD(BUTTON_PL2DN_Y,BUTTON_HEIGHT)
dd BT_PLAYER2DN
dd BUTTON_COLOR_WORK
iend
istruc BUTTON ; player 2 up
at BUTTON.xposandsize
dd MOS_DWORD(BUTTON_PL2UP_X,BUTTON_SPIN_WIDTH)
dd MOS_DWORD(BUTTON_PL2UP_Y,BUTTON_HEIGHT)
dd BT_PLAYER2UP
dd BUTTON_COLOR_WORK
iend
NBUTTONS equ (($-buttons)/BUTTON_size)
;
; label table
;
%ifidn lang, 'it_IT'
newgame db "Nuova partita",0
%else
newgame db "New game",0
%endif
down db "<",0
up db ">",0
%ifidn lang, 'it_IT'
pl1 db "Giocatore 1:",0
pl2 db "Giocatore 2:",0
%else
pl1 db "Player 1:",0
pl2 db "Player 2:",0
%endif
%ifidn lang, 'it_IT'
playertypes:
db "Umano",0
PLAYERTYPELEN equ ($ - playertypes)
db "CPU 1 ",0
db "CPU 2 ",0
db "CPU 3 ",0
db "CPU 4 ",0
db "CPU 5 ",0
db "CPU 6 ",0
db "CPU 7 ",0
db "CPU 8 ",0
%else
playertypes:
db "Human ",0
PLAYERTYPELEN equ ($ - playertypes)
db "CPU level 1 ",0
db "CPU level 2 ",0
db "CPU level 3 ",0
db "CPU level 4 ",0
db "CPU level 5 ",0
db "CPU level 6 ",0
db "CPU level 7 ",0
db "CPU level 8 ",0
%endif
NPLAYERTYPES equ (($-playertypes)/PLAYERTYPELEN)
labels:
istruc LABEL ; new
at LABEL.position
dd MOS_DWORD(BUTTON_NEW_X+4,1+BUTTON_NEW_Y+(BUTTON_HEIGHT-8)/2)
dd newgame
dd LABEL_COLOR_WORKBUTTON
dd LABEL_BGCOLOR_TRANSPARENT
iend
istruc LABEL ; player 1 down
at LABEL.position
dd MOS_DWORD(BUTTON_PL1DN_X+(BUTTON_SPIN_WIDTH-4)/2,1+BUTTON_PL1DN_Y+(BUTTON_HEIGHT-8)/2)
dd down
dd LABEL_COLOR_WORKBUTTON
dd LABEL_BGCOLOR_TRANSPARENT
iend
istruc LABEL ; player 1 up
at LABEL.position
dd MOS_DWORD(1+BUTTON_PL1UP_X+(BUTTON_SPIN_WIDTH-4)/2,1+BUTTON_PL1UP_Y+(BUTTON_HEIGHT-8)/2)
dd up
dd LABEL_COLOR_WORKBUTTON
dd LABEL_BGCOLOR_TRANSPARENT
iend
istruc LABEL ; player 2 down
at LABEL.position
dd MOS_DWORD(BUTTON_PL2DN_X+(BUTTON_SPIN_WIDTH-4)/2,1+BUTTON_PL2DN_Y+(BUTTON_HEIGHT-8)/2)
dd down
dd LABEL_COLOR_WORKBUTTON
dd LABEL_BGCOLOR_TRANSPARENT
iend
istruc LABEL ; player 2 up
at LABEL.position
dd MOS_DWORD(1+BUTTON_PL2UP_X+(BUTTON_SPIN_WIDTH-4)/2,1+BUTTON_PL2UP_Y+(BUTTON_HEIGHT-8)/2)
dd up
dd LABEL_COLOR_WORKBUTTON
dd LABEL_BGCOLOR_TRANSPARENT
iend
istruc LABEL ; player 1
at LABEL.position
dd MOS_DWORD(LABEL_PL1_X,LABEL_PL1_Y)
dd pl1
dd MOS_RGB(255,255,255)
dd LABEL_BGCOLOR_TRANSPARENT
iend
istruc LABEL ; player 2
at LABEL.position
dd MOS_DWORD(LABEL_PL2_X,LABEL_PL2_Y)
dd pl2
dd MOS_RGB(255,255,255)
dd LABEL_BGCOLOR_TRANSPARENT
iend
statusbar: ; status bar
istruc LABEL
at LABEL.position
dd MOS_DWORD(LABEL_STATUS_X,LABEL_STATUS_Y)
dd 0
dd MOS_RGB(255,255,255)
dd LABEL_BGCOLOR_TRANSPARENT
iend
label_pl1type:
istruc LABEL
at LABEL.position
%ifidn lang, 'it_IT'
dd MOS_DWORD(LABEL_PL1TYPE_X + 18,LABEL_PL1TYPE_Y)
%else
dd MOS_DWORD(LABEL_PL1TYPE_X,LABEL_PL1TYPE_Y)
%endif
dd playertypes+PL1TYPE_INIT*PLAYERTYPELEN
dd MOS_RGB(255,255,255)
dd MOS_RGB(0,0,0)
iend
label_pl2type:
istruc LABEL
at LABEL.position
%ifidn lang, 'it_IT'
dd MOS_DWORD(LABEL_PL2TYPE_X + 18,LABEL_PL2TYPE_Y)
%else
dd MOS_DWORD(LABEL_PL2TYPE_X,LABEL_PL2TYPE_Y)
%endif
dd playertypes+PL2TYPE_INIT*PLAYERTYPELEN
dd MOS_RGB(255,255,255)
dd MOS_RGB(0,0,0)
iend
NLABELS equ (($-labels)/LABEL_size)
; player types ; player types
@@ -825,31 +912,23 @@ player2_type dd PL2TYPE_INIT
; status messages ; status messages
if lang eq it_IT %ifidn lang, 'it_IT'
player1hmnprmpt db "Turno del giocatore 1",0 player1hmnprmpt db "Turno del giocatore 1",0
player2hmnprmpt db "Turno del giocatore 2",0 player2hmnprmpt db "Turno del giocatore 2",0
player1cpuprmpt db "Attendi, giocatore 1 sta pensando...",0 player1cpuprmpt db "Attendi, giocatore 1 sta pensando...",0
player2cpuprmpt db "Attendi, giocatore 2 sta pensando...",0 player2cpuprmpt db "Attendi, giocatore 2 sta pensando...",0
itisadraw db "Pareggio",0 itisadraw db "Pareggio",0
player1wins db "Vince giocatore 1",0 player1wins db "Vince giocatore 1",0
player2wins db "Vince giocatore 2",0 player2wins db "Vince Giocatore 2",0
else if lang eq ru_RU %else
player1hmnprmpt db "<EFBFBD><EFBFBD>ப 1 ᤥ<><E1A4A5><EFBFBD><EFBFBD><EFBFBD>",0 player1hmnprmpt db "Make your move, player 1.",0
player2hmnprmpt db "<EFBFBD><EFBFBD>ப 2 ᤥ<><E1A4A5><EFBFBD><EFBFBD><EFBFBD>",0 player2hmnprmpt db "Make your move, player 2.",0
player1cpuprmpt db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ப 1 <20><EFBFBD><E3ACA0>......",0
player2cpuprmpt db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ப 2 <20><EFBFBD><E3ACA0>......",0
itisadraw db "<22><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>",0
player1wins db "<22><>ப 1 <20>먣ࠫ",0
player2wins db "<22><>ப 2 <20>먣ࠫ",0
else
player1hmnprmpt db "Make your move, player 1",0
player2hmnprmpt db "Make your move, player 2",0
player1cpuprmpt db "Player 1 is thinking, please wait...",0 player1cpuprmpt db "Player 1 is thinking, please wait...",0
player2cpuprmpt db "Player 2 is thinking, please wait...",0 player2cpuprmpt db "Player 2 is thinking, please wait...",0
itisadraw db "It's a draw",0 itisadraw db "It's a draw.",0
player1wins db "Player 1 wins",0 player1wins db "Player 1 wins.",0
player2wins db "Player 2 wins",0 player2wins db "Player 2 wins.",0
end if %endif
; pointer to ai player. future releases C4 might ; pointer to ai player. future releases C4 might
@@ -857,22 +936,29 @@ end if
aicode dd aiGetMove aicode dd aiGetMove
align 16 ; button images
i_end: redpcx: incbin "red.pcx"
sc system_colors REDPCXSIZE equ ($ - redpcx)
procinfo process_information bluepcx: incbin "blue.pcx"
rb 1024 BLUEPCXSIZE equ ($ - bluepcx)
align 16
stacktop:
; player input
; 0 : no input available
; 1..7 : column to drop stone into
playerinput rd 1
mouseinput rd 1
gameover rd 1
redstone rb STONESIZE*STONESIZE*3
bluestone rb STONESIZE*STONESIZE*3
mem:
;**********************************************************
; uninitialized data
;**********************************************************
section .bss
; player input
; 0 : no input available
; 1..7 : column to drop stone into
playerinput resd 1
mouseinput resd 1
gameover resd 1
redstone resb STONESIZE*STONESIZE*3
bluestone resb STONESIZE*STONESIZE*3
end:

305
programs/games/c4/mos.inc Normal file
View File

@@ -0,0 +1,305 @@
; mos.inc 0.0.2
; Copyright (c) 2002 Thomas Mathys
; killer@vantage.ch
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;
;
;
; revision history
; ----------------
;
; 10-04-2002 version 0.0.2
; - removed MOS_WNDCOLORS_SIZE and similar constants.
; while reading the docs i realized that NASM creates
; such symbols already itself...
; + macros: MOS_WAITEVENT, MOS_WAITEVENT_S, MOS_STARTREDRAW,
; MOS_STARTREDRAW_S, MOS_ENDREDRAW, MOS_ENDREDRAW_S,
; MOS_GETSCREENMAX, MOS_GETSCREENMAX_S, MOS_EXIT, MOS_EXIT_S
; + event bit masks
; + some syscall numbers
; + process info structure
;
; 08-??-2002 version 0.0.1
; first release
;
%ifndef _MOS_INC
%define _MOS_INC
;**********************************************************
; generates a menuetos 01 header
; takes 2-6 parameters:
;
; MOS_HEADER01 start,end[,appmem,esp,i_param,i_icon]
;**********************************************************
%macro MOS_HEADER01 2-6 0x100000,0x7fff0,0,0
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd %1 ; start of code
dd %2 ; image size
dd %3 ; application memory
dd %4 ; esp
dd %5 ; i_param
dd %6 ; i_icon
%endmacro
;**********************************************************
; MOS_DWORD
; packs 2 words into a double word
;**********************************************************
%define MOS_DWORD(hi,lo) ((((hi) & 0xffff) << 16) + ((lo) & 0xffff))
;**********************************************************
; MOS_RGB
; creates a menuet os compatible color (0x00RRGGBB)
;**********************************************************
%define MOS_RGB(r,g,b) ((((r) & 255) << 16) + (((g) & 255) << 8) + ((b) & 255))
;**********************************************************
; window color structure
;**********************************************************
struc MOS_WNDCOLORS
.frame: resd 1
.grab: resd 1
.grabButton: resd 1
.grabButtonText: resd 1
.grabText: resd 1
.work: resd 1
.workButton: resd 1
.workButtonText: resd 1
.workText: resd 1
.workGraphics: resd 1
endstruc
;**********************************************************
; process info structure
;**********************************************************
struc MOS_PROCESSINFO
.CPUUsage: resd 1 ; cpu usage
.windowStackPos: resw 1 ; process' position in windowing stack
.windowStackVal: resw 1 ; window stack value at ecx
.reserved1: resw 1
.processName: resb 12 ; process name
.memStart: resd 1 ; start of process memory
.memUsed: resd 1 ; memory used by the process
.pid: resd 1 ; process id
.reserved2: resb (1024-34)
endstruc
;**********************************************************
; system call numbers
;**********************************************************
MOS_SC_EXIT equ -1
MOS_SC_DEFINEWINDOW equ 0
MOS_SC_PUTPIXEL equ 1
MOS_SC_GETKEY equ 2
MOS_SC_GETSYSCLOCK equ 3
MOS_SC_WRITETEXT equ 4
MOS_SC_DELAY equ 5
MOS_SC_OPENFILEFLOPPY equ 6
MOS_SC_PUTIMAGE equ 7
MOS_SC_DEFINEBUTTON equ 8
MOS_SC_GETPROCESSINFO equ 9
MOS_SC_WAITEVENT equ 10
MOS_SC_CHECKEVENT equ 11
MOS_SC_REDRAWSTATUS equ 12
MOS_SC_DRAWBAR equ 13
MOS_SC_GETSCREENMAX equ 14
MOS_SC_SETBACKGROUND equ 15
MOS_SC_GETPRESSEDBUTTON equ 17
MOS_SC_SYSTEMSERVICE equ 18
MOS_SC_STARTPROGRAM equ 19
MOS_SC_MIDIINTERFACE equ 20
MOS_SC_DEVICESETUP equ 21
MOS_SC_WAITEVENTTIMEOUT equ 23
MOS_SC_CDAUDIO equ 24
MOS_SC_SB16MIXER1 equ 25
MOS_SC_GETDEVICESETUP equ 26
MOS_SC_WSS equ 27
MOS_SC_SB16MIXER2 equ 28
MOS_SC_GETDATE equ 29
MOS_SC_READHD equ 30
MOS_SC_STARTPROGRAMHD equ 31
MOS_SC_GETSCREENPIXEL equ 35
MOS_SC_GETMOUSEPOSITION equ 37
MOS_SC_DRAWLINE equ 38
MOS_SC_GETBACKGROUND equ 39
MOS_SC_SETEVENTMASK equ 40
MOS_SC_WRITENUMBER equ 47
MOS_SC_WINDOWPROPERTIES equ 48
;**********************************************************
; event numbers
;**********************************************************
MOS_EVT_NONE equ 0
MOS_EVT_REDRAW equ 1
MOS_EVT_KEY equ 2
MOS_EVT_BUTTON equ 3
;**********************************************************
; event bits
;**********************************************************
MOS_EVTBIT_REDRAW equ (1 << 0)
MOS_EVTBIT_KEY equ (1 << 1)
MOS_EVTBIT_BUTTON equ (1 << 2)
MOS_EVTBIT_ENDREQUEST equ (1 << 3)
MOS_EVTBIT_BGDRAW equ (1 << 4)
MOS_EVTBIT_MOUSECHANGE equ (1 << 5)
MOS_EVTBIT_IPCEVENT equ (1 << 6)
MOS_EVTBIT_IRQ0 equ (1 << 16)
MOS_EVTBIT_IRQ1 equ (1 << 17)
MOS_EVTBIT_IRQ2 equ (1 << 18)
MOS_EVTBIT_IRQ3 equ (1 << 19)
MOS_EVTBIT_IRQ4 equ (1 << 20)
MOS_EVTBIT_IRQ5 equ (1 << 21)
MOS_EVTBIT_IRQ6 equ (1 << 22)
MOS_EVTBIT_IRQ7 equ (1 << 23)
MOS_EVTBIT_IRQ8 equ (1 << 24)
MOS_EVTBIT_IRQ9 equ (1 << 25)
MOS_EVTBIT_IRQ10 equ (1 << 26)
MOS_EVTBIT_IRQ11 equ (1 << 27)
MOS_EVTBIT_IRQ12 equ (1 << 28)
MOS_EVTBIT_IRQ13 equ (1 << 29)
MOS_EVTBIT_IRQ14 equ (1 << 30)
MOS_EVTBIT_IRQ15 equ (1 << 31)
;**********************************************************
; exit application (syscall -1)
;**********************************************************
; exit application
%macro MOS_EXIT 0
mov eax,MOS_SC_EXIT
int 0x40
%endmacro
; exit application, smaller version
%macro MOS_EXIT_S 0
xor eax,eax
dec eax
int 0x40
%endmacro
;**********************************************************
; wait event stuff
; (MOS_SC_WAITEVENT, syscall 10)
;**********************************************************
; wait for event
; destroys : nothing
; returns : eax = event type
%macro MOS_WAITEVENT 0
mov eax,MOS_SC_WAITEVENT
int 0x40
%endmacro
; wait for event, smaller version
; destroys : flags
; returns : eax = event type
%macro MOS_WAITEVENT_S 0
xor eax,eax
mov al,MOS_SC_WAITEVENT
int 0x40
%endmacro
;**********************************************************
; window redraw status stuff
; (MOS_SC_REDRAWSTATUS, syscall 12)
;**********************************************************
MOS_RS_STARTREDRAW equ 1
MOS_RS_ENDREDRAW equ 2
; start window redraw
; destroys: eax,ebx
%macro MOS_STARTREDRAW 0
mov ebx,MOS_RS_STARTREDRAW
mov eax,MOS_SC_REDRAWSTATUS
int 0x40
%endmacro
; start window redraw, smaller version
; destroys: eax,ebx,flags
%macro MOS_STARTREDRAW_S 0
xor ebx,ebx
inc ebx
xor eax,eax
mov al,MOS_SC_REDRAWSTATUS
int 0x40
%endmacro
; end window redraw
; destroys: eax,ebx
%macro MOS_ENDREDRAW 0
mov ebx,MOS_RS_ENDREDRAW
mov eax,MOS_SC_REDRAWSTATUS
int 0x40
%endmacro
; end window redraw, smaller version
; destroys: eax,ebx,flags
%macro MOS_ENDREDRAW_S 0
xor ebx,ebx
mov bl,MOS_RS_ENDREDRAW
xor eax,eax
mov al,MOS_SC_REDRAWSTATUS
int 0x40
%endmacro
;**********************************************************
; get screen max stuff (syscall 14)
;**********************************************************
; get screen dimensions in eax
; destroys: nothing
%macro MOS_GETSCREENMAX 0
mov eax,MOS_SC_GETSCREENMAX
int 0x40
%endmacro
; get screen dimensions in eax, smaller version
; destroys: flags
%macro MOS_GETSCREENMAX_S 0
xor eax,eax
mov al,MOS_SC_GETSCREENMAX
int 0x40
%endmacro
%endif

View File

@@ -16,32 +16,38 @@
; along with this program; if not, write to the Free Software ; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
%ifndef _PCX_INC
%define _PCX_INC
;********************************************************** ;**********************************************************
; pcx header ; pcx header
;********************************************************** ;**********************************************************
PCXHEADER_SIZE equ 128 PCXHEADER_SIZE equ 128
struct PCXHEADER struc PCXHEADER
id rb 1 ; id, should be 10 .id: resb 1 ; id, should be 10
version rb 1 ; pcx version .version: resb 1 ; pcx version
encoding rb 1 ; 1 = rle .encoding: resb 1 ; 1 = rle
bpp rb 1 ; bits per pixel .bpp: resb 1 ; bits per pixel
xmin rw 1 ; image dimensions .xmin: resw 1 ; image dimensions
ymin rw 1 .ymin: resw 1
xmax rw 1 .xmax: resw 1
ymax rw 1 .ymax: resw 1
hdpi rw 1 ; horizontal resolution in dpi .hdpi: resw 1 ; horizontal resolution in dpi
vdpi rw 1 ; verttical resolution in dpi .vdpi: resw 1 ; verttical resolution in dpi
colormap rb 48 ; 16 color palette .colormap: resb 48 ; 16 color palette
reserved1 rb 1 .reserved1: resb 1
nplanes rb 1 ; # of color planes .nplanes: resb 1 ; # of color planes
bytesperline rw 1 ; # of bytes per scanline. always even .bytesperline: resw 1 ; # of bytes per scanline. always even
palinfo rw 1 ; 1 = color/bw, 2 = grayscale .palinfo: resw 1 ; 1 = color/bw, 2 = grayscale
hscreensize rw 1 ; horizontal screen size .hscreensize: resw 1 ; horizontal screen size
vscreensize rw 1 ; vertical screen size .vscreensize: resw 1 ; vertical screen size
reserved2 rb 54 .reserved2: resb 54
ends endstruc
section .text
@@ -92,7 +98,7 @@ loadPCX:
.decode: .decode:
lodsb ; read byte from input stream lodsb ; read byte from input stream
cmp al,192 ; encoded/unencoded byte ? cmp al,192 ; encoded/unencoded byte ?
jae .encoded jae short .encoded
lea edx,[eax*2+eax] ; read color values from lea edx,[eax*2+eax] ; read color values from
mov al,[ebx+edx+2] ; palette and store them mov al,[ebx+edx+2] ; palette and store them
stosb ; in the destination image stosb ; in the destination image
@@ -101,7 +107,7 @@ loadPCX:
mov al,[ebx+edx+0] mov al,[ebx+edx+0]
stosb stosb
dec ebp ; one less to go... dec ebp ; one less to go...
jmp .continue jmp short .continue
.encoded: .encoded:
and al,00111111b ; calc # of times to repeat and al,00111111b ; calc # of times to repeat
mov cl,al mov cl,al
@@ -121,8 +127,11 @@ loadPCX:
xor ah,ah ; reset ah to 0 ! xor ah,ah ; reset ah to 0 !
.continue: .continue:
or ebp,ebp ; all pixels decoded ? or ebp,ebp ; all pixels decoded ?
jnz .decode jnz short .decode
popfd popfd
popad popad
ret ret
%endif

View File

@@ -18,6 +18,12 @@
; along with C4; if not, write to the Free Software ; along with C4; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
%infdef _RANDOMAI_INC
%define _RANDOMAI_INC
section .text
;********************************************************** ;**********************************************************
; randomaiGetMove ; randomaiGetMove
@@ -41,3 +47,4 @@ randomaiGetMove
mov eax,edx ; return move mov eax,edx ; return move
ret ret
%endif

View File

@@ -18,6 +18,10 @@
; along with C4; if not, write to the Free Software ; along with C4; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
%ifndef _RNG_INC
%define _RNG_INC
section .data
; random seed ; random seed
@@ -25,6 +29,9 @@ seed dd 0
section .text
;********************************************************** ;**********************************************************
; randomize ; randomize
; initialize random number generator. ; initialize random number generator.
@@ -36,7 +43,8 @@ seed dd 0
;********************************************************** ;**********************************************************
randomize: randomize:
push eax push eax
mcall SF_GET_SYS_TIME mov eax,MOS_SC_GETSYSCLOCK
int 0x40
mov [seed],eax mov [seed],eax
pop eax pop eax
ret ret
@@ -64,3 +72,5 @@ rand:
pop edx pop edx
popfd popfd
ret ret
%endif

View File

@@ -16,52 +16,63 @@
; along with this program; if not, write to the Free Software ; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
%ifndef _WINDOWS_INC
%define _WINDOWS_INC
WND_CENTER equ (1 shl 0)
WND_DEFAULT_WORKCOLOR equ (1 shl 1) WND_CENTER equ (1 << 0)
WND_DEFAULT_GRABCOLOR equ (1 shl 2) WND_DEFAULT_WORKCOLOR equ (1 << 1)
WND_DEFAULT_FRAMECOLOR equ (1 shl 3) WND_DEFAULT_GRABCOLOR equ (1 << 2)
WND_DEFAULT_CAPTIONCOLOR equ (1 shl 4) WND_DEFAULT_FRAMECOLOR equ (1 << 3)
WND_DEFAULT_CAPTIONCOLOR equ (1 << 4)
WND_DEFAULT_COLORS equ (WND_DEFAULT_WORKCOLOR | WND_DEFAULT_GRABCOLOR | WND_DEFAULT_FRAMECOLOR | WND_DEFAULT_CAPTIONCOLOR) WND_DEFAULT_COLORS equ (WND_DEFAULT_WORKCOLOR | WND_DEFAULT_GRABCOLOR | WND_DEFAULT_FRAMECOLOR | WND_DEFAULT_CAPTIONCOLOR)
struct WND struc WND
xposandsize rd 1 ; x position and size (like syscall) .xposandsize resd 1 ; x position and size (like syscall)
yposandsize rd 1 ; y position and size (like syscall) .yposandsize resd 1 ; y position and size (like syscall)
workcolor rd 1 ; work area color (like syscall) .workcolor resd 1 ; work area color (like syscall)
grabcolor rd 1 ; grab bar color (like syscall) .grabcolor resd 1 ; grab bar color (like syscall)
framecolor rd 1 ; frame color (like syscall) .framecolor resd 1 ; frame color (like syscall)
caption rd 1 ; pointer to caption (zero terminated) .caption resd 1 ; pointer to caption (zero terminated)
; can be zero, if no caption is desired. ; can be zero, if no caption is desired.
captioncolor rd 1 ; caption color .captioncolor resd 1 ; caption color
flags rd 1 ; combination of WND_xxx flags, or zero. .flags resd 1 ; combination of WND_xxx flags, or zero.
ends endstruc
USE_SYSTEM_COLORS equ 0 ;0 or 1
BUTTON_COLOR_WORK equ 0x505050
struct BUTTON BUTTON_COLOR_GRAB equ 0x01000000
xposandsize rd 1 ; x position and size (like syscall) BUTTON_COLOR_WORK equ 0x02000000
yposandsize rd 1 ; y position and size (like syscall)
id rd 1 ; button id
color rd 1 ; button color. can be a real color struc BUTTON
.xposandsize resd 1 ; x position and size (like syscall)
.yposandsize resd 1 ; y position and size (like syscall)
.id resd 1 ; button id
.color resd 1 ; button color. can be a real color
; or one of the BUTTON_COLOR_xxx constants ; or one of the BUTTON_COLOR_xxx constants
ends endstruc
LABEL_COLOR_WORKBUTTON equ 0xffffff ; use work button text default color LABEL_COLOR_GRABBUTTON equ 0x01000000 ; use grab button text default color
LABEL_COLOR_GRAB equ 0x02000000 ; use grab text default color
LABEL_COLOR_WORKBUTTON equ 0x03000000 ; use work button text default color
LABEL_COLOR_WORK equ 0x04000000 ; use work text default color
LABEL_BGCOLOR_TRANSPARENT equ 0x01000000 ; transparent LABEL_BGCOLOR_TRANSPARENT equ 0x01000000 ; transparent
LABEL_BGCOLOR_WORK equ 0x02000000 ; use work area color
struct LABEL struc LABEL
position rd 1 ; position, x in upper word, y in lower word .position resd 1 ; position, x in upper word, y in lower word
caption rd 1 ; pointer to caption (zero terminated) .caption resd 1 ; pointer to caption (zero terminated)
; if this is field is zero, the label will ; if this is field is zero, the label will
; not be drawn. ; not be drawn.
color rd 1 ; text color, or a LABEL_COLOR_xxx constant .color resd 1 ; text color, or a LABEL_COLOR_xxx constant
bgcolor rd 1 ; background color, or a LABEL_BGCOLOR_xxx constant .bgcolor resd 1 ; background color, or a LABEL_BGCOLOR_xxx constant
ends endstruc
section .text
;*********************************************************** ;***********************************************************
@@ -76,47 +87,61 @@ ends
;*********************************************************** ;***********************************************************
drawWindow: drawWindow:
%define WNDCOLORS ebp-MOS_WNDCOLORS_size
enter MOS_WNDCOLORS_size,0
pushfd pushfd
pushad pushad
; get default window colors ; get default window colors
mcall SF_STYLE_SETTINGS,3,sc,sizeof.system_colors mov ebx,3
lea ecx,[WNDCOLORS]
mov edx,MOS_WNDCOLORS_size
mov eax,MOS_SC_WINDOWPROPERTIES
int 0x40
; ;
; window position ; window position
; ;
test dword [edi + WND.flags],WND_CENTER ; center window ? test dword [edi + WND.flags],WND_CENTER ; center window ?
jnz .center jnz short .center
mov ebx,[edi + WND.xposandsize] ; nope -> just load dimensions mov ebx,[edi + WND.xposandsize] ; nope -> just load dimensions
mov ecx,[edi + WND.yposandsize] mov ecx,[edi + WND.yposandsize]
jmp .positionok jmp short .positionok
.center: ; so let's center this window... .center: ; so let's center this window...
mcall SF_GET_SCREEN_SIZE ; get screen dimensions MOS_GETSCREENMAX ; get screen dimensions
mov ebx,eax ; xpos = (screenx-width)/2 mov ebx,eax ; xpos = (screenx-width)/2
shr ebx,16 shr ebx,16
sub bx,word[edi + WND.xposandsize] sub bx,[edi + WND.xposandsize]
jns .xok jns short .xok
xor ebx,ebx xor ebx,ebx
.xok: .xok:
shl ebx,15 ; / 2, move result to hi-word shl ebx,15 ; / 2, move result to hi-word
mov bx,word[edi + WND.xposandsize] mov bx,[edi + WND.xposandsize]
movzx ecx,ax ; same for ypos movzx ecx,ax ; same for ypos
sub cx,word[edi + WND.yposandsize] sub cx,[edi + WND.yposandsize]
jns .yok jns short .yok
xor ecx,ecx xor ecx,ecx
.yok: .yok:
shl ecx,15 shl ecx,15
mov cx,word[edi + WND.yposandsize] mov cx,[edi + WND.yposandsize]
.positionok: ; ebx/ecx contain dimensions .positionok: ; ebx/ecx contain dimensions
push edi
; define window ; define window
mov eax,MOS_SC_DEFINEWINDOW
mov edx,[edi + WND.workcolor] mov edx,[edi + WND.workcolor]
mov edi,windowtitle mov edi,windowtitle
mcall SF_CREATE_WINDOW int 0x40
pop edi
popad popad
popfd popfd
leave
ret ret
%undef WNDCOLORS
;*********************************************************** ;***********************************************************
@@ -128,40 +153,53 @@ drawWindow:
; destroys: nothing ; destroys: nothing
; notes: you must call begin redraw/end redraw yourself ; notes: you must call begin redraw/end redraw yourself
;*********************************************************** ;***********************************************************
align 4
drawButtons: drawButtons:
%define WNDCOLORS ebp-MOS_WNDCOLORS_size
or ecx,ecx or ecx,ecx
jnz .ok jnz short .ok
ret ret
.ok: .ok:
enter MOS_WNDCOLORS_size,0
pushfd pushfd
pushad pushad
; get default window colors ; get default window colors
if USE_SYSTEM_COLORS eq 1
push ecx push ecx
mcall SF_STYLE_SETTINGS,3,sc,sizeof.system_colors mov ebx,3
lea ecx,[WNDCOLORS]
mov edx,MOS_WNDCOLORS_size
mov eax,MOS_SC_WINDOWPROPERTIES
int 0x40
pop ecx pop ecx
end if
align 4
.drawall: .drawall:
push ecx push ecx
mov ebx,[edi + BUTTON.xposandsize] mov ebx,[edi + BUTTON.xposandsize]
mov ecx,[edi + BUTTON.yposandsize] mov ecx,[edi + BUTTON.yposandsize]
mov edx,[edi + BUTTON.id] mov edx,[edi + BUTTON.id]
if USE_SYSTEM_COLORS eq 1 mov esi,[edi + BUTTON.color]
mov esi,[sc.work_button] ; use a system color cmp esi,BUTTON_COLOR_GRAB ; use a default color ?
else jne .ok1
mov esi,[edi + BUTTON.color] ; use a default color mov esi,[WNDCOLORS + MOS_WNDCOLORS.grabButton]
end if .ok1:
mcall SF_DEFINE_BUTTON cmp esi,BUTTON_COLOR_WORK
add edi,sizeof.BUTTON jne .ok2
mov esi,[WNDCOLORS + MOS_WNDCOLORS.workButton]
.ok2:
mov eax,MOS_SC_DEFINEBUTTON
int 0x40
add edi,BUTTON_size
pop ecx pop ecx
loop .drawall loop .drawall
popad popad
popfd popfd
leave
ret ret
%undef WNDCOLORS
;*********************************************************** ;***********************************************************
@@ -172,27 +210,33 @@ align 4
; output: nothing ; output: nothing
; destroys: nothing ; destroys: nothing
;*********************************************************** ;***********************************************************
align 4
drawLabels: drawLabels:
%define WNDCOLORS ebp-MOS_WNDCOLORS_size
or ecx,ecx or ecx,ecx
jnz .ok jnz short .ok
ret ret
.ok: .ok:
enter MOS_WNDCOLORS_size,0
pushfd pushfd
pushad pushad
; get default window colors ; get default window colors
if USE_SYSTEM_COLORS eq 1
push ecx push ecx
mcall SF_STYLE_SETTINGS,3,sc,sizeof.system_colors mov ebx,3
lea ecx,[WNDCOLORS]
mov edx,MOS_WNDCOLORS_size
mov eax,MOS_SC_WINDOWPROPERTIES
int 0x40
pop ecx pop ecx
end if
.drawall: .drawall:
push ecx push ecx
cmp dword [edi + LABEL.caption],0 cmp dword [edi + LABEL.caption],0
jne .notnull jne short .notnull
jmp .next jmp .next
.notnull: .notnull:
@@ -218,27 +262,40 @@ drawLabels:
mov ecx,[edi + LABEL.position] ; ecx = ystart/height mov ecx,[edi + LABEL.position] ; ecx = ystart/height
shl ecx,16 shl ecx,16
mov cx,8 mov cx,8
if USE_SYSTEM_COLORS eq 1
mov edx,[sc.work]
else
mov edx,[edi + LABEL.bgcolor] mov edx,[edi + LABEL.bgcolor]
end if cmp edx,LABEL_BGCOLOR_WORK
mcall SF_DRAW_RECT jne short .bgcolorok
mov edx,[WNDCOLORS + MOS_WNDCOLORS.work]
.bgcolorok:
mov eax,MOS_SC_DRAWBAR
int 0x40
.clearok: .clearok:
; draw label ; draw label
mov ebx,[edi + LABEL.position] ; ebx = label position mov ebx,[edi + LABEL.position] ; ebx = label position
mov edx,[edi + LABEL.caption] ; edx -> caption mov edx,[edi + LABEL.caption] ; edx -> caption
if USE_SYSTEM_COLORS eq 1
mov ecx,[sc.work_button_text]
else
mov ecx,[edi + LABEL.color] ; ecx = color mov ecx,[edi + LABEL.color] ; ecx = color
end if cmp ecx,LABEL_COLOR_GRABBUTTON
mcall SF_DRAW_TEXT jne short .ok1
mov ecx,[WNDCOLORS + MOS_WNDCOLORS.grabButtonText]
.ok1:
cmp ecx,LABEL_COLOR_GRAB
jne short .ok2
mov ecx,[WNDCOLORS + MOS_WNDCOLORS.grabText]
.ok2:
cmp ecx,LABEL_COLOR_WORKBUTTON
jne short .ok3
mov ecx,[WNDCOLORS + MOS_WNDCOLORS.workButtonText]
.ok3:
cmp ecx,LABEL_COLOR_WORK
jne short .ok4
mov ecx,[WNDCOLORS + MOS_WNDCOLORS.workText]
.ok4:
mov eax,MOS_SC_WRITETEXT
int 0x40
.next: .next:
add edi,sizeof.LABEL ; next label add edi,LABEL_size ; next label
pop ecx pop ecx
dec ecx dec ecx
jz .done jz .done
@@ -247,5 +304,9 @@ drawLabels:
popad popad
popfd popfd
leave
ret ret
%undef WNDCOLORS
%endif

View File

@@ -1,510 +0,0 @@
; flat assembler version 1.73
; Copyright (c) 1999-2024, Tomasz Grysztar.
; All rights reserved.
; Macroinstructions for HLL-style conditional operations
macro .if [arg]
{
common
__IF equ
local ..endif
__ENDIF equ ..endif
local ..else
__ELSE equ ..else
JNCOND __ELSE,arg
}
macro .else
{
jmp __ENDIF
__ELSE:
restore __IF
__IF equ ,
}
macro .elseif [arg]
{
common
jmp __ENDIF
__ELSE:
restore __ELSE
local ..else
__ELSE equ ..else
JNCOND __ELSE,arg
}
macro .endif
{
if __IF eq
__ELSE:
end if
__ENDIF:
restore __ELSE
restore __ENDIF
restore __IF
}
macro .while [arg]
{
common
local ..while
__WHILE equ ..while
local ..endw
__ENDW equ ..endw
__WHILE:
JNCOND __ENDW,arg
}
macro .endw
{
jmp __WHILE
__ENDW:
restore __ENDW
restore __WHILE
}
macro .repeat
{
local ..repeat
__REPEAT equ ..repeat
__REPEAT:
}
macro .until [arg]
{
common
JNCOND __REPEAT,arg
restore __REPEAT
}
jnne equ je
jnna equ ja
jnnb equ jb
jnng equ jg
jnnl equ jl
jnnae equ jae
jnnbe equ jbe
jnnge equ jge
jnnle equ jle
macro JNCOND label,v1,c,v2
{
match any,c
\{
cmp v1,v2
jn\#c label
\}
match ,c
\{
PARSECOND parsed@cond,v1
match cond,parsed@cond \\{ JNCONDEXPR label,cond \\}
\}
}
gt equ >
lt equ <
macro PARSECOND parsed,cond
{
define parsed
define neg@cond
define status@cond
define nest@cond
irps symb,cond
\{
define symb@cond symb
match >,symb
\\{
define symb@cond gt
\\}
match <,symb
\\{
define symb@cond lt
\\}
current@cond equ status@cond
match ,current@cond
\\{
match ~,symb
\\\{
neg@cond equ neg@cond ~
match ~~,neg@cond
\\\\{
define neg@cond
\\\\}
define symb@cond
\\\}
match (,symb
\\\{
parsed equ parsed neg@cond,<
define nest@cond +
define symb@cond
define neg@cond
\\\}
match any,symb@cond
\\\{
parsed equ parsed neg@cond,symb@cond
define status@cond +
\\\}
\\}
match status,current@cond
\\{
match &,symb
\\\{
parsed equ parsed,&,
define status@cond
define symb@cond
define neg@cond
\\\}
match |,symb
\\\{
parsed equ parsed,|,
define status@cond
define symb@cond
define neg@cond
\\\}
match (,symb
\\\{
define nest@cond (
\\\}
match ),symb
\\\{
match +,nest@cond
\\\\{
parsed equ parsed>
define symb@cond
\\\\}
restore nest@cond
\\\}
match any,symb@cond
\\\{
parsed equ parsed symb@cond
\\\}
\\}
\}
}
macro define_JNCONDEXPR
{
macro JNCONDEXPR elabel,[mod,cond,op]
\{
\common
\local ..t,..f
define t@cond ..t
define f@cond ..f
\forward
match ,op
\\{
match ,mod \\\{ JNCONDEL elabel,<cond> \\\}
match ~,mod \\\{ JCONDEL elabel,<cond> \\\}
\\}
match &:flabel:tlabel, op:f@cond:t@cond
\\{
match ,mod \\\{ JNCONDEL flabel,<cond> \\\}
match ~,mod \\\{ JCONDEL flabel,<cond> \\\}
tlabel:
\\local ..tnew
restore t@cond
define t@cond ..tnew
\\}
match |:flabel:tlabel, op:f@cond:t@cond
\\{
match ,mod \\\{ JCONDEL tlabel,<cond> \\\}
match ~,mod \\\{ JNCONDEL tlabel,<cond> \\\}
flabel:
\\local ..fnew
restore f@cond
define f@cond ..fnew
\\}
\common
label f@cond at elabel
t@cond:
restore t@cond
restore f@cond
\}
}
macro define_JCONDEXPR
{
macro JCONDEXPR elabel,[mod,cond,op]
\{
\common
\local ..t,..f
define t@cond ..t
define f@cond ..f
\forward
match ,op
\\{
match ,mod \\\{ JCONDEL elabel,<cond> \\\}
match ~,mod \\\{ JNCONDEL elabel,<cond> \\\}
\\}
match |:flabel:tlabel, op:f@cond:t@cond
\\{
match ,mod \\\{ JCONDEL flabel,<cond> \\\}
match ~,mod \\\{ JNCONDEL flabel,<cond> \\\}
tlabel:
\\local ..tnew
restore t@cond
define t@cond ..tnew
\\}
match &:flabel:tlabel, op:f@cond:t@cond
\\{
match ,mod \\\{ JNCONDEL tlabel,<cond> \\\}
match ~,mod \\\{ JCONDEL tlabel,<cond> \\\}
flabel:
\\local ..fnew
restore f@cond
define f@cond ..fnew
\\}
\common
label f@cond at elabel
t@cond:
restore t@cond
restore f@cond
\}
}
macro define_JNCONDEL
{
macro JNCONDEL label,cond
\{
\local COND
match car=,cdr,:cond
\\{
define_JNCONDEXPR
define_JCONDEXPR
define_JCONDEL
define_JNCONDEL
JNCONDEXPR label,cond
purge JNCONDEXPR,JCONDEXPR,JCONDEL,JNCONDEL
define COND
\\}
match c,cond ; replace gt and lt
\\{
match =COND =signed v1>==v2, COND c
\\\{
cmp v1,v2
jl label
define COND
\\\}
match =COND =signed v1<==v2, COND c
\\\{
cmp v1,v2
jg label
define COND
\\\}
match =COND v1>==v2, COND c
\\\{
cmp v1,v2
jb label
define COND
\\\}
match =COND v1<==v2, COND c
\\\{
cmp v1,v2
ja label
define COND
\\\}
match =COND v1==v2, COND c
\\\{
cmp v1,v2
jne label
define COND
\\\}
match =COND v1<>v2, COND c
\\\{
cmp v1,v2
je label
define COND
\\\}
match =COND =signed v1>v2, COND c
\\\{
cmp v1,v2
jle label
define COND
\\\}
match =COND =signed v1<v2, COND c
\\\{
cmp v1,v2
jge label
define COND
\\\}
match =COND v1>v2, COND c
\\\{
cmp v1,v2
jbe label
define COND
\\\}
match =COND v1<v2, COND c
\\\{
cmp v1,v2
jae label
define COND
\\\}
match =COND =ZERO?, COND c
\\\{
jnz label
define COND
\\\}
match =COND =CARRY?, COND c
\\\{
jnc label
define COND
\\\}
match =COND =OVERFLOW?, COND c
\\\{
jno label
define COND
\\\}
match =COND =SIGN?, COND c
\\\{
jns label
define COND
\\\}
match =COND =PARITY?, COND c
\\\{
jnp label
define COND
\\\}
match =COND v, COND c
\\\{
if v eqtype 0
if ~ v
jmp label
end if
else if v eqtype eax
test v,v
jz label
else
cmp v,0
je label
end if
\\\}
\\}
\}
}
macro define_JCONDEL
{
macro JCONDEL label,cond
\{
\local COND
match car=,cdr,:cond
\\{
define_JNCONDEXPR
define_JCONDEXPR
define_JCONDEL
define_JNCONDEL
JCONDEXPR label,cond
purge JNCONDEXPR,JCONDEXPR,JCONDEL,JNCONDEL
define COND
\\}
match c,cond ; replace gt and lt
\\{
match =COND =signed v1>==v2, COND c
\\\{
cmp v1,v2
jge label
define COND
\\\}
match =COND =signed v1<==v2, COND c
\\\{
cmp v1,v2
jle label
define COND
\\\}
match =COND v1>==v2, COND c
\\\{
cmp v1,v2
jae label
define COND
\\\}
match =COND v1<==v2, COND c
\\\{
cmp v1,v2
jbe label
define COND
\\\}
match =COND v1==v2, COND c
\\\{
cmp v1,v2
je label
define COND
\\\}
match =COND v1<>v2, COND c
\\\{
cmp v1,v2
jne label
define COND
\\\}
match =COND =signed v1>v2, COND c
\\\{
cmp v1,v2
jg label
define COND
\\\}
match =COND =signed v1<v2, COND c
\\\{
cmp v1,v2
jl label
define COND
\\\}
match =COND v1>v2, COND c
\\\{
cmp v1,v2
ja label
define COND
\\\}
match =COND v1<v2, COND c
\\\{
cmp v1,v2
jb label
define COND
\\\}
match =COND =ZERO?, COND c
\\\{
jz label
define COND
\\\}
match =COND =CARRY?, COND c
\\\{
jc label
define COND
\\\}
match =COND =OVERFLOW?, COND c
\\\{
jo label
define COND
\\\}
match =COND =SIGN?, COND c
\\\{
js label
define COND
\\\}
match =COND =PARITY?, COND c
\\\{
jp label
define COND
\\\}
match =COND v, COND c
\\\{
if v eqtype 0
if v
jmp label
end if
else if v eqtype eax
test v,v
jnz label
else
cmp v,0
jne label
end if
\\\}
\\}
\}
}
define_JNCONDEXPR
define_JCONDEXPR
define_JNCONDEL
define_JCONDEL

View File

@@ -1,2 +1,2 @@
if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_NASM") ~= "" then return end
tup.rule("fillscr.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "fillscr") tup.rule("fillscr.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "fillscr")

View File

@@ -1,3 +0,0 @@
@fasm.exe -m 16384 fillscr.asm fillscr.kex
@kpack fillscr.kex
pause

View File

@@ -1,29 +1,28 @@
; to compile: nasm -f bin fillscr.asm -o fillscr ;
; to generate random colors use "fillscr rnd" ; ; to generate random colors use "fillscr rnd" ;
; otherwise use "filscr r,g,b, r,g,b, r,g,b,..." ; ; otherwise use "filscr r,g,b, r,g,b, r,g,b,..." ;
use32 ORG 0
org 0 BITS 32
db 'MENUET01'
version dd 1
dd program.start
dd program.end
dd program.memory
dd program.stack
dd program.params
dd 0
; ---------------------------- ; ; ---------------------------- ;
points equ END
include '../../macros.inc' POINTS_SIZE equ 108
include '../../KOSfuncs.inc' PARAMS_SIZE equ 256
; ---------------------------- ;
MENUET01 db 'MENUET01'
version dd 1
program.start dd START
program.end dd END
program.memory dd END + POINTS_SIZE + PARAMS_SIZE
program.stack dd 0
program.params dd END + POINTS_SIZE
program.path dd 0
; ---------------------------- ; ; ---------------------------- ;
POINTS_SIZE = 108
points_count dd 0 points_count dd 0
rnd dd 0 rnd dd 0
; ---------------------------- ; ; ---------------------------- ;
align 4 START:
program.start:
mov edi, points mov edi, points
mov esi, program.params mov esi, [program.params]
cmp [esi], dword "rnd" cmp [esi], dword "rnd"
jne .not_rnd jne .not_rnd
mov [points_count], dword POINTS_SIZE / 3 mov [points_count], dword POINTS_SIZE / 3
@@ -126,29 +125,32 @@ program.start:
@@: @@:
add edx, 2 add edx, 2
sub eax, edx sub eax, edx
jnle @b jnle @@
sbb edx, -1 sbb edx, -1
shr edx, 1 shr edx, 1
; set width, height ; set width, height
mov eax, 15
mov ebx, 1
mov ecx, edx mov ecx, edx
mcall SF_BACKGROUND_SET,SSF_SIZE_BG int 64
; set "stretch" ; set "stretch"
mcall ,SSF_MODE_BG ; mov eax, 15
mov ebx, 4
mov ecx, 2
int 64
; put pixels ; put pixels
; mov eax, 15
mov ebx, 5
mov ecx, points ; BBGGRRBBGGRR...
xor edx, edx xor edx, edx
mov esi, [points_count] ; size of data = count * 3 mov esi, [points_count] ; size of data = count * 3
lea esi, [esi * 2 + esi] lea esi, [esi * 2 + esi]
mcall ,SSF_IMAGE_BG, points ; BBGGRRBBGGRR... int 64
; refresh screen ; refresh screen
mcall ,SSF_REDRAW_BG ; mov eax, 15
mov ebx, 3
int 64
; thread terminate ; thread terminate
mcall SF_TERMINATE_PROCESS mov eax, -1
int 64
align 4 END:
program.end:
points rb POINTS_SIZE
program.params rb 256
rb 256
align 16
program.stack:
program.memory:

View File

@@ -0,0 +1,2 @@
nasm -f bin fillscr.asm -o fillscr
pause

View File

@@ -1,21 +1,11 @@
; Timer with three buttons ; ; Timer with three buttons ;
; %define lang "ru_RU" ; %define lang "ru_RU"
; %define lang "it_IT" ; %define lang "it_IT"
use32 ORG 0
org 0 BITS 32
db 'MENUET01'
version dd 1
dd program.start
dd program.end
dd program.memory
dd program.stack
dd 0,0
include '../../macros.inc'
include '../../proc32.inc'
include '../../KOSfuncs.inc'
include 'lang.inc'
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
STACK_SIZE equ 256
BUTTON_START equ 2 BUTTON_START equ 2
BUTTON_PAUSE equ 3 BUTTON_PAUSE equ 3
BUTTON_RESET equ 4 BUTTON_RESET equ 4
@@ -29,24 +19,33 @@ CHAR_WIDTH equ 6
CHAR2_WIDTH equ 8 CHAR2_WIDTH equ 8
CHAR_HEIGHT equ 9 CHAR_HEIGHT equ 9
BUTTON_START_WIDTH = (BUTTON_PADDING * 2) + (sz_start.end - sz_start) * CHAR_WIDTH BUTTON_START_WIDTH equ (BUTTON_PADDING * 2) + (sz_start.end - sz_start) * CHAR_WIDTH
BUTTON_PAUSE_WIDTH = (BUTTON_PADDING * 2) + (sz_pause.end - sz_pause) * CHAR_WIDTH BUTTON_PAUSE_WIDTH equ (BUTTON_PADDING * 2) + (sz_pause.end - sz_pause) * CHAR_WIDTH
BUTTON_RESET_WIDTH = (BUTTON_PADDING * 2) + (sz_reset.end - sz_reset) * CHAR_WIDTH BUTTON_RESET_WIDTH equ (BUTTON_PADDING * 2) + (sz_reset.end - sz_reset) * CHAR_WIDTH
BUTTON_HEIGHT = (BUTTON_PADDING * 2) + CHAR_HEIGHT + 1 BUTTON_HEIGHT equ (BUTTON_PADDING * 2) + CHAR_HEIGHT + 1
WINDOW_WIDTH = (BORDER_SIZE * 2) + (MARGIN * 2) + (BUTTON_MARGIN * 2) + (BUTTON_START_WIDTH + BUTTON_PAUSE_WIDTH + BUTTON_RESET_WIDTH) WINDOW_WIDTH equ (BORDER_SIZE * 2) + (MARGIN * 2) + (BUTTON_MARGIN * 2) + (BUTTON_START_WIDTH + BUTTON_PAUSE_WIDTH + BUTTON_RESET_WIDTH)
TIME_AREA_WIDTH = (CHAR2_WIDTH * 8) ; HH MM SS TIME_AREA_WIDTH equ (CHAR2_WIDTH * 8) ; HH MM SS
TIME_AREA_LEFT = (WINDOW_WIDTH - BORDER_SIZE * 2 - TIME_AREA_WIDTH) / 2 TIME_AREA_LEFT equ (WINDOW_WIDTH - BORDER_SIZE * 2 - TIME_AREA_WIDTH) / 2
TIME_AREA_TOP = MARGIN + 1 TIME_AREA_TOP equ MARGIN + 1
TEXT_ON_BUTTONS_TOP = (MARGIN + CHAR_HEIGHT + MARGIN + BUTTON_PADDING) + 1 TEXT_ON_BUTTONS_TOP equ (MARGIN + CHAR_HEIGHT + MARGIN + BUTTON_PADDING) + 1
BUTTON_START_BACK_COLOR equ 0x880000 BUTTON_START_BACK_COLOR equ 0x880000
BUTTON_PAUSE_BACK_COLOR equ 0x008800 BUTTON_PAUSE_BACK_COLOR equ 0x008800
BUTTON_RESET_BACK_COLOR equ 0x000088 BUTTON_RESET_BACK_COLOR equ 0x000088
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
MENUET01 db 'MENUET01'
version dd 1
program.start dd START
program.end dd END
program.memory dd END + STACK_SIZE
program.stack dd END + STACK_SIZE
program.params dd 0
program.path dd 0
; ---------------------------------------------------------------------------- ;
screen: screen:
.height dw 0 .height dw 0
.width dw 0 .width dw 0
@@ -57,7 +56,17 @@ window:
.width dd WINDOW_WIDTH .width dd WINDOW_WIDTH
.height dd 0 .height dd 0
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
sc system_colors sc:
.frames dd 0
.grab dd 0
.work_dark dd 0
.work_light dd 0
.grab_text dd 0
.work dd 0
.work_button dd 0
.work_button_text dd 0
.work_text dd 0
.work_graph dd 0
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
timer_ticks dd 0 timer_ticks dd 0
last_timer_ticks dd 0 last_timer_ticks dd 0
@@ -79,16 +88,16 @@ ButtonEvents:
.pause dd EmptyProc ; at start Pause must not work .pause dd EmptyProc ; at start Pause must not work
.reset dd On_ButtonReset .reset dd On_ButtonReset
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
if lang eq ru_RU %ifidn lang, "ru_RU"
sz_timer db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",0 sz_timer db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",0
sz_start: db "<22><><EFBFBD><EFBFBD><EFBFBD>" sz_start: db "<22><><EFBFBD><EFBFBD><EFBFBD>"
.end: db 0 .end: db 0
sz_pause: db "<22><>" sz_pause: db "<22><><EFBFBD><EFBFBD><EFBFBD>"
.end: db 0 .end: db 0
sz_reset: db "<22><><EFBFBD><EFBFBD><EFBFBD>" sz_reset: db "<22><><EFBFBD><EFBFBD><EFBFBD>"
.end: db 0 .end: db 0
else if lang eq it_IT %elifidn lang, "it_IT"
sz_timer db "Timer",0 sz_timer db "Timer",0
sz_start: db "lancio" sz_start: db "lancio"
@@ -97,7 +106,7 @@ else if lang eq it_IT
.end: db 0 .end: db 0
sz_reset: db "reset" sz_reset: db "reset"
.end: db 0 .end: db 0
else %else
sz_timer db "Timer",0 sz_timer db "Timer",0
sz_start: db "start" sz_start: db "start"
@@ -106,12 +115,13 @@ else
.end: db 0 .end: db 0
sz_reset: db "reset" sz_reset: db "reset"
.end: db 0 .end: db 0
end if %endif
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
align 4 START:
program.start:
; get.screen.size ; get.screen.size
mcall SF_GET_GRAPHICAL_PARAMS,SSF_SCREEN_SIZE mov eax, 61
mov ebx, 1
int 64
mov [screen], eax mov [screen], eax
movzx eax, word[screen.width] movzx eax, word[screen.width]
@@ -120,7 +130,9 @@ program.start:
mov [window.left], eax mov [window.left], eax
; skin.height ; skin.height
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT mov eax, 48
mov ebx, 4
int 64
add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT
mov [window.height], eax mov [window.height], eax
@@ -132,26 +144,33 @@ program.start:
call On_Redraw call On_Redraw
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
wait.event: wait.event:
mcall SF_WAIT_EVENT_TIMEOUT, 50 mov eax, 23
call dword[eax * 4 + Events] mov ebx, 50
int 64
call [eax * 4 + Events]
jmp wait.event jmp wait.event
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_KeyPress: On_KeyPress:
mcall SF_GET_KEY mov eax, 2
int 64
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_ButtonPress: On_ButtonPress:
mcall SF_GET_BUTTON mov eax, 17
int 64
movzx eax, ah movzx eax, ah
call dword[eax * 4 + ButtonEvents] call [eax * 4 + ButtonEvents]
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_ButtonClose: On_ButtonClose:
mcall SF_TERMINATE_PROCESS or eax, -1
int 64
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_ButtonStart: On_ButtonStart:
; get system counter ; get system counter
mcall SF_SYSTEM_GET,SSF_TIME_COUNT mov eax, 26
mov ebx, 9
int 64
sub eax, [last_timer_ticks] sub eax, [last_timer_ticks]
and [last_timer_ticks], dword 0 and [last_timer_ticks], dword 0
mov [timer_ticks], eax mov [timer_ticks], eax
@@ -162,7 +181,9 @@ On_ButtonStart:
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_ButtonPause: On_ButtonPause:
; get system counter ; get system counter
mcall SF_SYSTEM_GET,SSF_TIME_COUNT mov eax, 26
mov ebx, 9
int 64
sub eax, [timer_ticks] sub eax, [timer_ticks]
mov [last_timer_ticks], eax mov [last_timer_ticks], eax
mov [timer_proc], dword EmptyProc mov [timer_proc], dword EmptyProc
@@ -183,14 +204,23 @@ On_ButtonReset:
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_Redraw: On_Redraw:
; redraw.start ; redraw.start
mcall SF_REDRAW,SSF_BEGIN_DRAW mov eax, 12
mov ebx, 1
int 64
; get.standart.colors ; get.standart.colors
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors mov eax, 48
mov ebx, 3
mov ecx, sc
mov edx, 40
int 64
; skin.height ; skin.height
mcall ,SSF_GET_SKIN_HEIGHT mov eax, 48
mov ebx, 4
int 64
add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT
mov [window.height], eax mov [window.height], eax
; draw.window ; draw.window
xor eax, eax
mov ebx, [window.left] mov ebx, [window.left]
shl ebx, 16 shl ebx, 16
add ebx, [window.width] add ebx, [window.width]
@@ -200,28 +230,51 @@ On_Redraw:
mov edx, [sc.work] mov edx, [sc.work]
or edx, 0x34000000 or edx, 0x34000000
mov edi, sz_timer mov edi, sz_timer
mcall SF_CREATE_WINDOW int 64
; draw.buttons: ; draw.buttons:
mcall SF_DEFINE_BUTTON, (MARGIN shl 16) or BUTTON_START_WIDTH, ((MARGIN + CHAR_HEIGHT + MARGIN) shl 16) or BUTTON_HEIGHT, BUTTON_START, BUTTON_START_BACK_COLOR mov eax, 8
mov ecx, ((MARGIN + CHAR_HEIGHT + MARGIN) << 16) | BUTTON_HEIGHT
mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN) shl 16) or BUTTON_PAUSE_WIDTH,, BUTTON_PAUSE, BUTTON_PAUSE_BACK_COLOR mov ebx, (MARGIN << 16) | BUTTON_START_WIDTH
mov edx, BUTTON_START
mov esi, BUTTON_START_BACK_COLOR
int 64
mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN) shl 16) or BUTTON_RESET_WIDTH,, BUTTON_RESET, BUTTON_RESET_BACK_COLOR mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_PAUSE_WIDTH
mov edx, BUTTON_PAUSE
mov esi, BUTTON_PAUSE_BACK_COLOR
int 64
mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_RESET_WIDTH
mov edx, BUTTON_RESET
mov esi, BUTTON_RESET_BACK_COLOR
int 64
;---------------------- ;----------------------
; draw.texts: ; draw.texts:
mcall SF_DRAW_TEXT, ((MARGIN + BUTTON_PADDING + 1) shl 16) or TEXT_ON_BUTTONS_TOP, 0x80FFFFFF, sz_start mov eax, 4
mov ecx, 0x80FFFFFF
mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) shl 16) or TEXT_ON_BUTTONS_TOP,, sz_pause mov ebx, ((MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP
mov edx, sz_start
int 64
mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) shl 16) or TEXT_ON_BUTTONS_TOP,, sz_reset mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP
mov edx, sz_pause
int 64
mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP
mov edx, sz_reset
int 64
;---------------------- ;----------------------
call On_Idle call On_Idle
; redraw.finish ; redraw.finish
mcall SF_REDRAW,SSF_END_DRAW mov eax, 12
mov ebx, 2
int 64
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
DrawTime: DrawTime:
mov ebx, (1 shl 16) mov ebx, (1 << 16)
mov esi, [sc.work_text] mov esi, [sc.work_text]
mov edi, [sc.work] mov edi, [sc.work]
; HH ; HH
@@ -234,16 +287,24 @@ DrawTime:
mov ecx, eax ; [hours] first digit mov ecx, eax ; [hours] first digit
or esi, 0x70000000 or esi, 0x70000000
mcall SF_DRAW_NUMBER,,, (TIME_AREA_LEFT shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, (TIME_AREA_LEFT << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mcall ,,, ((TIME_AREA_LEFT + 1) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + 1) << 16) | TIME_AREA_TOP
int 64
mov ecx, ebp ; [hours] second digit mov ecx, ebp ; [hours] second digit
or esi, 0x70000000 or esi, 0x70000000
mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH + 1) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP
int 64
; MM ; MM
mov eax, [minutes] mov eax, [minutes]
xor edx, edx xor edx, edx
@@ -254,16 +315,24 @@ DrawTime:
mov ecx, eax ; [minutes] first digit mov ecx, eax ; [minutes] first digit
or esi, 0x70000000 or esi, 0x70000000
mcall SF_DRAW_NUMBER,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mcall ,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3 + 1) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3 + 1) << 16) | TIME_AREA_TOP
int 64
mov ecx, ebp ; [minutes] second digit mov ecx, ebp ; [minutes] second digit
or esi, 0x70000000 or esi, 0x70000000
mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH + 1) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP
int 64
; SS ; SS
mov eax, [seconds] mov eax, [seconds]
xor edx, edx xor edx, edx
@@ -274,16 +343,24 @@ DrawTime:
mov ecx, eax ; [seconds] first digit mov ecx, eax ; [seconds] first digit
or esi, 0x70000000 or esi, 0x70000000
mcall SF_DRAW_NUMBER,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mcall ,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6 + 1) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6 + 1) << 16) | TIME_AREA_TOP
int 64
mov ecx, ebp ; [seconds] second digit mov ecx, ebp ; [seconds] second digit
or esi, 0x70000000 or esi, 0x70000000
mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH + 1) shl 16) or TIME_AREA_TOP mov eax, 47
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP
int 64
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_Idle: On_Idle:
@@ -293,7 +370,9 @@ On_Idle:
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
TimerStarted: TimerStarted:
; get system counter ; get system counter
mcall SF_SYSTEM_GET,SSF_TIME_COUNT mov eax, 26
mov ebx, 9
int 64
sub eax, [timer_ticks] sub eax, [timer_ticks]
xor edx, edx xor edx, edx
mov ecx, 100 mov ecx, 100
@@ -311,9 +390,4 @@ TimerStarted:
EmptyProc: EmptyProc:
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
align 4 END:
program.end:
rb 512
align 16
program.stack:
program.memory:

View File

@@ -1,7 +1,2 @@
if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_NASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") tup.rule("Timer.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "timer")
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({"Timer.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "Timer")

View File

@@ -1,4 +0,0 @@
@echo lang fix en_EN >lang.inc
@fasm.exe -m 16384 timer.asm timer.kex
@kpack timer.kex
pause

View File

@@ -1,4 +0,0 @@
@echo lang fix ru_RU >lang.inc
@fasm.exe -m 16384 timer.asm timer.kex
@kpack timer.kex
pause

View File

@@ -0,0 +1 @@
nasm -f bin Timer.asm -o Timer

View File

@@ -0,0 +1,2 @@
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("charset_checker.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "charchck")

View File

@@ -1,8 +1,3 @@
; SPDX-License-Identifier: GPL-2.0-only
; SPDX-FileCopyrightText: 2024-2025 KolibriOS Team
; ================================================================
format binary as "" format binary as ""
use32 use32
org 0 org 0
@@ -175,8 +170,7 @@ draw_window:
mcall 48, 3, window_colors, 40 mcall 48, 3, window_colors, 40
mcall , 4 mcall , 4
add eax, 3 push eax
mov [win_head], eax
mov eax, 0 mov eax, 0
mov ebx, 100 * 65536 + 685 mov ebx, 100 * 65536 + 685
@@ -186,24 +180,15 @@ draw_window:
mov edi, title mov edi, title
mcall mcall
; Don't draw rolled up or rolled down window pop esi
mcall 9, proc_info, -1 add esi, 495
mov eax, [proc_info + 70] mcall 67, -1, -1, -1,
mov [win_stat], eax
test [win_stat], 100b
jnz .draw_end
; Draw all app content
add [win_head], 492
call draw_base call draw_base
call draw_update call draw_update
call draw_toggle call draw_toggle
.draw_end: mcall 12, 2
mov esi, [win_head]
mcall 67, -1, -1, -1,
mcall 12, 2
ret ret
@@ -414,21 +399,9 @@ draw_update:
mov al, 0x01 mov al, 0x01
mov ecx, eax mov ecx, eax
push ecx push ecx
mcall 13, 65536 * 34 + 384, , [window_colors.work_button]
mov eax, 13 add ecx, 65536 * 23
mov ebx, 65536 * 34 + 384
mov edx, [window_colors.work_button]
;skip lines aligned to table borders
cmp ecx, 65536 * 34 + 65536
jle .hl_next_hr
mcall mcall
.hl_next_hr:
add ecx, 65536 * 23
cmp ecx, 65536 * 417
jge .hl_end_hr
mcall
.hl_end_hr:
mov al, [char] mov al, [char]
and al, 0x0F and al, 0x0F
@@ -438,28 +411,15 @@ draw_update:
shl eax, 16 shl eax, 16
mov al, 0x01 mov al, 0x01
mov ebx, eax mov ebx, eax
mcall 13, , 65536 * 34 + 384, [window_colors.work_button]
mov eax, 13 add ebx, 65536 * 23
mov ecx, 65536 * 34 + 384
mov edx, [window_colors.work_button]
;skip lines aligned to table borders
cmp ebx, 65536 * 34 + 65536
jle .hl_next_vr
mcall mcall
.hl_next_vr:
add ebx, 65536 * 23
cmp ebx, 65536 * 417
jge .hl_end_vr
mcall
.hl_end_vr:
pop ecx pop ecx
add ecx, 23 add ecx, 23
sub ebx, 65535 * 23 sub ebx, 65535 * 23
mcall mcall
; redraw active symbol
shr ecx, 16 shr ecx, 16
mov bx, cx mov bx, cx
add ebx, 65536 * 8 + 5 add ebx, 65536 * 8 + 5
@@ -614,7 +574,7 @@ logic_utf16to8:
; ================================================================ ; ================================================================
title db "Charsets Viewer 0.3.2", 0 title db "Charset Checker 0.3.1", 0
lb_cp6x9 db "CP866 6x9 ", 0 lb_cp6x9 db "CP866 6x9 ", 0
lb_cp8x16 db "CP866 8x16 ", 0 lb_cp8x16 db "CP866 8x16 ", 0
@@ -649,11 +609,7 @@ char_ascii dw 0x0000, 0
char_scan dw 0x0000, 0 char_scan dw 0x0000, 0
char_utf dd 0x00000000, 0 char_utf dd 0x00000000, 0
win_stat rd 1 window_colors system_colors
win_head rd 1
window_colors system_colors
proc_info process_information
; ================================================================ ; ================================================================

View File

@@ -1,7 +0,0 @@
## DBGBOARD - a console-based debug board
Main advantages over the old board:
* Bigger font
* Scrolling (like in other console apps)
* K : and L: messages highligting
Also, like the old board it writes log to /tmp0/1/boardlog.txt (or you can pass another path in args like `/sys/develop/dbgboard /tmp0/1/hgfdhgfh.txt`), you can view log file in cedit by hitting `F2` key

View File

@@ -1,2 +0,0 @@
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("dbgboard.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "dbgboard")

View File

@@ -1,244 +0,0 @@
; SPDX-License-Identifier: GPL-2.0
; DBGBOARD - a console-based debug board
; Copyright (C) 2025 KolibriOS team
format binary as ""
use32
org 0
db 'MENUET01' ; signature
dd 1 ; header version
dd start ; entry point
dd _image_end ; end of image
dd _memory ; required memory size
dd _stacktop ; address of stack top
dd _cmdline ; buffer for command line arguments
dd 0 ; buffer for path
; __DEBUG__ = 1
; __DEBUG_LEVEL__ = DBG_ALL
; DBG_ALL = 0 ; all messages
; DBG_INFO = 1 ; info and errors
; DBG_ERR = 2 ; only errors
include '../../macros.inc'
purge mov,add,sub
include '../../KOSfuncs.inc'
; include '../../debug-fdo.inc'
include '../../proc32.inc'
include '../../dll.inc'
include '../../if.inc'
include '../../string.inc'
CON_WINDOW_CLOSED = 0x200
TEXT_COLOR_YELLOW = 14
TEXT_COLOR_WHITE = 15
TEXT_COLOR_LIGHTGRAY = 7
; TEXT_COLOR_LIGHTGREEN = 10
proc set_text_color stdcall uses eax, _color
and [_color], 0x0F
invoke con_get_flags
and eax, 0x3F0
or eax, [_color]
invoke con_set_flags, eax
ret
endp
; returns eax = 0 or fs error code
proc get_file_attrib stdcall uses ebx, _path, _buf
push [_path]
dec esp
mov byte[esp], 0
push [_buf] ; 40 bytes buf
push 0
push 0
push 0
push SSF_GET_INFO
mov ebx, esp
mcall SF_FILE
add esp, 25
ret
endp
; returns eax = 0 or fs error code
proc create_file stdcall uses ebx, _path
push [_path]
dec esp
mov byte[esp], 0
push 0
push 0
push 0
push 0
push SSF_CREATE_FILE
mov ebx, esp
mcall SF_FILE
add esp, 25
ret
endp
; returns eax = 0 or fs error code
proc write_file stdcall uses ebx, _path, _buf, _count, _pos_lo, _pos_hi, _out_bytes_written
push [_path]
dec esp
mov byte[esp], 0
push [_buf]
push [_count]
push [_pos_hi]
push [_pos_lo]
push SSF_WRITE_FILE
mov ebx, esp
mcall SF_FILE
add esp, 25
mov ecx, [_out_bytes_written]
mov [ecx], ebx
ret
endp
start:
;; if there is a second instance of conboard is running then exit
mcall SF_THREAD_INFO, thread_info, -1
stdcall string.copy, thread_info + process_information.process_name, thread_name
stdcall string.to_lower_case, thread_name
xor edx, edx ; conboard instance count
xor esi, esi
.while esi < 256 ; NOTE: add to macros.inc MAX_THREAD_COUNT = 256
mcall SF_THREAD_INFO, thread_info, esi
.if [thread_info + process_information.slot_state] <> TSTATE_FREE
stdcall string.to_lower_case, thread_info + process_information.process_name
stdcall string.cmp, thread_info + process_information.process_name, thread_name, -1
.if eax = 0
inc edx
.if edx >= 2
jmp .raw_exit
.endif
.endif
.endif
inc esi
.endw
stdcall dll.Load, @IMPORT
test eax, eax
jnz .exit
invoke con_start, 1
invoke con_init, 80, 32, -1, -1, title
.if byte [_cmdline] <> 0
mov [log_file_path], _cmdline
.endif
.main_loop:
invoke con_kbhit
.if eax = 1
invoke con_getch2
.if ah = 60 ; F2
mov eax, [log_file_path]
mov [struct_open_in_notepad.filename], eax
mcall SF_FILE, struct_open_in_notepad
.endif
.endif
mcall SF_BOARD, SSF_DEBUG_READ
.if ebx = 0
mcall SF_SLEEP, 50
jz .main_loop_cond
.endif
mov [chr], al
.if [is_start_line] = 1
mov eax, prefix
add eax, [prefix_index]
mov bl, byte [chr]
mov [eax], bl
.if [prefix_index] = 2
.if dword [prefix] = 'K :'
stdcall set_text_color, TEXT_COLOR_YELLOW
.elseif dword [prefix] = 'L: '
stdcall set_text_color, TEXT_COLOR_WHITE
.else
stdcall set_text_color, TEXT_COLOR_LIGHTGRAY
.endif
mov [is_start_line], 0
mov [prefix_index], 0
invoke con_write_asciiz, prefix
mov dword [prefix], 0
.else
inc [prefix_index]
.endif
.else
invoke con_write_asciiz, chr
.if byte [chr] = 10
mov [is_start_line], 1
stdcall set_text_color, TEXT_COLOR_LIGHTGRAY
.endif
.endif
stdcall get_file_attrib, [log_file_path], file_info_buf
.if eax = 5 ; file not found
stdcall create_file, [log_file_path]
.endif
stdcall write_file, [log_file_path], chr, 1, dword [file_info_buf + 32], dword [file_info_buf + 32 + 4], bytes_written
.main_loop_cond:
invoke con_get_flags
and eax, CON_WINDOW_CLOSED
test eax, eax
jz .main_loop
.exit:
invoke con_exit, 0
.raw_exit:
mcall SF_TERMINATE_PROCESS
; data:
title db 'Debug & message board',0
log_file_path dd default_log_file_path
default_log_file_path db '/tmp0/1/BOARDLOG.TXT',0
prefix db 0,0,0,0
prefix_index dd 0
is_start_line dd 1
bytes_written dd 0
chr db 0, 0
struct_open_in_notepad:
dd SSF_START_APP
dd 0
.filename dd ?
dd 0
dd 0
db '/sys/develop/cedit', 0
; include_debug_strings
align 4
@IMPORT:
library console, 'console.obj'
import console, \
con_start, 'START', \
con_init, 'con_init', \
con_write_asciiz, 'con_write_asciiz', \
con_exit, 'con_exit', \
con_kbhit, 'con_kbhit', \
con_getch2, 'con_getch2', \
con_set_flags, 'con_set_flags', \
con_get_flags, 'con_get_flags'
align 16
_image_end:
file_info_buf rb 40
align 4
_cmdline rb 256
thread_info process_information
thread_name rb 16
; reserve for stack:
rb 4096
align 16
_stacktop:
_memory:

View File

@@ -118,8 +118,8 @@ ico=8
x=-67 x=-67
y=68 y=68
[10] [10]
name=DBGBOARD name=BOARD
path=/SYS/DEVELOP/DBGBOARD path=/SYS/DEVELOP/BOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -1,7 +1,2 @@
if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_NASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") tup.rule("tinfo.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "tinfo")
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({"tinfo.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "tinfo")

View File

@@ -1,4 +0,0 @@
@echo lang fix en_EN >lang.inc
@fasm.exe -m 16384 tinfo.asm tinfo.kex
@kpack tinfo.kex
pause

Some files were not shown because too many files have changed in this diff Show More