Compare commits

..

36 Commits

Author SHA1 Message Date
8d5a695ee4 Tube: add lang.inc in *.tup file 2025-03-11 22:53:48 +01:00
bd3ce6c50c Plasma: fix broken path in *.tup file 2025-03-11 22:53:48 +01:00
0f98b9c0e4 Firework: update 2025-03-11 22:53:48 +01:00
da1237a6d6 Fire, Tube: update 2025-03-11 22:53:48 +01:00
908e9eaa12 Plasma: update 2025-03-11 22:53:48 +01:00
2c496cfd05 Tube: update 2025-03-11 22:53:48 +01:00
81b15607dc Apps/barcfg: Added bars_8b.raw
Co-authored-by: Max Logaev <maxlogaev@proton.me
2025-03-10 23:11:33 +01:00
30d8d45326 Data: Move kf_font_viewer to ISO
- Added testcon2_eng to IMG;
- use_mb was removed from IMG because it was not used.

Co-authored-by: Max Logaev <maxlogaev@proton.me
2025-03-10 23:11:33 +01:00
9a23c001e1 Data: Added hotkeys for change sound volume and mute/unmute sound
- Added Ctrl + Alt + Left / Right - change sound volume;
- Added Ctrl + Alt + Up / Down - mute and unmute sound;
- Corrected description.

Co-authored-by: Max Logaev <maxlogaev@proton.me
2025-03-10 23:11:33 +01:00
64b7372624 Apps/eolite: Version 5.27
- Choose first file on ctrl selection.
- Set static position for maximized window:
  https://github.com/KolibriOS/kolibrios/issues/9
2025-03-10 22:28:44 +01:00
d04420295a CI: Add hash for toolchain 2025-03-10 21:31:00 +01:00
2935b29fd8 CI: Cache 2025-03-10 21:31:00 +01:00
505f741fbd CI/CD: Used kolibri-toolchain and fuse. Added es_ES build
- Used  tup with fuse to speed up build;
- Used kolibri-toolchain to speed up the build, that is,
  do not waste time installing dependencies;
- Added build of the Spanish version (es_ES).

