45 Commits

Author SHA1 Message Date
9e5a91e2ff [Apps/Floppybird] Fix #182
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 1m0s
Build system / Build (pull_request) Successful in 12m55s
2025-03-30 11:52:16 +03:00
7720e38868 NNP: removed dependency on libc library, clean code
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 37s
Build system / Build (pull_request) Successful in 7m22s
2025-03-28 20:01:18 +01:00
02b2395ef1 Eolite 5.30: Added file search (#175)
Co-authored-by: Max Logaev <maxlogaev@proton.me>
Reviewed-on: #175
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: leency <lipatov.kiril@gmail.com>
Co-committed-by: leency <lipatov.kiril@gmail.com>
2025-03-28 19:48:39 +01:00
293e1d195a Docs/welcome.htm: Fixed #168, language style updates (#171)
Compressed with kpack and added to IMG (en_US only).

Co-authored-by: Ivan Baravy <dunkaist@gmail.com>
Reviewed-on: #171
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Burer <burer@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2025-03-22 16:09:06 +01:00
5cf6c3baf9 Mine game v0.62 (#172)
- proper window rolling up fix;
- bigger cells and fonts;
- add icon to a new game button;
- better alignment of ui elements in header.

Reviewed-on: #172
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: leency <lipatov.kiril@gmail.com>
Co-committed-by: leency <lipatov.kiril@gmail.com>
2025-03-22 09:40:04 +01:00
8376fed87d CI/CD: Use kpack64 instead of kpack
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 30s
Build system / Build (pull_request) Successful in 5m46s
Version of the kpack utility from
`programs/other/kpack/kerpack_linux/kpack64.asm`
compresses files better than `programs/other/kpack/linux/kpack.asm`

Signed-off-by: Max Logaev <maxlogaev@proton.me>
2025-03-22 09:00:14 +01:00
22d572f789 Docs: Added README and contributing guide (#124)
Co-authored-by: Burer <burer@kolibrios.org>
Reviewed-on: #124
Reviewed-by: Burer <burer@kolibrios.org>
Reviewed-by: rgimad <rgimad@noreply.localhost>
Reviewed-by: Ivan B <dunkaist@noreply.localhost>
Reviewed-by: Sweetbread <risdeveau@codrs.ru>
2025-03-21 21:08:44 +01:00
af41fe4aa7 Pipet: Fixed wrong window colors on some skins and optimized size (#162)
- Fixed wrong window colors on some skins;
- Size optimization;
- Added template macro for quickly creating `struct` with specific fields.

Co-authored-by: leency <lipatov.kiril@gmail.com>
Reviewed-on: #162
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Burer <burer@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2025-03-20 00:18:26 +01:00
b1a1691b84 Libimg: fixed a bug when rotating images smaller than 2 pixels
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 31s
Build system / Build (pull_request) Successful in 5m17s
2025-03-19 11:37:12 +02:00
92f9d76f14 welcome.htm and related stuff (fix #20)
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 33s
Build system / Build (pull_request) Successful in 6m43s
- welcome.htm (ENG) uploaded
- signs.png uploaded and added to ISO
- rotate Kolibri in all icons to look forward
2025-03-18 16:21:01 +01:00
32466e31f4 programs/shell: Show new fields of the sf18.13 struct
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 41s
Build system / Build (pull_request) Successful in 6m3s
Kfetch command now reports
 - kernel ABI,
 - git hash (aka commit id),
 - release offset,
 - debug tag.

No svn revision anymore.
2025-03-17 23:22:45 +01:00
63cd6f0ac8 Movback: Added support window resizing
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 26s
Build system / Build (pull_request) Successful in 5m6s
2025-03-17 22:31:37 +01:00
4fcc17675c Movback: Deleted trunk dir. Files moved 2025-03-17 22:31:37 +01:00
4e903ce12b kiv: show image bpp in win header
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 34s
Build system / Build (pull_request) Successful in 6m20s
2025-03-17 22:24:04 +01:00
bfdb42c91f Tube: fix crash at some window sizes, remove outdated code with palette
All checks were successful
Build system / Build (pull_request) Successful in 5m48s
Build system / Check kernel codestyle (pull_request) Successful in 30s
2025-03-17 22:07:11 +02:00
55d641b0da kernel: Clean up svn-related code and data
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 40s
Build system / Build (pull_request) Successful in 6m9s
* Rearrange sf18.13 version structure to
  + mention git hash and release offset,
  + separate OS release and kernel ABI numbers,
  + include an optional debug tag.
* Update the boot log and the blue screen to print the new fields.
* Update docs.
* No breaking changes.

Resolves #99.
2025-03-17 20:07:46 +01:00
0e7cff0715 ci: setup environment variables
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 28s
Build system / Build (pull_request) Successful in 6m28s
ref: #146
Toolchain container was updated and fasm now in /home/autobuild/...
folder
2025-03-17 19:10:23 +01:00
4d30fd7a2b Eolite 5.29: Fixed bug in "Apply to all files?" dialog
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 47s
Build system / Build (pull_request) Successful in 5m43s
- line height can no longer be smaller than icon size;
- fixed bug with edit box activation under "Apply to all files?" dialog;
- updated dates;
- fixed kfont initialization.
2025-03-17 18:22:15 +03:00
292bd1d739 webview 3.85: fix a specific case when col width was calculated wrong
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 27s
Build system / Build (pull_request) Successful in 5m16s
2025-03-17 11:50:17 +01:00
1a756358f5 webview 3.84
- tagicon support
- draw_buf => BufIsInvalid() add check
2025-03-17 11:50:17 +01:00
009c0d0519 webview-3.83
- fixed collection.h that caused webview crash
- fix rolled-up bug
- add special symbol from builds.kolibrios.org/status.html
2025-03-17 11:50:17 +01:00
bab6267412 Boxlib: fix write null pointer in editbox
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 35s
Build system / Build (pull_request) Successful in 7m45s
2025-03-17 10:55:32 +01:00
72196f42de Palitra(branch): UI and code refactoring. Fix a lot of issues (#154)
- Fixed the ID of the buttons, made the window always on top;
- Removed the visible rectangle when clicking on the palette;
- Fixed the position of the picker and palette buttons.

Reviewed-on: #154
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: leency <lipatov.kiril@gmail.com>
Co-committed-by: leency <lipatov.kiril@gmail.com>
2025-03-17 10:54:19 +01:00
f1e958af41 Firework: fix and optimize window resizing
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 1m19s
Build system / Build (pull_request) Successful in 16m28s
2025-03-17 01:09:45 +03:00
rgimad
78de535233 Apps/dbgboard: fix critical bug with stack overflow
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 34s
Build system / Build (pull_request) Successful in 7m0s
2025-03-16 19:50:12 +01:00
e353771faa Pipet: Rewrite from C-- to FASM
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 25s
Build system / Build (pull_request) Successful in 4m52s
- Rewritten from C-- to FASM
- Function to select not a single pixel, but a 7*7 rect from screen;
- Function to select each pixel from selected rect;
- Updated UX/UI.

Co-authored-by: leency <lipatov.kiril@gmail.com>
2025-03-16 13:17:33 +02:00
714cc0a65c cmm menu: fix marker
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 23s
Build system / Build (pull_request) Successful in 5m0s
2025-03-15 23:28:13 +01:00
9357a21169 Plasma: Fix code style and added support for window resizing
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 23s
Build system / Build (pull_request) Successful in 5m0s
2025-03-15 23:02:16 +01:00
75e732a437 Apps/plasma: Deleted trunk dir. Files moved 2025-03-15 23:02:16 +01:00
afd07534ab Apps/fire: Improved code style and readability 2025-03-15 22:31:23 +01:00
20aba254bc Apps/firework: Added support for window resizing
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 32s
Build system / Build (pull_request) Successful in 5m36s
2025-03-15 22:35:09 +02:00
fbd99c82a4 Apps/firework: Improved code style and readability 2025-03-15 19:48:49 +02:00
784b02b4a4 3dcube: get rid of unnecessary files, refined build.bat and tupfile
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 32s
Build system / Build (pull_request) Successful in 5m36s
2025-03-15 14:54:46 +01:00
rgimad
7a2e48bed2 Flip the bird in kfetch command (#144)
Co-authored-by:  Burer <taldariner@gmail.com>
Reviewed-on: #144
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: rgimad <33692565+rgimad@users.noreply.github.com>
Co-committed-by: rgimad <33692565+rgimad@users.noreply.github.com>
2025-03-14 23:44:53 +01:00
31ca1c76bb Apps/unvwater: Added support for window resizing
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 30s
Build system / Build (pull_request) Successful in 5m29s
2025-03-15 00:56:49 +03:00
99ddd88ff8 Apps/unvwater: Improved code style and readability 2025-03-14 22:41:51 +01:00
4f1a8ef9a1 kf_font_viewer gets to be a part of syspanel
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 21s
Build system / Build (pull_request) Successful in 5m28s
Syspanel gets bigger in less than 1 sector and we still have kf viewer in the IMG
2025-03-14 21:31:22 +01:00
93f12c7673 allow applications to work nicely without .kf files
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 37s
Build system / Build (pull_request) Successful in 7m45s
2025-03-14 21:10:49 +01:00
Burer
3eb02af5fd [Other/Data] Optimized all .png images in repo using optipng -o7
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 44s
Build system / Build (pull_request) Successful in 7m12s
2025-03-14 20:46:32 +01:00
rgimad
83d8146ad1 Apps/dbgboard: fix comments
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 29s
Build system / Build (pull_request) Successful in 5m10s
2025-03-13 21:31:10 +03:00
rgimad
1974f45c50 Apps/dbgboard: add display modes and more highlighting
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 34s
Build system / Build (pull_request) Successful in 5m17s
2025-03-13 17:24:09 +03:00
36ce6f0b74 Eolite 5.28
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 40s
Build system / Build (pull_request) Successful in 5m34s
- deny renaming folder '..'
- 'show status bar' option removed
- add option 'bold font'
- Quark view changed to HEX View
2025-03-12 12:27:18 +01:00
4701a15222 Apps/tube: Added support for window resizing
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 34s
Build system / Build (pull_request) Successful in 5m29s
2025-03-12 12:08:40 +03:00
61277f8822 Apps/tube: Improved code style and readability
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 45s
Build system / Build (pull_request) Successful in 5m34s
- Magic numbers are replaced with constants;
- Added copyrights and source to the original;
- Removed unnecessary *.bat files.

Co-authored-by: Max Logaev <maxlogaev@proton.me>
2025-03-12 11:03:37 +03:00
abb7442055 Apps/tube: Deleted trunk dir. Files moved
The trunk directory is no longer required. This is a rudiment of SVN
2025-03-12 02:50:40 +03:00
134 changed files with 2880 additions and 2959 deletions

View File

@@ -28,6 +28,8 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get describe - name: Get describe
id: vars id: vars
@@ -74,20 +76,15 @@ jobs:
g++ -o /home/autobuild/tools/win32/bin/objconv -O2 *.cpp g++ -o /home/autobuild/tools/win32/bin/objconv -O2 *.cpp
chmod +x /home/autobuild/tools/win32/bin/objconv chmod +x /home/autobuild/tools/win32/bin/objconv
- name: Build and install kerpack - name: Build and install kerpack and kpack
if: steps.cache-toolchain.outputs.cache-hit != 'true' if: steps.cache-toolchain.outputs.cache-hit != 'true'
run: | run: |
export PATH=/home/autobuild/tools/win32/bin:$PATH
cd ${{ gitea.workspace }}/programs/other/kpack/kerpack_linux/ cd ${{ gitea.workspace }}/programs/other/kpack/kerpack_linux/
make make
chmod +x kerpack 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 chmod +x kpack
mv kerpack /home/autobuild/tools/win32/bin/.
mv kpack /home/autobuild/tools/win32/bin/. mv kpack /home/autobuild/tools/win32/bin/.
- name: Build and install clink - name: Build and install clink
@@ -144,6 +141,7 @@ jobs:
- name: (en_US) Build KolibriOS - name: (en_US) Build KolibriOS
run: | run: |
export PATH=/home/autobuild/tools/win32/bin:$PATH export PATH=/home/autobuild/tools/win32/bin:$PATH
source kos32-export-env-vars ${{ gitea.workspace }}
tup build-en_US tup build-en_US
- name: (en_US) Upload floppy image - name: (en_US) Upload floppy image
@@ -168,6 +166,7 @@ jobs:
- name: (ru_RU) Build KolibriOS - name: (ru_RU) Build KolibriOS
run: | run: |
export PATH=/home/autobuild/tools/win32/bin:$PATH export PATH=/home/autobuild/tools/win32/bin:$PATH
source kos32-export-env-vars ${{ gitea.workspace }}
tup build-ru_RU tup build-ru_RU
- name: (ru_RU) Upload floppy image - name: (ru_RU) Upload floppy image
@@ -192,6 +191,7 @@ jobs:
- name: (es_ES) Build KolibriOS - name: (es_ES) Build KolibriOS
run: | run: |
export PATH=/home/autobuild/tools/win32/bin:$PATH export PATH=/home/autobuild/tools/win32/bin:$PATH
source kos32-export-env-vars ${{ gitea.workspace }}
tup build-es_ES tup build-es_ES
- name: (es_ES) Upload floppy image - name: (es_ES) Upload floppy image

View File

@@ -2,81 +2,70 @@
## Type of contributing ## Type of contributing
There are two main types of contributions, accepted in KolibriOS: There are two main types of contributions accepted to the main KolibriOS repository:
- Submitting issues about problems in project - Submitting issues about problems in the project
- Submitting code to project via pull requests - Submitting code to the project via pull requests
Each of these types is described in details below. Both these types are described in detail below.
## Issues ## Issues
You can help us by submitting issues about problems, found in system. Currently, there are two main ways of submitting an issue in the project: **Bug Reports** and **Feature Requests**: 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, inexcpected behaviour) in some part of the system (kernel, drivers, apps etc.) and want to report it - 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 wont to propose some **improvement** to the system (missing features, impoved user experience, etc.) - Feature Requests are used, when you want to propose some **improvement** to the system (missing features, improved user experience, etc.)
## Pull requests ## Pull requests
You can also help us by submitting code via pull requests. The process of submitting a pull request consists of following steps: 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 1. Find what you want to implement or improve
2. Make a fork of kolibrios repository 2. Make a fork of kolibrios (or other needed) repository
3. Create a branch with a name that matches your changes 3. Create a branch with a name that matches your changes
4. Implement and test the changes 4. Implement and test the changes
5. Create commits according to the [accepted style](##commit-style) 5. Create commits according to the [accepted style](#commit-style)
6. Create and submit a pull request into main branch 6. Create and submit a pull request into `main` branch
7. Wait for CI/CD pipelines and code review to pass 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. When a pull request is submitted, at least two project participants must conduct a code review, after which the proposed changes need to be corrected (if requested) and merged into the project.
## Commit style ## Commit style
### Pattern ### Message pattern
The commit message should look like this: The commit message should look like this:
```test ```test
[Category] Commit message header Commit message header
Commit message body, if needed Commit message body, if needed
``` ```
- Commit message header and body should reflect changes made in commit - 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 - Commit message body should be separated from the header by one empty line
### Length ### 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. 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.
### Categories ### Multiple authors
List of existing categories accepted in the project: If you are making a commit together with another developer, you need to add:
- `Krn` - kernel ```
- `Drv` - drivers Co-authored-by: ANOTHER-NAME <ANOTHER-NAME@EXAMPLE.COM>
- `Libs` - libraries
- `Apps` - user-space applications
- `Skins` - skins
- `Build` - build system
- `CI/CD` - CI/CD
- `Docs` - documentation
- `Data` - images, configs, resources, etc.
- `All` - global changes
If changes are made to a specific component, the name of the component separated by `/` character needs to be specified. For example:
```text
Apps/shell
Libs/libimg
``` ```
## Merge commits to the end commit message body on a new line.
### Merge commits
> [!WARNING] > [!WARNING]
> Merge commits are **prohibited** in the project > Merge commits are **prohibited** in the project
Use **rebase** to keep your branch up to date.
## Conclusion ## Conclusion
We hope this small instructions will help you to can common with KolibriOS contributon and inspire you to participate in the work of this project. We hope this small instructions will help you to get familiar with KolibriOS contribution rules and inspire you to participate in the life of our project.

View File

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

@@ -85,6 +85,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"}, {"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"},
{"SETTINGS/SYSPANEL.INI", "ru_RU/settings/syspanel.ini"}, {"SETTINGS/SYSPANEL.INI", "ru_RU/settings/syspanel.ini"},
}) elseif build_type == "en_US" then tup.append_table(img_files, { }) elseif build_type == "en_US" then tup.append_table(img_files, {
{"WELCOME.HTM", VAR_DATA .. "/" .. build_type .. "/welcome.htm.kpack"},
{"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"}, {"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"},
{"DEVELOP/BACKY", SRC_PROGS .. "/develop/backy/Backy"}, {"DEVELOP/BACKY", SRC_PROGS .. "/develop/backy/Backy"},
{"File Managers/KFAR.INI", "common/File Managers/kfar.ini"}, {"File Managers/KFAR.INI", "common/File Managers/kfar.ini"},
@@ -289,6 +290,7 @@ extra_files = {
{"kolibrios/res/templates/NES/", "common/templates/NES/*"}, {"kolibrios/res/templates/NES/", "common/templates/NES/*"},
{"kolibrios/res/wallpapers/", "common/wallpapers/*"}, {"kolibrios/res/wallpapers/", "common/wallpapers/*"},
{"kolibrios/res/system/", build_type .. "/settings/kolibri.lbl"}, {"kolibrios/res/system/", build_type .. "/settings/kolibri.lbl"},
{"kolibrios/res/system/", "common/signs.png"},
{"kolibrios/utils/vmode", "common/vmode"}, {"kolibrios/utils/vmode", "common/vmode"},
{"kolibrios/utils/texture", "common/utils/texture"}, {"kolibrios/utils/texture", "common/utils/texture"},
{"kolibrios/utils/cnc_editor/cnc_editor", VAR_PROGS .. "/other/cnc_editor/cnc_editor"}, {"kolibrios/utils/cnc_editor/cnc_editor", VAR_PROGS .. "/other/cnc_editor/cnc_editor"},
@@ -456,14 +458,14 @@ tup.append_table(img_files, {
{"DEMOS/BCDCLK", VAR_PROGS .. "/demos/bcdclk/trunk/bcdclk"}, {"DEMOS/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/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/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/BOARD", VAR_PROGS .. "/system/board/trunk/board"}, {"DEVELOP/BOARD", VAR_PROGS .. "/system/board/trunk/board"},
@@ -474,6 +476,7 @@ tup.append_table(img_files, {
{"DEVELOP/ENTROPYV", VAR_PROGS .. "/develop/entropyview/entropyview"}, {"DEVELOP/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/GENFILES", VAR_PROGS .. "/testing/genfiles/GenFiles"},
{"DEVELOP/PIPET", VAR_PROGS .. "/other/pipet/pipet"},
{"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/MTDBG", VAR_PROGS .. "/develop/mtdbg/mtdbg"}, {"DEVELOP/MTDBG", VAR_PROGS .. "/develop/mtdbg/mtdbg"},
@@ -664,12 +667,12 @@ tup.append_table(img_files, {
{"EASYSHOT", VAR_PROGS .. "/cmm/misc/easyshot.com"}, {"EASYSHOT", VAR_PROGS .. "/cmm/misc/easyshot.com"},
{"MOUSECFG", VAR_PROGS .. "/cmm/mousecfg/mousecfg.com"}, {"MOUSECFG", VAR_PROGS .. "/cmm/mousecfg/mousecfg.com"},
{"BARSCFG", VAR_PROGS .. "/cmm/barscfg/barscfg.com"}, {"BARSCFG", VAR_PROGS .. "/cmm/barscfg/barscfg.com"},
{"SEARCH", VAR_PROGS .. "/cmm/misc/search.com"},
{"SYSPANEL", VAR_PROGS .. "/cmm/misc/software_widget.com"}, {"SYSPANEL", VAR_PROGS .. "/cmm/misc/software_widget.com"},
{"SYSMON", VAR_PROGS .. "/cmm/sysmon/sysmon.com"}, {"SYSMON", VAR_PROGS .. "/cmm/sysmon/sysmon.com"},
{"TMPDISK", VAR_PROGS .. "/cmm/tmpdisk/tmpdisk.com"}, {"TMPDISK", VAR_PROGS .. "/cmm/tmpdisk/tmpdisk.com"},
{"DEVELOP/CLIPVIEW", VAR_PROGS .. "/cmm/clipview/clipview.com"}, {"DEVELOP/CLIPVIEW", VAR_PROGS .. "/cmm/clipview/clipview.com"},
{"DEVELOP/MENU", VAR_PROGS .. "/cmm/menu/menu.com"}, {"DEVELOP/MENU", VAR_PROGS .. "/cmm/menu/menu.com"},
{"DEVELOP/PIPET", VAR_PROGS .. "/cmm/misc/pipet.com"},
{"File Managers/EOLITE", VAR_PROGS .. "/cmm/eolite/Eolite.com"}, {"File Managers/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"},
{"DEVELOP/DIFF", VAR_PROGS .. "/cmm/diff/diff.com"}, {"DEVELOP/DIFF", VAR_PROGS .. "/cmm/diff/diff.com"},
@@ -694,7 +697,6 @@ tup.append_table(extra_files, {
{"kolibrios/utils/notes", VAR_PROGS .. "/cmm/notes/notes.com"}, {"kolibrios/utils/notes", VAR_PROGS .. "/cmm/notes/notes.com"},
{"kolibrios/utils/osupdate", VAR_PROGS .. "/cmm/misc/osupdate.com"}, {"kolibrios/utils/osupdate", VAR_PROGS .. "/cmm/misc/osupdate.com"},
{"kolibrios/utils/quark", VAR_PROGS .. "/cmm/quark/quark.com"}, {"kolibrios/utils/quark", VAR_PROGS .. "/cmm/quark/quark.com"},
{"kolibrios/utils/kf_view", VAR_PROGS .. "/cmm/kf_font_viewer/font_viewer.com"},
}) })
end -- tup.getconfig('NO_CMM') ~= 'full' end -- tup.getconfig('NO_CMM') ~= 'full'
@@ -891,10 +893,6 @@ for i,v in ipairs(img_files) do
str = string.gsub(str, "%%", "%%%%") -- escape % as %% str = string.gsub(str, "%%", "%%%%") -- escape % as %%
cmd += " && str=" .. str cmd += " && str=" .. str
cmd += ' && echo -n $str | dd status=none of=%o bs=1 seek=`expr 274 - length "$str"` conv=notrunc' cmd += ' && echo -n $str | dd status=none of=%o bs=1 seek=`expr 274 - length "$str"` conv=notrunc'
str2='$(get-current-cmtid|grep -oE "\\+[0-9]+")'
str2 = string.gsub(str2, "%$", "\\$") -- escape $ as \$
cmd += " && str2=" .. str2
cmd += ' && echo -n $str2 | dd status=none of=%o bs=1 seek=216 conv=notrunc'
end end
local_file = VAR_KERNEL .. "/.kernel.mnt" local_file = VAR_KERNEL .. "/.kernel.mnt"
tup.definerule{inputs = {v[2]}, command = cmd, outputs = {local_file}} tup.definerule{inputs = {v[2]}, command = cmd, outputs = {local_file}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 720 B

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

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

BIN
data/common/signs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

2
data/en_US/Tupfile.lua Normal file
View File

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

View File

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

95
data/en_US/welcome.htm Normal file
View File

@@ -0,0 +1,95 @@
<html>
<title>Welcome notes</title>
<body bgcolor=#fff>
<h1>
<font color=1BB71A>Welcome to KolibriOS</font>
</h1>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">
Dear friends,
What you see now is the most compact operating system in the whole world. KolibriOS is a piece of programming art that is based on logic and coffee.
As no one reads manuals, I'm here to help with the most common issues that new users of KolibriOS are facing. This document is also required to read for any <b>YouTube blogger</b> who wants to make a review of the system :)
<dd><h3><kosicon n=5> Floppy version</h3>
The asterisk [*] in the Menu means the app isn't available in the Floppy version, only in the Big distro (Flash/ISO/UEFI-HDD). Not all programs are available via Menu to encourage you to explore KolibriOS files by yourself.
<h3><kosicon n=25> If you have problems with USB</h3>
Only USB 1.1 and USB 2.0 ports are supported, not USB 3+. And yep, the USB driver is written entirely in assembler. Some motherboards have options like "USB Legacy Support" or something similar, which may help the system detect your device. Also, some ports on your motherboard may work while others may not, only G-d knows why. So, play with the BIOS/UEFI settings and try different ports.
<h3><kosicon n=7> Sound</h3>
List of supported devices:
- Most AC97 cards: Intel, nForce, VIA
- A variety of HD Audio devices: Intel, Realtek...
- SIS PCI audio (Sis 7012)
- Creative labs EMU10K1X (Dell OEM)
- Media Forte FM801
- ISA Sound Blaster 16
<i>Only THIS particular model works,
not other cards that have software SB16-emulation</i>
<h3><kosicon n=61> Video</h3>
By default, you can change the resolution only on the blue boot screen. The modes listed there are provided by the video card's BIOS. It is impossible to 'simply add additional screen modes to the list'. If video card's BIOS doesn't provide some modes then you need a driver. It is not possible to write a generic video card driver. Separate driver must be written for each specific video card model.
Intel and AMD drivers for some video cards are ported from Linux and are available in the Big distro.
Check SYSPANEL. Features: ability to change resolution in KolibriOS, hardware cursor (not actual anymore), bit-blit operations acceleration.
<h3><kosicon n=25> Wi-Fi</h3>
Not supported. You have to know that the Wi-Fi specification is so complex that it is almost impossible to write the code for it from scratch. Only big OSes like Windows / Linux / BSD have it. MacOS and Haiku just ported the BSD drivers. I don't say porting them to KolibiOS is not possible, but the required effort is going to be tremendous.
<h3><kosicon n=25> LAN/Ethernet</h3>
List of supported devices:
- 3c59x 3Com Fast EtherLink (3c59x/450/555/556/575/900/905/980)
- ar81xx Atheros 8131/8132/8151/8152/8161/8162/8171/8172
Killer E2200/E2400/E2500
- dec21x4x* Accton en1207B-TX, DEC 21140, ..., VirtualPC
- forcedeth* Nvidia nForce chipset integrated Ethernet
- i8255x Intel eepro/100 (i8255x, i82562, i82801, ...), QEMU
- i8254x Intel PRO/1000 (i8254x), Virtualbox, BOCHS, QEMU
- mtd80x Myson MTD803
- pcnet32 AMD PCnet (79c970, 79c978, 79c973, ...), Virtualbox, QEMU
- r6040 RDC Semiconductors R6040
- rhine VIA Rhine II and III
- rtl8029 Realtek 8029/8019, ne2000 PCI, BOCHS, QEMU
- rtl8139 Realtek 8139 and clones, QEMU
- rtl8169 Realtek 8110/8111/8167/8168/8169
- sis900 SiS900, 7016
* - in development
Blessed be our Flemish friend Jeffrey, who has written most of the Network staff by him: stack, drivers, and a lot of apps (except WebView).
<h3><kosicon n=12> WebView</h3>
It was never intended to be a browser, but rather a Help Center that uses HTML markup. It fits this purpose well, doesn't it? According to current WebView's codebase (that was my first app ever) it will never become a normal web browser. Please help us and write/port something good. For example, it will be nice try to finish Netsurf port.
<h3><kosicon n=9> How did you achieve so much while being so small?</h3>
- Kernel, almost all drivers and most applications are written in assembly language
- Files in IMG are packed via the LZMA algorithm from 7-Zip. They are unpacked to RAM when accessed
- Most of the images are manually optimized: posterization, dithering and other techniques were used
- Files names in IMG fit 8.3 naming convention (name.extension) which doesn't use additional FAT12 space
- Image files are combined into a single file
- Compact binary header of applications, no sections
- Resources are reused, and file duplication is avoided, for example:
~ Many apps use shared libraries
~ KFM2 and Eolite are a single app, just with different appearance
~ APP+, Games Center and System Panel are a single app also
~ Memory Blocks game uses system icons as images
See more <a href=http://wiki.kolibrios.org/wiki/Hardware_Support>http://wiki.kolibrios.org/wiki/Hardware_Support</a>
</dd>
<h3><kosicon n=13> Last words</h3>
<font bg=#F9F0A3>We want to express our gratitude to every KolibriOS contributor. Also, we would like to give special thanks to Ville M. Turjanmaa, the author of MenuetOS, the predecessor of our system.
Finally, we want to thank you, brave and curious users, as we are doing it all for you!
Have fun!</font>
Sincerely yours,
KolibriOS Team
<img src=/kolibrios/res/system/signs.png alt="You have to use Big Distro to see this image!">
<!-- Somewhere deep in the Galaxy stars light up and go out, empires are born and turn to dust. In this impenetrable darkness and decadence, there are people who are still working on KolibriOS. Many years will pass and perhaps you and I will no longer be here, and our great-grandchildren will ask "Who were those insane who made such an incredible OS?" -->

View File

@@ -13,6 +13,7 @@
16 Centro de juegos |allgames 16 Centro de juegos |allgames
60 System panel |syspanel 60 System panel |syspanel
18 Ayuda |docpack 18 Ayuda |docpack
49 Buscar |search
53 Ejecutar aplicaci<63>n |run 53 Ejecutar aplicaci<63>n |run
04 Apagar |end 04 Apagar |end
#1 **** DEMOS #1 **** DEMOS

View File

@@ -12,6 +12,7 @@
23 <20><><EFBFBD><E0AEA2><><E6A5AD> |allgames 23 <20><><EFBFBD><E0AEA2><><E6A5AD> |allgames
60 <20><><EFBFBD><EFBFBD><E2A5AC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |syspanel 60 <20><><EFBFBD><EFBFBD><E2A5AC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |syspanel
18 <20><><EFBFBD><EFBFBD><E3ACA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |docpack 18 <20><><EFBFBD><EFBFBD><E3ACA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |docpack
49 <20><><EFBFBD><EFBFBD><EFBFBD> |search
53 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> |run 53 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> |run
04 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD><><E0A0A1><EFBFBD> |end 04 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD><><E0A0A1><EFBFBD> |end
#1 **** 2D <20><><EFBFBD><EFBFBD><EFBFBD> #1 **** 2D <20><><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -3,10 +3,25 @@ HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../programs" or tup.getco
tup.include(HELPERDIR .. "/use_fasm.lua") tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir()) add_include(tup.getvariantdir())
-- environment variables
tup.import("KOLIBRIOS_BUILD_OFFSET") -- 1234
tup.import("KOLIBRIOS_BUILD_CMTID") -- 0xaabbccdd
tup.import("KOLIBRIOS_BUILD_DBGTAG") -- 0x61 for 'a', etc
str_build = ""
if KOLIBRIOS_BUILD_OFFSET then
str_build += " -dBUILD_OFFSET=" .. KOLIBRIOS_BUILD_OFFSET
end
if KOLIBRIOS_BUILD_CMTID then
str_build += " -dBUILD_CMTID=" .. KOLIBRIOS_BUILD_CMTID
end
if KOLIBRIOS_BUILD_DBGTAG then
str_build += " -dBUILD_DBGTAG=" .. KOLIBRIOS_BUILD_DBGTAG
end
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"}) tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt") tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -s %o.fas" .. str_build .. tup.getconfig("KERPACK_CMD"), {"kernel.mnt", extra_outputs = {"kernel.mnt.fas"}})
--tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -s %o.fas" .. tup.getconfig("KERPACK_CMD"), {"kernel.mnt", extra_outputs = {"kernel.mnt.fas"}})
--tup.rule({"kernel.mnt.fas", extra_inputs = {"kernel.mnt"}}, "symbols %f %o", "kernel.mnt.sym") --tup.rule({"kernel.mnt.fas", extra_inputs = {"kernel.mnt"}}, "symbols %f %o", "kernel.mnt.sym")
--tup.rule({"kernel.mnt.fas", extra_inputs = {"kernel.mnt"}}, "listing %f %o", "kernel.mnt.lst") --tup.rule({"kernel.mnt.fas", extra_inputs = {"kernel.mnt"}}, "listing %f %o", "kernel.mnt.lst")
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -dextended_primary_loader=1" .. tup.getconfig("KERPACK_CMD"), "kernel.mnt.ext_loader") tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o " .. str_build .. " -dextended_primary_loader=1 " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt.ext_loader")
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -dpretest_build=1 -ddebug_com_base=0xe9", "kernel.mnt.pretest") tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o " .. str_build .. " -dpretest_build=1 -ddebug_com_base=0xe9", "kernel.mnt.pretest")

View File

@@ -29,23 +29,29 @@ macro line_space {
} }
d80x25_top: d80x25_top:
line_full_top line_full_top
if __REV__ > 0 ; draw seven digits of the git hash
__x = BUILD_CMTID
if __x > 0
__x = __x SHR 4
cur_line_pos = 75 cur_line_pos = 75
store byte ' ' at d80x25_top+cur_line_pos+1 store byte ' ' at d80x25_top+cur_line_pos+1
rev_var = __REV__ repeat 7
while rev_var > 0 digit = __x AND 0xf
store byte rev_var mod 10 + '0' at d80x25_top+cur_line_pos if digit > 9
cur_line_pos = cur_line_pos - 1 digit = digit - 10 + 'a'
rev_var = rev_var / 10 else
end while digit = digit + '0'
store byte ' ' at d80x25_top+cur_line_pos end if
store dword ' SVN' at d80x25_top+cur_line_pos-4 store byte digit at d80x25_top+cur_line_pos
cur_line_pos = cur_line_pos - 1
__x = __x SHR 4
end repeat
store byte ' ' at d80x25_top+cur_line_pos
store dword ' GIT' at d80x25_top+cur_line_pos-4
end if end if
space_msg: space_msg:
line_space line_space
verstr: verstr:
; line_space
; version string ; version string
db 186,32 db 186,32
repeat 78 repeat 78

View File

@@ -24,9 +24,38 @@ org 0
; struct kernel_header ; struct kernel_header
jmp start_of_code ; jump jmp start_of_code ; jump
db 'KolibriOS ' ; signature db 'KolibriOS ' ; signature
db 'v0.7.7.0 ',13,10,13,10,0 ; FIXME: get distribution version from git tag db 'v0.7.7.0' ; FIXME: get distribution version from git tag?
.offset db ' ',13,10,0
dd B32-KERNEL_BASE ; offset of the kernel's 32-bit entry point dd B32-KERNEL_BASE ; offset of the kernel's 32-bit entry point
cur_line_pos = 0
offset_len = 0
__x = BUILD_OFFSET
if __x > 0
store byte '+' at .offset+cur_line_pos
if __x < 10
offset_len = 2 ; '+' and a digit
else if __x < 100
offset_len = 3
else if __x < 1000
offset_len = 4
else if __x < 10000
offset_len = 5
else
offset_len = 6
end if
cur_line_pos = cur_line_pos + offset_len - 1
while __x > 0
store byte __x mod 10 + '0' at .offset+cur_line_pos
cur_line_pos = cur_line_pos - 1
__x = __x / 10
end while
end if
if BUILD_DBGTAG > 0
store byte '-' at .offset+offset_len
store byte BUILD_DBGTAG at .offset+offset_len+1
end if
include "boot/bootstr.inc" ; language-independent boot messages include "boot/bootstr.inc" ; language-independent boot messages
include "boot/preboot.inc" include "boot/preboot.inc"

View File

@@ -227,6 +227,33 @@ struct kernel_header
; KERNEL.MNT file can be booted on BIOS as well as on UEFI. ; KERNEL.MNT file can be booted on BIOS as well as on UEFI.
ends ends
struct kernel_version
; OS release number, e.g. 0,7,7,0. Distro-specific.
osrel rb 4
; A single char like 'a' to append to the version, or 0 to omit it.
; 0 means 0.7.7.0+1234, 'a' means 0.7.7.0+1234-a, etc.
; This allows developers to determine the debug build by its log.
; Unfortunately, users sometimes mess things and test not the build they
; were asked to test.
dbgtag db ?
; The kernel itself doesn't have any version other than its ABI version.
; The minor and major parts were meant to mean significant compatible
; and incompatible changes correspondingly. It is for a developer to
; decide on what is a significant change.
abimin db ?
; The major ABI version must be at least 0x28 for backward compatibility
; with the old revision number: 0x2800 = 10240 > the last SVN revision.
abimaj dw ?
; In binary, e.g. a short git hash. A single dword is 8 digits which
; should be enough for the foreseeable future. We always can get space
; for four more digits from the two reserved bytes below if needed.
cmtid dd ?
reserved dw ?
; The number of commits from the last release.
offset dw ?
ends
assert sizeof.kernel_version = 16
DRIVE_DATA_SIZE = 16 DRIVE_DATA_SIZE = 16
OS_BASE = 0x80000000 OS_BASE = 0x80000000

View File

@@ -970,13 +970,21 @@ picture rb Xsize*Ysize*4 ; 32 бита
размером 16 байт для будущей совместимости, в будущем могут быть размером 16 байт для будущей совместимости, в будущем могут быть
добавлены некоторые поля. добавлены некоторые поля.
Структура буфера: Структура буфера:
db a,b,c,d для версии a.b.c.d db a,b,c,d для версии ОС a.b.c.d
db 0: зарезервировано db отладочная метка, для релиза всегда 0, иначе любой символ ASCII
dd REV - номер svn-ревизии ядра db младшая часть ABI ядра
Для ядра Kolibri 0.7.7.0+: dw старшая часть ABI ядра
dd идентификатор коммита, например краткий git-хэш в бинарном виде
dw зарезервировано
dw количество коммитов с момента последнего релиза
Пример структуры для ядра Kolibri 0.7.7.0+:
db 0,7,7,0 db 0,7,7,0
db 0 db 0
dd 1675 db 0
dw 40
dd 0xf26d5b28
dw 0
dw 1675
---------------------- Константы для регистров: ---------------------- ---------------------- Константы для регистров: ----------------------
eax - SF_SYSTEM (18) eax - SF_SYSTEM (18)

View File

@@ -962,13 +962,21 @@ Remarks:
16 byte buffer for the future compatibility, in the future 16 byte buffer for the future compatibility, in the future
some fields can be added. some fields can be added.
Structure of the buffer: Structure of the buffer:
db a,b,c,d for version a.b.c.d db a,b,c,d for os version a.b.c.d
db 0: reserved db debug tag, 0 for release, any ASCII char otherwise
dd REV - kernel SVN revision number db kernel ABI minor
For Kolibri 0.7.7.0+ kernel: dw kernel ABI major
dd commit id, e.g. short git hash in binary
dw reserved
dw the number of commits since the latest release
For Kolibri 0.7.7.0+ the structure is like this:
db 0,7,7,0 db 0,7,7,0
db 0 db 0
dd 1675 db 0
dw 40
dd 0xf26d5b28
dw 0
dw 1675
---------------------- Constants for registers: ---------------------- ---------------------- Constants for registers: ----------------------
eax - SF_SYSTEM (18) eax - SF_SYSTEM (18)

View File

@@ -30,6 +30,8 @@ format binary as "mnt"
include 'macros.inc' include 'macros.inc'
include 'struct.inc' include 'struct.inc'
ABI_MAJOR = 0x28
ABI_MINOR = 0
USE_COM_IRQ = 1 ; make irq 3 and irq 4 available for PCI devices USE_COM_IRQ = 1 ; make irq 3 and irq 4 available for PCI devices
VESA_1_2_VIDEO = 0 ; enable vesa 1.2 bank switch functions VESA_1_2_VIDEO = 0 ; enable vesa 1.2 bank switch functions
@@ -711,10 +713,33 @@ end if
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; show SVN version of kernel on the message board ; show OS version, offset, debug tag and commit id on the message board
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
mov eax, [version_inf.rev] mov eax, version_inf.osrel
DEBUGF 1, "K : kernel SVN r%d\n", eax DEBUGF 1, "K : OS version: %u.%u.%u.%u", [eax+0]:1, [eax+1]:1, \
[eax+2]:1, [eax+3]:1, ecx
movzx ecx, [version_inf.offset]
jecxz @f
DEBUGF 1, "+%u", ecx
@@:
movzx ecx, [version_inf.dbgtag]
jecxz @f
push ecx
mov ecx, esp
DEBUGF 1, "-%s", ecx
pop ecx
@@:
DEBUGF 1, "\n"
mov ecx, [version_inf.cmtid]
jecxz @f
DEBUGF 1, "K : Commit ID: %x\n", ecx
@@:
;-----------------------------------------------------------------------------
; show kernel ABI
;-----------------------------------------------------------------------------
movzx eax, [version_inf.abimaj]
movzx ecx, [version_inf.abimin]
DEBUGF 1, "K : Kernel ABI: %u.%u\n", eax, ecx
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; show CPU count on the message board ; show CPU count on the message board
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
@@ -2102,12 +2127,12 @@ sysfn_getdiskinfo: ; 18.11 = get disk info table
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_getversion: ; 18.13 = get kernel ID and version sysfn_getversion: ; 18.13 = get kernel ID and version
; if given memory address belongs to kernel then error ; if given memory address belongs to kernel then error
stdcall is_region_userspace, ecx, version_inf.size stdcall is_region_userspace, ecx, sizeof.kernel_version
jnz .addr_error jnz .addr_error
mov edi, ecx mov edi, ecx
mov esi, version_inf mov esi, version_inf
mov ecx, version_inf.size mov ecx, sizeof.kernel_version
rep movsb rep movsb
ret ret
.addr_error: ; if given memory address is illegal .addr_error: ; if given memory address is illegal
@@ -2287,11 +2312,18 @@ sound_flag db 0
endg endg
iglobal iglobal
version_inf: if ~ definite BUILD_DBGTAG
db 0,7,7,0 ; FIXME: Get distribution version from git tag BUILD_DBGTAG = 0
db 0 end if
.rev dd __REV__ if ~ definite BUILD_CMTID
.size = $ - version_inf BUILD_CMTID = 0
end if
if ~ definite BUILD_OFFSET
BUILD_OFFSET = 0
end if
align 4
version_inf kernel_version <0,7,7,0>, BUILD_DBGTAG, ABI_MINOR, ABI_MAJOR, \
BUILD_CMTID, 0, BUILD_OFFSET
endg endg
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4 align 4
@@ -4457,8 +4489,6 @@ end if
include "data32.inc" include "data32.inc"
__REV__ = __REV
if ~ lang eq es_ES if ~ lang eq es_ES
diff16 "end of kernel code",0,$ diff16 "end of kernel code",0,$
end if end if

View File

@@ -5,16 +5,6 @@
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
__REV = 0
macro $Revision a {
match =: Num =$,a \{
if __REV < Num
__REV = Num
end if
\}
}
;// mike.dld, 2006-29-01 [ ;// mike.dld, 2006-29-01 [
; macros definition ; macros definition

View File

@@ -68,6 +68,7 @@ struct TWebBrowser {
void tag_a(); void tag_a();
void tag_p(); void tag_p();
void tag_img(); void tag_img();
void tag_kosicon();
void tag_div(); void tag_div();
void tag_h1234_caption(); void tag_h1234_caption();
void tag_ol_ul_dt(); void tag_ol_ul_dt();
@@ -176,7 +177,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
} }
} }
if (ESBYTE[bufpos] == '&') { if (ESBYTE[bufpos] == '&') {
bufpos = GetUnicodeSymbol(#linebuf, sizeof(TWebBrowser.linebuf), bufpos+1, bufpointer+bufsize); bufpos = GetUnicodeSymbol(#linebuf, sizeof(TWebBrowser.linebuf)-1, bufpos+1, bufpointer+bufsize);
continue; continue;
} }
if (ESBYTE[bufpos] == '<') && (is_html) { if (ESBYTE[bufpos] == '<') && (is_html) {

View File

@@ -67,7 +67,7 @@ bool _tag::parse(dword _bufpos, bufend)
if (!whitepos) || (whitepos > closepos) { if (!whitepos) || (whitepos > closepos) {
//no param //no param
strncpy(#name, bufpos, math.min(closepos - bufpos, sizeof(tag.name))); strncpy(#name, bufpos, math.min(closepos - bufpos, sizeof(tag.name)-1));
bufpos = closepos; bufpos = closepos;
} else { } else {
//we have param //we have param
@@ -76,7 +76,7 @@ bool _tag::parse(dword _bufpos, bufend)
if (openpos < strchr(closepos+1, '>')) break; if (openpos < strchr(closepos+1, '>')) break;
if (!closepos = EAX) {closepos = bufend;break;} if (!closepos = EAX) {closepos = bufend;break;}
} }
strncpy(#name, bufpos, math.min(whitepos - bufpos, sizeof(tag.name))); strncpy(#name, bufpos, math.min(whitepos - bufpos, sizeof(tag.name)-1));
bufpos = closepos; bufpos = closepos;
params = malloc(closepos - whitepos + 1); params = malloc(closepos - whitepos + 1);

View File

@@ -151,7 +151,7 @@ bool TWebBrowser::RenderImage(dword cur_img)
int img_x, img_y, img_w, img_h; int img_x, img_y, img_w, img_h;
dword imgbuf[44]; dword imgbuf[44];
if (!cur_img) return false; if (!cur_img) || (!buf_data) return false;
img_h = ESDWORD[cur_img+8]; img_h = ESDWORD[cur_img+8];
img_w = ESDWORD[cur_img+4]; img_w = ESDWORD[cur_img+4];

View File

@@ -10,6 +10,7 @@ void TWebBrowser::SetStyle()
if (tag.is("a")) { tag_a(); return; } if (tag.is("a")) { tag_a(); return; }
if (tag.is("p")) { tag_p(); return; } if (tag.is("p")) { tag_p(); return; }
if (tag.is("img")) { tag_img(); return; } if (tag.is("img")) { tag_img(); return; }
if (tag.is("kosicon")) { tag_kosicon(); return; }
if (tag.is("div")) { tag_div(); return; } if (tag.is("div")) { tag_div(); return; }
if (tag.is("br")) { /*draw_x++;*/NewLine(); return; } if (tag.is("br")) { /*draw_x++;*/NewLine(); return; }
if (tag.is("nav")) { style.nav = tag.opened; return; } if (tag.is("nav")) { style.nav = tag.opened; return; }
@@ -266,6 +267,17 @@ void TWebBrowser::tag_h1234_caption()
} }
} }
void TWebBrowser::tag_kosicon()
{
dword imgbuf[44];
dword shared_i18 = memopen("ICONS18", NULL, SHM_READ);
if (shared_i18) && (tag.get_number_of("n")) {
if (draw_x + 18 > canvas.bufw) NewLine();
canvas.DrawImage(draw_x, draw_y-2, 18, 18, 18*18*4*tag.number+shared_i18);
draw_x += 22;
}
}
void TWebBrowser::tag_img() void TWebBrowser::tag_img()
{ {
@@ -305,7 +317,7 @@ void TWebBrowser::tag_img()
img_decode stdcall (cache.current_buf, cache.current_size, 0); img_decode stdcall (cache.current_buf, cache.current_size, 0);
if (EAX) goto IMGOK; else goto NOIMG; if (EAX) goto IMGOK; else goto NOIMG;
} else { } else {
img_url.add(#img_path); if (img_url.get_pos_by_name(#img_path)==-1) img_url.add(#img_path);
goto NOIMG; goto NOIMG;
} }
@@ -453,9 +465,10 @@ void TWebBrowser::tag_table()
} }
if (table.cols.get(tr_pos-1)-td_pos>1) && (tag.get_number_of("width")) { if (table.cols.get(tr_pos-1)-td_pos>1) && (tag.get_number_of("width")) {
if (strchr(tag.value, '%')) { if (strchr(tag.value, '%')) {
tag.number = cur_cell_w - table.margin - 23 - left_gap * tag.number / 100; tag.number = cur_cell_w * tag.number / 100; //
} }
if (tag.number < draw_w) draw_w = tag.number; if (tag.number < list.w - table.margin - left_gap) draw_w = tag.number;
} }
draw_y = row_start_y; draw_y = row_start_y;
td_pos++; td_pos++;

View File

@@ -66,6 +66,7 @@ char *unicode_symbols[]={
"lowast","*", "lowast","*",
"#128154","<3", "#128154","<3",
"#128545",":(",
0}; 0};

View File

@@ -79,7 +79,7 @@ char default_dir[] = "/sys";
od_filter filter2 = { 22, "TXT\0HTM\0HTML\0DOCX\0\0" }; od_filter filter2 = { 22, "TXT\0HTM\0HTML\0DOCX\0\0" };
char editURL[URL_SIZE+1]; char editURL[URL_SIZE+1];
edit_box omnibox_edit = {, 0, 0, 0xffffff, edit_box omnibox_edit = {250, 0, 0, 0xffffff,
0x94AECE, 0xffffff, 0xffffff,0x10000000,URL_SIZE-2,#editURL,0,,19,19}; 0x94AECE, 0xffffff, 0xffffff,0x10000000,URL_SIZE-2,#editURL,0,,19,19};
//===================================================// //===================================================//
@@ -199,7 +199,7 @@ void main()
GetProcessInfo(#Form, SelfInfo); GetProcessInfo(#Form, SelfInfo);
ProcessMenuClick(); ProcessMenuClick();
sc.get(); sc.get();
if (Form.status_window>2) break; if (Form.status_window & ROLLED_UP) break;
if (Form.height<120) { MoveSize(OLD,OLD,OLD,120); break; } if (Form.height<120) { MoveSize(OLD,OLD,OLD,120); break; }
if (Form.width<280) { MoveSize(OLD,OLD,280,OLD); break; } if (Form.width<280) { MoveSize(OLD,OLD,280,OLD); break; }
draw_window(); draw_window();
@@ -258,6 +258,7 @@ void main()
free(http.content_pointer); free(http.content_pointer);
GetImg(false); GetImg(false);
} }
debugln("end evNetwork");
} }
break; break;
default: default:
@@ -516,7 +517,6 @@ bool GetLocalFileData(dword _path)
bool GetUrl(dword _http_url) bool GetUrl(dword _http_url)
{ {
char new_url_full[URL_SIZE+1]; char new_url_full[URL_SIZE+1];
if (!strncmp(_http_url,"http:",5)) { if (!strncmp(_http_url,"http:",5)) {
http.get(_http_url); http.get(_http_url);
return true; return true;
@@ -571,10 +571,10 @@ void OpenPage(dword _open_URL)
//INTERNAL PAGE //INTERNAL PAGE
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)-1);
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)-1);
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)-1);
} else if (!strncmp(#new_url,"http:",5)) || (!strncmp(#new_url,"https:",6)) { } else if (!strncmp(#new_url,"http:",5)) || (!strncmp(#new_url,"https:",6)) {
//WEB PAGE //WEB PAGE
@@ -589,7 +589,7 @@ void OpenPage(dword _open_URL)
if (!http.transfer) { if (!http.transfer) {
history.add(#new_url); history.add(#new_url);
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)); LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
} }
} else { } else {
//LOCAL PAGE //LOCAL PAGE
@@ -602,7 +602,7 @@ void OpenPage(dword _open_URL)
strcpy(#new_url, "/tmp0/1/temp/word/document.xml"); strcpy(#new_url, "/tmp0/1/temp/word/document.xml");
} }
if (!GetLocalFileData(#new_url)) { if (!GetLocalFileData(#new_url)) {
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)); LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
} }
} }
} }
@@ -712,7 +712,7 @@ void EventSubmitOmnibox()
void LoadInternalPage(dword _bufdata, _in_bufsize){ void LoadInternalPage(dword _bufdata, _in_bufsize){
if (!_bufdata) || (!_in_bufsize) { if (!_bufdata) || (!_in_bufsize) {
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)); LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
} else { } else {
WB1.list.first = 0; //scroll page to the top WB1.list.first = 0; //scroll page to the top
DrawOmnibox(); DrawOmnibox();
@@ -870,7 +870,7 @@ void DrawStatusBar(dword _msg)
{ {
dword status_y = Form.cheight - STATUSBAR_H + 4; dword status_y = Form.cheight - STATUSBAR_H + 4;
dword status_w = Form.cwidth - 90; dword status_w = Form.cwidth - 90;
if (Form.status_window>2) return; if (Form.status_window & ROLLED_UP) return;
DrawBar(0,Form.cheight - STATUSBAR_H+1, Form.cwidth,STATUSBAR_H-1, sc.work); DrawBar(0,Form.cheight - STATUSBAR_H+1, Form.cwidth,STATUSBAR_H-1, sc.work);
if (_msg) { if (_msg) {
ESI = math.min(status_w/6, strlen(_msg)); ESI = math.min(status_w/6, strlen(_msg));
@@ -920,7 +920,7 @@ dword GetAbsoluteActiveURL()
void CheckContentType() void CheckContentType()
{ {
char content_type[64]; char content_type[64];
if (http.header_field("content-type", #content_type, sizeof(content_type))) // application || image if (http.header_field("content-type", #content_type, sizeof(content_type)-1)) // application || image
if (content_type[0] == 'i') { if (content_type[0] == 'i') {
EventDownloadAndOpenImage(http.cur_url); EventDownloadAndOpenImage(http.cur_url);
@@ -968,12 +968,14 @@ dword GetImg(bool _new)
for (i = 0; i < WB1.img_url.count; i++) for (i = 0; i < WB1.img_url.count; i++)
{ {
cur_img_url = WB1.img_url.get(i); cur_img_url = WB1.img_url.get(i);
if (debug_mode)
{debug("get img: ");debugln(cur_img_url);}
if (cache.has(cur_img_url)==false) { if (cache.has(cur_img_url)==false) {
prbar.max = WB1.img_url.count; prbar.max = WB1.img_url.count;
prbar.value = i; prbar.value = i;
if (GetUrl(cur_img_url)) {DrawStatusBar(cur_img_url); DrawProgress(); return;} if (GetUrl(cur_img_url)) {
DrawStatusBar(cur_img_url);
DrawProgress();
return;
}
} }
} }
if (_new) return; if (_new) return;

View File

@@ -112,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.82"; char version[]="WebView 3.85";

View File

@@ -2,38 +2,38 @@
<title>TEST</title> <title>TEST</title>
<style>a {display:block;font-size:130%;margin:5px 40px 5px 0;}</style> <style>a {display:block;font-size:130%;margin:5px 40px 5px 0;}</style>
<body> <body>
<pre><a href=//wiby.org>wiby.org</a>
<a href=//www.xlr8yourmac.com/OSX/os_x_network_cards.html>OSX network cards</a>
<a href=//macintoshgarden.org/>Macintosh Garden</a>
<table><tr><td>Simplest: <pre><h2>HTTP</h2>
<a href=//nostalgy.net.ru/>nostalgy.net.ru</a> <a href=//th99.infania.net>Total Hardware 1999</a>
<a href=//wiby.org>wiby.org</a>
<a href=//menuetos.net>menuetos.net</a>
<a href=//macintosh.garden/>Macintosh Garden</a>
<a href=//pci-ids.ucw.cz>pci.ids</a> <a href=//pci-ids.ucw.cz>pci.ids</a>
<a href=//toastytech.com/guis/index.html>GUI Gallery</a>
<a href=//www.weitek.com/textual/support/driver.html>weitek</a>
<a href=//www.abandonwarering.com/?Page=Listing>abandonware</a>
<a href=//neonfloppy.sytes.net/articles/win3-usb/>neonfloppy</a>
<a href=//www.win31.de/eindex.htm>win31.de</a>
<h3>VPN-only</h3>
<a href=//dgmag.in>dgmag.in</a> <a href=//dgmag.in>dgmag.in</a>
<a href=//web.archive.org/web/https://bash.im>bash.im</a> <a href=//fdd5-25.pdp-11.ru>fdd5-25</a>
<a href=//web.archive.org/web/https://opennet.ru>opennet</a> <a href=//old-dos.ru>old-dos.ru</a>
<a href=//linux.org.ru>LOR</a> <a href=//artcon.ru>artcon.ru</a>
<a href=//web.archive.org/web/https://samlib.ru/b>samlib.ru/b</a> <a href=//nubo.ru>nubo.ru</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> <a href=//nostalgy.net.ru/>nostalgy.net.ru</a>
<td>Simple:
<a href=//web.archive.org/web/http://lionovsky.us>lionovsky.us</a> <h2>HTTPS :(</h2>
<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>
<a href=//vetusware.com>vetusware.com</a> <a href=//lionovsky.us>lionovsky.us</a>
<a href=//th99.infania.net>Total Hardware 1999</a>
<a href=//toastytech.com/guis/index.html>GUI Gallery</a>
<a href=//menuetos.net>menuetos.net</a>
<tr><td>
Moderate:
<a href=//fdd5-25.pdp-11.ru>fdd5-25</a>
<a href=//acmp.ru/index.asp?main=tasks>acmp.ru</a> <a href=//acmp.ru/index.asp?main=tasks>acmp.ru</a>
<a href=//old-dos.ru>old-dos.ru</a> <a href=//xn--80abh7bk0c.xn--p1ai>bashorg</a>
<a href=//www.weitek.com/textual/support/driver.html>weitek</a> <a href=//opennet.ru>opennet</a>
<a href=//www.abandonwarering.com/?Page=Listing>abandonware</a> <a href=//linux.org.ru>LOR</a>
<td>Complex: <a href=//www.xlr8yourmac.com/OSX/os_x_network_cards.html>OSX network cards</a>
<a href=//web.archive.org/web/https://artcon.ru>artcon.ru</a> <a href=//samlib.ru/b>samlib.ru/b</a>
<a href=//nubo.ru>nubo.ru</a> <a href=//vetusware.com>vetusware.com</a>
<a href=//electromyne.de>electromyne.de</a> <a href=//electromyne.de>electromyne.de</a>
<a href=//web.archive.org/web/20190403215447//www.thg.ru/>thg</a>

View File

@@ -11,9 +11,9 @@ TODO:
http://board.kolibrios.org/viewtopic.php?f=23&t=4521&p=77334#p77334 http://board.kolibrios.org/viewtopic.php?f=23&t=4521&p=77334#p77334
*/ */
#define ABOUT_TITLE "EOLITE 5.27" #define ABOUT_TITLE "EOLITE 5.30"
#define TITLE_EOLITE "Eolite File Manager 5.27" #define TITLE_EOLITE "Eolite File Manager 5.30"
#define TITLE_KFM "Kolibri File Manager 2.27"; #define TITLE_KFM "Kolibri File Manager 2.30";
#define MEMSIZE 1024 * 250 #define MEMSIZE 1024 * 250
#include "../lib/clipboard.h" #include "../lib/clipboard.h"
@@ -26,12 +26,15 @@ TODO:
#include "../lib/kfont.h" #include "../lib/kfont.h"
#include "../lib/collection.h" #include "../lib/collection.h"
#include "../lib/copyf.h" #include "../lib/copyf.h"
#include "../lib/dll.h"
#include "../lib/obj/libini.h" #include "../lib/obj/libini.h"
#include "../lib/obj/box_lib.h" #include "../lib/obj/box_lib.h"
#include "../lib/obj/libimg.h" #include "../lib/obj/libimg.h"
#include "../lib/obj/proc_lib.h"
#include "../lib/patterns/history.h" #include "../lib/patterns/history.h"
#include "../lib/patterns/select_list.h"
#include "imgs/images.h" #include "imgs/images.h"
#include "include/const.h" #include "include/const.h"
@@ -110,6 +113,8 @@ edit_box popin_text = {200,213,180,0xFFFFFF,0x94AECE,0xFFFFFF,0xFFFFFF,0x1000000
PathShow_data FileShow = {0, 56,215, 8, 100, 1, 0, 0x0, 0xFFFfff, #file_name, #temp, 0}; PathShow_data FileShow = {0, 56,215, 8, 100, 1, 0, 0x0, 0xFFFfff, #file_name, #temp, 0};
_ini icons_ini = { "/sys/File managers/icons.ini", NULL };
#include "include\settings.h" #include "include\settings.h"
#include "include\gui.h" #include "include\gui.h"
#include "include\progress_dialog.h" #include "include\progress_dialog.h"
@@ -121,6 +126,8 @@ PathShow_data FileShow = {0, 56,215, 8, 100, 1, 0, 0x0, 0xFFFfff, #file_name, #t
#include "include\about.h" #include "include\about.h"
#include "include\properties.h" #include "include\properties.h"
#include "search.c"
void handle_param() void handle_param()
{ {
//-p <path> : just show file/folder properties dialog //-p <path> : just show file/folder properties dialog
@@ -146,6 +153,14 @@ void handle_param()
if (ESBYTE[p]=='\0') return; if (ESBYTE[p]=='\0') return;
if (ESBYTE[p]=='\\') switch (ESBYTE[p+1])
{
case 's':
strcpy(path, p + 3);
SearchThread();
ExitProcess();
}
if (ESBYTE[p]=='-') switch (ESBYTE[p+1]) if (ESBYTE[p]=='-') switch (ESBYTE[p+1])
{ {
case 'p': case 'p':
@@ -195,6 +210,8 @@ void main()
handle_param(); handle_param();
kfont.init(DEFAULT_FONT);
SystemDiscs.Get(); SystemDiscs.Get();
OpenDir(ONLY_OPEN); OpenDir(ONLY_OPEN);
llist_copy(#files_inactive, #files); llist_copy(#files_inactive, #files);
@@ -436,6 +453,9 @@ void main()
case SCAN_CODE_KEY_G: case SCAN_CODE_KEY_G:
EventOpenConsoleHere(); EventOpenConsoleHere();
break; break;
case SCAN_CODE_KEY_F:
EventOpenSearch();
break;
case SCAN_CODE_KEY_V: case SCAN_CODE_KEY_V:
EventPaste(path); EventPaste(path);
break; break;
@@ -542,14 +562,11 @@ void draw_window()
static int rand_n; static int rand_n;
if (!rand_n) && (Form.width + 1 != screen.w) rand_n = random(80); if (!rand_n) && (Form.width + 1 != screen.w) rand_n = random(80);
if (show_status_bar.checked) {
#define STBAR_EOLITE_H 16 #define STBAR_EOLITE_H 16
#define STBAR_KFM_H 21 #define STBAR_KFM_H 21
if (efm) status_bar_h = STBAR_KFM_H; if (efm) status_bar_h = STBAR_KFM_H;
else status_bar_h = STBAR_EOLITE_H; else status_bar_h = STBAR_EOLITE_H;
} else {
status_bar_h = 0;
}
if (efm) title = TITLE_KFM; else title = TITLE_EOLITE; if (efm) title = TITLE_KFM; else title = TITLE_EOLITE;
DefineAndDrawWindow(Form.left+rand_n,Form.top+rand_n,Form.width,Form.height,0x73,NULL,title,0); DefineAndDrawWindow(Form.left+rand_n,Form.top+rand_n,Form.width,Form.height,0x73,NULL,title,0);
GetProcessInfo(#Form, SelfInfo); GetProcessInfo(#Form, SelfInfo);
@@ -597,7 +614,7 @@ void draw_window()
} }
//main rectangles //main rectangles
DrawRectangle(1,40,Form.cwidth-3,Form.cheight - 42-status_bar_h,sc.line); DrawRectangle(1,40,Form.cwidth-3,Form.cheight - 42-status_bar_h,sc.line);
DrawBar(0,39,1,-show_status_bar.checked*status_bar_h + Form.cheight - 40, sc.work); DrawBar(0,39,1,-status_bar_h + Form.cheight - 40, sc.work);
EBX = Form.cwidth-1 * 65536 + 1; EBX = Form.cwidth-1 * 65536 + 1;
$int 64 $int 64
for (i=0; i<6; i++) DrawBar(0, 34+i, Form.cwidth, 1, MixColors(sc.dark, sc.work, i*10)); for (i=0; i<6; i++) DrawBar(0, 34+i, Form.cwidth, 1, MixColors(sc.dark, sc.work, i*10));
@@ -652,17 +669,13 @@ void DrawStatusBar()
{ {
char status_bar_str[80]; char status_bar_str[80];
int go_up_folder_exists=0; int go_up_folder_exists=0;
dword topcolor; DrawBar(0, Form.cheight - status_bar_h-1, Form.cwidth, 1, sc.light);
if (show_status_bar.checked) topcolor=sc.light; else topcolor=sc.work;
DrawBar(0, Form.cheight - status_bar_h-1, Form.cwidth, 1, topcolor);
if (efm) { if (efm) {
DrawBar(0, Form.cheight - status_bar_h, Form.cwidth, 2, sc.work); DrawBar(0, Form.cheight - status_bar_h, Form.cwidth, 2, sc.work);
DrawBar(0, Form.cheight - 2, Form.cwidth, 2, EDX); DrawBar(0, Form.cheight - 2, Form.cwidth, 2, EDX);
DrawBar(Form.cwidth-1, Form.cheight - 19, 1, 17, EDX); DrawBar(Form.cwidth-1, Form.cheight - 19, 1, 17, EDX);
DrawFuncButtonsInKfm(); DrawFuncButtonsInKfm();
} else if (show_status_bar.checked) { } else {
if (files.count>0) && (streq(items.get(0)*304+buf+72,"..")) go_up_folder_exists=1; if (files.count>0) && (streq(items.get(0)*304+buf+72,"..")) go_up_folder_exists=1;
DrawBar(0, Form.cheight - status_bar_h, Form.cwidth, status_bar_h, sc.work); DrawBar(0, Form.cheight - status_bar_h, Form.cwidth, status_bar_h, sc.work);
sprintf(#status_bar_str, T_STATUS_EVEMENTS, folder_count-go_up_folder_exists, files.count-folder_count); sprintf(#status_bar_str, T_STATUS_EVEMENTS, folder_count-go_up_folder_exists, files.count-folder_count);
@@ -1116,7 +1129,6 @@ void EventClosePopinForm()
void ShowPopinForm(byte _popin_type) void ShowPopinForm(byte _popin_type)
{ {
int popinx; int popinx;
popin_string[0] = -1;
switch(_popin_type) { switch(_popin_type) {
case POPIN_PATH: case POPIN_PATH:
edit_box_set_text stdcall (#popin_text, path); edit_box_set_text stdcall (#popin_text, path);
@@ -1131,6 +1143,7 @@ void ShowPopinForm(byte _popin_type)
DrawEolitePopup(T_CREATE, T_CANCEL); DrawEolitePopup(T_CREATE, T_CANCEL);
break; break;
case POPIN_RENAME: case POPIN_RENAME:
if (itdir) && (streq(#file_name,"..")) return;
edit_box_set_text stdcall (#popin_text, #file_name); edit_box_set_text stdcall (#popin_text, #file_name);
DrawEolitePopup(T_RENAME, T_CANCEL); DrawEolitePopup(T_RENAME, T_CANCEL);
break; break;
@@ -1188,7 +1201,7 @@ void FnProcess(byte N)
if (files.count) ShowPopinForm(POPIN_RENAME); if (files.count) ShowPopinForm(POPIN_RENAME);
break; break;
case 3: case 3:
if (files.count) && (!itdir) RunProgram("/kolibrios/utils/quark", #file_path); if (files.count) && (!itdir) RunProgram("/sys/develop/heed", #file_path);
break; break;
case 4: case 4:
if (files.count) && (!itdir) RunProgram("/sys/develop/cedit", #file_path); if (files.count) && (!itdir) RunProgram("/sys/develop/cedit", #file_path);
@@ -1327,6 +1340,12 @@ void EventOpenConsoleHere()
RunProgram("/sys/shell", #param); RunProgram("/sys/shell", #param);
} }
void EventOpenSearch()
{
sprintf(#param, "\\s %s", path);
RunProgram(#program_path, #param);
}
void ProceedMouseGestures() void ProceedMouseGestures()
{ {
char stats; char stats;

View File

@@ -1,16 +1,8 @@
if tup.getconfig("NO_CMM") ~= "" then return end if tup.getconfig("NO_CMM") ~= "" then return end
if tup.getconfig("NO_TCC") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_tcc.lua")
if tup.getconfig("LANG") == "ru_RU" if tup.getconfig("LANG") == "ru_RU"
then C_LANG = "LANG_RUS" then C_LANG = "LANG_RUS"
else C_LANG = "LANG_ENG" -- this includes default case without config else C_LANG = "LANG_ENG" -- this includes default case without config
end end
LFLAGS = LFLAGS .. " -stack=20480" tup.rule("Eolite.c", "c-- /D=$(C_LANG) /OPATH=%o %f" .. tup.getconfig("KPACK_CMD"), "Eolite.com")
LIBS += " ../../develop/ktcc/trunk/bin/lib/tiny.o -nostdlib -lbox_lib -lini -limg"
tup.rule("Eolite.c", "c-- -coff /D=" .. C_LANG .. " /OPATH=%o %f", "%B.obj")
tup.rule("Eolite.obj", "objconv -felf32 %f %o", "%B.o")
link_tcc("Eolite.o", "%B.com")

View File

@@ -42,7 +42,7 @@ void about_dialog()
about_x = -strlen(ABOUT_TITLE)*18+about_form.cwidth/2; about_x = -strlen(ABOUT_TITLE)*18+about_form.cwidth/2;
WriteTextB(about_x+2,107,0x82,0xD49CD2,ABOUT_TITLE); WriteTextB(about_x+2,107,0x82,0xD49CD2,ABOUT_TITLE);
WriteTextB(about_x,105,0x82,0x9D129D,ABOUT_TITLE); WriteTextB(about_x,105,0x82,0x9D129D,ABOUT_TITLE);
WriteTextLines(73,163,0x90,sc.work_text," By Leency\nand KolibriOS Team\n 2008-2021",20); WriteTextLines(73,163,0x90,sc.work_text," By Leency\nand KolibriOS Team\n 2008-2025",20);
#ifdef LANG_RUS #ifdef LANG_RUS
DrawStandartCaptButton(60,about_form.cheight-38,11,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧࠡ<E0A0A7>"); DrawStandartCaptButton(60,about_form.cheight-38,11,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧࠡ<E0A0A7>");
#endif #endif

View File

@@ -38,7 +38,7 @@
char *kfm_func = { char *kfm_func = {
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.",
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "HEX-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.",
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.",
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
@@ -86,9 +86,9 @@ char *actions[] = {
#define TITLE_SETT "<22><><EFBFBD><EFBFBD><EFBFBD><E0AEA9>" #define TITLE_SETT "<22><><EFBFBD><EFBFBD><EFBFBD><E0AEA9>"
#define SHOW_DEVICE_CLASS "<22><EFBFBD><EBA2AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0AEA9><EFBFBD>" #define SHOW_DEVICE_CLASS "<22><EFBFBD><EBA2AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0AEA9><EFBFBD>"
#define SHOW_STATUS_BAR "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA2A0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>"
#define BIG_ICONS "<22><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" #define BIG_ICONS "<22><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
#define COLORED_LINES "<22><><EFBFBD>ᢥ稢<E1A2A5><E7A8A2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> ᯨ᪥" #define COLORED_LINES "<22><><EFBFBD>ᢥ稢<E1A2A5><E7A8A2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> ᯨ᪥"
#define FONT_BOLD "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>"
#define FONT_SIZE_LABEL "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" #define FONT_SIZE_LABEL "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
#define LIST_LINE_HEIGHT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> ᯨ᪥" #define LIST_LINE_HEIGHT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> ᯨ᪥"
#define SAVE_PATH_AS_DEFAULT "<22><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD>" #define SAVE_PATH_AS_DEFAULT "<22><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD>"
@@ -137,7 +137,7 @@ char *actions[] = {
char *kfm_func = { char *kfm_func = {
"Info", "Info",
"Rename", "Rename",
"View", "HEX View",
"Edit", "Edit",
"Copy", "Copy",
"Move", "Move",
@@ -185,9 +185,9 @@ char *actions[] = {
#define TITLE_SETT "Settings" #define TITLE_SETT "Settings"
#define SHOW_DEVICE_CLASS "Show device class name" #define SHOW_DEVICE_CLASS "Show device class name"
#define SHOW_STATUS_BAR "Show status bar"
#define BIG_ICONS "Big icons in list" #define BIG_ICONS "Big icons in list"
#define COLORED_LINES "Highlight even lines in list" #define COLORED_LINES "Highlight even lines in list"
#define FONT_BOLD "Bold font"
#define FONT_SIZE_LABEL "Font size" #define FONT_SIZE_LABEL "Font size"
#define LIST_LINE_HEIGHT "List line height" #define LIST_LINE_HEIGHT "List line height"
#define SAVE_PATH_AS_DEFAULT "Current path" #define SAVE_PATH_AS_DEFAULT "Current path"

View File

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

View File

@@ -158,25 +158,27 @@ void _SystemDiscs::DrawOptions(int draw_x)
SystemDiscs.Get(); SystemDiscs.Get();
DrawPopup(draw_x, optionsy, DDW, list.count*KFM2_DEVH, 1, -1, sc.line); DrawPopup(draw_x, optionsy, DDW, list.count*KFM2_DEVH, 1, -1, sc.line);
EAX = kfont.bold;
$push eax
for (i=0;i<list.count;i++) { for (i=0;i<list.count;i++) {
strcpy(#dev_name, list.get(i)); strcpy(#dev_name, list.get(i));
GetDiskIconAndName(#dev_name, #dev_icon, #disc_name); GetDiskIconAndName(#dev_name, #dev_icon, #disc_name);
if (strstr(path, #dev_name)!=0) is_active=true; else is_active=false; if (strstr(path, #dev_name)!=0) kfont.bold=true; else kfont.bold=false;
DrawBar(draw_x, optionsy, DDW, KFM2_DEVH, 0xFFFFFF); DrawBar(draw_x, optionsy, DDW, KFM2_DEVH, 0xFFFFFF);
DefineButton(draw_x, optionsy, DDW, KFM2_DEVH-1, 100+i+BT_HIDE,0xFFFFFF); DefineButton(draw_x, optionsy, DDW, KFM2_DEVH-1, 100+i+BT_HIDE,0xFFFFFF);
PutImage(draw_x + 5, optionsy+2, 18,17, is_active*7+dev_icon*17*18*3+#devices); PutImage(draw_x + 5, optionsy+2, 18,17, kfont.bold*7+dev_icon*17*18*3+#devices);
if (is_active) kfont.bold = true;
//strncpy(#volume_label, GetVolumeLabel(#dev_name), sizeof(volume_label)); //strncpy(#volume_label, GetVolumeLabel(#dev_name), sizeof(volume_label));
strcpy(#label_file_name, #dev_name); strcpy(#label_file_name, #dev_name);
//if (dev_name[1]!='k') && (dev_name[2]!='y') { //if (dev_name[1]!='k') && (dev_name[2]!='y') {
// if (volume_label) sprintf(#label_file_name, "%s [%s]", #dev_name, #volume_label); // if (volume_label) sprintf(#label_file_name, "%s [%s]", #dev_name, #volume_label);
//} //}
kfont.WriteIntoWindow(draw_x + 24, optionsy+2, 0xFFFfff, 0x000000, kfont.size.pt, #label_file_name+1); kfont.WriteIntoWindow(draw_x + 24, optionsy+2, 0xFFFfff, 0x000000, kfont.size.pt, #label_file_name+1);
kfont.bold = false;
optionsy += KFM2_DEVH; optionsy += KFM2_DEVH;
} }
$pop eax
kfont.bold = EAX;
} }

View File

@@ -175,8 +175,10 @@ void properties_dialog()
break; break;
case evMouse: case evMouse:
if (!apply_question_active) {
edit_box_mouse stdcall (#file_name_ed); edit_box_mouse stdcall (#file_name_ed);
edit_box_mouse stdcall (#path_to_file_ed); edit_box_mouse stdcall (#path_to_file_ed);
}
break; break;
case evKey: case evKey:

View File

@@ -7,11 +7,11 @@ edit_box path_start_ed = {290,50,57,0xffffff,0x94AECE,0xffffff,0xffffff,0x100000
#path_start,0, 100000000000010b,0,0}; #path_start,0, 100000000000010b,0,0};
more_less_box font_size = { NULL, 9, 22, FONT_SIZE_LABEL }; more_less_box font_size = { NULL, 9, 22, FONT_SIZE_LABEL };
more_less_box line_height = { NULL, 16, 64, LIST_LINE_HEIGHT }; more_less_box line_height = { NULL, 18, 64, LIST_LINE_HEIGHT };
checkbox show_dev_name = { SHOW_DEVICE_CLASS }; checkbox show_dev_name = { SHOW_DEVICE_CLASS };
checkbox show_status_bar = { SHOW_STATUS_BAR };
checkbox big_icons = { BIG_ICONS }; checkbox big_icons = { BIG_ICONS };
checkbox colored_lines = { COLORED_LINES }; checkbox colored_lines = { COLORED_LINES };
checkbox bold_font = { FONT_BOLD };
void settings_dialog() void settings_dialog()
@@ -51,8 +51,10 @@ void settings_dialog()
break; break;
} }
show_dev_name.click(id); show_dev_name.click(id);
show_status_bar.click(id);
colored_lines.click(id); colored_lines.click(id);
if (bold_font.click(id)) {
kfont.bold^=1;
}
if (font_size.click(id)) { if (font_size.click(id)) {
kfont.size.pt = font_size.value; kfont.size.pt = font_size.value;
kfont.changeSIZE(); kfont.changeSIZE();
@@ -72,7 +74,7 @@ void settings_dialog()
case evReDraw: case evReDraw:
DefineAndDrawWindow(Form.cwidth-300/2+Form.left, Form.cheight-292/2+Form.top, 400, DefineAndDrawWindow(Form.cwidth-300/2+Form.left, Form.cheight-292/2+Form.top, 400,
-efm*42+345+skin_h,0x34,sc.work,TITLE_SETT,0); 345+skin_h,0x34,sc.work,TITLE_SETT,0);
GetProcessInfo(#Settings, SelfInfo); GetProcessInfo(#Settings, SelfInfo);
DrawSettingsCheckBoxes(); DrawSettingsCheckBoxes();
} }
@@ -96,10 +98,10 @@ void DrawSettingsCheckBoxes()
y.n = 0; y.n = 0;
if (!efm) { if (!efm) {
show_dev_name.draw(XXX, y.inc(14)); show_dev_name.draw(XXX, y.inc(14));
show_status_bar.draw(XXX, y.inc(25));
} }
big_icons.draw(XXX, y.inc(25)); big_icons.draw(XXX, y.inc(25));
colored_lines.draw(XXX, y.inc(25)); colored_lines.draw(XXX, y.inc(25));
bold_font.draw(XXX, y.inc(25));
font_size.draw(XXX, y.inc(31)); font_size.draw(XXX, y.inc(31));
line_height.draw(XXX, y.inc(31)); line_height.draw(XXX, y.inc(31));
@@ -121,7 +123,7 @@ void LoadIniSettings()
files.SetFont(6, 9, 10000000b); files.SetFont(6, 9, 10000000b);
show_dev_name.checked = ini.GetInt("ShowDeviceName", true); show_dev_name.checked = ini.GetInt("ShowDeviceName", true);
show_status_bar.checked = ini.GetInt("ShowStatusBar", true); kfont.bold = bold_font.checked = ini.GetInt("BoldFont", false);
big_icons.checked = ini.GetInt("BigIcons", false); BigIconsSwitch(); big_icons.checked = ini.GetInt("BigIcons", false); BigIconsSwitch();
colored_lines.checked = ini.GetInt("ColoredLines", true); colored_lines.checked = ini.GetInt("ColoredLines", true);
kfont.size.pt = ini.GetInt("FontSize", 13); kfont.size.pt = ini.GetInt("FontSize", 13);
@@ -132,7 +134,6 @@ void LoadIniSettings()
Form.height = ini.GetInt("WinH", efm*100+517); Form.height = ini.GetInt("WinH", efm*100+517);
ini.GetString("DefaultPath", #path_start, 4096, "/sys"); ini.GetString("DefaultPath", #path_start, 4096, "/sys");
path_start_ed.size = path_start_ed.pos = strlen(#path_start); path_start_ed.size = path_start_ed.pos = strlen(#path_start);
kfont.init(DEFAULT_FONT);
ini_get_str stdcall ("/sys/SETTINGS/SYSTEM.INI", "system", "font smoothing",#temp,4096,"on"); ini_get_str stdcall ("/sys/SETTINGS/SYSTEM.INI", "system", "font smoothing",#temp,4096,"on");
if(streq(#temp,"off")) kfont.smooth = false; else kfont.smooth = true; if(streq(#temp,"off")) kfont.smooth = false; else kfont.smooth = true;
} }
@@ -141,7 +142,7 @@ void LoadIniSettings()
void SaveIniSettings() void SaveIniSettings()
{ {
ini.SetInt("ShowDeviceName", show_dev_name.checked); ini.SetInt("ShowDeviceName", show_dev_name.checked);
ini.SetInt("ShowStatusBar", show_status_bar.checked); ini.SetInt("BoldFont", bold_font.checked);
ini.SetInt("BigIcons", big_icons.checked); ini.SetInt("BigIcons", big_icons.checked);
ini.SetInt("ColoredLines", colored_lines.checked); ini.SetInt("ColoredLines", colored_lines.checked);
ini.SetInt("FontSize", kfont.size.pt); ini.SetInt("FontSize", kfont.size.pt);

View File

@@ -1,13 +1,3 @@
#define MEMSIZE 100*1000
#include "../lib/fs.h"
#include "../lib/gui.h"
#include "../lib/list_box.h"
#include "../lib/obj/box_lib.h"
#include "../lib/obj/proc_lib.h"
#include "../lib/obj/libini.h"
#include "../lib/patterns/select_list.h"
//===================================================// //===================================================//
// // // //
// DATA // // DATA //
@@ -34,11 +24,11 @@ enum {
BTN_CHOOSE_PATH BTN_CHOOSE_PATH
}; };
proc_info Form; dword mouse_dd;
#define TOOLBAR_H 100 edit_box edit_name = {230,13, 30,0xffffff,0x94AECE,0xffffff,0xffffff,
0x10000000,sizeof(search_name)-2,#search_name,#mouse_dd, ed_focus,0,0};
edit_box edit_name = {230,13, 30,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(search_name)-2,#search_name,0, ed_focus,0,0}; edit_box edit_path = {310,260,30,0xffffff,0x94AECE,0xffffff,0xffffff,
edit_box edit_path = {310,260,30,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(search_path)-2,#search_path,0, 0b,0,0}; 0x10000000,sizeof(search_path)-2,#search_path,#mouse_dd, 0b,0,0};
opendialog open_folder_dialog = opendialog open_folder_dialog =
{ {
@@ -49,7 +39,7 @@ opendialog open_folder_dialog =
0, //dword opendir_path, 0, //dword opendir_path,
#search_path, //dword dir_default_path, #search_path, //dword dir_default_path,
#open_dialog_path, #open_dialog_path,
#draw_window, #draw_window_search,
0, 0,
#search_path, //dword openfile_path, #search_path, //dword openfile_path,
0, //dword filename_area, 0, //dword filename_area,
@@ -60,6 +50,10 @@ opendialog open_folder_dialog =
NULL NULL
}; };
#define TOOLBAR_H 100
#define LISTX 0
#define LISTY TOOLBAR_H
//===================================================// //===================================================//
// // // //
// RESULTS // // RESULTS //
@@ -97,16 +91,17 @@ void RESULTS::drop()
// // // //
//===================================================// //===================================================//
void main() void SearchThread()
{ {
int prev_first, prev_cur_y; int prev_first, prev_cur_y;
load_dll(boxlib, #box_lib_init,0);
load_dll(libini, #lib_init,1); #ifndef __COFF__
load_dll(Proc_lib, #OpenDialog_init,0); load_dll(Proc_lib, #OpenDialog_init,0);
#endif
OpenDialog_init stdcall (#open_folder_dialog); OpenDialog_init stdcall (#open_folder_dialog);
edit_box_set_text stdcall (#edit_name, ".ini"); if (!ESBYTE[path]) strcpy(path, "/sys");
edit_box_set_text stdcall (#edit_path, "/kolibrios"); edit_box_set_text stdcall (#edit_path, path);
@SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER); @SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
loop() switch(@WaitEvent()) loop() switch(@WaitEvent())
@@ -132,8 +127,19 @@ void main()
case evKey: case evKey:
@GetKeys(); @GetKeys();
edit_box_key stdcall (#edit_name); edit_box_key_c stdcall (#edit_name);
edit_box_key stdcall (#edit_path); edit_box_key_c stdcall (#edit_path);
if (key_scancode == SCAN_CODE_TAB) {
if (edit_name.flags & ed_focus) {
edit_name.flags >< edit_path.flags;
} else if (edit_path.flags & ed_focus) {
edit_path.flags -= ed_focus;
} else {
edit_name.flags += ed_focus;
}
draw_window_search();
break;
}
if (edit_name.flags & ed_focus) || (edit_path.flags & ed_focus) { if (edit_name.flags & ed_focus) || (edit_path.flags & ed_focus) {
if (SCAN_CODE_ENTER == key_scancode) EventSearch(); if (SCAN_CODE_ENTER == key_scancode) EventSearch();
} else { } else {
@@ -152,22 +158,20 @@ void main()
break; break;
case evReDraw: case evReDraw:
draw_window(); sc.get();
DefineAndDrawWindow(screen.w-600/2,100,640,600,0x73,sc.work,T_WINDOW_HEADER,0);
GetProcessInfo(#Form, SelfInfo);
IF (Form.status_window&ROLLED_UP) break;
if (Form.width < 370) { MoveSize(OLD,OLD,370,OLD); break; }
if (Form.height < 250) { MoveSize(OLD,OLD,OLD,250); break; }
draw_window_search();
break; break;
} }
} }
void draw_window() void draw_window_search()
{ {
sc.get(); SelectList_Init(LISTX, LISTY, Form.cwidth-scroll1.size_x-1, Form.cheight-TOOLBAR_H-1);
DefineAndDrawWindow(screen.w-600/2,100,640,600,0x73,sc.work,T_WINDOW_HEADER,0);
GetProcessInfo(#Form, SelfInfo);
IF (Form.status_window&ROLLED_UP) return;
if (Form.width < 270) { MoveSize(OLD,OLD,270,OLD); return; }
if (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); return; }
SelectList_Init( 0, TOOLBAR_H,
Form.cwidth-scroll1.size_x-1,
Form.cheight-TOOLBAR_H-1);
SelectList_Draw(); SelectList_Draw();
DrawBar(0, TOOLBAR_H-1, Form.cwidth, 1, sc.line); DrawBar(0, TOOLBAR_H-1, Form.cwidth, 1, sc.line);
DrawBar(0, 0, Form.cwidth, TOOLBAR_H-1, sc.work); DrawBar(0, 0, Form.cwidth, TOOLBAR_H-1, sc.work);
@@ -178,7 +182,6 @@ void draw_window()
DrawStandartCaptButton(10, 63, BTN_SEARCH, T_BUTTON_SEARCH); DrawStandartCaptButton(10, 63, BTN_SEARCH, T_BUTTON_SEARCH);
} }
_ini ini = { "/sys/File managers/icons.ini", "icons16" };
void SelectList_DrawLine(dword i) void SelectList_DrawLine(dword i)
{ {
int yyy = i*select_list.item_h+select_list.y; int yyy = i*select_list.item_h+select_list.y;
@@ -201,16 +204,19 @@ void SelectList_DrawLine(dword i)
} else { } else {
strcpy(#tname, results.name.get(select_list.first + i)); strcpy(#tname, results.name.get(select_list.first + i));
strlwr(#tname); strlwr(#tname);
icon = ini.GetInt(#tname + strrchr(#tname, '.'), 2); icons_ini.section = "icons16";
icon = icons_ini.GetInt(#tname + strrchr(#tname, '.'), 2);
} }
#define ICONX 7 #define ICONX 7
DrawBar(select_list.x, yyy, ICONX-1, select_list.item_h, 0xFFFfff); DrawBar(LISTX, yyy, ICONX, select_list.item_h, 0xFFFfff);
DrawBar(select_list.x+ICONX+18, yyy, select_list.w-ICONX-18, select_list.item_h, bg); DrawBar(LISTX+ICONX, yyy, 18, 1, 0xFFFfff);
draw_icon_16(select_list.x+ICONX, yyy+1, icon); DrawBar(LISTX+ICONX, yyy + select_list.item_h-1, 18, 1, 0xFFFfff);
DrawBar(LISTX+ICONX+18, yyy, select_list.w-ICONX-18, select_list.item_h, bg);
draw_icon_16(LISTX+ICONX, yyy+1, icon);
WriteText(select_list.x + ICONX+18+4,yyy+select_list.text_y,0x90, col, results.name.get(select_list.first + i)); WriteText(LISTX + ICONX+18+4,yyy+select_list.text_y,0x90, col, results.name.get(select_list.first + i));
WriteText(select_list.x + ICONX+18+206,yyy+select_list.text_y,0x90, col, results.path.get(select_list.first + i)); WriteText(LISTX + ICONX+18+206,yyy+select_list.text_y,0x90, col, results.path.get(select_list.first + i));
} }
void SelectList_LineChanged() void SelectList_LineChanged()
@@ -289,6 +295,4 @@ void find_loop(dword way)
} }
} }
stop:

View File

@@ -1,6 +0,0 @@
if tup.getconfig("NO_CMM") ~= "" then return end
if tup.getconfig("LANG") == "ru_RU"
then C_LANG = "LANG_RUS"
else C_LANG = "LANG_ENG" -- this includes default case without config
end
tup.rule("font_viewer.c", "c-- /D=$(C_LANG) /OPATH=%o %f" .. tup.getconfig("KPACK_CMD"), "font_viewer.com")

View File

@@ -1,4 +0,0 @@
@del kf_view
@C-- font_viewer.c
@rename font_viewer.com kf_view
if not exist kf_view ( @pause )

View File

@@ -26,15 +26,9 @@ struct collection_int
:void collection_int::add(dword _in) { :void collection_int::add(dword _in) {
unsigned i; unsigned i;
if (!buf) { if (!buf) || (count + 1 * DWSIZE4 >= buf_size) {
//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_size += 4096 * 5;
buf = realloc(buf, buf_size); buf = realloc(buf, buf_size);
//if (!buf) notify("'realloc error' -E");
} }
i = count * DWSIZE4 + buf; i = count * DWSIZE4 + buf;
ESDWORD[i] = _in; ESDWORD[i] = _in;
@@ -77,8 +71,8 @@ struct collection_int
:void collection_int::drop() { :void collection_int::drop() {
count = 0; count = 0;
if (buf) buf = free(buf); //if (buf) buf = free(buf);
buf_size = 0; //buf_size = 0;
} }
/*======================================================== /*========================================================
@@ -97,31 +91,30 @@ struct collection
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();
void increase_data_size();
dword get_last(); dword get_last();
bool pop(); bool pop();
}; };
:void collection::increase_data_size() {
if (realloc_size<4096) realloc_size = 4096;
if (!data_size) {
data_size = realloc_size;
data_start = malloc(data_size);
} else {
data_size = data_size + realloc_size;
data_start = realloc(data_start, data_size);
}
}
:dword collection::add(dword in) { :dword collection::add(dword in) {
dword len = strlen(in); dword len = strlen(in);
while (offset.get(count) + len + 4 > data_size) { unsigned cur_buf_size;
increase_data_size();
if (!count) {
cur_buf_size = 0;
} else {
cur_buf_size = offset.get(count);
} }
strncpy(data_start+offset.get(count), in, len);
if (realloc_size<4096) realloc_size = 4096;
while (cur_buf_size + len + 4 > data_size) {
data_size += realloc_size;
data_start = realloc(data_start, data_size);
}
strncpy(data_start+cur_buf_size, in, len);
count++; count++;
offset.set(count, offset.get(count-1) + len + 1); offset.set(count, cur_buf_size + len + 1);
return data_start+offset.get(count-1); return data_start + cur_buf_size;
} }
:dword collection::get(dword pos) { :dword collection::get(dword pos) {

View File

@@ -17,17 +17,25 @@ struct CANVAS {
void Show(); void Show();
void Fill(); void Fill();
void DrawBar(); void DrawBar();
void DrawImage();
void WriteText(); void WriteText();
void PutPixel(); void PutPixel();
void AlignCenter(); void AlignCenter();
void AlignRight(); void AlignRight();
void IncreaseBufSize(); void IncreaseBufSize();
bool BufIsInvalid();
}; };
char draw_buf_not_enaught_ram[] = char draw_buf_not_enaught_ram[] =
"'CANVAS requested %i MB more memory than the system has. "'CANVAS requested %i MB more memory than the system has.
Application could be unstable.' -E"; Application could be unstable.' -E";
bool CANVAS::BufIsInvalid()
{
if (!buf_data) || (!bufw) return true;
return false;
}
bool CANVAS::Init(dword i_bufx, i_bufy, i_bufw, i_bufh) bool CANVAS::Init(dword i_bufx, i_bufy, i_bufw, i_bufh)
{ {
bufx = i_bufx; bufx = i_bufx;
@@ -45,6 +53,7 @@ bool CANVAS::Init(dword i_bufx, i_bufy, i_bufw, i_bufh)
void CANVAS::Fill(dword start_pointer, i_fill_color) void CANVAS::Fill(dword start_pointer, i_fill_color)
{ {
dword max_i = bufw * bufh * 4 - start_pointer/4; dword max_i = bufw * bufh * 4 - start_pointer/4;
if (BufIsInvalid()) return;
fill_color = i_fill_color | 0xFF000000; //set background color non-transparent fill_color = i_fill_color | 0xFF000000; //set background color non-transparent
@MEMSETD(buf_data+start_pointer+8, max_i, fill_color); @MEMSETD(buf_data+start_pointer+8, max_i, fill_color);
} }
@@ -52,6 +61,7 @@ void CANVAS::Fill(dword start_pointer, i_fill_color)
void CANVAS::DrawBar(dword x, y, w, h, color) void CANVAS::DrawBar(dword x, y, w, h, color)
{ {
dword i, j; dword i, j;
if (BufIsInvalid()) return;
if (y + h >= bufh) IncreaseBufSize(); if (y + h >= bufh) IncreaseBufSize();
for (j=0; j<h; j++) { for (j=0; j<h; j++) {
for (i = y+j*bufw+x<<2+8+buf_data; i<y+j*bufw+x+w<<2+8+buf_data; i+=4) { for (i = y+j*bufw+x<<2+8+buf_data; i<y+j*bufw+x+w<<2+8+buf_data; i+=4) {
@@ -60,12 +70,30 @@ void CANVAS::DrawBar(dword x, y, w, h, color)
} }
} }
void CANVAS::DrawImage(dword x, y, w, h, img)
{
dword i, j, p=0;
dword ystart;
if (BufIsInvalid()) return;
if (y < 0) y = 0;
if (x < 0) x = 0;
while (y + h >= bufh) IncreaseBufSize(); //WHY NOT WORKING?
for (j=0; j<h; j++) {
ystart = y + j * bufw + x;
for (i = ystart<<2+8+buf_data; i<ystart+w<<2+8+buf_data; i+=4) {
ESDWORD[i] = ESDWORD[img+p];
p+=4;
}
}
}
void CANVAS::WriteText(dword x, y, byte fontType, dword color, str_offset, strlen) void CANVAS::WriteText(dword x, y, byte fontType, dword color, str_offset, strlen)
{ {
#define BUGFIX_32000 32000 #define BUGFIX_32000 32000
dword ydiv=0; dword ydiv=0;
dword reserve_data_1, reserve_data_2; dword reserve_data_1, reserve_data_2;
dword new_buf_offset; dword new_buf_offset;
if (BufIsInvalid()) return;
if (y + 30 >= bufh) IncreaseBufSize(); if (y + 30 >= bufh) IncreaseBufSize();
if (y < BUGFIX_32000) { if (y < BUGFIX_32000) {
ESI = strlen; ESI = strlen;
@@ -92,6 +120,7 @@ void CANVAS::WriteText(dword x, y, byte fontType, dword color, str_offset, strle
void CANVAS::PutPixel(dword x, y, color) void CANVAS::PutPixel(dword x, y, color)
{ {
dword pos = y*bufw+x*4+8+buf_data; dword pos = y*bufw+x*4+8+buf_data;
if (BufIsInvalid()) return;
ESDWORD[pos] = color; ESDWORD[pos] = color;
} }
@@ -99,6 +128,7 @@ void CANVAS::AlignRight(dword x,y,w,h, content_width)
{ {
dword i, j, l; dword i, j, l;
dword content_left = w - content_width / 2; dword content_left = w - content_width / 2;
if (BufIsInvalid()) return;
for (j=0; j<h; j++) for (j=0; j<h; j++)
{ {
for (i=j*w+w-x*4, l=j*w+content_width+x*4; (i>=j*w+content_left*4) && (l>=j*w*4); i-=4, l-=4) for (i=j*w+w-x*4, l=j*w+content_width+x*4; (i>=j*w+content_left*4) && (l>=j*w*4); i-=4, l-=4)
@@ -112,6 +142,7 @@ void CANVAS::AlignCenter(dword x,y,w,h, content_width)
{ {
dword i, j, l; dword i, j, l;
dword content_left = w - content_width / 2; dword content_left = w - content_width / 2;
if (BufIsInvalid()) return;
for (j=0; j<h; j++) for (j=0; j<h; j++)
{ {
for (i=j*w+content_width+content_left*4, l=j*w+content_width+x*4; (i>=j*w+content_left*4) && (l>=j*w*4); i-=4, l-=4) for (i=j*w+content_width+content_left*4, l=j*w+content_width+x*4; (i>=j*w+content_left*4) && (l>=j*w*4); i-=4, l-=4)
@@ -123,6 +154,7 @@ void CANVAS::AlignCenter(dword x,y,w,h, content_width)
void CANVAS::Show(dword _y_offset, _h) void CANVAS::Show(dword _y_offset, _h)
{ {
if (BufIsInvalid()) return;
PutPaletteImage(_y_offset * bufw * 4 + buf_data+8, bufw, _h, bufx, bufy, 32, 0); PutPaletteImage(_y_offset * bufw * 4 + buf_data+8, bufw, _h, bufx, bufy, 32, 0);
} }
@@ -133,6 +165,8 @@ void CANVAS::IncreaseBufSize()
dword free_ram_size; dword free_ram_size;
char error_str[256]; char error_str[256];
if (!bufw) return;
if (!buf_data) { if (!buf_data) {
alloc_size = bufh * bufw * 4 + 8; alloc_size = bufh * bufw * 4 + 8;
buf_data = malloc(alloc_size); buf_data = malloc(alloc_size);

View File

@@ -66,10 +66,11 @@ int kfont_char_width[255];
:bool KFONT::init(dword font_path) :bool KFONT::init(dword font_path)
{ {
dword fsize_notused; dword fsize_notused;
if(font)free(font); if(font) font = free(font);
read_file(font_path, #font_begin, #fsize_notused); read_file(font_path, #font_begin, #fsize_notused);
if(!EAX) { if(!EAX) {
RunProgram("/sys/@notify", "'Error: KFONT is not loaded.' -E"); RunProgram("/sys/@notify", "'Error: KFONT is not loaded' -E");
kfont.height = 14;
return false; return false;
} }
changeSIZE(); changeSIZE();
@@ -99,6 +100,10 @@ int kfont_char_width[255];
:dword KFONT::getsize(byte font_size, dword text1) :dword KFONT::getsize(byte font_size, dword text1)
{ {
if (!font) {
size.width = strlen(text1) * 8;
return size.width;
}
size.height = size.width = 0; size.height = size.width = 0;
size.offset_x = size.offset_y = -1; size.offset_x = size.offset_y = -1;
if (size.pt != font_size) { if (size.pt != font_size) {
@@ -275,6 +280,11 @@ inline fastcall dword b32(EAX) { return DSDWORD[EAX]; }
{ {
if(!text1)return 0; if(!text1)return 0;
getsize(font_size, text1); getsize(font_size, text1);
if (!font) {
EDI = _background;
WriteText(x, y, 0xD0, _color, text1);
return size.width;
}
raw_size = NULL; raw_size = NULL;
WriteIntoBuffer(0, -size.offset_y, size.width-size.offset_x, WriteIntoBuffer(0, -size.offset_y, size.width-size.offset_x,
size.height-size.offset_y, _background, _color, font_size, text1); size.height-size.offset_y, _background, _color, font_size, text1);

View File

@@ -273,7 +273,7 @@ void draw_list()
} }
init = false; init = false;
if (selected) WriteText(5, selected-1*ITEM_H + menu1.y + menu1.text_y, TEXT_FONT_TYPE, 0xEE0000, "\x10"); // ? if (selected) WriteText(5, selected-1*ITEM_H + menu1.y + menu1.text_y +3, 0x80, 0xEE0000, "\x10"); // ?
} }
void click() void click()

View File

@@ -1,8 +1,4 @@
#define MEMSIZE 1024*30
#define ENTRY_POINT #main
#include "../lib/kfont.h"
#include "../lib/gui.h"
#define BARH 28 #define BARH 28
#define WINW 528 #define WINW 528
@@ -12,11 +8,8 @@ char active_tab = 0;
char colored = true; char colored = true;
dword checkbox_flag; dword checkbox_flag;
void main() void main_kfont()
{ {
proc_info Form;
mem_init();
checkbox_flag = memopen("CHECKBOX", NULL, SHM_READ); checkbox_flag = memopen("CHECKBOX", NULL, SHM_READ);
if (!param) strcpy(#param, DEFAULT_FONT); if (!param) strcpy(#param, DEFAULT_FONT);
@@ -48,7 +41,7 @@ void main()
case evReDraw: case evReDraw:
sc.get(); sc.get();
DefineAndDrawWindow(215,100,WINW+9,WINH+GetSkinHeight()+4,0x74,0xFFFFFF,#title,0); DefineAndDrawWindow(215,100,WINW+9,WINH+skin_h+4,0x74,0xFFFFFF,#title,0);
GetProcessInfo(#Form, SelfInfo); GetProcessInfo(#Form, SelfInfo);
if (Form.status_window&ROLLED_UP) break; if (Form.status_window&ROLLED_UP) break;
_DRAW_WINDOW_CONTENT: _DRAW_WINDOW_CONTENT:

View File

@@ -0,0 +1,13 @@
#define MEMSIZE 1024*20
#define ENTRY_POINT #main
#include "../lib/fs.h"
void main()
{
char param2[4096];
strcpy(#param2, "\\s ");
strncpy(#param2 + 3, #param, sizeof(param2) - 2 - 3);
RunProgram("/sys/File managers/Eolite", #param2);
ExitProcess();
}

View File

@@ -10,11 +10,13 @@ SOFTWARE CENTER v2.87
#include "..\lib\obj\libini.h" #include "..\lib\obj\libini.h"
#include "..\lib\kfont.h" #include "..\lib\kfont.h"
#include "..\lib\list_box.h" #include "..\lib\list_box.h"
#include "..\lib\collection.h"
proc_info Form; proc_info Form;
#include "font_viewer.h"
llist list; llist list;
collection app_path_collection=0; dword app_path_collection;
bool kolibrios_mounted; bool kolibrios_mounted;
int window_width, int window_width,
@@ -30,17 +32,11 @@ char window_title[128],
bool small_screen = false; bool small_screen = false;
struct SW_COLORS
{
dword list_bg;
dword text;
dword graph;
dword dark;
dword light;
} swc;
block selection[128]; block selection[128];
#define MAX_ITEMS 75
#define MAX_FPATH 1024
void load_ini_config(dword _ini_path) void load_ini_config(dword _ini_path)
{ {
_ini ini; _ini ini;
@@ -57,11 +53,10 @@ void main()
{ {
dword id; dword id;
kfont.init(DEFAULT_FONT); kfont.init(DEFAULT_FONT);
load_dll(libini, #lib_init,1);
kolibrios_mounted = dir_exists("/kolibrios"); if (streq(#param + strlen(#param) - 3, ".kf")) {
main_kfont();
if (param) { } else if (param) {
strcpy(#settings_ini_path, #param); strcpy(#settings_ini_path, #param);
} else { } else {
strcpy(#settings_ini_path, "/sys/settings/"); strcpy(#settings_ini_path, "/sys/settings/");
@@ -69,6 +64,11 @@ void main()
strcat(#settings_ini_path, ".ini"); strcat(#settings_ini_path, ".ini");
} }
load_dll(libini, #lib_init,1);
kolibrios_mounted = dir_exists("/kolibrios");
app_path_collection = malloc(MAX_FPATH*MAX_ITEMS);
load_ini_config(#settings_ini_path); load_ini_config(#settings_ini_path);
list.cur_y = -1; list.cur_y = -1;
list.y = 32; list.y = 32;
@@ -99,8 +99,8 @@ void main()
break; break;
case evReDraw: case evReDraw:
SetAppColors();
DefineAndDrawWindow(screen.w-window_width/2,screen.h-window_height/2,window_width,window_height,0x74,0,"",0); DefineAndDrawWindow(screen.w-window_width/2,screen.h-window_height/2,window_width,window_height,0x74,0,"",0);
sc.get();
GetProcessInfo(#Form, SelfInfo); GetProcessInfo(#Form, SelfInfo);
if (Form.status_window&ROLLED_UP) { if (Form.status_window&ROLLED_UP) {
DrawTitle(#window_title); DrawTitle(#window_title);
@@ -114,37 +114,14 @@ void main()
DrawTopBar(); DrawTopBar();
} }
DrawList(); DrawList();
DrawBar(0, row +1 * list.item_h + list_pos, Form.cwidth, -row - 1 * list.item_h - list_pos + Form.cheight, swc.list_bg); DrawBar(0, row +1 * list.item_h + list_pos, Form.cwidth, -row - 1 * list.item_h - list_pos + Form.cheight, sc.light);
DrawSelection(); DrawSelection();
} }
} }
void SetAppColors()
{
dword bg_col, old_list_bg_color;
sc.get();
old_list_bg_color = swc.list_bg;
bg_col = sc.work;
if (skin_is_dark())
{
//dark colors
swc.list_bg = sc.work;
swc.text = sc.work_text;
swc.dark = sc.dark;
swc.light = sc.light;
} else {
//light colors
swc.list_bg = 0xF3F3F3;
swc.text = 0x000000;
swc.dark = 0xDCDCDC;
swc.light = 0xFCFCFC;
}
}
void DrawList() { void DrawList() {
list.count = 0; list.count = 0;
row = -1; row = -1;
app_path_collection.drop();
list_pos = list.y; list_pos = list.y;
list.column_max = window_width - 10 / list.item_w; list.column_max = window_width - 10 / list.item_w;
ini_enum_sections stdcall (#settings_ini_path, #process_sections); ini_enum_sections stdcall (#settings_ini_path, #process_sections);
@@ -168,7 +145,7 @@ byte draw_icons_from_section(dword key_value, key_name, sec_name, f_name)
col=0; col=0;
} }
if (col==0) DrawBar(0, row * list.item_h + list_pos, Form.cwidth, list.item_h, swc.list_bg); if (col==0) DrawBar(0, row * list.item_h + list_pos, Form.cwidth, list.item_h, sc.light);
DefineButton(col*list.item_w+6, row*list.item_h + list_pos,list.item_w,list.item_h-3,list.count + 100 + BT_HIDE,0); DefineButton(col*list.item_w+6, row*list.item_h + list_pos,list.item_w,list.item_h-3,list.count + 100 + BT_HIDE,0);
icon_char_pos = strchr(key_value, ','); icon_char_pos = strchr(key_value, ',');
@@ -177,20 +154,21 @@ byte draw_icons_from_section(dword key_value, key_name, sec_name, f_name)
selection[list.count].x = icon_x-2; selection[list.count].x = icon_x-2;
selection[list.count].y = icon_y-2; selection[list.count].y = icon_y-2;
if (icon_char_pos) ESBYTE[icon_char_pos] = '\0'; //delete icon from string if (icon_char_pos) ESBYTE[icon_char_pos] = '\0'; //delete icon from string
app_path_collection.add(key_value);
strncpy(list.count * MAX_FPATH + app_path_collection, key_value, MAX_FPATH);
text_x = col*list.item_w+5; text_x = col*list.item_w+5;
text_y = list.item_h - 40 / 2; text_y = list.item_h - 40 / 2;
if (!strchr(key_name, ' ')) {//|| (kfont.getsize(key_name)+30<list.item_w) <== too slow if (!strchr(key_name, ' ')) {//|| (kfont.getsize(key_name)+30<list.item_w) <== too slow
kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos, list.item_w,0, swc.list_bg, swc.text, 12, key_name); kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos, list.item_w,0, sc.light, sc.work_text, 12, key_name);
} else { } else {
space_pos = strrchr(key_name, ' '); space_pos = strrchr(key_name, ' ');
ESBYTE[key_name+space_pos-1] = '\0'; ESBYTE[key_name+space_pos-1] = '\0';
kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos - 2, list.item_w,0, swc.list_bg, swc.text, 12, key_name); kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos - 2, list.item_w,0, sc.light, sc.work_text, 12, key_name);
kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos + 13, list.item_w,0, swc.list_bg, swc.text, 12, key_name+space_pos); kfont.WriteIntoWindowCenter(text_x, row*list.item_h+46 + list_pos + 13, list.item_w,0, sc.light, sc.work_text, 12, key_name+space_pos);
} }
if (icon_char_pos) icon_id = atoi(icon_char_pos+1); if (icon_char_pos) icon_id = atoi(icon_char_pos+1);
if (Form.cwidth) draw_icon_32(icon_x, icon_y, swc.list_bg, icon_id); if (Form.cwidth) draw_icon_32(icon_x, icon_y, sc.light, icon_id);
list.count++; list.count++;
col++; col++;
return true; return true;
@@ -212,10 +190,9 @@ byte process_sections(dword sec_name, f_name)
old_row = row; old_row = row;
if (!small_screen) { if (!small_screen) {
DrawBar(0, row * list.item_h + list_pos, Form.cwidth , 29, swc.list_bg); DrawBar(0, row * list.item_h + list_pos, Form.cwidth , 29, sc.light);
text_len = kfont.WriteIntoWindow(10, row * list.item_h + 10 + list_pos, swc.list_bg, swc.text, 15, sec_name); text_len = kfont.WriteIntoWindow(10, row * list.item_h + 10 + list_pos, sc.light, sc.work_text, 15, sec_name);
DrawBar(text_len+20, row * list.item_h + list_pos + 20, Form.cwidth-text_len-20, 1, swc.dark); DrawBar(text_len+20, row * list.item_h + list_pos + 20, Form.cwidth-text_len-20, 2, sc.work);
DrawBar(text_len+20, row * list.item_h + list_pos + 21, Form.cwidth-text_len-20, 1, swc.light);
list_pos += 29; list_pos += 29;
} }
ini_enum_keys stdcall (f_name, sec_name, #draw_icons_from_section); ini_enum_keys stdcall (f_name, sec_name, #draw_icons_from_section);
@@ -233,7 +210,7 @@ void DrawTopBar()
void EventIconClick(dword appid) void EventIconClick(dword appid)
{ {
char run_app_path[4096]; char run_app_path[4096];
dword app_path = app_path_collection.get(appid); dword app_path = MAX_FPATH * appid + app_path_collection;
dword param_pos = strchr(app_path, '|'); dword param_pos = strchr(app_path, '|');
if (param_pos) { if (param_pos) {
ESBYTE[param_pos] = NULL; ESBYTE[param_pos] = NULL;
@@ -273,7 +250,7 @@ void DrawSelection()
int i; int i;
dword col; dword col;
for (i=0; i<list.count; i++) { for (i=0; i<list.count; i++) {
if (i==list.cur_y) col=0x0080FF; else col=swc.list_bg; if (i==list.cur_y) col=0x0080FF; else col=sc.light;
DrawWideRectangle(selection[i].x, selection[i].y, 36, 36, 2, col); DrawWideRectangle(selection[i].x, selection[i].y, 36, 36, 2, col);
} }
} }

View File

@@ -1,6 +0,0 @@
if tup.getconfig("NO_CMM") ~= "" then return end
if tup.getconfig("LANG") == "ru_RU"
then C_LANG = "LANG_RUS"
else C_LANG = "LANG_ENG" -- this includes default case without config
end
tup.rule("search.c", "c-- /D=$(C_LANG) /OPATH=%o %f" .. tup.getconfig("KPACK_CMD"), "search.com")

View File

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

View File

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

View File

@@ -23,11 +23,8 @@ MAX_TRIANGLES equ 12
SCREEN_X equ 320 SCREEN_X equ 320
SCREEN_Y equ 200 SCREEN_Y equ 200
include 'lang.inc'
include '..\..\..\macros.inc' include '..\..\..\macros.inc'
;purge mov ;purge mov
include 'ascl.inc'
include 'ascgl.inc'
START: START:
init_sin_cos: init_sin_cos:
@@ -65,7 +62,47 @@ still:
; cmp eax,3 ; button in buffer ? ; cmp eax,3 ; button in buffer ?
jz button jz button
fps 220,8,cl_White,cl_Black
; FPS - Set Frame Per Second Display
fps_show_frequency=40
macro fps x,y,color,delcolor
{
local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt
local no_out_fps
jmp spdat
savetime dd 0
fps_cntr dd 0
fps dd 0
ttt dd 0
spdat:
get_time:
mov eax,3
mcall
cmp eax,[savetime]
jne new_time
inc [fps_cntr]
cmp dword [ttt],0
je out_fps
dec dword [ttt]
jmp no_out_fps
new_time:
mov [savetime],eax
mov ebx,[fps_cntr]
mov [fps],ebx
mov [fps_cntr],0
out_fps:
mov dword [ttt],fps_show_frequency
mov eax,47
mov ebx,5*65536
mov edx,(x+1)*65536+y
mov esi,color+0xD0000000
mov edi,delcolor
mov ecx,[fps]
mcall
no_out_fps:
}
fps 220,5,0x00FFFfff,0x00000000
main_loop: main_loop:

View File

@@ -3,5 +3,4 @@ HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("
tup.include(HELPERDIR .. "/use_fasm.lua") tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir()) add_include(tup.getvariantdir())
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"}) tup.rule({"3DCUBE2.ASM"}, "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "3DCUBE2")
tup.rule({"3DCUBE2.ASM", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "3DCUBE2")

View File

@@ -1,624 +0,0 @@
lang equ ru_RU
;
; Assembler
; SMALL
; CODE
; Graphics
; Libary
;
; Ver 0.10 By Pavlushin Evgeni (RUSSIA)
; www.waptap@mail.ru
;InfoList
;0.01 LoadImage
;0.02 SetBmp
;0.03 Bmptoimg, Setimg ~01.03.2004
;0.04 Bug deleted, copyimg ~03.05.2004
;0.05 fullimg, collimg ~05.05.2004
;0.06 getimg ~09.05.2004
;0.07 convbmp ~13.05.2004
;0.08 fps ~14.05.2004
;0.09 drawfbox ~03.06.2004
;0.10 all macros optimized by halyavin, add at ~07.06.2004
;DrawBox
macro drawfbox x,y,xs,ys,color
{
mov ecx,y
mov ebx,x
shl ebx,16
add ebx,xs
shl ecx,16
add ecx,ys
mov edx,color
mov eax,13
mcall
}
; FPS - Set Frame Per Second Display
fps_show_frequency=40
macro fps x,y,color,delcolor
{
local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt
local no_out_fps
jmp spdat
savetime dd 0
fps_cntr dd 0
fps dd 0
ttt dd 0
spdat:
get_time:
mov eax,3
mcall
cmp eax,[savetime]
jne new_time
inc [fps_cntr]
cmp dword [ttt],0
je out_fps
dec dword [ttt]
jmp no_out_fps
new_time:
mov [savetime],eax
mov ebx,[fps_cntr]
mov [fps],ebx
mov [fps_cntr],0
out_fps:
if ~(delcolor eq )
mov ebx,x*65536+30
mov ecx,y*65536+7
mov edx,delcolor
mov eax,13
mcall
end if
mov dword [ttt],fps_show_frequency
mov eax,47
mov ebx,5*65536
; mov bl,0
mov edx,x*65536+y
mov esi,color
mov ecx,[fps]
mcall
no_out_fps:
}
; COLLIMG - Collusion image's
_ldbounce_count=0;
macro collimg img1_off,x1,y1,img2_off,x2,y2,otv
{
local bounce,exit,_1dbounce,anot,bc,nbc
mov esi,[img1_off] ;xs1
mov edi,[img2_off] ;ys2
mov eax,x1 ;
mov ebx,x2 ;
call _1dbounce
mov edx,ecx
mov esi,[img1_off+4] ;ys1
mov edi,[img2_off+4] ;ys2
mov eax,y1 ;
mov ebx,y2 ;
call _1dbounce
add edx,ecx
cmp edx,2
je bounce
mov otv,0
jmp exit
_ldbounce_count=_ldbounce_count+1
if (_ldbounce_count = 1)
_1dbounce:
cmp ebx,eax
jnae anot
add eax,esi
cmp eax,ebx
jna nbc
jmp bc
anot:
add ebx,edi
cmp ebx,eax
jna nbc
bc:
mov ecx,1
ret
nbc:
mov ecx,0
ret
end if
bounce:
mov otv,1
exit:
}
; SETBMP - Set bmp to window
; (SYNTAX) SETBMP dd xstart ,dd ystart ,BMP_offset,dd soi
; (SAMPLE) SETBMP dword [xt],dword [yt],I_END,dword [tsoi]
; SETBMP 15,10,I_END,dword [tsoi]
; ( NOTE ) SOI - Start of image
macro setbmp arg1,arg2,arg3,arg4
{
local nodi
cmp word [arg3],word 'BM'
jne nodi
mov eax,7
mov ebx,arg4 ;[soi]
mov ecx,dword [arg3+18]
shl ecx,16
add ecx,dword [arg3+22]
if (arg1 eqtype 0) & (arg2 eqtype 0)
mov edx,arg1*65536+arg2
else
mov edx,arg1
shl edx,16
add edx,arg2
end if
mcall
nodi:
}
macro setimg arg1,arg2,arg3
{
local nodi
mov eax,7
mov ebx,arg3
add ebx,8
mov ecx,dword [arg3]
shl ecx,16
add ecx,dword [arg3+4]
if (arg1 eqtype 0) & (arg2 eqtype 0)
mov edx,arg1*65536+arg2
else
mov edx,arg1
shl edx,16
add edx,arg2
end if
mcall
}
;Not optimiz
macro getimg imgsrc,x,y,xs,ys,imgdest
{
local cyc
mov eax,xs
mov dword [imgdest],eax
mov eax,ys
mov dword [imgdest+4],eax
mov eax,dword [imgsrc] ;getx size
mov edi,eax
mov ebx,y
mul ebx
add eax,x
mov ebx,3
mul ebx ;eax=offset on imsrc
mov ecx,0
mov ebx,0
mov ebp,eax
mov esi,0
add esi,8
add ebp,8
cyc:
mov al,byte [imgsrc+ebp]
mov [imgdest+esi],al
mov al,byte [imgsrc+ebp+1]
mov [imgdest+esi+1],al
mov al,byte [imgsrc+ebp+2]
mov [imgdest+esi+2],al
add esi,3
add ebp,3
inc ecx
cmp ecx,xs
jne cyc
add ebp,edi
add ebp,edi
add ebp,edi
sub ebp,xs
sub ebp,xs
sub ebp,xs
mov ecx,0
inc ebx
cmp ebx,ys
jne cyc
}
;
macro bmptoimg bmp_off,soi,img_off
{
local nodix,conv
cmp word [bmp_off],word 'BM'
jne nodix
mov eax,dword [bmp_off+18]
mov ebx,dword [bmp_off+22]
mov dword [img_off],eax
mov dword [img_off+4],ebx
mul ebx
lea ecx,[eax+2*eax]
lea edi,[img_off+8]
mov esi,dword [soi]
cld
rep movsb
nodix:
}
macro copyimg img2_off,img1_off
{
local cop
mov eax,dword [img1_off]
mov ebx,dword [img1_off+4]
mul ebx
lea ecx,[eax+2*eax]
lea esi,[img1_off+8]
lea edi,[img2_off+8]
cld
rep movsb
}
macro fullimg img_off,xs,ys,color
{
local cop
mov eax,xs
mov ebx,ys
mov dword [img_off],eax
mov dword [img_off+4],ebx
mul ebx
lea ebp,[eax+2*eax]
mov esi,color
if color eqtype 0
mov ecx,color/65536
else
mov ecx,esi
shr ecx,16
end if
xor edi,edi
cop:
mov word [img_off+8+edi],si
add edi,2
mov byte [img_off+8+edi],cl
inc edi
cmp edi,ebp
jne cop
}
macro convbmp bmp_load_area,bmp_soi
{
local status,bps,dwps,soi,sop,eop,eos,process,fileinfo,string,end_bmp
local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2
local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize
local noaddword
;local qwe,bmpfn
; convert:
movzx eax,word [bmp_load_area+28]
mul dword [bmp_load_area+18]
mov ebx,32
div ebx
test edx,edx
je noaddword
inc eax
noaddword:
mov dword [dwps],eax ;dwps-doublewords per string
shl eax,2
mov dword [bps],eax ;bps-bytes per string
cmp dword [bmp_load_area+34],0
jne yespicsize ;if picture size is defined
mul dword [bmp_load_area+22]
mov dword [bmp_load_area+34],eax
yespicsize:
mov eax,bmp_load_area
mov ebx,eax
add ebx, [bmp_load_area+2];file size
inc ebx
mov dword [bmp_soi],ebx ;soi-start of image area for drawing
add eax, [bmp_load_area+10]
mov dword [sop],eax ;sop-start of picture in file
add eax, [bmp_load_area+34]
mov dword [eop],eax ;eop-end of picture in file
mov eax, [bmp_load_area+18]
lea eax,[eax+2*eax] ;3x pixels in eax
mov edi,dword [bmp_soi] ;initializing
mov esi,dword [eop]
sub esi,dword [bps]
nextstring:
push edi
cmp word [bmp_load_area+28],24
jne convertno32
mov ecx,[dwps]
cld
rep movsd
convert1:
pop edi
sub esi,dword [bps]
sub esi,dword [bps]
cmp esi,dword [sop]
jb end_bmp;nomorestring
add edi,eax
jmp nextstring
; nomorestring:
; jmp end_bmp
convertno32:
mov ebx,bmp_load_area
add ebx, [bmp_load_area+14]
add ebx,14 ;start of color table
push esi
add esi,dword [bps]
mov dword [eos],esi
pop esi
nextelem:
push eax
movzx eax,byte [esi]
cmp word [bmp_load_area+28],4
je convert4bpp
cmp word [bmp_load_area+28],1
je convert1bpp
call converttable
convert2:
pop eax
inc esi
cmp esi,dword [eos]
jae convert1
add edi,3
jmp nextelem
convert4bpp:
shl ax,4
shr al,4
push ax
movzx eax,ah
call converttable
add edi,3
pop ax
movzx eax,al
call converttable
jmp convert2
convert1bpp:
mov ecx,eax
mov edx,7
nextbit:
xor eax,eax
bt ecx,edx
jnc noaddelem
inc eax
noaddelem:
push edx
call converttable
pop edx
dec edx
cmp edx,0xffffffff
je convert2
add edi,3
jmp nextbit
converttable:
shl eax,2
add eax,ebx
mov edx, dword [eax]
mov dword [edi],edx
ret
; DATA AREA
;status dd 0 ;bit0=1 if file thread is created
bps dd 0
dwps dd 0
;soi dd 0
sop dd 0
eop dd 0
eos dd 0
;process dd 0
end_bmp:
; mov eax,dword [soi]
; mov dword [bmp_soi],eax
}
; LOADBMP - Load bmp image from file
; (SYNTAX) LOADBMP 'file_path',temp_area(rb 0x10000),load_area,dd soi
; (SAMPLE) LOADBMP '/sys/menuet.bmp',temp_area,I_END,tsoi
; ( NOTE ) Macros create on Base of
; Picture browser by lisovin@26.ru & Ivan Poddubny
; SOI - Start of image
macro loadbmp bmp_file_name,bmp_temp_area,bmp_load_area,bmp_soi
{
local status,bps,dwps,soi,sop,eop,eos,process,fileinfo,string,end_bmp
local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2
local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize
local noaddword
;local qwe,bmpfn
mov dword [fileinfo+8],1 ; how many blocks to read (1)
mov eax,58
mov ebx,fileinfo
mcall
mov eax,[bmp_load_area+2]
shr eax,9 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 512 <20> <20><EFBFBD><E0A8A1><EFBFBD><EFBFBD> 1 - <20><><EFBFBD><EFBFBD><20><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inc eax
mov dword [fileinfo+8],eax
mov eax,58
mov ebx,fileinfo
mcall
; jmp qwe
;bmpfn db bmp_file_name
;qwe:
; mov eax,6
; mov ebx,bmpfn
; mov ecx,0
; mov edx,0xFFFFFF
; mov esi,bmp_load_area
; mov edi,0
; mcall
; convert:
movzx eax,word [bmp_load_area+28]
mul dword [bmp_load_area+18]
mov ebx,32
div ebx
test edx,edx
je noaddword
inc eax
noaddword:
mov dword [dwps],eax ;dwps-doublewords per string
shl eax,2
mov dword [bps],eax ;bps-bytes per string
cmp dword [bmp_load_area+34],0
jne yespicsize ;if picture size is defined
mul dword [bmp_load_area+22]
mov dword [bmp_load_area+34],eax
yespicsize:
mov eax,bmp_load_area
push eax
add eax, [bmp_load_area+2];file size
inc eax
mov dword [soi],eax ;soi-start of image area for drawing
pop eax
add eax, [bmp_load_area+10]
mov dword [sop],eax ;sop-start of picture in file
add eax, [bmp_load_area+34]
mov dword [eop],eax ;eop-end of picture in file
mov eax, [bmp_load_area+18]
mov ebx,3
mul ebx ;3x pixels in eax
mov edi,dword [soi] ;initializing
mov esi,dword [eop]
sub esi,dword [bps]
nextstring:
push edi
cmp word [bmp_load_area+28],24
jne convertno32
mov ecx,[dwps]
cld
rep movsd
convert1:
pop edi
sub esi,dword [bps]
sub esi,dword [bps]
cmp esi,dword [sop]
jb nomorestring
add edi,eax
jmp nextstring
nomorestring:
jmp end_bmp
convertno32:
mov ebx,bmp_load_area
add ebx, [bmp_load_area+14]
add ebx,14 ;start of color table
push esi
add esi,dword [bps]
mov dword [eos],esi
pop esi
nextelem:
push eax
movzx eax,byte [esi]
cmp word [bmp_load_area+28],4
je convert4bpp
cmp word [bmp_load_area+28],1
je convert1bpp
call converttable
convert2:
pop eax
inc esi
cmp esi,dword [eos]
jae convert1
add edi,3
jmp nextelem
convert4bpp:
shl ax,4
shr al,4
push ax
movzx eax,ah
call converttable
add edi,3
pop ax
movzx eax,al
call converttable
jmp convert2
convert1bpp:
mov ecx,eax
mov edx,7
nextbit:
xor eax,eax
bt ecx,edx
jnc noaddelem
inc eax
noaddelem:
push edx
call converttable
pop edx
dec edx
cmp edx,0xffffffff
je convert2
add edi,3
jmp nextbit
converttable:
shl eax,2
add eax,ebx
mov edx, dword [eax]
mov dword [edi],edx
ret
; DATA AREA
;status dd 0 ;bit0=1 if file thread is created
bps dd 0
dwps dd 0
soi dd 0
sop dd 0
eop dd 0
eos dd 0
;process dd 0
; DATA AREA
fileinfo:
dd 0
dd 0
dd 1 ;number of blocks of 512 bytes
dd bmp_load_area
dd bmp_temp_area
string:
db bmp_file_name,0
db ' '
db ' '
db ' '
db ' ',0
end_bmp:
mov eax,dword [soi]
mov dword [bmp_soi],eax
}

View File

@@ -1,499 +0,0 @@
lang equ ru_RU ; ru_RU en_US fr_FR de_DE fi_FI
;
; Assembler
; SMALL
; CODE
; Libary
;
; Ver 0.09 By Pavlushin Evgeni (RUSSIA)
; www.waptap@mail.ru
;InfoList
;0.01 scank,putpix,puttxt
;0.02 label,random,colors
;0.03 window,startwd,endwd,attributes
;0.04 close,delay,scevent ~30.04.2004
;0.05 small random, ~04.05.2004
;0.06 wtevent ~09.05.2004
;0.07 timeevent ~23.05.2004
;0.08 txtput ~14.06.2004
;0.09 opendialog,savedialog ~20.06.2004
macro opendialog redproc,openoff,erroff,path,testtime
{
local still, dlg_file, clip_file, redwait
local button, key, red, zzz, still, zzz2, incf, file_is_open, zzz3
mov ecx,200
zzz3:
mov byte [path+ecx-1],0
loop zzz3
dec byte [clip_file+7]
incf:
inc byte [clip_file+7]
mov eax,6
mov ebx,clip_file
mov ecx,0
or edx,-1
mov esi,path
mcall
cmp byte [clip_file+7],'Z'
je erroff
cmp eax,0xffffffff
jne incf
mov ecx,200
zzz2:
mov byte [path+ecx],0
loop zzz2
mov ebx,clip_file
mov ecx,path
mov edx,100
mov esi,0
mov eax,33
mcall
mov ebx,dlg_file
mov ecx,clip_file
mov eax,19
mcall
still:
scevent red,key,button
cmp byte [path],0
jne file_is_open
cmp dword [redwait],testtime ;20
jnae zzz
mov eax,6
mov ebx,clip_file
mov ecx,0
mov edx,-1
mov esi,path
mcall
cmp eax,0xffffffff
je erroff ;errexit
mov dword [redwait],0
zzz:
delay 5
inc dword [redwait]
jmp still
file_is_open:
mov eax,32
mov ebx,clip_file
mcall
jmp openoff
key: ; key
mcall ; read (eax=2)
jmp still
button: ; button
mov eax,17 ; get id
mcall
cmp ah,1 ; button id=1 ?
jne still
mov eax,-1 ; close this program
mcall
red:
call redproc
jmp still
dlg_file db 'SYSXTREE '
clip_file db 'OPENCLPACLP'
db 'O' ;Dialog type O-open S-save
db 0 ;Marker
redwait dd 0
}
macro savedialog redproc,openoff,erroff,path,testtime
{
local still, dlg_file, clip_file, redwait, zzz3
local button, key, red, zzz, still, zzz2, incf, file_is_open
mov ecx,200
zzz3:
mov byte [path+ecx-1],0
loop zzz3
dec byte [clip_file+7]
incf:
inc byte [clip_file+7]
mov eax,6
mov ebx,clip_file
mov ecx,0
mov edx,-1
mov esi,path
mcall
cmp byte [clip_file+7],'Z'
je erroff
cmp eax,0xffffffff
jne incf
mov ecx,200
zzz2:
mov byte [path+ecx],0
loop zzz2
mov ebx,clip_file
mov ecx,path
mov edx,100
mov esi,0
mov eax,33
mcall
mov ebx,dlg_file
mov ecx,clip_file
mov eax,19
mcall
still:
scevent red,key,button
cmp byte [path],0
jne file_is_open
cmp dword [redwait],testtime ;20
jnae zzz
mov eax,6
mov ebx,clip_file
mov ecx,0
mov edx,-1
mov esi,path
mcall
cmp eax,0xffffffff
je erroff ;errexit
mov dword [redwait],0
zzz:
delay 5
inc dword [redwait]
jmp still
file_is_open:
mov eax,32
mov ebx,clip_file
mcall
jmp openoff
key: ; key
mcall ; read (eax=2)
jmp still
button: ; button
mov eax,17 ; get id
mcall
cmp ah,1 ; button id=1 ?
jne still
mov eax,-1 ; close this program
mcall
red:
call redproc
jmp still
dlg_file db 'SYSXTREE '
clip_file db 'SAVECLPACLP'
db 'S' ;Dialog type O-open S-save
db 0 ;Marker
redwait dd 0
}
; RANDOM - generate random count (small)
; (SYNTAX) RANDOM MaxCount,OutArgument
; (SAMPLE) RANDOM 10000,eax
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations
randomuse = 0
macro random arg1,arg2
{
local rxproc
randomuse = randomuse + 1
jmp rxproc
if defined randomuse & randomuse = 1
randomproc:
jmp rnj
rsx1 dw 0x4321
rsx2 dw 0x1234
rnj:
; mov eax,arg1
push bx
push cx
push dx
push si
push di
mov cx,ax
mov ax,word ptr rsx1
mov bx,word ptr rsx2
mov si,ax
mov di,bx
mov dl,ah
mov ah,al
mov al,bh
mov bh,bl
xor bl,bl
rcr dl,1
rcr ax,1
rcr bx,1
add bx,di
adc ax,si
add bx,0x62e9
adc ax,0x3619
mov word ptr rsx1,bx
mov word ptr rsx2,ax
xor dx,dx
cmp ax,0
je nodiv
cmp cx,0
je nodiv
div cx
nodiv:
mov ax,dx
pop di
pop si
pop dx
pop cx
pop bx
; mov arg2,0
; mov arg2,eax
ret
end if
rxproc:
mov eax,arg1
call randomproc
mov arg2,0
mov arg2,eax
}
macro scank
{
mov eax,10
mcall
}
macro putpix x,y,color
{
mov ebx,x
mov ecx,y
mov edx,color
mov eax,1
mcall
}
macro puttxt x,y,offs,size,color
{
mov ebx,x
shl ebx,16
add ebx,y
mov ecx,color
mov edx,offs
mov esi,size
mov eax,4
mcall
}
;_ equ '____'
;macro libtest x,y,color
;{
;if x = as dword
; mov ebx,x
;end if
; mov ecx,y
; mov edx,color
; mov eax,1
; mcall
;}
macro outcount data, x, y, color, numtype
{
mov ecx,data
mov ebx,numtype
mov bl,0
mov edx,x*65536+y
mov esi,color
mov eax,47
mcall
}
; SCEVENT - Scan event
macro scevent red,key,but
{
mov eax,11
mcall
dec eax
jz red
dec eax
jz key
dec eax
jz but
}
; WTEVENT - Wait event
macro wtevent red,key,but
{
mov eax,10
mcall
dec eax
jz red
dec eax
jz key
dec eax
jz but
}
; TIMEEVENT - Wite for event with timeout
macro timeevent xfps,noevent,red,key,but
{
mov eax,23
mov ebx,xfps
mcall
cmp eax,0
je noevent
dec eax
jz red
dec eax
jz key
dec eax
jz but
}
; CLOSE - Close program
macro close
{
mov eax,-1
mcall
}
; DELAY - Create delay 1/100 sec
; (SYNTAX) Delay time
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec
macro delay arg1
{
mov eax,5
mov ebx,arg1
mcall
}
; WINDOW - Draw window
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned
macro window arg1,arg2,arg3,arg4,arg5
{
mov ebx,arg1*65536+arg3
mov ecx,arg2*65536+arg4
mov edx,arg5
mov eax,0
mcall
}
macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7
{
mov ebx,arg1*65536+arg3
mov ecx,arg2*65536+arg4
mov edx,arg5
mov esi,arg6
mov edi,arg7
mov eax,0
mcall
}
; STARTWD - Start of window draw
macro startwd
{
mov eax,12
mov ebx,1
mcall
}
; ENDWD - End window draw
macro endwd
{
mov eax,12
mov ebx,2
mcall
}
; LABEL - Put text to frame
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big
macro label arg1,arg2,arg3,arg4
{
local asd,lab
jmp asd
lab db arg3 ;arg label
asd:
mov ebx,arg1 ;arg1=y arg2=x
shl ebx,16
add ebx,arg2
mov ecx,arg4 ;arg4 color
mov edx,lab
mov esi,asd-lab ;calc size
mov eax,4
mcall
}
;Key's
key_Up equ 178
key_Down equ 177
key_Right equ 179
key_Left equ 176
key_Esc equ 27
key_Space equ 32
key_Enter equ 13
key_Bspace equ 8
key_F1 equ 50
key_F2 equ 51
key_F3 equ 52
key_F4 equ 53
key_F5 equ 54
key_F6 equ 55
key_F7 equ 56
key_F8 equ 57
key_F9 equ 48
key_F10 equ 49
key_F11 equ 68
key_F12 equ 255
key_Home equ 180
key_End equ 181
key_PgUp equ 184
key_PgDown equ 183
;Attributes
;Window Attributes
window_Skinned equ 0x03000000
window_Type2 equ 0x02000000
window_Type1 equ 0x00000000
window_Reserve equ 0x01000000
;Font Attributes
font_Big equ 0x10000000
;Colors
cl_White equ 0x00ffffff
cl_Black equ 0x00000000
cl_Grey equ 0x00888888
cl_Red equ 0x00ff0000
cl_Lime equ 0x0000ff00
cl_Green equ 0x0000af00
cl_Blue equ 0x000000ff
cl_Purple equ 0x008080ff
cl_Violet equ 0x008040ff
cl_Cyan equ 0x0040e0ff

View File

@@ -0,0 +1,3 @@
@fasm 3dcube2.asm 3dcube2
@kpack 3dcube2
if not exist 3dcube2 ( @pause )

View File

@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm 3dcube2.asm 3dcube2
@erase lang.inc
@kpack 3dcube2
@pause

View File

@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm 3dcube2.asm 3dcube2
@erase lang.inc
@kpack 3dcube2
@pause

View File

@@ -1,82 +1,60 @@
; ;
; FIRE for MENUET - Compile with FASM ; Fire for Kolibri OS - 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

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

View File

@@ -1,6 +1,9 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SPDX-License-Identifier: GPL-2.0-only
; A firework demo ; A firework demo
; Programmed by Yaniv LEVIATHAN ; Copyright (C) 2010-2025 KolibriOS team
;
; Initially ðrogrammed by Yaniv Leviathan
; http://yaniv.leviathanonline.com ; http://yaniv.leviathanonline.com
; Converted to DexOS, By Dex ; Converted to DexOS, By Dex
; Converted to KolibriOS, By Asper ; Converted to KolibriOS, By Asper
@@ -11,19 +14,24 @@
; optionally AVX, AVX2, AVX512 ; optionally AVX, AVX2, AVX512
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use32 use32
org 0x0 org 0
db 'MENUET01' ; 8 byte id db 'MENUET01' ; 8 byte id
dd 0x01 ; version dd 1 ; version
dd STARTAPP ; program start dd STARTAPP ; program start
dd I_END ; program image size dd I_END ; program image size
dd E_END ; required amount of memory dd E_END ; required amount of memory
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 +54,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 +67,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 +75,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 +83,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 +95,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 +116,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 +134,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 +151,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 +168,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 +184,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 +192,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 +203,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 +213,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 +223,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 +238,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 +252,9 @@ 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 call OnResize
xor eax, eax
rep stosd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Main Functions ; Main Functions
@@ -253,30 +272,64 @@ 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]
mov [buffer],eax
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 +344,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 +360,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 +383,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 +399,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 +435,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 +447,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 +457,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 +465,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 +512,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:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 85 KiB

View File

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

View File

@@ -1,15 +1,24 @@
include "lang.inc" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include "../../../macros.inc" ; SPDX-License-Identifier: GPL-2.0-only
include "../../../KOSfuncs.inc" ; A MoveBack demo
; Copyright (C) 2010-2025 KolibriOS team
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WND_SIZE_X = 320 include "../../macros.inc"
WND_SIZE_Y = 200 include "../../KOSfuncs.inc"
KOS_APP_START
Screen_W dd 600-10 ;10 px for borders
Screen_H dd 400
VC_DELTA = 1 VC_DELTA = 1
HC_DELTA = 2 HC_DELTA = 2
MEOS_APP_START
CODE CODE
mcall SF_SYS_MISC,SSF_HEAP_INIT
call OnResize
fninit fninit
call init_sinus_table call init_sinus_table
call init_background call init_background
@@ -17,6 +26,7 @@ CODE
mcall SF_SET_EVENTS_MASK, 101b mcall SF_SET_EVENTS_MASK, 101b
jmp .paint_window jmp .paint_window
align 4
.event_loop: .event_loop:
mcall SF_WAIT_EVENT_TIMEOUT, 1 mcall SF_WAIT_EVENT_TIMEOUT, 1
@@ -34,23 +44,62 @@ CODE
add word [hor_counter],HC_DELTA add word [hor_counter],HC_DELTA
call handle_animation call handle_animation
xor ebp,ebp xor ebp,ebp
mcall SF_PUT_IMAGE_EXT, virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,<0,0>,8,_palette mov ecx,[Screen_W]
shl ecx,16
add ecx,[Screen_H]
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,<0,0>,8,_palette
jmp .event_loop jmp .event_loop
.paint_window: .paint_window:
mcall SF_THREAD_INFO, proc_info,-1 mcall SF_THREAD_INFO, proc_info,-1
cmp dword[proc_info.box.height],0
je .resize_end
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
add eax,4
sub eax,[proc_info.box.height]
neg eax
cmp eax,[Screen_H]
je .end_h
cmp eax,32 ;min height
jge @f
mov eax,32
@@:
mov [Screen_H],eax
xor eax,eax
mov [Screen_W],eax
.end_h:
mov eax,[proc_info.box.width]
sub eax,9
cmp eax,[Screen_W]
je .resize_end
cmp eax,64 ;min width
jge @f
mov eax,64
@@:
mov [Screen_W],eax
call OnResize
.resize_end:
mcall SF_REDRAW, SSF_BEGIN_DRAW mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
lea ecx,[eax + (100 shl 16) + WND_SIZE_Y+4] lea ecx,[eax + (100 shl 16) +4]
add ecx,[Screen_H]
mov edi,title mov edi,title
mcall SF_CREATE_WINDOW, <100,WND_SIZE_X+9>,,0x74000000 mov ebx,(100 shl 16)+9
add ebx,[Screen_W]
mcall SF_CREATE_WINDOW,,,0x73000000
test [proc_info.wnd_state], 0x04 test [proc_info.wnd_state], 0x04
jnz @f jnz @f
xor ebp,ebp xor ebp,ebp
mcall SF_PUT_IMAGE_EXT, virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,<0,0>,8,_palette mov ecx,[Screen_W]
shl ecx,16
add ecx,[Screen_H]
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,<0,0>,8,_palette
@@: @@:
mcall SF_REDRAW, SSF_END_DRAW mcall SF_REDRAW, SSF_END_DRAW
@@ -105,6 +154,14 @@ init_background:
jne .ib_vertical jne .ib_vertical
ret ret
align 4
OnResize:
mov ecx,[Screen_W]
imul ecx,[Screen_H]
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[virtual_screen_8]
mov [virtual_screen_8],eax
ret
s_OFFX = 0 s_OFFX = 0
s_OFFY = 2 s_OFFY = 2
@@ -120,10 +177,12 @@ handle_animation:
add ebx,ebx add ebx,ebx
mov ax,[sinetable+ebx] mov ax,[sinetable+ebx]
mov [esp+s_OFFX],ax mov [esp+s_OFFX],ax
mov edi,virtual_screen_8 mov edi,[virtual_screen_8]
mov edx,WND_SIZE_Y-1 mov edx,[Screen_H]
dec edx
.a_ver: .a_ver:
mov ecx,WND_SIZE_X-1 mov ecx,[Screen_W]
dec ecx
mov bx,[esp+s_OFFY] mov bx,[esp+s_OFFY]
add bx,dx add bx,dx
and ebx,255 and ebx,255
@@ -153,8 +212,7 @@ UDATA
_palette: rd 256 _palette: rd 256
virtual_screen_8: virtual_screen_8 dd ?
rb WND_SIZE_X*WND_SIZE_Y
background: background:
rb 256*256 rb 256*256
@@ -164,4 +222,4 @@ UDATA
proc_info process_information proc_info process_information
MEOS_APP_END KOS_APP_END

View File

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

View File

@@ -1,5 +0,0 @@
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm movback.asm movback
@erase lang.inc
@pause

View File

@@ -1,5 +0,0 @@
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm movback.asm movback
@erase lang.inc
@pause

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,104 @@
; Originally written by Jarek Pelczar ; Originally written by Jarek Pelczar
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
title db 'Plasma',0
MEOS_APP_START
CODE CODE
mcall SF_SYS_MISC,SSF_HEAP_INIT
call OnResize
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,, [virtual_screen_8]
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 +148,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 +176,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 +197,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 +204,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

@@ -1,5 +0,0 @@
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm plasma.asm plasma
@erase lang.inc
@pause

View File

@@ -1,5 +0,0 @@
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm plasma.asm plasma
@erase lang.inc
@pause

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