34 Commits

Author SHA1 Message Date
03da8574be Sync build files with main
Some checks failed
Build system / Check kernel codestyle (pull_request) Successful in 20s
Build system / Build (pull_request) Failing after 48s
- Fix merge conflicts.
2025-05-20 19:12:59 +01:00
a6abf50f97 system/rdsave: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:12:58 +01:00
a1538d2d7f system/MyKey: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
a9351a35d9 system/mousemul: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.
2025-05-20 19:10:55 +01:00
dbd340dd7d system/menu: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
00f3b86d44 system/launcher: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
99bee67a4c system/launch: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files.
2025-05-20 19:10:55 +01:00
de26ccc3b7 system/kobra: Post-SVN clean up
- Move source code from `trunk` into program root directory.
2025-05-20 19:10:55 +01:00
8a2d12bad8 system/icon: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
5e91894495 system/hdd_info: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.
2025-05-20 19:10:55 +01:00
e01add279b system/eskin: Post-SVN clean up
- Update ASM include paths.
- Note: Line endings standardised to `LF`, so best to view diffs with whitespace changes hidden.
2025-05-20 19:10:55 +01:00
402ee973eb system/eskin: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files.
2025-05-20 19:10:55 +01:00
0bff8fb2fc system/docpack: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
12c0d3916f system/docky: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.
2025-05-20 19:10:54 +01:00
555ab125a3 system/cpu: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:54 +01:00
e18946f81b system/calendar: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:54 +01:00
4a3a04bb4d system/board: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:54 +01:00
7e63294b5e Post-SVN clean up (#244)
- Move source code from `trunk` into program root directory.
- Fix build and ASM files.
- Translated a few RU comments to en_US.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.

(Work towards #75, point 3)

Reviewed-on: #244
Reviewed-by: Gleb Zaharov <risdeveau@codrs.ru>
Reviewed-by: Burer <burer@kolibrios.org>
Co-authored-by: Andrew <dent.ace@gmail.com>
Co-committed-by: Andrew <dent.ace@gmail.com>
2025-05-20 17:36:10 +02:00
c148987224 Libs/http: Added all delim chars from RFC 3986 (#233)
Original PR: https://github.com/KolibriOS/kolibrios/pull/34
Original issue: https://github.com/KolibriOS/kolibrios/issues/33

Co-authored-by: Sarveshwaar SS <94345639+Saru2003@users.noreply.github.com>

Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/233
Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com>
Reviewed-by: IgorA <igora@noreply.localhost>
Co-authored-by: Burer <burer@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2025-05-17 19:11:15 +02:00
4550e15838 Magnify: Moved to programs/system
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 29s
Build system / Build (pull_request) Successful in 8m45s
Signed-off-by: Max Logaev <maxlogaev@proton.me>
2025-05-14 21:58:44 +03:00
cc867a0bb8 Magnify: Added visual grid. Changed magnify calc and display logic
- Fully refactored codestyle;
- Changed magnify calculations and display logic,
  now it is similar to Pipet;
- Added proper copyrights;
- Localization to all system languages;
- Removed redundant .bat files;
- Added visual grid (Leency).

Co-authored-by: Kiril Lipatov <lipatov.kiril@gmail.com>
2025-05-14 21:58:24 +03:00
16a0ef9543 WebView 3.91 (#230)
- fix crash at the end of the page https://menuetos.net/docs.htm;
- improve position of the line under text (and related code)
  for a various font sizes;
- handle params width= and size= of <hr>;
- update acid_0.1.htm page.

Reviewed-on: #230
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: leency <lipatov.kiril@gmail.com>
Co-committed-by: leency <lipatov.kiril@gmail.com>
2025-05-05 19:04:52 +02:00
51b150c9aa Kernel: Fixed bug #221 - accept does not fill sockaddr 2025-05-05 18:14:22 +02:00
c18da5afae TinyGL: Added gluDisk. Fixed args in gluCylinder and gluSphere (#223)
TinyGL:
- Fixed setting of `GL_FRONT_AND_BACK` mode;
- Fixed setting of `GL_SPOT_DIRECTION` angle;
- Optimization of drawing triangles and lines;
- Input parameters are adjusted to the OpenGL standard
  in `gluCylinder` and `gluSphere` functions;
- Added `gluDisk` function (the gluDisk function draws
  a disk-shaped quadric figure);
- Optimize function `calc_buf`.

Flag:
- Added lighting.

info3ds, info3ds_u, test_glu0, test_glu1, test_glu2,
textures0, textures1, textures2:
- Updated programs using `gluCylinder` and `gluSphere`.

Reviewed-on: #223
Reviewed-by: Ivan B <dunkaist@noreply.localhost>
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: IgorA <aie85playm@gmail.com>
Co-committed-by: IgorA <aie85playm@gmail.com>
2025-05-04 20:00:04 +02:00
cd1c2ce969 Fix docpack shortcut for sysfuncs in text editors
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 28s
Build system / Build (pull_request) Successful in 6m54s
Docpack app has several help files included. Tinypad and CEdit run the
app to show one of sysfuncs.txt/sysfuncr.txt files. The text editors
pass a one-letter argument to specify the text file. It used to be 'f'
for sysfuncs, it has become 'e' recently. Update this one-letter
argument both in tinypad and cedit.

Resolve #216
2025-04-30 01:50:46 +01:00
d7795a8961 Flag: demo program rewritten from C to FASM (#219)
Original source: http://ftp.kolibrios.org/arch/libraries/TinyGL/examples/flag_src.7z

Reviewed-on: #219
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Reviewed-by: Ivan B <dunkaist@noreply.localhost>
Co-authored-by: IgorA <aie85playm@gmail.com>
Co-committed-by: IgorA <aie85playm@gmail.com>
2025-04-22 15:11:55 +02:00
b948491fb3 Calc+: Fix list buttons UI (#220)
- Fixed list buttons wrong position and size;
- Fixed list buttons logic not working.

Reviewed-on: #220
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Burer <burer@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2025-04-22 15:01:29 +02:00
03cfdeb50f TinyGL: Bug fixes. info3ds, info3ds_u, vox_tgl: Related changes (#210)
TinyGL:
- The `depth` parameter in the `glClearDepth` function is now `qword` instead of `dword`.
- Fixed bug with z-buffer (the edges were cut off incorrectly, the coordinates in it were from 0 to 1, but should be from -1 to 1)
- Optimized array functions: `glDrawArrays`, `glDrawElements`

info3ds, info3ds_u, vox_tgl:
- Removed unnecessary operations after fixing a bug with the z-buffer.

Reviewed-on: #210
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: IgorA <aie85playm@gmail.com>
Co-committed-by: IgorA <aie85playm@gmail.com>
2025-04-15 14:40:41 +02:00
e4cd8a4d74 Calc+ v1.0 (#189)
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 26s
Build system / Build (pull_request) Successful in 7m1s
- Bigger fonts
- System colors
- Code refactoring to make UI flexible and more readable
- Move from ISO to IMG
- Add to main menu, add to desktop instead of Calc, remove from App+
- Localization to all system languages
- Source code file is now UTF-8

Co-authored-by: Burer <burer@kolibrios.org>
Reviewed-on: #189
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Kiril Lipatov <lipatov.kiril@gmail.com>
Co-committed-by: Kiril Lipatov <lipatov.kiril@gmail.com>
2025-04-14 19:46:57 +02:00
75b6663ce0 Ftpc: Update (#185)
- fix for bugs with buffers 'remote_list_buf', 'buf_buffer2';
- fix stack leak when navigating files;
- change sorting of folders and files, clean code;
- added option to show|hide log;
- icons are taken from @reshare;
- added icons to the 'disconnect' and 'search' buttons.

Reviewed-on: #185
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: IgorA <aie85playm@gmail.com>
Co-committed-by: IgorA <aie85playm@gmail.com>
2025-04-10 18:47:13 +02:00
df0c5d8f48 Сharsets: Updated to 0.4.2 (#196)
30.03.2025 - 0.4.0
- Localization for all system languages
- Display all character scales
- Abolity to copy character codes
- Block on charpage 00 for CP866
- New character code half markers
- Navigation using keys (see hotkeys.txt)

03.04.2025 - 0.4.1
- Fixed bug with codes color subscription

04.04.2025 - 0.4.2
- Fixed bug with resetting UTF charpage to zero on double charset swap to CP866
- Improved charpage blocking for CP866 UX
- Improved char codes copying UI

Reviewed-on: #196
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Burer <burer@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2025-04-10 16:24:11 +02:00
fcb9f49785 flood-it: Fixed buttons position (#193)
Reviewed-on: #193
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: leency <lipatov.kiril@gmail.com>
Co-committed-by: leency <lipatov.kiril@gmail.com>
2025-04-03 12:32:18 +02:00
d6c44c6570 WebView 3.9
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 31s
Build system / Build (pull_request) Successful in 6m27s
- new homepages
- fix clash on a wrong <kosicon> number
- set proper internal page sizes
2025-04-03 10:50:04 +02:00
b8a1487bab Fixed menu.dat (ru_RU) after moving the period app
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 22s
Build system / Build (pull_request) Successful in 6m24s
Signed-off-by: Max Logaev <maxlogaev@proton.me>
2025-04-03 11:29:55 +03:00
324 changed files with 12301 additions and 10456 deletions

View File

@@ -66,17 +66,6 @@ to the end commit message body on a new line.
Use **rebase** to keep your branch up to date. Use **rebase** to keep your branch up to date.
## Licensing
For new source code files and for existing ones without a license, you need to add the following header to the beginning of the file:
```asm
; SPDX-License-Identifier: GPL-2.0-only
; Program - Brief description.
; Copyright (C) 2011-2025 KolibriOS team
```
Be careful when setting copyright and date interval. Review the file's history to verify its origin.
## Conclusion ## Conclusion
We hope this small instructions will help you to get familiar with KolibriOS contribution rules and inspire you to participate in the life of our project. We hope this small instructions will help you to get familiar with KolibriOS contribution rules and inspire you to participate in the life of our project.

View File

@@ -1,6 +1,6 @@
# KolibriOS # KolibriOS
[![License](https://img.shields.io/badge/License-GPL%202.0-green)](./LICENSE) [![License](https://img.shields.io/badge/License-GPL%202.0-green)](./COPYING.TXT)
[![Build system](https://git.kolibrios.org/KolibriOS/kolibrios/actions/workflows/build.yaml/badge.svg)](https://git.kolibrios.org/KolibriOS/kolibrios/actions) [![Build system](https://git.kolibrios.org/KolibriOS/kolibrios/actions/workflows/build.yaml/badge.svg)](https://git.kolibrios.org/KolibriOS/kolibrios/actions)
KolibriOS is a hobby operating system for x86-compatible computers, which is currently being developed by a small but passionate team of enthusiasts. KolibriOS is a hobby operating system for x86-compatible computers, which is currently being developed by a small but passionate team of enthusiasts.

View File

@@ -49,8 +49,6 @@ img_files = {
{"MEDIA/IMGF/INVSOL.OBJ", "common/media/ImgF/invSol.obj"}, {"MEDIA/IMGF/INVSOL.OBJ", "common/media/ImgF/invSol.obj"},
{"MEDIA/PIXIESKN.PNG", SRC_PROGS .. "/cmm/pixie2/pixieskn.png"}, {"MEDIA/PIXIESKN.PNG", SRC_PROGS .. "/cmm/pixie2/pixieskn.png"},
{"NETWORK/FTPC.INI", SRC_PROGS .. "/network/ftpc/ftpc.ini"}, {"NETWORK/FTPC.INI", SRC_PROGS .. "/network/ftpc/ftpc.ini"},
{"NETWORK/FTPC_SYS.PNG", SRC_PROGS .. "/network/ftpc/ftpc_sys.png"},
{"NETWORK/FTPC_NOD.PNG", SRC_PROGS .. "/network/ftpc/ftpc_nod.png"},
{"NETWORK/FTPD.INI", "common/network/ftpd.ini"}, {"NETWORK/FTPD.INI", "common/network/ftpd.ini"},
{"NETWORK/KNMAP", "common/network/knmap"}, {"NETWORK/KNMAP", "common/network/knmap"},
{"NETWORK/USERS.INI", "common/network/users.ini"}, {"NETWORK/USERS.INI", "common/network/users.ini"},
@@ -82,7 +80,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"GAMES/DESCENT", build_type .. "/games/descent"}, {"GAMES/DESCENT", build_type .. "/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/rus/.shell"}, {"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/rus/.shell"},
{"SETTINGS/GAMES.INI", "ru_RU/settings/games.ini"}, {"SETTINGS/GAMES.INI", "ru_RU/settings/games.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"}, {"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/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"}, {"WELCOME.HTM", VAR_DATA .. "/" .. build_type .. "/welcome.htm.kpack"},
@@ -92,7 +90,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"GAMES/DESCENT", "common/games/descent"}, {"GAMES/DESCENT", "common/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"}, {"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"},
{"SETTINGS/GAMES.INI", "common/settings/games.ini"}, {"SETTINGS/GAMES.INI", "common/settings/games.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"}, {"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/mykey.ini"},
{"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"}, {"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"},
}) elseif build_type == "es_ES" then tup.append_table(img_files, { }) elseif build_type == "es_ES" then tup.append_table(img_files, {
{"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"}, {"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"},
@@ -101,7 +99,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"GAMES/DESCENT", "common/games/descent"}, {"GAMES/DESCENT", "common/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"}, {"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"},
{"SETTINGS/GAMES.INI", "common/settings/games.ini"}, {"SETTINGS/GAMES.INI", "common/settings/games.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"}, {"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/mykey.ini"},
{"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"}, {"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"},
}) elseif build_type == "it_IT" then tup.append_table(img_files, { }) elseif build_type == "it_IT" then tup.append_table(img_files, {
{"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"}, {"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"},
@@ -109,7 +107,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"File Managers/KFAR.INI", "common/File Managers/kfar.ini"}, {"File Managers/KFAR.INI", "common/File Managers/kfar.ini"},
{"GAMES/DESCENT", "common/games/descent"}, {"GAMES/DESCENT", "common/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"}, {"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey_it.ini"}, {"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/mykey_it.ini"},
{"SETTINGS/GAMES.INI", "common/settings/games.ini"}, {"SETTINGS/GAMES.INI", "common/settings/games.ini"},
{"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"}, {"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"},
}) else tup.append_table(img_files, { }) else tup.append_table(img_files, {
@@ -119,7 +117,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"GAMES/DESCENT", "common/games/descent"}, {"GAMES/DESCENT", "common/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"}, {"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"},
{"SETTINGS/GAMES.INI", "common/settings/games.ini"}, {"SETTINGS/GAMES.INI", "common/settings/games.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"}, {"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/mykey.ini"},
{"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"}, {"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"},
}) end }) end
@@ -197,8 +195,8 @@ extra_files = {
{"kolibrios/develop/utils/SPEDump", SRC_PROGS .. "/develop/SPEDump/SPEDump.kex"}, {"kolibrios/develop/utils/SPEDump", SRC_PROGS .. "/develop/SPEDump/SPEDump.kex"},
{"kolibrios/emul/", "common/emul/*"}, {"kolibrios/emul/", "common/emul/*"},
{"kolibrios/emul/dosbox/", "common/emul/DosBox/*"}, {"kolibrios/emul/dosbox/", "common/emul/DosBox/*"},
{"kolibrios/emul/e80/readme.txt", SRC_PROGS .. "/emulator/e80/trunk/readme.txt"}, {"kolibrios/emul/e80/readme.txt", SRC_PROGS .. "/emulator/e80/readme.txt"},
{"kolibrios/emul/e80/keyboard.png", SRC_PROGS .. "/emulator/e80/trunk/keyboard.png"}, {"kolibrios/emul/e80/keyboard.png", SRC_PROGS .. "/emulator/e80/keyboard.png"},
{"kolibrios/emul/fceu/fceu", SRC_PROGS .. "/emulator/fceu/fceu"}, {"kolibrios/emul/fceu/fceu", SRC_PROGS .. "/emulator/fceu/fceu"},
{"kolibrios/emul/fceu/FCEU ReadMe.txt", SRC_PROGS .. "/emulator/fceu/FCEU ReadMe.txt"}, {"kolibrios/emul/fceu/FCEU ReadMe.txt", SRC_PROGS .. "/emulator/fceu/FCEU ReadMe.txt"},
{"kolibrios/emul/chip8/chip8", VAR_PROGS .. "/emulator/chip8/chip8"}, {"kolibrios/emul/chip8/chip8", VAR_PROGS .. "/emulator/chip8/chip8"},
@@ -286,7 +284,7 @@ extra_files = {
{"kolibrios/netsurf/res/", "common/network/netsurf/res/*"}, {"kolibrios/netsurf/res/", "common/network/netsurf/res/*"},
{"kolibrios/res/skins/", "../skins/authors.txt"}, {"kolibrios/res/skins/", "../skins/authors.txt"},
{"kolibrios/res/templates/", "common/templates/*"}, {"kolibrios/res/templates/", "common/templates/*"},
{"kolibrios/res/templates/", SRC_PROGS .. "/emulator/e80/trunk/games/*"}, {"kolibrios/res/templates/", SRC_PROGS .. "/emulator/e80/games/*"},
{"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"},
@@ -318,14 +316,14 @@ if build_type == "ru_RU" then tup.append_table(extra_files, {
{"Docs/cp866/Hot_Keys.txt", build_type .. "/docs/Hot_Keys.txt"}, {"Docs/cp866/Hot_Keys.txt", build_type .. "/docs/Hot_Keys.txt"},
{"Docs/cp866/Install.txt", build_type .. "/docs/Install.txt"}, {"Docs/cp866/Install.txt", build_type .. "/docs/Install.txt"},
{"Docs/cp866/Credits.txt", build_type .. "/docs/Credits.txt"}, {"Docs/cp866/Credits.txt", build_type .. "/docs/Credits.txt"},
{"Docs/cp866/SysFuncr.txt", VAR_PROGS .. "/system/docpack/trunk/SysFuncr.txt"}, {"Docs/cp866/SysFuncr.txt", VAR_PROGS .. "/system/docpack/SysFuncr.txt"},
{"Docs/cp1251/Config.txt", VAR_DATA .. "/" .. build_type .. "/docs/CONFIG.WIN.TXT", cp1251_from = build_type .. "/docs/Config.txt"}, {"Docs/cp1251/Config.txt", VAR_DATA .. "/" .. build_type .. "/docs/CONFIG.WIN.TXT", cp1251_from = build_type .. "/docs/Config.txt"},
{"Docs/cp1251/Copying.txt", "$(VAR_DATA)/$(build_type)/docs/COPYING.WIN.TXT", cp1251_from = build_type .. "/docs/Copying.txt"}, {"Docs/cp1251/Copying.txt", "$(VAR_DATA)/$(build_type)/docs/COPYING.WIN.TXT", cp1251_from = build_type .. "/docs/Copying.txt"},
{"Docs/cp1251/History.txt", "$(VAR_DATA)/$(build_type)/docs/HISTORY.WIN.TXT", cp1251_from = build_type .. "/docs/History.txt"}, {"Docs/cp1251/History.txt", "$(VAR_DATA)/$(build_type)/docs/HISTORY.WIN.TXT", cp1251_from = build_type .. "/docs/History.txt"},
{"Docs/cp1251/Hot_Keys.txt", "$(VAR_DATA)/$(build_type)/docs/HOT_KEYS.WIN.TXT", cp1251_from = build_type .. "/docs/Hot_Keys.txt"}, {"Docs/cp1251/Hot_Keys.txt", "$(VAR_DATA)/$(build_type)/docs/HOT_KEYS.WIN.TXT", cp1251_from = build_type .. "/docs/Hot_Keys.txt"},
{"Docs/cp1251/Install.txt", "$(VAR_DATA)/$(build_type)/docs/INSTALL.WIN.TXT", cp1251_from = build_type .. "/docs/Install.txt"}, {"Docs/cp1251/Install.txt", "$(VAR_DATA)/$(build_type)/docs/INSTALL.WIN.TXT", cp1251_from = build_type .. "/docs/Install.txt"},
{"Docs/cp1251/credits.txt", "$(VAR_DATA)/$(build_type)/docs/CREDITS.WIN.TXT", cp1251_from = build_type .. "/docs/Credits.txt"}, {"Docs/cp1251/credits.txt", "$(VAR_DATA)/$(build_type)/docs/CREDITS.WIN.TXT", cp1251_from = build_type .. "/docs/Credits.txt"},
{"Docs/cp1251/SysFuncr.txt", "$(VAR_DATA)/$(build_type)/docs/SYSFUNCR.WIN.TXT", cp1251_from = SRC_PROGS .. "/system/docpack/trunk/SysFuncr.txt"}, {"Docs/cp1251/SysFuncr.txt", "$(VAR_DATA)/$(build_type)/docs/SYSFUNCR.WIN.TXT", cp1251_from = SRC_PROGS .. "/system/docpack/SysFuncr.txt"},
{"HD_Load/9x2klbr/", SRC_PROGS .. "/hd_load/9x2klbr/readme_dos.txt"}, {"HD_Load/9x2klbr/", SRC_PROGS .. "/hd_load/9x2klbr/readme_dos.txt"},
{"HD_Load/9x2klbr/", SRC_PROGS .. "/hd_load/9x2klbr/readme_win.txt"}, {"HD_Load/9x2klbr/", SRC_PROGS .. "/hd_load/9x2klbr/readme_win.txt"},
{"HD_Load/mtldr/", SRC_PROGS .. "/hd_load/mtldr/install.txt"}, {"HD_Load/mtldr/", SRC_PROGS .. "/hd_load/mtldr/install.txt"},
@@ -348,7 +346,7 @@ if build_type == "ru_RU" then tup.append_table(extra_files, {
{"Docs/Hot_Keys.txt", build_type .. "/docs/Hot_Keys.txt"}, {"Docs/Hot_Keys.txt", build_type .. "/docs/Hot_Keys.txt"},
{"Docs/Install.txt", build_type .. "/docs/Install.txt"}, {"Docs/Install.txt", build_type .. "/docs/Install.txt"},
{"Docs/Credits.txt", build_type .. "/docs/Credits.txt"}, {"Docs/Credits.txt", build_type .. "/docs/Credits.txt"},
{"Docs/SysFuncs.txt", VAR_PROGS .. "/system/docpack/trunk/SysFuncs.txt"}, {"Docs/SysFuncs.txt", VAR_PROGS .. "/system/docpack/SysFuncs.txt"},
{"HD_Load/9x2klbr/", SRC_PROGS .. "/hd_load/9x2klbr/readme.txt"}, {"HD_Load/9x2klbr/", SRC_PROGS .. "/hd_load/9x2klbr/readme.txt"},
{"HD_Load/mtldr/install.txt", SRC_PROGS .. "/hd_load/mtldr/install_eng.txt"}, {"HD_Load/mtldr/install.txt", SRC_PROGS .. "/hd_load/mtldr/install_eng.txt"},
{"HD_Load/USB_Boot/readme.txt", SRC_PROGS .. "/hd_load/usb_boot/readme_eng.txt"}, {"HD_Load/USB_Boot/readme.txt", SRC_PROGS .. "/hd_load/usb_boot/readme_eng.txt"},
@@ -399,10 +397,10 @@ tup.append_table(iso_extra_files, {
if tup.getconfig('NO_FASM') ~= 'full' then if tup.getconfig('NO_FASM') ~= 'full' then
tup.append_table(img_files, { tup.append_table(img_files, {
{"KERNEL.MNT", VAR_PROGS .. "/../kernel/trunk/kernel.mnt"}, {"KERNEL.MNT", VAR_PROGS .. "/../kernel/trunk/kernel.mnt"},
{"@DOCKY", VAR_PROGS .. "/system/docky/trunk/docky"}, {"@DOCKY", VAR_PROGS .. "/system/docky/docky"},
{"@HA", VAR_PROGS .. "/other/ha/HA"}, {"@HA", VAR_PROGS .. "/other/ha/HA"},
{"@ICON", VAR_PROGS .. "/system/icon_new/icon"}, {"@ICON", VAR_PROGS .. "/system/icon_new/icon"},
{"@MENU", VAR_PROGS .. "/system/menu/trunk/menu"}, {"@MENU", VAR_PROGS .. "/system/menu/menu"},
{"@NOTIFY", VAR_PROGS .. "/system/notify3/notify"}, {"@NOTIFY", VAR_PROGS .. "/system/notify3/notify"},
{"@OPEN", VAR_PROGS .. "/system/open/open"}, {"@OPEN", VAR_PROGS .. "/system/open/open"},
{"@TASKBAR", VAR_PROGS .. "/system/taskbar/trunk/TASKBAR"}, {"@TASKBAR", VAR_PROGS .. "/system/taskbar/trunk/TASKBAR"},
@@ -411,32 +409,33 @@ tup.append_table(img_files, {
{"HACONFIG", VAR_PROGS .. "/other/ha/HACONFIG"}, {"HACONFIG", VAR_PROGS .. "/other/ha/HACONFIG"},
{"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"}, {"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"},
{"APM", VAR_PROGS .. "/system/apm/apm"}, {"APM", VAR_PROGS .. "/system/apm/apm"},
{"CALC", VAR_PROGS .. "/other/calc/trunk/calc"}, {"CALC", VAR_PROGS .. "/other/calc/calc"},
{"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/calendar"}, {"CALCPLUS", VAR_PROGS .. "/other/calcplus/calcplus"},
{"CALENDAR", VAR_PROGS .. "/system/calendar/calendar"},
{"COLRDIAL", VAR_PROGS .. "/system/colrdial/color_dialog"}, {"COLRDIAL", VAR_PROGS .. "/system/colrdial/color_dialog"},
{"CROPFLAT", VAR_PROGS .. "/system/cropflat/cropflat"}, {"CROPFLAT", VAR_PROGS .. "/system/cropflat/cropflat"},
{"CPU", VAR_PROGS .. "/system/cpu/trunk/cpu"}, {"CPU", VAR_PROGS .. "/system/cpu/cpu"},
{"CPUID", VAR_PROGS .. "/testing/cpuid/trunk/CPUID"}, {"CPUID", VAR_PROGS .. "/testing/cpuid/trunk/CPUID"},
{"DOCPACK", VAR_PROGS .. "/system/docpack/trunk/docpack"}, {"DOCPACK", VAR_PROGS .. "/system/docpack/docpack"},
{"DEFAULT.SKN", VAR_SKINS .. "/../skins/Leency/Shkvorka/Shkvorka.skn"}, {"DEFAULT.SKN", VAR_SKINS .. "/../skins/Leency/Shkvorka/Shkvorka.skn"},
{"DISPTEST", VAR_PROGS .. "/testing/disptest/trunk/disptest"}, {"DISPTEST", VAR_PROGS .. "/testing/disptest/trunk/disptest"},
{"END", VAR_PROGS .. "/system/end/light/end"}, {"END", VAR_PROGS .. "/system/end/light/end"},
{"ESKIN", VAR_PROGS .. "/system/eskin/trunk/eskin"}, {"ESKIN", VAR_PROGS .. "/system/eskin/eskin"},
{"FSPEED", VAR_PROGS .. "/testing/fspeed/fspeed"}, {"FSPEED", VAR_PROGS .. "/testing/fspeed/fspeed"},
{"GMON", VAR_PROGS .. "/system/gmon/gmon"}, {"GMON", VAR_PROGS .. "/system/gmon/gmon"},
{"HDD_INFO", VAR_PROGS .. "/system/hdd_info/trunk/hdd_info"}, {"HDD_INFO", VAR_PROGS .. "/system/hdd_info/hdd_info"},
{"KBD", VAR_PROGS .. "/testing/kbd/trunk/kbd"}, {"KBD", VAR_PROGS .. "/testing/kbd/trunk/kbd"},
{"KPACK", VAR_PROGS .. "/other/kpack/trunk/kpack"}, {"KPACK", VAR_PROGS .. "/other/kpack/trunk/kpack"},
{"LAUNCHER", VAR_PROGS .. "/system/launcher/trunk/launcher"}, {"LAUNCHER", VAR_PROGS .. "/system/launcher/launcher"},
{"LOADDRV", VAR_PROGS .. "/system/loaddrv/loaddrv"}, {"LOADDRV", VAR_PROGS .. "/system/loaddrv/loaddrv"},
{"MAGNIFY", VAR_PROGS .. "/demos/magnify/trunk/magnify"}, {"MAGNIFY", VAR_PROGS .. "/system/magnify/magnify"},
{"MGB", VAR_PROGS .. "/testing/mgb/trunk/mgb"}, {"MGB", VAR_PROGS .. "/testing/mgb/trunk/mgb"},
{"MOUSEMUL", VAR_PROGS .. "/system/mousemul/trunk/mousemul"}, {"MOUSEMUL", VAR_PROGS .. "/system/mousemul/mousemul"},
{"MADMOUSE", VAR_PROGS .. "/other/madmouse/madmouse"}, {"MADMOUSE", VAR_PROGS .. "/other/madmouse/madmouse"},
{"MYKEY", VAR_PROGS .. "/system/MyKey/trunk/MyKey"}, {"MYKEY", VAR_PROGS .. "/system/MyKey/MyKey"},
{"PCIDEV", VAR_PROGS .. "/testing/pcidev/trunk/PCIDEV"}, {"PCIDEV", VAR_PROGS .. "/testing/pcidev/trunk/PCIDEV"},
{"RDSAVE", VAR_PROGS .. "/system/rdsave/trunk/rdsave"}, {"RDSAVE", VAR_PROGS .. "/system/rdsave/rdsave"},
{"RTFREAD", VAR_PROGS .. "/other/rtfread/trunk/rtfread"}, {"RTFREAD", VAR_PROGS .. "/other/rtfread/rtfread"},
{"SEARCHAP", VAR_PROGS .. "/system/searchap/searchap"}, {"SEARCHAP", VAR_PROGS .. "/system/searchap/searchap"},
{"SCRSHOOT", VAR_PROGS .. "/media/scrshoot/scrshoot"}, {"SCRSHOOT", VAR_PROGS .. "/media/scrshoot/scrshoot"},
{"SETUP", VAR_PROGS .. "/system/setup/trunk/setup"}, {"SETUP", VAR_PROGS .. "/system/setup/trunk/setup"},
@@ -468,7 +467,7 @@ tup.append_table(img_files, {
{"DEMOS/UNVWATER", VAR_PROGS .. "/demos/unvwater/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/board"},
{"DEVELOP/DBGBOARD", VAR_PROGS .. "/system/dbgboard/dbgboard"}, {"DEVELOP/DBGBOARD", VAR_PROGS .. "/system/dbgboard/dbgboard"},
{"DEVELOP/CEDIT", SRC_PROGS .. "/develop/cedit/CEDIT"}, {"DEVELOP/CEDIT", SRC_PROGS .. "/develop/cedit/CEDIT"},
{"DEVELOP/CHARSETS", VAR_PROGS .. "/develop/charsets/charsets"}, {"DEVELOP/CHARSETS", VAR_PROGS .. "/develop/charsets/charsets"},
@@ -524,10 +523,10 @@ tup.append_table(img_files, {
{"LIB/RASTERWORKS.OBJ", VAR_PROGS .. "/develop/libraries/fontRasterWorks_unicode/RasterWorks.obj"}, {"LIB/RASTERWORKS.OBJ", VAR_PROGS .. "/develop/libraries/fontRasterWorks_unicode/RasterWorks.obj"},
{"LIB/SORT.OBJ", VAR_PROGS .. "/develop/libraries/sorter/sort.obj"}, {"LIB/SORT.OBJ", VAR_PROGS .. "/develop/libraries/sorter/sort.obj"},
{"LIB/TINYGL.OBJ", VAR_PROGS .. "/develop/libraries/TinyGL/asm_fork/tinygl.obj"}, {"LIB/TINYGL.OBJ", VAR_PROGS .. "/develop/libraries/TinyGL/asm_fork/tinygl.obj"},
{"MEDIA/ANIMAGE", VAR_PROGS .. "/media/animage/trunk/animage"}, {"MEDIA/ANIMAGE", VAR_PROGS .. "/media/animage/animage"},
{"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"}, {"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"},
{"MEDIA/KIV", VAR_PROGS .. "/media/kiv/trunk/kiv"}, {"MEDIA/KIV", VAR_PROGS .. "/media/kiv/kiv"},
{"MEDIA/LISTPLAY", VAR_PROGS .. "/media/listplay/trunk/listplay"}, {"MEDIA/LISTPLAY", VAR_PROGS .. "/media/listplay/listplay"},
{"MEDIA/MIDAMP", VAR_PROGS .. "/media/midamp/trunk/midamp"}, {"MEDIA/MIDAMP", VAR_PROGS .. "/media/midamp/trunk/midamp"},
{"MEDIA/MP3INFO", VAR_PROGS .. "/media/mp3info/mp3info"}, {"MEDIA/MP3INFO", VAR_PROGS .. "/media/mp3info/mp3info"},
{"MEDIA/PALITRA", VAR_PROGS .. "/media/palitra/trunk/palitra"}, {"MEDIA/PALITRA", VAR_PROGS .. "/media/palitra/trunk/palitra"},
@@ -605,6 +604,7 @@ tup.append_table(extra_files, {
{"kolibrios/3D/voxel_utilites/VOX_CREATOR" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_creator"}, {"kolibrios/3D/voxel_utilites/VOX_CREATOR" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_creator"},
{"kolibrios/3D/voxel_utilites/VOX_MOVER" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_mover"}, {"kolibrios/3D/voxel_utilites/VOX_MOVER" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_mover"},
{"kolibrios/3D/voxel_utilites/VOX_TGL" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_tgl"}, {"kolibrios/3D/voxel_utilites/VOX_TGL" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_tgl"},
{"kolibrios/demos/flag", VAR_PROGS .. "/demos/flag/flag"},
{"kolibrios/demos/life3", VAR_PROGS .. "/games/life3/life3"}, {"kolibrios/demos/life3", VAR_PROGS .. "/games/life3/life3"},
{"kolibrios/demos/qjulia", VAR_PROGS .. "/demos/qjulia/trunk/qjulia"}, {"kolibrios/demos/qjulia", VAR_PROGS .. "/demos/qjulia/trunk/qjulia"},
{"kolibrios/develop/koldbg", VAR_PROGS .. "/develop/koldbg/koldbg"}, {"kolibrios/develop/koldbg", VAR_PROGS .. "/develop/koldbg/koldbg"},
@@ -628,7 +628,6 @@ tup.append_table(extra_files, {
{"kolibrios/media/zsea/plugins/rotate.obj", VAR_PROGS .. "/media/zsea/plugins/rotate/rotate.obj"}, {"kolibrios/media/zsea/plugins/rotate.obj", VAR_PROGS .. "/media/zsea/plugins/rotate/rotate.obj"},
{"kolibrios/media/zsea/plugins/scaling.obj", VAR_PROGS .. "/media/zsea/plugins/scaling/scaling.obj"}, {"kolibrios/media/zsea/plugins/scaling.obj", VAR_PROGS .. "/media/zsea/plugins/scaling/scaling.obj"},
{"kolibrios/utils/AMDtemp", VAR_PROGS .. "/system/amd_temp_view/AMDtemp"}, {"kolibrios/utils/AMDtemp", VAR_PROGS .. "/system/amd_temp_view/AMDtemp"},
{"kolibrios/utils/calcplus", VAR_PROGS .. "/other/calcplus/calcplus"},
{"kolibrios/utils/kfm/kfm", VAR_PROGS .. "/fs/kfm/trunk/kfm"}, {"kolibrios/utils/kfm/kfm", VAR_PROGS .. "/fs/kfm/trunk/kfm"},
{"kolibrios/utils/tedit/t_edit", VAR_PROGS .. "/other/t_edit/t_edit"}, {"kolibrios/utils/tedit/t_edit", VAR_PROGS .. "/other/t_edit/t_edit"},
{"kolibrios/3D/blocks/block.bin", VAR_PROGS .. "/bcc32/games/blocks/block.bin"} {"kolibrios/3D/blocks/block.bin", VAR_PROGS .. "/bcc32/games/blocks/block.bin"}
@@ -642,7 +641,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
}) end }) end
if build_type == "ru_RU" then tup.append_table(extra_files, { if build_type == "ru_RU" then tup.append_table(extra_files, {
{"kolibrios/utils/period", VAR_PROGS .. "/other/period/trunk/period"}, {"kolibrios/utils/period", VAR_PROGS .. "/other/period/period"},
{"kolibrios/games/Dungeons/Dungeons", VAR_PROGS .. "/games/Dungeons/Dungeons"}, {"kolibrios/games/Dungeons/Dungeons", VAR_PROGS .. "/games/Dungeons/Dungeons"},
}) end }) end
@@ -753,7 +752,7 @@ tup.append_table(img_files, {
tup.append_table(extra_files, { tup.append_table(extra_files, {
-- {"kolibrios/3D/cubeline", VAR_PROGS .. "/demos/cubeline/trunk/cubeline"}, -- {"kolibrios/3D/cubeline", VAR_PROGS .. "/demos/cubeline/trunk/cubeline"},
{"kolibrios/3D/gears", VAR_PROGS .. "/demos/gears/gears"}, {"kolibrios/3D/gears", VAR_PROGS .. "/demos/gears/gears"},
{"kolibrios/emul/e80/e80", VAR_PROGS .. "/emulator/e80/trunk/e80"}, {"kolibrios/emul/e80/e80", VAR_PROGS .. "/emulator/e80/e80"},
{"kolibrios/emul/uarm/", VAR_CONTRIB .. "/other/uarm/uARM"}, {"kolibrios/emul/uarm/", VAR_CONTRIB .. "/other/uarm/uARM"},
{"kolibrios/games/2048", VAR_PROGS .. "/games/2048/2048"}, {"kolibrios/games/2048", VAR_PROGS .. "/games/2048/2048"},
{"kolibrios/games/checkers", VAR_PROGS .. "/games/checkers/checkers"}, {"kolibrios/games/checkers", VAR_PROGS .. "/games/checkers/checkers"},

View File

@@ -29,7 +29,6 @@ Dicty=/k/utils/DICTY.KEX,79
fNav=/k/utils/fNav/fNav,93 fNav=/k/utils/fNav/fNav,93
CncEditor=/k/utils/cnc_editor/cnc_editor,15 CncEditor=/k/utils/cnc_editor/cnc_editor,15
Life=/k/demos/life2,13 Life=/k/demos/life2,13
Calc+=/k/utils/calcplus,4
TinyBasic=/k/develop/TinyBasic/TinyBasic,91 TinyBasic=/k/develop/TinyBasic/TinyBasic,91
THashView=/k/utils/thashview,124 THashView=/k/utils/thashview,124
Notes=/k/utils/notes,117 Notes=/k/utils/notes,117

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -92,6 +92,7 @@
59 Screen keyboard |zkey 59 Screen keyboard |zkey
#10 **** DATA PROCESSING #10 **** DATA PROCESSING
16 Calculator |calc 16 Calculator |calc
16 Calculator+ |calcplus
03 Tinypad |tinypad 03 Tinypad |tinypad
28 CodeEdit |develop/cedit 28 CodeEdit |develop/cedit
21 Table processor |table 21 Table processor |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -96,6 +96,7 @@
24 NDN * |/kolibrios/utils/ndn/ndn 24 NDN * |/kolibrios/utils/ndn/ndn
#11 **** PROCESO DE DATOS #11 **** PROCESO DE DATOS
16 Calculadora |calc 16 Calculadora |calc
16 Calculadora+ |calcplus
16 Tinypad |tinypad 16 Tinypad |tinypad
16 CodeEdit |develop/cedit 16 CodeEdit |develop/cedit
16 Procesador de tablas |table 16 Procesador de tablas |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -80,6 +80,7 @@
65 NDN * |/kolibrios/utils/ndn/ndn 65 NDN * |/kolibrios/utils/ndn/ndn
#11 **** DATA PROCESSING **** #11 **** DATA PROCESSING ****
16 Kalkulaator |calc 16 Kalkulaator |calc
16 Kalkulaator+ |calcplus
16 Teksti redaktor |tinypad 16 Teksti redaktor |tinypad
16 CodeEdit |develop/cedit 16 CodeEdit |develop/cedit
16 Tabelarvutus |table 16 Tabelarvutus |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -79,6 +79,7 @@
65 NDN * |/kolibrios/utils/ndn/ndn 65 NDN * |/kolibrios/utils/ndn/ndn
#11 **** DATA PROCESSING #11 **** DATA PROCESSING
16 Calcolatrice |calc 16 Calcolatrice |calc
16 Calcolatrice+ |calcplus
16 Tinypad |tinypad 16 Tinypad |tinypad
16 CodeEdit |develop/cedit 16 CodeEdit |develop/cedit
16 Table Processor |table 16 Table Processor |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -90,6 +90,7 @@
59 <20><><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |zkey 59 <20><><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |zkey
#10 **** <20><><EFBFBD><EFBFBD> #10 **** <20><><EFBFBD><EFBFBD>
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |calc 16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |calc
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+ |calcplus
03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tinypad |tinypad 03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tinypad |tinypad
28 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeEdit |develop/cedit 28 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeEdit |develop/cedit
21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |table 21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |table
@@ -119,7 +120,7 @@
45 <20><><EFBFBD><EFBFBD><20><><EFBFBD><E0A8AD><EFBFBD><EFBFBD><EFBFBD> |easyshot 45 <20><><EFBFBD><EFBFBD><20><><EFBFBD><E0A8AD><EFBFBD><EFBFBD><EFBFBD> |easyshot
29 FB2 <20><><EFBFBD><E2A0AB> |fb2read 29 FB2 <20><><EFBFBD><E2A0AB> |fb2read
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> |aclock 16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> |aclock
21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |period 21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |/kolibrios/utils/period
59 <20><EFBFBD><E0A5AD><EFBFBD><EFBFBD> KJ|ABuIIIA |games/klavisha 59 <20><EFBFBD><E0A5AD><EFBFBD><EFBFBD> KJ|ABuIIIA |games/klavisha
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> |demos/bcdclk 16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> |demos/bcdclk
53 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |timer 53 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |timer

View File

@@ -668,6 +668,8 @@ socket_accept:
DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_accept: socknum=%u sockaddr=%x length=%u\n", ecx, edx, esi DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_accept: socknum=%u sockaddr=%x length=%u\n", ecx, edx, esi
push edx esi
call socket_num_to_ptr call socket_num_to_ptr
test eax, eax test eax, eax
jz .invalid jz .invalid
@@ -696,6 +698,24 @@ socket_accept:
mov ebx, [ebx + APPDATA.tid] mov ebx, [ebx + APPDATA.tid]
mov [eax + SOCKET.TID], ebx mov [eax + SOCKET.TID], ebx
pop esi edx
test edx, edx
jz .skip_sockaddr
mov word[edx], 0 ; unknown domain
cmp esi, 8 ; domain + port + ipv4
jb .skip_sockaddr
mov word[edx], AF_INET4
mov esi, edx
mov edx, [eax + IP_SOCKET.RemoteIP]
mov [esi + sockaddr.ip], edx
mov dx, [eax + TCP_SOCKET.RemotePort]
mov [esi + sockaddr.port], dx
.skip_sockaddr:
; Return socket number to caller ; Return socket number to caller
mov eax, [eax + SOCKET.Number] mov eax, [eax + SOCKET.Number]
mov [esp + SYSCALL_STACK.eax], eax mov [esp + SYSCALL_STACK.eax], eax
@@ -711,16 +731,19 @@ socket_accept:
.wouldblock: .wouldblock:
mov dword[esp + SYSCALL_STACK.ebx], EWOULDBLOCK mov dword[esp + SYSCALL_STACK.ebx], EWOULDBLOCK
mov dword[esp + SYSCALL_STACK.eax], -1 mov dword[esp + SYSCALL_STACK.eax], -1
pop esi edx
ret ret
.invalid: .invalid:
mov dword[esp + SYSCALL_STACK.ebx], EINVAL mov dword[esp + SYSCALL_STACK.ebx], EINVAL
mov dword[esp + SYSCALL_STACK.eax], -1 mov dword[esp + SYSCALL_STACK.eax], -1
pop esi edx
ret ret
.notsupp: .notsupp:
mov dword[esp + SYSCALL_STACK.ebx], EOPNOTSUPP mov dword[esp + SYSCALL_STACK.ebx], EOPNOTSUPP
mov dword[esp + SYSCALL_STACK.eax], -1 mov dword[esp + SYSCALL_STACK.eax], -1
pop esi edx
ret ret
;-----------------------------------------------------------------; ;-----------------------------------------------------------------;

View File

@@ -692,6 +692,15 @@ struct TinyGLContext
long int dx, dy, x, y; long int dx, dy, x, y;
}; };
struct GLUquadricObj
{
GLenum DrawStyle; // GLU_FILL, LINE, SILHOUETTE, or POINT
GLenum Orientation; // GLU_INSIDE or GLU_OUTSIDE
GLboolean TextureFlag; // Generate texture coords?
GLenum Normals; // GLU_NONE, GLU_FLAT, or GLU_SMOOTH
void (__stdcall* ErrorFunc)(GLenum err); // Error handler callback function
};
// //
// tinygl - import table // tinygl - import table
// //
@@ -748,7 +757,7 @@ void (__stdcall* glEdgeFlag)(int flag) = (void (__stdcall*)(int))&"glEdgeFlag";
void (__stdcall* glMatrixMode)(int mode) = (void (__stdcall*)(int))&"glMatrixMode"; void (__stdcall* glMatrixMode)(int mode) = (void (__stdcall*)(int))&"glMatrixMode";
void (__stdcall* glLoadMatrixf)(const float* m) = (void (__stdcall*)(const float*))&"glLoadMatrixf"; void (__stdcall* glLoadMatrixf)(const float* m) = (void (__stdcall*)(const float*))&"glLoadMatrixf";
void (__stdcall* glLoadIdentity)() = (void (__stdcall*)())&"glLoadIdentity"; void (__stdcall* glLoadIdentity)() = (void (__stdcall*)())&"glLoadIdentity";
//void (__stdcall* glMultMatrixf)(...) = (void (__stdcall*)(...))&"glMultMatrixf"; void (__stdcall* glMultMatrixf)(const GLfloat *m) = (void (__stdcall*)(const GLfloat*))&"glMultMatrixf";
void (__stdcall* glPushMatrix)() = (void (__stdcall*)())&"glPushMatrix"; void (__stdcall* glPushMatrix)() = (void (__stdcall*)())&"glPushMatrix";
void (__stdcall* glPopMatrix)() = (void (__stdcall*)())&"glPopMatrix"; void (__stdcall* glPopMatrix)() = (void (__stdcall*)())&"glPopMatrix";
void (__stdcall* glRotatef)(float angle, float x, float y, float z) = (void (__stdcall*)(float, float, float, float))&"glRotatef"; void (__stdcall* glRotatef)(float angle, float x, float y, float z) = (void (__stdcall*)(float, float, float, float))&"glRotatef";
@@ -763,7 +772,7 @@ void (__stdcall* glEndList)() = (void (__stdcall*)())&"glEndList";
void (__stdcall* glCallList)(unsigned int list) = (void (__stdcall*)(unsigned int))&"glCallList"; void (__stdcall* glCallList)(unsigned int list) = (void (__stdcall*)(unsigned int))&"glCallList";
void (__stdcall* glClear)(int mask) = (void (__stdcall*)(int))&"glClear"; void (__stdcall* glClear)(int mask) = (void (__stdcall*)(int))&"glClear";
void (__stdcall* glClearColor)(float r, float g, float b, float a) = (void (__stdcall*)(float, float, float, float))&"glClearColor"; void (__stdcall* glClearColor)(float r, float g, float b, float a) = (void (__stdcall*)(float, float, float, float))&"glClearColor";
//void (__stdcall* glClearDepth)(...) = (void (__stdcall*)(...))&"glClearDepth"; void (__stdcall* glClearDepth)(double depth) = (void (__stdcall*)(double))&"glClearDepth";
void (__stdcall* glRenderMode)(int mode) = (void (__stdcall*)(int))&"glRenderMode"; void (__stdcall* glRenderMode)(int mode) = (void (__stdcall*)(int))&"glRenderMode";
//void (__stdcall* glSelectBuffer)(...) = (void (__stdcall*)(...))&"glSelectBuffer"; //void (__stdcall* glSelectBuffer)(...) = (void (__stdcall*)(...))&"glSelectBuffer";
//void (__stdcall* glInitNames)(...) = (void (__stdcall*)(...))&"glInitNames"; //void (__stdcall* glInitNames)(...) = (void (__stdcall*)(...))&"glInitNames";
@@ -799,18 +808,22 @@ void (__stdcall* glColorPointer)(GLint size, GLenum type, GLsizei stride, const
void (__stdcall* glNormalPointer)(GLenum type, GLsizei stride, const GLvoid* pointer) = (void (__stdcall*)(GLenum, GLsizei, const GLvoid*))&"glNormalPointer"; void (__stdcall* glNormalPointer)(GLenum type, GLsizei stride, const GLvoid* pointer) = (void (__stdcall*)(GLenum, GLsizei, const GLvoid*))&"glNormalPointer";
void (__stdcall* glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) = (void (__stdcall*)(GLint, GLenum, GLsizei, const GLvoid*))&"glTexCoordPointer"; void (__stdcall* glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) = (void (__stdcall*)(GLint, GLenum, GLsizei, const GLvoid*))&"glTexCoordPointer";
//void (__stdcall* glPolygonOffset)(...) = (void (__stdcall*)(...))&"glPolygonOffset"; //void (__stdcall* glPolygonOffset)(...) = (void (__stdcall*)(...))&"glPolygonOffset";
//void (__stdcall* glOrtho)(...) = (void (__stdcall*)(...))&"glOrtho"; void (__stdcall* glOrtho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) = (void (__stdcall*)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble))&"glOrtho";
//void (__stdcall* glDebug)(...) = (void (__stdcall*)(...))&"glDebug"; //void (__stdcall* glDebug)(...) = (void (__stdcall*)(...))&"glDebug";
//void (__stdcall* glInit)(...) = (void (__stdcall*)(...))&"glInit"; //void (__stdcall* glInit)(...) = (void (__stdcall*)(...))&"glInit";
//void (__stdcall* glClose)(...) = (void (__stdcall*)(...))&"glClose"; //void (__stdcall* glClose)(...) = (void (__stdcall*)(...))&"glClose";
//void (__stdcall* gluPerspective)(...) = (void (__stdcall*)(...))&"gluPerspective"; void (__stdcall* gluPerspective)(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) = (void (__stdcall*)(GLdouble, GLdouble, GLdouble, GLdouble))&"gluPerspective";
//void (__stdcall* gluNewQuadric)(...) = (void (__stdcall*)(...))&"gluNewQuadric"; GLUquadricObj* (__stdcall* gluNewQuadric)() = (GLUquadricObj* (__stdcall*)())&"gluNewQuadric";
//void (__stdcall* gluDeleteQuadric)(...) = (void (__stdcall*)(...))&"gluDeleteQuadric"; void (__stdcall* gluDeleteQuadric)(GLUquadricObj *state) = (void (__stdcall*)(GLUquadricObj*))&"gluDeleteQuadric";
//void (__stdcall* gluQuadricDrawStyle)(...) = (void (__stdcall*)(...))&"gluQuadricDrawStyle"; void (__stdcall* gluQuadricDrawStyle)(GLUquadricObj *quadObject, GLenum drawStyle) = (void (__stdcall*)(GLUquadricObj*, GLenum))&"gluQuadricDrawStyle";
//void (__stdcall* gluQuadricOrientation)(...) = (void (__stdcall*)(...))&"gluQuadricOrientation"; void (__stdcall* gluQuadricOrientation)(GLUquadricObj *quadObject, GLenum orientation) = (void (__stdcall*)(GLUquadricObj*, GLenum))&"gluQuadricOrientation";
//void (__stdcall* gluQuadricTexture)(...) = (void (__stdcall*)(...))&"gluQuadricTexture"; void (__stdcall* gluQuadricTexture)(GLUquadricObj *quadObject, GLboolean textureCoords) = (void (__stdcall*)(GLUquadricObj*, GLboolean))&"gluQuadricTexture";
//void (__stdcall* gluCylinder)(...) = (void (__stdcall*)(...))&"gluCylinder"; void (__stdcall* gluCylinder)(GLUquadricObj *qobj,
//void (__stdcall* gluSphere)(...) = (void (__stdcall*)(...))&"gluSphere"; GLdouble baseRadius, GLdouble topRadius, GLdouble height, GLint slices, GLint stacks) = (void (__stdcall*)(GLUquadricObj*, GLdouble, GLdouble, GLdouble, GLint, GLint))&"gluCylinder";
void (__stdcall* gluDisk)(GLUquadricObj *qobj,
GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops) = (void (__stdcall*)(GLUquadricObj*, GLdouble, GLdouble, GLint, GLint))&"gluDisk";
void (__stdcall* gluSphere)(GLUquadricObj *qobj,
GLdouble radius, GLint slices, GLint stacks) = (void (__stdcall*)(GLUquadricObj*, GLdouble, GLint, GLint))&"gluSphere";
void (__stdcall* kosglMakeCurrent)(long l, long t, long w, long h, TinyGLContext*) = (void (__stdcall*)(long, long, long, long, TinyGLContext*))&"kosglMakeCurrent"; void (__stdcall* kosglMakeCurrent)(long l, long t, long w, long h, TinyGLContext*) = (void (__stdcall*)(long, long, long, long, TinyGLContext*))&"kosglMakeCurrent";
void (__stdcall* kosglSwapBuffers)() = (void (__stdcall*)())&"kosglSwapBuffers"; void (__stdcall* kosglSwapBuffers)() = (void (__stdcall*)())&"kosglSwapBuffers";
asm{ asm{

View File

@@ -13,12 +13,12 @@ rem
set __value= set __value=
set __res= set __res=
shift shift
:__allowed :__allowed
set __values=%1 %__values% set __values=%1 %__values%
shift shift
if not "%1"=="" goto __allowed if not "%1"=="" goto __allowed
set /P __res="> set /P __res=">
:Check_Value :Check_Value
for %%a in (%__values%) do if %%a==%__res% set __value=%__res% for %%a in (%__values%) do if %%a==%__res% set __value=%__res%
@@ -56,25 +56,25 @@ for %%i in (%BIN% %BIN%\demos %BIN%\develop %BIN%\lib %BIN%\games %BIN%\network
echo * echo *
echo Building system echo Building system
echo * echo *
fasm system\calendar\trunk\calendar.asm %BIN%\calendar fasm system\calendar\calendar.asm %BIN%\calendar
fasm system\board\trunk\board.asm %BIN%\develop\board fasm system\board\board.asm %BIN%\develop\board
fasm system\commouse\trunk\commouse.asm %BIN%\commouse fasm system\commouse\trunk\commouse.asm %BIN%\commouse
fasm system\cpu\trunk\cpu.asm %BIN%\cpu fasm system\cpu\cpu.asm %BIN%\cpu
fasm system\cpuid\trunk\cpuid.asm %BIN%\cpuid fasm system\cpuid\trunk\cpuid.asm %BIN%\cpuid
fasm system\skincfg\trunk\skincfg.asm %BIN%\skincfg fasm system\skincfg\trunk\skincfg.asm %BIN%\skincfg
fasm system\docpack\trunk\docpack.asm %BIN%\docpack fasm system\docpack\docpack.asm %BIN%\docpack
fasm system\end\trunk\end.asm %BIN%\end fasm system\end\trunk\end.asm %BIN%\end
fasm system\gmon\gmon.asm %BIN%\gmon fasm system\gmon\gmon.asm %BIN%\gmon
fasm system\icon\trunk\icon.asm %BIN%\icon fasm system\icon\icon.asm %BIN%\icon
fasm system\kbd\trunk\kbd.ASM %BIN%\kbd fasm system\kbd\trunk\kbd.ASM %BIN%\kbd
fasm system\launcher\trunk\launcher.asm %BIN%\launcher fasm system\launcher\launcher.asm %BIN%\launcher
fasm system\menu\trunk\menu.asm %BIN%\@menu fasm system\menu\menu.asm %BIN%\@menu
fasm system\mgb\trunk\mgb.asm %BIN%\mgb fasm system\mgb\trunk\mgb.asm %BIN%\mgb
fasm system\mousemul\trunk\mousemul.asm %BIN%\mousemul fasm system\mousemul\mousemul.asm %BIN%\mousemul
fasm system\PANEL\trunk\@TASKBAR.ASM %BIN%\@TASKBAR fasm system\PANEL\trunk\@TASKBAR.ASM %BIN%\@TASKBAR
fasm system\pcidev\trunk\pcidev.asm %BIN%\pcidev fasm system\pcidev\trunk\pcidev.asm %BIN%\pcidev
fasm system\RB\trunk\@RB.ASM %BIN%\@RB fasm system\RB\trunk\@RB.ASM %BIN%\@RB
fasm system\rdsave\trunk\rdsave.asm %BIN%\rdsave fasm system\rdsave\rdsave.asm %BIN%\rdsave
fasm system\run\trunk\run.asm %BIN%\run fasm system\run\trunk\run.asm %BIN%\run
fasm system\setup\trunk\setup.asm %BIN%\setup fasm system\setup\trunk\setup.asm %BIN%\setup
fasm system\skinsel\skinsel.asm %BIN%\skinsel fasm system\skinsel\skinsel.asm %BIN%\skinsel
@@ -154,16 +154,16 @@ echo *
echo Building other echo Building other
echo * echo *
rem fasm other\archer\trunk\@rcher.asm %BIN%\@rcher rem fasm other\archer\trunk\@rcher.asm %BIN%\@rcher
fasm other\calc\trunk\calc.asm %BIN%\calc fasm other\calc\calc.asm %BIN%\calc
fasm other\mhc\trunk\mhc.asm %BIN%\mhc fasm other\mhc\trunk\mhc.asm %BIN%\mhc
fasm other\period\trunk\period.asm %BIN%\period fasm other\period\period.asm %BIN%\period
fasm other\rtfread\trunk\rtfread.asm %BIN%\rtfread fasm other\rtfread\rtfread.asm %BIN%\rtfread
echo * echo *
echo Building media echo Building media
echo * echo *
rem media\ac97snd\trunk\ac97snd.asm ac97snd rem media\ac97snd\trunk\ac97snd.asm ac97snd
fasm media\animage\trunk\animage.asm %BIN%\animage fasm media\animage\animage.asm %BIN%\animage
fasm media\cdp\trunk\cdp.asm %BIN%\cdp fasm media\cdp\trunk\cdp.asm %BIN%\cdp
fasm media\gifview\trunk\gifview.asm %BIN%\gifview fasm media\gifview\trunk\gifview.asm %BIN%\gifview
fasm media\iconedit\trunk\iconedit.asm %BIN%\iconedit fasm media\iconedit\trunk\iconedit.asm %BIN%\iconedit
@@ -231,38 +231,38 @@ echo *
echo Building depend application for fdd's nightbuild echo Building depend application for fdd's nightbuild
echo * echo *
echo __nightbuild fix yes >> config.inc echo __nightbuild fix yes >> config.inc
fasm media\kiv\trunk\kiv.asm %BIN%\nightbuild\kiv fasm media\kiv\kiv.asm %BIN%\nightbuild\kiv
fasm media\scrshoot\scrshoot.asm %BIN%\nightbuild\scrshoot fasm media\scrshoot\scrshoot.asm %BIN%\nightbuild\scrshoot
fasm media\animage\trunk\animage.asm %BIN%\nightbuild\animage fasm media\animage\animage.asm %BIN%\nightbuild\animage
fasm media\midamp\trunk\midamp.asm %BIN%\nightbuild\midamp fasm media\midamp\trunk\midamp.asm %BIN%\nightbuild\midamp
fasm develop\heed\trunk\heed.asm %BIN%\nightbuild\heed fasm develop\heed\trunk\heed.asm %BIN%\nightbuild\heed
fasm develop\tinypad\trunk\tinypad.asm %BIN%\nightbuild\tinypad fasm develop\tinypad\trunk\tinypad.asm %BIN%\nightbuild\tinypad
fasm system\skincfg\trunk\skincfg.asm %BIN%\nightbuild\skincfg fasm system\skincfg\trunk\skincfg.asm %BIN%\nightbuild\skincfg
fasm system\hdd_info\trunk\hdd_info.asm %BIN%\nightbuild\hdd_info fasm system\hdd_info\hdd_info.asm %BIN%\nightbuild\hdd_info
fasm system\mgb\trunk\mgb.asm %BIN%\nightbuild\mgb fasm system\mgb\trunk\mgb.asm %BIN%\nightbuild\mgb
fasm system\rdsave\trunk\rdsave.asm %BIN%\nightbuild\rdsave fasm system\rdsave\rdsave.asm %BIN%\nightbuild\rdsave
fasm other\kpack\trunk\kpack.asm %BIN%\nightbuild\kpack fasm other\kpack\trunk\kpack.asm %BIN%\nightbuild\kpack
fasm other\rtfread\trunk\rtfread.asm %BIN%\nightbuild\rtfread fasm other\rtfread\rtfread.asm %BIN%\nightbuild\rtfread
;restore ;restore
echo __CPU_type fix %res% > config.inc echo __CPU_type fix %res% > config.inc
erase lang.inc erase lang.inc
echo * echo *
echo Finished building echo Finished building
echo * echo *
kpack /nologo 2> nul kpack /nologo 2> nul
if "%errorlevel%"=="9009" ( if "%errorlevel%"=="9009" (
echo *** NOTICE *** echo *** NOTICE ***
echo If you want to pack all applications you may echo If you want to pack all applications you may
echo place "kpack" in accessible directory. echo place "kpack" in accessible directory.
echo You can download that tool from http://diamondz.land.ru/ echo You can download that tool from http://diamondz.land.ru/
goto END goto END
) )
echo Kpack KolibriOS apps? echo Kpack KolibriOS apps?
echo echo
set /P res=[y/n]? set /P res=[y/n]?
@@ -273,7 +273,7 @@ echo Compressing system
echo * echo *
kpack %BIN%\calendar kpack %BIN%\calendar
kpack %BIN%\develop\board kpack %BIN%\develop\board
kpack %BIN%\cpu kpack %BIN%\cpu
kpack %BIN%\cpuid kpack %BIN%\cpuid
kpack %BIN%\skincfg kpack %BIN%\skincfg
kpack %BIN%\docpack kpack %BIN%\docpack

View File

@@ -85,6 +85,7 @@ struct TWebBrowser {
void tag_table(); void tag_table();
void tag_td(); void tag_td();
void tag_tr(); void tag_tr();
void reset_font_style();
}; };
#include "TWB\render.h" #include "TWB\render.h"
@@ -94,16 +95,16 @@ void TWebBrowser::SetPageDefaults()
{ {
t_html = t_body = link = false; t_html = t_body = link = false;
style.reset(); style.reset();
reset_font_style();
link_color_default = 0x0000FF; link_color_default = 0x0000FF;
link_color_active = 0xFF0000; link_color_active = 0xFF0000;
style.cur_line_h = list.item_h;
links.clear(); links.clear();
anchors.clear(); anchors.clear();
img_url.drop(); img_url.drop();
text_colors.drop(); text_colors.drop();
text_colors.add(0); text_colors.add(0);
if (secondrun) { if (secondrun) {
canvas.Init(list.x, list.y, list.w, math.max(list.visible, list.count)); canvas.Init(list.x, list.y, list.w, math.max(list.visible, list.count)+200);
canvas.Fill(0, bg_colors.get(0)); canvas.Fill(0, bg_colors.get(0));
} }
bg_colors.drop(); bg_colors.drop();
@@ -114,7 +115,6 @@ void TWebBrowser::SetPageDefaults()
draw_w = list.w - BODY_MARGIN - BODY_MARGIN; draw_w = list.w - BODY_MARGIN - BODY_MARGIN;
linebuf = 0; linebuf = 0;
redirect = '\0'; redirect = '\0';
list.SetFont(8, 14, 10011000b);
tag_table_reset(); tag_table_reset();
is_html = true; is_html = true;
if (!strstri(bufpointer, "<body")) { if (!strstri(bufpointer, "<body")) {

View File

@@ -49,14 +49,14 @@ void TWebBrowser::RenderLine(dword _line)
pc = text_colors.get_last(); pc = text_colors.get_last();
if (link) && (pc == text_colors.get(0)) pc = link_color_default; if (link) && (pc == text_colors.get(0)) pc = link_color_default;
canvas.WriteText(draw_x, draw_y, list.font_type, pc, _line, NULL); canvas.WriteText(draw_x, draw_y+1, list.font_type, pc, _line, NULL);
if (style.b) canvas.WriteText(draw_x+1, draw_y, list.font_type, pc, _line, NULL); if (style.b) canvas.WriteText(draw_x+1, draw_y+1, list.font_type, pc, _line, NULL);
if (style.s) canvas.DrawBar(draw_x, list.item_h / 2 - zoom + draw_y, pw, zoom, pc); if (style.s) canvas.DrawBar(draw_x, list.item_h / 2 - zoom + draw_y, pw, zoom, pc);
if (style.u) canvas.DrawBar(draw_x, list.item_h - zoom - zoom + draw_y, pw, zoom, pc); if (style.u) canvas.DrawBar(draw_x, draw_y + list.font_h, pw, zoom, pc);
if (link) { if (link) {
if (ESBYTE[_line]==' ') && (ESBYTE[_line+1]==NULL) {} else { if (ESBYTE[_line]==' ') && (ESBYTE[_line+1]==NULL) {} else {
canvas.DrawBar(draw_x, draw_y + list.item_h - calc(zoom*2)-1, pw, zoom, link_color_default); canvas.DrawBar(draw_x, draw_y + list.font_h, pw, zoom, link_color_default);
links.add_text(draw_x, draw_y + list.y, pw, list.item_h - calc(zoom*2)-1, zoom); links.add_text(draw_x, draw_y + list.y, pw, list.font_h, zoom);
} }
} }
_SKIP_DRAW: _SKIP_DRAW:

View File

@@ -208,9 +208,20 @@ void TWebBrowser::tag_li()
void TWebBrowser::tag_hr() void TWebBrowser::tag_hr()
{ {
dword hrcol = 0x00777777; dword hrcol = 0x00777777;
if (tag.get_value_of("color")) hrcol = GetColor(tag.value); dword hr_width = draw_w-BODY_MARGIN-BODY_MARGIN;
dword hr_size = 1;
if (tag.get_value_of("color")) {
hrcol = GetColor(tag.value);
}
if (tag.get_value_of("width")) && (!strchr(tag.value, '%')) {
hr_width = math.min(hr_width, tag.get_number_of("width"));
}
if (tag.get_number_of("size")) {
hr_size = math.min(500, tag.number);
}
if (draw_x != left_gap) NewLine(); if (draw_x != left_gap) NewLine();
if (secondrun) canvas.DrawBar(5+left_gap, style.cur_line_h / 2 + draw_y - 1, draw_w-10, 1, hrcol); if (secondrun) canvas.DrawBar(left_gap, style.cur_line_h / 2 + draw_y - 1, hr_width, hr_size, hrcol);
draw_y += hr_size - 3;
draw_x++; draw_x++;
NewLine(); NewLine();
return; return;
@@ -235,6 +246,12 @@ void TWebBrowser::tag_q()
chrncat(#linebuf, '\"', sizeof(TWebBrowser.linebuf)); chrncat(#linebuf, '\"', sizeof(TWebBrowser.linebuf));
} }
void TWebBrowser::reset_font_style()
{
list.SetFont(BASIC_CHAR_W, 14, 10011000b);
style.cur_line_h = list.item_h = list.font_h + 5;
}
void TWebBrowser::tag_h1234_caption() void TWebBrowser::tag_h1234_caption()
{ {
if (ESBYTE[#tag.name+1]=='4') { if (ESBYTE[#tag.name+1]=='4') {
@@ -250,19 +267,18 @@ void TWebBrowser::tag_h1234_caption()
NewLine(); NewLine();
} }
if (tag.is("h1")) { if (tag.is("h1")) {
list.SetFont(BASIC_CHAR_W*2, 14+14, 10011001b); list.SetFont(BASIC_CHAR_W*2, 14+13, 10011001b);
style.b = true; style.b = true;
} else if (tag.is("h2")) { } else if (tag.is("h2")) {
list.SetFont(BASIC_CHAR_W*2, 14+14, 10011001b); list.SetFont(BASIC_CHAR_W*2, 14+13, 10011001b);
} else { } else {
list.SetFont(6*2, 9+7, 10001001b); list.SetFont(6*2, 9+8, 10001001b);
} }
style.cur_line_h = list.item_h = list.font_h + 2; style.cur_line_h = list.item_h = list.font_h + 3;
} else { } else {
if (tag.is("h1")) style.b = false; if (tag.is("h1")) style.b = false;
NewLine(); NewLine();
list.SetFont(BASIC_CHAR_W, 14, 10011000b); reset_font_style();
style.cur_line_h = list.item_h = BASIC_LINE_H;
} }
} }
} }
@@ -270,11 +286,15 @@ void TWebBrowser::tag_h1234_caption()
void TWebBrowser::tag_kosicon() void TWebBrowser::tag_kosicon()
{ {
dword imgbuf[44]; dword imgbuf[44];
dword maxicon;
dword shared_i18 = memopen("ICONS18", NULL, SHM_READ); dword shared_i18 = memopen("ICONS18", NULL, SHM_READ);
maxicon = EDX / 18 / 18 / 4;
if (shared_i18) && (tag.get_number_of("n")) { if (shared_i18) && (tag.get_number_of("n")) {
if (draw_x + 18 > canvas.bufw) NewLine(); if (tag.number < maxicon) {
canvas.DrawImage(draw_x, draw_y-2, 18, 18, 18*18*4*tag.number+shared_i18); if (draw_x + 18 > canvas.bufw) NewLine();
draw_x += 22; canvas.DrawImage(draw_x, draw_y-1, 18, 18, 18*18*4*tag.number+shared_i18);
draw_x += 22;
}
} }
} }

View File

@@ -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)-1); if (streq(#new_url, URL_SERVICE_HOMEPAGE)) LoadInternalPage(#buildin_page_home, sizeof(buildin_page_home));
else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test)-1); else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test));
else if (streq(#new_url, URL_SERVICE_HISTORY)) ShowHistory(); else if (streq(#new_url, URL_SERVICE_HISTORY)) ShowHistory();
else LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1); else LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
} 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)-1); LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
} }
} else { } else {
//LOCAL PAGE //LOCAL PAGE
@@ -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)-1); LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
} else { } else {
WB1.list.first = 0; //scroll page to the top WB1.list.first = 0; //scroll page to the top
DrawOmnibox(); DrawOmnibox();

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.85"; char version[]="WebView 3.91";

View File

@@ -1,7 +1,7 @@
#ifdef LANG_RUS #ifdef LANG_RUS
#define HISTORY_HEADER "<html><title><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></title><body><b><3E><><EFBFBD><EFBFBD><EFBFBD><E9A5AD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></b><br>" #define HISTORY_HEADER "<html><title><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></title><body bgcolor=#fff><h3><3E><><EFBFBD><EFBFBD><EFBFBD><E9A5AD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></h3><br>"
#else #else
#define HISTORY_HEADER "<html><title>History</title><body><b>Visited pages</b><br>" #define HISTORY_HEADER "<html><title>History</title><body bgcolor=#fff><h3>Visited pages</h3><br>"
#endif #endif
@@ -13,7 +13,7 @@ ShowHistory()
for (i=0; i<history.items.count-1; i++) //if (cache.type.get(i) == PAGE) for (i=0; i<history.items.count-1; i++) //if (cache.type.get(i) == PAGE)
{ {
strcat(history_pointer, "<a href='"); strcat(history_pointer, "<kosicon n=3><a href='");
strcat(history_pointer, history.items.get(i)); strcat(history_pointer, history.items.get(i));
strcat(history_pointer, "'>"); strcat(history_pointer, "'>");
strcat(history_pointer, history.items.get(i)); strcat(history_pointer, history.items.get(i));

View File

@@ -1,17 +1,49 @@
<html> <html><head><title>New tab</title></head>
<head> <body bgcolor=#fff>
<title>Homepage</title>
</head>
<body><pre>Welcome to WebView a Text-Based Browser.
KolibriOS Bookmarks: <table><tr><td width=20><td width=220><pre>
1. <a href=//kolibrios.org>Homepage</a> _____________________
2. <a href="//builds.kolibrios.org">Night-builds</a> |# : : #|
3. <a href="//ftp.kolibrios.org">FTP Server</a> | : WebView : |
| : for : |
| : KolibriOS : |
| : : |
| :_______________: |
| ____________ |
| | __ | |
| || | | |
\_____||__|________|__|<font color=#DDD>lc</font>
<font bg=#F8F15B>By the way,</font> <font bg=#F8F15B> web <font bg=#FF5A7E color=#fff> 1.0 <font bg=#47D018> compatable
<font bg=#3CE7FF> </font></font></font></font>
<td>
</pre>
<kosicon n=58><a href=//kolibrios.org>Homepage</a> &nbsp;
<kosicon n=50><a href="//builds.kolibrios.org">Night-builds</a> &nbsp;
<kosicon n=50><a href="//ftp.kolibrios.org">FTP Server</a>
<pre>
By the way,
<font color="#555555">&bull; You can check for browser updates from the main menu. <font color="#555555">&bull; You can check for browser updates from the main menu.
&bull; To run a web search, type a text in the adress box and press Ctrl+Enter. &bull; To run a web search, type a text in the adress box and press Ctrl+Enter.
&bull; Pressing F6 moves a text cursor to the omnibox. &bull; Pressing F6 moves a text cursor to the omnibox.
&bull; Click on a label in the bottom right corner to change the encoding of a page. &bull; You can manually change the encoding of a page by clicking on a label in the bottom right corner.
</font>
~+
* +
' |
() .-.,="``"=. - o -
'=/_ \ |
* | '=._ |
\ `=./`, '
. '=.__.=' `=' *
+ +
O * ' .<font color=#DDD>jgs</font>

View File

@@ -1,15 +1,49 @@
<html><head><meta charset="cp-866"> <html><head><title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></title></head>
<title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></title></head> <body bgcolor=#fff>
<body><pre><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E2AEA2> <20><><EFBFBD><EFBFBD> WebView!
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> KolibriOS:<ol> <table><tr><td width=20><td width=220><pre>
<li><a href=//kolibrios.org><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><></a> _____________________
<li><a href="//builds.kolibrios.org"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᡮન</a> |# : : #|
<li><a href="//ftp.kolibrios.org">FTP <20><><EFBFBD></a></ol> | : WebView : |
| : for : |
| : KolibriOS : |
| : : |
| :_______________: |
| ____________ |
| | __ | |
| || | | |
\_____||__|________|__|<font color=#DDD>lc</font>
<font bg=#F8F15B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,</font> <font bg=#F8F15B> web <font bg=#FF5A7E color=#fff> 1.0 <font bg=#47D018> compatable
<font bg=#3CE7FF> </font></font></font></font>
<td>
</pre>
<kosicon n=58><a href=//kolibrios.org><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><></a> &nbsp;
<kosicon n=50><a href="//builds.kolibrios.org"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᡮન</a> &nbsp;
<kosicon n=50><a href="//ftp.kolibrios.org">FTP <20><><EFBFBD></a>
<pre>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<font color="#555555">&bull; <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <font color="#555555">&bull; <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
&bull; <20><><EFBFBD> <20><><EFBFBD><20> Google <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ctrl+Enter &bull; <20><><EFBFBD> <20><><EFBFBD><20> Google <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ctrl+Enter
&bull; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> F6 <20><><EFBFBD><EFBFBD><><EFBFBD><E2AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. &bull; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> F6 <20><><EFBFBD><EFBFBD><><EFBFBD><E2AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
&bull; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><E0A0AD><EFBFBD>, <20><><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E0A0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><> <20><><EFBFBD><EFBFBD>. &bull; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><E0A0AD><EFBFBD>, <20><><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E0A0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><> <20><><EFBFBD><EFBFBD>.
~+
* +
' |
() .-.,="``"=. - o -
'=/_ \ |
* | '=._ |
\ `=./`, '
. '=.__.=' `=' *
+ +
O * ' .<font color=#DDD>jgs</font>

View File

@@ -5,12 +5,19 @@
<title>Тест Acid 0.1</title> <title>Тест Acid 0.1</title>
</head> </head>
<body bgcolor="#000000" link="#0066FF" text="#FFFFFF"> <body bgcolor="#000000" link="#0066FF" text="#FFFFFF">
<h1 align=center>Это тестовая страница для проверки WebViewer</h1> <h1 align=center>Тест Acid 0.1</h1>
<br /> <br>
<p>WebViewer является текстовым браузером и поддерживает все популярные кодировки (cp1251, koi-8, cp866, unicode) <b>Это тестовая страница для проверки текстового браузера <s>HTML Viewer</s> WebView</b>
и некоторые теги. Поддержка таблииц (&lt;table&gt;), CSS, Javascript'a и Контактика пока не реализована :)
<p>Из кодировок поддерживаются: CP866(DOS), CP1251(Windows), CP1252(Latin legacy), KOI8, и конечно UTF8. CSS и Javascript пока не реализованы (ахахаха). Поддержка тега &lt;table&gt; крайне базовая, поддержки вложенных таблиц нет.
</p> </p>
<br />
<h3>История</h3>
Ранее программа называлась <b >HTMLv (HTML Viewer)</b> и изначально задумывалась как <q>Центр справки и поддержки</q>. Чтобы не изобретать велосипед и одновременно исполнить мечту многих, форматом просматриваемых страниц был выбран html.
Первоначальный автор Veliant, затем разработка была подхвачена дизайнером Leency. Это была моя вторая программа после файлового менеджера Eolite.<br>
<span> <br />
<b> <b>
<font color="#FF0000">K</font> <font color="#FF0000">K</font>
@@ -33,7 +40,8 @@
</b> </b>
<br> <br>
<p> <table>
<td>
<bg bgcolor=#333> <bg bgcolor=#333>
Небольшой список:<ol> Небольшой список:<ol>
<li><q>Этот текст в кавычках</q></li> <li><q>Этот текст в кавычках</q></li>
@@ -46,17 +54,14 @@
</p> </p>
<br> <br>
<pre>
"Осень уже пришла!"-
Шепнул мне на ухо ветер,
Подкравшись к подушке моей.
Басе
</pre>
<!-- комментарий: этого текста здесь <нет> --> <!-- комментарий: этого текста здесь <нет> -->
<br> <br>
<img alt="нет картинки, просто alt">
<img src = http://wiby.org/about/wibyplex.gif>
<a href="http://kolibrios.org/i/logo.png"><img id="2.1.4" src="http://kolibrios.org/i/logo.png" alt="logo"><br>Открыть</a><br> <a href="http://kolibrios.org/i/logo.png"><img id="2.1.4" src="http://kolibrios.org/i/logo.png" alt="logo"><br>Открыть</a><br>
<br> <br>
@@ -65,10 +70,25 @@
<a href='/sys/index.htm'>Незакрытый тег а - index.htm<br> <a href='/sys/index.htm'>Незакрытый тег а - index.htm<br>
<a href="/sys/calc">/sys/calc</a><br> <a href="/sys/calc">/sys/calc</a><br>
<a href="#2.1.4">#2.1.4</a><br> <a href="#2.1.4">#2.1.4</a><br>
<a href="http://bash.im">http://bash.im</a><br> <a href="http://kolibrios.org">http://kolibrios.org</a><br>
<a href="mailto:leency@mail.ru">Mail to Leency</a><br> <a href="mailto:leency@mail.ru">Mail to Leency</a><br>
<br> <br>
<br>
<h1><a href=#>Link H1</a> <u>Underline H1</u></h1>
<h2><a href=#>Link H2</a> <u>Underline H2</u></h2>
<h3><a href=#>Link H3</a> <u>Underline H2</u></h3>
<a href=#>Link</a> <u>Underline</u>
<td>
<pre>
"Осень уже пришла!"-
Шепнул мне на ухо ветер,
Подкравшись к подушке моей.
Басе
</pre><br>
В этом тексте есть переход на следующую строку, но браузер В этом тексте есть переход на следующую строку, но браузер
его должен проигнорировать. Еще много пробелов. А тут есть его должен проигнорировать. Еще много пробелов. А тут есть
@@ -80,8 +100,19 @@
&#1082;&#1086;&#1088;&#1087;&#1091;&#1089; &#1085;&#1072; &#1090;&#1077;&#1088;&#1088;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080; &#1053;&#1058;&#1059; «&#1061;&#1055;&#1048;» &#1082;&#1086;&#1088;&#1087;&#1091;&#1089; &#1085;&#1072; &#1090;&#1077;&#1088;&#1088;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080; &#1053;&#1058;&#1059; «&#1061;&#1055;&#1048;»
</p> </p>
<pre><font color="#000">
<font bg=#FFED00 style="background-color:#FFED00"> Заметки </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> Речка на Жукова </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> Heroes 3 </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> Рисостерон, куринабол </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> </font>
</font></pre>
</table>
<hr color="#758999"> <hr color="#758999">
<center>Zhitomyr 2008-2015</center> <center>Zhytomyr 2008-2025</center>
</body> </body>

View File

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

View File

@@ -0,0 +1,306 @@
; SPDX-License-Identifier: GPL-2.0-only
; Flag - demo program shows a flag with the inscription 'KolibriOS'
; Copyright (C) 2025 KolibriOS team
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../proc32.inc'
include '../../macros.inc'
include '../../KOSfuncs.inc'
include '../../load_lib.mac'
include '../../dll.inc'
include '../../develop/libraries/TinyGL/asm_fork/kosgl.inc'
include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc'
include '../../develop/libraries/TinyGL/asm_fork/examples/fps.inc'
@use_library
align 4
start:
load_library name_tgl, library_path, system_path, import_tinygl
cmp eax,SF_TERMINATE_PROCESS
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
; *** init ***
stdcall [kosglMakeCurrent], 0,15,600,380,ctx1
stdcall [glMatrixMode], GL_MODELVIEW
call [glLoadIdentity]
stdcall [glClearColor], 0.549, 0.549, 0.588, 1.0
stdcall [glEnable], GL_LIGHTING
stdcall [glLightf], GL_LIGHT0, GL_SPOT_EXPONENT, 0.0
stdcall [glLightf], GL_LIGHT0, GL_SPOT_CUTOFF, 180.0
stdcall [glEnable], GL_LIGHT0
stdcall [glLightfv], GL_LIGHT0, GL_POSITION, lightpos
stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, lightdirect
stdcall [glEnable], GL_COLOR_MATERIAL
glpush p3
stdcall [glClearDepth]
stdcall [glEnable], GL_CULL_FACE
stdcall [glEnable], GL_DEPTH_TEST
fninit
stdcall reshape, 600,380
; *** end init ***
align 4
red_win:
call draw_window
mcall SF_THREAD_INFO, procinfo,-1
mov eax,dword[procinfo.box.height]
cmp eax,120
jge @f
mov eax,120 ;min size
@@:
sub eax,43
mov ebx,dword[procinfo.box.width]
cmp ebx,200
jge @f
mov ebx,200
@@:
sub ebx,10
stdcall reshape, ebx,eax
align 16
still:
call draw_3d
cmp dword[stop],1
je @f
stdcall Fps, 365,4
mov dword[esp-4],eax
fild dword[esp-4]
fmul dword[delt_3]
fchs
fadd dword[dangle]
fstp dword[dangle] ;dangle -= 0.01*Fps(x,y)
mcall SF_WAIT_EVENT_TIMEOUT, 1
jmp .end0
align 4
@@:
mcall SF_WAIT_EVENT
.end0:
cmp al, EV_REDRAW
jz red_win
cmp al, EV_KEY
jz key
cmp al, EV_BUTTON
jz button
jmp still
; new window size or exposure
align 4
proc reshape, width:dword, height:dword
locals
dxy dq ?
endl
stdcall [glViewport], 0, 0, [width], [height]
stdcall [glMatrixMode], GL_PROJECTION
call [glLoadIdentity]
fild dword[width]
fidiv dword[height]
fstp qword[dxy] ;dxy = width/height
glpush p4
glpush p3
glpush dxy
glpush p1
call [gluPerspective] ;28.0, width/height, 1.0, 40.0
stdcall [glMatrixMode], GL_MODELVIEW
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
ret
endp
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW, (50 shl 16)+609,(30 shl 16)+425,0x33404040,,title1
call [kosglSwapBuffers]
;Title
mcall SF_DRAW_TEXT, (338 shl 16)+4, 0xc0c0c0, fps, fps.end-fps
mcall SF_DRAW_TEXT, (8 shl 16)+4, 0xc0c0c0, title2, title2.end-title2
mcall SF_REDRAW,SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
cmp ah,112 ;P
jne @f
xor dword[stop],1
jmp still
@@:
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
mcall SF_TERMINATE_PROCESS
align 4
title1: db 'TinyGL in KolibriOS'
.end: db 0
title2: db 'ESC - exit, P - pause'
.end: db 0
fps: db 'FPS:'
.end: db 0
align 16
proc draw_3d uses ebx ecx edx esi edi
locals
z dd ?
endl
call [glLoadIdentity]
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
stdcall [glTranslatef], 0.0, 0.0, -2.0
stdcall [glRotatef], 10.0, 0.0, 0.0, 1.0
stdcall [glRotatef], 43.0, 0.0, 1.0, 0.0
stdcall [glTranslatef], -0.6, -0.2, -0.1
mov edi, logo+9*41 ;edi = logo[9][0]
mov esi, 41 ;esi = i
align 4
.cycle0: ;for(int i=0;i<41;i++)
stdcall [glTranslatef], 0.045, 0.0, 0.0
call [glPushMatrix]
fld dword[angle]
fsin
fmul dword[delt_1]
fstp dword[z] ;= 0.08*sin(angle)
fld dword[angle]
fadd dword[delt_2]
fstp dword[angle] ;angle += 0.2
mov ecx, 9
mov ebx, edi
; ecx = j
.cycle1: ;for(int j=9;j>=0;j--)
cmp byte[ebx],0 ;if(logo[j][i])
je @f
push 0.0 ;b
push 0.0 ;g
push 1.0 ;r
jmp .end_c2
@@:
push 0.945 ;b
push 0.855 ;g
push 0.859 ;r
.end_c2:
call [glColor3f]
stdcall [glTranslatef], 0.0, 0.045, 0.0
stdcall [glBegin], GL_QUADS
stdcall [glVertex3f], 0.0, -0.04,[z]
stdcall [glVertex3f], 0.04,-0.04,[z]
stdcall [glVertex3f], 0.04, 0.0, [z]
stdcall [glVertex3f], 0.0, 0.0, [z]
call [glEnd]
add ebx, -41
dec ecx
jnz .cycle1
call [glPopMatrix]
inc edi ;edi = logo[9][i]
dec esi
jnz .cycle0
mov edx,dword[dangle]
mov dword[angle],edx
call [kosglSwapBuffers]
ret
endp
align 4
p1 dq 28.0
p3 dq 1.0
p4 dq 40.0
delt_1 dd 0.08
delt_2 dd 0.2
delt_3 dd 0.01
lightpos dd 2.0, 0.0, -2.5, 1.0
lightdirect dd 0.0, 0.0, -0.7
angle dd 0.0
dangle dd 0.0
stop dd 0
;[10][41]
logo db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,\
0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,\
0,0,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,\
0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,\
0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,\
0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;--------------------------------------------------
align 4
import_tinygl:
macro E_LIB n
{
if defined sz_#n
n dd sz_#n
end if
}
include '../../develop/libraries/TinyGL/asm_fork/export.inc'
dd 0,0
macro E_LIB n
{
if used n
sz_#n db `n,0
end if
}
include '../../develop/libraries/TinyGL/asm_fork/export.inc'
;--------------------------------------------------
system_path db '/sys/lib/'
name_tgl db 'tinygl.obj',0
;--------------------------------------------------
align 16
i_end:
ctx1 TinyGLContext
procinfo process_information
cur_dir_path rb 4096
library_path rb 4096
rb 4096
stacktop:
mem:

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({"magnify.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "magnify")

View File

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

View File

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

View File

@@ -1,156 +0,0 @@
;---------------------------------------------------------------------
; MAGNIFY SCREEN v1.0
;
; Version for KolibriOS 2005-2011
;
; Version for Menuet to 2005
;---------------------------------------------------------------------
; last update: 08/18/2011
; changed by: Marat Zakiyanov aka Mario79, aka Mario
; changes: Checking for "rolled up" window
;---------------------------------------------------------------------
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 1 ; header version
dd START ; program start
dd I_END ; program image size
dd 0x1000 ; required amount of memory
dd 0x1000 ; esp
dd 0, 0 ; no parameters, no path
;---------------------------------------------------------------------
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include '..\..\..\macros.inc'
delay equ 20
magnify_width = 40
magnify_height = 30
;---------------------------------------------------------------------
START: ; start of execution
redraw:
call draw_window
still:
call draw_magnify
wtevent:
mcall 23,delay ; wait here for event with timeout
dec eax
js still
jz redraw
dec eax
jnz button
; key in buffer
mov al, 2
mcall
jmp wtevent
;---------------------------------------------------------------------
button:
; we have only one button, close
or eax, -1
mcall
;---------------------------------------------------------------------
; ******* WINDOW DEFINITIONS AND DRAW ********
;---------------------------------------------------------------------
draw_window:
mcall 12,1
mov al, 48 ; function 48 : graphics parameters
mov bl, 4 ; subfunction 4 : get skin height
mcall
; DRAW WINDOW
mov ebx, 100*65536 + 8*magnify_width + 8
lea ecx, [eax + 100*65536 + 8*magnify_height + 3]
mov edx, 0x34000000 ; color of work area RRGGBB
mov edi, labelt ; header
xor eax, eax ; function 0 : define and draw window
mcall
mcall 12,2
ret
;---------------------------------------------------------------------
draw_magnify:
mcall 9,procinfo,-1
mov eax,[procinfo+70] ;status of window
test eax,100b
jne .end
mcall 14 ; get screen size
movzx ecx, ax
inc ecx
mov [size_y], ecx
shr eax, 16
inc eax
mov [size_x], eax
xor ebx, ebx
mcall 37 ; get mouse coordinates
mov ecx, eax
shr ecx, 16 ; ecx = x
movzx edx, ax ; edx = y
inc ecx
mov [m_xe], ecx
inc edx
mov [m_ye], edx
sub ecx, magnify_width
sub edx, magnify_height
mov [m_x], ecx
mov [m_y], edx
.loop_y:
.loop_x:
xor eax, eax ; assume black color for invalid pixels
test ecx, ecx
js .nopix
cmp ecx, [size_x]
jge .nopix
test edx, edx
js .nopix
cmp edx, [size_y]
jge .nopix
mov ebx, edx
imul ebx, [size_x]
add ebx, ecx
mcall 35 ; read pixel
.nopix:
push ecx edx
sub ecx, [m_x]
sub edx, [m_y]
mov ebx, ecx
shl ebx, 3+16
mov bl, 8
mov ecx, edx
shl ecx, 3+16
mov cl, 8
mov edx, eax
mcall 13
pop edx ecx
inc ecx
cmp ecx, [m_xe]
jnz .loop_x
mov ecx, [m_x]
inc edx
cmp edx, [m_ye]
jnz .loop_y
.end:
ret
;---------------------------------------------------------------------
; DATA AREA
;---------------------------------------------------------------------
if lang eq ru_RU
labelt:
db 'Magnifier - <20><><EFBFBD><E0A0AD><EFBFBD> <20>㯠', 0
else ; Default to en_US
labelt:
db 'Magnifier', 0
end if
I_END:
align 4
m_x dd ?
m_y dd ?
m_xe dd ?
m_ye dd ?
size_x dd ?
size_y dd ?
;---------------------------------------------------------------------
procinfo:
rb 1024
;---------------------------------------------------------------------

Binary file not shown.

View File

@@ -28,7 +28,7 @@ IMPORT
RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar; RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar;
CONST CONST
HEADER = "CEdit (27-feb-2025)"; HEADER = "CEdit (30-apr-2025)";
ShellFilter = ""; ShellFilter = "";
EditFilter = "sh|inc|txt|asm|ob07|c|cpp|h|pas|pp|lua|ini|json"; EditFilter = "sh|inc|txt|asm|ob07|c|cpp|h|pas|pp|lua|ini|json";
@@ -1320,7 +1320,7 @@ BEGIN
|menuBoard: |menuBoard:
K.Run("/sys/develop/board", "") K.Run("/sys/develop/board", "")
|menuSysFunc: |menuSysFunc:
K.Run("/sys/docpack", "f") K.Run("/sys/docpack", "e")
|menuLineNumbers: |menuLineNumbers:
T.toggleNumbers; T.toggleNumbers;
Ini.setInt("settings", "line_numbers", ORD(T.lineNumbers)) Ini.setInt("settings", "line_numbers", ORD(T.lineNumbers))

View File

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

View File

@@ -31,3 +31,19 @@ Development history
- Renamed to Charsets Viewer/Charsets - Renamed to Charsets Viewer/Charsets
- Symbol highlight UI tweaks - Symbol highlight UI tweaks
- Fixed rolled up bug - Fixed rolled up bug
30.03.2025 - 0.4.0
- Localization for all system languages
- Display all character scales
- Abolity to copy character codes
- Block on charpage 00 for CP866
- New character code half markers
- Navigation using keys (see hotkeys.txt)
03.04.2025 - 0.4.1
- Fixed bug with codes color subscription
04.04.2025 - 0.4.2
- Fixed bug with resetting UTF charpage to zero on double charset swap to CP866
- Improved charpage blocking for CP866 UX
- Improved char codes copying UI

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
Control hotkeys
- Navigate inside charpage:
- Arrows
- Num2/4/6/8
- Navigation between charpages:
- PgDN, PgUP - previous/next page
- Num0, Home - reset page to zero
- Change symbol scale:
- Num- and Num+

View File

@@ -12,6 +12,7 @@ include '../../develop/libraries/libs-dev/libimg/libimg.inc'
include '../../load_img.inc' include '../../load_img.inc'
include '../../load_lib.mac' include '../../load_lib.mac'
include '../../develop/libraries/box_lib/trunk/box_lib.mac' include '../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../develop/libraries/TinyGL/asm_fork/kosgl.inc'
include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc' include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US. include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include 'info_fun_float.inc' include 'info_fun_float.inc'
@@ -235,7 +236,7 @@ start:
call [gluNewQuadric] call [gluNewQuadric]
mov [qObj],eax mov [qObj],eax
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf] mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax mov dword[buf_ogl],eax
@@ -1082,7 +1083,7 @@ l_libs_start:
lib_2 l_libs lib_name_2, file_name, system_dir_2, import_box_lib lib_2 l_libs lib_name_2, file_name, system_dir_2, import_box_lib
lib_3 l_libs lib_name_3, file_name, system_dir_3, import_buf2d lib_3 l_libs lib_name_3, file_name, system_dir_3, import_buf2d
lib_4 l_libs lib_name_4, file_name, system_dir_4, import_libkmenu lib_4 l_libs lib_name_4, file_name, system_dir_4, import_libkmenu
lib_5 l_libs lib_name_5, file_name, system_dir_5, import_lib_tinygl lib_5 l_libs lib_name_5, file_name, system_dir_5, import_tinygl
lib_6 l_libs lib_name_6, file_name, system_dir_6, import_libini lib_6 l_libs lib_name_6, file_name, system_dir_6, import_libini
l_libs_end: l_libs_end:
@@ -1287,16 +1288,20 @@ dd 0,0
akmenuitem_draw db 'kmenuitem_draw',0 akmenuitem_draw db 'kmenuitem_draw',0
align 4 align 4
import_lib_tinygl: import_tinygl:
macro E_LIB n macro E_LIB n
{ {
if defined sz_#n
n dd sz_#n n dd sz_#n
end if
} }
include '../../develop/libraries/TinyGL/asm_fork/export.inc' include '../../develop/libraries/TinyGL/asm_fork/export.inc'
dd 0,0 dd 0,0
macro E_LIB n macro E_LIB n
{ {
if used n
sz_#n db `n,0 sz_#n db `n,0
end if
} }
include '../../develop/libraries/TinyGL/asm_fork/export.inc' include '../../develop/libraries/TinyGL/asm_fork/export.inc'
@@ -1343,7 +1348,7 @@ buf_1:
align 4 align 4
el_focus dd tree1 el_focus dd tree1
tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\ tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\
16,16, 0xffffff,0xb0d0ff,0x400040, 5,35,195-16,250, 16,list_offs_text,0,\ 16,16, 0xffffff,0xb0d0ff,0x10400040, 5,35,195-16,250, 16,list_offs_text,0,\
el_focus,w_scr_t1,0 el_focus,w_scr_t1,0
align 4 align 4
@@ -1362,14 +1367,14 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ;
lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD><><E4AEAD><EFBFBD><EFBFBD><EFBFBD> <20>ᢥ饭<E1A2A5><E9A5AD> lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD><><E4AEAD><EFBFBD><EFBFBD><EFBFBD> <20>ᢥ饭<E1A2A5><E9A5AD>
if lang eq ru_RU if lang eq ru_RU
capt db 'info 3ds <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 29.09.20',0 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> capt db 'info 3ds <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 04.05.25',0 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
else ; Default to en_US else ; Default to en_US
capt db 'info 3ds version 29.09.20',0 ;window caption capt db 'info 3ds version 04.05.25',0 ;window caption
end if end if
align 16 align 16
i_end: i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28 ctx1 TinyGLContext
procinfo process_information procinfo process_information
run_file_70 FileInfoBlock run_file_70 FileInfoBlock
sc system_colors sc system_colors

View File

@@ -1408,7 +1408,7 @@ buf_1:
align 4 align 4
el_focus dd tree1 el_focus dd tree1
tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\ tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\
16,16, 0xffffff,0xb0d0ff,0x400040, 5,47,195-16,250, 16,list_offs_text,0, el_focus,\ 16,16, 0xffffff,0xb0d0ff,0x10400040, 5,47,195-16,250, 16,list_offs_text,0, el_focus,\
w_scr_t1,0 w_scr_t1,0
align 4 align 4
@@ -1427,9 +1427,9 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ;
lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD><><E4AEAD><EFBFBD><EFBFBD><EFBFBD> <20>ᢥ饭<E1A2A5><E9A5AD> lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD><><E4AEAD><EFBFBD><EFBFBD><EFBFBD> <20>ᢥ饭<E1A2A5><E9A5AD>
if lang eq ru_RU if lang eq ru_RU
capt db 'info 3ds [user] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 29.09.20',0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> capt db 'info 3ds [user] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 14.04.25',0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
else ; Default to en_US else ; Default to en_US
capt db 'info 3ds [user] version 29.09.20',0 ; Window caption capt db 'info 3ds [user] version 14.04.25',0 ; Window caption
end if end if
align 16 align 16

View File

@@ -306,7 +306,7 @@ align 4
faddp faddp
fild dword[rad_c] fild dword[rad_c]
fdivp ;radius=(size.x+size.y)/rad_c fdivp ;radius=(size.x+size.y)/rad_c
fstp dword[sph_radius] fstp qword[sph_radius]
;<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> x <EFBFBD> y, <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> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> x <EFBFBD> y, <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>
fld dword[edi+obj_3d.y_scale] fld dword[edi+obj_3d.y_scale]
@@ -812,9 +812,8 @@ proc draw_3d uses eax ebx ecx edi, o_data:dword
@@: @@:
stdcall [glDisable],GL_LIGHTING stdcall [glDisable],GL_LIGHTING
.end_l: .end_l:
stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
stdcall [glScalef], [edi+obj_3d.x_scale],[edi+obj_3d.y_scale],[edi+obj_3d.z_scale] stdcall [glScalef], [edi+obj_3d.x_scale],[edi+obj_3d.y_scale],[edi+obj_3d.z_scale]
stdcall [glScalef], 1.0,1.0,0.7 ;correct for z stdcall [glScalef], 1.0,1.0,1.4 ;correct for z
stdcall [glRotatef], [angle_z],0.0,0.0,1.0 stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0 stdcall [glRotatef], [angle_x],1.0,0.0,0.0
@@ -976,7 +975,10 @@ if version_edit eq 1
stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select] stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
call [glPushMatrix] call [glPushMatrix]
stdcall [glTranslatef], [eax],[eax+4],[eax+8] stdcall [glTranslatef], [eax],[eax+4],[eax+8]
stdcall [gluSphere], [qObj], [sph_radius], 8,8 push 8
push 8
glpush sph_radius
stdcall [gluSphere], [qObj]
call [glPopMatrix] call [glPopMatrix]
@@: @@:
@@ -997,7 +999,10 @@ align 4
mov eax,[eax] mov eax,[eax]
call [glPushMatrix] call [glPushMatrix]
stdcall [glTranslatef], [eax],[eax+4],[eax+8] stdcall [glTranslatef], [eax],[eax+4],[eax+8]
stdcall [gluSphere], [qObj], [sph_radius], 4,4 push 4
push 4
glpush sph_radius
stdcall [gluSphere], [qObj]
call [glPopMatrix] call [glPopMatrix]
dec ecx dec ecx
jz .end_select jz .end_select
@@ -1345,5 +1350,5 @@ delt_size dd 3.0 ;
mouse_drag dd 0 ;<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> mouse_drag dd 0 ;<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>
mouse_x dd 0 mouse_x dd 0
mouse_y dd 0 mouse_y dd 0
sph_radius dd 0 ;<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> sph_radius dq 0 ;radius of the sphere for selecting the active point

View File

@@ -951,13 +951,12 @@ endl
endp endp
align 4 align 4
proc glClearDepth uses eax, depth:dword proc glClearDepth uses eax, depth:qword
locals locals
p rd 2 p rd 2
endl endl
mov dword[p],OP_ClearDepth mov dword[p],OP_ClearDepth
mov eax,[depth] fld qword[depth]
fld qword[eax]
fstp dword[p+4] fstp dword[p+4]
lea eax,[ebp-8] ;=sizeof(dd)*2 lea eax,[ebp-8] ;=sizeof(dd)*2

View File

@@ -23,8 +23,7 @@ endl
imul ecx,ebx imul ecx,ebx
shl ecx,2 shl ecx,2
add ecx,[eax+GLContext.color_array] ;ecx = &context.color_array[i] add ecx,[eax+GLContext.color_array] ;ecx = &context.color_array[i]
mov ebx,ebp lea ebx,[ebp-20] ;=sizeof(dd)*5
sub ebx,20 ;=sizeof(dd)*5
mov edx,[ecx] mov edx,[ecx]
mov [ebx+4],edx mov [ebx+4],edx
mov edx,[ecx+4] mov edx,[ecx+4]
@@ -48,8 +47,7 @@ endl
imul esi,ebx imul esi,ebx
shl esi,2 shl esi,2
add esi,[eax+GLContext.normal_array] ;esi = &normal_array[ebx * (3 + c->normal_array_stride)] add esi,[eax+GLContext.normal_array] ;esi = &normal_array[ebx * (3 + c->normal_array_stride)]
mov edi,eax lea edi,[eax+GLContext.current_normal]
add edi,GLContext.current_normal
mov ecx,3 mov ecx,3
rep movsd rep movsd
mov dword[edi],0.0 mov dword[edi],0.0
@@ -92,8 +90,7 @@ endl
imul ecx,ebx imul ecx,ebx
shl ecx,2 shl ecx,2
add ecx,[eax+GLContext.vertex_array] ;ecx = &context.vertex_array[i] add ecx,[eax+GLContext.vertex_array] ;ecx = &context.vertex_array[i]
mov ebx,ebp lea ebx,[ebp-20] ;=sizeof(dd)*5
sub ebx,20 ;=sizeof(dd)*5
mov edx,[ecx] mov edx,[ecx]
mov [ebx+4],edx mov [ebx+4],edx
mov edx,[ecx+4] mov edx,[ecx+4]
@@ -130,8 +127,7 @@ endl
mov eax,[i] mov eax,[i]
mov dword[p+4],eax mov dword[p+4],eax
mov eax,ebp lea eax,[ebp-8] ;=sizeof(dd)*2
sub eax,8 ;=sizeof(dd)*2
stdcall gl_add_op,eax stdcall gl_add_op,eax
ret ret
endp endp
@@ -139,10 +135,9 @@ endp
align 4 align 4
proc glopDrawArrays, context:dword, param:dword proc glopDrawArrays, context:dword, param:dword
locals locals
vi dd ?
idx dd ? idx dd ?
states dd ? states dd ?
size dd ? a_size dd ?
p rd 8 ;функция glopColor требует 8 параметров, другие функции требуют меньше, берем по максимуму что-бы не портить стек p rd 8 ;функция glopColor требует 8 параметров, другие функции требуют меньше, берем по максимуму что-бы не портить стек
endl endl
pushad pushad
@@ -155,132 +150,19 @@ pushad
mov [idx],eax ;param[2].i mov [idx],eax ;param[2].i
mov eax,[ebx+4] mov eax,[ebx+4]
mov [p+4],eax ;p[1].i = param[1].i mov [p+4],eax ;p[1].i = param[1].i
mov eax,ebp lea eax,[ebp-32] ;=sizeof(dd)*8
sub eax,32 ;=sizeof(dd)*8
stdcall glopBegin, edx,eax stdcall glopBegin, edx,eax
mov dword[vi],0 cmp ecx,1
jl @f
align 4 align 4
.cycle_0: ;for (int vi=0; vi<count; vi++) .cycle_0: ;for (int vi=0; vi<count; vi++)
cmp dword[vi],ecx call CopyArrayElementByIndex
jge .cycle_0_end
bt dword[states],1 ;2^1=COLOR_ARRAY
jnc @f
mov esi,[edx+GLContext.color_array_size]
mov [size],esi
add esi,[edx+GLContext.color_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.color_array] ;esi = &context.color_array[i]
mov edi,ebp
sub edi,28 ;edi = &p[1]
mov ebx,[esi+8]
mov [edi],ebx ;p[1].f = context.color_array[i+2]
mov ebx,[esi+4]
mov [edi+4],ebx ;p[2].f = context.color_array[i+1]
mov ebx,[esi]
mov [edi+8],ebx ;p[3].f = context.color_array[i]
add edi,12
cmp dword[size],3
jle .e1
add esi,12
movsd
jmp .e2
.e1:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
.e2:
mov edi,ebp
sub edi,32 ;edi = &p[0]
mov ebx,ebp
sub ebx,12 ;ebp-12 = &p[5]
push ebx
add ebx,4 ;ebp-8 = &p[6]
push ebx
add ebx,4 ;ebp-4 = &p[7]
push ebx
stdcall RGBFtoRGBI,[edi+12],[edi+8],[edi+4] ;call: r,g,b,&p[7],&p[6],&p[5]
stdcall glopColor, edx,edi ;(context, p(op,rf,gf,bf,af,ri,gi,bi))
@@:
bt dword[states],2 ;2^2=NORMAL_ARRAY
jnc @f
mov esi,[edx+GLContext.normal_array_stride]
add esi,3
imul esi,[idx]
shl esi,2
add esi,[edx+GLContext.normal_array] ;esi = &context.normal_array[ idx * (3 + context.normal_array_stride) ]
mov edi,edx
add edi,GLContext.current_normal
movsd ;context.current_normal.X = context.normal_array[i]
movsd
movsd
mov dword[edi],0.0 ;context.current_normal.W = 0.0f
@@:
bt dword[states],3 ;2^3=TEXCOORD_ARRAY
jnc @f
mov esi,[edx+GLContext.texcoord_array_size]
mov [size],esi
add esi,[edx+GLContext.texcoord_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.texcoord_array] ;esi = &context.texcoord_array[i]
mov edi,edx
add edi,GLContext.current_tex_coord
movsd ;context.current_tex_coord.X = ccontext.texcoord_array[i]
movsd
cmp dword[size],2
jle .e3
movsd
jmp .e4
.e3:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
.e4:
cmp dword[size],3
jle .e5
movsd
jmp @f
.e5:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
@@:
bt dword[states],0 ;2^0=VERTEX_ARRAY
jnc @f
mov esi,[edx+GLContext.vertex_array_size]
mov [size],esi
add esi,[edx+GLContext.vertex_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.vertex_array] ;esi = &context.vertex_array[i]
mov edi,ebp
sub edi,28 ;edi = &p[1]
movsd ;p[1].f = context.vertex_array[i]
movsd
cmp dword[size],2
jle .e6
movsd
jmp .e7
.e6:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
jmp .e8 ;и 4-й тоже ставим по умолчанию
.e7:
cmp dword[size],3
jle .e8
movsd
sub edi,20 ;edi=&p[0]
jmp .e9
.e8:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
sub edi,16 ;edi=&p[0]
.e9:
stdcall glopVertex, edx,edi
@@:
inc dword[idx] inc dword[idx]
inc dword[vi] loop .cycle_0
jmp .cycle_0 @@:
.cycle_0_end:
;mov eax,ebp lea eax,[ebp-32] ;=sizeof(dd)*8
;sub eax,32 ;=sizeof(dd)*8
stdcall glopEnd, edx,eax stdcall glopEnd, edx,eax
popad popad
ret ret
@@ -299,8 +181,7 @@ endl
mov eax,[count] mov eax,[count]
mov dword[p+12],eax mov dword[p+12],eax
mov eax,ebp lea eax,[ebp-16] ;=sizeof(dd)*4
sub eax,16 ;=sizeof(dd)*4
stdcall gl_add_op,eax stdcall gl_add_op,eax
ret ret
endp endp
@@ -308,12 +189,12 @@ endp
align 4 align 4
proc glopDrawElements, context:dword, param:dword proc glopDrawElements, context:dword, param:dword
locals locals
type dd ?
indices dd ? ;указатель на 16 или 32 битные индексы
ii dd ? ii dd ?
idx dd ? idx dd ?
states dd ? states dd ?
type dd ? a_size dd ?
size dd ?
indices dd ? ;указатель на 16 или 32 битные индексы
p rd 8 p rd 8
endl endl
pushad pushad
@@ -328,8 +209,7 @@ pushad
mov [type],eax ;type = param[3].i mov [type],eax ;type = param[3].i
mov eax,[ebx+16] mov eax,[ebx+16]
mov [indices],eax ;*indices = param[4].p mov [indices],eax ;*indices = param[4].p
mov eax,ebp lea eax,[ebp-32] ;=sizeof(dd)*8
sub eax,32 ;=sizeof(dd)*8
stdcall glopBegin, edx,eax stdcall glopBegin, edx,eax
mov dword[ii],0 mov dword[ii],0
@@ -351,127 +231,133 @@ align 4
.end_0: .end_0:
mov [idx],esi mov [idx],esi
bt dword[states],1 ;2^1=COLOR_ARRAY call CopyArrayElementByIndex
jnc @f
mov esi,[edx+GLContext.color_array_size]
mov [size],esi
add esi,[edx+GLContext.color_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.color_array] ;esi = &context.color_array[i]
mov edi,ebp
sub edi,28 ;edi = &p[1]
mov ebx,[esi+8]
mov [edi],ebx ;p[1].f = context.color_array[i+2]
mov ebx,[esi+4]
mov [edi+4],ebx ;p[2].f = context.color_array[i+1]
mov ebx,[esi]
mov [edi+8],ebx ;p[3].f = context.color_array[i]
add edi,12
cmp dword[size],3
jle .e1
add esi,12
movsd
jmp .e2
.e1:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
.e2:
mov edi,ebp
sub edi,32 ;edi = &p[0]
mov ebx,ebp
sub ebx,12 ;ebp-12 = &p[5]
push ebx
add ebx,4 ;ebp-8 = &p[6]
push ebx
add ebx,4 ;ebp-4 = &p[7]
push ebx
stdcall RGBFtoRGBI,[edi+12],[edi+8],[edi+4] ;call: r,g,b,&p[7],&p[6],&p[5]
stdcall glopColor, edx,edi ;(context, p(op,rf,gf,bf,af,ri,gi,bi))
@@:
bt dword[states],2 ;2^2=NORMAL_ARRAY
jnc @f
mov esi,[edx+GLContext.normal_array_stride]
add esi,3
imul esi,[idx] ;esi = idx * (3 + context.normal_array_stride)
shl esi,2
add esi,[edx+GLContext.normal_array]
mov edi,edx
add edi,GLContext.current_normal
movsd ;context.current_normal.X = context.normal_array[i]
movsd
movsd
mov dword[edi],0.0 ;context.current_normal.W = 0.0f
@@:
bt dword[states],3 ;2^3=TEXCOORD_ARRAY
jnc @f
mov esi,[edx+GLContext.texcoord_array_size]
mov [size],esi
add esi,[edx+GLContext.texcoord_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.texcoord_array] ;esi = &context.texcoord_array[i]
mov edi,edx
add edi,GLContext.current_tex_coord
movsd ;context.current_tex_coord.X = ccontext.texcoord_array[i]
movsd
cmp dword[size],2
jle .e3
movsd
jmp .e4
.e3:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
.e4:
cmp dword[size],3
jle .e5
movsd
jmp @f
.e5:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
@@:
bt dword[states],0 ;2^0=VERTEX_ARRAY
jnc @f
mov esi,[edx+GLContext.vertex_array_size]
mov [size],esi
add esi,[edx+GLContext.vertex_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.vertex_array] ;esi = &context.vertex_array[i]
mov edi,ebp
sub edi,28 ;edi = &p[1]
movsd ;p[1].f = context.vertex_array[i]
movsd
cmp dword[size],2
jle .e6
movsd
jmp .e7
.e6:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
jmp .e8 ;и 4-й тоже ставим по умолчанию
.e7:
cmp dword[size],3
jle .e8
movsd
sub edi,20 ;edi=&p[0]
jmp .e9
.e8:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
sub edi,16 ;edi=&p[0]
.e9:
stdcall glopVertex, edx,edi
@@:
inc dword[ii] inc dword[ii]
jmp .cycle_0 jmp .cycle_0
.cycle_0_end: .cycle_0_end:
mov eax,ebp lea eax,[ebp-32] ;=sizeof(dd)*8
sub eax,32 ;=sizeof(dd)*8
stdcall glopEnd, edx,eax stdcall glopEnd, edx,eax
popad popad
ret ret
endp endp
;input:
; edx - GLContext
idx equ ebp-44
states equ ebp-40
a_size equ ebp-36
align 4
CopyArrayElementByIndex:
bt dword[states],1 ;2^1=COLOR_ARRAY
jnc @f
mov esi,[edx+GLContext.color_array_size]
mov [a_size],esi
add esi,[edx+GLContext.color_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.color_array] ;esi = &context.color_array[i]
lea edi,[ebp-28] ;edi = &p[1]
mov ebx,[esi+8]
mov [edi],ebx ;p[1].f = context.color_array[i+2]
mov ebx,[esi+4]
mov [edi+4],ebx ;p[2].f = context.color_array[i+1]
mov ebx,[esi]
mov [edi+8],ebx ;p[3].f = context.color_array[i]
add edi,12
cmp dword[a_size],3
jle .e1
add esi,12
movsd
jmp .e2
.e1:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
.e2:
lea edi,[ebp-32] ;edi = &p[0]
lea ebx,[ebp-12] ;ebp-12 = &p[5]
push ebx
add ebx,4 ;ebp-8 = &p[6]
push ebx
add ebx,4 ;ebp-4 = &p[7]
push ebx
stdcall RGBFtoRGBI,[edi+12],[edi+8],[edi+4] ;call: r,g,b,&p[7],&p[6],&p[5]
stdcall glopColor, edx,edi ;(context, p(op,rf,gf,bf,af,ri,gi,bi))
@@:
bt dword[states],2 ;2^2=NORMAL_ARRAY
jnc @f
mov esi,[edx+GLContext.normal_array_stride]
add esi,3
imul esi,[idx] ;esi = idx * (3 + context.normal_array_stride)
shl esi,2
add esi,[edx+GLContext.normal_array] ;esi = &context.normal_array[ idx * (3 + context.normal_array_stride) ]
lea edi,[edx+GLContext.current_normal]
movsd ;context.current_normal.X = context.normal_array[i]
movsd
movsd
mov dword[edi],0.0 ;context.current_normal.W = 0.0f
@@:
bt dword[states],3 ;2^3=TEXCOORD_ARRAY
jnc @f
mov esi,[edx+GLContext.texcoord_array_size]
mov [a_size],esi
add esi,[edx+GLContext.texcoord_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.texcoord_array] ;esi = &context.texcoord_array[i]
lea edi,[edx+GLContext.current_tex_coord]
movsd ;context.current_tex_coord.X = ccontext.texcoord_array[i]
movsd
cmp dword[a_size],2
jle .e3
movsd
jmp .e4
.e3:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
.e4:
cmp dword[a_size],3
jle .e5
movsd
jmp @f
.e5:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
@@:
bt dword[states],0 ;2^0=VERTEX_ARRAY
jnc @f
mov esi,[edx+GLContext.vertex_array_size]
mov [a_size],esi
add esi,[edx+GLContext.vertex_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.vertex_array] ;esi = &context.vertex_array[i]
lea edi,[ebp-28] ;edi = &p[1]
movsd ;p[1].f = context.vertex_array[i]
movsd
cmp dword[a_size],2
jle .e6
movsd
jmp .e7
.e6:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
jmp .e8 ;и 4-й тоже ставим по умолчанию
.e7:
cmp dword[a_size],3
jle .e8
movsd
sub edi,20 ;edi=&p[0]
jmp .e9
.e8:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
sub edi,16 ;edi=&p[0]
.e9:
stdcall glopVertex, edx,edi
@@:
ret
purge idx
purge states
purge a_size
align 4 align 4
proc glDrawElements uses eax, mode:dword, count:dword, type:dword, indices:dword proc glDrawElements uses eax, mode:dword, count:dword, type:dword, indices:dword
locals locals
@@ -488,8 +374,7 @@ endl
mov eax,[indices] mov eax,[indices]
mov dword[p+16],eax mov dword[p+16],eax
mov eax,ebp lea eax,[ebp-20] ;=sizeof(dd)*5
sub eax,20 ;=sizeof(dd)*5
stdcall gl_add_op,eax stdcall gl_add_op,eax
ret ret
endp endp
@@ -533,8 +418,7 @@ endl
;assert(0); ;assert(0);
.end_f: .end_f:
mov eax,ebp lea eax,[ebp-8] ;=sizeof(dd)*2
sub eax,8 ;=sizeof(dd)*2
stdcall gl_add_op,eax stdcall gl_add_op,eax
ret ret
endp endp
@@ -578,8 +462,7 @@ endl
;assert(0); ;assert(0);
.end_f: .end_f:
mov eax,ebp lea eax,[ebp-8] ;=sizeof(dd)*2
sub eax,8 ;=sizeof(dd)*2
stdcall gl_add_op,eax stdcall gl_add_op,eax
ret ret
endp endp
@@ -612,8 +495,7 @@ endl
mov eax,[pointer] mov eax,[pointer]
mov dword[p+12],eax mov dword[p+12],eax
mov eax,ebp lea eax,[ebp-16] ;=sizeof(dd)*4
sub eax,16 ;=sizeof(dd)*4
stdcall gl_add_op,eax stdcall gl_add_op,eax
ret ret
endp endp
@@ -646,8 +528,7 @@ endl
mov eax,[pointer] mov eax,[pointer]
mov dword[p+12],eax mov dword[p+12],eax
mov eax,ebp lea eax,[ebp-16] ;=sizeof(dd)*4
sub eax,16 ;=sizeof(dd)*4
stdcall gl_add_op,eax stdcall gl_add_op,eax
ret ret
endp endp
@@ -676,8 +557,7 @@ endl
mov eax,[pointer] mov eax,[pointer]
mov dword[p+8],eax mov dword[p+8],eax
mov eax,ebp lea eax,[ebp-12] ;=sizeof(dd)*3
sub eax,12 ;=sizeof(dd)*3
stdcall gl_add_op,eax stdcall gl_add_op,eax
ret ret
endp endp
@@ -710,8 +590,7 @@ endl
mov eax,[pointer] mov eax,[pointer]
mov dword[p+12],eax mov dword[p+12],eax
mov eax,ebp lea eax,[ebp-16] ;=sizeof(dd)*4
sub eax,16 ;=sizeof(dd)*4
stdcall gl_add_op,eax stdcall gl_add_op,eax
ret ret
endp endp

View File

@@ -21,7 +21,7 @@ proc gl_transform_to_viewport uses eax ebx ecx, context:dword,v:dword
fmul st0,st1 fmul st0,st1
fmul dword[eax+GLContext.viewport+GLViewport.scale+offs_X] fmul dword[eax+GLContext.viewport+GLViewport.scale+offs_X]
fadd dword[eax+GLContext.viewport+GLViewport.trans+offs_X] fadd dword[eax+GLContext.viewport+GLViewport.trans+offs_X]
fistp dword[ebx+GLVertex.zp] ;v.zp.x = st0, st0 = st1 fistp dword[ebx+GLVertex.zp+ZBufferPoint.x] ;v.zp.x = st0, st0 = st1
fld dword[ebx+GLVertex.pc+offs_Y] ;st0 = v.pc.Y fld dword[ebx+GLVertex.pc+offs_Y] ;st0 = v.pc.Y
fmul st0,st1 fmul st0,st1
@@ -62,14 +62,14 @@ align 4
je @f je @f
mov eax,[eax+GLContext.current_texture] ;eax = &context.current_texture mov eax,[eax+GLContext.current_texture] ;eax = &context.current_texture
mov eax,[eax] ;eax = context.current_texture mov eax,[eax] ;eax = context.current_texture
;[eax+offs_text_images] = im = &context.current_texture.images[0] ;[eax+GLTexture.images] = im = &context.current_texture.images[0]
fild dword[eax+offs_text_images+offs_imag_s_bound] fild dword[eax+GLTexture.images+GLImage.s_bound]
fmul dword[ebx+GLVertex.tex_coord+offs_X] fmul dword[ebx+GLVertex.tex_coord+offs_X]
fistp dword[ebx+GLVertex.zp+ZBufferPoint.s] fistp dword[ebx+GLVertex.zp+ZBufferPoint.s]
;v.zp.s=(int)(v.tex_coord.X * im.s_bound) ;v.zp.s=(int)(v.tex_coord.X * im.s_bound)
fild dword[eax+offs_text_images+offs_imag_t_bound] fild dword[eax+GLTexture.images+GLImage.t_bound]
fmul dword[ebx+GLVertex.tex_coord+offs_Y] fmul dword[ebx+GLVertex.tex_coord+offs_Y]
fistp dword[ebx+GLVertex.zp+ZBufferPoint.t] fistp dword[ebx+GLVertex.zp+ZBufferPoint.t]
;v.zp.t=(int)(v.tex_coord.Y * im.t_bound) ;v.zp.t=(int)(v.tex_coord.Y * im.t_bound)
@@ -138,12 +138,12 @@ macro interpolate q, p0, p1, t
{ {
fld dword[t] fld dword[t]
; интерполяция по координатам ; interpolation by coordinates
fld dword[p1+GLVertex.pc] fld dword[p1+GLVertex.pc+offs_X]
fsub dword[p0+GLVertex.pc] fsub dword[p0+GLVertex.pc+offs_X]
fmul st0,st1 fmul st0,st1
fadd dword[p0+GLVertex.pc] fadd dword[p0+GLVertex.pc+offs_X]
fstp dword[q+GLVertex.pc] ;q.pc.X = p0.pc.X + (p1.pc.X - p0.pc.X) * t fstp dword[q+GLVertex.pc+offs_X] ;q.pc.X = p0.pc.X + (p1.pc.X - p0.pc.X) * t
fld dword[p1+GLVertex.pc+offs_Y] fld dword[p1+GLVertex.pc+offs_Y]
fsub dword[p0+GLVertex.pc+offs_Y] fsub dword[p0+GLVertex.pc+offs_Y]
@@ -163,7 +163,7 @@ macro interpolate q, p0, p1, t
fadd dword[p0+GLVertex.pc+offs_W] fadd dword[p0+GLVertex.pc+offs_W]
fstp dword[q+GLVertex.pc+offs_W] fstp dword[q+GLVertex.pc+offs_W]
; интерполяция по цвету ; color interpolation
fld dword[p1+GLVertex.color] fld dword[p1+GLVertex.color]
fsub dword[p0+GLVertex.color] fsub dword[p0+GLVertex.color]
fmul st0,st1 fmul st0,st1
@@ -228,7 +228,7 @@ align 4
fstsw ax fstsw ax
sahf sahf
jae .r1_f1 jae .r1_f1
fstp dword[ebx] ;if (t<*tmin) *tmax=t fstp dword[ebx] ;if (t<*tmax) *tmax=t
jmp .r1 jmp .r1
align 4 align 4
.els_1: ;else if (num>0) .els_1: ;else if (num>0)
@@ -1028,9 +1028,11 @@ if PROFILE eq 1
end if end if
mov eax,[edx+GLContext.current_texture] mov eax,[edx+GLContext.current_texture]
mov eax,[eax] ;переход по указателю mov eax,[eax] ;переход по указателю
;так как offs_text_images+offs_imag_pixmap = 0 то context.current_texture.images[0].pixmap = [eax] stdcall ZB_setTexture, [edx+GLContext.zb],\
stdcall ZB_setTexture, [edx+GLContext.zb], [eax],\ [eax+GLTexture.images+GLImage.pixmap],\
[eax+offs_imag_s_bound],[eax+offs_imag_t_bound],[eax+offs_imag_xsize_log2] [eax+GLTexture.images+GLImage.s_bound],\
[eax+GLTexture.images+GLImage.t_bound],\
[eax+GLTexture.images+GLImage.xsize_log2]
mov eax,[p0] mov eax,[p0]
add eax,GLVertex.zp add eax,GLVertex.zp
push ecx push ecx

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Gears - 3D gear wheels
; Copyright (C) 2014-2025 KolibriOS team
use32 use32
org 0 org 0
db 'MENUET01' db 'MENUET01'
@@ -8,6 +12,7 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc' include '../../../../../KOSfuncs.inc'
include '../../../../../load_lib.mac' include '../../../../../load_lib.mac'
include '../../../../../dll.inc' include '../../../../../dll.inc'
include '../kosgl.inc'
include '../opengl_const.inc' include '../opengl_const.inc'
include 'fps.inc' include 'fps.inc'
@@ -18,7 +23,7 @@ macro matr_cell c_funct,c_param,funct,param, dia
dia dword[esp-4*(c_param*(c_funct-funct)+(1+c_param-param))] dia dword[esp-4*(c_param*(c_funct-funct)+(1+c_param-param))]
} }
;Макрос для параметров типа double (8 байт) ;Macro for double type parameters (8 bytes)
macro glpush GLDoubleVar { macro glpush GLDoubleVar {
push dword[GLDoubleVar+4] push dword[GLDoubleVar+4]
push dword[GLDoubleVar] push dword[GLDoubleVar]
@@ -83,8 +88,7 @@ red_win:
mov ebx,200 mov ebx,200
@@: @@:
sub ebx,10 sub ebx,10
stdcall reshape, ebx,eax stdcall reshape, ebx,eax
.end0:
align 16 align 16
still: still:
@@ -165,8 +169,7 @@ draw_window:
;Title ;Title
mcall SF_DRAW_TEXT,(338 shl 16)+4,0xc0c0c0,fps, fps.end-fps mcall SF_DRAW_TEXT,(338 shl 16)+4,0xc0c0c0,fps, fps.end-fps
mcall SF_DRAW_TEXT,(8 shl 16)+4,0xc0c0c0,title3,title3.end-title3 mcall SF_DRAW_TEXT,(8 shl 16)+4,0xc0c0c0,title2,title2.end-title2
;mcall SF_DRAW_TEXT,(180 shl 16)+4,0xc0c0c0,title2,title2.end-title2
mcall SF_REDRAW,SSF_END_DRAW mcall SF_REDRAW,SSF_END_DRAW
popad popad
@@ -247,9 +250,7 @@ button:
align 4 align 4
title1: db 'TinyGL in KolibriOS' title1: db 'TinyGL in KolibriOS'
.end: db 0 .end: db 0
;title2: db 'F full screen' title2: db 'ESC - exit, Arrow keys - rotate, +/- zoom, P - pause'
;.end: db 0
title3: db 'ESC - exit, Arrow keys - rotate, +/- zoom, P - pause'
.end: db 0 .end: db 0
fps: db 'FPS:' fps: db 'FPS:'
.end: db 0 .end: db 0
@@ -922,8 +923,7 @@ name_tgl db 'tinygl.obj',0
align 16 align 16
i_end: i_end:
ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext ctx1 TinyGLContext
;sizeof.TinyGLContext = 28
procinfo process_information procinfo process_information
cur_dir_path rb 4096 cur_dir_path rb 4096
library_path rb 4096 library_path rb 4096

View File

@@ -12,6 +12,15 @@ include '../opengl_const.inc'
@use_library @use_library
;Constants describing the house.3ds file (obtained using the info_3ds program)
VERTICES_OFFSET = 0x33 ;offset along which the coordinates of the vertices go
FACES_COUNT = 0x162 ;number of faces
FACES_OFFSET = 0x96b ;offset along which information about the edges goes
HOUSE_FILE_SIZE = 5297
txt_error_file_size db '"House.3ds file size does not match" -tE',0
align 4 align 4
start: start:
load_library name_tgl, library_path, system_path, import_tinygl load_library name_tgl, library_path, system_path, import_tinygl
@@ -20,20 +29,20 @@ start:
mcall SF_SET_EVENTS_MASK,0x27 mcall SF_SET_EVENTS_MASK,0x27
;заполняем массив индексов из файла house.3ds (который вшит внутрь данной программы) ;we fill the array of indices from the house.3ds file (which is embedded inside this program)
mov esi,house_3ds mov esi,house_3ds
add esi,0x1798 ;смещение по которому идет информация о гранях в файле 3ds (получено с использованием программы info_3ds) add esi,FACES_OFFSET
mov edi,Indices mov edi,Indices
mov eax,0x1a6 ;число граней в файле 3ds (получено с использованием программы info_3ds) mov eax,FACES_COUNT
@@: @@:
movsd movsd
movsw movsw
add esi,2 ;пропускаем свойства грани add esi,2 ;skip face properties
dec eax dec eax
or eax,eax or eax,eax
jnz @b jnz @b
;первоначальные настройки контекста tinygl ;tinygl initial context settings
stdcall [kosglMakeCurrent], 10,10,400,350,ctx1 stdcall [kosglMakeCurrent], 10,10,400,350,ctx1
stdcall [glEnable], GL_DEPTH_TEST stdcall [glEnable], GL_DEPTH_TEST
stdcall [glClearColor], 0.0,0.0,0.0,0.0 stdcall [glClearColor], 0.0,0.0,0.0,0.0
@@ -48,13 +57,13 @@ red_win:
align 4 align 4
still: still:
mcall SF_WAIT_EVENT mcall SF_WAIT_EVENT
cmp al,1 cmp al,EV_REDRAW
jz red_win jz red_win
cmp al,2 cmp al,EV_KEY
jz key jz key
cmp al,3 cmp al,EV_BUTTON
jz button jz button
jmp still jmp still
align 4 align 4
draw_window: draw_window:
@@ -140,29 +149,34 @@ caption db 'Test opengl 1.1 arrays, [Esc] - exit, [<-],[->],[Up],[Down] - rotate
align 4 align 4
draw_3d: draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;clear the color and depth buffer
mov eax,house_3ds.end-house_3ds
cmp eax,HOUSE_FILE_SIZE
je @f
notify_window_run txt_error_file_size
ret
@@:
call [glPushMatrix] call [glPushMatrix]
;масштаб и повороты ;scale and rotations
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale] stdcall [glScalef], [scale], [scale], [scale]
stdcall [glRotatef], [angle_z],0.0,0.0,1.0 stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0 stdcall [glRotatef], [angle_x],1.0,0.0,0.0
;рисование через индексный массив ;drawing via index array
mov eax,house_3ds ;начало внедренного файла 3ds mov eax,house_3ds ;start of embedded 3ds file
add eax,0xeb ;смещение по которому идут координаты вершин (получено с использованием программы info_3ds) add eax,VERTICES_OFFSET
stdcall [glVertexPointer], 3, GL_FLOAT, 0, eax ;задаем массив для вершин, 3 - число координат для одной вершины stdcall [glVertexPointer], 3, GL_FLOAT, 0, eax ;we set an array for the vertices, 3 is the number of coordinates for one vertex
stdcall [glEnableClientState], GL_VERTEX_ARRAY ;включаем режим рисования вершин stdcall [glEnableClientState], GL_VERTEX_ARRAY ;turn on the vertex drawing mode
stdcall [glDrawElements], GL_TRIANGLES, 0x1a6*3, GL_UNSIGNED_SHORT, Indices ;mode, count, type, *indices stdcall [glDrawElements], GL_TRIANGLES, FACES_COUNT*3, GL_UNSIGNED_SHORT, Indices ;mode, count, type, *indices
stdcall [glDisableClientState], GL_VERTEX_ARRAY ;отключаем режим рисования вершин stdcall [glDisableClientState], GL_VERTEX_ARRAY ;disable vertex drawing mode
call [glPopMatrix] call [glPopMatrix]
ret ret
align 4 align 4
scale dd 0.0065 ;начальный масштаб (в идеальном случае должен вычислятся, но для даного примера подобран в ручную на глаз) scale dd 0.07 ;initial scale (ideally should be calculated)
delt_sc dd 0.0005 delt_sc dd 0.0005
angle_z dd 90.0 angle_z dd 90.0
angle_y dd 90.0 angle_y dd 90.0
@@ -170,10 +184,11 @@ angle_x dd 0.0
delt_size dd 3.0 delt_size dd 3.0
align 4 align 4
house_3ds: ;внедряем файл внутрь программы (в идеальном случае должен открыватся через окно диалога, но для облегчения примера вшит внутрь) house_3ds: ;we embed the file inside the program (ideally it should open through a dialog box)
file '../../../../../demos/view3ds/3ds_objects/House.3ds' file '../../../../../demos/view3ds/3ds_objects/House.3ds'
.end:
align 4 align 4
Indices rb 0x1a6*6 ;0x1a6 - число граней, на каждую грань по 3 точки, индекс точки 2 байта Indices rb FACES_COUNT*6 ;3 points per edge, point index 2 bytes
;-------------------------------------------------- ;--------------------------------------------------
align 4 align 4

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Test glu0 - gluSphere functionality testing
; Copyright (C) 2014-2025 KolibriOS team
use32 use32
org 0 org 0
db 'MENUET01' db 'MENUET01'
@@ -8,6 +12,7 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc' include '../../../../../KOSfuncs.inc'
include '../../../../../load_lib.mac' include '../../../../../load_lib.mac'
include '../../../../../dll.inc' include '../../../../../dll.inc'
include '../kosgl.inc'
include '../opengl_const.inc' include '../opengl_const.inc'
@use_library @use_library
@@ -36,13 +41,13 @@ red_win:
align 16 align 16
still: still:
mcall SF_WAIT_EVENT mcall SF_WAIT_EVENT
cmp al,1 cmp al,EV_REDRAW
jz red_win jz red_win
cmp al,2 cmp al,EV_KEY
jz key jz key
cmp al,3 cmp al,EV_BUTTON
jz button jz button
jmp still jmp still
align 4 align 4
draw_window: draw_window:
@@ -131,9 +136,6 @@ button:
mcall SF_TERMINATE_PROCESS mcall SF_TERMINATE_PROCESS
align 4
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4 align 4
draw_3d: draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
@@ -141,25 +143,37 @@ stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим б
stdcall [glColor3f], 1.0, 1.0, 0.0 stdcall [glColor3f], 1.0, 1.0, 0.0
call [glPushMatrix] call [glPushMatrix]
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale] stdcall [glScalef], [scale], [scale], [scale]
stdcall [glRotatef], [angle_z],0.0,0.0,1.0 stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [gluSphere], [qObj], 1.0, 16,16 push 16
push 16
glpush rad1
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 1.0, 0.0, 0.0 stdcall [glColor3f], 1.0, 0.0, 0.0
stdcall [glTranslatef], -1.6,0.0,0.0 stdcall [glTranslatef], -1.6,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 8,8 push 8
push 8
glpush rad2
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 0.0, 0.0, 1.0 stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [glTranslatef], 3.2,0.0,0.0 stdcall [glTranslatef], 3.2,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 8,8 push 8
push 8
glpush rad2
stdcall [gluSphere], [qObj]
call [glPopMatrix] call [glPopMatrix]
ret ret
align 4 align 4
qObj dd 0 caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.55
scale dd 0.4 scale dd 0.4
delt_sc dd 0.05 delt_sc dd 0.05
@@ -173,13 +187,17 @@ import_tinygl:
macro E_LIB n macro E_LIB n
{ {
if defined sz_#n
n dd sz_#n n dd sz_#n
end if
} }
include '../export.inc' include '../export.inc'
dd 0,0 dd 0,0
macro E_LIB n macro E_LIB n
{ {
if used n
sz_#n db `n,0 sz_#n db `n,0
end if
} }
include '../export.inc' include '../export.inc'
@@ -190,7 +208,8 @@ name_tgl db 'tinygl.obj',0
align 16 align 16
i_end: i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28 ctx1 TinyGLContext
qObj dd 0
cur_dir_path rb 4096 cur_dir_path rb 4096
library_path rb 4096 library_path rb 4096
rb 2048 rb 2048

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Test glu1 - gluCylinder and gluDisk functionality testing
; Copyright (C) 2014-2025 KolibriOS team
use32 use32
org 0 org 0
db 'MENUET01' db 'MENUET01'
@@ -8,24 +12,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc' include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc' include '../../../../../load_img.inc'
include '../../../../../load_lib.mac' include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc' include '../opengl_const.inc'
include '../zbuffer.inc' include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc' include '../../../../../develop/info3ds/info_fun_float.inc'
3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 500
3d_wnd_h equ 400
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load @use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3 IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
;Макрос для параметров типа double (8 байт)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
align 4 align 4
start: start:
load_libraries l_libs_start,l_libs_end load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки ;checking how successfully the libraries were loaded
mov ebp,lib_0 mov ebp,lib_0
.test_lib_open: .test_lib_open:
cmp dword [ebp+ll_struc_size-4],0 cmp dword [ebp+ll_struc_size-4],0
@@ -39,16 +43,24 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27 mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1 finit
fild dword[buf_ogl.w]
fdiv dword[fl_180]
fstp dword[angle_dzm]
fild dword[buf_ogl.h]
fdiv dword[fl_180]
fstp dword[angle_dym]
stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric] call [gluNewQuadric]
mov [qObj],eax mov [qObj],eax
stdcall [glClearColor], 0.25,0.25,0.25,0.0 stdcall [glClearColor], 0.25,0.25,0.25,0.0
stdcall [glShadeModel], GL_SMOOTH stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf] mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax mov dword[buf_ogl],eax
@@ -60,6 +72,15 @@ load_libraries l_libs_start,l_libs_end
stdcall [buf2d_convert_text_matrix], buf_1 stdcall [buf2d_convert_text_matrix], buf_1
load_image_file 'toolb_1.png', image_data_toolbar load_image_file 'toolb_1.png', image_data_toolbar
fld dword[scale]
stdcall update_number, txt_scale.v
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
fld dword[angle_z]
stdcall update_number, txt_angle_z.v
call SetLight
call draw_3d call draw_3d
align 4 align 4
@@ -69,19 +90,30 @@ red_win:
align 4 align 4
still: still:
mcall SF_WAIT_EVENT mcall SF_WAIT_EVENT
cmp al,1 cmp al,EV_REDRAW
jz red_win jz red_win
cmp al,2 cmp al,EV_KEY
jz key jz key
cmp al,3 cmp al,EV_BUTTON
jz button jz button
jmp still cmp al,EV_MOUSE
jne still
call mouse
jmp still
align 4 align 4
draw_window: draw_window:
pushad pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button] mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;вершины вкл. mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;вершины вкл.
@@ -128,11 +160,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
jmp still jmp still
@@ -143,11 +171,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
jmp still jmp still
@@ -158,11 +182,7 @@ key:
fld dword[angle_z] fld dword[angle_z]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_z] fst dword[angle_z]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_z.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
jmp still jmp still
@@ -173,11 +193,7 @@ key:
fld dword[angle_z] fld dword[angle_z]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_z] fst dword[angle_z]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_z.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
;jmp still ;jmp still
@@ -220,6 +236,104 @@ button:
stdcall mem.Free,[image_data_toolbar] stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS mcall SF_TERMINATE_PROCESS
align 4
mouse:
push eax ebx
mcall SF_MOUSE_GET,SSF_BUTTON_EXT
bt eax,0
jnc .end_m
;mouse l. but. move
cmp dword[mouse_drag],1
jne .end_m
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
sar ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jg @f
mov ebx,3d_wnd_l
@@:
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jle @f
mov ebx,3d_wnd_w
@@:
movsx eax,ax ;mouse.y
cmp eax,3d_wnd_t
jg @f
mov eax,3d_wnd_t
@@:
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jle @f
mov eax,3d_wnd_h
@@:
finit
fild dword[mouse_y]
mov [mouse_y],eax
fisub dword[mouse_y]
fdiv dword[angle_dzm] ;if the cursor moves along the y-axis (up or down)
fadd dword[angle_z]
fst dword[angle_z]
stdcall update_number, txt_angle_z.v
fild dword[mouse_x]
mov [mouse_x],ebx
fisub dword[mouse_x]
fdiv dword[angle_dym] ;if the cursor moves along the z-axis (left or right)
fadd dword[angle_y]
fst dword[angle_y]
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
jmp .end_d
.end_m:
bt eax,16
jnc @f
;mouse l. but. up
mov dword[mouse_drag],0
jmp .end_d
@@:
bt eax,8
jnc .end_d
;mouse l. but. press
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
sar ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jl .end_d
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jg .end_d
movsx eax,ax ;mouse.y
cmp eax,3d_wnd_t
jl .end_d
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jg .end_d
mov dword[mouse_drag],1
mov dword[mouse_x],ebx
mov dword[mouse_y],eax
.end_d:
pop ebx eax
ret
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4 align 4
but_st_point: but_st_point:
stdcall [gluQuadricDrawStyle], [qObj],GLU_POINT stdcall [gluQuadricDrawStyle], [qObj],GLU_POINT
@@ -255,11 +369,7 @@ but_zoom_p:
fld dword[sc_max] fld dword[sc_max]
@@: @@:
fst dword[scale] fst dword[scale]
mov word[NumberSymbolsAD],3 stdcall update_number, txt_scale.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
ret ret
@@ -278,50 +388,54 @@ but_zoom_m:
fld dword[sc_min] fld dword[sc_min]
@@: @@:
fst dword[scale] fst dword[scale]
mov word[NumberSymbolsAD],3 stdcall update_number, txt_scale.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
ret ret
align 4
caption db 'Test gluCylinder, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.55
rad3 dq 0.15
hei1 dq 2.0 ;высота цилиндра
hei2 dq 1.25
align 4 align 4
draw_3d: draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix] call [glPushMatrix]
call SetLight
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale] stdcall [glScalef], [scale], [scale], [scale]
stdcall [glScalef], 1.0, 1.0, 0.5
stdcall [glColor3f], 1.0, 1.0, 0.0 stdcall [glColor3f], 1.0, 1.0, 0.0
stdcall [glRotatef], [angle_z],0.0,0.0,1.0 stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glTranslatef], 0.0,0.0,-1.0 ;опускаем цилинды вниз stdcall [glTranslatef], 0.0,0.0,-1.0 ;опускаем цилинды вниз
stdcall [gluCylinder], [qObj], rad1,rad1,hei1, 32,8 push 8
push 32
glpush hei1
glpush rad1
glpush rad1
stdcall [gluCylinder], [qObj]
stdcall [glTranslatef], 0.0,0.0,2.0
push 4
push 32
glpush rad1
glpush rad3
stdcall [gluDisk], [qObj]
stdcall [glColor3f], 1.0, 0.0, 0.0 stdcall [glColor3f], 1.0, 0.0, 0.0
stdcall [glTranslatef], -1.6,0.0,0.0 stdcall [glTranslatef], -1.6,0.0,-2.0
stdcall [gluCylinder], [qObj], rad2,rad3,hei2, 16,8 push 8
push 16
glpush hei2
glpush rad3
glpush rad2
stdcall [gluCylinder], [qObj]
stdcall [glColor3f], 0.0, 0.0, 1.0 stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [glTranslatef], 3.2,0.0,0.0 stdcall [glTranslatef], 3.2,0.0,0.0
stdcall [gluCylinder], [qObj], rad2,rad3,hei2, 16,8 push 8
push 16
glpush hei2
glpush rad3
glpush rad2
stdcall [gluCylinder], [qObj]
call [glPopMatrix] call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00 stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
@@ -347,10 +461,22 @@ SetLight:
stdcall [glEnable],GL_LIGHT0 stdcall [glEnable],GL_LIGHT0
ret ret
scale dd 0.4 ;начальный масштаб align 4
sc_delt dd 0.05 ;изменение масштаба при нажатии caption db 'Test gluCylinder and gluDisk, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
sc_min dd 0.1 ;минимальный масштаб
sc_max dd 1.1 ;максимальный масштаб align 4
rad1 dq 1.0
rad2 dq 0.55
rad3 dq 0.15
hei1 dq 2.0 ;высота цилиндра
hei2 dq 1.25
fl_180 dd 180.0
scale dd 0.4 ;initial scale
sc_delt dd 0.05 ;zoom on click
sc_min dd 0.1 ;minimum scale
sc_max dd 1.1 ;maximum scale
angle_z dd -45.0 angle_z dd -45.0
angle_y dd -150.0 angle_y dd -150.0
delt_size dd 3.0 delt_size dd 3.0
@@ -369,13 +495,17 @@ import_tinygl:
macro E_LIB n macro E_LIB n
{ {
if defined sz_#n
n dd sz_#n n dd sz_#n
end if
} }
include '../export.inc' include '../export.inc'
dd 0,0 dd 0,0
macro E_LIB n macro E_LIB n
{ {
if used n
sz_#n db `n,0 sz_#n db `n,0
end if
} }
include '../export.inc' include '../export.inc'
@@ -493,28 +623,23 @@ lib_name_2 db 'libimg.obj',0
txt_scale: txt_scale:
db 'Scale: ' db 'Scale: '
.v: .v: rb 11
db 0
rb 10
txt_angle_z: txt_angle_z:
db 'Rotate z: ' db 'Rotate z: '
.v: .v: rb 11
db 0
rb 10
txt_angle_y: txt_angle_y:
db 'Rotate y: ' db 'Rotate y: '
.v: .v: rb 11
db 0
rb 10
align 4 align 4
buf_ogl: buf_ogl:
dd 0 ;указатель на буфер изображения dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top dw 3d_wnd_l ;+4 left
.w: dd 400 .t: dw 3d_wnd_t ;+6 top
.h: dd 350 .w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel dd 0,24 ;+16 color,bit in pixel
align 4 align 4
@@ -533,9 +658,14 @@ l_libs_end:
align 4 align 4
i_end: i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28 ctx1 TinyGLContext
image_data_toolbar dd 0 image_data_toolbar dd 0
qObj dd 0 qObj dd 0
mouse_drag dd 0 ;scene rotation mode based on mouse cursor movement
mouse_x dd 0
mouse_y dd 0
angle_dzm dd 0 ;~ 3d_wnd_w/180 - adding scene rotation angles when rotating the mouse
angle_dym dd 0 ;~ 3d_wnd_h/180
run_file_70 FileInfoBlock run_file_70 FileInfoBlock
sc system_colors sc system_colors
align 16 align 16

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Test glu2 - gluSphere functionality testing
; Copyright (C) 2015-2025 KolibriOS team
use32 use32
org 0 org 0
db 'MENUET01' db 'MENUET01'
@@ -8,24 +12,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc' include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc' include '../../../../../load_img.inc'
include '../../../../../load_lib.mac' include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc' include '../opengl_const.inc'
include '../zbuffer.inc' include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc' include '../../../../../develop/info3ds/info_fun_float.inc'
3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 500
3d_wnd_h equ 400
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load @use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3 IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
;Макрос для параметров типа double (8 байт)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
align 4 align 4
start: start:
load_libraries l_libs_start,l_libs_end load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки ;checking how successfully the libraries were loaded
mov ebp,lib_0 mov ebp,lib_0
.test_lib_open: .test_lib_open:
cmp dword [ebp+ll_struc_size-4],0 cmp dword [ebp+ll_struc_size-4],0
@@ -39,16 +43,24 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27 mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1 finit
fild dword[buf_ogl.w]
fdiv dword[fl_180]
fstp dword[angle_dzm]
fild dword[buf_ogl.h]
fdiv dword[fl_180]
fstp dword[angle_dym]
stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric] call [gluNewQuadric]
mov [qObj],eax mov [qObj],eax
stdcall [glClearColor], 0.25,0.25,0.25,0.0 stdcall [glClearColor], 0.25,0.25,0.25,0.0
stdcall [glShadeModel], GL_SMOOTH stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf] mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax mov dword[buf_ogl],eax
@@ -60,6 +72,15 @@ load_libraries l_libs_start,l_libs_end
stdcall [buf2d_convert_text_matrix], buf_1 stdcall [buf2d_convert_text_matrix], buf_1
load_image_file 'toolb_1.png', image_data_toolbar load_image_file 'toolb_1.png', image_data_toolbar
fld dword[scale]
stdcall update_number, txt_scale.v
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
fld dword[angle_z]
stdcall update_number, txt_angle_z.v
call SetLight
call draw_3d call draw_3d
align 4 align 4
@@ -69,19 +90,30 @@ red_win:
align 4 align 4
still: still:
mcall SF_WAIT_EVENT mcall SF_WAIT_EVENT
cmp al,1 cmp al,EV_REDRAW
jz red_win jz red_win
cmp al,2 cmp al,EV_KEY
jz key jz key
cmp al,3 cmp al,EV_BUTTON
jz button jz button
jmp still cmp al,EV_MOUSE
jne still
call mouse
jmp still
align 4 align 4
draw_window: draw_window:
pushad pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button] mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;вершины вкл. mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;вершины вкл.
@@ -128,11 +160,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
jmp still jmp still
@@ -143,11 +171,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
jmp still jmp still
@@ -158,11 +182,7 @@ key:
fld dword[angle_z] fld dword[angle_z]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_z] fst dword[angle_z]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_z.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
jmp still jmp still
@@ -173,11 +193,7 @@ key:
fld dword[angle_z] fld dword[angle_z]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_z] fst dword[angle_z]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_z.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
;jmp still ;jmp still
@@ -220,6 +236,104 @@ button:
stdcall mem.Free,[image_data_toolbar] stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS mcall SF_TERMINATE_PROCESS
align 4
mouse:
push eax ebx
mcall SF_MOUSE_GET,SSF_BUTTON_EXT
bt eax,0
jnc .end_m
;mouse l. but. move
cmp dword[mouse_drag],1
jne .end_m
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
sar ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jg @f
mov ebx,3d_wnd_l
@@:
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jle @f
mov ebx,3d_wnd_w
@@:
movsx eax,ax ;mouse.y
cmp eax,3d_wnd_t
jg @f
mov eax,3d_wnd_t
@@:
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jle @f
mov eax,3d_wnd_h
@@:
finit
fild dword[mouse_y]
mov [mouse_y],eax
fisub dword[mouse_y]
fdiv dword[angle_dzm] ;if the cursor moves along the y-axis (up or down)
fadd dword[angle_z]
fst dword[angle_z]
stdcall update_number, txt_angle_z.v
fild dword[mouse_x]
mov [mouse_x],ebx
fisub dword[mouse_x]
fdiv dword[angle_dym] ;if the cursor moves along the z-axis (left or right)
fadd dword[angle_y]
fst dword[angle_y]
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
jmp .end_d
.end_m:
bt eax,16
jnc @f
;mouse l. but. up
mov dword[mouse_drag],0
jmp .end_d
@@:
bt eax,8
jnc .end_d
;mouse l. but. press
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
sar ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jl .end_d
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jg .end_d
movsx eax,ax ;mouse.y
cmp eax,3d_wnd_t
jl .end_d
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jg .end_d
mov dword[mouse_drag],1
mov dword[mouse_x],ebx
mov dword[mouse_y],eax
.end_d:
pop ebx eax
ret
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4 align 4
but_st_point: but_st_point:
stdcall [gluQuadricDrawStyle], [qObj],GLU_POINT stdcall [gluQuadricDrawStyle], [qObj],GLU_POINT
@@ -255,11 +369,7 @@ but_zoom_p:
fld dword[sc_max] fld dword[sc_max]
@@: @@:
fst dword[scale] fst dword[scale]
mov word[NumberSymbolsAD],3 stdcall update_number, txt_scale.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
ret ret
@@ -278,41 +388,40 @@ but_zoom_m:
fld dword[sc_min] fld dword[sc_min]
@@: @@:
fst dword[scale] fst dword[scale]
mov word[NumberSymbolsAD],3 stdcall update_number, txt_scale.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
ret ret
align 4
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4 align 4
draw_3d: draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix] call [glPushMatrix]
call SetLight
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale] stdcall [glScalef], [scale], [scale], [scale]
stdcall [glColor3f], 1.0, 1.0, 0.0 stdcall [glColor3f], 1.0, 1.0, 0.0
stdcall [glRotatef], [angle_z],0.0,0.0,1.0 stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [gluSphere], [qObj], 1.0, 32,32 push 32
push 32
glpush rad1
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 1.0, 0.0, 0.0 stdcall [glColor3f], 1.0, 0.0, 0.0
stdcall [glTranslatef], -1.6,0.0,0.0 stdcall [glTranslatef], -1.6,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 16,16 push 16
push 16
glpush rad2
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 0.0, 0.0, 1.0 stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [glTranslatef], 3.2,0.0,0.0 stdcall [glTranslatef], 3.2,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 16,16 push 16
push 16
glpush rad2
stdcall [gluSphere], [qObj]
call [glPopMatrix] call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00 stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
@@ -338,10 +447,19 @@ SetLight:
stdcall [glEnable],GL_LIGHT0 stdcall [glEnable],GL_LIGHT0
ret ret
scale dd 0.4 ;начальный масштаб align 4
sc_delt dd 0.05 ;изменение масштаба при нажатии caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
sc_min dd 0.1 ;минимальный масштаб
sc_max dd 1.1 ;максимальный масштаб align 4
rad1 dq 1.0
rad2 dq 0.55
fl_180 dd 180.0
scale dd 0.4 ;initial scale
sc_delt dd 0.05 ;zoom on click
sc_min dd 0.1 ;minimum scale
sc_max dd 1.1 ;maximum scale
angle_z dd 0.0 angle_z dd 0.0
angle_y dd 0.0 angle_y dd 0.0
delt_size dd 3.0 delt_size dd 3.0
@@ -360,13 +478,17 @@ import_tinygl:
macro E_LIB n macro E_LIB n
{ {
if defined sz_#n
n dd sz_#n n dd sz_#n
end if
} }
include '../export.inc' include '../export.inc'
dd 0,0 dd 0,0
macro E_LIB n macro E_LIB n
{ {
if used n
sz_#n db `n,0 sz_#n db `n,0
end if
} }
include '../export.inc' include '../export.inc'
@@ -484,28 +606,23 @@ lib_name_2 db 'libimg.obj',0
txt_scale: txt_scale:
db 'Scale: ' db 'Scale: '
.v: .v: rb 11
db 0
rb 10
txt_angle_z: txt_angle_z:
db 'Rotate z: ' db 'Rotate z: '
.v: .v: rb 11
db 0
rb 10
txt_angle_y: txt_angle_y:
db 'Rotate y: ' db 'Rotate y: '
.v: .v: rb 11
db 0
rb 10
align 4 align 4
buf_ogl: buf_ogl:
dd 0 ;указатель на буфер изображения dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top dw 3d_wnd_l ;+4 left
.w: dd 400 .t: dw 3d_wnd_t ;+6 top
.h: dd 350 .w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel dd 0,24 ;+16 color,bit in pixel
align 4 align 4
@@ -524,9 +641,14 @@ l_libs_end:
align 4 align 4
i_end: i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28 ctx1 TinyGLContext
image_data_toolbar dd 0 image_data_toolbar dd 0
qObj dd 0 qObj dd 0
mouse_drag dd 0 ;scene rotation mode based on mouse cursor movement
mouse_x dd 0
mouse_y dd 0
angle_dzm dd 0 ;~ 3d_wnd_w/180 - adding scene rotation angles when rotating the mouse
angle_dym dd 0 ;~ 3d_wnd_h/180
run_file_70 FileInfoBlock run_file_70 FileInfoBlock
sc system_colors sc system_colors
align 16 align 16

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Textures0 - example of texture mapping on a sphere and cube
; Copyright (C) 2015-2025 KolibriOS team
use32 use32
org 0 org 0
db 'MENUET01' db 'MENUET01'
@@ -8,24 +12,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc' include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc' include '../../../../../load_img.inc'
include '../../../../../load_lib.mac' include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc' include '../opengl_const.inc'
include '../zbuffer.inc' include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc' include '../../../../../develop/info3ds/info_fun_float.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load 3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 500
3d_wnd_h equ 400
;Макрос для параметров типа double (8 байт) @use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3 IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
align 4 align 4
start: start:
load_libraries l_libs_start,l_libs_end load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки ;checking how successfully the libraries were loaded
mov ebp,lib_0 mov ebp,lib_0
.test_lib_open: .test_lib_open:
cmp dword [ebp+ll_struc_size-4],0 cmp dword [ebp+ll_struc_size-4],0
@@ -39,9 +43,9 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27 mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1 stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric] call [gluNewQuadric]
mov [qObj],eax mov [qObj],eax
stdcall [gluQuadricTexture], eax,GL_TRUE stdcall [gluQuadricTexture], eax,GL_TRUE
@@ -49,7 +53,7 @@ load_libraries l_libs_start,l_libs_end
stdcall [glClearColor], 0.25,0.25,0.25,0.0 stdcall [glClearColor], 0.25,0.25,0.25,0.0
stdcall [glShadeModel], GL_SMOOTH stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf] mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax mov dword[buf_ogl],eax
@@ -63,6 +67,11 @@ load_libraries l_libs_start,l_libs_end
load_image_file 'toolb_1.png', image_data_toolbar load_image_file 'toolb_1.png', image_data_toolbar
load_image_file 'text_1.png', texture, text_w,text_h ;открытие файла текстуры load_image_file 'text_1.png', texture, text_w,text_h ;открытие файла текстуры
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
fld dword[angle_z]
stdcall update_number, txt_angle_z.v
;* Setup texturing * ;* Setup texturing *
stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
@@ -88,19 +97,27 @@ red_win:
align 4 align 4
still: still:
mcall SF_WAIT_EVENT mcall SF_WAIT_EVENT
cmp al,1 cmp al,EV_REDRAW
jz red_win jz red_win
cmp al,2 cmp al,EV_KEY
jz key jz key
cmp al,3 cmp al,EV_BUTTON
jz button jz button
jmp still jmp still
align 4 align 4
draw_window: draw_window:
pushad pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button] mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;сферы mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;сферы
@@ -144,11 +161,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -158,11 +171,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -172,11 +181,7 @@ key:
fld dword[angle_z] fld dword[angle_z]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_z] fst dword[angle_z]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_z.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -186,11 +191,7 @@ key:
fld dword[angle_z] fld dword[angle_z]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_z] fst dword[angle_z]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_z.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -227,6 +228,20 @@ button:
stdcall mem.Free,[image_data_toolbar] stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS mcall SF_TERMINATE_PROCESS
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4 align 4
but_dr_0: but_dr_0:
mov dword[dr_figure],0 mov dword[dr_figure],0
@@ -287,15 +302,12 @@ but_zoom_m:
call [kosglSwapBuffers] call [kosglSwapBuffers]
ret ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4 align 4
draw_3d: draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix] call [glPushMatrix]
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale] stdcall [glScalef], [scale], [scale], [scale]
stdcall [glRotatef], [angle_z],0.0,0.0,1.0 stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0
@@ -304,15 +316,24 @@ cmp dword[dr_figure],0
jne @f jne @f
; рисование сфер ; рисование сфер
stdcall [glColor3f], 1.0, 1.0, 0.0 stdcall [glColor3f], 1.0, 1.0, 0.0
stdcall [gluSphere], [qObj], 1.0, 32,32 push 32
push 32
glpush rad1
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 1.0, 0.0, 0.0 stdcall [glColor3f], 1.0, 0.0, 0.0
stdcall [glTranslatef], -1.6,0.0,0.0 stdcall [glTranslatef], -1.6,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 16,16 push 16
push 16
glpush rad2
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 0.0, 0.0, 1.0 stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [glTranslatef], 3.2,0.0,0.0 stdcall [glTranslatef], 3.2,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 16,16 push 16
push 16
glpush rad2
stdcall [gluSphere], [qObj]
@@: @@:
cmp dword[dr_figure],1 cmp dword[dr_figure],1
jne @f jne @f
@@ -388,6 +409,13 @@ call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,25,0xffff00 stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,25,0xffff00
ret ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.55
scale dd 0.4 ;начальный масштаб scale dd 0.4 ;начальный масштаб
sc_delt dd 0.05 ;изменение масштаба при нажатии sc_delt dd 0.05 ;изменение масштаба при нажатии
sc_min dd 0.1 ;минимальный масштаб sc_min dd 0.1 ;минимальный масштаб
@@ -410,13 +438,17 @@ import_tinygl:
macro E_LIB n macro E_LIB n
{ {
if defined sz_#n
n dd sz_#n n dd sz_#n
end if
} }
include '../export.inc' include '../export.inc'
dd 0,0 dd 0,0
macro E_LIB n macro E_LIB n
{ {
if used n
sz_#n db `n,0 sz_#n db `n,0
end if
} }
include '../export.inc' include '../export.inc'
@@ -534,28 +566,23 @@ lib_name_2 db 'libimg.obj',0
txt_scale: txt_scale:
db 'Scale: ' db 'Scale: '
.v: .v: rb 11
db 0
rb 10
txt_angle_z: txt_angle_z:
db 'Rotate z: ' db 'Rotate z: '
.v: .v: rb 11
db 0
rb 10
txt_angle_y: txt_angle_y:
db 'Rotate y: ' db 'Rotate y: '
.v: .v: rb 11
db 0
rb 10
align 4 align 4
buf_ogl: buf_ogl:
dd 0 ;указатель на буфер изображения dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top dw 3d_wnd_l ;+4 left
.w: dd 400 .t: dw 3d_wnd_t ;+6 top
.h: dd 350 .w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel dd 0,24 ;+16 color,bit in pixel
align 4 align 4
@@ -574,7 +601,7 @@ l_libs_end:
align 4 align 4
i_end: i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28 ctx1 TinyGLContext
image_data_toolbar dd 0 image_data_toolbar dd 0
dr_figure dd 0 dr_figure dd 0
qObj dd 0 qObj dd 0

View File

@@ -1,3 +1,8 @@
; SPDX-License-Identifier: GPL-2.0-only
; Textures1 - drawing the earth with and without meridians.
; Texture size 1024*512 pixels is used.
; Copyright (C) 2015-2025 KolibriOS team
use32 use32
org 0 org 0
db 'MENUET01' db 'MENUET01'
@@ -8,24 +13,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc' include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc' include '../../../../../load_img.inc'
include '../../../../../load_lib.mac' include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc' include '../opengl_const.inc'
include '../zbuffer.inc' include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc' include '../../../../../develop/info3ds/info_fun_float.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load 3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 450
3d_wnd_h equ 400
;Макрос для параметров типа double (8 байт) @use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3 IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
align 4 align 4
start: start:
load_libraries l_libs_start,l_libs_end load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки ;checking how successfully the libraries were loaded
mov ebp,lib_0 mov ebp,lib_0
.test_lib_open: .test_lib_open:
cmp dword [ebp+ll_struc_size-4],0 cmp dword [ebp+ll_struc_size-4],0
@@ -39,9 +44,9 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27 mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1 stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric] call [gluNewQuadric]
mov [qObj],eax mov [qObj],eax
stdcall [gluQuadricTexture], eax,GL_TRUE stdcall [gluQuadricTexture], eax,GL_TRUE
@@ -49,7 +54,7 @@ load_libraries l_libs_start,l_libs_end
stdcall [glClearColor], 0.0,0.0,0.0,0.0 stdcall [glClearColor], 0.0,0.0,0.0,0.0
stdcall [glShadeModel], GL_SMOOTH stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf] mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax mov dword[buf_ogl],eax
@@ -63,6 +68,11 @@ load_libraries l_libs_start,l_libs_end
load_image_file 'toolb_1.png', image_data_toolbar load_image_file 'toolb_1.png', image_data_toolbar
load_image_file 'text_2.png', texture, text_w,text_h ;открытие файла текстуры load_image_file 'text_2.png', texture, text_w,text_h ;открытие файла текстуры
fld dword[angle_x]
stdcall update_number, txt_angle_x.v
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
;* Setup texturing * ;* Setup texturing *
stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
@@ -88,19 +98,27 @@ red_win:
align 4 align 4
still: still:
mcall SF_WAIT_EVENT mcall SF_WAIT_EVENT
cmp al,1 cmp al,EV_REDRAW
jz red_win jz red_win
cmp al,2 cmp al,EV_KEY
jz key jz key
cmp al,3 cmp al,EV_BUTTON
jz button jz button
jmp still jmp still
align 4 align 4
draw_window: draw_window:
pushad pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button] mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;земля с меридиан. mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;земля с меридиан.
@@ -146,11 +164,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -160,11 +174,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -174,11 +184,7 @@ key:
fld dword[angle_x] fld dword[angle_x]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_x] fst dword[angle_x]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_x.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_x.v],0
stdcall str_cat, txt_angle_x.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -188,11 +194,7 @@ key:
fld dword[angle_x] fld dword[angle_x]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_x] fst dword[angle_x]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_x.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_x.v],0
stdcall str_cat, txt_angle_x.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -229,6 +231,20 @@ button:
stdcall mem.Free,[image_data_toolbar] stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS mcall SF_TERMINATE_PROCESS
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4 align 4
but_dr_0: but_dr_0:
mov dword[dr_figure],0 mov dword[dr_figure],0
@@ -289,34 +305,40 @@ but_zoom_m:
call [kosglSwapBuffers] call [kosglSwapBuffers]
ret ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4 align 4
draw_3d: draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix] call [glPushMatrix]
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale] stdcall [glScalef], [scale], [scale], [scale]
stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении stdcall [glScalef], 1.0, 1.0, 0.2 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0 stdcall [glRotatef], [angle_x],1.0,0.0,0.0
cmp dword[dr_figure],0 cmp dword[dr_figure],0
jne @f jne @f
; рисование земли с меридианами ; drawing earth with meridians
stdcall [glColor3f], 0.0, 0.0, 1.0 stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [gluQuadricDrawStyle], [qObj],GLU_LINE stdcall [gluQuadricDrawStyle], [qObj],GLU_LINE
stdcall [gluSphere], [qObj], 1.0, 24,18 ;меридианы push 18
push 24
glpush rad1
stdcall [gluSphere], [qObj] ;meridians
stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
stdcall [gluSphere], [qObj], 0.995, 24,18 ;земля push 24
push 18
glpush rad2
stdcall [gluSphere], [qObj] ;Earth
@@: @@:
cmp dword[dr_figure],1 cmp dword[dr_figure],1
jne @f jne @f
; рисование земли ; drawing the earth
stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
stdcall [gluSphere], [qObj], 1.0, 64,64 push 64
push 64
glpush rad1
stdcall [gluSphere], [qObj]
@@: @@:
call [glPopMatrix] call [glPopMatrix]
@@ -325,6 +347,13 @@ call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00 stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00
ret ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.995
scale dd 0.95 ;начальный масштаб scale dd 0.95 ;начальный масштаб
sc_delt dd 0.05 ;изменение масштаба при нажатии sc_delt dd 0.05 ;изменение масштаба при нажатии
sc_min dd 0.1 ;минимальный масштаб sc_min dd 0.1 ;минимальный масштаб
@@ -340,13 +369,17 @@ import_tinygl:
macro E_LIB n macro E_LIB n
{ {
if defined sz_#n
n dd sz_#n n dd sz_#n
end if
} }
include '../export.inc' include '../export.inc'
dd 0,0 dd 0,0
macro E_LIB n macro E_LIB n
{ {
if used n
sz_#n db `n,0 sz_#n db `n,0
end if
} }
include '../export.inc' include '../export.inc'
@@ -464,34 +497,27 @@ lib_name_2 db 'libimg.obj',0
txt_scale: txt_scale:
db 'Scale: ' db 'Scale: '
.v: .v: rb 11
db 0
rb 10
txt_angle_z: txt_angle_z:
db 'Rotate z: ' db 'Rotate z: '
.v: .v: rb 11
db 0
rb 10
txt_angle_x: txt_angle_x:
db 'Rotate x: ' db 'Rotate x: '
.v: .v: rb 11
db 0
rb 10
txt_angle_y: txt_angle_y:
db 'Rotate y: ' db 'Rotate y: '
.v: .v: rb 11
db 0
rb 10
align 4 align 4
buf_ogl: buf_ogl:
dd 0 ;указатель на буфер изображения dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top dw 3d_wnd_l ;+4 left
.w: dd 400 .t: dw 3d_wnd_t ;+6 top
.h: dd 350 .w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel dd 0,24 ;+16 color,bit in pixel
align 4 align 4
@@ -510,7 +536,7 @@ l_libs_end:
align 4 align 4
i_end: i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28 ctx1 TinyGLContext
image_data_toolbar dd 0 image_data_toolbar dd 0
dr_figure dd 0 dr_figure dd 0
qObj dd 0 qObj dd 0

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Textures2 - example of creating a spherical panorama using texture
; Copyright (C) 2015-2025 KolibriOS team
use32 use32
org 0 org 0
db 'MENUET01' db 'MENUET01'
@@ -8,24 +12,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc' include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc' include '../../../../../load_img.inc'
include '../../../../../load_lib.mac' include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc' include '../opengl_const.inc'
include '../zbuffer.inc' include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc' include '../../../../../develop/info3ds/info_fun_float.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load 3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 450
3d_wnd_h equ 400
;Макрос для параметров типа double (8 байт) @use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3 IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
align 4 align 4
start: start:
load_libraries l_libs_start,l_libs_end load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки ;checking how successfully the libraries were loaded
mov ebp,lib_0 mov ebp,lib_0
.test_lib_open: .test_lib_open:
cmp dword [ebp+ll_struc_size-4],0 cmp dword [ebp+ll_struc_size-4],0
@@ -39,9 +43,9 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27 mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1 stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric] call [gluNewQuadric]
mov [qObj],eax mov [qObj],eax
stdcall [gluQuadricDrawStyle], eax,GLU_FILL stdcall [gluQuadricDrawStyle], eax,GLU_FILL
@@ -50,7 +54,7 @@ load_libraries l_libs_start,l_libs_end
stdcall [glClearColor], 0.0,0.0,0.0,0.0 stdcall [glClearColor], 0.0,0.0,0.0,0.0
stdcall [glShadeModel], GL_SMOOTH stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf] mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax mov dword[buf_ogl],eax
@@ -64,6 +68,11 @@ load_libraries l_libs_start,l_libs_end
load_image_file 'toolb_1.png', image_data_toolbar load_image_file 'toolb_1.png', image_data_toolbar
load_image_file 'text_3.png', texture, text_w,text_h ;открытие файла текстуры load_image_file 'text_3.png', texture, text_w,text_h ;открытие файла текстуры
fld dword[angle_x]
stdcall update_number, txt_angle_x.v
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
;* Setup texturing * ;* Setup texturing *
stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
@@ -89,19 +98,27 @@ red_win:
align 4 align 4
still: still:
mcall SF_WAIT_EVENT mcall SF_WAIT_EVENT
cmp al,1 cmp al,EV_REDRAW
jz red_win jz red_win
cmp al,2 cmp al,EV_KEY
jz key jz key
cmp al,3 cmp al,EV_BUTTON
jz button jz button
jmp still jmp still
align 4 align 4
draw_window: draw_window:
pushad pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button] mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;масштаб + mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;масштаб +
@@ -141,11 +158,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -155,11 +168,7 @@ key:
fld dword[angle_y] fld dword[angle_y]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_y] fst dword[angle_y]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_y.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -169,11 +178,7 @@ key:
fld dword[angle_x] fld dword[angle_x]
fadd dword[delt_size] fadd dword[delt_size]
fst dword[angle_x] fst dword[angle_x]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_x.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_x.v],0
stdcall str_cat, txt_angle_x.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -183,11 +188,7 @@ key:
fld dword[angle_x] fld dword[angle_x]
fsub dword[delt_size] fsub dword[delt_size]
fst dword[angle_x] fst dword[angle_x]
mov word[NumberSymbolsAD],2 stdcall update_number, txt_angle_x.v
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_x.v],0
stdcall str_cat, txt_angle_x.v,Data_String
call draw_3d call draw_3d
call [kosglSwapBuffers] call [kosglSwapBuffers]
@@: @@:
@@ -214,6 +215,20 @@ button:
stdcall mem.Free,[image_data_toolbar] stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS mcall SF_TERMINATE_PROCESS
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4 align 4
but_zoom_p: but_zoom_p:
finit finit
@@ -260,21 +275,25 @@ but_zoom_m:
call [kosglSwapBuffers] call [kosglSwapBuffers]
ret ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4 align 4
draw_3d: draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix] call [glPushMatrix]
stdcall [glTranslatef], 0.0,0.0,-1.0 ;двигаем сферу на себя, что-бы отсечь переднюю часть
stdcall [glScalef], [scale], [scale], [scale] stdcall [glScalef], [scale], [scale], [scale]
stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении stdcall [glScalef], 1.0, 1.0, 0.2 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0 stdcall [glRotatef], [angle_x],1.0,0.0,0.0
; рисование панорамы ; рисование панорамы
stdcall [gluSphere], [qObj], 1.0, 64,64 push 64
push 64
add esp,-8
fld1
fstp qword[esp]
stdcall [gluSphere], [qObj]
call [glPopMatrix] call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00 stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
@@ -282,6 +301,10 @@ call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00 stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00
ret ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
scale dd 1.5 ;начальный масштаб scale dd 1.5 ;начальный масштаб
sc_delt dd 0.05 ;изменение масштаба при нажатии sc_delt dd 0.05 ;изменение масштаба при нажатии
sc_min dd 0.95 ;минимальный масштаб sc_min dd 0.95 ;минимальный масштаб
@@ -297,13 +320,17 @@ import_tinygl:
macro E_LIB n macro E_LIB n
{ {
if defined sz_#n
n dd sz_#n n dd sz_#n
end if
} }
include '../export.inc' include '../export.inc'
dd 0,0 dd 0,0
macro E_LIB n macro E_LIB n
{ {
if used n
sz_#n db `n,0 sz_#n db `n,0
end if
} }
include '../export.inc' include '../export.inc'
@@ -421,34 +448,27 @@ lib_name_2 db 'libimg.obj',0
txt_scale: txt_scale:
db 'Scale: ' db 'Scale: '
.v: .v: rb 11
db 0
rb 10
txt_angle_z: txt_angle_z:
db 'Rotate z: ' db 'Rotate z: '
.v: .v: rb 11
db 0
rb 10
txt_angle_x: txt_angle_x:
db 'Rotate x: ' db 'Rotate x: '
.v: .v: rb 11
db 0
rb 10
txt_angle_y: txt_angle_y:
db 'Rotate y: ' db 'Rotate y: '
.v: .v: rb 11
db 0
rb 10
align 4 align 4
buf_ogl: buf_ogl:
dd 0 ;указатель на буфер изображения dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top dw 3d_wnd_l ;+4 left
.w: dd 400 .t: dw 3d_wnd_t ;+6 top
.h: dd 350 .w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel dd 0,24 ;+16 color,bit in pixel
align 4 align 4
@@ -467,7 +487,7 @@ l_libs_end:
align 4 align 4
i_end: i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28 ctx1 TinyGLContext
image_data_toolbar dd 0 image_data_toolbar dd 0
qObj dd 0 qObj dd 0
TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.) TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)