Signed-off-by: Max Logaev <maxlogaev@proton.me>
2025-03-10 21:31:00 +01:00
5a852ebdfb Apps/webview: Version 3.82. Fixed text rendering, speedup (#130)
Co-authored-by: leency <lipatov.kiril@gmail.com>
Co-committed-by: leency <lipatov.kiril@gmail.com>
2025-03-10 20:28:52 +01:00
026d2aba40 Libs/console_coff: Translate comments to English and convert to UTF-8 (#128)
Translated remaining non-English comments to English and convert to UTF-8

Co-authored-by: rgimad <33692565+rgimad@users.noreply.github.com>
Reviewed-on: KolibriOS/kolibrios#128
Reviewed-by: Max Logaev <mxlgv@noreply.localhost>
Co-authored-by: rgimad <rgimad@noreply.localhost>
Co-committed-by: rgimad <rgimad@noreply.localhost>
2025-03-10 20:04:26 +01:00
Taldariner
9b08b20cc3 Charsets Checker 0.3.2
- Renamed to Charsets Viewer/Charsets
- Fixed rolled-up bug
- Tweaked UI a little bit
- Renamed files in autobuild
- Moved charsets to programs/develop
- Added credits in charsets.asm
- Moved charsets dev history to separate file
2025-03-07 23:25:15 +03:00
38fdd13e0c Added charset_checker app to IMG instead of asciivju and keyascii 2025-03-07 23:25:14 +03:00
d9679f5f81 Add new debug board - dbgboard based on console.obj (#119)
Main advantages:
- 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), can view it on F2

Co-authored-by: rgimad <33692565+rgimad@users.noreply.github.com>
Reviewed-on: KolibriOS/kolibrios#119
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: rgimad <rgimad@noreply.localhost>
Co-committed-by: rgimad <rgimad@noreply.localhost>
2025-03-07 23:24:48 +03:00
92ea2a97eb Data: Dino has been moved to the TCC category.
Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
2025-03-07 10:48:09 +01:00
98cccc438c Apps/aclock: Rewrite from nasm to fasm 2025-03-07 01:10:44 +01:00
79d9f42085 Apps/genfiles: Rewrite from nasm to fasm 2025-03-07 01:10:44 +01:00
b39150ecea Apps/lod: Rewrite from nasm to fasm 2025-03-07 01:10:44 +01:00
1a40899780 Apps/FillScr: Rewrite from nasm to fasm 2025-03-07 01:10:44 +01:00
25b79ca6d1 Apps/Timer: Rewrite from nasm to fasm 2025-03-07 01:10:44 +01:00
2e3548d92a Apps/tinfo: Rewrite from nasm to fasm 2025-03-07 01:10:44 +01:00
ed8e4ecf33 Apps/mstate: Rewrite from nasm to fasm 2025-03-07 01:10:44 +01:00
6a9608c7a4 Apps/C4: Rewrite from nasm to fasm 2025-03-07 01:10:44 +01:00
d8c6274d19 Libs/iconv: Fixed convert BEL and UKR i/I to CP866
Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
2025-03-07 01:05:42 +01:00
1df7b2fd4c Apps/webview: Version 3.8. Fixed <p>, new h3 style
- `cmm/lib/collection.h`: fixed memory leak, more safe, optimizations;
- webview: mostly fix <p>, new h3 style, some other updates.

Reviewed-on: KolibriOS/kolibrios#115
2025-03-07 03:00:49 +03:00
9001dbc1b4 CI/CD: Added CI, without MSVC (en_US and ru_RU)
- Added `install_kgcc` script;
- Added `checker.pl` script to check the kernel codestyle;
- Added build of en_US and ru_RU versions of images.
Known problem: projects that require the proprietary MSVC compiler are
not built.

Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
2025-03-04 20:09:10 +01:00
c11c7922bd Libs/mbedtls: Use strip instead of kos32-strip
`kos32-strip`` contains a bug:
When trying to strip a large object file builded by `clink`,
a segfault occurs. This bug is not reproduced on the newer `strip`.

Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
2025-03-04 20:09:10 +01:00
739facfeca CI/CD: Init building workflow 2025-03-04 20:09:10 +01:00
8c9a971e2c Libs/cmm: Fixed return type for GetProcessInfo() 2025-03-02 12:10:08 +01:00
5aa17d5823 Apps/webview: Fixed parse tag param and use Bing search
- Fixed parse case of tag param like "attr = value";
- Use the default Bing search as it only supports HTTP.
2025-03-02 12:10:08 +01:00
4d6ef342e1 Apps/webview: Fixed issue #100 2025-03-02 12:10:08 +01:00
8e5b315fd4 Apps: Fix webview and downloader issue #22
- Fix #22 in both webview and downloader;
- Get rid of app mode in webview;
- Fix update link for webview.
2025-03-02 12:10:08 +01:00
126 changed files with 3906 additions and 4468 deletions

213
.gitea/workflows/build.yaml Normal file
View File

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

@@ -0,0 +1,82 @@
#!/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

@@ -1,60 +0,0 @@
# Contributing guide
## Type of contributing
There are two main types of contributions accepted in KolibriOS:
- Submitting issues about problems in the project
- Submitting code to the project via pull requests
Each of these types is described in detail below.
## Issues
You can help us by submitting issues about problems found in the system. Currently, there are two main ways of submitting an issue in the project: **Bug Reports** and **Feature Requests**:
- Bug Reports are suitable if you find a **bug** (crash, error, unexpected behavior) in some part of the system (kernel, drivers, apps, etc.) and want to report it
- Feature Request are used, when you want to propose some **improvement** to the system (missing features, improved user experience, etc.)
## Pull requests
You can also help us by submitting code via pull requests. The process of submitting a pull request consists of the following steps:
1. Find what you want to implement or improve
2. Make a fork of kolibrios (or other needed) repository
3. Create a branch with a name that matches your changes
4. Implement and test the changes
5. Create commits according to the [accepted style](#commit-style)
6. Create and submit a pull request into `main` branch
7. Wait for CI/CD pipelines and code review to pass
When a pull request is submitted, at least two project participants must conduct a code review, after which the proposed changes can be corrected (if it's necessary) and merged into the project.
## Commit style
### Pattern
The commit message should look like this:
```test
Commit message header
Commit message body, if needed
```
- Commit message header and body should reflect changes made in commit
- Commit message header should start with a capital letter
- Commit message body should be separated from the header by one empty line
### Length
Maximum number of characters in a commit header is **72** (standard for **Git**). Also, **72** is the maximum length of a line in a commit body.
## Merge commits
> [!WARNING]
> Merge commits are **prohibited** in the project
## Conclusion
We hope this small instructions will help you to get familiar with KolibriOS contribution rules and inspire you to participate in the work of this project.

View File

@@ -1,338 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Moe Ghoul>, 1 April 1989
Moe Ghoul, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@@ -1,28 +0,0 @@
# KolibriOS
[![License](https://img.shields.io/badge/License-GPL%202.0-green)](./COPYING.TXT)
[![Build system](https://git.kolibrios.org/KolibriOS/kolibrios/actions/workflows/build.yaml/badge.svg)](https://git.kolibrios.org/KolibriOS/kolibrios/actions/workflows/build.yaml)
KolibriOS is a hobby operating system for x86-compatible computers, which is currently being developed by a small teem of enthusiasts.
It's kernel is written entirely in [FASM](https://flatassembler.net/) assembly language, making it very compact and lean on system resources.
Based on [MenuetOS](https://www.menuetos.net/), it uses its own standards and is NOT fully POSIX or UNIX compliant
## Contributing
We would appreciate any participation in the project and always welcome new users and contributors.
Detailed instructions for the contribution process can be found in the [contributing guide](./CONTRIBUTING.md).
Common list of tasks, issues and enhancement proposals can be found on [this page](https://git.kolibrios.org/KolibriOS/kolibrios/issues).
## Special thanks
The KolibriOS team expresses special thanks to the author of the 32-bit **MenuetOS**, [Ville Turjanmaa](https://www.menuetos.net/contact.htm). We also want to note that all **MenuetOS** copyrights have been preserved.
## License
Contents of this repository are licensed under the terms of **GNU GPL 2.0** unless otherwise specified.
See [this](./COPYING.TXT) file for details.

View File

@@ -407,6 +407,7 @@ 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"},
@@ -441,6 +442,8 @@ 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"},
@@ -453,37 +456,38 @@ tup.append_table(img_files, {
{"DEMOS/BCDCLK", VAR_PROGS .. "/demos/bcdclk/trunk/bcdclk"}, {"DEMOS/BCDCLK", VAR_PROGS .. "/demos/bcdclk/trunk/bcdclk"},
{"DEMOS/BUDHBROT", VAR_PROGS .. "/demos/buddhabrot/trunk/buddhabrot"}, {"DEMOS/BUDHBROT", VAR_PROGS .. "/demos/buddhabrot/trunk/buddhabrot"},
{"DEMOS/EYES", VAR_PROGS .. "/demos/eyes/trunk/eyes"}, {"DEMOS/EYES", VAR_PROGS .. "/demos/eyes/trunk/eyes"},
{"DEMOS/FIREWORK", VAR_PROGS .. "/demos/firework/trunk/firework"}, {"DEMOS/FIREWORK", VAR_PROGS .. "/demos/firework/firework"},
{"DEMOS/MOVBACK", VAR_PROGS .. "/demos/movback/trunk/movback"}, {"DEMOS/MOVBACK", VAR_PROGS .. "/demos/movback/trunk/movback"},
{"DEMOS/PLASMA", VAR_PROGS .. "/demos/plasma/trunk/plasma"}, {"DEMOS/PLASMA", VAR_PROGS .. "/demos/plasma/plasma"},
{"DEMOS/SPIRAL", VAR_PROGS .. "/demos/spiral/spiral"}, {"DEMOS/SPIRAL", VAR_PROGS .. "/demos/spiral/spiral"},
{"DEMOS/TINYFRAC", VAR_PROGS .. "/demos/tinyfrac/trunk/tinyfrac"}, {"DEMOS/TINYFRAC", VAR_PROGS .. "/demos/tinyfrac/trunk/tinyfrac"},
{"DEMOS/TRANTEST", VAR_PROGS .. "/demos/trantest/trunk/trantest"}, {"DEMOS/TRANTEST", VAR_PROGS .. "/demos/trantest/trunk/trantest"},
{"DEMOS/TUBE", VAR_PROGS .. "/demos/tube/trunk/tube"}, {"DEMOS/TUBE", VAR_PROGS .. "/demos/tube/tube"},
{"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"},
@@ -498,6 +502,7 @@ 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"},
@@ -517,6 +522,7 @@ 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"},
@@ -599,7 +605,6 @@ 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"},
@@ -630,7 +635,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/TESTCON2", VAR_PROGS .. "/develop/libraries/console_coff/examples/testcon2_eng"}, {"DEVELOP/EXAMPLES/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, {
@@ -639,22 +644,6 @@ 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, {
@@ -683,7 +672,6 @@ 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"},
@@ -706,6 +694,7 @@ 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'
@@ -730,6 +719,7 @@ 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=/sys/KF_VIEW kf=/kolibrios/utils/kf_view
txt=$CodeEdit txt=$CodeEdit
log=$CodeEdit log=$CodeEdit

View File

@@ -1,14 +1,16 @@
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 (in the window stack) window 6) Alt + Tab - switch to the next window
7) Alt + Shift + Tab - switch to the previous (in the window stack) window 7) Alt + Shift + Tab - switch to the previous 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 (cleaning of desktop) 10) Win + D - minimize/restore all windows
11) Win + R - start of the application RUN 11) Win + R - start of the application RUN
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. 12) Ctrl + PrintScreen - start of the application SCRSHOOT
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=BOARD name=DBGBOARD
path=/SYS/DEVELOP/BOARD path=/SYS/DEVELOP/DBGBOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -57,8 +57,7 @@
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 Character table |develop/ASCIIVju 59 Charsets Viewer |develop/CHARSETS
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,14 +1,16 @@
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 (in the window stack) window 6) Alt + Tab - switch to the next window
7) Alt + Shift + Tab - switch to the previous (in the window stack) window 7) Alt + Shift + Tab - switch to the previous 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 (cleaning of desktop) 10) Win + D - minimize/restore all windows
11) Win + R - start of the application RUN 11) Win + R - start of the application RUN
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. 12) Ctrl + PrintScreen - start of the application SCRSHOOT
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=BOARD name=DBGBOARD
path=/SYS/DEVELOP/BOARD path=/SYS/DEVELOP/DBGBOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -56,8 +56,7 @@
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 |ASCIIVju 16 Tabla de caracteres |develop/CHARSETS
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=BOARD name=DBGBOARD
path=/SYS/DEVELOP/BOARD path=/SYS/DEVELOP/DBGBOARD
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=BOARD name=DBGBOARD
path=/SYS/DEVELOP/BOARD path=/SYS/DEVELOP/DBGBOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -1,14 +1,16 @@
<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> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>) <20><><EFBFBD><EFBFBD> 6) Alt + Tab - <20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><><><E1ABA5><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> 7) Alt + Shift + Tab - <20><><EFBFBD><E0A5AA><EFBFBD><E7A5AD> <20><> <20><EFBFBD><E0A5A4><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> (<28><><EFBFBD><EFBFBD>⪠ ࠡ<><EFBFBD> <20><EFBFBD>) 10) Win + D - ᢥ<><E1A2A5><EFBFBD><EFBFBD><EFBFBD>/ࠧ<><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><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. <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. 12) Ctrl + PrintScreen - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SCRSHOOT
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=BOARD name=DBGBOARD
path=/SYS/DEVELOP/BOARD path=/SYS/DEVELOP/DBGBOARD
param= param=
ico=19 ico=19
x=-135 x=-135

View File

@@ -58,8 +58,7 @@
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/ASCIIVju 59 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A8AC><EFBFBD><EFBFBD><EFBFBD> |develop/CHARSETS
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,9 +55,15 @@ _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;
@@ -137,7 +143,7 @@ void main()
void DrawPanelsImage(dword y, n) void DrawPanelsImage(dword y, n)
{ {
PutImage(22, y, PIMG_W, PIMG_H, n * PIMG_W * PIMG_H * 3 + #panels_img_data); PutPaletteImage(n * PIMG_W * PIMG_H + #panels_img_data, PIMG_W, PIMG_H, 22, y, 8, #panels_img_pal);
} }
void SetDisabledMode() void SetDisabledMode()

View File

@@ -101,13 +101,16 @@ 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; draw_w = list.w - BODY_MARGIN - BODY_MARGIN;
linebuf = 0; linebuf = 0;
redirect = '\0'; redirect = '\0';
list.SetFont(8, 14, 10011000b); list.SetFont(8, 14, 10011000b);
@@ -133,8 +136,6 @@ 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 {
@@ -153,7 +154,6 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
} }
} }
table.cols.drop(); table.cols.drop();
secondrun = false; secondrun = false;
@@ -216,19 +216,15 @@ 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,9 +45,10 @@ 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,6 +112,7 @@ 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;
@@ -145,6 +146,14 @@ 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;
@@ -161,6 +170,8 @@ 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,11 +10,9 @@ 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);
if (!application_mode) {
strncat(#header, " - ", sizeof(TWebBrowser.header)-1); strncat(#header, " - ", sizeof(TWebBrowser.header)-1);
strncat(#header, #version, sizeof(TWebBrowser.header)-1); strncat(#header, #version, sizeof(TWebBrowser.header)-1);
} }
}
else if (t_html) && (!t_body) { else if (t_html) && (!t_body) {
// //
} }
@@ -24,9 +22,8 @@ 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) { if (pw > draw_w + BODY_MARGIN) {
//draw_w = pw; //debugln("shit");
NewLine();
} }
if (debug_mode) { if (debug_mode) {
@@ -85,12 +82,13 @@ void TWebBrowser::RenderTextbuf()
//debugln(" \\n"); //debugln(" \\n");
//Is a new line fits in the current line? //Is a new line fits in the maximum line width?
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]==' ') {
br++; if (br < len) br++;
break; break;
} }
br--; br--;
@@ -98,7 +96,16 @@ 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) {
@@ -124,7 +131,11 @@ 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) empty_line=true; else return; if (!empty_line) {
empty_line=true;
} else {
return;
}
} else { } else {
empty_line = false; empty_line = false;
} }

View File

@@ -56,15 +56,12 @@ 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")) || (streq(#tag.prior,"p")) return; IF (tag.prior[0] == 'h') || (streq(#tag.prior,"td")) return;
IF (!tag.opened) && (streq(#tag.prior,"p")) return;
NewLine(); NewLine();
} }
@@ -122,6 +119,7 @@ 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:"))
@@ -136,6 +134,7 @@ 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"))
{ {
@@ -148,22 +147,6 @@ 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)
@@ -206,7 +189,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();
@@ -238,10 +221,7 @@ void TWebBrowser::tag_body()
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")) { if (tag.get_value_of("bgcolor")) bg_colors.set(0, GetColor(tag.value));
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);
@@ -264,11 +244,19 @@ void TWebBrowser::tag_h1234_caption()
} else { } else {
style.h = tag.opened; style.h = tag.opened;
if (tag.opened) { if (tag.opened) {
if (!style.pre) NewLine(); if (!style.pre) {
draw_y += 10; NewLine();
list.SetFont(BASIC_CHAR_W*2, 14*2, 10011001b); NewLine();
list.item_h = BASIC_LINE_H * 2 - 2; }
if (tag.is("h1")) style.b = true; if (tag.is("h1")) {
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();
@@ -305,7 +293,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)); replace_char(#img_path, ' ', '\0', sizeof(img_path)-1);
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)) {
@@ -342,31 +330,28 @@ 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;
int tr_pos, td_pos; unsigned colcount;
int row_start_y; unsigned tr_pos;
int colcount; unsigned td_pos;
dword tallest_cell_in_row; unsigned row_start_y;
unsigned tallest_cell_in_row;
unsigned cur_cell_w;
void TWebBrowser::tag_table_reset() void TWebBrowser::tag_table_reset()
{ {
table.depth = 0; table_id = 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()
@@ -380,15 +365,15 @@ void TWebBrowser::tag_table()
if(tag.opened) { if(tag.opened) {
table.depth++; table.depth++;
if (table.depth==1) { if (table.depth==1) {
table.count++; table_id++;
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;
table.width.set(table.count, math.min(tag.number,list.w)); cur_cell_w = math.min(tag.number,list.w);
} else { } else {
table.width.set(table.count, list.w); cur_cell_w = list.w;
} }
} }
} else { } else {
@@ -447,26 +432,17 @@ 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 - table.width.get(table.count) / 2 + BODY_MARGIN; table.margin = list.w - cur_cell_w / 2 + BODY_MARGIN;
draw_x = left_gap = table.margin; draw_x = left_gap = table.margin;
draw_w = table.width.get(table.count) - BODY_MARGIN; draw_w = cur_cell_w - BODY_MARGIN;
} else { } else {
draw_x = left_gap = left_gap + draw_w; draw_x = left_gap = left_gap + draw_w;
draw_w = table.width.get(table.count) - left_gap + table.margin - BODY_MARGIN; draw_w = cur_cell_w - 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) {
@@ -477,20 +453,18 @@ 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 = table.width.get(table.count) - table.margin - 23 - left_gap * tag.number / 100; tag.number = cur_cell_w - 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 > table.width.get(table.count)) { if (draw_x > cur_cell_w) {
draw_x = left_gap = table.margin; draw_x = left_gap = table.margin;
draw_w = table.width.get(table.count) - table.margin - 23 - left_gap; draw_w = cur_cell_w - table.margin - 23 - left_gap;
table.depth = 0; table.depth = 0;
NewLine(); NewLine();
if (debug_mode) { if (debug_mode) {
@@ -498,11 +472,8 @@ 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) {
if (left_gap + draw_w > list.w) { // draw_w = list.w - left_gap;
draw_w = list.w - left_gap; // if (debug_mode) debugln("anomaly draw_W");
if (debug_mode) debugln("anomaly draw_W"); //}
} }
*/
}

View File

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

View File

@@ -1,4 +1,4 @@
//Copyright 2007-2021 by Veliant & Leency //Copyright 2007-2025 by Veliant & Leency
//Asper, lev, Lrz, Barsuk, Nable, hidnplayr... //Asper, lev, Lrz, Barsuk, Nable, hidnplayr...
//BUGS //BUGS
@@ -45,7 +45,6 @@
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;
@@ -110,9 +109,6 @@ 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);
@@ -136,14 +132,6 @@ 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;
@@ -221,15 +209,6 @@ 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;
@@ -248,6 +227,15 @@ 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) {
@@ -324,7 +312,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_KEY_T) {EventOpenNewTab(URL_SERVICE_TEST);return;} if (key_scancode == SCAN_CODE_BS) {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)
@@ -349,6 +337,7 @@ 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;
@@ -382,7 +371,6 @@ void draw_window()
SetElementSizes(); SetElementSizes();
if (!application_mode) {
DrawBar(0,0, Form.cwidth,PADDING, sc.work); DrawBar(0,0, Form.cwidth,PADDING, sc.work);
DrawBar(0,PADDING+TSZE+1, Form.cwidth,PADDING-1, sc.work); DrawBar(0,PADDING+TSZE+1, Form.cwidth,PADDING-1, sc.work);
DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, MixColors(sc.dark, sc.work, 180)); DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, MixColors(sc.dark, sc.work, 180));
@@ -398,7 +386,6 @@ void draw_window()
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();
@@ -406,14 +393,11 @@ void draw_window()
WB1.DrawPage(); WB1.DrawPage();
DrawOmnibox(); DrawOmnibox();
} }
if (!application_mode) {
DrawProgress(); DrawProgress();
DrawStatusBar(NULL); DrawStatusBar(NULL);
DrawTabsBar(); DrawTabsBar();
} }
}
void EventOpenFirstPage() void EventOpenFirstPage()
{ {
OpenPage(history.current()); OpenPage(history.current());
@@ -588,7 +572,6 @@ 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));
@@ -757,7 +740,12 @@ void LoadInternalPage(dword _bufdata, _in_bufsize){
WB1.DrawPage(); WB1.DrawPage();
} }
http.hfree(); http.hfree();
if (WB1.img_url.count) { GetImg(true); DrawOmnibox(); } if (WB1.img_url.count) {
GetImg(true);
DrawOmnibox();
} else {
PageLoaded();
}
} }
} }
@@ -770,7 +758,6 @@ 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;
@@ -779,21 +766,18 @@ 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 = VIEW_SOURCE; menu_id = BACK_BUTTON;
} }
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;
@@ -801,7 +785,6 @@ 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");
@@ -824,7 +807,8 @@ 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://www.google.com/search?q="); //strcpy(#new_url, "https://html.duckduckgo.com/html/?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);
} }
@@ -886,7 +870,6 @@ 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) {
@@ -900,7 +883,6 @@ 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);
@@ -919,7 +901,6 @@ 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();
@@ -1000,8 +981,13 @@ dword GetImg(bool _new)
DrawStatusBar(T_RENDERING); DrawStatusBar(T_RENDERING);
WB1.Reparse(); WB1.Reparse();
WB1.DrawPage(); WB1.DrawPage();
debugln(sprintf(#param, T_DONE_IN_SEC, GetStartTime()-render_start_time/100)); PageLoaded();
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=0; } cache;
void _cache::add(dword _url, _data, _size, _type, _charset) void _cache::add(dword _url, _data, _size, _type, _charset)
{ {
@@ -37,6 +37,7 @@ 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,8 +9,11 @@ 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[] =
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E5AEA4><EFBFBD>|Ctrl+U "Back|Ctrl+<
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"; Forward|Ctrl+>
-
<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
@@ -27,14 +30,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/rus/data/programs/cmm/browser/WebView.com"; char update_param[] = "-e http://builds.kolibrios.org/ru_RU/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 ᥪ" #define T_DONE_IN_SEC "<22><><EFBFBD>: %i ᥪ (%i <20><><EFBFBD><EFBFBD>ᥪ)"
#else #else
//===================================================// //===================================================//
// // // //
@@ -46,8 +49,11 @@ 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[] =
"View source|Ctrl+U "Back|Ctrl+<
Edit source"; Forward|Ctrl+>
-
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
@@ -63,14 +69,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/eng/data/programs/cmm/browser/WebView.com"; char update_param[] = "-e http://builds.kolibrios.org/en_US/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" #define T_DONE_IN_SEC "Done in %i sec (%i milisec)"
#endif #endif
//===================================================// //===================================================//
@@ -83,7 +89,6 @@ 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";
@@ -91,12 +96,12 @@ char webview_shared[] = "WEBVIEW";
enum { enum {
NEW_TAB=600, NEW_TAB=600,
ENCODINGS=700, ENCODINGS=700,
BACK_BUTTON=800, BACK_BUTTON=800, FORWARD_BUTTON, VIEW_SOURCE, EDIT_SOURCE,
FORWARD_BUTTON, REFRESH_BUTTON, GOTOURL_BUTTON, CHANGE_ENCODING, REFRESH_BUTTON, GOTOURL_BUTTON, CHANGE_ENCODING,
SANDWICH_BUTTON, VIEW_SOURCE, EDIT_SOURCE, OPEN_FILE, SANDWICH_BUTTON,
NEW_WINDOW, VIEW_HISTORY, DOWNLOAD_MANAGER, CLEAR_CACHE, OPEN_FILE, NEW_WINDOW, VIEW_HISTORY, DOWNLOAD_MANAGER,
UPDATE_BROWSER, IN_NEW_TAB, IN_NEW_WINDOW, COPY_LINK_URL, CLEAR_CACHE, UPDATE_BROWSER, IN_NEW_TAB, IN_NEW_WINDOW,
DOWNLOAD_LINK_CT, TAB_ID, COPY_LINK_URL, DOWNLOAD_LINK_CT, TAB_ID,
TAB_CLOSE_ID = 900 TAB_CLOSE_ID = 900
}; };
@@ -107,4 +112,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.66-3"; char version[]="WebView 3.82";

View File

@@ -2,15 +2,16 @@
<head> <head>
<title>Homepage</title> <title>Homepage</title>
</head> </head>
<body><pre>Bookmarks: <body><pre>Welcome to WebView a Text-Based Browser.
1. <a href=//kolibrios.org>KolibriOS homepage</a>
2. <a href=//kolibri-n.org>KolibriN homepage</a> KolibriOS Bookmarks:
3. <a href="//builds.kolibrios.org">Night-builds</a> 1. <a href=//kolibrios.org>Homepage</a>
4. <a href="//store.kolibri-n.org">Kolibri Stuff</a> 2. <a href="//builds.kolibrios.org">Night-builds</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; You can also use other <a href=WebView:help><font color=555555>Hotkeys</font></a>. &bull; Pressing F6 moves a text cursor to the omnibox.
&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,17 +1,15 @@
<html> <html><head><meta charset="cp-866">
<head> <title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></title></head>
<meta charset="cp-866"> <body><pre><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E2AEA2> <20><><EFBFBD><EFBFBD> WebView!
<title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></title>
</head> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> KolibriOS:<ol>
<body><pre><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <li><a href=//kolibrios.org><EFBFBD><EFBFBD><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="//builds.kolibrios.org"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᡮન</a>
2. <a href=//kolibri-n.org>KolibriN10</a> <li><a href="//ftp.kolibrios.org">FTP <20><><EFBFBD></a></ol>
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><><E2A0AA> <20><><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><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> <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,23 +2,22 @@
<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> <pre><a href=//wiby.org>wiby.org</a>
<a href=//kolibrios.org>KolibriOS</a> <a href=//www.xlr8yourmac.com/OSX/os_x_network_cards.html>OSX network cards</a>
<a href=//kolibri-n.org>KolibriN10</a> <a href=//macintoshgarden.org/>Macintosh Garden</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=//bash.im>bash.im</a> <a href=//web.archive.org/web/https://bash.im>bash.im</a>
<a href=//opennet.ru>opennet</a> <a href=//web.archive.org/web/https://opennet.ru>opennet</a>
<a href=//linux.org.ru>LOR</a> <a href=//linux.org.ru>LOR</a>
<a href=//baravy.by/me/b.html>baravy.by/me/b.html</a> <a href=//web.archive.org/web/https://samlib.ru/b>samlib.ru/b</a>
<a href=//samlib.ru/b>samlib.ru/b</a> <a href=//web.archive.org/web/https://mirrors.pdp-11.ru>mirrors.pdp-11.ru</a>
<a href=//mirrors.pdp-11.ru>mirrors.pdp-11.ru</a> <a href=//web.archive.org/web/http://gona.mactar.hu/ATI_Mac/>ATI drivers for Mac</a>
<td>Simple: <td>Simple:
<a href=//lionovsky.us>lionovsky.us</a> <a href=//web.archive.org/web/http://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>
@@ -34,8 +33,7 @@ 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=//artcon.ru>artcon.ru</a> <a href=//web.archive.org/web/https://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=//www.thg.ru/graphic/25year_ati_history>tom's hardware</a> <a href=//web.archive.org/web/20190403215447//www.thg.ru/>thg</a>

View File

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

View File

@@ -17,8 +17,10 @@
#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 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 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_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
@@ -38,8 +40,10 @@
#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 FILE_SAVED_AS "'Download manager\nFile saved as %s' -Dt" #define T_ERROR_TOO_MANY_REDIRECTS "'Download manager\nToo many redirects' -Et"
#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,6 +11,8 @@ 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 };
@@ -228,6 +230,7 @@ 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()
@@ -241,6 +244,13 @@ 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);
@@ -307,9 +317,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, FILE_SAVED_AS, #filepath); miniprintf(#notify_message, T_FILE_SAVED_AS, #filepath);
} else { } else {
miniprintf(#notify_message, FILE_NOT_SAVED, #filepath); miniprintf(#notify_message, T_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.26a" #define ABOUT_TITLE "EOLITE 5.27"
#define TITLE_EOLITE "Eolite File Manager 5.26a" #define TITLE_EOLITE "Eolite File Manager 5.27"
#define TITLE_KFM "Kolibri File Manager 2.26a"; #define TITLE_KFM "Kolibri File Manager 2.27";
#define MEMSIZE 1024 * 250 #define MEMSIZE 1024 * 250
#include "../lib/clipboard.h" #include "../lib/clipboard.h"
@@ -239,6 +239,7 @@ 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();
@@ -539,7 +540,7 @@ void draw_window()
incn x; incn x;
dword title; dword title;
static int rand_n; static int rand_n;
if (!rand_n) rand_n = random(80); if (!rand_n) && (Form.width + 1 != screen.w) 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,7 +13,6 @@ 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();
@@ -22,34 +21,35 @@ struct collection_int
dword get_last(); dword get_last();
void pop(); void pop();
void drop(); void drop();
#define DWSIZE4 4
}; };
:void collection_int::alloc() {
if (!buf) {
buf_size = 4096;
buf = malloc(4096);
} else {
buf_size += 4096;
buf = realloc(buf, buf_size);
}
}
:void collection_int::add(dword _in) { :void collection_int::add(dword _in) {
if (!buf) || (count * sizeof(dword) >= buf_size) alloc(); unsigned i;
EAX = count * sizeof(dword) + buf; if (!buf) {
ESDWORD[EAX] = _in; //if (buf_size) notify("'buf_size on empty buf' -A");
buf_size = 4096 * 5;
buf = malloc(4096 * 5);
//if (!buf) notify("'malloc error' -E");
} else if (count + 1 * DWSIZE4 >= buf_size) {
buf_size += 4096 * 5;
buf = realloc(buf, buf_size);
//if (!buf) notify("'realloc error' -E");
}
i = count * DWSIZE4 + buf;
ESDWORD[i] = _in;
count++; count++;
} }
:dword collection_int::get(dword pos) { :dword collection_int::get(dword pos) {
if (pos<0) || (pos>=count) return 0; if (!buf) || (pos<0) || (pos>=count) return 0;
return ESDWORD[pos * sizeof(dword) + buf]; return ESDWORD[pos * DWSIZE4 + 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 * sizeof(dword) + buf; EAX = pos * DWSIZE4 + 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 * sizeof(dword) + buf; EAX = pos1 * DWSIZE4 + buf;
EBX = pos2 * sizeof(dword) + buf; EBX = pos2 * DWSIZE4 + buf;
ESDWORD[EAX] >< ESDWORD[EBX]; ESDWORD[EAX] >< ESDWORD[EBX];
} }
@@ -77,6 +77,8 @@ struct collection_int
:void collection_int::drop() { :void collection_int::drop() {
count = 0; count = 0;
if (buf) buf = free(buf);
buf_size = 0;
} }
/*======================================================== /*========================================================
@@ -87,12 +89,11 @@ struct collection_int
struct collection struct collection
{ {
int realloc_size, count; unsigned int realloc_size, count;
dword data_start; dword data_start;
dword data_size; dword data_size;
collection_int offset; collection_int offset;
int add(); dword 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();
@@ -105,28 +106,22 @@ 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(realloc_size); data_start = malloc(data_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);
} }
} }
:int collection::add(dword in) { :dword collection::add(dword in) {
return addn(in, strlen(in)); dword len = 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 1; return data_start+offset.get(count-1);
} }
:dword collection::get(dword pos) { :dword collection::get(dword pos) {
@@ -141,7 +136,9 @@ 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 (strcmp(data_start + offset.get(i), name)==0) return i; if (streq(data_start + offset.get(i), name)) {
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; //<EFBFBD> else if (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //I urk
else if (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //<EFBFBD> else if (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //i urk
//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];
}; };
:void GetProcessInfo(dword _process_struct_pointer, _process_id) :int 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; dword socket; //socket on which the actual transfer happens
dword flags; dword flags; //flags, reflects status of the transfer using bitflags
dword write_ptr; dword write_ptr; //internal use only (where to write new data in buffer)
dword buffer_length; dword buffer_length; //internal use only (number of available bytes in buffer)
dword chunk_ptr; dword chunk_ptr; //internal use only (where the next chunk begins)
dword timestamp; dword timestamp; //internal use only (when last data was received)
dword status; dword status; //HTTP status
dword header_length; dword header_length; //length of HTTP header
dword content_ptr; dword content_ptr; //ptr to content
dword content_length; dword content_length; //total length of HTTP content
dword content_received; dword content_received; //number of currently received content bytes
char http_header; char http_header;
}; };

View File

@@ -30,8 +30,7 @@ enum {
proc_info Process; proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++) for (i=0; i<MAX_PROCESS_COUNT; i++)
{ {
GetProcessInfo(#Process, i); if (i > GetProcessInfo(#Process, i)) break;
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)
{ {
@@ -46,8 +45,7 @@ enum {
proc_info Process; proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++) for (i=0; i<MAX_PROCESS_COUNT; i++)
{ {
GetProcessInfo(#Process, i); if (i > GetProcessInfo(#Process, i)) break;
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++;
@@ -66,8 +64,7 @@ enum {
GetProcessInfo(#Self, -1); GetProcessInfo(#Self, -1);
for (i=0; i<MAX_PROCESS_COUNT; i++) for (i=0; i<MAX_PROCESS_COUNT; i++)
{ {
GetProcessInfo(#Process, i); if (i > GetProcessInfo(#Process, i)) break;
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

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

View File

@@ -16,44 +16,42 @@
; 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
bits 32 use32
%include 'mos.inc' org 0
section .text db 'MENUET01'
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
%define APPNAME "Clock" MOS_WND_SKIN_BORDER_LEFT = 5
%define STACKSIZE 1024 MOS_WND_SKIN_BORDER_RIGHT = 5
MOS_WND_SKIN_BORDER_BOTTOM = 5
; default window position/dimensions (work area) ; default window position/dimensions (work area)
%define DEFAULT_XPOS -20 DEFAULT_XPOS =-20
%define DEFAULT_YPOS 20 DEFAULT_YPOS =20
%define DEFAULT_WIDTH 110 DEFAULT_WIDTH =110
%define DEFAULT_HEIGHT 110 DEFAULT_HEIGHT =110
; minimal size (horizontal and vertical) of work area ; minimal size (horizontal and vertical) of work area
%define MIN_WIDTH 100 MIN_WIDTH =100
%define MIN_HEIGHT 100 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 'strlen.inc' include 'strfunct.inc'
%include 'str2dwrd.inc' include 'cmdline.inc'
%include 'strtok.inc' include 'adjstwnd.inc'
%include 'cmdline.inc' include 'draw.inc'
%include 'adjstwnd.inc'
%include 'draw.inc'
;******************************************************************** ;********************************************************************
; main program ; main program
@@ -89,20 +87,18 @@ main:
; call drawClock ; call drawClock
; wait up to a second for next event ; wait up to a second for next event
mov eax,MOS_SC_WAITEVENTTIMEOUT mcall SF_WAIT_EVENT_TIMEOUT,100
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,MOS_EVT_REDRAW cmp eax,EV_REDRAW
je .redraw je .redraw
cmp eax,MOS_EVT_KEY cmp eax,EV_KEY
je .key je .key
cmp eax,MOS_EVT_BUTTON cmp eax,EV_BUTTON
je .button je .button
jmp .msgpump jmp .msgpump
@@ -110,12 +106,10 @@ main:
call drawWindow call drawWindow
jmp .msgpump jmp .msgpump
.key: .key:
mov eax,MOS_SC_GETKEY mcall SF_GET_KEY
int 0x40
jmp .msgpump jmp .msgpump
.button: .button:
mov eax,MOS_SC_EXIT mcall SF_TERMINATE_PROCESS
int 0x40
jmp .msgpump jmp .msgpump
@@ -128,11 +122,7 @@ main:
getDefaultWindowColors: getDefaultWindowColors:
pushad pushad
pushfd pushfd
mov eax,MOS_SC_WINDOWPROPERTIES mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,wndColors,sizeof.system_colors
mov ebx,3
mov ecx,wndColors
mov edx,MOS_WNDCOLORS_size
int 0x40
popfd popfd
popad popad
ret ret
@@ -149,29 +139,24 @@ drawWindow:
pusha pusha
; start window redraw ; start window redraw
mov eax,MOS_SC_REDRAWSTATUS mcall SF_REDRAW,SSF_BEGIN_DRAW
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+MOS_WNDCOLORS.work] mov edx,[wndColors.work]
or edx,0x53000000 or edx,0x53000000
mov edi,label mov edi,w_label
int 0x40 mcall SF_CREATE_WINDOW
call drawClock call drawClock
; end window redraw ; end window redraw
mov eax,MOS_SC_REDRAWSTATUS mcall SF_REDRAW,SSF_END_DRAW
mov ebx,2
int 0x40
popa popa
ret ret
@@ -188,32 +173,29 @@ wndWidth dd DEFAULT_WIDTH
wndHeight dd DEFAULT_HEIGHT wndHeight dd DEFAULT_HEIGHT
; window label ; window label
label db APPNAME,0 w_label: db "Clock",0
LABEL_LEN equ ($-label-1) .end:
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
;******************************************************************** ;********************************************************************
section .bss align=4 align 4
wndColors system_colors
wndColors resb MOS_WNDCOLORS_size procInfo process_information
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 resb 257 cmdLine rb 257
alignb 4 align 4
stack resb STACKSIZE rb 1024
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,8 +20,6 @@
; 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
@@ -72,8 +70,7 @@ adjustWindowDimensions:
; clamp window dimensions ; clamp window dimensions
.clamp: .clamp:
mov eax,MOS_SC_GETSCREENMAX ; get screen dimensions mcall SF_GET_SCREEN_SIZE ; 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
@@ -136,12 +133,10 @@ 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
mov eax,MOS_SC_WINDOWPROPERTIES mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
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

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

View File

@@ -17,8 +17,6 @@
; 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
;******************************************************************** ;********************************************************************
@@ -105,8 +103,7 @@ parseCommandLine:
; output : eax contains position ; output : eax contains position
; destroys : nothing ; destroys : nothing
parsePositionParam: parsePositionParam:
push ebx push ebx esi
push esi
pushfd pushfd
; is the second char of the parameter a '-' ? ; is the second char of the parameter a '-' ?
@@ -129,8 +126,7 @@ parsePositionParam:
.rotationshyperboloid: .rotationshyperboloid:
popfd popfd
pop esi pop esi ebx
pop ebx
ret ret
; parse dimension parameter ; parse dimension parameter
@@ -147,5 +143,4 @@ parseSizeParam:
ret ret
%endif

View File

@@ -19,20 +19,34 @@
; 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
%ifdef DEBUG if DEBUG eq
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 0 macro DBG_BOARD_PRINTNEWLINE {
call dbg_board_printnewline call dbg_board_printnewline
%endm }
;******************************************************************** ;********************************************************************
@@ -44,12 +58,12 @@
; DBG_BOARD_PRINTCHAR [esi] ; DBG_BOARD_PRINTCHAR [esi]
; DBG_BOARD_PRINTCHAR [somevariable] ; DBG_BOARD_PRINTCHAR [somevariable]
;******************************************************************** ;********************************************************************
%macro DBG_BOARD_PRINTCHAR 1 macro DBG_BOARD_PRINTCHAR c1 {
push ecx push ecx
mov cl,byte %1 mov cl,byte c1
call dbg_board_printchar call dbg_board_printchar
pop ecx pop ecx
%endm }
@@ -60,10 +74,10 @@
; DBG_BOARD_PRINTDWORD 0xdeadbeef ; DBG_BOARD_PRINTDWORD 0xdeadbeef
; DBG_BOARD_PRINTDWORD [somevariable] ; DBG_BOARD_PRINTDWORD [somevariable]
;******************************************************************** ;********************************************************************
%macro DBG_BOARD_PRINTDWORD 1 macro DBG_BOARD_PRINTDWORD w1 {
push dword %1 push dword w1
call dbg_board_printdword call dbg_board_printdword
%endm }
;******************************************************************** ;********************************************************************
@@ -73,13 +87,14 @@
; 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 1+ macro DBG_BOARD_PRINTSTRINGLITERAL p1 {
jmp %%bar local .foo
%%foo db %1, 0 ; terminate string, just to be sure jmp @f
%%bar: .foo db p1, 0 ; terminate string, just to be sure
push dword %%foo @@:
push dword .foo
call dbg_board_printstring call dbg_board_printstring
%endm }
;******************************************************************** ;********************************************************************
@@ -89,22 +104,18 @@
; DBG_BOARD_PRINTSTRING esi ; DBG_BOARD_PRINTSTRING esi
; DBG_BOARD_PRINTSTRING [ebx] ; DBG_BOARD_PRINTSTRING [ebx]
;******************************************************************** ;********************************************************************
%macro DBG_BOARD_PRINTSTRING 1 macro DBG_BOARD_PRINTSTRING s1 {
push dword %1 push dword s1
call dbg_board_printstring call dbg_board_printstring
%endm }
; no input ; no input
dbg_board_printnewline: dbg_board_printnewline:
pushad pushad
pushfd pushfd
mov eax,MOS_SC_DEBUGBOARD mcall SF_BOARD,SSF_DEBUG_WRITE,10
mov ebx,1 mcall ,,13
mov ecx,10
int 0x40
mov ecx,13
int 0x40
popfd popfd
popad popad
ret ret
@@ -114,10 +125,8 @@ 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
int 0x40 mcall SF_BOARD,SSF_DEBUG_WRITE
popfd popfd
popad popad
ret ret
@@ -128,19 +137,16 @@ dbg_board_printdword:
enter 0,0 enter 0,0
pushad pushad
pushfd pushfd
mov eax,MOS_SC_DEBUGBOARD ; print 0x prefix
mov ebx,1 mcall SF_BOARD,SSF_DEBUG_WRITE,'0'
mov ecx,'0' ; print 0x prefix mcall ,,'x'
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]
int 0x40 mcall
shl edx,4 ; next nibble shl edx,4 ; next nibble
dec esi dec esi
jnz .loop jnz .loop
@@ -166,8 +172,7 @@ 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
mov eax,MOS_SC_DEBUGBOARD mcall SF_BOARD
int 0x40
jmp .loop jmp .loop
.done: .done:
popfd popfd
@@ -175,26 +180,5 @@ dbg_board_printstring:
leave leave
ret 4 ret 4
%else end if
%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,8 +17,6 @@
; 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
@@ -50,45 +48,36 @@ monthNames:
; output : nothing ; output : nothing
; destroys : nothing ; destroys : nothing
;******************************************************************** ;********************************************************************
drawClock: proc drawClock
%push drawClock_context locals
%stacksize flat i dd ?
%assign %$localsize 0 TMR1X dd ?
TMR1Y dd ?
%local i:dword, \ TMR2X dd ?
TMR1X:dword, \ TMR2Y dd ?
TMR1Y:dword, \ SECRX dd ?
TMR2X:dword, \ SECRY dd ?
TMR2Y:dword, \ MINRX dd ?
SECRX:dword, \ MINRY dd ?
SECRY:dword, \ HOURRX dd ?
MINRX:dword, \ HOURRY dd ?
MINRY:dword, \ workwidth dd ?
HOURRX:dword, \ workheight dd ?
HOURRY:dword, \ foo dd ?
workwidth:dword, \ endl
workheight:dword, \
foo:dword
enter %$localsize,0
pushad pushad
pushfd pushfd
; get window dimensions ; get window dimensions
mov eax,MOS_SC_GETPROCESSINFO mcall SF_THREAD_INFO,procInfo,-1
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.
mov eax,MOS_SC_WINDOWPROPERTIES mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT ; get skin height (eax)
mov ebx,4 ; get skin height (eax) mov ecx,[procInfo.box.width]
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 + MOS_PROCESSINFO.wndHeight] mov edx,[procInfo.box.height]
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 ?
@@ -102,9 +91,9 @@ 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 + MOS_PROCESSINFO.wndWidth] mov esi,[procInfo.box.width]
shr esi,1 shr esi,1
mov edi,[procInfo + MOS_PROCESSINFO.wndHeight] mov edi,[procInfo.box.height]
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
@@ -119,9 +108,8 @@ 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 + MOS_WNDCOLORS.work] mov edx,[wndColors.work]
mov eax,MOS_SC_DRAWBAR mcall SF_DRAW_RECT
int 0x40
popad popad
; calculate second hand radii ; calculate second hand radii
@@ -163,8 +151,7 @@ drawClock:
fstp dword [TMR2Y] fstp dword [TMR2Y]
; get system clock (edx) ; get system clock (edx)
mov eax,MOS_SC_GETSYSCLOCK mcall SF_GET_SYS_TIME
int 0x40
mov edx,eax mov edx,eax
; draw second hand ; draw second hand
@@ -173,21 +160,14 @@ 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
push ecx ; 2*pi/60
push eax stdcall getHandCoords,edi,esi,[SECRY],[SECRX],0.104719755,eax,ecx
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 + MOS_WNDCOLORS.workText] mov edx,[wndColors.work_text]
int 0x40 mcall SF_DRAW_LINE
pop ecx pop ecx
pop edx pop edx
@@ -200,21 +180,14 @@ drawClock:
mul edx mul edx
add eax,ecx add eax,ecx
mov ecx,eax ; save for later mov ecx,eax ; save for later
push ecx ; 2*pi/60/60
push eax stdcall getHandCoords,edi,esi,[MINRY],[MINRX],0.001745329,eax,ecx
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 + MOS_WNDCOLORS.workText] mov edx,[wndColors.work_text]
int 0x40 mcall SF_DRAW_LINE
pop ecx pop ecx
pop edx pop edx
@@ -229,55 +202,39 @@ drawClock:
mov edx,60*60 mov edx,60*60
mul edx mul edx
add eax,ecx add eax,ecx
push eax ; 2*pi/60/60/12
fpush32 0.000145444 ; 2*pi/60/60/12 stdcall getHandCoords,edi,esi,[HOURRY],[HOURRX],0.000145444,eax
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 + MOS_WNDCOLORS.workText] mov edx,[wndColors.work_text]
int 0x40 mcall SF_DRAW_LINE
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:
push dword [i] ; calculate start point ; calculate start point
fpush32 0.523598776 ; 2*pi/12 ; 2*pi/12
push dword [TMR1X] stdcall getHandCoords,edi,esi,[TMR1Y],[TMR1X],0.523598776,[i]
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
push dword [i] ; 2*pi/12
fpush32 0.523598776 ; 2*pi/12 stdcall getHandCoords,edi,esi,[TMR2Y],[TMR2X],0.523598776,[i]
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 + MOS_WNDCOLORS.workText] mov edx,[wndColors.work_text]
mov eax,MOS_SC_DRAWLINE mcall SF_DRAW_LINE
int 0x40
dec dword [i] dec dword [i]
jns .drawtickmarks jns .drawtickmarks
%define DATE_WIDTH 48 DATE_WIDTH =48
; calculate text start position ; calculate text start position
mov eax,[procInfo+MOS_PROCESSINFO.wndWidth] mov eax,[procInfo.box.width]
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...
@@ -292,7 +249,7 @@ 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+MOS_PROCESSINFO.wndHeight] mov edx,[procInfo.box.height]
sub edx,MOS_WND_SKIN_BORDER_BOTTOM sub edx,MOS_WND_SKIN_BORDER_BOTTOM
cmp ecx,edx cmp ecx,edx
jnae .yousuck jnae .yousuck
@@ -306,8 +263,7 @@ drawClock:
or ebx,eax or ebx,eax
; get date (edi) ; get date (edi)
mov eax,MOS_SC_GETDATE mcall SF_GET_SYS_DATE
int 0x40
mov edi,eax mov edi,eax
; display month ; display month
@@ -315,44 +271,41 @@ drawClock:
shr eax,8 shr eax,8
call bcdbin call bcdbin
; ebx contains already position ; ebx contains already position
mov ecx,[wndColors+MOS_WNDCOLORS.workText] mov ecx,[wndColors.work_text]
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
mov eax,MOS_SC_WRITETEXT mcall SF_DRAW_TEXT
int 0x40
; display date ; display date
add ebx,MOS_DWORD(3*6+3,0) add ebx,(3*6+3) shl 16
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+MOS_WNDCOLORS.workText] mov esi,[wndColors.work_text]
mov eax,MOS_SC_WRITENUMBER mcall SF_DRAW_NUMBER
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,MOS_DWORD(2*6+3,0) add edx,(2*6+3) shl 16
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+MOS_WNDCOLORS.workText] mov esi,[wndColors.work_text]
mov eax,MOS_SC_WRITENUMBER mcall SF_DRAW_NUMBER
int 0x40
.byebye: .byebye:
popfd popfd
popad popad
leave ;leave
ret ret
%pop endp
;********************************************************** ;**********************************************************
@@ -397,36 +350,26 @@ bcdbin:
; destroys: ; destroys:
; nothing ; nothing
;******************************************************************** ;********************************************************************
getHandCoords: proc getHandCoords CENTERY:dword, CENTERX:dword, RADIUSY:dword, RADIUSX:dword, DEG2RAD:dword, ANGLE:dword
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 [ebp+ANGLE] ; get angle fild dword [ANGLE] ; get angle
fmul dword [ebp+DEG2RAD] ; convert to radians fmul dword [DEG2RAD] ; convert to radians
fsincos fsincos
fmul dword [ebp+RADIUSY] ; -y * radius + clockcy fmul dword [RADIUSY] ; -y * radius + clockcy
fchs fchs
fiadd dword [ebp+CENTERY] fiadd dword [CENTERY]
fistp dword [ebp+CENTERY] fistp dword [CENTERY]
fmul dword [ebp+RADIUSX] ; x * radius + clockcx fmul dword [RADIUSX] ; x * radius + clockcx
fiadd dword [ebp+CENTERX] fiadd dword [CENTERX]
fistp dword [ebp+CENTERX] fistp dword [CENTERX]
mov ebx,[ebp+CENTERX] mov ebx,[CENTERX]
mov ecx,[ebp+CENTERY] mov ecx,[CENTERY]
popfd popfd
leave ;leave
ret 4*6 ret
endp
%endif

View File

@@ -1,5 +1,3 @@
; some strtok-like function
;
; Copyright (c) 2003 Thomas Mathys ; Copyright (c) 2003 Thomas Mathys
; killer@vantage.ch ; killer@vantage.ch
; ;
@@ -17,8 +15,94 @@
; 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
;******************************************************************** ;********************************************************************
@@ -121,5 +205,3 @@ strtok:
ret ret
.adx dd 0 .adx dd 0
%endif

View File

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

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

View File

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

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

@@ -1,49 +0,0 @@
; 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,82 +1,60 @@
; ;
; FIRE for MENUET - Compile with FASM ; Fire for Kolibri - Compile with FASM
; ;
use32 use32
org 0
org 0x0
db 'MENUET01' ; 8 byte id db 'MENUET01' ; 8 byte id
dd 1 ; header version dd 1 ; header version
dd START ; program start dd START ; program start
dd I_END ; image size dd image_end ; image size
dd mem_end ; reguired amount of memory dd mem_end ; reguired amount of memory
dd mem_end dd stacktop
dd 0,0 ; no parameters, no path dd 0,0 ; no parameters, no path
include '..\..\..\macros.inc' include '..\..\macros.inc'
include '..\..\KOSfuncs.inc'
Screen_W equ 480
START: START:
red:
; ************************************************ ; ************************************************
; ********* WINDOW DEFINITIONS AND DRAW ********** ; ********* WINDOW DEFINITIONS AND DRAW **********
; ************************************************ ; ************************************************
draw_window: draw_window:
mov eax,12 ; tell os about redraw mcall SF_REDRAW, SSF_BEGIN_DRAW
mov ebx,1
mcall
xor eax,eax ; define and draw window mcall SF_CREATE_WINDOW,<100,Screen_W+1>,<70,222>,0x01000000,0,0
mov ebx,100*65536+321
mov ecx,70*65536+222
mov edx,0x01000000
mov esi,0x00000000
mov edi,0x00000000
mcall
mcall 13,0*65536+321,0*65536+30,0 mcall SF_DRAW_RECT,<0,Screen_W+1>,<0,30>,0
mcall ,0*65536+1 ,0*65536+222 mcall ,<0,1>,<0,222>
mcall ,321*65536+1,0*65536+223 mcall ,<Screen_W+1,1>,<0,223>
mcall ,0*65536+321,222*65536+1 mcall ,<0,Screen_W+1>,<222,1>
mcall SF_DRAW_TEXT,<(Screen_W-108)/2,8>,dword 0x00FFFFFF,text,textlen-text
mov al,4 ; 'FIRE FOR KOLIBRI' mcall SF_DEFINE_BUTTON,<(Screen_W+1-19),12>,<5,12>,1,0x009a0000
mov ebx,106*65536+8
mov ecx,dword 0x00FFFFFF
mov edx,text
mov esi,textlen-text
mcall
mov al,8
mov ebx,(321-19)*65536+12 ; button start x & size
mov ecx,5*65536+12 ; button start y & size
mov edx,1 ; button number
mov esi,0x009a0000
mcall
mov ebx,ecx ;5*65536+12 mov ebx,ecx ;5*65536+12
inc edx inc edx
mcall mcall
mov ebx,18*65536+12
inc edx inc edx
mcall mcall ,<18,12>
mov ebx,31*65536+12
inc edx inc edx
mcall mcall ,<31,12>
mov al,12 ; tell os about redraw end mcall SF_REDRAW, SSF_END_DRAW
mov ebx,2
mcall
sta: ; calculate fire image sta: ; calculate fire image
mov esi, FireScreen+0x2300-80 mov esi, FireScreen.end+Screen_W*3-Screen_W/4
mov ecx, 80 mov ecx, Screen_W/4
mov eax, [FireSeed] mov eax, [FireSeed]
NEWLINE: NEWLINE:
@@ -89,7 +67,7 @@ sta: ; calculate fire image
mov [FireSeed], eax mov [FireSeed], eax
mov ecx, 0x2300-80 mov ecx, (Screen_W*200)/8+Screen_W*3-Screen_W/4
sub esi, ecx sub esi, ecx
xor edx, edx xor edx, edx
xor eax, eax xor eax, eax
@@ -103,7 +81,7 @@ sta: ; calculate fire image
add eax, edx add eax, edx
mov dl, [esi] mov dl, [esi]
add eax, edx add eax, edx
mov dl, [esi + 80] mov dl, [esi + Screen_W/4]
jmp typedone jmp typedone
notype1: notype1:
@@ -114,7 +92,7 @@ sta: ; calculate fire image
; mov dl, [esi - 2] ; mov dl, [esi - 2]
; add eax, edx ; add eax, edx
lea eax, [eax + edx*2] lea eax, [eax + edx*2]
mov dl, [esi + 78] mov dl, [esi + Screen_W/4-2]
; notype2: ; notype2:
; type 2 is never used ; type 2 is never used
@@ -124,7 +102,7 @@ sta: ; calculate fire image
; add eax, edx ; add eax, edx
; mov dl, [esi] ; mov dl, [esi]
; add eax, edx ; add eax, edx
; mov dl, [esi + 80] ; mov dl, [esi + Screen_W/4]
; notype3: ; notype3:
typedone: typedone:
@@ -135,12 +113,10 @@ typedone:
ZERO: ZERO:
mov [esi - 81], al mov [esi - Screen_W/4-1], al
loop FIRELOOP loop FIRELOOP
mov al, 5 ; in this moment always high 24 bits of eax are zero! mcall SF_SLEEP,[delay]
mov ebx,[delay]
mcall
inc [calc] inc [calc]
cmp [calc], byte 2 cmp [calc], byte 2
@@ -169,7 +145,7 @@ typedone:
mov [edi+3],ecx mov [edi+3],ecx
mov [edi+6],ecx mov [edi+6],ecx
mov [edi+9],cx mov [edi+9],cx
lea ebx, [edi+320*3] lea ebx, [edi+Screen_W*3]
mov [ebx+0],ecx mov [ebx+0],ecx
mov [ebx+3],ecx mov [ebx+3],ecx
mov [ebx+6],ecx mov [ebx+6],ecx
@@ -177,50 +153,43 @@ typedone:
add edi,12 add edi,12
inc edx inc edx
cmp edx,80 cmp edx,Screen_W/4
jnz nnl jnz nnl
xor edx,edx xor edx,edx
add edi,320*3 add edi,Screen_W*3
nnl: nnl:
cmp esi,FireScreen+8000; 0x2000 cmp esi,FireScreen.end
jnz newc jnz newc
mov al,7 ; display image
; high 24 bits of eax are zero!
pop ebx pop ebx
mov ecx,4*80*65536+200 mcall SF_PUT_IMAGE,,<Screen_W,200>,<1,22>
mov edx,1*65536+22
mcall
nodrw: nodrw:
mov eax,11 ; check if os wants to talk to us mcall SF_CHECK_EVENT ; check if os wants to talk to us
mcall
dec eax dec eax
jz red jz draw_window
cmp al, 3-1 cmp al, 3-1
jnz nob4 jnz nob4
button: ; get button id button: ; get button id
mov al,17 mcall SF_GET_BUTTON
mcall
shr eax, 8 shr eax, 8
dec eax dec eax
jnz noclose jnz @f
or eax,-1 ; close this program mcall SF_TERMINATE_PROCESS ; close this program
mcall @@:
noclose:
dec eax ; change fire type dec eax ; change fire type
jnz nob2 jnz @f
xor [type], 1 xor [type], 1
nob2: @@:
dec eax ; change delay dec eax ; change delay
jnz nob3 jnz @f
xor [delay], 1 xor [delay], 1
nob3: @@:
dec eax ; change color dec eax ; change color
jnz nob4 jnz nob4
@@ -233,7 +202,7 @@ typedone:
fcok: fcok:
mov [fcolor],eax mov [fcolor],eax
mov edi,ImageData mov edi,ImageData
mov ecx,(320*600)/4 mov ecx,(Screen_W*200*3)/4
xor eax,eax xor eax,eax
rep stosd rep stosd
@@ -246,19 +215,23 @@ fcolor dd 2
xx db 'x' xx db 'x'
type db 0 type db 0
calc db 0 calc db 0
delay dd 0 delay dd 1
FireSeed dd 0x1234 FireSeed dd 0x1234
text: db 'FIRE FOR KOLIBRI' text: db 'Fire for Kolibri'
textlen: textlen:
I_END: align 4
image_end:
FireScreen: FireScreen:
rb 0x2300 rb (Screen_W*200)/8 ;wisible fire
.end:
rb Screen_W*3 ;hidden fire (need for generation)
ImageData: ImageData:
rb 320*200*3 rb Screen_W*200*3
; stack ; stack
align 512 align 512
rb 512 rb 512
stacktop:
mem_end: mem_end:

View File

@@ -0,0 +1,2 @@
@fasm firework.asm firework
@pause

View File

@@ -21,9 +21,14 @@ use32
dd stacktop ; reserved=no extended header dd stacktop ; reserved=no extended header
dd 0, 0 dd 0, 0
include '../../../macros.inc' include '../../macros.inc'
SCREEN_WIDTH = 320 include '../../KOSfuncs.inc'
SCREEN_HEIGHT = 200
SCREEN_WIDTH = 600 ;.. mod 8 == 0
Screen_W dd SCREEN_WIDTH
Screen_H dd 400
lost_bytes dd 0
SIMD equ SSE SIMD equ SSE
SIMD_BYTES = 8 SIMD_BYTES = 8
; SSE 8 ; SSE 8
@@ -46,9 +51,11 @@ PART_SIZE = 20
macro shade macro shade
{ {
local .lop local .lop
mov ecx, [Screen_H]
imul ecx, [Screen_W]
shr ecx, 3 ;ecx = Screen_W * Screen_H / SIMD_BYTES
mov edi, [buffer]
if SIMD eq SSE if SIMD eq SSE
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
mov edi, buffer
movq mm1, qword [sub_mask] movq mm1, qword [sub_mask]
.lop: .lop:
movq mm0, [edi] movq mm0, [edi]
@@ -57,8 +64,6 @@ if SIMD eq SSE
add edi, SIMD_BYTES add edi, SIMD_BYTES
loop .lop loop .lop
else if SIMD eq AVX else if SIMD eq AVX
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
mov edi, buffer
vmovdqa xmm1, xword [sub_mask] vmovdqa xmm1, xword [sub_mask]
.lop: .lop:
vmovdqa xmm0, [edi] vmovdqa xmm0, [edi]
@@ -67,8 +72,6 @@ else if SIMD eq AVX
add edi, SIMD_BYTES add edi, SIMD_BYTES
loop .lop loop .lop
else if SIMD eq AVX2 else if SIMD eq AVX2
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
mov edi, buffer
vmovdqa ymm1, yword [sub_mask] vmovdqa ymm1, yword [sub_mask]
.lop: .lop:
vmovdqa ymm0, [edi] vmovdqa ymm0, [edi]
@@ -77,8 +80,6 @@ else if SIMD eq AVX2
add edi, SIMD_BYTES add edi, SIMD_BYTES
loop .lop loop .lop
else if SIMD eq AVX512 else if SIMD eq AVX512
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
mov edi, buffer
vmovdqa64 zmm1, zword [sub_mask] vmovdqa64 zmm1, zword [sub_mask]
.lop: .lop:
vmovdqa64 zmm0, [edi] vmovdqa64 zmm0, [edi]
@@ -91,10 +92,18 @@ end if
macro blur_prepare macro blur_prepare
{ {
mov ecx, (SCREEN_WIDTH * SCREEN_HEIGHT - SCREEN_WIDTH * 2 - SIMD_BYTES*2) / SIMD_BYTES mov ecx, [Screen_H]
mov edi, buffer + SCREEN_WIDTH + SIMD_BYTES dec ecx
dec ecx
imul ecx, [Screen_W]
sub ecx, SIMD_BYTES*2
shr ecx, 3 ;ecx = (Screen_W * (Screen_H - 2) - SIMD_BYTES*2) / SIMD_BYTES
mov edi, SIMD_BYTES
add edi, [buffer]
add edi, [Screen_W]
} }
; eax = [Screen_W]
macro blur macro blur
{ {
local .lop local .lop
@@ -104,8 +113,10 @@ if SIMD eq SSE
movq mm1, [edi + 1] movq mm1, [edi + 1]
movq mm2, [edi - 1] movq mm2, [edi - 1]
movq mm3, mm0 movq mm3, mm0
movq mm4, [edi - SCREEN_WIDTH] neg eax
movq mm5, [edi + SCREEN_WIDTH] movq mm4, [edi + eax]
neg eax
movq mm5, [edi + eax]
pavgb mm0, mm1 ; mm0 = avg(cur,cur+1) pavgb mm0, mm1 ; mm0 = avg(cur,cur+1)
pavgb mm3, mm2 ; mm3 = avg(cur,cur-1) pavgb mm3, mm2 ; mm3 = avg(cur,cur-1)
@@ -120,11 +131,13 @@ else if SIMD eq AVX
.lop: .lop:
vmovdqa xmm0, [edi] vmovdqa xmm0, [edi]
vmovdqa xmm1, xmm0 vmovdqa xmm1, xmm0
vmovdqa xmm2, [edi - SCREEN_WIDTH] neg eax
vmovdqa xmm2, [edi + eax]
neg eax
vpavgb xmm0, xmm0, [edi + 1] vpavgb xmm0, xmm0, [edi + 1]
vpavgb xmm1, xmm1, [edi - 1] vpavgb xmm1, xmm1, [edi - 1]
vpavgb xmm2, xmm2, [edi + SCREEN_WIDTH] vpavgb xmm2, xmm2, [edi + eax]
vpavgb xmm1, xmm1, xmm2 vpavgb xmm1, xmm1, xmm2
vpavgb xmm0, xmm0, xmm1 vpavgb xmm0, xmm0, xmm1
@@ -135,11 +148,13 @@ else if SIMD eq AVX2
.lop: .lop:
vmovdqa ymm0, [edi] vmovdqa ymm0, [edi]
vmovdqa ymm1, ymm0 vmovdqa ymm1, ymm0
vmovdqa ymm2, [edi - SCREEN_WIDTH] neg eax
vmovdqa ymm2, [edi + eax]
neg eax
vpavgb ymm0, ymm0, [edi + 1] vpavgb ymm0, ymm0, [edi + 1]
vpavgb ymm1, ymm1, [edi - 1] vpavgb ymm1, ymm1, [edi - 1]
vpavgb ymm2, ymm2, [edi + SCREEN_WIDTH] vpavgb ymm2, ymm2, [edi + eax]
vpavgb ymm1, ymm1, ymm2 vpavgb ymm1, ymm1, ymm2
vpavgb ymm0, ymm0, ymm1 vpavgb ymm0, ymm0, ymm1
@@ -150,11 +165,13 @@ else if SIMD eq AVX512
.lop: .lop:
vmovdqa64 zmm0, [edi] vmovdqa64 zmm0, [edi]
vmovdqa64 zmm1, zmm0 vmovdqa64 zmm1, zmm0
vmovdqa64 zmm2, [edi - SCREEN_WIDTH] neg eax
vmovdqa64 zmm2, [edi + eax]
neg eax
vpavgb zmm0, zmm0, [edi + 1] vpavgb zmm0, zmm0, [edi + 1]
vpavgb zmm1, zmm1, [edi - 1] vpavgb zmm1, zmm1, [edi - 1]
vpavgb zmm2, zmm2, [edi + SCREEN_WIDTH] vpavgb zmm2, zmm2, [edi + eax]
vpavgb zmm1, zmm1, zmm2 vpavgb zmm1, zmm1, zmm2
vpavgb zmm0, zmm0, zmm1 vpavgb zmm0, zmm0, zmm1
@@ -164,6 +181,7 @@ else if SIMD eq AVX512
end if end if
} }
; eax = [Screen_W]
macro blur_right macro blur_right
{ {
local .lop local .lop
@@ -171,8 +189,8 @@ if SIMD eq SSE
.lop: .lop:
movq mm0, [edi] movq mm0, [edi]
movq mm1, [edi + 1] movq mm1, [edi + 1]
movq mm2, [edi + SCREEN_WIDTH] movq mm2, [edi + eax]
movq mm3, [edi + SCREEN_WIDTH + 1] movq mm3, [edi + eax + 1]
pavgb mm0, mm1 pavgb mm0, mm1
pavgb mm3, mm2 pavgb mm3, mm2
pavgb mm0, mm3 pavgb mm0, mm3
@@ -182,9 +200,9 @@ if SIMD eq SSE
else if SIMD eq AVX else if SIMD eq AVX
.lop: .lop:
vmovdqa xmm0, [edi] vmovdqa xmm0, [edi]
vmovdqu xmm1, [edi + SCREEN_WIDTH + 1] vmovdqu xmm1, [edi + eax + 1]
vpavgb xmm2, xmm0, [edi + 1] vpavgb xmm2, xmm0, [edi + 1]
vpavgb xmm3, xmm1, [edi + SCREEN_WIDTH] vpavgb xmm3, xmm1, [edi + eax]
vpavgb xmm4, xmm2, xmm3 vpavgb xmm4, xmm2, xmm3
vmovdqa [edi], xmm4 vmovdqa [edi], xmm4
add edi, SIMD_BYTES add edi, SIMD_BYTES
@@ -192,9 +210,9 @@ else if SIMD eq AVX
else if SIMD eq AVX2 else if SIMD eq AVX2
.lop: .lop:
vmovdqa ymm0, [edi] vmovdqa ymm0, [edi]
vmovdqu ymm1, [edi + SCREEN_WIDTH + 1] vmovdqu ymm1, [edi + eax + 1]
vpavgb ymm2, ymm0, [edi + 1] vpavgb ymm2, ymm0, [edi + 1]
vpavgb ymm3, ymm1, [edi + SCREEN_WIDTH] vpavgb ymm3, ymm1, [edi + eax]
vpavgb ymm4, ymm2, ymm3 vpavgb ymm4, ymm2, ymm3
vmovdqa [edi], ymm4 vmovdqa [edi], ymm4
add edi, SIMD_BYTES add edi, SIMD_BYTES
@@ -202,9 +220,9 @@ else if SIMD eq AVX2
else if SIMD eq AVX512 else if SIMD eq AVX512
.lop: .lop:
vmovdqa64 zmm0, [edi] vmovdqa64 zmm0, [edi]
vmovdqu64 zmm1, [edi + SCREEN_WIDTH + 1] vmovdqu64 zmm1, [edi + eax + 1]
vpavgb zmm2, zmm0, [edi + 1] vpavgb zmm2, zmm0, [edi + 1]
vpavgb zmm3, zmm1, [edi + SCREEN_WIDTH] vpavgb zmm3, zmm1, [edi + eax]
vpavgb zmm4, zmm2, zmm3 vpavgb zmm4, zmm2, zmm3
vmovdqa64 [edi], zmm4 vmovdqa64 [edi], zmm4
add edi, SIMD_BYTES add edi, SIMD_BYTES
@@ -217,12 +235,12 @@ STARTAPP:
init_palette: init_palette:
mov edi, pal mov edi, pal
xor eax, eax xor eax, eax
red_loop: @@:
stosd stosd
stosd stosd
add eax, 0x040000 add eax, 0x040000
and eax, 0xFFFFFF and eax, 0xFFFFFF
jnz red_loop jnz @b
mov eax, 63*4 SHL 16 mov eax, 63*4 SHL 16
@@: @@:
@@ -231,11 +249,12 @@ red_loop:
add ax, 0x0404 add ax, 0x0404
jnc @b jnc @b
;zero_buffer: ;init buffer
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / 4 mcall SF_SYS_MISC,SSF_HEAP_INIT
; mov edi, buffer mov ecx,[Screen_W]
xor eax, eax imul ecx,[Screen_H]
rep stosd mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [buffer],eax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Main Functions ; Main Functions
@@ -253,30 +272,63 @@ end virtual
jmp MAIN jmp MAIN
align 4
OnResize:
mov ecx,[Screen_W]
imul ecx,[Screen_H]
;ecx = SCREEN_W*SCREEN_H
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buffer]
ret
align 4
red: red:
mcall 9, proc_info, -1 mcall SF_THREAD_INFO, proc_info, -1
x = 100 areacolor = 0x53224466
y = 70 mcall SF_REDRAW, SSF_BEGIN_DRAW
xsize = SCREEN_WIDTH+9 mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
ysize = SCREEN_HEIGHT+4 add eax, 4
areacolor = 0x54224466 push eax ;for test resize
mov eax, 12 ; function 12:tell os about windowdraw add eax, [Screen_H]
mov ebx, 1 ; 1, start of draw lea ecx, [(70 shl 16) + eax]
int 0x40 mov ebx, [Screen_W]
mov eax, 48 lea ebx, [(100 shl 16) + 9 + ebx]
mov ebx, 4 mcall SF_CREATE_WINDOW,,, areacolor,, window_title
int 0x40
lea ecx, [(y SHL 16) + ysize + eax]
xor eax, eax ; function 0 : define and draw window
mov ebx, (x SHL 16) + xsize ; [x start] *65536 + [x size]
mov edx, areacolor ; color of work area RRGGBB
mov edi, window_title
int 0x40
mov eax, 12 ; end of redraw
mov ebx, 2
int 0x40
;test resize
pop eax
cmp dword[proc_info.box.height],0
je .resize_end
sub eax,[proc_info.box.height]
neg eax
cmp eax,[Screen_H]
je .end_h
cmp eax,32 ;min height
jge @f
mov eax,32
@@:
mov [Screen_H],eax
xor eax,eax
mov [Screen_W],eax
.end_h:
mov eax,[proc_info.box.width]
sub eax,9
mov [lost_bytes],eax
and eax,0xffff-(SIMD_BYTES-1)
cmp eax,[Screen_W]
je .resize_end
cmp eax,64 ;min width
jge @f
mov eax,64
@@:
mov [Screen_W],eax
call OnResize
.resize_end:
mcall SF_REDRAW, SSF_END_DRAW ; end of redraw
align 4
MAIN: MAIN:
test [proc_info.wnd_state], 0x04 test [proc_info.wnd_state], 0x04
jnz still jnz still
@@ -291,11 +343,15 @@ MAIN:
cmp eax, 5 cmp eax, 5
jb .new_particle jb .new_particle
cmp eax, SCREEN_WIDTH - 5 mov edx, [Screen_W]
sub edx, 5
cmp eax, edx
jge .new_particle jge .new_particle
cmp ebx, 5 cmp ebx, 5
jb .new_particle jb .new_particle
cmp ebx, SCREEN_HEIGHT - 5 mov edx, [Screen_H]
sub edx, 5
cmp ebx, edx
jl .part_ok jl .part_ok
.new_particle: .new_particle:
@@ -303,9 +359,11 @@ MAIN:
jmp .advance_particles jmp .advance_particles
.part_ok: .part_ok:
imul edi, ebx, SCREEN_WIDTH mov edi, ebx
imul edi, [Screen_W]
mov dl, [ebp+COLOR_OFFSET] mov dl, [ebp+COLOR_OFFSET]
mov [buffer+eax+edi], dl add eax,[buffer]
mov [eax+edi], dl
mov eax, [ebp+X_SPEED_OFFSET] mov eax, [ebp+X_SPEED_OFFSET]
add [ebp+X_OFFSET], eax add [ebp+X_OFFSET], eax
@@ -324,6 +382,7 @@ MAIN:
shade shade
; jmp .copy_buffer_to_video ; jmp .copy_buffer_to_video
blur_prepare blur_prepare
mov eax, [Screen_W]
test dword [blur_right_flag] , 0x800000 test dword [blur_right_flag] , 0x800000
jnz .do_blur_right jnz .do_blur_right
blur blur
@@ -339,22 +398,32 @@ MAIN:
.copy_buffer_to_video: .copy_buffer_to_video:
mcall 48, 4 mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
lea edx, [(5 SHL 16) + eax] lea edx, [(5 shl 16) + eax]
mov eax, 65
mov ebx, buffer
mov ecx, (SCREEN_WIDTH SHL 16) + SCREEN_HEIGHT
push 8 push 8
pop esi pop esi
mov edi, pal
xor ebp, ebp xor ebp, ebp
int 0x40 mov ecx, [Screen_W]
shl ecx, 16
add ecx, [Screen_H]
mcall SF_PUT_IMAGE_EXT, [buffer],,,, pal
and [lost_bytes], SIMD_BYTES-1
jz still
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
mov ecx, eax
shl ecx, 16
add ecx, [Screen_H]
mov ebx, [Screen_W]
add ebx, 5 ;left border
shl ebx, 16
add ebx, [lost_bytes]
xor edx, edx
mcall SF_DRAW_RECT
align 4
still: still:
mov eax, 11 ; Test if there is an event in the queue. mcall SF_WAIT_EVENT_TIMEOUT, 1
int 0x40
dec eax ; redraw request ? dec eax ; redraw request ?
jz red jz red
@@ -365,10 +434,9 @@ still:
jmp MAIN jmp MAIN
align 4
key: key:
mov eax, 2 mcall SF_GET_KEY
int 0x40
; cmp ah, 1 ; Test Esc in Scan ; cmp ah, 1 ; Test Esc in Scan
; je close_app ; je close_app
cmp ah, 27 ; Test Esc in ASCII cmp ah, 27 ; Test Esc in ASCII
@@ -378,8 +446,7 @@ key:
button: button:
; we have only one button, close ; we have only one button, close
close_app: close_app:
mov eax, -1 ; close this program mcall SF_TERMINATE_PROCESS
int 0x40
init_particle: init_particle:
rdtsc rdtsc
@@ -389,7 +456,7 @@ init_particle:
call rand call rand
cdq cdq
;xor dx, dx ;xor dx, dx
mov ebx, SCREEN_WIDTH mov ebx, [Screen_W]
div ebx div ebx
shl edx, 6 shl edx, 6
mov [4 + global_x], edx mov [4 + global_x], edx
@@ -397,7 +464,7 @@ init_particle:
call rand call rand
cdq cdq
;xor dx, dx ;xor dx, dx
mov ebx, SCREEN_HEIGHT mov ebx, [Screen_H]
div ebx div ebx
shl edx, 6 shl edx, 6
mov [4 + global_y], edx mov [4 + global_y], edx
@@ -444,7 +511,8 @@ proc_info process_information
align 16 align 16
pal rb 256 * 4 pal rb 256 * 4
align SIMD_BYTES align SIMD_BYTES
buffer rb SCREEN_WIDTH * SCREEN_HEIGHT buffer dd 0
E_END: align 4
rd 0x200 rd 1024
stacktop: stacktop:
E_END:

View File

@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR") HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua") tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir()) add_include(tup.getvariantdir())

View File

@@ -1,48 +1,112 @@
; Originally written by Jarek Pelczar ; Originally written by Jarek Pelczar
include "lang.inc" include "lang.inc"
include "..\..\..\macros.inc" include "..\..\macros.inc"
include "..\..\KOSfuncs.inc"
WND_SIZE_X = 320 KOS_APP_START
WND_SIZE_Y = 200
WND_SIZE_X dd 640
WND_SIZE_Y dd 400
if lang eq ru_RU
title db '<27>« §¬ ',0
else
title db 'Plasma',0
end if
MEOS_APP_START
CODE CODE
mcall SF_SYS_MISC,SSF_HEAP_INIT
mov ecx,[WND_SIZE_X]
imul ecx,[WND_SIZE_Y]
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [virtual_screen_8],eax
fninit fninit
mcall 40,101b mcall SF_SET_EVENTS_MASK, 101b
call init_palette call init_palette
call init_texture call init_texture
jmp .paint_window jmp .paint_window
.event_loop: .event_loop:
mcall 23,1 mcall SF_WAIT_EVENT_TIMEOUT, 1
test eax,eax test eax,eax
je .draw_screen je .draw_screen
dec eax dec eax
je .paint_window je .paint_window
or eax,-1 mcall SF_TERMINATE_PROCESS
mcall
.draw_screen: .draw_screen:
xor ebp,ebp xor ebp,ebp
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette mov ecx,[WND_SIZE_X]
shl ecx,16
add ecx,[WND_SIZE_Y]
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
call rotate_pal call rotate_pal
jmp .event_loop jmp .event_loop
.paint_window: .paint_window:
mcall 12,1 mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall 48,4 ; get skin height ;if window resize
lea ecx,[eax + (110 shl 16) + WND_SIZE_Y + 4] mcall SF_THREAD_INFO,procinfo,-1
cmp dword[procinfo.box.height],0
je .resize_end
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
add eax,4
sub eax,[procinfo.box.height]
neg eax
cmp eax,[WND_SIZE_Y]
je .end_h
cmp eax,32 ;min height
jge @f
mov eax,32
@@:
mov [WND_SIZE_Y],eax
xor eax,eax
mov [WND_SIZE_X],eax
.end_h:
mov eax,[procinfo.box.width]
sub eax,9
cmp eax,[WND_SIZE_X]
je .resize_end
cmp eax,64 ;min width
jge @f
mov eax,64
@@:
mov [WND_SIZE_X],eax
call OnResize
call init_texture
.resize_end:
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
lea ecx,[eax + (110 shl 16) + 4]
add ecx,[WND_SIZE_Y]
mov edi,title mov edi,title
mcall 0,<110,WND_SIZE_X+9>,,0x74000000 mov ebx,[WND_SIZE_X]
add ebx,(110 shl 16)+9
mcall SF_CREATE_WINDOW,,,0x73000000
xor ebp,ebp xor ebp,ebp
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette mov ecx,[WND_SIZE_X]
shl ecx,16
add ecx,[WND_SIZE_Y]
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
mcall 12,2 mcall SF_REDRAW, SSF_END_DRAW
jmp .event_loop jmp .event_loop
align 4
OnResize:
mov ecx,[WND_SIZE_X]
imul ecx,[WND_SIZE_Y]
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [virtual_screen_8],eax
ret
align 4
init_palette: init_palette:
mov edi,_palette mov edi,_palette
mov ecx,64 mov ecx,64
@@ -92,7 +156,7 @@ init_texture:
mov [_fpom16],180 mov [_fpom16],180
fidiv [_fpom16] fidiv [_fpom16]
fstp [_st_rad] fstp [_st_rad]
mov edi,virtual_screen_8 mov edi,[virtual_screen_8]
cdq cdq
.itex_vertical: .itex_vertical:
xor ecx,ecx xor ecx,ecx
@@ -120,10 +184,10 @@ init_texture:
inc eax inc eax
stosb stosb
inc ecx inc ecx
cmp ecx,WND_SIZE_X cmp ecx,[WND_SIZE_X]
jne .itex_horizontal jne .itex_horizontal
inc edx inc edx
cmp edx,WND_SIZE_Y cmp edx,[WND_SIZE_Y]
jne .itex_vertical jne .itex_vertical
ret ret
@@ -141,7 +205,6 @@ rotate_pal:
DATA DATA
_multiplier dd 63.5 _multiplier dd 63.5
title db 'Plasma',0
UDATA UDATA
_fpom32 rd 1 _fpom32 rd 1
@@ -149,7 +212,7 @@ UDATA
_st_rad rd 1 _st_rad rd 1
_palette: rd 256 _palette: rd 256
virtual_screen_8: virtual_screen_8 rd 1
rb WND_SIZE_X*WND_SIZE_Y procinfo process_information
MEOS_APP_END KOS_APP_END

View File

@@ -0,0 +1,7 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
tup.rule({"tube.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "tube")

View File

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

View File

@@ -1,264 +0,0 @@
; (<28>) ( ) <20> ) ( ) 256b intro by baze/3SC for Syndeecate 2001
; <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> loveC: thanks, Serzh: eat my socks dude ;]
; ( ) ( ) ( ) ( ) e-mail: baze@stonline.sk, web: www.3SC.sk
; Menuet port by VT
appname equ 'TUBE - FPU'
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x40000
dd 0x40000
dd 0,0
include '..\..\..\macros.inc'
START:
call draw_window
call init_tube
push ebx
still:
pop ebx
call MAIN
push ebx
mov eax,23
mov ebx,1
mcall
cmp eax,1
jne no_red
call draw_window
jmp still
no_red:
cmp eax,0
je still
or eax,-1
mcall
SCREEN equ 160
PIXBUF equ 200h
EYE equ EYE_P-2
MAIN:
add bh,10;8
mov edi,PIXBUF
fadd dword [di-PIXBUF+TEXUV-4]
push di
mov dx,-80
TUBEY:
mov bp,-160
TUBEX:
mov si,TEXUV
fild word [si-TEXUV+EYE]
mov [si],bp
fild word [si]
mov [si],dx
fild word [si]
mov cl,2
ROTATE:
fld st3
fsincos
fld st2
fmul st0,st1
fld st4
fmul st0,st3
db 0xde,0xe9 ; fsubp st1,st0
db 0xd9,0xcb ; fxch st3
fmulp st2,st0
fmulp st3,st0
faddp st2,st0
db 0xd9,0xca ; fxch st2
loop ROTATE
fld st1
db 0xdc,0xc8 ; fmul st0,st
fld st1
db 0xdc,0xc8 ; fmul st0,st
faddp st1,st0
fsqrt
db 0xde,0xfb ; fdivp st3,st0
fpatan
fimul word [si-4]
fistp word [si]
fimul word [si-4]
fistp word [si+1]
mov si,[si]
lea ax,[bx+si]
add al,ah
and al,64
mov al,-5
jz STORE_1
shl si,2
lea ax,[bx+si]
sub al,ah
mov al,-16
jns STORE_1
shl si,1
mov al,-48
STORE_1:
; add al,[ebx+esi+0x80000]
add [di],al
inc di
inc bp
cmp bp,160
EYE_P:
jnz TUBEX
inc dx
cmp dx,80
jnz TUBEY
call display_image
pop si
mov ch,SCREEN*320/256
BLUR:
inc si
sar byte [si],2
loop BLUR
ret
display_image:
pusha
mov esi,PIXBUF
mov edi,0x10000
newp:
movzx edx,byte [esi]
shl edx,4
; mov dh,dl
mov [edi],edx
add edi,3
inc esi
cmp esi,320*160+PIXBUF
jbe newp
mov eax,7
mov ecx,320*65536+160
xor edx,edx
mov ebx,0x10000
mcall
popa
ret
draw_window:
pusha
mcall 12, 1
mcall 48, 4 ;get skin width
lea ecx,[100*65536+164+eax]
xor eax,eax
mov ebx,100*65536+329
mov edx,0x74000000
mov edi,title
mcall
mcall 12, 2
popa
ret
title db appname,0
db 41,0,0xC3,0x3C
TEXUV:
init_tube:
mov ecx,256
PAL1:
mov dx,3C8h
mov ax,cx
inc dx
sar al,1
js PAL2
mul al
shr ax,6
PAL2:
mov al,0
jns PAL3
sub al,cl
shr al,1
shr al,1
PAL3:
mov bx,cx
mov [ebx+0x1000],bh
loop PAL1
mov ecx,256
TEX:
mov bx,cx
add ax,cx
rol ax,cl
mov dh,al
sar dh,5
adc dl,dh
adc dl,[ebx+255+0x1000]
shr dl,1
mov [ebx+0x1000],dl
not bh
mov [ebx+0x1000],dl
loop TEX
fninit
fldz
ret
I_END:

View File

@@ -0,0 +1,321 @@
; 256b intro by baze/3SC for Syndeecate 2001
; loveC: thanks, Serzh: eat my socks dude ;]
; e-mail: baze@stonline.sk, web: www.3SC.sk
; Menuet port by VT
use32
org 0
db 'MENUET01'
dd 1,START,image_end,memory_end,stacktop,0,0
include '../../macros.inc'
include '../../KOSfuncs.inc'
include 'lang.inc'
if lang eq ru_RU
title db '<27><>㡠 - FPU',0
else
title db 'Tube - FPU',0
end if
SCREEN_W dd 640-10 ;10 px for borders
SCREEN_H dd 400-10
align 4
START:
mcall SF_SYS_MISC,SSF_HEAP_INIT
mov ecx,[SCREEN_W]
imul ecx,[SCREEN_H]
;ecx = SCREEN_W*SCREEN_H
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [PIXBUF],eax
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [buf1],eax
lea ecx,[ecx+2*ecx]
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [buf2],eax
call draw_window
call init_tube
push ebx
still:
pop ebx
call MAIN
push ebx
mcall SF_WAIT_EVENT_TIMEOUT,1
cmp eax,EV_REDRAW
jne no_red
call draw_window
jmp still
no_red:
or eax,eax
jz still
mcall SF_TERMINATE_PROCESS
align 4
OnResize:
mov ecx,[SCREEN_W]
imul ecx,[SCREEN_H]
;ecx = SCREEN_W*SCREEN_H
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[PIXBUF]
mov [PIXBUF],eax
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buf1]
mov [buf1],eax
lea ecx,[ecx+2*ecx]
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buf2]
mov [buf2],eax
ret
align 4
MAIN:
;edx - coord y
;ebp - coord x
;edi - pixel buffer
add ebx,10 shl 8
mov edi,[PIXBUF]
fadd dword [TEXUV-4]
push edi
mov edx,[SCREEN_H]
inc edx ;fix (height%2)==1
shr edx,1
neg edx ;edx=-SCREEN_H/2
align 4
TUBEY:
mov ebp,[SCREEN_W]
inc ebp ;fix (width%2)==1
shr ebp,1
neg ebp ;ebp=-SCREEN_W/2
align 4
TUBEX:
mov esi,TEXUV
fild dword [SCREEN_W]
fld1
fld1
faddp
fdivp ;st0=SCREEN_W/2
mov [esi],ebp
fild word [esi]
mov [esi],edx
fild word [esi]
mov cl,2
ROTATE:
fld st3
fsincos
fld st2
fmul st0,st1
fld st4
fmul st0,st3
fsubp st1,st0
fxch st3
fmulp st2,st0
fmulp st3,st0
faddp st2,st0
fxch st2
loop ROTATE
fld st1
db 0xdc,0xc8 ;fmul st0,st ?
fld st1
db 0xdc,0xc8 ;fmul st0,st ?
faddp st1,st0
fsqrt
fdivp st3,st0
fpatan
fimul word [esi-4]
fistp word [esi]
fimul word [esi-4]
fistp word [esi+1]
mov esi,[esi]
lea eax,[ebx+esi]
add al,ah
and al,64
mov al,-5
jz STORE_1
shl esi,2
lea eax,[ebx+esi]
sub al,ah
mov al,-16
jns STORE_1
shl esi,1
mov al,-48
STORE_1:
; add al,[ebx+esi+0x80000]
add [edi],al
inc edi
inc ebp
mov eax,[SCREEN_W]
shr eax,1 ;eax=SCREEN_W/2
cmp ebp,eax
jnz TUBEX
inc edx
mov eax,[SCREEN_H]
shr eax,1 ;eax=SCREEN_H/2
cmp edx,eax
jnz TUBEY
call display_image
pop esi
mov ecx,[SCREEN_W]
imul ecx,[SCREEN_H]
align 4
BLUR:
inc esi
sar byte [esi],2
loop BLUR
ret
align 4
display_image:
pusha
mov esi,[PIXBUF]
mov edi,[buf2]
mov eax,[SCREEN_W]
imul eax,[SCREEN_H]
add eax,esi
align 4
newp:
movzx edx,byte [esi]
shl edx,4
mov [edi],edx
add edi,3
inc esi
cmp esi,eax
jbe newp
xor edx,edx
mov ecx,[SCREEN_W]
shl ecx,16
add ecx,[SCREEN_H]
mcall SF_PUT_IMAGE,[buf2]
popa
ret
align 4
draw_window:
pusha
mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
add eax,[SCREEN_H]
lea ecx,[100*65536+4+eax]
mov ebx,[SCREEN_W]
add ebx,(100 shl 16)+9
mcall SF_CREATE_WINDOW,,, 0x73000000,,title
mcall SF_THREAD_INFO,procinfo,-1
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
add eax,4
sub eax,[procinfo.box.height]
neg eax
cmp eax,[SCREEN_H]
je .end_h
cmp eax,32 ;min height
jge @f
mov eax,32
@@:
mov [SCREEN_H],eax
xor eax,eax
mov [SCREEN_W],eax
.end_h:
mov eax,[procinfo.box.width]
sub eax,9
cmp eax,[SCREEN_W]
je .resize_end
cmp eax,64 ;min width
jge @f
mov eax,64
@@:
mov [SCREEN_W],eax
call OnResize
.resize_end:
mcall SF_REDRAW, SSF_END_DRAW
popa
ret
align 4
db 41,0,0xC3,0x3C
TEXUV:
rd 1
align 4
init_tube:
mov ecx,256
mov edi,[buf1]
PAL1:
mov edx,3C8h
mov eax,ecx
inc edx
sar al,1
js PAL2
mul al
shr ax,6
PAL2:
mov al,0
jns PAL3
sub al,cl
shr al,1
shr al,1
PAL3:
mov ebx,ecx
mov [ebx+edi],bh
loop PAL1
mov ecx,256
TEX:
mov bx,cx
add ax,cx
rol ax,cl
mov dh,al
sar dh,5
adc dl,dh
adc dl,[ebx+255+edi]
shr dl,1
mov [ebx+edi],dl
not bh
mov [ebx+edi],dl
loop TEX
fninit
fldz
ret
align 4
image_end:
PIXBUF rd 1
buf1 rd 1
buf2 rd 1
procinfo process_information
rb 1024
align 4
stacktop:
memory_end:

View File

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

View File

@@ -0,0 +1,33 @@
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,3 +1,8 @@
; 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
@@ -170,7 +175,8 @@ draw_window:
mcall 48, 3, window_colors, 40 mcall 48, 3, window_colors, 40
mcall , 4 mcall , 4
push eax add eax, 3
mov [win_head], eax
mov eax, 0 mov eax, 0
mov ebx, 100 * 65536 + 685 mov ebx, 100 * 65536 + 685
@@ -180,14 +186,23 @@ draw_window:
mov edi, title mov edi, title
mcall mcall
pop esi ; Don't draw rolled up or rolled down window
add esi, 495 mcall 9, proc_info, -1
mcall 67, -1, -1, -1, mov eax, [proc_info + 70]
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:
mov esi, [win_head]
mcall 67, -1, -1, -1,
mcall 12, 2 mcall 12, 2
ret ret
@@ -399,9 +414,21 @@ 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]
add ecx, 65536 * 23 mov eax, 13
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
@@ -411,15 +438,28 @@ 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]
add ebx, 65536 * 23 mov eax, 13
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
@@ -574,7 +614,7 @@ logic_utf16to8:
; ================================================================ ; ================================================================
title db "Charset Checker 0.3.1", 0 title db "Charsets Viewer 0.3.2", 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
@@ -609,7 +649,11 @@ 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
win_head rd 1
window_colors system_colors window_colors system_colors
proc_info process_information
; ================================================================ ; ================================================================

View File

@@ -1,5 +1,5 @@
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD> console.inc - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> scrollbar ; Helper file for console.inc - scrollbar definition
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> ; Vertical scrolling
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
; <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>㭪樨 ; Load BMP data, converting it into data for sysfn 7 on the fly
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,6 +1,7 @@
; <EFBFBD>㭪樨 ࠡ<><E0A0A1><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E1AEAB> <20><><EFBFBD> <20>ணࠬ<E0AEA3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ; SPDX-License-Identifier: GPL-2.0
; 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
@@ -56,7 +57,7 @@ START:
or eax, -1 or eax, -1
ret 4 ret 4
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ; Console initialization
; 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);
@@ -271,13 +272,13 @@ con_write_length:
pop esi ebx pop esi ebx
ret 8 ret 8
; <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><> ; Each character is classified as one of the following
con.printfc.normal = 0 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A8AC><EFBFBD> con.printfc.normal = 0 ; normal character
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 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> con.printfc.digit = 5 ; non-null digit
con.printfc.plus = 6 ; '+' con.printfc.plus = 6 ; '+'
con.printfc.minus = 7 ; '-' con.printfc.minus = 7 ; '-'
con.printfc.sharp = 8 ; '#' con.printfc.sharp = 8 ; '#'
@@ -376,24 +377,24 @@ con_printf:
jmp .normal jmp .normal
.spec_begin: .spec_begin:
xor ebx, ebx xor ebx, ebx
; bl = <20><><EFBFBD><EFBFBD>: ; bl = position type:
; 0 = <EFBFBD><EFBFBD><EFBFBD> ; 0 = start
; 1 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD>騩 0 <20><><E1AFA5><EFBFBD><20><><EFBFBD><E0ACA0> ; 1 = read leading 0 in format specification
; 2 = <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> ; 2 = read width field
; 3 = <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><E7ADAE><EFBFBD> ; 3 = read precision field
; 4 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E3ACA5><EFBFBD> ; 4 = read argument size field
; 5 = <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <> ; 5 = read type field
; bh = <EFBFBD><EFBFBD>: ; bh = flags:
; 1 = <EFBFBD> '#', <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0/0x/0X ; 1 = flag '#', output 0/0x/0X
; 2 = <EFBFBD> '-', <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ; 2 = flag '-', align left
; 4 = <EFBFBD> '0', <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> ; 4 = flag '0', zero padding
; 8 = <EFBFBD> 'h', <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E3ACA5> ; 8 = flag 'h', short argument
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] = <EFBFBD> 0/'+'/' ' ; byte [esp] = flag 0/'+'/' '
.spec: .spec:
xor eax, eax xor eax, eax
lodsb lodsb
@@ -529,7 +530,7 @@ con_printf:
@@: @@:
push edx push edx
xor edx, edx xor edx, edx
; <EFBFBD><EFBFBD><20> eax, <20><EFBFBD><E1ADAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1ABA5><EFBFBD> <20> ecx ; number in eax, radix in ecx
@@: @@:
cmp dword [esp+16+8], 0 cmp dword [esp+16+8], 0
jnz .print_num jnz .print_num
@@ -1777,10 +1778,10 @@ con.data2image:
mov al, [esi+1] mov al, [esi+1]
push eax push eax
and al, 0xF and al, 0xF
mov ebx, eax ; <EFBFBD><><E2A5AA><EFBFBD> mov ebx, eax ; text color
pop eax pop eax
shr al, 4 shr al, 4
mov ebp, eax ; <EFBFBD><> mov ebp, eax ; background color
sub ebx, ebp sub ebx, ebp
lodsb lodsb
inc esi inc esi
@@ -2188,7 +2189,7 @@ con_gets2:
sub ebx, 1 sub ebx, 1
jle .ret jle .ret
mov byte [esi], 0 mov byte [esi], 0
xor ecx, ecx ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD>񭭮<EFBFBD> <20><><EFBFBD> xor ecx, ecx ; length of the already entered string
call con.get_data_ptr call con.get_data_ptr
.loop: .loop:
call con_getch2 call con_getch2
@@ -2596,9 +2597,9 @@ con.wake:
popad popad
ret ret
; <EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><E0A0A1><EFBFBD><EBA2A0> <20><><EFBFBD><EFBFBD> <20> <20><EFBFBD>. ; Console window thread. Handles input and output.
con.thread: con.thread:
; <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>" ; The thread responds to IPC, which is used only so that it can be "waken up"
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
@@ -3212,7 +3213,7 @@ con.draw_image:
@@: @@:
int 0x40 int 0x40
push edx push edx
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ; Calculate the height of the slider
mov ax, dx mov ax, dx
sub eax, con.vscroll_btn_height sub eax, con.vscroll_btn_height
mov ecx, eax mov ecx, eax
@@ -3222,7 +3223,7 @@ con.draw_image:
jae @f jae @f
mov al, 5 mov al, 5
@@: @@:
; 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> ; eax = slider height. Calculate the slider position
mov [con.vscrollbar_size], eax mov [con.vscrollbar_size], eax
xchg eax, ecx xchg eax, ecx
sub eax, ecx sub eax, ecx
@@ -3232,7 +3233,7 @@ con.draw_image:
div ebx div ebx
pop edx pop edx
push edx push edx
; ecx = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, eax = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ; ecx = slider height, eax = position
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
@@ -3331,8 +3332,8 @@ con.extended_numlock:
cursor_esc dd 27 + ('[' shl 8) cursor_esc dd 27 + ('[' shl 8)
; <EFBFBD><>饩 ॠ<><E0A5A0><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><E7A5AD> <20><><><EFBFBD><E7A0AD><><E2A0AA><EFBFBD>. ; In the current implementation, the default values are:
; <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. ; In the future, they may be read as parameters from the console.ini ini file.
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 <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>: console.obj экспортирует следующие функции:
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 long dword; /* 32-битное беззнаковое целое */
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> */ typedef unsigned short word; /* 16-битное беззнаковое целое */
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 - <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> wnd_width, wnd_height - высота и ширина (в символах) видимой в окне консоли
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; области;
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>; scr_width, scr_height - высота и ширина (в символах) всей консоли;
<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) любые из первых 4 параметров могут быть установлены в -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 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. title - заголовок окна консоли.
void __stdcall con_exit(bool bCloseWindow); void __stdcall con_exit(bool 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 Вызывается при завершении программы. Если (байтовый) параметр 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> нулевой, то окно консоли остаётся на экране до того момента, как пользователь
<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]". пожелает закрыть его, при этом к заголовку добавляется строка " [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);
<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>. Выводит ASCIIZ-строку в консоль в текущую позицию, продвигает текущую позицию.
void __stdcall con_write_string(const char* string, dword length); void __stdcall con_write_string(const char* string, dword 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>. Аналогично con_write_asciiz, но выводит ровно length символов.
int __cdecl con_printf(const char* format, ...) int __cdecl con_printf(const char* format, ...)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> printf <EFBFBD><EFBFBD> ANSI C. Стандартная printf из 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') - <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> 10 ('\n') - перевод в начало следующей строки
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> 13 ('\r') - перевод в начало текущей строки
8 ('\b') - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>) 8 ('\b') - забой (на символ назад)
9 ('\t') - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9 ('\t') - табуляция
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>; 27 ('\033'='\x1B') - начало Esc-последовательности;
<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>. */ иначе выводит их как обычные символы. */
/* <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-последовательности:
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>: Esc[<number1>;<number2>;<number3>m - выбор атрибутов символов:
<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 = <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>) 0 = нормальное изображение (белые символы на чёрном фоне)
1 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 = выделение яркостью
5 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 5 = яркий фон
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>) 7 = реверсное изображение (чёрные символы на белом фоне)
30 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 30 = чёрные символы
31 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 31 = красные символы
32 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32 = зелёные символы
33 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 33 = жёлтые символы
34 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 34 = синие символы
35 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 35 = фиолетовые символы
36 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 36 = бирюзовые символы
37 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 37 = белые символы
40 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 40 = чёрный фон
41 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 41 = красный фон
42 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 42 = зелёный фон
43 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 43 = жёлтый фон
44 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 44 = синий фон
45 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 45 = фиолетовый фон
46 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 46 = бирюзовый фон
47 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 47 = белый фон
<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>: Следующие последовательности появились в версии 5 библиотеки:
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>A - переместить курсор на <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>B - переместить курсор на <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>C - переместить курсор на <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[<number>D - переместить курсор на <number> позиций влево
Esc[<number1>;<number2>H = Esc[<number1>;<number2>f - Esc[<number1>;<number2>H = Esc[<number1>;<number2>f -
<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> установить курсор в позицию с координатами <number1>,<number2>
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> Esc[2J - очистить экран, переместить курсор в левый верхний угол
<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>: Следующие последовательности появились в версии 9 библиотеки:
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.
*/ */
/* <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>; /* сигнал о закрытии окна консоли; появился в версии 6 библиотеки;
<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 */ флаг игнорируется функцией con_set_flags */
#define CON_WINDOW_CLOSED 0x200 #define CON_WINDOW_CLOSED 0x200
<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. Значение по умолчанию для флагов = 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>. Устанавливает значение высоты курсора. Возвращает старое значение.
<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) Попытка установить значение вне корректного интервала (от 0 до font_height-1)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. игнорируется.
<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>. Курсор высоты 0 не отображается на экране.
<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>. Значение высоты по умолчанию - 15% от высоты шрифта.
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>. Считывает один символ с клавиатуры.
<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> Для обычных символов возвращается ASCII-код. Для расширенных символов
(<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, (например, Fx и стрелочек) первый вызов функции возвращает 0,
<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>). а повторный вызов возвращает расширенный код (подобно DOS-функциям ввода).
<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> Начиная с версии 7 библиотеки, после закрытия окна консоли возвращается
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0. значение 0.
word __stdcall con_getch2(void); word __stdcall con_getch2(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>. <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> Считывает один символ с клавиатуры. Младший байт содержит ASCII-код клавиши
(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> (0 для расширенных символов), старший - расширенный код
(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BIOS-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>). (подобно BIOS-функциям ввода).
<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> Начиная с версии 7 библиотеки, после закрытия окна консоли возвращается
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0. значение 0.
int __stdcall con_kbhit(void); int __stdcall con_kbhit(void);
<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> Возвращает 1, если какая-то клавиша была нажата, 0 иначе. Для считывания
<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. нажатой клавиши предназначены функции con_getch и con_getch2.
<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. Начиная с версии 6 библиотеки, после закрытия окна консоли всегда возвращает 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> Считывает строку с клавиатуры. Ввод прерывается при поступлении символа
<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> новой строки, а также по прочтении n-1 символа (в зависимости от того, что
<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. <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>. str. Считанная строка дополняется нулевым символом.
<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> Начиная с версии 6 библиотеки, функция возвращает указатель на введённую
<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> строку при успешном чтении и NULL, если окно консоли было закрыто. До версии
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>. 6 возвращаемое значение было неопределено.
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);
<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>. Функция появилась в версии 4 библиотеки.
<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> Полностью аналогична con_gets за исключением того, что когда пользователь
<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> нажимает нераспознанную клавишу, вызывается указанная callback-процедура
(<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> (которая может, например, обрабатывать up/down для истории ввода и tab для
<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>. увеличения лимита), лимит, позицию в строке - для этого и передаются указатели.
<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> Возвращаемое значение: 0=строка не менялась; 1=строка изменилась, необходимо
<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>; удалить старую и вывести новую; 2=строка изменилась, необходимо её вывести;
3=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 3=немедленно выйти из функции.
<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> Начиная с версии 6 библиотеки, функция возвращает указатель на введённую
<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> строку при успешном чтении и NULL, если окно консоли было закрыто. До версии
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>. 6 возвращаемое значение было неопределено.
void __stdcall con_cls(); void __stdcall con_cls();
<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>. Функция появилась в версии 5 библиотеки.
<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);
<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>. Функция появилась в версии 5 библиотеки.
<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. Записывает в *px текущую координату курсора по оси x, в *py - по оси y.
void __stdcall con_set_cursor_pos(int x, int y); void __stdcall con_set_cursor_pos(int x, int y);
<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>. Функция появилась в версии 5 библиотеки.
<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><> Устанавливает курсор в позицию с указанными координатами. Если какой-то из
<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 параметров выходит за пределы соответствующего диапазона (от 0 до scr_width-1
<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> для x, от 0 до scr_height-1 для y, scr_width и scr_height были заданы при
<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>. вызове con_init), то соответствующая координата курсора не меняется.
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, 0xf4, /* 0x00-0x07 */ 0x00, 0xf0, 0x00, 0x00, 0xf2, 0x00, /*0x00*/ 0x49, 0xf4, /* 0x00-0x07 */ // Fix BE and UK 'I'
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, 0xf5, /* 0x50-0x57 */ 0x00, 0xf1, 0x00, 0x00, 0xf3, 0x00, /*0x00*/ 0x69, 0xf5, /* 0x50-0x57 */ // Fix BE and UK 'i'
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,5 +100,4 @@ 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" .. " && kos32-strip %o --strip-unneeded " .. tup.getconfig("KPACK_CMD"), "mbedtls.obj"); tup.rule(OBJS, "clink -o %o %f" .. " && strip %o --strip-unneeded " .. tup.getconfig("KPACK_CMD"), "mbedtls.obj");

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -18,16 +18,11 @@
; 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.
@@ -46,18 +41,10 @@ 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
section .bss bestval rd 1 ; value of best move found so far
nbestmoves rd 1 ; # of best moves found so far
cpulevel resd 1 ; level of current cpu player bestmoves rd 7 ; array to hold all best moves
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
;********************************************************** ;**********************************************************
@@ -148,15 +135,16 @@ aiGetMove:
; output : eax = move value ; output : eax = move value
; destroys : everything ; destroys : everything
;********************************************************** ;**********************************************************
align 4
alphabeta: alphabeta:
%define ply (ebp+20) ply equ (ebp+20)
%define player (ebp+16) player equ (ebp+16)
%define alpha (ebp+12) alpha equ (ebp+12)
%define beta (ebp+ 8) beta equ (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
@@ -262,9 +250,8 @@ alphabeta:
leave ; eax contains static value leave ; eax contains static value
ret 4*4 ret 4*4
%undef ply purge ply
%undef player purge player
%undef alpha purge alpha
%undef beta purge beta
%endif

View File

@@ -18,9 +18,6 @@
; 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
@@ -36,27 +33,15 @@ BHEIGHT equ 8
;********************************************************** board rd BHEIGHT*BWIDTH ; the board
; uninitialized data free rd BWIDTH ; # of free fields for each column
;********************************************************** totalfree rd 1 ; total # of free fields
currentplayer rd 1 ; player to make next move
section .bss lastmove rd 1 ; last move done on the board
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
@@ -102,9 +87,9 @@ boardReset:
; zero flag clear -> move is valid ; zero flag clear -> move is valid
; destroys : nothing ; destroys : nothing
;********************************************************** ;**********************************************************
%macro BOARDISVALIDMOVE 1 macro BOARDISVALIDMOVE p1 {
cmp dword [free+%1*4],0 cmp dword [free+p1*4],0
%endmacro }
@@ -160,9 +145,9 @@ boardUndoMove:
; output : current player is switched ; output : current player is switched
; destroys : flags ; destroys : flags
;********************************************************** ;**********************************************************
%macro BOARDSWITCHPLAYERS 0 macro BOARDSWITCHPLAYERS {
xor dword [currentplayer],(PLAYER1 ^ PLAYER2) xor dword [currentplayer],(PLAYER1 xor PLAYER2)
%endmacro }
@@ -174,9 +159,9 @@ boardUndoMove:
; output : player changed ; output : player changed
; destroys : flags ; destroys : flags
;********************************************************** ;**********************************************************
%macro BOARDGETOTHERPLAYER 1 macro BOARDGETOTHERPLAYER r1 {
xor %1,(PLAYER1 ^ PLAYER2) xor r1,(PLAYER1 xor PLAYER2)
%endmacro }
@@ -188,9 +173,9 @@ boardUndoMove:
; 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 0 macro BOARDISFULL {
cmp dword [totalfree],0 cmp dword [totalfree],0
%endmacro }
@@ -313,6 +298,3 @@ boardIsWin:
; no win for this player ; no win for this player
xor eax,eax xor eax,eax
ret ret
%endif

View File

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

View File

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

View File

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

View File

@@ -18,14 +18,15 @@
; 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
bits 32 use32
%include 'mos.inc' org 0
section .text db 'MENUET01'
%include 'lang_nasm.inc' ;fedesco dd 1,start,i_end,mem,stacktop,0,0
MOS_HEADER01 start,end
include '../../macros.inc'
include '../../proc32.inc'
include '../../KOSfuncs.inc'
include 'lang.inc' ;fedesco
;********************************************************** ;**********************************************************
@@ -46,11 +47,20 @@ BUTTON_HEIGHT equ 12
BUTTON_NEW_X equ 14 BUTTON_NEW_X equ 14
BUTTON_NEW_Y equ 30 BUTTON_NEW_Y equ 30
%ifidn lang, 'it_IT' BUTTON_NEW_HEIGHT equ 32
BUTTON_NEW_WIDTH equ 56 + 28 if lang eq it_IT
%else BUTTON_NEW_WIDTH = 56 + 28
BUTTON_NEW_WIDTH equ 56 LABEL_PL1_X = 90 + 10
%endif LABEL_PL1TYPE_X = (LABEL_PL1_X + 10*6 - 4)
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
@@ -64,19 +74,9 @@ 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,9 +94,7 @@ 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 MOS_RGB(128,128,128) GRIDCOLOR equ 0x808080
; button id's ; button id's
BT_QUIT equ 1 BT_QUIT equ 1
@@ -106,55 +104,170 @@ 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
mov ebx,1 mcall SF_WAIT_EVENT_TIMEOUT,1
mov eax,MOS_SC_WAITEVENTTIMEOUT
int 0x40
; process events ; process events
cmp eax,MOS_EVT_REDRAW cmp eax,EV_REDRAW
je short .redraw je .redraw
cmp eax,MOS_EVT_KEY cmp eax,EV_KEY
je short .key je .key
cmp eax,MOS_EVT_BUTTON cmp eax,EV_BUTTON
je short .button je .button
call pollMouse call pollMouse
call gameLoop call gameLoop
jmp short .msgpump jmp .msgpump
.redraw: .redraw:
call defineWindow call defineWindow
jmp short .msgpump jmp .msgpump
.key: .key:
call keyboardInput call keyboardInput
jmp short .msgpump jmp .msgpump
.button: .button:
call handleButton call handleButton
jmp short .msgpump jmp .msgpump
@@ -162,28 +275,27 @@ main:
; button handling function ; button handling function
;********************************************************** ;**********************************************************
handleButton: handleButton:
mov eax,MOS_SC_GETPRESSEDBUTTON ; get button id mcall SF_GET_BUTTON ; get button id
int 0x40
cmp al,1 ; button pressed ? cmp al,1 ; button pressed ?
je short .bye ; nope -> nothing to do je .bye ; nope -> nothing to do
cmp ah,BT_QUIT ; which button has been pressed ? cmp ah,BT_QUIT ; which button has been pressed ?
je short .quit je .quit
cmp ah,BT_NEW cmp ah,BT_NEW
je short .new je .new
cmp ah,BT_PLAYER1DN cmp ah,BT_PLAYER1DN
je short .player1dn je .player1dn
cmp ah,BT_PLAYER1UP cmp ah,BT_PLAYER1UP
je short .player1up je .player1up
cmp ah,BT_PLAYER2DN cmp ah,BT_PLAYER2DN
je short .player2dn je .player2dn
cmp ah,BT_PLAYER2UP cmp ah,BT_PLAYER2UP
je short .player2up je .player2up
.bye: .bye:
ret ret
.quit: .quit:
MOS_EXIT mcall SF_TERMINATE_PROCESS
.new: .new:
call newGame call newGame
ret ret
@@ -234,7 +346,7 @@ handleButton:
; window definition function ; window definition function
;********************************************************** ;**********************************************************
defineWindow: defineWindow:
MOS_STARTREDRAW mcall SF_REDRAW,SSF_BEGIN_DRAW
mov edi,window mov edi,window
call drawWindow call drawWindow
@@ -250,7 +362,7 @@ defineWindow:
xor eax,eax xor eax,eax
call drawBoard call drawBoard
MOS_ENDREDRAW mcall SF_REDRAW,SSF_END_DRAW
ret ret
@@ -270,11 +382,10 @@ 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,MOS_DWORD(LABEL_STATUS_X,LABEL_STATUS_WIDTH) mov ebx, LABEL_STATUS_X shl 16 + LABEL_STATUS_WIDTH
mov ecx,MOS_DWORD(LABEL_STATUS_Y,LABEL_STATUS_HEIGHT) mov ecx, LABEL_STATUS_Y shl 16 + LABEL_STATUS_HEIGHT
xor edx,edx xor edx,edx
mov eax,MOS_SC_DRAWBAR mcall SF_DRAW_RECT
int 0x40
; redraw label ; redraw label
mov edi,statusbar mov edi,statusbar
@@ -310,50 +421,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,MOS_DWORD(GRIDX,GRIDWIDTH) mov ebx, GRIDX shl 16 + GRIDWIDTH
mov ecx,MOS_DWORD(GRIDY,GRIDHEIGHT) mov ecx, GRIDY shl 16 + GRIDHEIGHT
mov edx,WND_WORKCOLOR mov edx,WND_WORKCOLOR
mov eax,MOS_SC_DRAWBAR mcall SF_DRAW_RECT
int 0x40
.noclear: .noclear:
call drawGrid call drawGrid
call drawStones call drawStones
ret ret
align 4
drawGrid: drawGrid:
; vertical lines ; vertical lines
mov ebx,MOS_DWORD(GRIDX,GRIDX) mov ebx, GRIDX shl 16 + GRIDX
mov ecx,MOS_DWORD(GRIDY,GRIDY+GRIDHEIGHT-1) mov ecx, GRIDY shl 16 + GRIDY+GRIDHEIGHT-1
mov edx,GRIDCOLOR mov edx,GRIDCOLOR
mov eax,MOS_SC_DRAWLINE mcall SF_DRAW_LINE
mov esi,8 mov esi,8
.vlines: .vlines:
int 0x40 int 0x40
add ebx,MOS_DWORD(GRIDSPACING,GRIDSPACING) add ebx, GRIDSPACING shl 16 + GRIDSPACING
dec esi dec esi
jnz .vlines jnz .vlines
; horizontal lines ; horizontal lines
mov ebx,MOS_DWORD(GRIDX,GRIDX+GRIDWIDTH-1) mov ebx, GRIDX shl 16 + GRIDX+GRIDWIDTH-1
mov ecx,MOS_DWORD(GRIDY,GRIDY) mov ecx, GRIDY shl 16 + GRIDY
mov esi,7 mov esi,7
.hlines: .hlines:
int 0x40 int 0x40
add ecx,MOS_DWORD(GRIDSPACING,GRIDSPACING) add ecx, GRIDSPACING shl 16 + GRIDSPACING
dec esi dec esi
jnz .hlines jnz .hlines
ret ret
align 4
drawStones: drawStones:
mov ebx,6 mov ebx,6
.col: .col:
@@ -369,6 +480,7 @@ drawStones:
; ecx = column (1..7) ; ecx = column (1..7)
; ebx = row (1..6) ; ebx = row (1..6)
align 4
drawStone: drawStone:
pushad pushad
@@ -402,9 +514,8 @@ 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,MOS_DWORD(STONESIZE,STONESIZE) ; image dimensions mov ecx, (STONESIZE shl 16) + STONESIZE ; image dimensions
mov eax,MOS_SC_PUTIMAGE mcall SF_PUT_IMAGE
int 0x40
.bye: .bye:
popad popad
@@ -461,9 +572,8 @@ newGame:
; destroys : everything ; destroys : everything
;********************************************************** ;**********************************************************
pollMouse: pollMouse:
mov ebx,2 mcall SF_MOUSE_GET,SSF_BUTTON
mov eax,MOS_SC_GETMOUSEPOSITION
int 0x40
and eax,1 and eax,1
jz .mousenotpressed jz .mousenotpressed
.mousepressed: .mousepressed:
@@ -503,9 +613,7 @@ pollMouse:
;********************************************************** ;**********************************************************
getMouseCol: getMouseCol:
mov ebx,1 ; get mouse position, window relative mcall SF_MOUSE_GET,SSF_WINDOW_POSITION ; 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
@@ -539,24 +647,15 @@ getMouseCol:
; destroys : everything ; destroys : everything
;********************************************************** ;**********************************************************
isActiveApp: isActiveApp:
%define PROCINFO (ebp-MOS_PROCESSINFO_size)
enter MOS_PROCESSINFO_size,0
; get process information ; get process information
mov eax,MOS_SC_GETPROCESSINFO mcall SF_THREAD_INFO,procinfo,-1
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+MOS_PROCESSINFO.windowStackPos] cmp ax,[procinfo+process_information.window_stack_position]
sete al sete al
leave ;;;leave
ret ret
%undef PROCINFO
@@ -569,8 +668,7 @@ isActiveApp:
; destroys : everything ; destroys : everything
;********************************************************** ;**********************************************************
keyboardInput: keyboardInput:
mov eax,MOS_SC_GETKEY ; get key mcall SF_GET_KEY ; 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 ?
@@ -698,7 +796,7 @@ updatePlayerStatusText:
cmp dword [player1_type],0 cmp dword [player1_type],0
je .statustextok je .statustextok
mov esi,player1cpuprmpt mov esi,player1cpuprmpt
jmp short .statustextok jmp .statustextok
.player2: .player2:
mov esi,player2hmnprmpt mov esi,player2hmnprmpt
cmp dword [player2_type],0 cmp dword [player2_type],0
@@ -714,196 +812,11 @@ updatePlayerStatusText:
; initialized data ; initialized data
;********************************************************** ;**********************************************************
section .data
; ;
; window definition ; window definition
; ;
windowtitle db "C4",0 windowtitle db "C4",0
window: 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
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
@@ -912,23 +825,31 @@ player2_type dd PL2TYPE_INIT
; status messages ; status messages
%ifidn lang, 'it_IT' if lang eq 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 else if lang eq ru_RU
player1hmnprmpt db "Make your move, player 1.",0 player1hmnprmpt db "<EFBFBD><EFBFBD>ப 1 ᤥ<><E1A4A5><EFBFBD><EFBFBD><EFBFBD>",0
player2hmnprmpt db "Make your move, player 2.",0 player2hmnprmpt db "<EFBFBD><EFBFBD>ப 2 ᤥ<><E1A4A5><EFBFBD><EFBFBD><EFBFBD>",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
%endif end if
; pointer to ai player. future releases C4 might ; pointer to ai player. future releases C4 might
@@ -936,29 +857,22 @@ player2_type dd PL2TYPE_INIT
aicode dd aiGetMove aicode dd aiGetMove
; button images align 16
redpcx: incbin "red.pcx" i_end:
REDPCXSIZE equ ($ - redpcx) sc system_colors
bluepcx: incbin "blue.pcx" procinfo process_information
BLUEPCXSIZE equ ($ - bluepcx) rb 1024
align 16
stacktop:
;**********************************************************
; uninitialized data
;**********************************************************
section .bss
; player input ; player input
; 0 : no input available ; 0 : no input available
; 1..7 : column to drop stone into ; 1..7 : column to drop stone into
playerinput resd 1 playerinput rd 1
mouseinput resd 1 mouseinput rd 1
gameover resd 1 gameover rd 1
redstone resb STONESIZE*STONESIZE*3 redstone rb STONESIZE*STONESIZE*3
bluestone resb STONESIZE*STONESIZE*3 bluestone rb STONESIZE*STONESIZE*3
mem:
end:

View File

@@ -1,305 +0,0 @@
; 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,38 +16,32 @@
; 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
struc PCXHEADER struct PCXHEADER
.id: resb 1 ; id, should be 10 id rb 1 ; id, should be 10
.version: resb 1 ; pcx version version rb 1 ; pcx version
.encoding: resb 1 ; 1 = rle encoding rb 1 ; 1 = rle
.bpp: resb 1 ; bits per pixel bpp rb 1 ; bits per pixel
.xmin: resw 1 ; image dimensions xmin rw 1 ; image dimensions
.ymin: resw 1 ymin rw 1
.xmax: resw 1 xmax rw 1
.ymax: resw 1 ymax rw 1
.hdpi: resw 1 ; horizontal resolution in dpi hdpi rw 1 ; horizontal resolution in dpi
.vdpi: resw 1 ; verttical resolution in dpi vdpi rw 1 ; verttical resolution in dpi
.colormap: resb 48 ; 16 color palette colormap rb 48 ; 16 color palette
.reserved1: resb 1 reserved1 rb 1
.nplanes: resb 1 ; # of color planes nplanes rb 1 ; # of color planes
.bytesperline: resw 1 ; # of bytes per scanline. always even bytesperline rw 1 ; # of bytes per scanline. always even
.palinfo: resw 1 ; 1 = color/bw, 2 = grayscale palinfo rw 1 ; 1 = color/bw, 2 = grayscale
.hscreensize: resw 1 ; horizontal screen size hscreensize rw 1 ; horizontal screen size
.vscreensize: resw 1 ; vertical screen size vscreensize rw 1 ; vertical screen size
.reserved2: resb 54 reserved2 rb 54
endstruc ends
section .text
@@ -98,7 +92,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 short .encoded jae .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
@@ -107,7 +101,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 short .continue jmp .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
@@ -127,11 +121,8 @@ 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 short .decode jnz .decode
popfd popfd
popad popad
ret ret
%endif

View File

@@ -18,12 +18,6 @@
; 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
@@ -47,4 +41,3 @@ randomaiGetMove
mov eax,edx ; return move mov eax,edx ; return move
ret ret
%endif

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