View File

@@ -168,7 +168,8 @@ E_LIB gluQuadricDrawStyle
E_LIB gluQuadricOrientation E_LIB gluQuadricOrientation
E_LIB gluQuadricTexture E_LIB gluQuadricTexture
E_LIB gluCylinder ;(GLUquadricObj, double, double, double, int, int) E_LIB gluCylinder ;(GLUquadricObj, double, double, double, int, int)
E_LIB gluSphere ;(GLUquadricObj, float, int, int) E_LIB gluDisk ;(GLUquadricObj, double, double, int, int)
E_LIB gluSphere ;(GLUquadricObj, double, int, int)
; ;
; KolibriOS functions ; KolibriOS functions

View File

@@ -6,29 +6,9 @@ struct GLUquadricObj
ErrorFunc dd ? ; Error handler callback function ErrorFunc dd ? ; Error handler callback function
ends ends
offs_qobj_DrawStyle equ 0
offs_qobj_Orientation equ 4
offs_qobj_TextureFlag equ 8
offs_qobj_Normals equ 12
offs_qobj_ErrorFunc equ 16
;Так как некоторые извращенческие функции OpenGL воспринимают только параметры
;типа double (8 байт) то придется пихать их в стек макросом glpush
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
;void drawTorus(float rc, int numc, float rt, int numt)
;{
;}
;static void normal3f(GLfloat x, GLfloat y, GLfloat z )
;{
;}
align 4 align 4
an360f dd 360.0 fl_0_5 dd 0.5
fl_360 dd 360.0
align 16 align 16
proc gluPerspective, fovy:qword, aspect:qword, zNear:qword, zFar:qword proc gluPerspective, fovy:qword, aspect:qword, zNear:qword, zFar:qword
@@ -40,7 +20,7 @@ locals
endl endl
fldpi fldpi
fmul qword[fovy] fmul qword[fovy]
fdiv dword[an360f] fdiv dword[fl_360]
fptan fptan
ffree st0 ;выкидываем 1.0 которая осталось после вычисления тангенса ffree st0 ;выкидываем 1.0 которая осталось после вычисления тангенса
fincstp fincstp
@@ -76,11 +56,11 @@ gluNewQuadric:
stdcall gl_malloc, sizeof.GLUquadricObj stdcall gl_malloc, sizeof.GLUquadricObj
or eax,eax or eax,eax
jz @f jz @f
mov dword[eax+offs_qobj_DrawStyle],GLU_FILL mov dword[eax+GLUquadricObj.DrawStyle],GLU_FILL
mov dword[eax+offs_qobj_Orientation],GLU_OUTSIDE mov dword[eax+GLUquadricObj.Orientation],GLU_OUTSIDE
mov dword[eax+offs_qobj_TextureFlag],GL_FALSE mov dword[eax+GLUquadricObj.TextureFlag],GL_FALSE
mov dword[eax+offs_qobj_Normals],GLU_SMOOTH mov dword[eax+GLUquadricObj.Normals],GLU_SMOOTH
mov dword[eax+offs_qobj_ErrorFunc],0 ;NULL mov dword[eax+GLUquadricObj.ErrorFunc],0 ;NULL
@@: @@:
ret ret
@@ -114,7 +94,7 @@ proc gluQuadricDrawStyle uses eax ebx, qobj:dword, drawStyle:dword
jmp .err_q jmp .err_q
align 4 align 4
@@: @@:
mov dword[eax+offs_qobj_DrawStyle],ebx mov dword[eax+GLUquadricObj.DrawStyle],ebx
jmp @f jmp @f
align 4 align 4
.err_q: .err_q:
@@ -139,7 +119,7 @@ proc gluQuadricOrientation uses eax ebx, qobj:dword, orientation:dword
jmp .err_q jmp .err_q
align 4 align 4
@@: @@:
mov dword[eax+offs_qobj_Orientation],ebx mov dword[eax+GLUquadricObj.Orientation],ebx
jmp @f jmp @f
align 4 align 4
.err_q: .err_q:
@@ -159,7 +139,7 @@ proc gluQuadricTexture uses eax ebx, qobj:dword, texture:dword
cmp ebx,GL_FALSE cmp ebx,GL_FALSE
je @f je @f
@@: @@:
mov dword[eax+offs_qobj_TextureFlag],ebx mov dword[eax+GLUquadricObj.TextureFlag],ebx
jmp @f jmp @f
align 4 align 4
.err_q: .err_q:
@@ -169,7 +149,7 @@ align 4
endp endp
align 16 align 16
proc gluCylinder qobj:dword, baseRadius:dword, topRadius:dword, height:dword,\ proc gluCylinder qobj:dword, baseRadius:qword, topRadius:qword, height:qword,\
slices:dword, stacks:dword slices:dword, stacks:dword
locals locals
da dq ? ;double da dq ? ;double
@@ -193,7 +173,7 @@ endl
pushad pushad
mov edx,[qobj] mov edx,[qobj]
fld1 fld1
cmp dword[edx+offs_qobj_Orientation],GLU_INSIDE cmp dword[edx+GLUquadricObj.Orientation],GLU_INSIDE
jne @f jne @f
fchs fchs
@@: @@:
@@ -203,14 +183,12 @@ pushad
fadd st0,st0 fadd st0,st0
fidiv dword[slices] fidiv dword[slices]
fstp qword[da] ;da = 2.0*M_PI / slices fstp qword[da] ;da = 2.0*M_PI / slices
mov ebx,[topRadius] fld qword[topRadius]
fld qword[ebx] fsub qword[baseRadius]
mov ecx,[baseRadius]
fsub qword[ecx]
fld st0 ;copy: topRadius-baseRadius fld st0 ;copy: topRadius-baseRadius
fidiv dword[stacks] fidiv dword[stacks]
fstp qword[dr] ;dr = (topRadius-baseRadius) / stacks fstp qword[dr] ;dr = (topRadius-baseRadius) / stacks
mov eax,[height] lea eax,[height]
fld qword[eax] fld qword[eax]
fidiv dword[stacks] fidiv dword[stacks]
fstp qword[dz] ;dz = height / stacks fstp qword[dz] ;dz = height / stacks
@@ -218,7 +196,7 @@ pushad
fdiv qword[eax] fdiv qword[eax]
fstp dword[nz] ;nz = (baseRadius-topRadius) / height ; Z component of normal vectors fstp dword[nz] ;nz = (baseRadius-topRadius) / height ; Z component of normal vectors
cmp dword[edx+offs_qobj_DrawStyle],GLU_POINT cmp dword[edx+GLUquadricObj.DrawStyle],GLU_POINT
jne .else0 jne .else0
stdcall glBegin,GL_POINTS stdcall glBegin,GL_POINTS
mov ebx,[slices] mov ebx,[slices]
@@ -245,8 +223,7 @@ align 4
call glNormal3f ;x*nsign, y*nsign, nz*nsign call glNormal3f ;x*nsign, y*nsign, nz*nsign
mov dword[z],0.0 mov dword[z],0.0
mov ecx,[baseRadius] fld qword[baseRadius]
fld qword[ecx]
fstp qword[r] ;r = baseRadius fstp qword[r] ;r = baseRadius
mov ecx,[stacks] mov ecx,[stacks]
inc ecx inc ecx
@@ -277,16 +254,15 @@ align 4
call glEnd call glEnd
jmp .end_f jmp .end_f
.else0: .else0:
cmp dword[edx+offs_qobj_DrawStyle],GLU_LINE cmp dword[edx+GLUquadricObj.DrawStyle],GLU_LINE
je @f je @f
cmp dword[edx+offs_qobj_DrawStyle],GLU_SILHOUETTE cmp dword[edx+GLUquadricObj.DrawStyle],GLU_SILHOUETTE
je .else2 je .else2
jmp .else1 jmp .else1
@@: @@:
; Draw rings ; Draw rings
mov dword[z],0.0 mov dword[z],0.0
mov ecx,[baseRadius] fld qword[baseRadius]
fld qword[ecx]
fstp qword[r] ;r = baseRadius fstp qword[r] ;r = baseRadius
mov ecx,[stacks] mov ecx,[stacks]
inc ecx inc ecx
@@ -342,28 +318,100 @@ align 4
align 4 align 4
.else2: .else2:
; draw one ring at each end ; draw one ring at each end
; if (baseRadius!=0.0) { lea ecx,[baseRadius]
fld qword[ecx]
ftst
fnstsw ax
ffree st0
fincstp
sahf
je .rad_b0
stdcall glBegin,GL_LINE_LOOP stdcall glBegin,GL_LINE_LOOP
mov ebx,[slices]
mov dword[i],0
align 4 align 4
.cycle_4: ;for (i=0;i<slices;i++) .cycle_4: ;for (i=0;i<slices;i++)
; { cmp [i],ebx
; x = cos(i*da); jge .cycle_4_end
; y = sin(i*da); fild dword[i]
; normal3f( x*nsign, y*nsign, nz*nsign ); fmul qword[da]
; glVertex3f( x*baseRadius, y*baseRadius, 0.0 ); fld st0
; } fcos
fstp dword[x] ;x = cos(i*da)
fsin
fstp dword[y] ;y = sin(i*da)
fld dword[nsign]
fmul dword[nz]
fstp dword[esp-4]
fld dword[nsign]
fmul dword[y]
fstp dword[esp-8]
fld dword[nsign]
fmul dword[x]
fstp dword[esp-12]
add esp,-12
call glNormal3f ;x*nsign, y*nsign, nz*nsign
push 0.0
fld qword[ecx]
fmul dword[y]
fstp dword[esp-4]
fld qword[ecx]
fmul dword[x]
fstp dword[esp-8]
add esp,-8
call glVertex3f ;x*baseRadius, y*baseRadius, 0.0
inc dword[i]
jmp .cycle_4
.cycle_4_end:
call glEnd call glEnd
.rad_b0:
lea ecx,[topRadius]
fld qword[ecx]
ftst
fnstsw ax
ffree st0
fincstp
sahf
je .else2_end
stdcall glBegin,GL_LINE_LOOP stdcall glBegin,GL_LINE_LOOP
mov ebx,[slices]
mov dword[i],0
align 4 align 4
.cycle_5: ;for (i=0;i<slices;i++) .cycle_5: ;for (i=0;i<slices;i++)
; { cmp [i],ebx
; x = cos(i*da); jge .cycle_5_end
; y = sin(i*da); fild dword[i]
; normal3f( x*nsign, y*nsign, nz*nsign ); fmul qword[da]
; glVertex3f( x*topRadius, y*topRadius, height ); fld st0
; } fcos
fstp dword[x] ;x = cos(i*da)
fsin
fstp dword[y] ;y = sin(i*da)
fld dword[nsign]
fmul dword[nz]
fstp dword[esp-4]
fld dword[nsign]
fmul dword[y]
fstp dword[esp-8]
fld dword[nsign]
fmul dword[x]
fstp dword[esp-12]
add esp,-12
call glNormal3f ;x*nsign, y*nsign, nz*nsign
fld qword[height]
fstp dword[esp-4]
fld qword[ecx]
fmul dword[y]
fstp dword[esp-8]
fld qword[ecx]
fmul dword[x]
fstp dword[esp-12]
add esp,-12
call glVertex3f ;x*topRadius, y*topRadius, height
inc dword[i]
jmp .cycle_5
.cycle_5_end:
call glEnd call glEnd
; }
.else2_end: .else2_end:
; draw length lines ; draw length lines
stdcall glBegin,GL_LINES stdcall glBegin,GL_LINES
@@ -390,8 +438,7 @@ align 4
sub esp,12 sub esp,12
call glNormal3f ;x*nsign, y*nsign, nz*nsign call glNormal3f ;x*nsign, y*nsign, nz*nsign
mov dword[esp-4],0.0 mov dword[esp-4],0.0
mov ecx,[baseRadius] fld qword[baseRadius]
fld qword[ecx]
fld st0 fld st0
fmul dword[y] fmul dword[y]
fstp dword[esp-8] fstp dword[esp-8]
@@ -399,11 +446,9 @@ align 4
fstp dword[esp-12] fstp dword[esp-12]
sub esp,12 sub esp,12
call glVertex3f ;x*baseRadius, y*baseRadius, 0.0 call glVertex3f ;x*baseRadius, y*baseRadius, 0.0
mov eax,[height] fld qword[height]
fld qword[eax]
fstp dword[esp-4] fstp dword[esp-4]
mov ecx,[topRadius] fld qword[topRadius]
fld qword[ecx]
fld st0 fld st0
fmul dword[y] fmul dword[y]
fstp dword[esp-8] fstp dword[esp-8]
@@ -419,7 +464,7 @@ align 4
jmp .end_f jmp .end_f
align 4 align 4
.else1: .else1:
cmp dword[edx+offs_qobj_DrawStyle],GLU_FILL cmp dword[edx+GLUquadricObj.DrawStyle],GLU_FILL
jne .end_f jne .end_f
fld1 fld1
fidiv dword[slices] fidiv dword[slices]
@@ -453,8 +498,7 @@ align 4
fchs fchs
fstp dword[x2] ;x2 = -sin((i+1)*da) fstp dword[x2] ;x2 = -sin((i+1)*da)
mov dword[z],0.0 mov dword[z],0.0
mov ecx,[baseRadius] fld qword[baseRadius]
fld qword[ecx]
fstp qword[r] ;r = baseRadius fstp qword[r] ;r = baseRadius
mov dword[tcy],0.0 mov dword[tcy],0.0
stdcall glBegin,GL_QUAD_STRIP stdcall glBegin,GL_QUAD_STRIP
@@ -479,7 +523,7 @@ align 4
fstp dword[esp-12] fstp dword[esp-12]
sub esp,12 sub esp,12
call glNormal3f ;x1*nsign, y1*nsign, nz*nsign call glNormal3f ;x1*nsign, y1*nsign, nz*nsign
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[edx+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f je @f
stdcall glTexCoord2f, [tcx],[tcy] stdcall glTexCoord2f, [tcx],[tcy]
@@: @@:
@@ -504,7 +548,7 @@ align 4
fstp dword[esp-12] fstp dword[esp-12]
sub esp,12 sub esp,12
call glNormal3f ;x2*nsign, y2*nsign, nz*nsign call glNormal3f ;x2*nsign, y2*nsign, nz*nsign
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[edx+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f je @f
push dword[tcy] push dword[tcy]
fld dword[tcx] fld dword[tcx]
@@ -535,7 +579,7 @@ align 4
fstp dword[esp-12] fstp dword[esp-12]
sub esp,12 sub esp,12
call glNormal3f ;x2*nsign, y2*nsign, nz*nsign call glNormal3f ;x2*nsign, y2*nsign, nz*nsign
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[edx+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f je @f
stdcall glTexCoord2f, [tcx],[tcy] stdcall glTexCoord2f, [tcx],[tcy]
@@: @@:
@@ -560,7 +604,7 @@ align 4
fstp dword[esp-12] fstp dword[esp-12]
sub esp,12 sub esp,12
call glNormal3f ;x1*nsign, y1*nsign, nz*nsign call glNormal3f ;x1*nsign, y1*nsign, nz*nsign
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[edx+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f je @f
push dword[tcy] push dword[tcy]
fld dword[tcx] fld dword[tcx]
@@ -605,18 +649,164 @@ endp
; Disk (adapted from Mesa) ; Disk (adapted from Mesa)
;void gluDisk(GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops ) align 16
;{ proc gluDisk uses eax ebx ecx edx esi, qobj:dword,\
;} innerRadius:qword, outerRadius:qword, slices:dword, loops:dword
locals
a dq ?
da dq ?
dr dd ?
r1 dd ?
r2 dd ?
dtc dd ?
s dd ? ;int
sa dd ?
ca dd ?
endl
;ebx = s
;ecx = l
;esi = slices
mov ecx,[loops]
cmp ecx,1
jl .end_f
mov esi,[slices]
cmp esi,1
jl .end_f
mov edx,[qobj]
cmp dword[edx+GLUquadricObj.DrawStyle],GLU_FILL
jne .no_fill
fld1
cmp dword[edx+GLUquadricObj.Orientation],GLU_OUTSIDE
je @f
fchs
@@:
add esp,-4
fstp dword[esp]
stdcall glNormal3f,0.0,0.0
fldpi
fadd st0,st0
fidiv dword[slices]
fstp qword[da] ;da = 2.0*M_PI / slices
fld qword[outerRadius]
fsub qword[innerRadius]
fild dword[loops]
fdivp st1,st
fstp dword[dr] ;dr = (outerRadius-innerRadius) / loops
; texture of a gluDisk is a cut out of the texture unit square
; x, y in [-outerRadius, +outerRadius]; s, t in [0, 1] (linear mapping)
fld1
fadd st0,st0
fmul qword[outerRadius]
fstp dword[dtc] ;dtc = 2.0*outerRadius
fld qword[innerRadius]
fstp dword[r1]
align 4
.cycle_0: ;for (l=loops;l>0;l--)
fld dword[r1]
fadd dword[dr]
fstp dword[r2] ;r2 = r1 + dr
stdcall glBegin,GL_QUAD_STRIP
xor ebx,ebx
.cycle_1: ;for (s=0;s<=slices;s++)
cmp esi,ebx
jne .u1
fldz
fstp qword[a]
jmp .u2
align 4
.u1:
mov [s],ebx
fild dword[s]
fmul qword[da]
fstp qword[a]
.u2:
fld qword[a]
fld st0
fsin
fstp dword[sa] ;sa = sin(a)
fcos
fstp dword[ca] ;ca = cos(a)
cmp dword[edx+GLUquadricObj.TextureFlag],0
je @f
fld dword[ca]
fmul dword[r2]
fdiv dword[dtc]
fadd dword[fl_0_5]
fstp dword[esp-4]
fld dword[sa]
fmul dword[r2]
fdiv dword[dtc]
fadd dword[fl_0_5]
add esp,-8
fstp dword[esp]
call glTexCoord2f ;0.5+sa*r2/dtc,0.5+ca*r2/dtc
@@:
fld dword[r2]
fmul dword[ca]
fstp dword[esp-4]
fld dword[r2]
fmul dword[sa]
add esp,-8
fstp dword[esp]
call glVertex2f ;r2*sa, r2*ca
cmp dword[edx+GLUquadricObj.TextureFlag],0
je @f
fld dword[ca]
fmul dword[r1]
fdiv dword[dtc]
fadd dword[fl_0_5]
fstp dword[esp-4]
fld dword[sa]
fmul dword[r1]
fdiv dword[dtc]
fadd dword[fl_0_5]
add esp,-8
fstp dword[esp]
call glTexCoord2f ;0.5+sa*r1/dtc,0.5+ca*r1/dtc
@@:
fld dword[r1]
fmul dword[ca]
fstp dword[esp-4]
fld dword[r1]
fmul dword[sa]
add esp,-8
fstp dword[esp]
call glVertex2f ;r1*sa, r1*ca
inc ebx
cmp esi,ebx
jge .cycle_1
.cycle_1_end:
call glEnd
mov eax,[r2]
mov [r1],eax
dec ecx
jnz .cycle_0
jmp .end_f
align 4
.no_fill:
push [loops]
push [slices]
sub esp,8
fldz
fstp qword[esp]
glpush innerRadius
glpush outerRadius
stdcall gluCylinder, [qobj]
.end_f:
ret
endp
;
; Sphere (adapted from Mesa) ; Sphere (adapted from Mesa)
;
;input: ;input:
; float radius, int slices, int stacks ; double radius, int slices, int stacks
align 16 align 16
proc gluSphere qobj:dword, radius:dword, slices:dword, stacks:dword proc gluSphere qobj:dword, radius:qword, slices:dword, stacks:dword
locals locals
rho dd ? ;float rho dd ? ;float
drho dd ? drho dd ?
@@ -638,7 +828,7 @@ endl
pushad pushad
mov eax,[qobj] mov eax,[qobj]
cmp dword[eax+offs_qobj_Normals],GLU_NONE ;if (qobj.Normals==GLU_NONE) cmp dword[eax+GLUquadricObj.Normals],GLU_NONE ;if (qobj.Normals==GLU_NONE)
jne .els_0 jne .els_0
mov dword[normals],GL_FALSE mov dword[normals],GL_FALSE
jmp @f jmp @f
@@ -646,7 +836,7 @@ align 4
.els_0: .els_0:
mov dword[normals],GL_TRUE mov dword[normals],GL_TRUE
@@: @@:
cmp dword[eax+offs_qobj_Orientation],GLU_INSIDE ;if (qobj.Orientation==GLU_INSIDE) cmp dword[eax+GLUquadricObj.Orientation],GLU_INSIDE ;if (qobj.Orientation==GLU_INSIDE)
jne .els_1 jne .els_1
mov dword[nsign],-1.0 mov dword[nsign],-1.0
jmp @f jmp @f
@@ -666,7 +856,7 @@ align 4
ffree st0 ffree st0
fincstp fincstp
cmp dword[eax+offs_qobj_DrawStyle],GLU_FILL ;if (qobj.DrawStyle==GLU_FILL) cmp dword[eax+GLUquadricObj.DrawStyle],GLU_FILL ;if (qobj.DrawStyle==GLU_FILL)
jne .if_glu_line jne .if_glu_line
; draw +Z end as a triangle fan ; draw +Z end as a triangle fan
@@ -675,13 +865,13 @@ align 4
jne @f jne @f
stdcall glNormal3f, 0.0, 0.0, 1.0 stdcall glNormal3f, 0.0, 0.0, 1.0
@@: @@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f je @f
stdcall glTexCoord2f, 0.5,1.0 stdcall glTexCoord2f, 0.5,1.0
@@: @@:
sub esp,4 sub esp,4
fld dword[nsign] fld dword[nsign]
fmul dword[radius] fmul qword[radius]
fstp dword[esp] fstp dword[esp]
stdcall glVertex3f, 0.0, 0.0 ;, nsign * radius stdcall glVertex3f, 0.0, 0.0 ;, nsign * radius
fld dword[drho] fld dword[drho]
@@ -728,7 +918,7 @@ align 4
sub esp,12 sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@: @@:
fld dword[radius] fld qword[radius]
fld dword[z] fld dword[z]
fmul st0,st1 fmul st0,st1
fstp dword[esp-4] fstp dword[esp-4]
@@ -754,7 +944,7 @@ align 4
fstp dword[d_t] ;1.0 / stacks fstp dword[d_t] ;1.0 / stacks
mov dword[t],1.0 ; because loop now runs from 0 mov dword[t],1.0 ; because loop now runs from 0
mov ebx,[stacks] mov ebx,[stacks]
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je .els_2 je .els_2
mov dword[i],0 mov dword[i],0
mov [imax],ebx mov [imax],ebx
@@ -820,11 +1010,11 @@ align 4
sub esp,12 sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@: @@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f je @f
stdcall glTexCoord2f, [s],[t] stdcall glTexCoord2f, [s],[t]
@@: @@:
fld dword[radius] fld qword[radius]
fld dword[z] fld dword[z]
fmul st0,st1 fmul st0,st1
fstp dword[esp-4] fstp dword[esp-4]
@@ -868,7 +1058,7 @@ align 4
sub esp,12 sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@: @@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f je @f
fld dword[t] fld dword[t]
fsub dword[d_t] fsub dword[d_t]
@@ -879,7 +1069,7 @@ align 4
fadd dword[d_s] fadd dword[d_s]
fstp dword[s] fstp dword[s]
@@: @@:
fld dword[radius] fld qword[radius]
fld dword[z] fld dword[z]
fmul st0,st1 fmul st0,st1
fstp dword[esp-4] fstp dword[esp-4]
@@ -910,7 +1100,7 @@ align 4
jne @f jne @f
stdcall glNormal3f, 0.0, 0.0, -1.0 stdcall glNormal3f, 0.0, 0.0, -1.0
@@: @@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f je @f
stdcall glTexCoord2f, 0.5,0.0 stdcall glTexCoord2f, 0.5,0.0
mov dword[s],1.0 mov dword[s],1.0
@@ -918,7 +1108,7 @@ align 4
mov [t],ebx mov [t],ebx
@@: @@:
sub esp,4 sub esp,4
fld dword[radius] fld qword[radius]
fchs fchs
fmul dword[nsign] fmul dword[nsign]
fstp dword[esp] fstp dword[esp]
@@ -970,14 +1160,14 @@ align 4
fincstp fincstp
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@: @@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f je @f
stdcall glTexCoord2f, [s],[t] stdcall glTexCoord2f, [s],[t]
fld dword[s] fld dword[s]
fsub dword[d_s] fsub dword[d_s]
fstp dword[s] fstp dword[s]
@@: @@:
fld dword[radius] fld qword[radius]
fld dword[z] fld dword[z]
fmul st0,st1 fmul st0,st1
fstp dword[esp-4] fstp dword[esp-4]
@@ -998,9 +1188,9 @@ align 4
align 4 align 4
.if_glu_line: .if_glu_line:
cmp dword[eax+offs_qobj_DrawStyle],GLU_LINE ;if (qobj.DrawStyle==GLU_LINE) cmp dword[eax+GLUquadricObj.DrawStyle],GLU_LINE ;if (qobj.DrawStyle==GLU_LINE)
je @f je @f
cmp dword[eax+offs_qobj_DrawStyle],GLU_SILHOUETTE ;if (qobj.DrawStyle==GLU_SILHOUETTE) cmp dword[eax+GLUquadricObj.DrawStyle],GLU_SILHOUETTE ;if (qobj.DrawStyle==GLU_SILHOUETTE)
je @f je @f
jmp .if_glu_point jmp .if_glu_point
align 4 align 4
@@ -1056,7 +1246,7 @@ align 4
sub esp,12 sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@: @@:
fld dword[radius] fld qword[radius]
fld dword[z] fld dword[z]
fmul st0,st1 fmul st0,st1
fstp dword[esp-4] fstp dword[esp-4]
@@ -1123,7 +1313,7 @@ align 4
sub esp,12 sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@: @@:
fld dword[radius] fld qword[radius]
fld dword[z] fld dword[z]
fmul st0,st1 fmul st0,st1
fstp dword[esp-4] fstp dword[esp-4]
@@ -1148,7 +1338,7 @@ align 4
align 4 align 4
.if_glu_point: .if_glu_point:
cmp dword[eax+offs_qobj_DrawStyle],GLU_POINT ;if (qobj.DrawStyle==GLU_POINT) cmp dword[eax+GLUquadricObj.DrawStyle],GLU_POINT ;if (qobj.DrawStyle==GLU_POINT)
jne .end_f jne .end_f
; top and bottom-most points ; top and bottom-most points
@@ -1157,7 +1347,10 @@ align 4
jne @f jne @f
stdcall glNormal3f, 0.0,0.0,dword[nsign] stdcall glNormal3f, 0.0,0.0,dword[nsign]
@@: @@:
stdcall glVertex3f, 0.0,0.0,dword[radius] sub esp,4
fld qword[radius]
fstp dword[esp]
stdcall glVertex3f, 0.0,0.0
cmp dword[normals],GL_TRUE cmp dword[normals],GL_TRUE
jne @f jne @f
sub esp,4 sub esp,4
@@ -1167,7 +1360,7 @@ align 4
stdcall glNormal3f, 0.0,0.0 ;,-nsign stdcall glNormal3f, 0.0,0.0 ;,-nsign
@@: @@:
sub esp,4 sub esp,4
fld dword[radius] fld qword[radius]
fchs fchs
fstp dword[esp] fstp dword[esp]
stdcall glVertex3f, 0.0,0.0 ;,-radius stdcall glVertex3f, 0.0,0.0 ;,-radius
@@ -1220,7 +1413,7 @@ align 4
sub esp,12 sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@: @@:
fld dword[radius] fld qword[radius]
fld dword[z] fld dword[z]
fmul st0,st1 fmul st0,st1
fstp dword[esp-4] fstp dword[esp-4]

View File

@@ -1,15 +1,6 @@
; simple gl like driver for TinyGL and KolibriOS - porting iadn ; simple gl like driver for TinyGL and KolibriOS - porting iadn
include 'kosgl.inc'
struct TinyGLContext
gl_context dd ?
xsize dd ? ;+4
ysize dd ? ;+8
d_x dd ? ;+12
d_y dd ? ;+16
x dd ? ;+20
y dd ? ;+24
ends
;KOSGLContext kosglCreateContext(KOSGLContext shareList, int flags) ;KOSGLContext kosglCreateContext(KOSGLContext shareList, int flags)
;{ ;{

View File

@@ -0,0 +1,15 @@
;Macro for double type parameters (8 bytes)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
struct TinyGLContext
gl_context dd ?
xsize dd ? ;+4
ysize dd ? ;+8
d_x dd ? ;+12
d_y dd ? ;+16
x dd ? ;+20
y dd ? ;+24
ends

View File

@@ -1,5 +1,6 @@
align 4 align 4
sp128f dd 128.0 fl_128 dd 128.0
fl_1e_3 dd 1.0e-3
align 4 align 4
proc glopMaterial uses eax ebx ecx edi esi, context:dword, p:dword proc glopMaterial uses eax ebx ecx edi esi, context:dword, p:dword
@@ -11,8 +12,7 @@ proc glopMaterial uses eax ebx ecx edi esi, context:dword, p:dword
cmp ecx,GL_FRONT_AND_BACK ;if (mode == GL_FRONT_AND_BACK) cmp ecx,GL_FRONT_AND_BACK ;if (mode == GL_FRONT_AND_BACK)
jne @f jne @f
mov dword[ebx+4],GL_FRONT ;p[1].i=GL_FRONT mov dword[ebx+4],GL_FRONT ;p[1].i=GL_FRONT
lea edi,[ebp+12] stdcall glopMaterial,eax,ebx
stdcall glopMaterial,eax,edi
mov ecx,GL_BACK mov ecx,GL_BACK
@@: @@:
lea edi,[eax+GLContext.materials] lea edi,[eax+GLContext.materials]
@@ -58,7 +58,7 @@ align 4
add edi,GLMaterial.shininess add edi,GLMaterial.shininess
movsd movsd
mov dword[edi],SPECULAR_BUFFER_RESOLUTION mov dword[edi],SPECULAR_BUFFER_RESOLUTION
fdiv dword[sp128f] fdiv dword[fl_128]
fimul dword[edi] fimul dword[edi]
fistp dword[edi] ;m.shininess_i = (v[0]/128.0f)*SPECULAR_BUFFER_RESOLUTION fistp dword[edi] ;m.shininess_i = (v[0]/128.0f)*SPECULAR_BUFFER_RESOLUTION
jmp .end_f jmp .end_f
@@ -185,15 +185,15 @@ align 4
cmp ecx,GL_SPOT_EXPONENT cmp ecx,GL_SPOT_EXPONENT
jne @f jne @f
mov ecx,[ebx+12] mov ecx,[ebx+12]
mov [edi+GLLight.spot_exponent],ecx ;l.spot_exponent=p[3] mov [edx+GLLight.spot_exponent],ecx ;l.spot_exponent=p[3]
jmp .end_f jmp .end_f
align 4 align 4
@@: @@:
cmp ecx,GL_SPOT_CUTOFF cmp ecx,GL_SPOT_CUTOFF
jne .end_spot_c jne .end_spot_c
fld dword[ebp+12] ;float a=v.v[0] fld dword[ebx+12] ;float a=v.v[0]
; assert(a == 180 || (a>=0 && a<=90)); ; assert(a == 180 || (a>=0 && a<=90));
fst dword[edi+GLLight.spot_cutoff] ;l.spot_cutoff=a fst dword[edx+GLLight.spot_cutoff] ;l.spot_cutoff=a
fcom dword[an180f] ;if (a != 180) fcom dword[an180f] ;if (a != 180)
fstsw ax fstsw ax
sahf sahf
@@ -202,7 +202,7 @@ align 4
fmulp fmulp
fdiv dword[an180f] fdiv dword[an180f]
fcos fcos
fstp dword[edi+GLLight.cos_spot_cutoff] ;l.cos_spot_cutoff=cos(a * M_PI / 180.0) fstp dword[edx+GLLight.cos_spot_cutoff] ;l.cos_spot_cutoff=cos(a * M_PI / 180.0)
jmp .end_f jmp .end_f
@@: @@:
ffree st0 ffree st0
@@ -213,21 +213,21 @@ align 4
cmp ecx,GL_CONSTANT_ATTENUATION cmp ecx,GL_CONSTANT_ATTENUATION
jne @f jne @f
mov ecx,[ebx+12] mov ecx,[ebx+12]
mov [edi+GLLight.attenuation],ecx ;l->attenuation[0]=p[3] mov [edx+GLLight.attenuation],ecx ;l->attenuation[0]=p[3]
jmp .end_f jmp .end_f
align 4 align 4
@@: @@:
cmp ecx,GL_LINEAR_ATTENUATION cmp ecx,GL_LINEAR_ATTENUATION
jne @f jne @f
mov ecx,[ebx+12] mov ecx,[ebx+12]
mov [edi+GLLight.attenuation+4],ecx ;l->attenuation[1]=p[3] mov [edx+GLLight.attenuation+4],ecx ;l->attenuation[1]=p[3]
jmp .end_f jmp .end_f
align 4 align 4
@@: @@:
cmp ecx,GL_QUADRATIC_ATTENUATION cmp ecx,GL_QUADRATIC_ATTENUATION
jne @f jne @f
mov ecx,[ebx+12] mov ecx,[ebx+12]
mov [edi+GLLight.attenuation+8],ecx ;l->attenuation[2]=p[3] mov [edx+GLLight.attenuation+8],ecx ;l->attenuation[2]=p[3]
jmp .end_f jmp .end_f
align 4 align 4
@@: ;default: @@: ;default:
@@ -356,22 +356,18 @@ align 4
ret ret
endp endp
align 4
fl_1e_3 dd 1.0e-3
; non optimized lightening model ; non optimized lightening model
align 16 align 16
proc gl_shade_vertex, context:dword, v:dword proc gl_shade_vertex, context:dword, v:dword
locals locals
R dd ? ;float ebp-96 R dd ? ;float ebp-92
G dd ? ;float ebp-92 G dd ? ;float ebp-88
B dd ? ;float ebp-88 B dd ? ;float ebp-84
A dd ? ;float ebp-84 A dd ? ;float ebp-80
s V3 ;ebp-80 s V3 ;ebp-76
d V3 ;ebp-68 d V3 ;ebp-64
tmp dd ? ;float ebp-56 tmp dd ? ;float ebp-52
att dd ? ;float ebp-52 att dd ? ;float ebp-48
dot_spot dd ? ;float ebp-48
lR dd ? ;float ebp-44 lR dd ? ;float ebp-44
lB dd ? ;float ebp-40 lB dd ? ;float ebp-40
lG dd ? ;float ebp-36 lG dd ? ;float ebp-36
@@ -396,8 +392,7 @@ pushad
mov esi,[v] mov esi,[v]
mov edx,[context] mov edx,[context]
mov ecx,edx lea ecx,[edx+GLContext.materials] ;ecx(m) = &context.materials[0]
add ecx,GLContext.materials ;ecx(m) = &context.materials[0]
mov eax,[edx+GLContext.light_model_two_side] mov eax,[edx+GLContext.light_model_two_side]
mov [twoside],eax mov [twoside],eax
@@ -410,7 +405,7 @@ pushad
fld dword[edx+GLContext.ambient_light_model] fld dword[edx+GLContext.ambient_light_model]
fmul dword[ecx+GLMaterial.ambient] fmul dword[ecx+GLMaterial.ambient]
fadd dword[ecx] ;GLMaterial.emission=0 fadd dword[ecx+GLMaterial.emission]
fstp dword[R] ;R=m.emission.v[0]+m.ambient.v[0]*context.ambient_light_model.v[0] fstp dword[R] ;R=m.emission.v[0]+m.ambient.v[0]*context.ambient_light_model.v[0]
fld dword[edx+GLContext.ambient_light_model+4] fld dword[edx+GLContext.ambient_light_model+4]
fmul dword[ecx+GLMaterial.ambient+4] fmul dword[ecx+GLMaterial.ambient+4]
@@ -430,7 +425,7 @@ pushad
; ambient ; ambient
fld dword[ecx+GLMaterial.ambient] fld dword[ecx+GLMaterial.ambient]
fmul dword[ebx] ;GLLight.ambient=0 fmul dword[ebx+GLLight.ambient]
fstp dword[lR] ;lR=l.ambient.v[0] * m.ambient.v[0] fstp dword[lR] ;lR=l.ambient.v[0] * m.ambient.v[0]
fld dword[ecx+GLMaterial.ambient+4] fld dword[ecx+GLMaterial.ambient+4]
fmul dword[ebx+GLLight.ambient+4] fmul dword[ebx+GLLight.ambient+4]
@@ -447,8 +442,8 @@ pushad
; light at infinity ; light at infinity
ffree st0 ;l.position.v[3] ffree st0 ;l.position.v[3]
fincstp fincstp
mov eax,[ebx+GLLight.norm_position] mov eax,[ebx+GLLight.norm_position+offs_X]
mov [d],eax ;d.X=l.norm_position.v[0] mov [d+offs_X],eax ;d.X=l.norm_position.v[0]
mov eax,[ebx+GLLight.norm_position+offs_Y] mov eax,[ebx+GLLight.norm_position+offs_Y]
mov [d+offs_Y],eax ;d.Y=l.norm_position.v[1] mov [d+offs_Y],eax ;d.Y=l.norm_position.v[1]
mov eax,[ebx+GLLight.norm_position+offs_Z] mov eax,[ebx+GLLight.norm_position+offs_Z]
@@ -460,9 +455,9 @@ align 4
; distance attenuation ; distance attenuation
ffree st0 ;l.position.v[3] ffree st0 ;l.position.v[3]
fincstp fincstp
fld dword[ebx+GLLight.position] fld dword[ebx+GLLight.position+offs_X]
fsub dword[esi+GLVertex.ec] fsub dword[esi+GLVertex.ec+offs_X]
fstp dword[d] ;d.X=l.position.v[0]-v.ec.v[0] fstp dword[d+offs_X] ;d.X=l.position.v[0]-v.ec.v[0]
fld dword[ebx+GLLight.position+offs_Y] fld dword[ebx+GLLight.position+offs_Y]
fsub dword[esi+GLVertex.ec+offs_Y] fsub dword[esi+GLVertex.ec+offs_Y]
fstp dword[d+offs_Y] ;d.Y=l.position.v[1]-v.ec.v[1] fstp dword[d+offs_Y] ;d.Y=l.position.v[1]-v.ec.v[1]
@@ -484,9 +479,9 @@ align 4
jbe @f ;if (dist>1.0e-3) jbe @f ;if (dist>1.0e-3)
fld1 fld1
fdiv st0,st1 fdiv st0,st1
fld dword[d] fld dword[d+offs_X]
fmul st0,st1 fmul st0,st1
fstp dword[d] fstp dword[d+offs_X]
fld dword[d+offs_Y] fld dword[d+offs_Y]
fmul st0,st1 fmul st0,st1
fstp dword[d+offs_Y] fstp dword[d+offs_Y]
@@ -509,8 +504,8 @@ align 4
ffree st0 ;dist ffree st0 ;dist
fincstp fincstp
.els_0_end: .els_0_end:
fld dword[d] fld dword[d+offs_X]
fmul dword[n] fmul dword[n+offs_X]
fld dword[d+offs_Y] fld dword[d+offs_Y]
fmul dword[n+offs_Y] fmul dword[n+offs_Y]
faddp faddp
@@ -563,7 +558,6 @@ align 4
fmul dword[d+offs_Z] fmul dword[d+offs_Z]
faddp faddp
fchs fchs
fst dword[dot_spot]
cmp dword[twoside],0 ;if (twoside && dot_spot < 0) cmp dword[twoside],0 ;if (twoside && dot_spot < 0)
je @f je @f
ftst ;if (dot_spot<0) ftst ;if (dot_spot<0)
@@ -702,7 +696,7 @@ align 4
@@: @@:
shl dword[idx],2 shl dword[idx],2
add edi,dword[idx] add edi,dword[idx]
fld dword[edi+offs_spec_buf] ;dot_spec = specbuf.buf[idx] fld dword[edi+GLSpecBuf.buf] ;dot_spec = specbuf.buf[idx]
fld dword[ebx+GLLight.specular] fld dword[ebx+GLLight.specular]
fmul st0,st1 fmul st0,st1
fmul dword[ecx+GLMaterial.specular] fmul dword[ecx+GLMaterial.specular]

View File

@@ -57,12 +57,13 @@ proc delete_list uses eax ebx ecx edx, context:dword, list:dword
; free param buffer ; free param buffer
mov eax,[edx] ;eax = GLList.first_op_buffer mov eax,[edx] ;eax = GLList.first_op_buffer
@@: @@:
cmp eax,0 or eax,eax
je .end_w jz .end_w
mov ecx,[eax+offs_gpbu_next] mov ecx,[eax+GLParamBuffer.next]
stdcall gl_free,eax stdcall gl_free,eax
mov eax,ecx mov eax,ecx
jmp @b jmp @b
align 4
.end_w: .end_w:
stdcall gl_free,edx stdcall gl_free,edx
@@ -79,10 +80,10 @@ proc alloc_list uses ebx ecx, context:dword, list:dword
mov ecx,eax mov ecx,eax
stdcall gl_zalloc,sizeof.GLList stdcall gl_zalloc,sizeof.GLList
mov dword[ecx+offs_gpbu_next],0 ;ob.next=NULL mov dword[ecx+GLParamBuffer.next],0 ;ob.next=NULL
mov dword[eax],ecx ;l.first_op_buffer=ob mov dword[eax],ecx ;l.first_op_buffer=ob
mov dword[ecx+offs_gpbu_ops],OP_EndList ;ob.ops[0].op=OP_EndList mov dword[ecx+GLParamBuffer.ops],OP_EndList ;ob.ops[0].op=OP_EndList
mov ebx,[context] mov ebx,[context]
mov ebx,[ebx+GLContext.shared_state] mov ebx,[ebx+GLContext.shared_state]
@@ -138,12 +139,12 @@ pushad
jle @f jle @f
mov edi,eax mov edi,eax
stdcall gl_zalloc,sizeof.GLParamBuffer stdcall gl_zalloc,sizeof.GLParamBuffer
mov dword[eax+offs_gpbu_next],0 ;=NULL mov dword[eax+GLParamBuffer.next],0 ;=NULL
mov dword[edi+offs_gpbu_next],eax mov dword[edi+GLParamBuffer.next],eax
lea esi,[edi+4*ebx] lea esi,[edi+4*ebx]
mov dword[esi+offs_gpbu_ops],OP_NextBuffer mov dword[esi+GLParamBuffer.ops],OP_NextBuffer
mov dword[esi+offs_gpbu_ops+4],eax mov dword[esi+GLParamBuffer.ops+4],eax
mov dword[edx+GLContext.current_op_buffer],eax mov dword[edx+GLContext.current_op_buffer],eax
xor ebx,ebx xor ebx,ebx
@@ -168,8 +169,8 @@ push edi esi
mov ebx,[ebx] mov ebx,[ebx]
lea eax,[op_table_str] lea eax,[op_table_str]
@@: @@:
cmp ebx,0 or ebx,ebx
je @f jz @f
cmp byte[eax],0 cmp byte[eax],0
jne .no_dec jne .no_dec
dec ebx dec ebx
@@ -197,21 +198,24 @@ push edi esi
add ebx,4 add ebx,4
inc esi inc esi
cmp byte[esi],'f' cmp byte[esi],'f' ;float
jne @f jne @f
fld dword[ebx] fld dword[ebx]
fstp qword[Data_Double] fstp qword[Data_Double]
call DoubleFloat_to_String call DoubleFloat_to_String
stdcall str_cat, edi,Data_String stdcall str_cat, edi,Data_String
@@: @@:
cmp byte[esi],'d' cmp byte[esi],'C' ;const
jne @f je @f
cmp byte[esi],'d' ;integer
je @f
jmp .no_param
@@:
stdcall str_len,edi stdcall str_len,edi
add edi,eax add edi,eax
sub ecx,eax sub ecx,eax
mov eax,dword[ebx] mov eax,dword[ebx]
stdcall convert_int_to_str,ecx stdcall convert_int_to_str,ecx
@@:
.no_param: .no_param:
inc esi inc esi
cmp byte[esi],0 cmp byte[esi],0
@@ -307,8 +311,8 @@ proc glNewList uses eax ebx, list:dword, mode:dword
; assert(ebx->compile_flag == 0); ; assert(ebx->compile_flag == 0);
stdcall find_list,ebx,[list] stdcall find_list,ebx,[list]
cmp eax,0 or eax,eax
je @f jz @f
stdcall delete_list,ebx,[list] stdcall delete_list,ebx,[list]
@@: @@:
stdcall alloc_list,ebx,[list] stdcall alloc_list,ebx,[list]
@@ -347,8 +351,8 @@ align 4
proc glIsList, list:dword proc glIsList, list:dword
call gl_get_context call gl_get_context
stdcall find_list, eax,[list] stdcall find_list, eax,[list]
cmp eax,0 ;NULL or eax,eax ;NULL
je @f jz @f
mov eax,1 mov eax,1
@@: @@:
ret ret

View File

@@ -1,5 +1,5 @@
; ;
; функции для вычисления зеркального цвета (блики) ; functions for calculating specular color (glare)
; ;
align 4 align 4
@@ -10,49 +10,41 @@ locals
endl endl
mov dword[f_inc],SPECULAR_BUFFER_SIZE mov dword[f_inc],SPECULAR_BUFFER_SIZE
mov ebx,[buf] mov ebx,[buf]
add ebx,offs_spec_buf add ebx,GLSpecBuf.buf
mov dword[ebx],0.0 ;buf.buf[0] = 0.0 mov dword[ebx],0.0 ;buf.buf[0] = 0.0
xor ecx,ecx xor ecx,ecx
inc ecx
fld dword[shininess] ;сначала берем y
fld1 fld1
fidiv dword[f_inc] fidiv dword[f_inc]
fst dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE fstp dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE
fst dword[val] mov dword[val],0.0
align 4 align 4
.cycle_0: ;for (i = 1; i <= SPECULAR_BUFFER_SIZE; i++) .cycle_0: ;for (i = 1; i < SPECULAR_BUFFER_SIZE; i++)
inc ecx
cmp ecx,SPECULAR_BUFFER_SIZE cmp ecx,SPECULAR_BUFFER_SIZE
jg @f jge @f
;Вычисляем x^y fld dword[shininess]
fld dword[val]
fadd dword[f_inc]
fst dword[val] ;val += f_inc
;need to calculate pow(val, shininess)
fyl2x ;Стек FPU теперь содержит: st0=z=y*log2(x): fyl2x ;the FPU stack now contains: st0=z=y*log2(x):
;Теперь считаем 2**z: ;now we count 2**z:
fld st0 ;Создаем еще одну копию z fld st0 ;copy z
frndint ;Округляем frndint
fsubr st0,st1 ;st1=z, st0=z-trunc(z) fsubr st0,st1 ;st1=z, st0=z-trunc(z)
f2xm1 ;st1=z, st0=2**(z-trunc(z))-1 f2xm1 ;st1=z, st0=2**(z-trunc(z))-1
fld1 fld1
faddp ;st1=z, st0=2**(z-trunc(z)) faddp ;st1=z, st0=2**(z-trunc(z))
fscale ;st1=z, st0=(2**trunc(z))*(2**(z-trunc(z)))=2**t fscale ;st1=z, st0=(2**trunc(z))*(2**(z-trunc(z)))=2**t
fxch st1 fxch st1
fstp st ;Результат остается на вершине стека st0 fstp st ;the result remains on the top of the stack st0
add ebx,4 add ebx,4
fstp dword[ebx] ;buf.buf[i] = pow(val, shininess) fstp dword[ebx] ;buf.buf[i] = pow(val, shininess)
ffree st0 ;испорченный shininess
fincstp
fld dword[shininess] ;сначала берем y
fld dword[val]
fadd dword[f_inc]
fst dword[val] ;val += f_inc
inc ecx
jmp .cycle_0 jmp .cycle_0
@@: @@:
ffree st0 ;val mov dword[ebx+4],1.0
fincstp
ffree st0 ;shininess
fincstp
ret ret
endp endp
@@ -70,22 +62,22 @@ endl
.cycle_0: .cycle_0:
or eax,eax ;while (found) or eax,eax ;while (found)
jz @f jz @f
cmp [eax+offs_spec_shininess_i],ebx ;while (found.shininess_i != shininess_i) cmp [eax+GLSpecBuf.shininess_i],ebx ;while (found.shininess_i != shininess_i)
je @f je @f
mov ecx,[oldest] mov ecx,[oldest]
mov ecx,[ecx+offs_spec_last_used] mov ecx,[ecx+GLSpecBuf.last_used]
cmp [eax+offs_spec_last_used],ecx ;if (found.last_used < oldest.last_used) cmp [eax+GLSpecBuf.last_used],ecx ;if (found.last_used < oldest.last_used)
jge .end_0 jge .end_0
mov [oldest],eax ;oldest = found mov [oldest],eax ;oldest = found
.end_0: .end_0:
mov eax,[eax+offs_spec_next] ;found = found.next mov eax,[eax+GLSpecBuf.next] ;found = found.next
jmp .cycle_0 jmp .cycle_0
@@: @@:
cmp dword[found],0 ;if (found) /* hey, found one! */ cmp dword[found],0 ;if (found) /* hey, found one! */
je @f je @f
mov eax,[found] mov eax,[found]
mov ecx,[edx+GLContext.specbuf_used_counter] mov ecx,[edx+GLContext.specbuf_used_counter]
mov [eax+offs_spec_last_used],ecx ;found.last_used = context.specbuf_used_counter mov [eax+GLSpecBuf.last_used],ecx ;found.last_used = context.specbuf_used_counter
inc dword[edx+GLContext.specbuf_used_counter] inc dword[edx+GLContext.specbuf_used_counter]
jmp .end_f ;return found jmp .end_f ;return found
@@: @@:
@@ -102,21 +94,21 @@ endl
@@: @@:
inc dword[edx+GLContext.specbuf_num_buffers] inc dword[edx+GLContext.specbuf_num_buffers]
mov ecx,[edx+GLContext.specbuf_first] mov ecx,[edx+GLContext.specbuf_first]
mov [eax+offs_spec_next],ecx mov [eax+GLSpecBuf.next],ecx
mov [edx+GLContext.specbuf_first],eax mov [edx+GLContext.specbuf_first],eax
mov ecx,[edx+GLContext.specbuf_used_counter] mov ecx,[edx+GLContext.specbuf_used_counter]
mov [eax+offs_spec_last_used],ecx mov [eax+GLSpecBuf.last_used],ecx
inc dword[edx+GLContext.specbuf_used_counter] inc dword[edx+GLContext.specbuf_used_counter]
mov [eax+offs_spec_shininess_i],ebx mov [eax+GLSpecBuf.shininess_i],ebx
stdcall calc_buf, eax,dword[shininess] stdcall calc_buf, eax,dword[shininess]
jmp .end_f jmp .end_f
.end_1: .end_1:
; overwrite the lru buffer ; overwrite the lru buffer
;tgl_trace("overwriting spec buffer :(\n"); ;tgl_trace("overwriting spec buffer :(\n");
mov eax,[oldest] mov eax,[oldest]
mov [eax+offs_spec_shininess_i],ebx mov [eax+GLSpecBuf.shininess_i],ebx
mov ecx,[edx+GLContext.specbuf_used_counter] mov ecx,[edx+GLContext.specbuf_used_counter]
mov [eax+offs_spec_last_used],ecx mov [eax+GLSpecBuf.last_used],ecx
inc dword[edx+GLContext.specbuf_used_counter] inc dword[edx+GLContext.specbuf_used_counter]
stdcall calc_buf, eax,dword[shininess] stdcall calc_buf, eax,dword[shininess]
.end_f: .end_f:

View File

@@ -17,9 +17,9 @@ proc find_texture uses ebx ecx, context:dword, h:dword
cmp dword[eax],0 cmp dword[eax],0
je .no_found je .no_found
mov ebx,[eax] mov ebx,[eax]
cmp dword[ebx+offs_text_handle],ecx cmp dword[ebx+GLTexture.handle],ecx
je .found je .found
mov eax,[ebx+offs_text_next] mov eax,[ebx+GLTexture.next]
jmp @b jmp @b
.no_found: .no_found:
xor eax,eax ;ret NULL xor eax,eax ;ret NULL
@@ -32,36 +32,36 @@ proc free_texture uses eax ebx ecx edx, context:dword, h:dword
mov edx,[context] mov edx,[context]
stdcall find_texture,edx,[h] ;t=find_texture(context,h) stdcall find_texture,edx,[h] ;t=find_texture(context,h)
cmp dword[eax+offs_text_prev],0 ;if (t.prev==NULL) cmp dword[eax+GLTexture.prev],0 ;if (t.prev==NULL)
jne .else jne .else
mov edx,[edx+GLContext.shared_state+4] ;edx = &context.shared_state.texture_hash_table[0] mov edx,[edx+GLContext.shared_state+4] ;edx = &context.shared_state.texture_hash_table[0]
mov ebx,[eax+offs_text_handle] mov ebx,[eax+GLTexture.handle]
and ebx,0xff and ebx,0xff
shl ebx,2 shl ebx,2
add edx,ebx ;edx = &context.shared_state.texture_hash_table[t.handle % TEXTURE_HASH_TABLE_SIZE] add edx,ebx ;edx = &context.shared_state.texture_hash_table[t.handle % TEXTURE_HASH_TABLE_SIZE]
mov ebx,[eax+offs_text_next] mov ebx,[eax+GLTexture.next]
mov [edx],ebx ;*ht=t.next mov [edx],ebx ;*ht=t.next
jmp @f jmp @f
.else: .else:
mov ebx,[eax+offs_text_prev] mov ebx,[eax+GLTexture.prev]
mov ecx,[eax+offs_text_next] mov ecx,[eax+GLTexture.next]
mov [ebx+offs_text_next],ecx ;t.prev.next=t.next mov [ebx+GLTexture.next],ecx ;t.prev.next=t.next
@@: @@:
cmp dword[eax+offs_text_next],0 ;if (t.next!=NULL) cmp dword[eax+GLTexture.next],0 ;if (t.next!=NULL)
je @f je @f
mov ebx,[eax+offs_text_next] mov ebx,[eax+GLTexture.next]
mov ecx,[eax+offs_text_prev] mov ecx,[eax+GLTexture.prev]
mov [ebx+offs_text_prev],ecx ;t.next.prev=t.prev mov [ebx+GLTexture.prev],ecx ;t.next.prev=t.prev
@@: @@:
xor ebx,ebx xor ebx,ebx
mov ecx,[eax+offs_text_images] ;im=&t.images[0] mov ecx,[eax+GLTexture.images] ;im=&t.images[0]
.cycle_0: ;for(i=0;i<MAX_TEXTURE_LEVELS;i++) .cycle_0: ;for(i=0;i<MAX_TEXTURE_LEVELS;i++)
cmp ebx,MAX_TEXTURE_LEVELS cmp ebx,MAX_TEXTURE_LEVELS
jge .cycle_0_end jge .cycle_0_end
cmp dword[ecx+offs_imag_pixmap],0 ;if (im.pixmap != NULL) cmp dword[ecx+GLImage.pixmap],0 ;if (im.pixmap != NULL)
je @f je @f
stdcall gl_free,[ecx+offs_imag_pixmap] stdcall gl_free,[ecx+GLImage.pixmap]
@@: @@:
add ecx,sizeof.GLImage add ecx,sizeof.GLImage
inc ebx inc ebx
@@ -87,16 +87,16 @@ proc alloc_texture uses ebx ecx, context:dword, h:dword
add ecx,ebx ;ecx = &context.shared_state.texture_hash_table[h % TEXTURE_HASH_TABLE_SIZE] add ecx,ebx ;ecx = &context.shared_state.texture_hash_table[h % TEXTURE_HASH_TABLE_SIZE]
mov ebx,[ecx] mov ebx,[ecx]
mov [eax+offs_text_next],ebx mov [eax+GLTexture.next],ebx
mov dword[eax+offs_text_prev],0 ;NULL mov dword[eax+GLTexture.prev],0 ;NULL
cmp dword[eax+offs_text_next],0 ;NULL cmp dword[eax+GLTexture.next],0 ;NULL
je @f je @f
mov [eax+offs_text_prev],eax mov [eax+GLTexture.prev],eax
@@: @@:
mov [ecx],eax mov [ecx],eax
mov ebx,[h] mov ebx,[h]
mov [eax+offs_text_handle],ebx mov [eax+GLTexture.handle],ebx
ret ret
endp endp
@@ -129,11 +129,11 @@ proc glGenTextures uses eax ebx ecx edx esi, n:dword, textures:dword
.cycle_1: ;while (t!=NULL) .cycle_1: ;while (t!=NULL)
or edx,edx or edx,edx
jz .cycle_1_end jz .cycle_1_end
cmp [edx+offs_text_handle],ebx ;if (t.handle>max) cmp [edx+GLTexture.handle],ebx ;if (t.handle>max)
jle @f jle @f
mov ebx,[edx+offs_text_handle] ;max=t.handle mov ebx,[edx+GLTexture.handle] ;max=t.handle
@@: @@:
mov edx,[edx+offs_text_next] ;t=t.next mov edx,[edx+GLTexture.next] ;t=t.next
jmp .cycle_1 jmp .cycle_1
.cycle_1_end: .cycle_1_end:
inc ecx inc ecx
@@ -266,22 +266,22 @@ align 4
mov ecx,[context] mov ecx,[context]
mov ecx,[ecx+GLContext.current_texture] mov ecx,[ecx+GLContext.current_texture]
add ecx,offs_text_images add ecx,GLTexture.images
imul ebx,sizeof.GLTexture imul ebx,sizeof.GLTexture
add ecx,ebx ;ecx = &context.current_texture.images[level] add ecx,ebx ;ecx = &context.current_texture.images[level]
mov [ecx+offs_imag_xsize],edx ;im.xsize=width mov [ecx+GLImage.xsize],edx ;im.xsize=width
mov [ecx+offs_imag_ysize],esi ;im.ysize=height mov [ecx+GLImage.ysize],esi ;im.ysize=height
mov ebx,edx mov ebx,edx
dec ebx dec ebx
shl ebx,ZB_POINT_TEXEL_SIZE shl ebx,ZB_POINT_TEXEL_SIZE
mov [ecx+offs_imag_s_bound],ebx ;im.s_bound = (unsigned int)(width-1) mov [ecx+GLImage.s_bound],ebx ;im.s_bound = (unsigned int)(width-1)
shr ebx,ZB_POINT_TEXEL_SIZE shr ebx,ZB_POINT_TEXEL_SIZE
mov dword[ecx+offs_imag_xsize_log2],ZB_POINT_TEXEL_SIZE mov dword[ecx+GLImage.xsize_log2],ZB_POINT_TEXEL_SIZE
or ebx,ebx or ebx,ebx
jz .set_l2 jz .set_l2
@@: @@:
dec dword[ecx+offs_imag_xsize_log2] dec dword[ecx+GLImage.xsize_log2]
shr ebx,1 shr ebx,1
or ebx,ebx or ebx,ebx
jnz @b jnz @b
@@ -289,18 +289,18 @@ align 4
;im.xsize_log2 = ZB_POINT_TEXEL_SIZE-log_2(width) ;im.xsize_log2 = ZB_POINT_TEXEL_SIZE-log_2(width)
dec esi dec esi
shl esi,ZB_POINT_TEXEL_SIZE shl esi,ZB_POINT_TEXEL_SIZE
mov [ecx+offs_imag_t_bound],esi ;im.t_bound = (unsigned int)(height-1) mov [ecx+GLImage.t_bound],esi ;im.t_bound = (unsigned int)(height-1)
shr esi,ZB_POINT_TEXEL_SIZE shr esi,ZB_POINT_TEXEL_SIZE
inc esi inc esi
cmp dword[ecx+offs_imag_pixmap],0 ;if (im.pixmap!=NULL) cmp dword[ecx+GLImage.pixmap],0 ;if (im.pixmap!=NULL)
je @f je @f
stdcall gl_free, [ecx+offs_imag_pixmap] stdcall gl_free, [ecx+GLImage.pixmap]
@@: @@:
if TGL_FEATURE_RENDER_BITS eq 24 if TGL_FEATURE_RENDER_BITS eq 24
imul edx,esi imul edx,esi
imul edx,3 imul edx,3
stdcall gl_malloc,edx stdcall gl_malloc,edx
mov [ecx+offs_imag_pixmap],eax ;im.pixmap = gl_malloc(width*height*3) mov [ecx+GLImage.pixmap],eax ;im.pixmap = gl_malloc(width*height*3)
or eax,eax ;if(im.pixmap) or eax,eax ;if(im.pixmap)
jz @f jz @f
mov edi,eax mov edi,eax
@@ -314,7 +314,7 @@ if TGL_FEATURE_RENDER_BITS eq 32
imul edx,esi imul edx,esi
shl edx,2 shl edx,2
stdcall gl_malloc,edx stdcall gl_malloc,edx
mov [ecx+offs_imag_pixmap],eax ;im.pixmap = gl_malloc(width*height*4) mov [ecx+GLImage.pixmap],eax ;im.pixmap = gl_malloc(width*height*4)
or eax,eax ;if(im.pixmap) or eax,eax ;if(im.pixmap)
jz @f jz @f
;gl_convertRGB_to_8A8R8G8B(eax,[pixels1],ebx,esi) ;gl_convertRGB_to_8A8R8G8B(eax,[pixels1],ebx,esi)

View File

@@ -86,14 +86,14 @@ endl
fdiv st0,st1 ;st0 = 0.5 fdiv st0,st1 ;st0 = 0.5
fild dword[eax+GLViewport.xsize] fild dword[eax+GLViewport.xsize]
fsub st0,st1 fsub dword[fl_1e_3]
fdiv st0,st2 fdiv st0,st2
fst dword[eax+GLViewport.scale+offs_X] fst dword[eax+GLViewport.scale+offs_X]
fiadd dword[eax+GLViewport.xmin] fiadd dword[eax+GLViewport.xmin]
fstp dword[eax+GLViewport.trans+offs_X] fstp dword[eax+GLViewport.trans+offs_X]
fild dword[eax+GLViewport.ysize] fild dword[eax+GLViewport.ysize]
fsub st0,st1 fsub dword[fl_1e_3]
fdiv st0,st2 fdiv st0,st2
fchs fchs
fst dword[eax+GLViewport.scale+offs_Y] fst dword[eax+GLViewport.scale+offs_Y]
@@ -134,21 +134,13 @@ endl
cmp dword[edx+GLContext.lighting_enabled],0 ;if(context.lighting_enabled) cmp dword[edx+GLContext.lighting_enabled],0 ;if(context.lighting_enabled)
jne .if_0 jne .if_0
cmp dword[eax+GLContext.texture_2d_enabled],0 cmp dword[edx+GLContext.texture_2d_enabled],0
jne .if_0 je @f
jmp @f
align 4 align 4
.if_0: .if_0:
if DEBUG ;context.matrix_stack_ptr[0]
stdcall gl_print_matrix,dword[edx+GLContext.matrix_stack_ptr],4
end if
; precompute inverse modelview ; precompute inverse modelview
lea ebx,[ebp-sizeof.M4] lea ebx,[ebp-sizeof.M4]
stdcall gl_M4_Inv, ebx,dword[edx+GLContext.matrix_stack_ptr] stdcall gl_M4_Inv, ebx,dword[edx+GLContext.matrix_stack_ptr]
if DEBUG ;tmp
stdcall dbg_print,txt_sp,txt_nl
stdcall gl_print_matrix,ebx,4
end if
push ebx push ebx
lea ebx,[edx+GLContext.matrix_model_view_inv] lea ebx,[edx+GLContext.matrix_model_view_inv]
stdcall gl_M4_Transpose, ebx stdcall gl_M4_Transpose, ebx
@@ -253,8 +245,7 @@ pushad
cmp dword[eax+GLContext.lighting_enabled],0 ;if (context.lighting_enabled) cmp dword[eax+GLContext.lighting_enabled],0 ;if (context.lighting_enabled)
jne @f jne @f
cmp dword[eax+GLContext.texture_2d_enabled],0 cmp dword[eax+GLContext.texture_2d_enabled],0
jne @f je .els_0
jmp .els_0
align 4 align 4
@@: @@:
; eye coordinates needed for lighting ; eye coordinates needed for lighting

View File

@@ -51,16 +51,11 @@ struct GLSpecBuf
next dd ? ;struct GLSpecBuf* next dd ? ;struct GLSpecBuf*
ends ends
offs_spec_shininess_i equ 0
offs_spec_last_used equ 4
offs_spec_buf equ 8
offs_spec_next equ 8+4*(SPECULAR_BUFFER_SIZE+1)
struct GLLight struct GLLight
ambient V4 ambient V4
diffuse V4 diffuse V4
specular V4 specular V4
position V4 position V4
spot_direction V3 spot_direction V3
spot_exponent dd ? ;float spot_exponent dd ? ;float
spot_cutoff dd ? ;float spot_cutoff dd ? ;float
@@ -102,9 +97,6 @@ struct GLParamBuffer
next dd ? ;struct GLParamBuffer* next dd ? ;struct GLParamBuffer*
ends ends
offs_gpbu_ops equ 0
offs_gpbu_next equ 4*OP_BUFFER_MAX_SIZE
struct GLList struct GLList
first_op_buffer dd ? ;GLParamBuffer* first_op_buffer dd ? ;GLParamBuffer*
; TODO: extensions for an hash table or a better allocating scheme ; TODO: extensions for an hash table or a better allocating scheme
@@ -133,29 +125,17 @@ struct GLImage
t_bound dd ? ;unsigned int t_bound dd ? ;unsigned int
ends ends
offs_imag_pixmap equ 0
offs_imag_xsize equ 4
offs_imag_ysize equ 8
offs_imag_xsize_log2 equ 12
offs_imag_s_bound equ 16
offs_imag_t_bound equ 20
; textures ; textures
TEXTURE_HASH_TABLE_SIZE equ 256 ;должно быть кратное 2, в коде берется остаток от деления (через and быстрее чем div) TEXTURE_HASH_TABLE_SIZE equ 256 ;должно быть кратное 2, в коде берется остаток от деления (через and быстрее чем div)
struct GLTexture struct GLTexture
images rb sizeof.GLImage * MAX_TEXTURE_LEVELS ;GLImage[MAX_TEXTURE_LEVELS] images rd (sizeof.GLImage * MAX_TEXTURE_LEVELS)/4 ;GLImage[MAX_TEXTURE_LEVELS]
handle dd ? ;int handle dd ? ;int
next dd ? ;struct GLTexture* next dd ? ;struct GLTexture*
prev dd ? ;struct GLTexture* prev dd ? ;struct GLTexture*
ends ends
offs_text_images equ 0
offs_text_handle equ sizeof.GLImage*MAX_TEXTURE_LEVELS
offs_text_next equ 4+offs_text_handle
offs_text_prev equ 8+offs_text_handle
; shared state ; shared state
struct GLSharedState struct GLSharedState

View File

@@ -17,7 +17,7 @@ proc ZB_plot uses eax ebx ecx edx edi, zb:dword, p:dword
mov edi,[ebx+ZBufferPoint.z] mov edi,[ebx+ZBufferPoint.z]
shr edi,ZB_POINT_Z_FRAC_BITS shr edi,ZB_POINT_Z_FRAC_BITS
cmp di,word[ecx] cmp di,word[ecx]
jl .end_f jb .end_f
if TGL_FEATURE_RENDER_BITS eq 24 if TGL_FEATURE_RENDER_BITS eq 24
mov eax,[ebx+ZBufferPoint.r] mov eax,[ebx+ZBufferPoint.r]
mov byte[edx],ah mov byte[edx],ah

View File

@@ -101,7 +101,7 @@ local .end_0
mov [zz],eax mov [zz],eax
mov ebx,[pz] mov ebx,[pz]
cmp ax,word[ebx] cmp ax,word[ebx]
jl .end_0 jb .end_0
RGBPIXEL RGBPIXEL
mov eax,dword[zz] mov eax,dword[zz]
mov ebx,[pz] mov ebx,[pz]
@@ -114,9 +114,7 @@ end if
macro DRAWLINE d_x,d_y,inc_1,inc_2 macro DRAWLINE d_x,d_y,inc_1,inc_2
{ {
local .mz_0
local .mz_1 local .mz_1
local .mz_2
mov eax,d_x mov eax,d_x
mov [n],eax mov [n],eax
@@ -124,26 +122,12 @@ if INTERP_Z eq 1
mov ebx,[p1] mov ebx,[p1]
mov eax,[p2] mov eax,[p2]
mov eax,[eax+ZBufferPoint.z] mov eax,[eax+ZBufferPoint.z]
cmp eax,[ebx+ZBufferPoint.z]
jg .mz_0
je .mz_1
;if(p2.z<p1.z)
sub eax,[ebx+ZBufferPoint.z]
neg eax
inc eax
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mz_2
.mz_0:
sub eax,[ebx+ZBufferPoint.z] sub eax,[ebx+ZBufferPoint.z]
xor edx,edx jz .mz_1
div dword[n] ;if(p2.z!=p1.z)
jmp .mz_2 cdq
idiv dword[n]
.mz_1: .mz_1:
xor eax,eax
.mz_2:
mov [zinc],eax ;zinc=(p2.z-p1.z)/n mov [zinc],eax ;zinc=(p2.z-p1.z)/n
end if end if
shl dword d_y,1 shl dword d_y,1

View File

@@ -102,7 +102,7 @@ local .end_0
mov [zz],eax mov [zz],eax
mov ebx,[pz] mov ebx,[pz]
cmp ax,word[ebx] cmp ax,word[ebx]
jl .end_0 jb .end_0
RGBPIXEL RGBPIXEL
mov eax,dword[zz] mov eax,dword[zz]
mov ebx,[pz] mov ebx,[pz]
@@ -115,18 +115,10 @@ end if
macro DRAWLINE d_x,d_y,inc_1,inc_2 macro DRAWLINE d_x,d_y,inc_1,inc_2
{ {
local .mz_0
local .mz_1 local .mz_1
local .mz_2
local .mr_0
local .mr_1 local .mr_1
local .mr_2
local .mg_0
local .mg_1 local .mg_1
local .mg_2
local .mb_0
local .mb_1 local .mb_1
local .mb_2
mov eax,d_x mov eax,d_x
mov [n],eax mov [n],eax
@@ -135,103 +127,44 @@ local .mb_2
mov ecx,[p2] mov ecx,[p2]
if INTERP_Z eq 1 if INTERP_Z eq 1
mov eax,[ecx+ZBufferPoint.z] mov eax,[ecx+ZBufferPoint.z]
cmp eax,[ebx+ZBufferPoint.z]
jg .mz_0
je .mz_1
;if(p2.z<p1.z)
sub eax,[ebx+ZBufferPoint.z]
neg eax
inc eax
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mz_2
.mz_0:
sub eax,[ebx+ZBufferPoint.z] sub eax,[ebx+ZBufferPoint.z]
xor edx,edx jz .mz_1
div dword[n] ;if(p2.z!=p1.z)
jmp .mz_2 cdq
idiv dword[n]
.mz_1: .mz_1:
xor eax,eax
.mz_2:
mov [zinc],eax ;zinc=(p2.z-p1.z)/n mov [zinc],eax ;zinc=(p2.z-p1.z)/n
end if end if
;ebx=&p1, ecx=&p2 ;ebx=&p1, ecx=&p2
mov eax,[ecx+ZBufferPoint.r] mov eax,[ecx+ZBufferPoint.r]
cmp eax,[ebx+ZBufferPoint.r]
jg .mr_0
je .mr_1
;if(p2.r<p1.r)
sub eax,[ebx+ZBufferPoint.r]
neg eax
inc eax
shl eax,8
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mr_2
.mr_0:
sub eax,[ebx+ZBufferPoint.r] sub eax,[ebx+ZBufferPoint.r]
shl eax,8 jz .mr_1
xor edx,edx ;if(p2.r!=p1.r)
div dword[n] shl eax,8
jmp .mr_2 cdq
idiv dword[n]
.mr_1: .mr_1:
xor eax,eax
.mr_2:
mov [rinc],eax ;rinc=((p2.r-p1.r)<<8)/n mov [rinc],eax ;rinc=((p2.r-p1.r)<<8)/n
mov eax,[ecx+ZBufferPoint.g] mov eax,[ecx+ZBufferPoint.g]
cmp eax,[ebx+ZBufferPoint.g]
jg .mg_0
je .mg_1
;if(p2.g<p1.g)
sub eax,[ebx+ZBufferPoint.g]
neg eax
inc eax
shl eax,8
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mg_2
.mg_0:
sub eax,[ebx+ZBufferPoint.g] sub eax,[ebx+ZBufferPoint.g]
shl eax,8 jz .mg_1
xor edx,edx ;if(p2.g!=p1.g)
div dword[n] shl eax,8
jmp .mg_2 cdq
idiv dword[n]
.mg_1: .mg_1:
xor eax,eax
.mg_2:
mov [ginc],eax ;ginc=((p2.g-p1.g)<<8)/n mov [ginc],eax ;ginc=((p2.g-p1.g)<<8)/n
mov eax,[ecx+ZBufferPoint.b] mov eax,[ecx+ZBufferPoint.b]
cmp eax,[ebx+ZBufferPoint.b]
jg .mb_0
je .mb_1
;if(p2.b<p1.b)
sub eax,[ebx+ZBufferPoint.b]
neg eax
inc eax
shl eax,8
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mb_2
.mb_0:
sub eax,[ebx+ZBufferPoint.b] sub eax,[ebx+ZBufferPoint.b]
shl eax,8 jz .mb_1
xor edx,edx ;if(p2.b!=p1.b)
div dword[n] shl eax,8
jmp .mb_2 cdq
idiv dword[n]
.mb_1: .mb_1:
xor eax,eax
.mb_2:
mov [binc],eax ;binc=((p2.b-p1.b)<<8)/n mov [binc],eax ;binc=((p2.b-p1.b)<<8)/n
shl dword d_y,1 shl dword d_y,1

View File

@@ -58,7 +58,7 @@ end if
mov eax,[z] mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
jl .end_0 jb .end_0
;edi = pp ;edi = pp
mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24 if TGL_FEATURE_RENDER_BITS eq 24
@@ -103,7 +103,7 @@ local .end_0
mov eax,[z] mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
jl .end_0 jb .end_0
;edi = pp ;edi = pp
mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24 if TGL_FEATURE_RENDER_BITS eq 24
@@ -171,7 +171,7 @@ local .end_0
mov eax,[z] mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
jl .end_0 jb .end_0
;edi = pp ;edi = pp
mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24 if TGL_FEATURE_RENDER_BITS eq 24
@@ -251,7 +251,7 @@ local .end_0
mov eax,[z] mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
jl .end_0 jb .end_0
;edi = pp ;edi = pp
mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24 if TGL_FEATURE_RENDER_BITS eq 24

View File

@@ -393,20 +393,9 @@ align 4
mov [dx1],eax ;dx1 = l2.x - l1.x mov [dx1],eax ;dx1 = l2.x - l1.x
cmp edx,0 ;if (dy1 > 0) cmp edx,0 ;if (dy1 > 0)
jle .els_3 jle .els_3
xor edx,edx
cmp eax,0
jl .otr_dx1
shl eax,16 shl eax,16
div dword[dy1] ;eax = (dx1 << 16) / dy1 cdq
jmp .end_3 idiv dword[dy1] ;eax = (dx1 << 16) / dy1
align 4
.otr_dx1:
neg eax
inc eax
shl eax,16
div dword[dy1] ;eax = (-dx1 << 16) / dy1
neg eax
inc eax
jmp .end_3 jmp .end_3
align 4 align 4
.els_3: .els_3:
@@ -505,7 +494,6 @@ end if
.end_upd_l: .end_upd_l:
; compute values for the right edge ; compute values for the right edge
cmp dword[update_right],0 ;if(update_right) cmp dword[update_right],0 ;if(update_right)
je .end_upd_r je .end_upd_r
mov ebx,[pr1] mov ebx,[pr1]
@@ -521,20 +509,9 @@ end if
mov [dy2],edx ;dy2 = pr2.y - pr1.y mov [dy2],edx ;dy2 = pr2.y - pr1.y
cmp edx,0 ;if (dy2 > 0) cmp edx,0 ;if (dy2 > 0)
jle .els_4 jle .els_4
xor edx,edx
cmp eax,0
jl .otr_dx2
shl eax,16 shl eax,16
div dword[dy2] ;eax = (dx2 << 16) / dy2 cdq
jmp .end_4 idiv dword[dy2] ;eax = (dx2 << 16) / dy2
align 4
.otr_dx2:
neg eax
inc eax ;dx2 *= -1
shl eax,16
div dword[dy2] ;eax = (-dx2 << 16) / dy2
neg eax
inc eax
jmp .end_4 jmp .end_4
align 4 align 4
.els_4: .els_4:

View File

@@ -170,6 +170,7 @@ proc tl_key uses ebx ecx edi, tlist:dword
cmp tl_on_press,0 cmp tl_on_press,0
je @f je @f
call tl_on_press call tl_on_press
jmp .no_edit
@@: @@:
cmp ah,byte[ecx+1] ;Space cmp ah,byte[ecx+1] ;Space
jne @f jne @f

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2020. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2025. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; HTTP library for KolibriOS ;; ;; HTTP library for KolibriOS ;;
@@ -2021,15 +2021,15 @@ str_head db 'HEAD ', 0
str_post db 'POST ', 0 str_post db 'POST ', 0
bits_must_escape: bits_must_escape:
dd 0xffffffff ; 00-1F ; bit 31 <======== ========> bit 0 ; bit 0 ===> bit 31
dd 1 shl 0 + 1 shl 2 + 1 shl 3 + 1 shl 5 + 1 shl 28 + 1 shl 30 ; "#%<> dd 0xffffffff ;00-1F
dd 1 shl 27 + 1 shl 28 + 1 shl 29 + 1 shl 30 ;[\]^ dd 11111100_00000000_10011111_11111111b ; !"#$%&'()*+,/:;<=>?
dd 1 shl 0 + 1 shl 27 + 1 shl 28 + 1 shl 29 + 1 shl 31 ;`{|} DEL dd 01111000_00000000_00000000_00000001b ;@[\]^
dd 10111000_00000000_00000000_00000001b ;`{|} DEL
dd 0xffffffff dd 0xffffffff ;80-9F
dd 0xffffffff dd 0xffffffff ;A0-BF
dd 0xffffffff dd 0xffffffff ;C0-DF
dd 0xffffffff dd 0xffffffff ;E0-FF
str_hex: str_hex:
db '0123456789ABCDEF' db '0123456789ABCDEF'

View File

@@ -13,7 +13,7 @@ sz app_board ,'/sys/develop/board',0
sz app_tinypad ,'/sys/tinypad',0 sz app_tinypad ,'/sys/tinypad',0
sz app_docpak ,'/sys/docpack',0 sz app_docpak ,'/sys/docpack',0
sz sysfuncs_param,'f',0 sz sysfuncs_param,'e',0
include 'tp-tables.inc' include 'tp-tables.inc'
include 'tp-locale.inc' include 'tp-locale.inc'

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

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")
tup.rule("PrMK.asm", FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "PrMK") tup.rule("PrMK.asm", FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "PrMK")

View File

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

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